Commit 5167cf20 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.3-20001203

parent a1995ea7
DOXYGEN Version 1.2.3-20001126
DOXYGEN Version 1.2.3-20001203
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (26 November 2000)
Dimitri van Heesch (03 December 2000)
DOXYGEN Version 1.2.3-20001126
DOXYGEN Version 1.2.3-20001203
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (26 November 2000)
Dimitri van Heesch (03 December 2000)
1.2.3-20001126
1.2.3-20001203
......@@ -453,6 +453,23 @@ void configStrToVal()
Config::enumValuesPerLine=cols;
}
if (treeViewWidthString.isEmpty())
{
Config::treeViewWidth=250;
}
else
{
bool ok;
int width = treeViewWidthString.toInt(&ok);
if (!ok || width<0 || width>1500)
{
warn_cont("Warning: argument of TREEVIEW_WIDTH is not a valid number in the range [0..1500]!\n"
"Using the default of 250!\n");
width = 250;
}
Config::treeViewWidth=width;
}
if (maxDotGraphWidthString.isEmpty())
{
Config::maxDotGraphWidth=1024;
......
......@@ -1313,6 +1313,16 @@ void init()
"or Internet explorer 4.0+). "
);
addDependency("ftvHelpFlag","generateHtml");
ConfigInt::add( "treeViewWidth",
"TREEVIEW_WIDTH",
"250",
"What is the width of the treeview panel?",
"If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \n"
"used to set the initial width (in pixels) of the frame in which the tree \n"
"is shown. \n",
0,1500
);
addDependency("treeViewWidth","generateHtml");
// TODO: integrate this option
// ConfigBool::add( "htmlHelpGroupsOnly",
......
......@@ -13,7 +13,7 @@
# input used in their production; they are not affected by this license.
all: FORCE
@xcopy /s /q ..\examples ..\html\examples
@xcopy /s /q /i ..\examples ..\html\examples
set DOXYGEN_DOCDIR=.
set VERSION=$(VERSION)
$(DOXYGEN)\bin\doxygen
......
......@@ -110,6 +110,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_generate_tagfile GENERATE_TAGFILE
<li> \refitem cfg_generate_testlist GENERATE_TESTLIST
<li> \refitem cfg_generate_todolist GENERATE_TODOLIST
<li> \refitem cfg_generate_treeview GENERATE_TREEVIEW
<li> \refitem cfg_graphical_hierarchy GRAPHICAL_HIERARCHY
<li> \refitem cfg_have_dot HAVE_DOT
<li> \refitem cfg_hide_scope_names HIDE_SCOPE_NAMES
......@@ -162,6 +163,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_strip_from_path STRIP_FROM_PATH
<li> \refitem cfg_tab_size TAB_SIZE
<li> \refitem cfg_tagfiles TAGFILES
<li> \refitem cfg_treeview_width TREEVIEW_WIDTH
<li> \refitem cfg_verbatim_headers VERBATIM_HEADERS
<li> \refitem cfg_warn_format WARN_FORMAT
<li> \refitem cfg_warn_if_undocumented WARN_IF_UNDOCUMENTED
......@@ -737,6 +739,22 @@ followed by the descriptions of the tags grouped by category.
This tag can be used to set the number of enum values (range [1..20])
that doxygen will group on one line in the generated HTML documentation.
\anchor cfg_generate_treeview
<dt>\c GENERATE_TREEVIEW <dd>
\addindex GENERATE_TREEVIEW
If the \c GENERATE_TREEVIEW tag is set to YES, a side pannel will be
generated containing a tree-like index structure (just like the one that
is generated for HTML Help). For this to work a browser that supports
JavaScript and frames is required (for instance Netscape 4.0+
or Internet explorer 4.0+).
\anchor cfg_treeview_width
<dt>\c TREEVIEW_WIDTH <dd>
\addindex TREEVIEW_WIDTH
If the treeview is enabled (see \c GENERATE_TREEVIEW) then this tag can be
used to set the initial width (in pixels) of the frame in which the tree
is shown.
</dl>
\subsection latex_output LaTeX related options
\anchor cfg_generate_latex
......
......@@ -151,7 +151,7 @@ Here is an example of a C header named \c structcmd.h that is documented
using structural commands:
\verbinclude structcmd.h
\htmlonly
Click <a href="$(DOXYGEN_DOCDIR)/examples/structcmd/html/structcmd.h.html">here</a>
Click <a href="$(DOXYGEN_DOCDIR)/examples/structcmd/html/structcmd_h.html">here</a>
for the corresponding HTML documentation that is generated by doxygen.
\endhtmlonly
......
......@@ -169,8 +169,9 @@ Thanks go to:
<li>Jens Breitenstein, Christophe Bordeaux, Samuel Hägglund, Xet Erixon,
Vlastimil Havran, Petr Prikryl, Ahmed Also Faisal, Alessandro Falappa,
Kenji Nagamatsu, Francisco Oltra Thennet, Olli Korhonen,
Boris Bralo, Nickolay Semyonov, and Grzegorz Kowal for providing
translations into various languages.
Boris Bralo, Nickolay Semyonov, Richard Kim, Földvári György,
Grzegorz Kowal, and Wang Weihan
for providing translations into various languages.
<li>many, many others for suggestions, patches and bug reports.
</ul>
*/
......
Name: doxygen
Version: 1.2.3-20001126
Version: 1.2.3-20001203
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -66,8 +66,8 @@ protected:
bool del_item; // default FALSE
virtual Item newItem( Item ); // create object
virtual void deleteItem( Item ); // delete object
virtual Item newItem( Item ); // create object
virtual void deleteItem( Item ); // delete object
};
......
// Empty leaves all features enabled. See doc/html/features.html for choices.
// Note that disabling some features will produce a libqt that is not
// compatible with other libqt builds. Such modifications are only
// supported on Qt/Embedded where reducing the library size is important
// and where the application-suite is often a fixed set.
#define QT_DLL // Internal
// Everything
......@@ -183,7 +183,7 @@ int qstricmp( const char *str1, const char *str2 )
int res;
uchar c;
if ( !s1 || !s2 )
return s1 == s1 ? 0 : (int)((long)s2 - (long)s1);
return s1 == s2 ? 0 : (int)((long)s2 - (long)s1);
for ( ; !(res = (c=tolower(*s1)) - tolower(*s2)); s1++, s2++ )
if ( !c ) // strings are equal
break;
......
......@@ -355,7 +355,7 @@ bool QDate::setYMD( int y, int m, int d )
}
jd = greg2jul( y, m, d );
#if defined(DEBUG)
ASSERT( year() == y && month() == m && day() == d );
ASSERT( year() == (y > 99 ? y : 1900+y) && month() == m && day() == d );
#endif
return TRUE;
}
......
......@@ -241,7 +241,7 @@ QDir::~QDir()
is using a relative or an absolute file path. You can call the function
convertToAbs() to convert a relative QDir to an absolute one.
\sa path(), absPath(), exists, cleanDirPath(), dirName(),
\sa path(), absPath(), exists(), cleanDirPath(), dirName(),
absFilePath(), isRelative(), convertToAbs()
*/
......@@ -469,7 +469,6 @@ bool QDir::cdUp()
/*!
\fn QString QDir::nameFilter() const
Returns the string set by setNameFilter()
\sa setNameFilter()
*/
/*!
......@@ -481,7 +480,7 @@ bool QDir::cdUp()
".cpp" and all files ending with ".h", you simply call
dir.setNameFilter("*.cpp *.h") or dir.setNameFilter("*.cpp;*.h")
\sa nameFilter()
\sa nameFilter(), setFilter()
*/
void QDir::setNameFilter( const QString &nameFilter )
......@@ -495,7 +494,6 @@ void QDir::setNameFilter( const QString &nameFilter )
/*!
\fn QDir::FilterSpec QDir::filter() const
Returns the value set by setFilter()
\sa setFilter()
*/
/*! \enum QDir::FilterSpec
......@@ -533,7 +531,8 @@ void QDir::setNameFilter( const QString &nameFilter )
Sets the filter used by entryList() and entryInfoList(). The filter is used
to specify the kind of files that should be returned by entryList() and
entryInfoList().
\sa nameFilter()
\sa filter(), setNameFilter()
*/
void QDir::setFilter( int filterSpec )
......@@ -1030,7 +1029,20 @@ QStringList qt_makeFilterList( const QString &filter )
QString s = *it;
if ( s[ (int)s.length() - 1 ] == ';' )
s.remove( s.length() - 1, 1 );
if ( s[0] == '\"' ) {
s.remove( 0, 1 );
while( ++it != lst.end() ) {
QString s2 = *it;
s += " "+s2;
if ( s2[(int)s2.length() -1] == '\"' ) {
s.remove( s.length() -1, 1 );
break;
}
}
}
lst2 << s;
if ( it == lst.end() )
break;
}
return lst2;
}
......
......@@ -243,23 +243,25 @@ bool QDir::readDirEntries( const QString &nameFilter,
}
// Sort...
QDirSortItem* si= new QDirSortItem[fiList->count()];
QFileInfo* itm;
i=0;
for (itm = fiList->first(); itm; itm = fiList->next())
si[i++].item = itm;
qt_cmp_si_sortSpec = sortSpec;
qsort( si, i, sizeof(si[0]), qt_cmp_si );
// put them back in the list
fiList->setAutoDelete( FALSE );
fiList->clear();
int j;
for ( j=0; j<i; j++ ) {
fiList->append( si[j].item );
fList->append( si[j].item->fileName() );
if(fiList->count()) {
QDirSortItem* si= new QDirSortItem[fiList->count()];
QFileInfo* itm;
i=0;
for (itm = fiList->first(); itm; itm = fiList->next())
si[i++].item = itm;
qt_cmp_si_sortSpec = sortSpec;
qsort( si, i, sizeof(si[0]), qt_cmp_si );
// put them back in the list
fiList->setAutoDelete( FALSE );
fiList->clear();
int j;
for ( j=0; j<i; j++ ) {
fiList->append( si[j].item );
fList->append( si[j].item->fileName() );
}
delete [] si;
fiList->setAutoDelete( TRUE );
}
delete [] si;
fiList->setAutoDelete( TRUE );
if ( filterSpec == (FilterSpec)filtS && sortSpec == (SortSpec)sortS &&
nameFilter == nameFilt )
......
This diff is collapsed.
......@@ -236,7 +236,7 @@ bool QFile::open( int m )
} else {
length = (int)st.st_size;
ioIndex = (flags() & IO_Append) == 0 ? 0 : length;
if ( (flags() & !IO_Truncate) && length == 0 && isReadable() ) {
if ( !(flags()&IO_Truncate) && length == 0 && isReadable() ) {
// try if you can read from it (if you can, it's a sequential
// device; e.g. a file in the /proc filesystem)
int c = getch();
......@@ -300,13 +300,13 @@ bool QFile::open( int m, FILE *f )
STATBUF st;
FSTAT( FILENO(fh), &st );
ioIndex = (int)ftell( fh );
if ( (st.st_mode & STAT_MASK) != STAT_REG ) {
if ( (st.st_mode & STAT_MASK) != STAT_REG || f == stdin ) { //stdin is non seekable
// non-seekable
setType( IO_Sequential );
length = INT_MAX;
} else {
length = (int)st.st_size;
if ( (flags() & !IO_Truncate) && length == 0 && isReadable() ) {
if ( !(flags()&IO_Truncate) && length == 0 && isReadable() ) {
// try if you can read from it (if you can, it's a sequential
// device; e.g. a file in the /proc filesystem)
int c = getch();
......@@ -350,7 +350,7 @@ bool QFile::open( int m, int f )
STATBUF st;
FSTAT( fd, &st );
ioIndex = (int)LSEEK(fd, 0, SEEK_CUR);
if ( (st.st_mode & STAT_MASK) != STAT_REG ) {
if ( (st.st_mode & STAT_MASK) != STAT_REG || f == 0 ) { // stdin is not seekable...
// non-seekable
setType( IO_Sequential );
length = INT_MAX;
......@@ -365,6 +365,7 @@ bool QFile::open( int m, int f )
setType( IO_Sequential );
length = INT_MAX;
}
resetStatus();
}
}
return TRUE;
......@@ -466,18 +467,31 @@ int QFile::readBlock( char *p, uint len )
return -1;
}
#endif
int nread; // number of bytes read
if ( isRaw() ) { // raw file
nread = READ( fd, p, len );
if ( len && nread <= 0 ) {
nread = 0;
setStatus(IO_ReadError);
int nread = 0; // number of bytes read
if ( !ungetchBuffer.isEmpty() ) {
// need to add these to the returned string.
int l = ungetchBuffer.length();
while( nread < l ) {
*p = ungetchBuffer[ l - nread - 1 ];
p++;
nread++;
}
} else { // buffered file
nread = fread( p, 1, len, fh );
if ( (uint)nread != len ) {
if ( ferror( fh ) || nread==0 )
ungetchBuffer.truncate( l - nread );
}
if ( nread < (int)len ) {
if ( isRaw() ) { // raw file
nread += READ( fd, p, len-nread );
if ( len && nread <= 0 ) {
nread = 0;
setStatus(IO_ReadError);
}
} else { // buffered file
nread += fread( p, 1, len-nread, fh );
if ( (uint)nread != len ) {
if ( ferror( fh ) || nread==0 )
setStatus(IO_ReadError);
}
}
}
ioIndex += nread;
......
......@@ -39,8 +39,8 @@
#define QGLOBAL_H
#define QT_VERSION 220
#define QT_VERSION_STR "2.2.0"
#define QT_VERSION 222
#define QT_VERSION_STR "2.2.2"
//
......@@ -98,9 +98,6 @@
#define _OS_RELIANTUNIX_
#elif defined(linux) || defined(__linux) || defined(__linux__)
#define _OS_LINUX_
#if defined(__alpha__) || defined(__alpha)
#define _OS_ALPHA_LINUX_
#endif
#elif defined(__FreeBSD__)
#define _OS_FREEBSD_
#elif defined(__NetBSD__)
......@@ -153,18 +150,19 @@
//
// SYM - Symantec C++ for both PC and Macintosh
// MPW - MPW C++
// MWERKS - Metroworks CodeWarrior
// MWERKS - Metrowerks CodeWarrior
// MSVC - Microsoft Visual C/C++
// BOR - Borland/Turbo C++
// WAT - Watcom C++
// GNU - GNU C++
// COMEAU - Comeau C++
// EDG - Edison Design Group C++
// OC - CenterLine ObjectCenter C++
// OC - CenterLine C++
// SUN - Sun C++
// DEC - DEC C++
// HP - HPUX C++
// USLC - SCO UnixWare C++
// USLC - SCO UnixWare7 C++
// CDS - Reliant C++
// KAI - KAI C++
//
......@@ -175,6 +173,7 @@
#define _CC_SYM_
#elif defined( __KCC )
#define _CC_KAI_
#define _CC_EDG_
#define Q_HAS_BOOL_TYPE
#elif defined(applec)
#define _CC_MPW_
......@@ -196,6 +195,9 @@
#define Q_TEMPLATE_NEEDS_EXPLICIT_CONVERSION
#define Q_SPURIOUS_NON_VOID_WARNING
#endif
#if __GNUC__ == 2 && __GNUC_MINOR__ >= 95
#define Q_DELETING_VOID_UNDEFINED
#endif
#if __GNUC__ == 2 && __GNUC_MINOR__ >= 96
#define Q_DELETING_VOID_UNDEFINED
#define Q_FP_CCAST_BROKEN
......@@ -206,9 +208,17 @@
#elif defined(__xlC__)
#define _CC_XLC_
#define Q_FULL_TEMPLATE_INSTANTIATION
#if __xlC__ >= 0x400
#define Q_HAS_BOOL_TYPE
#endif
#if __xlC__ <= 0x0306
#define Q_TEMPLATE_NEEDS_EXPLICIT_CONVERSION
#endif
#elif defined(como40)
#define _CC_EDG_
#define _CC_COMEAU_
#define Q_HAS_BOOL_TYPE
#define Q_C_CALLBACKS
#elif defined(__USLC__)
#define _CC_USLC_
#ifdef __EDG__ // UnixWare7
......@@ -216,19 +226,24 @@
#endif
#elif defined(__EDG) || defined(__EDG__)
// one observed on SGI DCC, the other documented
#define Q_HAS_BOOL_TYPE
#define _CC_EDG_
#elif defined(OBJECTCENTER) || defined(CENTERLINE_CLPP)
#define _CC_OC_
#if defined(_BOOL)
#define Q_HAS_BOOL_TYPE
#endif
#elif defined(__SUNPRO_CC)
#define _CC_SUN_
#if __SUNPRO_CC >= 0x500
#define Q_HAS_BOOL_TYPE
#define Q_SPARCWORKS_FUNCP_BUG
#define Q_FP_CCAST_BROKEN
#define Q_C_CALLBACKS
#endif
#elif defined(__DECCXX)
#define _CC_DEC_
#if __DECCXX_VER >= 60060005
#define Q_HAS_BOOL_TYPE
#endif
#elif defined(__CDS__)
#define _CC_CDS_
#define Q_HAS_BOOL_TYPE
......@@ -248,10 +263,6 @@
#error "Qt has not been tested with this compiler - talk to qt-bugs@trolltech.com"
#endif
#if defined(_CC_COMEAU_)
#define Q_C_CALLBACKS
#endif
#ifndef Q_PACKED
#define Q_PACKED
#endif
......@@ -302,13 +313,7 @@
#define Q_HAS_BOOL_TYPE
#elif _MSC_VER >= 1100 || __BORLANDC__ >= 0x500
#define Q_HAS_BOOL_TYPE
#elif defined(_CC_COMEAU_)
#define Q_HAS_BOOL_TYPE
#elif defined(sgi) && ( (_COMPILER_VERSION >= 710) || defined(_BOOL) )
#define Q_HAS_BOOL_TYPE
#elif defined(__DECCXX) && (__DECCXX_VER >= 60060005)
#define Q_HAS_BOOL_TYPE
#elif defined(_AIX) && (__xlC__ >= 0x500)
#elif defined(sgi) && defined(_BOOL)
#define Q_HAS_BOOL_TYPE
#endif
......@@ -478,6 +483,8 @@ Q_EXPORT bool qSysInfo( int *wordSize, bool *bigEndian );
#pragma warning(disable: 4275)
#pragma warning(disable: 4514)
#pragma warning(disable: 4800)
#pragma warning(disable: 4097)
#pragma warning(disable: 4706)
#elif defined(_CC_BOR_)
#pragma option -w-inl
#pragma option -w-aus
......
......@@ -425,8 +425,10 @@ void QIODevice::setStatus( int s )
<li>\c IO_Append sets the file index to the end of the file.
<li>\c IO_Truncate truncates the file.
<li>\c IO_Translate enables carriage returns and linefeed translation
for text files under MS-DOS, Window, OS/2 and Macintosh. Cannot be
combined with \c IO_Raw.
for text files under MS-DOS, Window, OS/2 and Macintosh. On Unix systems
this flag has no effect. Use with caution as it will also transform every linefeed
written to the file into a CRLF pair. This is likely to corrupt your file when
writing binary data to it. Cannot be combined with \c IO_Raw.
</ul>
This virtual function must be reimplemented by all subclasses.
......
......@@ -105,7 +105,6 @@ template<class type> inline void QList<type>::deleteItem( QCollection::Item d )
}
template<class type> class Q_EXPORT QListIterator : public QGListIterator
{
public:
......
/****************************************************************************
**
**
** Implementation of QMap
**
** Created : 990406
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of the tools module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qmap.h"
typedef QMapNodeBase* NodePtr;
typedef QMapNodeBase Node;
void QMapPrivateBase::rotateLeft( NodePtr x, NodePtr& root)
{
NodePtr y = x->right;
x->right = y->left;
if (y->left !=0)
y->left->parent = x;
y->parent = x->parent;
if (x == root)
root = y;
else if (x == x->parent->left)
x->parent->left = y;
else
x->parent->right = y;
y->left = x;
x->parent = y;
}
void QMapPrivateBase::rotateRight( NodePtr x, NodePtr& root )
{
NodePtr y = x->left;
x->left = y->right;
if (y->right != 0)
y->right->parent = x;
y->parent = x->parent;
if (x == root)
root = y;
else if (x == x->parent->right)
x->parent->right = y;
else
x->parent->left = y;
y->right = x;
x->parent = y;
}
void QMapPrivateBase::rebalance( NodePtr x, NodePtr& root)
{
x->color = Node::Red;
while ( x != root && x->parent->color == Node::Red ) {
if ( x->parent == x->parent->parent->left ) {
NodePtr y = x->parent->parent->right;
if (y && y->color == Node::Red) {
x->parent->color = Node::Black;
y->color = Node::Black;
x->parent->parent->color = Node::Red;
x = x->parent->parent;
} else {
if (x == x->parent->right) {
x = x->parent;
rotateLeft( x, root );
}
x->parent->color = Node::Black;
x->parent->parent->color = Node::Red;
rotateRight (x->parent->parent, root );
}
} else {
NodePtr y = x->parent->parent->left;
if ( y && y->color == Node::Red ) {
x->parent->color = Node::Black;
y->color = Node::Black;
x->parent->parent->color = Node::Red;
x = x->parent->parent;
} else {
if (x == x->parent->left) {
x = x->parent;
rotateRight( x, root );
}
x->parent->color = Node::Black;
x->parent->parent->color = Node::Red;
rotateLeft( x->parent->parent, root );
}
}
}
root->color = Node::Black;
}
NodePtr QMapPrivateBase::removeAndRebalance( NodePtr z, NodePtr& root,
NodePtr& leftmost,
NodePtr& rightmost )
{
NodePtr y = z;
NodePtr x;
NodePtr x_parent;
if (y->left == 0) {
x = y->right;
} else {
if (y->right == 0)
x = y->left;
else
{
y = y->right;
while (y->left != 0)
y = y->left;
x = y->right;
}
}
if (y != z) {
z->left->parent = y;
y->left = z->left;
if (y != z->right) {
x_parent = y->parent;
if (x)
x->parent = y->parent;
y->parent->left = x;
y->right = z->right;
z->right->parent = y;
} else {
x_parent = y;
}
if (root == z)
root = y;
else if (z->parent->left == z)
z->parent->left = y;
else
z->parent->right = y;
y->parent = z->parent;
// Swap the colors
Node::Color c = y->color;
y->color = z->color;
z->color = c;
y = z;
} else {
x_parent = y->parent;
if (x)
x->parent = y->parent;
if (root == z)
root = x;
else if (z->parent->left == z)
z->parent->left = x;
else
z->parent->right = x;
if ( leftmost == z ) {
if (z->right == 0)
leftmost = z->parent;
else
leftmost = x->minimum();
}
if (rightmost == z) {
if (z->left == 0)
rightmost = z->parent;
else
rightmost = x->maximum();
}
}
if (y->color != Node::Red) {
while (x != root && (x == 0 || x->color == Node::Black)) {
if (x == x_parent->left) {
NodePtr w = x_parent->right;
if (w->color == Node::Red) {
w->color = Node::Black;
x_parent->color = Node::Red;
rotateLeft(x_parent, root);
w = x_parent->right;
}
if ((w->left == 0 || w->left->color == Node::Black) &&
(w->right == 0 || w->right->color == Node::Black)) {
w->color = Node::Red;
x = x_parent;
x_parent = x_parent->parent;
} else {
if (w->right == 0 || w->right->color == Node::Black) {
if (w->left)
w->left->color = Node::Black;
w->color = Node::Red;
rotateRight(w, root);
w = x_parent->right;
}
w->color = x_parent->color;
x_parent->color = Node::Black;
if (w->right)
w->right->color = Node::Black;
rotateLeft(x_parent, root);
break;
}
} else {
NodePtr w = x_parent->left;
if (w->color == Node::Red) {
w->color = Node::Black;
x_parent->color = Node::Red;
rotateRight(x_parent, root);
w = x_parent->left;
}
if ((w->right == 0 || w->right->color == Node::Black) &&
(w->left == 0 || w->left->color == Node::Black)) {
w->color = Node::Red;
x = x_parent;
x_parent = x_parent->parent;
} else {
if (w->left == 0 || w->left->color == Node::Black) {
if (w->right)
w->right->color = Node::Black;
w->color = Node::Red;
rotateLeft(w, root);
w = x_parent->left;
}
w->color = x_parent->color;
x_parent->color = Node::Black;
if (w->left)
w->left->color = Node::Black;
rotateRight(x_parent, root);
break;
}
}
}
if (x)
x->color = Node::Black;
}
return y;
}
This diff is collapsed.
// These modules are licensed to you
#define QT_MODULE_TOOLS
#define QT_MODULE_KERNEL
#define QT_MODULE_WIDGETS
#define QT_MODULE_DIALOGS
#define QT_MODULE_ICONVIEW
#define QT_MODULE_WORKSPACE
#define QT_MODULE_NETWORK
#define QT_MODULE_CANVAS
#define QT_MODULE_TABLE
#define QT_MODULE_XML
......@@ -367,8 +367,6 @@ __END__
// START OF GENERATED DATA
#ifndef QT_NO_UNICODETABLES
static const Q_UINT8 ui_00[] = {
10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10,
......@@ -404,6 +402,8 @@ static const Q_UINT8 ui_00[] = {
16, 16, 16, 16, 16, 16, 16, 16,
};
#ifndef QT_NO_UNICODETABLES
static const Q_UINT8 ui_01[] = {
15, 16, 15, 16, 15, 16, 15, 16,
15, 16, 15, 16, 15, 16, 15, 16,
......@@ -11100,19 +11100,7 @@ QChar::Category QChar::category() const
#else
// ### just ASCII
if ( rw == 0 ) {
if ( cl >= '0' && cl <='9' )
return Number_DecimalDigit;
if ( cl >= 'a' && cl <='z' )
return Letter_Lowercase;
if ( cl >= 'A' && cl <='Z' )
return Letter_Uppercase;
if ( cl == ' ' )
return Separator_Space;
if ( cl == '\n' )
return Separator_Line;
if ( cl < ' ' )
return Other_Control;
return Symbol_Other; //#######
return (Category)(ui_00[cell()]);
}
return Letter_Uppercase; //#######
#endif
......@@ -12241,6 +12229,7 @@ QString::QString( const QChar* unicode, uint length )
{
if ( !unicode && !length ) {
d = shared_null ? shared_null : makeSharedNull();
d->ref();
} else {
QChar* uc = QT_ALLOC_QCHAR_VEC( length );
if ( unicode )
......@@ -12295,6 +12284,8 @@ void QString::real_detach()
void QString::deref()
{
if ( d->deref() ) {
if ( d == shared_null )
shared_null = 0;
delete d;
d = 0; // helps debugging
}
......@@ -12749,7 +12740,7 @@ QString &QString::sprintf( const char* cformat, ... )
case 2: ::sprintf( out, in, width, decimals, value ); break;
}
} break;
case 'e': case 'E': case 'f': case 'g': {
case 'e': case 'E': case 'f': case 'g': case 'G': {
double value = va_arg(ap, double);
switch (params) {
case 0: ::sprintf( out, in, value ); break;
......@@ -13896,6 +13887,13 @@ ushort QString::toUShort( bool *ok, int base ) const
/*!
Returns the string converted to a <code>int</code> value.
\code
QString str("FF");
bool ok;
int hex = str.toInt( &ok, 16 ); // will return 255, and ok set to TRUE
int dec = str.toInt( &ok, 10 ); // will return 0, and ok set to FALSE
\endcode
If \a ok is non-null, \a *ok is set to TRUE if there are no
conceivable errors, and FALSE if the string is not a number at all,
or if it has trailing garbage.
......@@ -14146,8 +14144,8 @@ QString QString::number( uint n, int base )
}
/*!
This static function returns the printed value of \a n, formatted in the \f
format with \a prec precision.
This static function returns the printed value of \a n, formatted in the
\a f format with \a prec precision.
\a f can be 'f', 'F', 'e', 'E', 'g' or 'G', all of which have the
same meaning as for sprintf().
......@@ -14574,6 +14572,7 @@ QString& QString::setUnicode( const QChar *unicode, uint len )
if ( d != shared_null ) { // beware of nullstring being set to nullstring
deref();
d = shared_null ? shared_null : makeSharedNull();
d->ref();
}
} else if ( d->count != 1 || len > d->maxl ||
( len*4 < d->maxl && d->maxl > 4 ) ) { // detach, grown or shrink
......@@ -14947,7 +14946,9 @@ QDataStream &operator<<( QDataStream &s, const QString &str )
QDataStream &operator>>( QDataStream &s, QString &str )
{
#ifdef QT_QSTRING_UCS_4
#if defined(_CC_GNU_)
#warning "operator>> not working properly"
#endif
#endif
if ( s.version() == 1 ) {
QCString l;
......
......@@ -646,8 +646,11 @@ inline QString::QString() :
//
inline QString::~QString()
{
if ( d->deref() )
if ( d->deref() ) {
if ( d == shared_null )
shared_null = 0;
d->deleteSelf();
}
}
inline QString &QString::operator=( QChar c )
......
This diff is collapsed.
This diff is collapsed.
......@@ -57,7 +57,10 @@ public:
UnicodeReverse, RawUnicode, UnicodeUTF8 };
void setEncoding( Encoding );
#ifndef QT_NO_TEXTCODEC
void setCodec( QTextCodec* );
#endif
// Encoding encoding() const { return cmode; }
QTextStream();
......@@ -89,6 +92,7 @@ public:
QTextStream &operator>>( QString & );
QTextStream &operator>>( QCString & );
QTextStream &operator<<( QChar );
QTextStream &operator<<( char );
QTextStream &operator<<( signed short );
QTextStream &operator<<( unsigned short );
......
......@@ -36,7 +36,11 @@ HEADERS = qarray.h \
qtextstream.h \
qtl.h \
qvaluelist.h \
qvector.h
qvector.h \
qxml.h \
qvaluestack.h \
qmap.h \
qmodules.h
SOURCES = qbuffer.cpp \
qcollection.cpp \
qcstring.cpp \
......@@ -55,7 +59,9 @@ SOURCES = qbuffer.cpp \
qstring.cpp \
qtextstream.cpp \
qtextcodec.cpp \
qstringlist.cpp
qstringlist.cpp \
qxml.cpp \
qmap.cpp
unix:SOURCES += qfile_unix.cpp \
qdir_unix.cpp \
......
/****************************************************************************
**
**
** Definition of QValueStack class
**
** Created : 990925
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of the tools module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#ifndef QVALUESTACK_H
#define QVALUESTACK_H
#ifndef QT_H
#include "qvaluelist.h"
#endif // QT_H
template<class T>
class Q_EXPORT QValueStack : public QValueList<T>
{
public:
QValueStack() {}
~QValueStack() {}
void push( const T& d ) { append(d); }
T pop()
{
T elem( this->last() );
if ( !this->isEmpty() )
remove( this->fromLast() );
return elem;
}
T& top() { return this->last(); }
const T& top() const { return this->last(); }
};
#endif
This diff is collapsed.
This diff is collapsed.
......@@ -604,6 +604,7 @@ ArgumentList *ClassDef::outerTemplateArguments() const
int ti;
ClassDef *pcd=0;
int pi=0;
if (tempArgs) return tempArgs;
// find the outer most class scope
while ((ti=name().find("::",pi))!=-1 &&
(pcd=getClass(name().left(ti)))==0
......@@ -612,10 +613,7 @@ ArgumentList *ClassDef::outerTemplateArguments() const
{
return pcd->templateArguments();
}
else
{
return tempArgs;
}
return 0;
}
......
/* This file was generated by configgen on Sat Nov 25 21:38:08 2000
/* This file was generated by configgen on Sun Dec 3 18:27:54 2000
* from config_templ.h
*
* DO NOT EDIT!
......@@ -98,6 +98,7 @@ struct Config
static bool noIndexFlag; // generate condensed index flag
static int enumValuesPerLine; // number of enum values that are put on one line
static bool ftvHelpFlag; // should a folder tree view be generated?
static int treeViewWidth; // What is the width of the treeview panel?
static bool generateLatex; // generate Latex output
static QCString latexOutputDir; // the directory to put the Latex files
static bool compactLatexFlag; // generate compact LaTeX documentation.
......
/* This file was generated by configgen on Sat Nov 25 21:38:08 2000
/* This file was generated by configgen on Sun Dec 3 19:18:43 2000
* from config_templ.l
*
* DO NOT EDIT!
......@@ -135,6 +135,7 @@ bool Config::htmlHelpFlag = FALSE;
bool Config::noIndexFlag = FALSE;
int Config::enumValuesPerLine = 4;
bool Config::ftvHelpFlag = FALSE;
int Config::treeViewWidth = 250;
bool Config::generateLatex = TRUE;
QCString Config::latexOutputDir = "latex";
bool Config::compactLatexFlag = FALSE;
......@@ -215,6 +216,7 @@ static int includeDepth;
static QCString tabSizeString;
static QCString colsInAlphaIndexString;
static QCString enumValuesPerLineString;
static QCString treeViewWidthString;
static QCString maxDotGraphWidthString;
static QCString maxDotGraphHeightString;
......@@ -413,6 +415,7 @@ static void readIncludeFile(const char *incName)
<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; }
<Start>"ENUM_VALUES_PER_LINE"[ \t]*"=" { BEGIN(GetString); s=&enumValuesPerLineString; s->resize(0); }
<Start>"GENERATE_TREEVIEW"[ \t]*"=" { BEGIN(GetBool); b=&Config::ftvHelpFlag; }
<Start>"TREEVIEW_WIDTH"[ \t]*"=" { BEGIN(GetString); s=&treeViewWidthString; s->resize(0); }
<Start>"GENERATE_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::generateLatex; }
<Start>"LATEX_OUTPUT"[ \t]*"=" { BEGIN(GetString); s=&Config::latexOutputDir; s->resize(0); }
<Start>"COMPACT_LATEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::compactLatexFlag; }
......@@ -713,6 +716,7 @@ void dumpConfig()
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("enumValuesPerLine=`%d'\n",Config::enumValuesPerLine);
printf("ftvHelpFlag=`%d'\n",Config::ftvHelpFlag);
printf("treeViewWidth=`%d'\n",Config::treeViewWidth);
printf("# configuration options related to the LaTeX output\n");
printf("generateLatex=`%d'\n",Config::generateLatex);
printf("latexOutputDir=`%s'\n",Config::latexOutputDir.data());
......@@ -882,6 +886,7 @@ void Config::init()
Config::noIndexFlag = FALSE;
Config::enumValuesPerLine = 4;
Config::ftvHelpFlag = FALSE;
Config::treeViewWidth = 250;
Config::generateLatex = TRUE;
Config::latexOutputDir = "latex";
Config::compactLatexFlag = FALSE;
......@@ -1723,6 +1728,17 @@ void writeTemplateConfig(QFile *f,bool sl)
writeBoolValue(t,Config::ftvHelpFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be \n";
t << "# used to set the initial width (in pixels) of the frame in which the tree \n";
t << "# is shown. \n";
t << "\n";
}
t << "TREEVIEW_WIDTH = ";
writeIntValue(t,Config::treeViewWidth);
t << "\n";
if (!sl)
{
t << "\n";
}
......@@ -2356,6 +2372,23 @@ void configStrToVal()
Config::enumValuesPerLine=cols;
}
if (treeViewWidthString.isEmpty())
{
Config::treeViewWidth=250;
}
else
{
bool ok;
int width = treeViewWidthString.toInt(&ok);
if (!ok || width<0 || width>1500)
{
warn_cont("Warning: argument of TREEVIEW_WIDTH is not a valid number in the range [0..1500]!\n"
"Using the default of 250!\n");
width = 250;
}
Config::treeViewWidth=width;
}
if (maxDotGraphWidthString.isEmpty())
{
Config::maxDotGraphWidth=1024;
......
......@@ -561,10 +561,14 @@ static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
}
else // end sub item list
{
pPrevInfo->endList();
listIndentStack.pop();
currentListIndent.pop();
delete pPrevInfo;
while (pPrevInfo && pPrevInfo->indent>indent)
{
pPrevInfo->endList();
listIndentStack.pop();
currentListIndent.pop();
delete pPrevInfo;
pPrevInfo = listIndentStack.top();
}
// safe guard against wrong indenting
if (listIndentStack.isEmpty())
{
......@@ -855,7 +859,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
int dashPos = text.findRev('-');
//printf("dashPos=%d char='%c'\n",dashPos,text.at(dashPos+1));
bool isEnumerated = text.at(dashPos+1)=='#';
addListItemMarker(yytext,dashPos,isEnumerated);
addListItemMarker(yytext,dashPos+1,isEnumerated);
}
<DocScan>\n{B}*(("//"{B}*)?)"*"*{B}*"-"("#")?{B}+ { /* found list item marker */
QCString text=yytext;
......
......@@ -731,7 +731,7 @@ static void buildClassList(Entry *root)
ClassDef *cd=new ClassDef(root->fileName,root->startLine,fullName,sec);
cd->setDocumentation(root->doc); // copy docs to definition
cd->setBriefDescription(root->brief);
//printf("new ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
//printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
cd->setTemplateArguments(root->tArgList);
cd->setProtection(root->protection);
cd->addSectionsToDefinition(root->anchors);
......@@ -1364,7 +1364,7 @@ static MemberDef *addVariableToFile(
void buildVarList(Entry *root)
{
QRegExp re("([^)]*)");
static const QRegExp re("([^)]*)");
int i=-1;
if (!root->name.isEmpty() &&
//root->type!="class" && root->type!="interface" &&
......@@ -1397,9 +1397,9 @@ void buildVarList(Entry *root)
{
// recover from parse error caused by redundant braces
root->type=root->name;
QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*");
static const QRegExp reName("[a-z_A-Z][a-z_A-Z0-9]*");
int l;
i=root->args.isEmpty() ? -1 : re.match(root->args,0,&l);
i=root->args.isEmpty() ? -1 : reName.match(root->args,0,&l);
root->name=root->args.mid(i,l);
root->args=root->args.mid(i+l,root->args.find(')',i+l)-i-l);
//printf("new: type=`%s' name=`%s' args=`%s'\n",
......@@ -1408,10 +1408,19 @@ void buildVarList(Entry *root)
else
{
i=root->type.find(re,0);
if (i!=-1) // function variable
if (i!=-1) // function pointer
{
root->type=root->type.left(root->type.length()-1);
root->args.prepend(")");
int ai = root->type.find('[',i);
if (ai>i) // function pointer array
{
root->args.prepend(root->type.right(root->type.length()-ai));
root->type=root->type.left(ai);
}
else
{
root->type=root->type.left(root->type.length()-1);
root->args.prepend(")");
}
}
}
......@@ -2047,39 +2056,48 @@ static void transferFunctionDocumentation()
matchArguments(mdef->argumentList(),mdec->argumentList())
) /* match found */
{
//printf("Found member %s: def in %s and dec in %s\n",
// mn->memberName(),mdef->getFileDef()->name().data(),
// mdec->getFileDef()->name().data());
/* copy documentation between function definition and declaration */
if (mdec->briefDescription())
{
mdef->setBriefDescription(mdec->briefDescription());
}
else if (mdef->briefDescription())
{
mdec->setBriefDescription(mdef->briefDescription());
}
if (mdef->documentation())
{
mdec->setDocumentation(mdef->documentation());
}
else if (mdec->documentation())
{
mdef->setDocumentation(mdec->documentation());
}
if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1)
{
mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine());
mdef->setBodyDef(mdec->getFileDef());
}
else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1)
FileDef *fdef = mdef->getFileDef();
FileDef *fdec = mdec->getFileDef();
// check if not in different but documented files
if (Config::extractAllFlag ||
fdef==fdec ||
!fdef->hasDocumentation() || !mdec->hasDocumentation())
{
mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine());
mdec->setBodyDef(mdef->getFileDef());
//printf("Found member %s: def in %s and dec in %s\n",
// mn->memberName(),mdef->getFileDef()->name().data(),
// mdec->getFileDef()->name().data());
/* copy documentation between function definition and declaration */
if (mdec->briefDescription())
{
mdef->setBriefDescription(mdec->briefDescription());
}
else if (mdef->briefDescription())
{
mdec->setBriefDescription(mdef->briefDescription());
}
if (mdef->documentation())
{
mdec->setDocumentation(mdef->documentation());
}
else if (mdec->documentation())
{
mdef->setDocumentation(mdec->documentation());
}
if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1)
{
mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine());
mdef->setBodyDef(mdec->getFileDef());
}
else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1)
{
mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine());
mdec->setBodyDef(mdef->getFileDef());
}
mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers());
mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers());
}
mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers());
mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers());
}
}
}
......
......@@ -164,6 +164,10 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.docify(ii->includeName);
ol.enableAll();
ol.disableAllBut(OutputGenerator::Html);
// Here we use the include file name as it appears in the file.
// we could also we the name as it is used within doxygen,
// then we should have used fd->docName() instead of ii->includeName
if (fd && fd->isLinkable() && fd->generateSourceFile())
{
ol.writeObjectLink(fd->getReference(),fd->includeName(),0,ii->includeName);
......@@ -172,6 +176,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{
ol.docify(ii->includeName);
}
ol.enableAll();
if (ii->local)
ol.docify("\"");
......@@ -438,7 +443,10 @@ void FileDef::writeSource(OutputList &ol)
initParseCodeContext();
ol.startCodeFragment();
parseCode(ol,0,fileToString(absFilePath(),TRUE),FALSE,0,this);
parseCode(ol,0,
fileToString(absFilePath(),Config::filterForSourceFlag),
FALSE,0,this
);
ol.endCodeFragment();
endFile(ol);
ol.enableAll();
......
......@@ -16,6 +16,7 @@
#include "ftvhelp.h"
#include "config.h"
#include "message.h"
#include "doxygen.h"
const char treeview_data[]=
......@@ -272,7 +273,7 @@ static void generateFolderTreeViewData()
{
QTextStream t(&f);
t << "<html><head><title>" << Config::projectName << "</title></head>" << endl;
t << "<frameset cols=\"250,*\">" << endl;
t << "<frameset cols=\"" << Config::treeViewWidth << ",*\">" << endl;
t << " <frame src=\"tree.html\" name=\"treefrm\">" << endl;
t << " <frame src=\"main.html\" name=\"basefrm\">" << endl;
t << "</frameset>" << endl;
......@@ -360,7 +361,7 @@ void FTVHelp::initialize()
}
/* Write the header of the contents file */
m_cts.setDevice(m_cf);
m_cts << "foldersTree = gFld(\"<b>";
m_cts << "foldersTree = gFld(\"\", \"<b>";
if (Config::projectName.isEmpty())
{
m_cts << "Root";
......@@ -409,18 +410,35 @@ int FTVHelp::decContentsDepth()
* \param name the name of the item.
* \param ref the URL of to the item.
*/
void FTVHelp::addContentsItem(bool isDir,const char *name,const char *ref,
const char *anchor)
void FTVHelp::addContentsItem(bool isDir,
const char *ref,
const char *file,
const char *anchor,
const char *name
)
{
int i; for (i=0;i<m_dc;i++) m_cts << " ";
QCString parent;
QCString tagName = ref;
QCString tagDir;
if (ref)
{
tagName += ":";
QCString *s = tagDestinationDict[ref];
if (s)
{
tagDir = *s + "/";
tagName += tagDir;
}
}
if (m_dc==0) parent="foldersTree"; else parent.sprintf("aux%d",m_dc);
if (isDir) // directory entry
{
m_cts << "aux" << m_dc+1 << " = insFld(" << parent << ", gFld(\"" << name << "\", ";
if (ref) // ref optional param
m_cts << "aux" << m_dc+1 << " = insFld(" << parent << ", gFld(\""
<< name << "\", \"" << tagName << "\", ";
if (file) // file optional param
{
m_cts << "\"" << ref << ".html\"))";
m_cts << "\"" << tagDir << file << ".html\"))";
}
else
{
......@@ -429,10 +447,11 @@ void FTVHelp::addContentsItem(bool isDir,const char *name,const char *ref,
}
else // text entry
{
m_cts << " insDoc(" << parent << ", gLnk(0, \"" << name << "\", ";
if (ref) // ref optional param
m_cts << " insDoc(" << parent << ", gLnk(\""
<< name << "\", \"" << tagName << "\", ";
if (file) // ref optional param
{
m_cts << "\"" << ref << ".html";
m_cts << "\"" << tagDir << file << ".html";
if (anchor) m_cts << "#" << anchor;
m_cts << "\"))";
}
......
......@@ -32,8 +32,10 @@ class FTVHelp
/*! return the current depth of the contents tree */
int contentsDepth() { return m_dc; }
void addContentsItem(bool isDir,
const char *name, const char *ref = 0,
const char *anchor = 0);
const char *ref,
const char *file,
const char *anchor,
const char *name);
private:
FTVHelp();
......
......@@ -540,6 +540,7 @@ void HtmlGenerator::codify(const char *str)
break;
case '\n': t << '\n'; col=0;
break;
case '\r': break;
case '<': t << "&lt;"; col++;
break;
case '>': t << "&gt;"; col++;
......
......@@ -144,7 +144,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(hasChildren,cd->name(),cd->getOutputFileBase());
ftvHelp->addContentsItem(hasChildren,cd->getReference(),cd->getOutputFileBase(),0,cd->name());
}
}
else
......@@ -156,7 +156,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(hasChildren,cd->name(),0);
ftvHelp->addContentsItem(hasChildren,0,0,0,cd->name());
}
}
if (hasChildren)
......@@ -271,7 +271,7 @@ void writeClassTree(ClassList *cl)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(hasChildren,cd->name(),cd->getOutputFileBase());
ftvHelp->addContentsItem(hasChildren,cd->getReference(),cd->getOutputFileBase(),0,cd->name());
}
}
if (hasChildren)
......@@ -340,7 +340,7 @@ void writeClassHierarchy(OutputList &ol)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(hasChildren,cd->name(),cd->getOutputFileBase());
ftvHelp->addContentsItem(hasChildren,cd->getReference(),cd->getOutputFileBase(),0,cd->name());
}
}
else
......@@ -352,7 +352,7 @@ void writeClassHierarchy(OutputList &ol)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(hasChildren,cd->name(),0);
ftvHelp->addContentsItem(hasChildren,0,0,0,cd->name());
}
}
if (hasChildren)
......@@ -412,7 +412,7 @@ void writeHierarchicalIndex(OutputList &ol)
if (Config::generateHtml && Config::ftvHelpFlag /*&& !Config::htmlHelpGroupsOnly*/)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(TRUE,ftvHelpTitle,"hierarchy");
ftvHelp->addContentsItem(TRUE,0,"hierarchy",0,ftvHelpTitle);
}
if (Config::haveDotFlag && Config::gfxHierarchyFlag)
{
......@@ -459,7 +459,7 @@ void writeGraphicalClassHierarchy(OutputList &ol)
if (Config::generateHtml && Config::ftvHelpFlag)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(FALSE,ftvHelpTitle,"inherits");
ftvHelp->addContentsItem(FALSE,0,"inherits",0,ftvHelpTitle);
}
ol.startTextLink("hierarchy",0);
parseText(ol,theTranslator->trGotoTextualHierarchy());
......@@ -538,7 +538,7 @@ void writeFileIndex(OutputList &ol)
if (hasFtvHelp)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(TRUE,ftvHelpTitle,"files");
ftvHelp->addContentsItem(TRUE,0,"files",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
//ol.newParagraph();
......@@ -638,7 +638,7 @@ void writeFileIndex(OutputList &ol)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(FALSE,fd->name(),fd->getOutputFileBase());
ftvHelp->addContentsItem(FALSE,fd->getReference(),fd->getOutputFileBase(),0,fd->name());
}
}
else
......@@ -652,7 +652,7 @@ void writeFileIndex(OutputList &ol)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(FALSE,fd->name(),0);
ftvHelp->addContentsItem(FALSE,0,0,0,fd->name());
}
}
if (src)
......@@ -738,7 +738,7 @@ void writeNamespaceIndex(OutputList &ol)
if (hasFtvHelp)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(TRUE,ftvHelpTitle,"namespaces");
ftvHelp->addContentsItem(TRUE,0,"namespaces",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
//ol.newParagraph();
......@@ -771,7 +771,7 @@ void writeNamespaceIndex(OutputList &ol)
}
if (hasFtvHelp)
{
ftvHelp->addContentsItem(FALSE,nd->name(),nd->getOutputFileBase());
ftvHelp->addContentsItem(FALSE,nd->getReference(),nd->getOutputFileBase(),0,nd->name());
}
}
nd=namespaceList.next();
......@@ -851,7 +851,7 @@ void writeAnnotatedClassList(OutputList &ol)
}
if (hasFtvHelp)
{
FTVHelp::getInstance()->addContentsItem(FALSE,cd->name(),cd->getOutputFileBase());
FTVHelp::getInstance()->addContentsItem(FALSE,cd->getReference(),cd->getOutputFileBase(),0,cd->name());
}
}
cd=classList.next();
......@@ -1060,7 +1060,7 @@ void writeAnnotatedIndex(OutputList &ol)
if (hasFtvHelp)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(TRUE,ftvHelpTitle,"annotated");
ftvHelp->addContentsItem(TRUE,0,"annotated",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
parseText(ol,theTranslator->trCompoundListDescription());
......@@ -1536,7 +1536,7 @@ void writeExampleIndex(OutputList &ol)
if (hasFtvHelp)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(TRUE,ftvHelpTitle,"examples");
ftvHelp->addContentsItem(TRUE,0,"examples",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
parseText(ol,theTranslator->trExamplesDescription());
......@@ -1553,13 +1553,13 @@ void writeExampleIndex(OutputList &ol)
{
ol.writeObjectLink(0,n,0,pi->title);
if (hasHtmlHelp) htmlHelp->addContentsItem(FALSE,pi->title,n);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,pi->title,n);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,n,0,pi->title);
}
else
{
ol.writeObjectLink(0,n,0,pi->name);
if (hasHtmlHelp) htmlHelp->addContentsItem(FALSE,pi->name,n);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,pi->name,n);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,n,0,pi->name);
}
ol.writeString("\n");
}
......@@ -1620,7 +1620,7 @@ void writePageIndex(OutputList &ol)
if (hasFtvHelp)
{
ftvHelp = FTVHelp::getInstance();
ftvHelp->addContentsItem(TRUE,ftvHelpTitle,"pages");
ftvHelp->addContentsItem(TRUE,0,"pages",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
parseText(ol,theTranslator->trRelatedPagesDescription());
......@@ -1651,7 +1651,7 @@ void writePageIndex(OutputList &ol)
ol.writeEndAnnoItem(pageName);
ol.writeString("\n");
if (hasHtmlHelp) htmlHelp->addContentsItem(FALSE,pageTitle,pageName);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,pageTitle,pageName);
if (hasFtvHelp) ftvHelp->addContentsItem(FALSE,0,pageName,0,pageTitle);
}
}
ol.endIndexList();
......@@ -1742,7 +1742,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd)
}
if(ftvHelp)
{
ftvHelp->addContentsItem(hasSubGroups || hasSubPages,gd->groupTitle(),gd->getOutputFileBase());
ftvHelp->addContentsItem(hasSubGroups || hasSubPages,gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle());
ftvHelp->incContentsDepth();
}
......@@ -1770,9 +1770,10 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd)
si ? si->label.data() : 0
);
if(ftvHelp) ftvHelp->addContentsItem(FALSE,
convertToHtml(pi->title),
gd->getReference(),
gd->getOutputFileBase(),
si ? si->label.data() : 0
si ? si->label.data() : 0,
convertToHtml(pi->title)
);
}
......@@ -1972,7 +1973,7 @@ void writeGroupIndex(OutputList &ol)
ftvHelp = FTVHelp::getInstance();
//if(!Config::htmlHelpGroupsOnly)
//{
ftvHelp->addContentsItem(TRUE,htmlHelpTitle,"modules");
ftvHelp->addContentsItem(TRUE,0,"modules",0,htmlHelpTitle);
ftvHelp->incContentsDepth();
//}
}
......@@ -2042,7 +2043,7 @@ void writeIndex(OutputList &ol)
}
if (Config::generateHtml && Config::ftvHelpFlag)
{
FTVHelp::getInstance()->addContentsItem(FALSE,title,indexName);
FTVHelp::getInstance()->addContentsItem(FALSE,0,indexName,0,title);
}
if (!Config::noIndexFlag) writeQuickLinks(ol,TRUE);
......
......@@ -120,6 +120,7 @@ void writeInstallScript()
t << " $match = \".html\";\n";
t << " next if ( $file =~ /^\\.\\.?$/ );\n";
t << " ($file =~ /$match/) && (push @files, $file);\n";
t << " ($file =~ \"tree.js\") && (push @files, $file);\n";
t << " }\n";
t << " closedir(D);\n";
t << " }\n";
......@@ -145,9 +146,17 @@ void writeInstallScript()
t << " print STDERR \"Error: opening file $oldf for writing\\n\";\n";
t << " exit 1;\n";
t << " }\n";
t << " while (<F>) {\n";
t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n";
t << " print G \"$_\";\n";
t << " if ($oldf!=\"tree.js\") {\n";
t << " while (<F>) {\n";
t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n";
t << " print G \"$_\";\n";
t << " }\n";
t << " }\n";
t << " else {\n";
t << " while (<F>) {\n";
t << " s/\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\", \\\"\\2/\\\"$1:$subst{$1}\\\" ,\\\"$subst{$1}/g;\n";
t << " print G \"$_\";\n";
t << " }\n";
t << " }\n";
t << " } \n";
t << " else {\n";
......
......@@ -93,6 +93,7 @@ static QCString g_lastGuardName;
static QCString g_incName;
static QCString g_guardExpr;
static int g_curlyCount;
static bool g_nospaces; // add extra spaces during macro expansion
static void setFileName(const char *name)
{
......@@ -494,6 +495,7 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
if (key.length()>1 && (subst=argTable[key]))
{
QCString substArg=*subst;
//printf("substArg=`%s'\n",substArg.data());
// only if no ## operator is before or after the argument
// marker we do macro expansion.
if (!hash) expandExpression(substArg,0,0);
......@@ -507,7 +509,14 @@ static bool replaceFunctionMacro(const QCString &expr,QCString *rest,int pos,int
}
else
{
resExpr+=" "+substArg+" ";
if (g_nospaces)
{
resExpr+=substArg;
}
else
{
resExpr+=" "+substArg+" ";
}
}
}
}
......@@ -597,7 +606,15 @@ static void expandExpression(QCString &expr,QCString *rest,int pos)
{
// substitute the definition of the macro
//printf("macro `%s'->`%s'\n",macroName.data(),def->definition.data());
expMacro=" "+def->definition.stripWhiteSpace()+" ";
if (g_nospaces)
{
expMacro=def->definition.stripWhiteSpace();
}
else
{
expMacro=" "+def->definition.stripWhiteSpace()+" ";
}
//expMacro=def->definition.stripWhiteSpace();
replaced=TRUE;
len=l;
//printf("simple macro expansion=`%s'->`%s'\n",macroName.data(),expMacro.data());
......@@ -1086,6 +1103,7 @@ BN [ \t\r\n]
else // g_findDefArgContext==IncludeID
{
readIncludeFile(result);
g_nospaces=FALSE;
BEGIN(Start);
}
}
......@@ -1339,12 +1357,14 @@ BN [ \t\r\n]
BEGIN(SkipCPPBlock);
}
<IncludeID>{ID}{B}*/"(" {
g_nospaces=TRUE;
g_roundCount=0;
g_defArgsStr=yytext;
g_findDefArgContext = IncludeID;
BEGIN(FindDefineArgs);
}
<IncludeID>{ID} {
g_nospaces=TRUE;
readIncludeFile(expandMacro(yytext));
BEGIN(Start);
}
......@@ -1529,12 +1549,12 @@ BN [ \t\r\n]
int *n;
if ((n=(*g_argDict)[yytext]))
{
if (!g_quoteArg) g_defText+=' ';
//if (!g_quoteArg) g_defText+=' ';
g_defText+='@';
QCString numStr;
numStr.sprintf("%d",*n);
g_defText+=numStr;
if (!g_quoteArg) g_defText+=' ';
//if (!g_quoteArg) g_defText+=' ';
}
else
{
......@@ -1768,6 +1788,7 @@ void preprocessFile(const char *fileName,BufStr &output)
//#endif
g_curlyCount=0;
g_nospaces=FALSE;
g_outputBuf=&output;
g_includeStack.setAutoDelete(TRUE);
g_includeStack.clear();
......
......@@ -693,6 +693,11 @@ TITLE [tT][iI][tT][lL][eE]
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
if (current->mtArgList) // transfer template arguments
{
current->tArgList = current->mtArgList;
current->mtArgList = 0;
}
lineCount() ;
BEGIN( CompoundName ) ;
}
......@@ -749,9 +754,9 @@ TITLE [tT][iI][tT][lL][eE]
lineCount();
// class template specifier already found => member template specifier
// already inside class => member template specifier
if (current->tArgList || (current_root->section&Entry::COMPOUND_MASK))
{
//printf("-------> member template\n");
//if (current->tArgList /*|| (current_root->section&Entry::COMPOUND_MASK)*/)
//{
// printf("-------> member template \n");
if (current->mtArgList)
{
current->mtArgList->clear();
......@@ -762,26 +767,25 @@ TITLE [tT][iI][tT][lL][eE]
current->mtArgList->setAutoDelete(TRUE);
}
currentArgumentList = current->mtArgList;
}
else // class template specifier
{
//printf("-------> class template\n");
if (current->tArgList)
{
current->tArgList->clear();
}
else
{
current->tArgList = new ArgumentList;
current->tArgList->setAutoDelete(TRUE);
}
currentArgumentList = current->tArgList;
}
//}
//else // class template specifier
//{
// printf("-------> class template\n");
// if (current->tArgList)
// {
// current->tArgList->clear();
// }
// else
// {
// current->tArgList = new ArgumentList;
// current->tArgList->setAutoDelete(TRUE);
// }
// currentArgumentList = current->tArgList;
//}
templateStr="<";
fullArgString = templateStr.copy();
copyArgString = &templateStr;
currentArgumentContext = FindMembers;
//printf("Start template list\n");
BEGIN( ReadTempArgs );
}
<FindMembers>"namespace"{BN}+/{ID}{BN}*"=" { // namespace alias
......@@ -793,7 +797,7 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN( NSAliasArg );
}
<NSAliasArg>({ID}"::")*{ID} {
printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
//printf("Inserting namespace alias %s::%s->%s\n",current_root->name.data(),aliasName.data(),yytext);
if (current_root->name.isEmpty())
{
namespaceAliasDict.insert(aliasName,new QCString(yytext));
......@@ -1616,6 +1620,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount();
addType(current);
funcPtrType=yytext;
roundCount=0;
//current->type += yytext;
BEGIN( FuncPtr );
}
......@@ -1638,12 +1643,12 @@ TITLE [tT][iI][tT][lL][eE]
current->type+=funcPtrType.data()+1;
BEGIN(FindMembers);
}
<EndFuncPtr>")"{BN}*/"(" { // a variable function
<EndFuncPtr>")"{BN}*/"(" { // a function pointer
lineCount();
current->type+=funcPtrType+")";
BEGIN(FindMembers);
}
<EndFuncPtr>")"{BN}*/"[" {
<EndFuncPtr>")"{BN}*/"[" { // an array of variables
lineCount();
current->type+=funcPtrType.data();
current->args += ")";
......@@ -1654,6 +1659,9 @@ TITLE [tT][iI][tT][lL][eE]
roundCount=0;
BEGIN( FuncFunc );
}
<EndFuncPtr>"["[^\n\]]*"]" {
funcPtrType+=yytext;
}
<EndFuncPtr>")" {
BEGIN(FindMembers);
}
......@@ -1790,7 +1798,7 @@ TITLE [tT][iI][tT][lL][eE]
<ReadTempArgs>"<" {
*copyArgString+=*yytext;
fullArgString+=*yytext;
argSharpCount=0;
argSharpCount=1;
BEGIN( CopyArgSharp );
}
<ReadTempArgs>">" {
......@@ -1815,16 +1823,23 @@ TITLE [tT][iI][tT][lL][eE]
}
<CopyArgSharp>"<" {
argSharpCount++;
//printf("argSharpCount++=%d copy\n",argSharpCount);
*copyArgString+=*yytext;
fullArgString+=*yytext;
}
<CopyArgSharp>">" {
*copyArgString+=*yytext;
fullArgString+=*yytext;
if (argRoundCount>0)
argRoundCount--;
argSharpCount--;
if (argSharpCount>0)
{
//printf("argSharpCount--=%d copy\n",argSharpCount);
}
else
{
BEGIN( ReadTempArgs );
//printf("end of argSharpCount\n");
}
}
<CopyArgString>\\. {
*copyArgString+=yytext;
......@@ -2631,6 +2646,8 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN(ClassDocBrief);
}
<TodoParam>\n |
<TodoParam>"//" |
<TodoParam>"/*" |
<TodoParam>. {
if (current->todoId!=0)
{
......@@ -2659,6 +2676,8 @@ TITLE [tT][iI][tT][lL][eE]
BEGIN(todoStartContext);
}
<TestParam>\n |
<TestParam>"//" |
<TestParam>"/*" |
<TestParam>. {
if (current->testId!=0)
{
......@@ -3008,7 +3027,7 @@ TITLE [tT][iI][tT][lL][eE]
<ExampleDoc,PageDoc,ClassDoc>. { current->doc += yytext; }
<Doc,JavaDoc,LineDoc,ExampleDoc,PageDoc,ClassDoc>^{B}*"//"
<Doc,ExampleDoc,PageDoc,ClassDoc>"//" { current->doc += yytext; }
<LineDoc,JavaDoc>"//" { current->brief += yytext; }
<LineDoc,JavaDoc,ClassDocBrief>"//" { current->brief += yytext; }
<Doc,JavaDoc,LineDoc,ExampleDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>("\\\\"|"@@")"f"[$\[\]] {
current->doc += &yytext[1];
}
......
......@@ -51,6 +51,13 @@ class TranslatorChinese : public Translator
{ return "成员函数文档"; }
QCString trMemberDataDocumentation()
{ return "成员数据文档"; }
QCString trGeneratedFrom(const char *s,bool single)
{
QCString result=(QCString)"De documentatie voor deze"+s+
" is gegenereerd op grond van de volgende file";
if (single) result+=":"; else result+="s:";
return result;
}
QCString trMore()
{ return "更多..."; }
QCString trListOfAllMembers()
......@@ -495,17 +502,17 @@ class TranslatorChinese : public Translator
/*! Text for the \pre command */
QCString trPrecondition()
{
return "前条件";
return "前条件";
}
/*! Text for the \post command */
QCString trPostcondition()
{
return "Postcondition";
return "后置条件";
}
/*! Text for the \invariant command */
QCString trInvariant()
{
return "Invariant";
return "不变性";
}
/*! Text shown before a multi-line variable/enum initialization */
QCString trInitialValue()
......
......@@ -11,14 +11,17 @@
"// 27 Jan 98 - Root folder starts open; support for USETEXTLINKS; \n"
"// make the ftien4 a js file \n"
"// \n"
"// DvH: Dec 2000 - Made some minor changes to support external \n"
"// references\n"
" \n"
"// Definition of class Folder \n"
"// ***************************************************************** \n"
" \n"
"function Folder(folderDescription, hreference) //constructor \n"
"function Folder(folderDescription, tagName, hreference) //constructor \n"
"{ \n"
" //constant data \n"
" this.desc = folderDescription \n"
" this.tagName = tagName\n"
" this.hreference = hreference \n"
" this.id = -1 \n"
" this.navObj = 0 \n"
......@@ -186,6 +189,10 @@
" } \n"
" else \n"
" doc.write(this.desc) \n"
" if (this.tagName!=\"\")\n"
" {\n"
" doc.write(\" [external]\")\n"
" }\n"
" doc.write(\"</td>\") \n"
" doc.write(\"\\n</table>\\n\") \n"
" \n"
......@@ -209,7 +216,12 @@
"{ \n"
" if (this.hreference) \n"
" { \n"
" doc.write(\"<a href='\" + this.hreference + \"' TARGET=\\\"basefrm\\\" \") \n"
" doc.write(\"<a \")\n"
" if (this.tagName)\n"
" {\n"
" doc.write(\"doxygen='\" + this.tagName + \"' \");\n"
" }\n"
" doc.write(\"href='\" + this.hreference + \"' TARGET=\\\"basefrm\\\" \") \n"
" if (browserVersion > 0) \n"
" doc.write(\"onClick='javascript:clickOnFolder(\"+this.id+\")'\") \n"
" doc.write(\">\") \n"
......@@ -242,10 +254,11 @@
"// Definition of class Item (a document or link inside a Folder) \n"
"// ************************************************************* \n"
" \n"
"function Item(itemDescription, itemLink) // Constructor \n"
"function Item(itemDescription, tagName, itemLink) // Constructor \n"
"{ \n"
" // constant data \n"
" this.desc = itemDescription \n"
" this.tagName = tagName\n"
" this.link = itemLink \n"
" this.id = -1 //initialized in initalize() \n"
" this.navObj = 0 //initialized in render() \n"
......@@ -319,6 +332,10 @@
" doc.write(\"<a href=\" + this.link + \">\" + this.desc + \"</a>\") \n"
" else \n"
" doc.write(this.desc) \n"
" if (this.tagName!=\"\")\n"
" {\n"
" doc.write(\" [external]\");\n"
" }\n"
" doc.write(\"\\n</table>\\n\") \n"
" \n"
" if (browserVersion == 2) \n"
......@@ -422,32 +439,22 @@
"// Auxiliary Functions for Folder-Treee backward compatibility \n"
"// ********************************************************* \n"
" \n"
"function gFld(description, hreference) \n"
"function gFld(description, tagName, hreference) \n"
"{ \n"
" folder = new Folder(description, hreference) \n"
" folder = new Folder(description, tagName, hreference) \n"
" return folder \n"
"} \n"
" \n"
"function gLnk(target, description, linkData) \n"
"function gLnk(description, tagName, linkData) \n"
"{ \n"
" fullLink = \"\" \n"
" \n"
" if (linkData!=\"\")\n"
" {\n"
" if (target==0) \n"
" { \n"
" fullLink = \"'\"+linkData+\"' target=\\\"basefrm\\\"\" \n"
" } \n"
" else \n"
" { \n"
" if (target==1) \n"
" fullLink = \"'http://\"+linkData+\"' target=_blank\" \n"
" else \n"
" fullLink = \"'http://\"+linkData+\"' target=\\\"basefrm\\\"\" \n"
" }\n"
" fullLink = \"'\"+linkData+\"' target=\\\"basefrm\\\"\" \n"
" } \n"
" \n"
" linkItem = new Item(description, fullLink) \n"
" linkItem = new Item(description, tagName, fullLink) \n"
" return linkItem \n"
"} \n"
" \n"
......
......@@ -11,14 +11,17 @@
// 27 Jan 98 - Root folder starts open; support for USETEXTLINKS;
// make the ftien4 a js file
//
// DvH: Dec 2000 - Made some minor changes to support external
// references
// Definition of class Folder
// *****************************************************************
function Folder(folderDescription, hreference) //constructor
function Folder(folderDescription, tagName, hreference) //constructor
{
//constant data
this.desc = folderDescription
this.tagName = tagName
this.hreference = hreference
this.id = -1
this.navObj = 0
......@@ -186,6 +189,10 @@ function drawFolder(leftSide)
}
else
doc.write(this.desc)
if (this.tagName!="")
{
doc.write(" [external]")
}
doc.write("</td>")
doc.write("\n</table>\n")
......@@ -209,7 +216,12 @@ function outputFolderLink()
{
if (this.hreference)
{
doc.write("<a href='" + this.hreference + "' TARGET=\"basefrm\" ")
doc.write("<a ")
if (this.tagName)
{
doc.write("doxygen='" + this.tagName + "' ");
}
doc.write("href='" + this.hreference + "' TARGET=\"basefrm\" ")
if (browserVersion > 0)
doc.write("onClick='javascript:clickOnFolder("+this.id+")'")
doc.write(">")
......@@ -242,10 +254,11 @@ function folderSubEntries()
// Definition of class Item (a document or link inside a Folder)
// *************************************************************
function Item(itemDescription, itemLink) // Constructor
function Item(itemDescription, tagName, itemLink) // Constructor
{
// constant data
this.desc = itemDescription
this.tagName = tagName
this.link = itemLink
this.id = -1 //initialized in initalize()
this.navObj = 0 //initialized in render()
......@@ -319,6 +332,10 @@ function drawItem(leftSide)
doc.write("<a href=" + this.link + ">" + this.desc + "</a>")
else
doc.write(this.desc)
if (this.tagName!="")
{
doc.write(" [external]");
}
doc.write("\n</table>\n")
if (browserVersion == 2)
......@@ -422,32 +439,22 @@ function initializeDocument()
// Auxiliary Functions for Folder-Treee backward compatibility
// *********************************************************
function gFld(description, hreference)
function gFld(description, tagName, hreference)
{
folder = new Folder(description, hreference)
folder = new Folder(description, tagName, hreference)
return folder
}
function gLnk(target, description, linkData)
function gLnk(description, tagName, linkData)
{
fullLink = ""
if (linkData!="")
{
if (target==0)
{
fullLink = "'"+linkData+"' target=\"basefrm\""
}
else
{
if (target==1)
fullLink = "'http://"+linkData+"' target=_blank"
else
fullLink = "'http://"+linkData+"' target=\"basefrm\""
}
fullLink = "'"+linkData+"' target=\"basefrm\""
}
linkItem = new Item(description, fullLink)
linkItem = new Item(description, tagName, fullLink)
return linkItem
}
......
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