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