Commit 9c931382 authored by dimitri's avatar dimitri

Release-1.8.2-20120930

parent 489cefdf
......@@ -224,7 +224,7 @@ USE_MATHJAX = NO
MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
SERVER_BASED_SEARCH = YES
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
......@@ -294,7 +294,7 @@ SKIP_FUNCTION_MACROS = YES
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES = qtools_docs/qtools.tag=../../qtools_docs/html
GENERATE_TAGFILE =
GENERATE_TAGFILE = doxygen.tag
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
......
DOXYGEN Version 1.8.2
DOXYGEN Version 1.8.2-20120930
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (12 August 2012)
Dimitri van Heesch (30 September 2012)
DOXYGEN Version 1.8.2
DOXYGEN Version 1.8.2_20120930
Please read INSTALL for compilation instructions.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (12 August 2012)
Dimitri van Heesch (dimitri@stack.nl) (30 September 2012)
......@@ -20,7 +20,7 @@ doxygen_version_minor=8
doxygen_version_revision=2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO
doxygen_version_mmn=20120930
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -55,6 +55,7 @@ documentation:
\refitem cmdclass \\class
\refitem cmdcode \\code
\refitem cmdcond \\cond
\refitem cmdcondnot \\condnot
\refitem cmdcopybrief \\copybrief
\refitem cmdcopydetails \\copydetails
\refitem cmdcopydoc \\copydoc
......@@ -1125,7 +1126,29 @@ class Implementation : public Intf
The output will be different depending on whether or not \c ENABLED_SECTIONS
contains \c TEST, or \c DEV
\sa section \ref cmdendcond "\\endcond".
\sa section \ref cmdcondnot "\\condnot" and section \ref cmdendcond "\\endcond".
<hr>
\section cmdcondnot \\condnot <section-label>
\addindex \\condnot
Starts a conditional section that ends with a corresponding
\ref cmdendcond "\\endcond" command, which is typically found in
another comment block. The main purpose of this pair of
commands is to (conditionally) exclude part of a file from processing
(in older version of doxygen this could only be achieved using C preprocessor commands).
The section between \\condnot and \\endcond commands can be excluded by
adding its section label to the \ref cfg_enabled_sections "ENABLED_SECTIONS"
configuration option.
For conditional sections within a comment block one should
use a \ref cmdif "\\if" ... \ref cmdendif "\\endif" block.
Conditional sections can be nested. In this case a nested section will only
be shown if it and its containing section are included.
\sa section \ref cmdcond "\\cond" and section \ref cmdendcond "\\endcond".
<hr>
\section cmdcopyright \\copyright { copyright description }
......@@ -1197,9 +1220,9 @@ contains \c TEST, or \c DEV
\section cmdendcond \\endcond
\addindex \\endcond
Ends a conditional section that was started by \ref cmdcond "\\cond".
Ends a conditional section that was started by \ref cmdcond "\\cond" or \ref cmdcondnot "\\condnot".
\sa section \ref cmdcond "\\cond".
\sa section \ref cmdcond "\\cond" and section \ref cmdcondnot "\\condnot".
<hr>
\section cmdendif \\endif
......
......@@ -109,12 +109,19 @@ This will create 3 files:
a HTML page. Also here special commands can be used. This file contain the
link to www.doxygen.org and the body and html end tags.
- customdoxygen.css is the default cascading style sheet
used by doxygen.
used by doxygen. It is recommended only to look into this file and overrule
some settings you like by putting them in a separate stylesheet and
referencing that extra file
via \ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET".
You should edit these files and then reference them from the config file.
- \ref cfg_html_header "HTML_HEADER" = \c header.html
- \ref cfg_html_footer "HTML_FOOTER" = \c footer.html
- \ref cfg_html_stylesheet "HTML_STYLESHEET" = \c customdoxygen.css
- \ref cfg_html_stylesheet "HTML_STYLESHEET" = \c customdoxygen.css <b>&larr;obsolete</b>
\note it is not longer recommended to use HTML_STYLESHEET this way,
as it make it difficult to upgrade to a newer version of doxygen. Use
\ref cfg_html_extra_stylesheet "HTML_EXTRA_STYLESHEET" instead.
See the documentation of the \ref cfg_html_header "HTML_HEADER" tag
for more information about the possible meta commands you can use inside
......
......@@ -80,7 +80,7 @@ document either the class or namespace.
<li><b>How can I make doxygen ignore some code fragment?</b>
The new and easiest way is to add one comment block
with a \ref cmdcond "\\cond" command at the start and one comment block
with a \ref cmdcond "\\cond" or \ref cmdcondnot "\\condnot" command at the start and one comment block
with a \ref cmdendcond "\\endcond" command at the end of the piece of
code that should be ignored. This should be within the same file of course.
......
......@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.8.1.2), 39 languages
Currently (version 1.8.2), 39 languages
are supported (sorted alphabetically):
Afrikaans, Arabic, Armenian, Brazilian Portuguese, Catalan, Chinese,
Chinese Traditional, Croatian, Czech, Danish, Dutch, English,
......
(1.8.1.2)
(1.8.2)
Doxygen supports the following 39 languages (sorted alphabetically):
......
......@@ -55,19 +55,19 @@ protected:
public:
QArray() {}
QArray( int size ) : QGArray(size*sizeof(type)) {}
QArray( int size ) : QGArray(size*(int)sizeof(type)) {}
QArray( const QArray<type> &a ) : QGArray(a) {}
~QArray() {}
QArray<type> &operator=(const QArray<type> &a)
{ return (QArray<type>&)QGArray::assign(a); }
type *data() const { return (type *)QGArray::data(); }
uint nrefs() const { return QGArray::nrefs(); }
uint size() const { return QGArray::size()/sizeof(type); }
uint size() const { return QGArray::size()/(int)sizeof(type); }
uint count() const { return size(); }
bool isEmpty() const { return QGArray::size() == 0; }
bool isNull() const { return QGArray::data() == 0; }
bool resize( uint size ) { return QGArray::resize(size*sizeof(type)); }
bool truncate( uint pos ) { return QGArray::resize(pos*sizeof(type)); }
bool resize( uint size ) { return QGArray::resize(size*(int)sizeof(type)); }
bool truncate( uint pos ) { return QGArray::resize(pos*(int)sizeof(type)); }
bool fill( const type &d, int size = -1 )
{ return QGArray::fill((char*)&d,size,sizeof(type) ); }
void detach() { QGArray::detach(); }
......@@ -94,9 +94,9 @@ public:
int bsearch( const type &d ) const
{ return QGArray::bsearch((const char*)&d,sizeof(type)); }
type& operator[]( int i ) const
{ return (type &)(*(type *)QGArray::at(i*sizeof(type))); }
{ return (type &)(*(type *)QGArray::at(i*(int)sizeof(type))); }
type& at( uint i ) const
{ return (type &)(*(type *)QGArray::at(i*sizeof(type))); }
{ return (type &)(*(type *)QGArray::at(i*(int)sizeof(type))); }
operator const type*() const { return (const type *)QGArray::data(); }
bool operator==( const QArray<type> &a ) const { return isEqual(a); }
bool operator!=( const QArray<type> &a ) const { return !isEqual(a); }
......
......@@ -375,7 +375,7 @@ int QBuffer::readLine( char *p, uint maxlen )
break;
}
*p = '\0';
ioIndex = d - a.data();
ioIndex = (int)(d - a.data());
return (uint)ioIndex - start;
}
......
......@@ -412,7 +412,7 @@ static Q_INT32 read_int_ascii( QDataStream *s )
n++;
}
buf[n] = '\0';
return atol( buf );
return (Q_INT32)atol( buf );
}
......
......@@ -1184,7 +1184,7 @@ int qt_cmp_si( const void *n1, const void *n2 )
if ( r == 0 ) {
// Enforce an order - the order the items appear in the array
r = (char*)n1 - (char*)n2;
r = (int)((char*)n1 - (char*)n2);
}
if ( qt_cmp_si_sortSpec & QDir::Reversed )
......
......@@ -403,7 +403,7 @@ uint QFile::size() const
} else {
STAT( QFile::encodeName(fn), &st );
}
return st.st_size;
return (uint)st.st_size;
}
/*!
......@@ -500,13 +500,13 @@ int QFile::readBlock( char *p, uint len )
if ( nread < (int)len ) {
if ( isRaw() ) { // raw file
nread += READ( fd, p, len-nread );
nread += (int)READ( fd, p, len-nread );
if ( len && nread <= 0 ) {
nread = 0;
setStatus(IO_ReadError);
}
} else { // buffered file
nread += fread( p, 1, len-nread, fh );
nread += (int)fread( p, 1, len-nread, fh );
if ( (uint)nread != len ) {
if ( ferror( fh ) || nread==0 )
setStatus(IO_ReadError);
......@@ -552,9 +552,9 @@ int QFile::writeBlock( const char *p, uint len )
#endif
int nwritten; // number of bytes written
if ( isRaw() ) // raw file
nwritten = WRITE( fd, p, len );
nwritten = (int)WRITE( fd, p, len );
else // buffered file
nwritten = fwrite( p, 1, len, fh );
nwritten = (int)fwrite( p, 1, len, fh );
if ( nwritten != (int)len ) { // write error
if ( errno == ENOSPC ) // disk is full
setStatus( IO_ResourceError );
......@@ -661,7 +661,7 @@ bool QFile::seek( int64 pos )
if (isOpen())
{
// TODO: support 64 bit size
return fseek( fh, pos, SEEK_SET )!=-1;
return fseek( fh, (long)pos, SEEK_SET )!=-1;
}
return FALSE;
}
......
......@@ -124,7 +124,7 @@ QString QFileInfo::readLink() const
char s[PATH_MAX+1];
if ( !isSymLink() )
return QString();
int len = readlink( QFile::encodeName(fn).data(), s, PATH_MAX );
int len = (int)readlink( QFile::encodeName(fn).data(), s, PATH_MAX );
if ( len >= 0 ) {
s[len] = '\0';
r = QFile::decodeName(s);
......@@ -297,7 +297,7 @@ QDateTime QFileInfo::lastModified() const
if ( !fic || !cache )
doStat();
if ( fic )
dt.setTime_t( fic->st.st_mtime );
dt.setTime_t( (uint)fic->st.st_mtime );
return dt;
}
......@@ -316,7 +316,7 @@ QDateTime QFileInfo::lastRead() const
if ( !fic || !cache )
doStat();
if ( fic )
dt.setTime_t( fic->st.st_atime );
dt.setTime_t( (uint)fic->st.st_atime );
return dt;
}
......
......@@ -525,7 +525,7 @@ static int matchstring( uint *rxd, const char *str, uint strlength,
while ( p >= first_p ) { // go backwards
int end = matchstring( d, p, pl, bol, cs );
if ( end >= 0 )
return ( p - start ) + end;
return ( (int)(p - start) ) + end;
if ( !p )
return -1;
--p;
......@@ -587,7 +587,7 @@ static int matchstring( uint *rxd, const char *str, uint strlength,
while ( p >= first_p ) { // go backwards
int end = matchstring( d, p, pl, bol, cs );
if ( end >= 0 )
return ( p - start ) + end;
return ( (int)(p - start) ) + end;
if ( !p )
return -1;
--p;
......@@ -600,7 +600,7 @@ static int matchstring( uint *rxd, const char *str, uint strlength,
return -1;
}
}
return p - start;
return (int)(p - start);
}
......@@ -1043,7 +1043,7 @@ void QRegExp::compile()
error = PatSyntax;
return;
}
int ddiff = d - prev_d;
int ddiff = (int)(d - prev_d);
if ( *p == '+' ) { // convert to Kleene closure
if ( d + ddiff >= rxarray + maxlen ) {
error = PatOverflow; // pattern too long
......@@ -1082,7 +1082,7 @@ void QRegExp::compile()
}
}
GEN( END );
int len = d - rxarray;
int len = (int)(d - rxarray);
rxdata = new uint[ len ]; // copy from rxarray to rxdata
CHECK_PTR( rxdata );
memcpy( rxdata, rxarray, len*sizeof(uint) );
......
......@@ -13535,7 +13535,7 @@ QString &QString::insert( uint index, const QChar* s, uint len )
uint olen = length();
int nlen = olen + len;
int df = s - d->unicode; // ### pointer subtraction, cast down to int
int df = (int)(s - d->unicode); // ### pointer subtraction, cast down to int
if ( df >= 0 && (uint)df < d->maxl ) {
// Part of me - take a copy.
QChar *tmp = QT_ALLOC_QCHAR_VEC( len );
......@@ -13679,7 +13679,7 @@ QString &QString::replace( uint index, uint len, const QChar* s, uint slen )
real_detach();
memcpy( d->unicode+index, s, len*sizeof(QChar) );
} else {
int df = s - d->unicode; // ### pointer subtraction, cast down to int
int df = (int)(s - d->unicode); // ### pointer subtraction, cast down to int
if ( df >= 0 && (uint)df < d->maxl ) {
// Part of me - take a copy.
QChar *tmp = QT_ALLOC_QCHAR_VEC( slen );
......@@ -15017,7 +15017,7 @@ QDataStream &operator<<( QDataStream &s, const QString &str )
if ( ub || s.version() < 3 ) {
if ( QChar::networkOrdered() ==
(s.byteOrder()==QDataStream::BigEndian) ) {
s.writeBytes( ub, sizeof(QChar)*str.length() );
s.writeBytes( ub, (int)sizeof(QChar)*str.length() );
} else {
static const uint auto_size = 1024;
char t[auto_size];
......@@ -15034,7 +15034,7 @@ QDataStream &operator<<( QDataStream &s, const QString &str )
*c++ = ub[0];
ub+=sizeof(QChar);
}
s.writeBytes( b, sizeof(QChar)*str.length() );
s.writeBytes( b, (int)sizeof(QChar)*str.length() );
if ( str.length()*sizeof(QChar) > auto_size )
delete [] b;
}
......
......@@ -931,11 +931,11 @@ static int getByte(char* &cursor)
int byte = 0;
if ( *cursor ) {
if ( cursor[1] == 'x' )
byte = strtol(cursor+2,&cursor,16);
byte = (int)strtol(cursor+2,&cursor,16);
else if ( cursor[1] == 'd' )
byte = strtol(cursor+2,&cursor,10);
byte = (int)strtol(cursor+2,&cursor,10);
else
byte = strtol(cursor+2,&cursor,8);
byte = (int)strtol(cursor+2,&cursor,8);
}
return byte&0xff;
}
......@@ -1017,7 +1017,7 @@ public:
cursor[2]>='0' && cursor[2]<='9' &&
cursor[3]>='0' && cursor[3]<='9') {
unicode = strtol(cursor+2,&cursor,16);
unicode = (int)strtol(cursor+2,&cursor,16);
} else if (*cursor==esc) {
......
......@@ -308,7 +308,7 @@ bool QStringBuffer::open( int m )
s->truncate( 0 );
}
if ( m & IO_Append ) { // append to end of buffer
ioIndex = s->length()*sizeof(QChar);
ioIndex = s->length()*(int)sizeof(QChar);
} else {
ioIndex = 0;
}
......@@ -331,7 +331,7 @@ void QStringBuffer::flush()
uint QStringBuffer::size() const
{
return s ? s->length()*sizeof(QChar) : 0;
return s ? s->length()*(int)sizeof(QChar) : 0;
}
int QStringBuffer::at() const
......@@ -916,7 +916,7 @@ QTextStream &QTextStream::writeBlock( const char* p, uint len )
QChar *u = new QChar[len];
for (uint i=0; i<len; i++)
u[i] = p[i];
dev->writeBlock( (char*)u, len*sizeof(QChar) );
dev->writeBlock( (char*)u, len*(int)sizeof(QChar) );
delete [] u;
} else {
for (uint i=0; i<len; i++)
......@@ -932,7 +932,7 @@ QTextStream &QTextStream::writeBlock( const QChar* p, uint len )
doUnicodeHeader = FALSE;
ts_putc( QChar::byteOrderMark );
}
dev->writeBlock( (char*)p, sizeof(QChar)*len );
dev->writeBlock( (char*)p, (int)sizeof(QChar)*len );
} else {
for (uint i=0; i<len; i++)
ts_putc( p[i] );
......
......@@ -52,6 +52,7 @@
#include <sys/types.h>
#include <sys/sysctl.h>
#endif
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
......@@ -118,6 +119,13 @@ void QThread::start()
QMutexLocker locker(&d->mutex);
if (d->running) return;
// Block the SIGINT signal. The threads will inherit the signal mask.
// This will avoid them catching SIGINT instead of this thread.
sigset_t sigset, oldset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGINT);
pthread_sigmask(SIG_BLOCK, &sigset, &oldset);
d->running = TRUE;
d->finished = FALSE;
......@@ -142,6 +150,11 @@ void QThread::start()
d->finished = FALSE;
d->thread_id = 0;
}
else
{
// Restore the old signal mask only for this thread.
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
}
}
void QThread::terminate()
......@@ -182,7 +195,7 @@ int QThread::idealThreadCount()
int cores = -1;
#if defined(_OS_MAC_)
// Mac OS X
cores = MPProcessorsScheduled();
cores = (int)MPProcessorsScheduled();
#elif defined(_OS_HPUX_)
// HP-UX
struct pst_dynamic psd;
......
......@@ -65,7 +65,7 @@ QCString QUtf8Codec::fromUnicode(const QString& uc, int& len_in_out) const
*cursor++ = 0x80 | (ch.cell()&0x3f);
}
}
len_in_out = cursor - (uchar*)rstr.data();
len_in_out = (int)(cursor - (uchar*)rstr.data());
rstr.truncate(len_in_out);
return rstr;
}
......@@ -201,13 +201,13 @@ public:
QCString fromUnicode(const QString& uc, int& len_in_out)
{
if ( headerdone ) {
len_in_out = uc.length()*sizeof(QChar);
len_in_out = uc.length()*(int)sizeof(QChar);
QCString d(len_in_out);
memcpy(d.data(),uc.unicode(),len_in_out);
return d;
} else {
headerdone = TRUE;
len_in_out = (1+uc.length())*sizeof(QChar);
len_in_out = (1+uc.length())*(int)sizeof(QChar);
QCString d(len_in_out);
memcpy(d.data(),&QChar::byteOrderMark,sizeof(QChar));
memcpy(d.data()+sizeof(QChar),uc.unicode(),uc.length()*sizeof(QChar));
......
......@@ -45,7 +45,7 @@ CiteDict::CiteDict(int size) : m_entries(size, FALSE)
m_entries.setAutoDelete(TRUE);
}
static QCString getListOfBibFiles(const QCString &sep,bool stripExtension)
static QCString getListOfBibFiles(const QCString &sep,bool namesOnly)
{
QCString result;
QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
......@@ -54,17 +54,24 @@ static QCString getListOfBibFiles(const QCString &sep,bool stripExtension)
{
int i;
QCString bibFile = bibdata;
if (stripExtension && bibFile.right(4)==".bib")
if (namesOnly && bibFile.right(4)==".bib") // strip extension
{
bibFile = bibFile.left(bibFile.length()-4);
}
if (stripExtension && (i=bibFile.findRev('/'))!=-1)
if ((i=bibFile.findRev('/'))!=-1) // strip path
{
bibFile = bibFile.mid(i+1);
}
if (!bibFile.isEmpty())
{
result+=bibFile;
if (namesOnly) // bare names
{
result+=bibFile;
}
else // add quotes for paths with spaces
{
result+="\""+bibFile+"\"";
}
bibdata = citeDataList.next();
if (bibdata)
{
......@@ -162,12 +169,52 @@ void CiteDict::generatePage() const
f.writeBlock(bstData, bstData.length());
f.close();
// 4. run bib2xhtml perl script on the generated file which will insert the
// 4. for html we just copy the bib files to the output so that
// bibtex can find them without path (bibtex doesn't support path's
// with spaces!)
QList<QCString> tempFiles;
tempFiles.setAutoDelete(TRUE);
QDir thisDir;
if (Config_getBool("GENERATE_HTML"))
{
// copy bib files to the latex output dir
QStrList &citeDataList = Config_getList("CITE_BIB_FILES");
QCString bibOutputDir = outputDir+"/";
QFileInfo fo(bibOutputDir);
const char *bibdata = citeDataList.first();
while (bibdata)
{
QCString bibFile = bibdata;
if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib";
QFileInfo fi(bibFile);
if (fi.exists() && fi.dirPath(TRUE)!=fo.absFilePath())
{
if (!bibFile.isEmpty())
{
QCString destFile=bibOutputDir+fi.fileName().data();
copyFile(bibFile,destFile);
tempFiles.append(new QCString(destFile));
}
}
else if (!fi.exists())
{
err("Error: bib file %s not found!\n",bibFile.data());
}
bibdata = citeDataList.next();
}
}
QCString oldDir = convertToQCString(QDir::currentDirPath());
QDir::setCurrent(outputDir);
// 5. run bib2xhtml perl script on the generated file which will insert the
// bibliography in citelist.doc
portable_system("perl",bib2xhtmlFile+" "+getListOfBibFiles(" ",FALSE)+" "+
citeListFile);
portable_system("perl","\""+bib2xhtmlFile+"\" "+getListOfBibFiles(" ",FALSE)+" \""+
citeListFile+"\"");
// 5. read back the file
QDir::setCurrent(oldDir);
// 6. read back the file
f.setName(citeListFile);
if (!f.open(IO_ReadOnly))
{
......@@ -212,11 +259,11 @@ void CiteDict::generatePage() const
}
//printf("doc=[%s]\n",doc.data());
// 6. add it as a page
// 7. add it as a page
addRelatedPage(CiteConsts::fileName,
theTranslator->trCiteReferences(),doc,0,CiteConsts::fileName,1,0,0,0);
// 7. for latex we just copy the bib files to the output and let
// 8. for latex we just copy the bib files to the output and let
// latex do this work.
if (Config_getBool("GENERATE_LATEX"))
{
......@@ -244,11 +291,14 @@ void CiteDict::generatePage() const
}
}
// 8. Remove temporary files
QDir thisDir;
thisDir.remove(citeListFile);
thisDir.remove(doxygenBstFile);
thisDir.remove(bib2xhtmlFile);
// 9. Remove temporary files
//thisDir.remove(citeListFile);
//thisDir.remove(doxygenBstFile);
//thisDir.remove(bib2xhtmlFile);
//while (!tempFiles.isEmpty())
//{
// QCString *s=tempFiles.take();
// thisDir.remove(*s);
//}
}
......@@ -1507,6 +1507,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
for (li.toFirst();li.current();++li)
{
ol.writeSummaryLink(0,li.current()->data(),li.current()->data(),first);
first=FALSE;
}
}
if (!first)
......@@ -2997,6 +2998,7 @@ void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
Protection prot)
{
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
static bool umlLook = Config_getBool("UML_LOOK");
if (prot==Private && !extractPrivate) return;
//printf("%s::addUsedClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
if (m_impl->usesImplClassDict==0)
......@@ -3012,13 +3014,25 @@ void ClassDef::addUsedClass(ClassDef *cd,const char *accessName,
//printf("Adding used class %s to class %s via accessor %s\n",
// cd->name().data(),name().data(),accessName);
}
ucd->addAccessor(accessName);
QCString acc = accessName;
if (umlLook)
{
switch(prot)
{
case Public: acc.prepend("+"); break;
case Private: acc.prepend("-"); break;
case Protected: acc.prepend("#"); break;
case Package: acc.prepend("~"); break;
}
}
ucd->addAccessor(acc);
}
void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
Protection prot)
{
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
static bool umlLook = Config_getBool("UML_LOOK");
if (prot==Private && !extractPrivate) return;
//printf("%s::addUsedByClass(%s,%s)\n",name().data(),cd->name().data(),accessName);
if (m_impl->usedByImplClassDict==0)
......@@ -3034,7 +3048,18 @@ void ClassDef::addUsedByClass(ClassDef *cd,const char *accessName,
//printf("Adding used by class %s to class %s\n",
// cd->name().data(),name().data());
}
ucd->addAccessor(accessName);
QCString acc = accessName;
if (umlLook)
{
switch(prot)
{
case Public: acc.prepend("+"); break;
case Private: acc.prepend("-"); break;
case Protected: acc.prepend("#"); break;
case Package: acc.prepend("~"); break;
}
}
ucd->addAccessor(acc);
}
......
......@@ -565,7 +565,7 @@ static void codifyLines(const char *text)
{
g_yyLineNr++;
//*(p-1)='\0';
int l = p-sp-1;
int l = (int)(p-sp-1);
char *tmp = (char*)malloc(l+1);
memcpy(tmp,sp,l);
tmp[l]='\0';
......
......@@ -41,6 +41,12 @@
#define ADDCHAR(c) g_outBuf->addChar(c)
#define ADDARRAY(a,s) g_outBuf->addArray(a,s)
enum GuardType
{
Guard_Cond,
Guard_CondNot
};
struct CondCtx
{
CondCtx(int line,QCString id,bool b)
......@@ -77,6 +83,7 @@ static bool g_lastEscaped;
static int g_lastBlockContext;
static bool g_pythonDocString;
static GuardType guardType; // kind of guard for conditional section
static SrcLangExt g_lang;
......@@ -118,7 +125,7 @@ static void replaceCommentMarker(const char *s,int len)
ADDCHAR(' ');
}
// copy comment line to output
ADDARRAY(p,len-(p-s));
ADDARRAY(p,len-(int)(p-s));
}
static inline int computeIndent(const char *s)
......@@ -172,14 +179,29 @@ static inline void copyToOutput(const char *s,int len)
static void startCondSection(const char *sectId)
{
g_condStack.push(new CondCtx(g_lineNr,sectId,g_skip));
if (Config_getList("ENABLED_SECTIONS").find(sectId)!=-1)
if (guardType == Guard_Cond)
{
//printf("*** Section is enabled!\n");
if (Config_getList("ENABLED_SECTIONS").find(sectId)!=-1)
{
//printf("*** Section is enabled!\n");
}
else
{
//printf("*** Section is disabled!\n");
g_skip=TRUE;
}
}
else
else if (guardType == Guard_CondNot)
{
//printf("*** Section is disabled!\n");
g_skip=TRUE;
if (Config_getList("ENABLED_SECTIONS").find(sectId)!=-1)
{
//printf("*** Section is disabled!\n");
g_skip=TRUE;
}
else
{
//printf("*** Section is enabled!\n");
}
}
}
......@@ -660,6 +682,12 @@ void replaceComment(int offset);
}
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
g_condCtx = YY_START;
guardType = Guard_Cond;
BEGIN(CondLine);
}
<CComment,ReadLine>[\\@]"condnot"[ \t]+ { // conditional section
g_condCtx = YY_START;
guardType = Guard_CondNot;
BEGIN(CondLine);
}
<CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section
......@@ -700,6 +728,7 @@ void replaceComment(int offset);
<CondLine>[ \t]*
<CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n |
<CondLine>. { // forgot section id?
guardType = Guard_Cond;
if (YY_START!=CondLine) g_condCtx=YY_START;
bool oldSkip=g_skip;
startCondSection(" "); // fake section id causing the section to be hidden unconditionally
......
......@@ -1044,9 +1044,9 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
// rule matched.
// for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE
#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
inputPosition=prevPosition + (int)(yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf);
#else
inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf;
inputPosition=prevPosition + (int)(yy_bp - yy_current_buffer->yy_ch_buf);
#endif
yyterminate();
}
......@@ -1106,9 +1106,9 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
parseMore=TRUE;
needNewEntry = TRUE;
#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + strlen(yytext);
inputPosition=prevPosition + (int)(yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf) + strlen(yytext);
#else
inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf + strlen(yytext);
inputPosition=prevPosition + (int)(yy_bp - yy_current_buffer->yy_ch_buf) + strlen(yytext);
#endif
yyterminate();
}
......@@ -2848,7 +2848,7 @@ static int findExistingGroup(int &groupId,const MemberGroupInfo *info)
)
{
//printf("Found it!\n");
return di.currentKey(); // put the item in this group
return (int)di.currentKey(); // put the item in this group
}
}
groupId++; // start new group
......
......@@ -284,11 +284,11 @@ Doxygen will parse them like normal C++ but will assume all classes use public
instead of private inheritance when no explicit protection keyword is present.
' defval='0'/>
<option type='bool' id='IDL_PROPERTY_SUPPORT' docs='
For Microsoft&apos;s IDL there are propget and propput attributes to indicate
getter and setter methods for a property. Setting this option to YES (the
default) will make doxygen replace the get and set methods by a property in
the documentation. This will only work if the methods are indeed getting or
setting a simple type. If this is not the case, or you want to show the
For Microsoft&apos;s IDL there are propget and propput attributes to indicate
getter and setter methods for a property. Setting this option to YES (the
default) will make doxygen replace the get and set methods by a property in
the documentation. This will only work if the methods are indeed getting or
setting a simple type. If this is not the case, or you want to show the
methods anyway, you should set this option to NO.
' defval='1'/>
<option type='bool' id='DISTRIBUTE_GROUP_DOC' docs='
......@@ -561,7 +561,8 @@ containing the references data. This must be a list of .bib files. The
requires the bibtex tool to be installed. See also
http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
feature you need bibtex and perl available in the search path.
feature you need bibtex and perl available in the search path. Do not use
file names with spaces, bibtex cannot handle them.
' defval=''/>
</group>
<group name='Messages' docs='configuration options related to warning and progress messages'>
......
......@@ -12,6 +12,7 @@
# input used in their production; they are not affected by this license.
#
import xml.dom.minidom
import sys
from xml.dom import minidom, Node
def addValues(var,node):
......@@ -110,7 +111,7 @@ def parseGroups(node):
def main():
doc = xml.dom.minidom.parse("config.xml")
doc = xml.dom.minidom.parse(sys.argv[1])
elem = doc.documentElement
print "/* WARNING: This file is generated!"
print " * Do not edit this file, but edit config.xml instead and run"
......
......@@ -400,7 +400,12 @@ void addConfigOptions(Config *cfg)
//----
cb = cfg->addBool(
"IDL_PROPERTY_SUPPORT",
"For Microsoft's IDL there are propget and propput attributes to indicate getter and setter methods for a property. Setting this option to YES (the default) will make doxygen replace the get and set methods by a property in the documentation. This will only work if the methods are indeed getting or setting a simple type. If this is not the case, or you want to show the methods anyway, you should set this option to NO.",
"For Microsoft's IDL there are propget and propput attributes to indicate\n"
"getter and setter methods for a property. Setting this option to YES (the\n"
"default) will make doxygen replace the get and set methods by a property in\n"
"the documentation. This will only work if the methods are indeed getting or\n"
"setting a simple type. If this is not the case, or you want to show the\n"
"methods anyway, you should set this option to NO.",
TRUE
);
//----
......@@ -801,7 +806,8 @@ void addConfigOptions(Config *cfg)
"requires the bibtex tool to be installed. See also\n"
"http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style\n"
"of the bibliography can be controlled using LATEX_BIB_STYLE. To use this\n"
"feature you need bibtex and perl available in the search path."
"feature you need bibtex and perl available in the search path. Do not use\n"
"file names with spaces, bibtex cannot handle them."
);
cl->setWidgetType(ConfigList::File);
//---------------------------------------------------------------------------
......
......@@ -691,7 +691,7 @@ void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int
* The line actually containing the bracket is returned via endLine.
* Note that for VHDL code the bracket search is not done.
*/
static bool readCodeFragment(const char *fileName,
bool readCodeFragment(const char *fileName,
int &startLine,int &endLine,QCString &result)
{
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
......@@ -1546,7 +1546,7 @@ void Definition::writeToc(OutputList &ol)
ol.writeString("<ul>");
SDict<SectionInfo>::Iterator li(*sectionDict);
SectionInfo *si;
int level=1;
int level=1,l;
char cs[2];
cs[1]='\0';
bool inLi[5]={ FALSE, FALSE, FALSE, FALSE };
......@@ -1561,13 +1561,19 @@ void Definition::writeToc(OutputList &ol)
int nextLevel = (int)si->type;
if (nextLevel>level)
{
ol.writeString("<ul>");
for (l=level;l<nextLevel;l++)
{
ol.writeString("<ul>");
}
}
else if (nextLevel<level)
{
if (inLi[level]) ol.writeString("</li>\n");
inLi[level]=FALSE;
ol.writeString("</ul>\n");
for (l=level;l>nextLevel;l--)
{
if (inLi[l]) ol.writeString("</li>\n");
inLi[l]=FALSE;
ol.writeString("</ul>\n");
}
}
cs[0]='0'+nextLevel;
if (inLi[nextLevel]) ol.writeString("</li>\n");
......
......@@ -38,6 +38,8 @@ struct SectionInfo;
class Definition;
class DefinitionImpl;
/** Data associated with a detailed description. */
struct DocInfo
{
......@@ -382,4 +384,12 @@ class DefinitionListIterator : public QListIterator<Definition>
~DefinitionListIterator() {}
};
/** Reads a fragment from file \a fileName starting with line \a startLine
* and ending with line \a endLine. The result is returned as a string
* via \a result. The function returns TRUE if successful and FALSE
* in case of an error.
*/
bool readCodeFragment(const char *fileName,
int &startLine,int &endLine,
QCString &result);
#endif
......@@ -606,7 +606,7 @@ void TreeDiagram::drawBoxes(FTextStream &t,Image *image,
while (dr && !done)
{
int x=0,y=0;
float xf=0.0,yf=0.0;
float xf=0.0f,yf=0.0f;
DiagramItem *di=dr->first();
if (di->isInList()) // put boxes in a list
{
......@@ -623,8 +623,8 @@ void TreeDiagram::drawBoxes(FTextStream &t,Image *image,
}
else
{
if (doBase) yf += 1.0;
else yf -= 1.0;
if (doBase) yf += 1.0f;
else yf -= 1.0f;
}
}
else
......@@ -736,7 +736,7 @@ void TreeDiagram::drawConnectors(FTextStream &t,Image *image,
if (di->isInList()) // row consists of list connectors
{
int x=0,y=0,ys=0;
float xf=0.0,yf=0.0,ysf=0.0;
float xf=0.0f,yf=0.0f,ysf=0.0f;
while (di)
{
DiagramItem *pi=di->parentItem();
......@@ -808,12 +808,12 @@ void TreeDiagram::drawConnectors(FTextStream &t,Image *image,
if (doBase)
{
ysf = di->yPos()/(float)gridHeight+superRows-1;
yf = ysf + 0.5;
yf = ysf + 0.5f;
}
else
{
ysf = (float)superRows-0.25-di->yPos()/(float)gridHeight;
yf = ysf - 0.25;
ysf = (float)superRows-0.25f-di->yPos()/(float)gridHeight;
yf = ysf - 0.25f;
}
}
while (di!=last) // more children to add
......@@ -841,12 +841,12 @@ void TreeDiagram::drawConnectors(FTextStream &t,Image *image,
if (doBase)
{
t << "1 " << xf << " " << yf << " hedge\n";
yf += 1.0;
yf += 1.0f;
}
else
{
t << "0 " << xf << " " << yf << " hedge\n";
yf -= 1.0;
yf -= 1.0f;
}
}
di=dr->next();
......@@ -1092,9 +1092,9 @@ void ClassDiagram::writeFigure(FTextStream &output,const char *path,
uint estWidth = cols*(20+QMAX(baseMaxLabelWidth,superMaxLabelWidth));
//printf("Estimated size %d x %d\n",estWidth,estHeight);
const float pageWidth = 14.0; // estimated page width in cm.
// Somewhat lower to deal with estimation
// errors.
const float pageWidth = 14.0f; // estimated page width in cm.
// Somewhat lower to deal with estimation
// errors.
// compute the image height in centimeters based on the estimates
float realHeight = QMIN(rows,12); // real height in cm
......
......@@ -34,7 +34,7 @@ DirDef::DirDef(const char *path) : Definition(path,1,path)
}
setLocalName(m_shortName);
m_dispName = fullPathNames ? stripFromPath(path) : m_shortName;
if (m_dispName.at(m_dispName.length()-1)=='/')
if (m_dispName.length()>0 && m_dispName.at(m_dispName.length()-1)=='/')
{ // strip trailing /
m_dispName = m_dispName.left(m_dispName.length()-1);
}
......@@ -648,7 +648,7 @@ DirDef *DirDef::mergeDirectoryInTree(const QCString &path)
while ((i=path.find('/',p))!=-1)
{
QCString part=path.left(i+1);
if (!matchPath(part,Config_getList("STRIP_FROM_PATH")) && part!="/")
if (!matchPath(part,Config_getList("STRIP_FROM_PATH")) && (part!="/" && part!="//"))
{
dir=createNewDir(part);
}
......
......@@ -43,6 +43,7 @@
#include "portable.h"
#include "cite.h"
#include "arguments.h"
#include "vhdldocgen.h"
// debug off
#define DBG(x) do {} while(0)
......@@ -5399,6 +5400,7 @@ int DocPara::handleCommand(const QCString &cmdName)
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::Msc,g_isExample,g_exampleName));
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: msc section ended without end marker");
doctokenizerYYsetStatePara();
VhdlDocGen::createFlowChart(g_memberDef);
}
break;
case CMD_ENDCODE:
......
......@@ -504,7 +504,7 @@ class DocIndexEntry : public DocNode
{
public:
DocIndexEntry(DocNode *parent,Definition *scope,MemberDef *md)
: m_scope(scope), m_member(md) { m_parent = parent; }
: m_scope(scope), m_member(md){ m_parent = parent; }
Kind kind() const { return Kind_IndexEntry; }
int parse();
Definition *scope() const { return m_scope; }
......
......@@ -263,7 +263,8 @@ void DocSets::addContentsItem(bool isDir,
}
}
void DocSets::addIndexItem(Definition *context,MemberDef *md,const char *)
void DocSets::addIndexItem(Definition *context,MemberDef *md,
const char *,const char *)
{
if (md==0 && context==0) return;
......
......@@ -49,7 +49,8 @@ class DocSets : public IndexIntf
bool addToNavIndex,
Definition *def
);
void addIndexItem(Definition *context,MemberDef *md,const char *title);
void addIndexItem(Definition *context,MemberDef *md,
const char *sectionAnchor,const char *title);
void addIndexFile(const char *name);
void addImageFile(const char *) {}
void addStyleSheetFile(const char *) {}
......
......@@ -1408,7 +1408,6 @@ bool DotManager::run()
return TRUE;
}
//--------------------------------------------------------------------
......@@ -1682,6 +1681,18 @@ static void writeBoxMemberList(FTextStream &t,
}
}
static QCString stripProtectionPrefix(const QCString &s)
{
if (!s.isEmpty() && (s[0]=='-' || s[0]=='+' || s[0]=='~' || s[0]=='#'))
{
return s.mid(1);
}
else
{
return s;
}
}
void DotNode::writeBox(FTextStream &t,
GraphType gt,
GraphOutputFormat /*format*/,
......@@ -1698,18 +1709,29 @@ void DotNode::writeBox(FTextStream &t,
if (m_classDef && umlLook && (gt==Inheritance || gt==Collaboration))
{
// add names shown as relation to a dictionary, so we don't show
// add names shown as relations to a dictionary, so we don't show
// them as attributes as well
QDict<void> arrowNames(17);
if (m_edgeInfo)
{
// for each edge
QListIterator<EdgeInfo> li(*m_edgeInfo);
EdgeInfo *ei;
for (li.toFirst();(ei=li.current());++li)
{
if (!ei->m_label.isEmpty())
if (!ei->m_label.isEmpty()) // labels joined by \n
{
arrowNames.insert(ei->m_label,(void*)0x8);
int li=ei->m_label.find('\n');
int p=0;
QCString lab;
while ((li=ei->m_label.find('\n',p))!=-1)
{
lab = stripProtectionPrefix(ei->m_label.mid(p,li-p));
arrowNames.insert(lab,(void*)0x8);
p=li+1;
}
lab = stripProtectionPrefix(ei->m_label.right(ei->m_label.length()-p));
arrowNames.insert(lab,(void*)0x8);
}
}
}
......
......@@ -4542,9 +4542,18 @@ static bool findClassRelation(
{
baseClass=new ClassDef(root->fileName,root->startLine,
baseClassName,ClassDef::Class);
Doxygen::classSDict->append(baseClassName,baseClass);
//Doxygen::classSDict->append(baseClassName,baseClass);
if (isArtificial) baseClass->setArtificial(TRUE);
baseClass->setLanguage(root->lang);
int si = baseClassName.findRev("::");
if (si!=-1) // class is nested
{
Definition *sd = findScopeFromQualifiedName(Doxygen::globalScope,baseClassName.left(si));
if (sd==0 || sd==Doxygen::globalScope) // outer scope not found
{
baseClass->setArtificial(TRUE); // see bug678139
}
}
}
}
if (biName.right(2)=="-p")
......@@ -7430,7 +7439,6 @@ static void buildCompleteMemberLists()
static void generateFileSources()
{
if (documentedHtmlFiles==0) return;
if (Doxygen::inputNameList->count()>0)
{
FileNameListIterator fnli(*Doxygen::inputNameList);
......@@ -9869,6 +9877,7 @@ static void stopDoxygen(int)
{
thisDir.remove(Doxygen::objDBFileName);
}
killpg(0,SIGINT);
exit(1);
}
#endif
......
/* The standard CSS for doxygen */
/* The standard CSS for doxygen $doxygenversion */
body, table, div, p, dl {
font: 400 14px/19px Roboto,sans-serif;
......@@ -791,6 +791,14 @@ table.fieldtable {
width: 100%;
}
.fieldtable td.fielddoc p:first-child {
margin-top: 2px;
}
.fieldtable td.fielddoc p:last-child {
margin-bottom: 2px;
}
.fieldtable tr:last-child td {
border-bottom: none;
}
......
"/* The standard CSS for doxygen */\n"
"/* The standard CSS for doxygen $doxygenversion */\n"
"\n"
"body, table, div, p, dl {\n"
" font: 400 14px/19px Roboto,sans-serif;\n"
......@@ -791,6 +791,14 @@
" width: 100%;\n"
"}\n"
"\n"
".fieldtable td.fielddoc p:first-child {\n"
" margin-top: 2px;\n"
"} \n"
" \n"
".fieldtable td.fielddoc p:last-child {\n"
" margin-bottom: 2px;\n"
"}\n"
"\n"
".fieldtable tr:last-child td {\n"
" border-bottom: none;\n"
"}\n"
......
......@@ -44,24 +44,43 @@ function toggleLevel(level)
});
updateStripes();
}
function toggleFolder(id)
function toggleFolder(id)
{
var n = $('[id^=row_'+id+']');
var i = $('[id^=img_'+id+']');
var a = $('[id^=arr_'+id+']');
var c = n.slice(1);
if (c.filter(':first').is(':visible')===true) {
i.attr('src','ftv2folderclosed.png');
a.attr('src','ftv2pnode.png');
c.hide();
} else {
i.attr('src','ftv2folderopen.png');
a.attr('src','ftv2mnode.png');
c.show();
//The clicked row
var currentRow = $('#row_'+id);
var currentRowImages = currentRow.find("img");
//All rows after the clicked row
var rows = currentRow.nextAll("tr");
//Only match elements AFTER this one (can't hide elements before)
var childRows = rows.filter(function() {
var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
return this.id.match(re);
});
//First row is visible we are HIDING
if (childRows.filter(':first').is(':visible')===true) {
currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png');
currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png');
rows.filter("[id^=row_"+id+"]").hide();
} else { //We are SHOWING
//All sub images
var childImages = childRows.find("img");
var childImg = childImages.filter("[id^=img]");
var childArr = childImages.filter("[id^=arr]");
currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row
currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row
childImg.attr('src','ftv2folderclosed.png'); //children closed
childArr.attr('src','ftv2pnode.png'); //children closed
childRows.show(); //show all children
}
updateStripes();
}
function toggleInherit(id)
{
var rows = $('tr.inherit.'+id);
......
......@@ -44,24 +44,43 @@
" });\n"
" updateStripes();\n"
"}\n"
"function toggleFolder(id) \n"
"\n"
"function toggleFolder(id)\n"
"{\n"
" var n = $('[id^=row_'+id+']');\n"
" var i = $('[id^=img_'+id+']');\n"
" var a = $('[id^=arr_'+id+']');\n"
" var c = n.slice(1);\n"
" if (c.filter(':first').is(':visible')===true) {\n"
" i.attr('src','ftv2folderclosed.png');\n"
" a.attr('src','ftv2pnode.png');\n"
" c.hide();\n"
" } else {\n"
" i.attr('src','ftv2folderopen.png');\n"
" a.attr('src','ftv2mnode.png');\n"
" c.show();\n"
" //The clicked row\n"
" var currentRow = $('#row_'+id);\n"
" var currentRowImages = currentRow.find(\"img\");\n"
"\n"
" //All rows after the clicked row\n"
" var rows = currentRow.nextAll(\"tr\");\n"
"\n"
" //Only match elements AFTER this one (can't hide elements before)\n"
" var childRows = rows.filter(function() {\n"
" var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n"
" return this.id.match(re);\n"
" });\n"
"\n"
" //First row is visible we are HIDING\n"
" if (childRows.filter(':first').is(':visible')===true) {\n"
" currentRowImages.filter(\"[id^=arr]\").attr('src', 'ftv2pnode.png');\n"
" currentRowImages.filter(\"[id^=img]\").attr('src', 'ftv2folderclosed.png');\n"
" rows.filter(\"[id^=row_\"+id+\"]\").hide();\n"
" } else { //We are SHOWING\n"
" //All sub images\n"
" var childImages = childRows.find(\"img\");\n"
" var childImg = childImages.filter(\"[id^=img]\");\n"
" var childArr = childImages.filter(\"[id^=arr]\");\n"
"\n"
" currentRow.find(\"[id^=arr]\").attr('src', 'ftv2mnode.png'); //open row\n"
" currentRow.find(\"[id^=img]\").attr('src', 'ftv2folderopen.png'); //open row\n"
" childImg.attr('src','ftv2folderclosed.png'); //children closed\n"
" childArr.attr('src','ftv2pnode.png'); //children closed\n"
" childRows.show(); //show all children\n"
" }\n"
" updateStripes();\n"
"}\n"
"\n"
"\n"
"function toggleInherit(id)\n"
"{\n"
" var rows = $('tr.inherit.'+id);\n"
......
......@@ -189,6 +189,7 @@ void EclipseHelp::addContentsItem(
void EclipseHelp::addIndexItem(
Definition * /* context */,
MemberDef * /* md */,
const char * /* sectionAnchor */,
const char * /* title */)
{
}
......
......@@ -52,7 +52,8 @@ class EclipseHelp : public IndexIntf
virtual void addContentsItem(bool isDir, const char *name, const char *ref,
const char *file, const char *anchor,bool separateIndex,bool addToNavIndex,
Definition *def);
virtual void addIndexItem(Definition *context,MemberDef *md,const char *title);
virtual void addIndexItem(Definition *context,MemberDef *md,
const char *sectionAnchor,const char *title);
virtual void addIndexFile(const char *name);
virtual void addImageFile(const char *name);
virtual void addStyleSheetFile(const char *name);
......
......@@ -807,7 +807,7 @@ void FileDef::writeSource(OutputList &ol)
{
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
!generateTreeView,
!isDocFile && genSourceFile ? 0 : getOutputFileBase());
!isDocFile && genSourceFile ? QCString() : getOutputFileBase());
if (!generateTreeView)
{
getDirDef()->writeNavigationPath(ol);
......@@ -820,7 +820,7 @@ void FileDef::writeSource(OutputList &ol)
else
{
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,FALSE,
!isDocFile && genSourceFile ? 0 : getOutputFileBase());
!isDocFile && genSourceFile ? QCString() : getOutputFileBase());
startTitle(ol,getSourceFileBase());
ol.parseText(title);
endTitle(ol,getSourceFileBase(),0);
......@@ -1173,13 +1173,15 @@ bool FileDef::isIncluded(const QCString &name) const
bool FileDef::generateSourceFile() const
{
static bool sourceBrowser = Config_getBool("SOURCE_BROWSER");
static bool verbatimHeaders = Config_getBool("VERBATIM_HEADERS");
QCString extension = name().right(4);
return !isReference() &&
(Config_getBool("SOURCE_BROWSER") ||
(Config_getBool("VERBATIM_HEADERS") && guessSection(name())==Entry::HEADER_SEC)
(sourceBrowser ||
(verbatimHeaders && guessSection(name())==Entry::HEADER_SEC)
) &&
extension!=".doc" && extension!=".txt" && extension!=".dox" &&
extension!=".md" && extension!=".markdown";
extension!=".md" && name().right(9)!=".markdown";
}
......@@ -1526,7 +1528,7 @@ void FileDef::acquireFileVersion()
}
const int bufSize=1024;
char buf[bufSize];
int numRead = fread(buf,1,bufSize,f);
int numRead = (int)fread(buf,1,bufSize,f);
portable_pclose(f);
if (numRead>0 && !(fileVersion=QCString(buf,numRead).stripWhiteSpace()).isEmpty())
{
......
......@@ -220,7 +220,7 @@ static void newLine();
//-----------------------------------------------------------------------------
#undef YY_INPUT
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
#define YY_USER_ACTION yyColNr+=yyleng;
#define YY_USER_ACTION yyColNr+=(int)yyleng;
//-----------------------------------------------------------------------------
%}
......@@ -312,8 +312,8 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
//fprintf(stderr, "---%s", yytext);
int indexStart = getAmpersandAtTheStart(yytext, yyleng);
int indexEnd = getAmpOrExclAtTheEnd(yytext, yyleng);
int indexStart = getAmpersandAtTheStart(yytext, (int)yyleng);
int indexEnd = getAmpOrExclAtTheEnd(yytext, (int)yyleng);
if (indexEnd>=0 && yytext[indexEnd]!='&') //we are only interested in amp
indexEnd=-1;
......@@ -362,7 +362,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
initializer+=yytext;
}
<String>\"|\' { // string ends with next quote without previous backspace
if (yytext[0]!=stringStartSymbol) { yyColNr -= yyleng; REJECT; } // single vs double quote
if (yytext[0]!=stringStartSymbol) { yyColNr -= (int)yyleng; REJECT; } // single vs double quote
if (yy_top_state() == Initialization
|| yy_top_state() == ArrayInitializer)
initializer+=yytext;
......@@ -373,7 +373,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
initializer+=yytext;
}
<*>\"|\' { /* string starts */
if (YY_START == StrIgnore) { yyColNr -= yyleng; REJECT; }; // ignore in simple comments
if (YY_START == StrIgnore) { yyColNr -= (int)yyleng; REJECT; }; // ignore in simple comments
yy_push_state(YY_START);
if (yy_top_state() == Initialization
|| yy_top_state() == ArrayInitializer)
......@@ -384,7 +384,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
/*------ ignore simple comment (not documentation comments) */
<*>"!"/[^<>\n] { if (YY_START == String) { yyColNr -= yyleng; REJECT; } // "!" is ignored in strings
<*>"!"/[^<>\n] { if (YY_START == String) { yyColNr -= (int)yyleng; REJECT; } // "!" is ignored in strings
// skip comment line (without docu comments "!>" "!<" )
/* ignore further "!" and ignore comments in Strings */
if ((YY_START != StrIgnore) && (YY_START != String))
......@@ -709,7 +709,7 @@ private {
}
else
{
yyColNr -= yyleng;
yyColNr -= (int)yyleng;
REJECT;
}
}
......@@ -733,10 +733,10 @@ private {
{BS} {}
{ATTR_SPEC}. { /* update current modifierswhen it is an ATTR_SPEC and not a variable name */
/* bug_625519 */
QChar chr = yytext[yyleng-1];
QChar chr = yytext[(int)yyleng-1];
if (chr.isLetter() || chr.isDigit() || (chr == '_'))
{
yyColNr -= yyleng;
yyColNr -= (int)yyleng;
REJECT;
}
else
......@@ -744,7 +744,7 @@ private {
QCString tmp = yytext;
tmp = tmp.left(tmp.length() - 1);
yyColNr -= 1;
unput(yytext[yyleng-1]);
unput(yytext[(int)yyleng-1]);
currentModifiers |= (tmp);
}
}
......@@ -853,12 +853,12 @@ private {
attr += yytext;
modifiers[current_root][name.lower()] |= attr;
}
<Variable>{COMMA} { //printf("COMMA: %d<=..<=%d\n", yyColNr-yyleng, yyColNr);
<Variable>{COMMA} { //printf("COMMA: %d<=..<=%d\n", yyColNr-(int)yyleng, yyColNr);
// locate !< comment
updateVariablePrepassComment(yyColNr-yyleng, yyColNr);
updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr);
}
<Variable>{BS}"=" { yy_push_state(YY_START);
initializer="";
initializer="=";
initializerScope = initializerArrayScope = 0;
BEGIN(Initialization);
}
......@@ -904,7 +904,7 @@ private {
}
<Initialization>{COMMA} { if (initializerScope == 0)
{
updateVariablePrepassComment(yyColNr-yyleng, yyColNr);
updateVariablePrepassComment(yyColNr-(int)yyleng, yyColNr);
yy_pop_state(); // end initialization
if (v_type == V_VARIABLE) last_entry->initializer= initializer;
}
......@@ -979,7 +979,7 @@ private {
BEGIN(SubprogBody);
}
<Parameterlist>{COMMA}|{BS} { current->args += yytext;
CommentInPrepass *c = locatePrepassComment(yyColNr-yyleng, yyColNr);
CommentInPrepass *c = locatePrepassComment(yyColNr-(int)yyleng, yyColNr);
if (c!=NULL) {
if(current->argList->count()>0) {
current->argList->at(current->argList->count()-1)->docs = c->str;
......@@ -1029,7 +1029,7 @@ private {
else
{
/* handle out of place !< comment as a normal comment */
if (YY_START == String) { yyColNr -= yyleng; REJECT; } // "!" is ignored in strings
if (YY_START == String) { yyColNr -= (int)yyleng; REJECT; } // "!" is ignored in strings
// skip comment line (without docu comments "!>" "!<" )
/* ignore further "!" and ignore comments in Strings */
if ((YY_START != StrIgnore) && (YY_START != String))
......
......@@ -1296,7 +1296,11 @@ void FTVHelp::generateTreeViewScripts()
if (f.open(IO_WriteOnly))
{
FTextStream t(&f);
t << replaceColorMarkers(navtree_css);
t << substitute(
replaceColorMarkers(navtree_css),
"$width",
QCString().setNum(Config_getInt("TREEVIEW_WIDTH"))+"px"
);
}
}
}
......
......@@ -53,7 +53,7 @@ class FTVHelp : public IndexIntf
bool separateIndex,
bool addToNavIndex,
Definition *def);
void addIndexItem(Definition *,MemberDef *,const char *) {}
void addIndexItem(Definition *,MemberDef *,const char *,const char *) {}
void addIndexFile(const char *) {}
void addImageFile(const char *) {}
void addStyleSheetFile(const char *) {}
......
......@@ -948,7 +948,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
}
}
Doxygen::indexList.addIndexItem(this,0,title);
Doxygen::indexList.addIndexItem(this,0,0,title);
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
......
......@@ -3,6 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
......
......@@ -3,6 +3,7 @@
"<head>\n"
"<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"
"<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n"
"<meta name=\"generator\" content=\"Doxygen $doxygenversion\"/>\n"
"<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->\n"
"<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->\n"
"<link href=\"$relpath$tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
......
......@@ -29,7 +29,7 @@
#include "parserintf.h"
#include "msc.h"
#include "util.h"
#include "vhdldocgen.h"
static const int NUM_HTML_LIST_TYPES = 4;
static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
......@@ -476,13 +476,38 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
break;
case DocVerbatim::Msc:
{
forceEndParagraph(s);
#if 0 // TODO: this should get its own command and not hijack the \msc
// command. This should also work for Latex and RTF output (or at
// least produce valid output there.
static bool optimizeForVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (optimizeForVhdl)
{
if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator
{
QCString fname=FlowNode::convertNameToFileName();
m_t << "<div align=\"left\">" << endl;
m_t << "<p>";
m_t << "flowchart:" ;
m_t << "<a href=\"";
m_t << fname.data();
m_t << ".svg\">";
m_t << VhdlDocGen::getFlowMember()->name().data();
m_t << "</a><br><br>";
m_t << s->text().data();
m_t << "</p>";
VhdlDocGen::setFlowMember(NULL);
}
}
#endif
static int mscindex = 1;
QCString baseName(4096);
baseName.sprintf("%s%d",
(Config_getString("HTML_OUTPUT")+"/inline_mscgraph_").data(),
mscindex++
);
);
QFile file(baseName+".msc");
if (!file.open(IO_WriteOnly))
{
......@@ -491,17 +516,16 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
QCString text = "msc {";
text+=s->text();
text+="}";
file.writeBlock( text, text.length() );
file.close();
forceEndParagraph(s);
m_t << "<div align=\"center\">" << endl;
writeMscFile(baseName+".msc",s->relPath(),s->context());
m_t << "</div>" << endl;
forceStartParagraph(s);
if (Config_getBool("DOT_CLEANUP")) file.remove();
}
m_t << "</div>" << endl;
forceStartParagraph(s);
break;
}
}
......@@ -702,7 +726,7 @@ void HtmlDocVisitor::visit(DocIndexEntry *e)
// e->scope() ? e->scope()->name().data() : "<null>",
// e->member() ? e->member()->name().data() : "<null>"
// );
Doxygen::indexList.addIndexItem(e->scope(),e->member(),e->entry());
Doxygen::indexList.addIndexItem(e->scope(),e->member(),anchor,e->entry());
}
void HtmlDocVisitor::visit(DocSimpleSectSep *)
......
......@@ -117,10 +117,10 @@ static unsigned char tab_a_png[36] =
// normal tab background luma
static unsigned char tab_b_png[36] =
{
221, 231, 238, 236, 233, 230, 228, 225, 224,
221, 220, 218, 217, 216, 215, 214, 213, 212,
212, 194, 195, 196, 197, 198, 199, 200, 201,
202, 204, 206, 208, 210, 214, 216, 203, 185
218, 228, 235, 233, 230, 227, 225, 222, 221,
218, 217, 215, 214, 213, 212, 211, 210, 209,
209, 197, 198, 199, 200, 201, 202, 203, 204,
205, 207, 209, 211, 213, 217, 219, 206, 188
};
// hovering tab background luma
......@@ -907,7 +907,7 @@ QCString substitute(const char *s,const char *src,const char *dst)
{
int count;
for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++;
resLen = p-s+strlen(p)+count*(dstLen-srcLen);
resLen = (int)(p-s)+strlen(p)+count*(dstLen-srcLen);
}
else // result has same size as s
{
......@@ -939,7 +939,7 @@ QCString clearBlock(const char *s,const char *begin,const char *end)
int resLen = 0;
for (p=s; (q=strstr(p,begin))!=0; p=q+endLen)
{
resLen+=q-p;
resLen+=(int)(q-p);
p=q+beginLen;
if ((q=strstr(p,end))==0)
{
......@@ -1500,6 +1500,7 @@ void HtmlGenerator::writeSearchData(const char *dir)
{
FTextStream t(&f);
QCString searchCss = replaceColorMarkers(search_styleSheet);
searchCss = substitute(searchCss,"$doxygenversion",versionString);
if (Config_getBool("DISABLE_INDEX"))
{
// move up the search box if there are no tabs
......@@ -1513,29 +1514,21 @@ void HtmlGenerator::writeSearchData(const char *dir)
void HtmlGenerator::writeStyleSheetFile(QFile &file)
{
FTextStream t(&file);
t << replaceColorMarkers(defaultStyleSheet);
t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
}
void HtmlGenerator::writeHeaderFile(QFile &file, const char * /*cssname*/)
{
FTextStream t(&file);
t << "<!-- HTML header for doxygen " << versionString << "-->" << endl;
QCString contents(defaultHtmlHeader);
t << contents;
// QString relPathStr = "$relpath$";
// QCString id(file.name().utf8());
// if (id.right(Doxygen::htmlFileExtension.length())==Doxygen::htmlFileExtension)
// {
// id=id.left(id.length()-Doxygen::htmlFileExtension.length());
// }
// t << substitute(defaultHtmlHeader, "$stylesheet", cssname);
}
void HtmlGenerator::writeFooterFile(QFile &file)
{
FTextStream t(&file);
t << "<!-- HTML footer for doxygen " << versionString << "-->" << endl;
QCString contents(defaultHtmlFooter);
t << contents;
}
......@@ -1675,7 +1668,7 @@ void HtmlGenerator::writeStyleInfo(int part)
//t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
//t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
t << replaceColorMarkers(defaultStyleSheet);
t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
endPlainFile();
Doxygen::indexList.addStyleSheetFile("doxygen.css");
}
......
......@@ -262,16 +262,21 @@ class HtmlGenerator : public OutputGenerator
void endContents();
void writeNonBreakableSpace(int);
void startDescTable()
{ t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; }
void startDescTable(const char *title)
//{ t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; }
{ t << "<table class=\"fieldtable\">" << endl
<< "<tr><th colspan=\"2\">" << title << "</th></tr>";
}
void endDescTable()
{ t << "</table>" << endl; }
void startDescTableTitle()
{ t << "<tr><td valign=\"top\"><em>"; }
//{ t << "<tr><td valign=\"top\"><em>"; }
{ t << "<tr><td class=\"fieldname\"><em>"; }
void endDescTableTitle()
{ t << "</em>&nbsp;</td>"; }
void startDescTableData()
{ t << "<td>" << endl; }
//{ t << "<td>" << endl; }
{ t << "<td class=\"fielddoc\">" << endl; }
void endDescTableData()
{ t << "</td></tr>" << endl; }
......
......@@ -621,7 +621,7 @@ QCString HtmlHelp::recode(const QCString &s)
char *oPtr = output.data();
if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft))
{
oSize -= oLeft;
oSize -= (int)oLeft;
output.resize(oSize+1);
output.at(oSize)='\0';
return output;
......@@ -692,7 +692,7 @@ void HtmlHelp::addContentsItem(bool isDir,
void HtmlHelp::addIndexItem(Definition *context,MemberDef *md,
const char *word)
const char *sectionAnchor,const char *word)
{
if (md)
{
......@@ -712,14 +712,14 @@ void HtmlHelp::addIndexItem(Definition *context,MemberDef *md,
QCString level2 = md->name();
QCString contRef = separateMemberPages ? cfname : cfiname;
QCString memRef = cfname;
QCString anchor = md->anchor();
QCString anchor = sectionAnchor ? QCString(sectionAnchor) : md->anchor();
index->addItem(level1,level2,contRef,anchor,TRUE,FALSE);
index->addItem(level2,level1,memRef,anchor,TRUE,TRUE);
}
else if (context)
{
QCString level1 = word ? QCString(word) : context->name();
index->addItem(level1,0,context->getOutputFileBase(),0,TRUE,FALSE);
index->addItem(level1,0,context->getOutputFileBase(),sectionAnchor,TRUE,FALSE);
}
}
......
......@@ -79,7 +79,8 @@ class HtmlHelp : public IndexIntf
bool separateIndex,
bool addToNavIndex,
Definition *def);
void addIndexItem(Definition *context,MemberDef *md,const char *title);
void addIndexItem(Definition *context,MemberDef *md,
const char *sectionAnchor, const char *title);
void addIndexFile(const char *name);
void addImageFile(const char *);
void addStyleSheetFile(const char *) {}
......
......@@ -1442,12 +1442,13 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
{
bool hasChildren = containsVisibleChild(nd,showClasses);
bool isLinkable = nd->isLinkableInProject();
QCString ref;
QCString file;
if (nd->isLinkableInProject())
if (isLinkable)
{
ref = nd->getReference();
ref = nd->getReference();
file = nd->getOutputFileBase();
if (nd->getLanguage()==SrcLangExt_VHDL) // UGLY HACK
{
......@@ -1455,7 +1456,7 @@ static void writeNamespaceTree(NamespaceSDict *nsDict,FTVHelp *ftv,
}
}
if (nd->isLinkable() || hasChildren)
if (isLinkable || hasChildren)
{
ftv->addContentsItem(hasChildren,nd->localName(),ref,file,0,FALSE,TRUE,nd);
......@@ -3970,7 +3971,7 @@ static void writeIndex(OutputList &ol)
{
Doxygen::indexList.addContentsItem(Doxygen::mainPage->hasSubPages(),title,0,indexName,0,Doxygen::mainPage->hasSubPages(),TRUE);
}
if (Doxygen::mainPage->hasSubPages())
if (Doxygen::mainPage->hasSubPages() || Doxygen::mainPage->hasSections())
{
writePages(Doxygen::mainPage,0);
}
......
......@@ -39,7 +39,8 @@ class IndexIntf
virtual void addContentsItem(bool isDir, const char *name, const char *ref,
const char *file, const char *anchor, bool separateIndex,
bool addToNavIndex,Definition *def) = 0;
virtual void addIndexItem(Definition *context,MemberDef *md,const char *title) = 0;
virtual void addIndexItem(Definition *context,MemberDef *md,
const char *sectionAnchor,const char *title) = 0;
virtual void addIndexFile(const char *name) = 0;
virtual void addImageFile(const char *name) = 0;
virtual void addStyleSheetFile(const char *name) = 0;
......@@ -139,9 +140,9 @@ class IndexList : public IndexIntf
Definition *def=0)
{ if (m_enabled) foreach<bool,const char *,const char *,const char *,const char*,bool,bool,Definition *>
(&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex,def); }
void addIndexItem(Definition *context,MemberDef *md,const char *title=0)
{ if (m_enabled) foreach<Definition *,MemberDef *>
(&IndexIntf::addIndexItem,context,md,title); }
void addIndexItem(Definition *context,MemberDef *md,const char *sectionAnchor=0,const char *title=0)
{ if (m_enabled) foreach<Definition *,MemberDef *,const char *,const char *>
(&IndexIntf::addIndexItem,context,md,sectionAnchor,title); }
void addIndexFile(const char *name)
{ if (m_enabled) foreach<const char *>(&IndexIntf::addIndexFile,name); }
void addImageFile(const char *name)
......
......@@ -954,6 +954,7 @@ static void writeDefaultFooter(FTextStream &t)
void LatexGenerator::writeHeaderFile(QFile &f)
{
FTextStream t(&f);
t << "% Latex header for doxygen " << versionString << endl;
writeDefaultHeaderPart1(t);
t << "Your title here";
writeDefaultHeaderPart2(t);
......@@ -964,12 +965,14 @@ void LatexGenerator::writeHeaderFile(QFile &f)
void LatexGenerator::writeFooterFile(QFile &f)
{
FTextStream t(&f);
t << "% Latex footer for doxygen " << versionString << endl;
writeDefaultFooter(t);
}
void LatexGenerator::writeStyleSheetFile(QFile &f)
{
FTextStream t(&f);
t << "% stylesheet for doxygen " << versionString << endl;
writeDefaultStyleSheetPart1(t);
QCString &projectName = Config_getString("PROJECT_NAME");
......
......@@ -198,10 +198,15 @@ class LatexGenerator : public OutputGenerator
void endContents() {}
void writeNonBreakableSpace(int);
void startDescTable()
{ t << "\\begin{description}" << endl; }
void startDescTable(const char *title)
{ startSimpleSect(EnumValues,0,0,title);
startDescForItem();
t << "\\begin{description}" << endl; }
void endDescTable()
{ t << "\\end{description}" << endl; }
{ t << "\\end{description}" << endl;
endDescForItem();
endSimpleSect();
}
void startDescTableTitle()
{ t << "\\item[{\\em " << endl; }
void endDescTableTitle()
......
......@@ -22,6 +22,7 @@
#include "vhdldocgen.h"
#include "util.h"
#include "doxygen.h"
#include "version.h"
#include <assert.h>
#include <qxml.h>
......@@ -1372,7 +1373,7 @@ void writeDefaultLayoutFile(const char *fileName)
return;
}
QTextStream t(&f);
t << layout_default;
t << substitute(layout_default,"$doxygenversion",versionString);
}
//----------------------------------------------------------------------------------
......
"<doxygenlayout version=\"1.0\">\n"
" <!-- Generated by doxygen $doxygenversion -->\n"
" <!-- Navigation index tabs for HTML output -->\n"
" <navindex>\n"
" <tab type=\"mainpage\" visible=\"yes\" title=\"\"/>\n"
......
<doxygenlayout version="1.0">
<!-- Generated by doxygen $doxygenversion -->
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
......
......@@ -1765,13 +1765,13 @@ static unsigned Crc32_crc_table[256];
/*Make the table for a fast CRC.*/
static void Crc32_make_crc_table(void)
{
unsigned c, k, n;
unsigned int c, k, n;
for(n = 0; n < 256; n++)
{
c = n;
for(k = 0; k < 8; k++)
{
if(c & 1) c = 0xedb88320L ^ (c >> 1);
if(c & 1) c = (unsigned int)(0xedb88320L ^ (c >> 1));
else c = c >> 1;
}
Crc32_crc_table[n] = c;
......@@ -1782,9 +1782,9 @@ static void Crc32_make_crc_table(void)
/*Update a running CRC with the bytes buf[0..len-1]--the CRC should be
initialized to all 1's, and the transmitted value is the 1's complement of the
final running CRC (see the crc() routine below).*/
static unsigned Crc32_update_crc(const unsigned char* buf, unsigned crc, size_t len)
static unsigned Crc32_update_crc(const unsigned char* buf, unsigned int crc, size_t len)
{
unsigned c = crc;
unsigned int c = crc;
size_t n;
if(!Crc32_crc_table_computed) Crc32_make_crc_table();
......@@ -1798,7 +1798,7 @@ static unsigned Crc32_update_crc(const unsigned char* buf, unsigned crc, size_t
/*Return the CRC of the bytes buf[0..len-1].*/
static unsigned Crc32_crc(const unsigned char* buf, size_t len)
{
return Crc32_update_crc(buf, 0xffffffffL, len) ^ 0xffffffffL;
return Crc32_update_crc(buf, 0xffffffffu, len) ^ 0xffffffffu;
}
/* ////////////////////////////////////////////////////////////////////////// */
......
......@@ -195,8 +195,9 @@ class ManGenerator : public OutputGenerator
void endContents() {}
void writeNonBreakableSpace(int n) { int i; for (i=0;i<n;i++) t << " "; }
void startDescTable() {}
void endDescTable() {}
void startDescTable(const char *t)
{ startSimpleSect(EnumValues,0,0,t); startDescForItem(); }
void endDescTable() { endDescForItem(); endSimpleSect(); }
void startDescTableTitle() { startItemListItem(); startBold(); startEmphasis(); endItemListItem(); }
void endDescTableTitle() { endEmphasis(); endBold(); }
void startDescTableData() { t << endl; firstCol=TRUE; }
......
This diff is collapsed.
......@@ -397,6 +397,8 @@ class MemberDef : public Definition
const QCString &cfname,const QCString &ciname,
const QCString &cname);
void _writeCategoryRelation(OutputList &ol);
void _writeTagData();
void _addToSearchIndex();
static int s_indentLevel;
// disable copying of member defs
......
......@@ -878,7 +878,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca
name = nd->displayName();
}
ol.writeObjectLink(nd->getReference(),nd->getOutputFileBase(),0,name);
if (!Config_getString("GENERATE_TAGFILE").isEmpty() && !nd->isReference())
if (!Config_getString("GENERATE_TAGFILE").isEmpty() && nd->isLinkableInProject())
{
Doxygen::tagFile << " <namespace>" << convertToXML(nd->name()) << "</namespace>" << endl;
}
......
......@@ -86,7 +86,7 @@
display:block;
position: absolute;
left: 0px;
width: 300px;
width: $width;
}
.ui-resizable .ui-resizable-handle {
......
......@@ -86,7 +86,7 @@
" display:block;\n"
" position: absolute;\n"
" left: 0px;\n"
" width: 300px;\n"
" width: $width;\n"
"}\n"
"\n"
".ui-resizable .ui-resizable-handle {\n"
......
......@@ -184,7 +184,7 @@ unsigned int ObjCache::hash(void *addr)
key ^= (key >> 15);
key += ~(key << 27);
key ^= (key >> 31);
return key & (m_size-1);
return (unsigned int)(key & (m_size-1));
}
else
{
......@@ -196,7 +196,7 @@ unsigned int ObjCache::hash(void *addr)
key ^= (key >> 6);
key += ~(key << 11);
key ^= (key >> 16);
return key & (m_size-1);
return (unsigned int)(key & (m_size-1));
}
}
......
......@@ -245,7 +245,7 @@ class BaseOutputDocInterface : public CodeOutputInterface
virtual void addIndexItem(const char *s1,const char *s2) = 0;
virtual void writeNonBreakableSpace(int) = 0;
virtual void startDescTable() = 0;
virtual void startDescTable(const char *title) = 0;
virtual void endDescTable() = 0;
virtual void startDescTableTitle() = 0;
virtual void endDescTableTitle() = 0;
......
......@@ -363,8 +363,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::endContents); }
void writeNonBreakableSpace(int num)
{ forall(&OutputGenerator::writeNonBreakableSpace,num); }
void startDescTable()
{ forall(&OutputGenerator::startDescTable); }
void startDescTable(const char *title)
{ forall(&OutputGenerator::startDescTable,title); }
void endDescTable()
{ forall(&OutputGenerator::endDescTable); }
void startDescTableTitle()
......
......@@ -184,7 +184,7 @@ void PageDef::writeDocumentation(OutputList &ol)
}
}
Doxygen::indexList.addIndexItem(this,0,filterTitle(title()));
Doxygen::indexList.addIndexItem(this,0,0,filterTitle(title()));
}
void PageDef::writePageDocumentation(OutputList &ol)
......
......@@ -198,7 +198,8 @@ void portable_setenv(const char *name,const char *value)
{
for (ep = environ; *ep; ++ep)
{
if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
if (!strncmp (*ep, name, (uint)namelen) &&
(*ep)[namelen] == '=')
break;
else
++size;
......@@ -281,7 +282,7 @@ void portable_unsetenv(const char *variable)
ep = environ;
while (*ep != NULL)
{
if (!strncmp(*ep, variable, len) && (*ep)[len]=='=')
if (!strncmp(*ep, variable, (uint)len) && (*ep)[len]=='=')
{
/* Found it. Remove this pointer by moving later ones back. */
char **dp = ep;
......
......@@ -51,7 +51,11 @@
#include "entry.h"
#define YY_NEVER_INTERACTIVE 1
enum GuardType
{
Guard_Cond,
Guard_CondNot
};
struct FileState
{
......@@ -356,6 +360,7 @@ static bool g_isSource;
static bool g_lexInit = FALSE;
static GuardType guardType; // kind of guard for conditional section
//DefineDict* getGlobalDefineDict()
//{
// return g_globalDefineDict;
......@@ -1651,9 +1656,19 @@ static void readIncludeFile(const QCString &inc)
static void startCondSection(const char *sectId)
{
g_condStack.push(new bool(g_skip));
if (Config_getList("ENABLED_SECTIONS").find(sectId)==-1)
if (guardType == Guard_Cond)
{
g_skip=TRUE;
if (Config_getList("ENABLED_SECTIONS").find(sectId)==-1)
{
g_skip=TRUE;
}
}
else if (guardType == Guard_CondNot)
{
if (Config_getList("ENABLED_SECTIONS").find(sectId)!=-1)
{
g_skip=TRUE;
}
}
}
......@@ -1779,12 +1794,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<Start>^{B}*"#" { BEGIN(Command); }
<Start>^{B}*/[^#] {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
BEGIN(CopyLine);
}
<Start>^{B}*[_A-Z][_A-Z0-9]*{B}*"("[^\)\n]*")"/{BN}{1,10}*[:{] { // constructors?
int i;
for (i=yyleng-1;i>=0;i--)
for (i=(int)yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
......@@ -1814,7 +1829,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
else // don't skip
{
int i;
for (i=yyleng-1;i>=0;i--)
for (i=(int)yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
......@@ -1824,7 +1839,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<CopyLine>"extern"{BN}{0,80}"\"C\""*{BN}{0,80}"{" {
QCString text=yytext;
g_yyLineNr+=text.contains('\n');
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CopyLine>"{" { // count brackets inside the main file
if (g_includeStack.isEmpty())
......@@ -1841,23 +1856,23 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar(*yytext);
}
<CopyLine>"'"\\[0-7]{1,3}"'" {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CopyLine>"'"\\."'" {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CopyLine>"'"."'" {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CopyLine>\" {
outputChar(*yytext);
BEGIN( CopyString );
}
<CopyString>[^\"\\\r\n]+ {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CopyString>\\. {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CopyString>\" {
outputChar(*yytext);
......@@ -1897,7 +1912,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
else
{
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
}
<CopyLine>{ID} {
......@@ -1915,7 +1930,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
else
{
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
}
<CopyLine>"\\"\r?/\n { // strip line continuation characters
......@@ -2404,7 +2419,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(CopyCComment);
}
<DefineText>"//"[!/]? {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
g_lastCPPContext=YY_START;
g_defLitText+=' ';
BEGIN(SkipCPPComment);
......@@ -2424,21 +2439,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
<SkipCComment>"//"("/")* {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<SkipCComment>"/*" {
outputChar('/');outputChar('*');
//g_commentCount++;
}
<SkipCComment>[\\@][\\@]("f{"|"f$"|"f[") {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<SkipCComment>[\\@][\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
g_yyLineNr+=QCString(yytext).contains('\n');
}
<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
g_yyLineNr+=QCString(yytext).contains('\n');
if (yytext[1]=='f')
{
......@@ -2451,18 +2466,26 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipVerbatim);
}
<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section
guardType = Guard_Cond;
g_condCtx = YY_START;
outputArray(yytext,yyleng);
BEGIN(CondLine);
}
<SkipCComment,SkipCPPComment>[\\@]"condnot"[ \t]+ { // conditional section
guardType = Guard_CondNot;
g_condCtx = YY_START;
outputArray(yytext,(int)yyleng);
BEGIN(CondLine);
}
<CondLine>[a-z_A-Z][a-z_A-Z0-9.\-]* {
startCondSection(yytext);
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
BEGIN(g_condCtx);
}
<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*/\n {
guardType = Guard_Cond;
g_condCtx = YY_START;
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<CondLine>. {
unput(*yytext);
......@@ -2470,11 +2493,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(g_condCtx);
}
<SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9] {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
endCondSection();
}
<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode"|"f$"|"f]"|"f}") { /* end of verbatim block */
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
if (yytext[1]=='f' && g_blockName=="f")
{
BEGIN(SkipCComment);
......@@ -2485,10 +2508,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
}
<SkipVerbatim>"*/"|"/*" {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<SkipCComment,SkipVerbatim>[^*\\@\x06\n\/]+ {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<SkipCComment,SkipVerbatim>\n {
g_yyLineNr++;
......@@ -2528,7 +2551,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); }
<RemoveCComment>.
<SkipCPPComment>[^\n\/\\@]+ {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<SkipCPPComment,RemoveCPPComment>\n {
unput(*yytext);
......@@ -2541,7 +2564,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('/');outputChar('/');
}
<SkipCPPComment>[^\x06\@\\\n]+ {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
}
<SkipCPPComment>. {
outputChar(*yytext);
......@@ -2715,14 +2738,14 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<*>"/*"/"*/" |
<*>"/*"[*]? {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
g_lastCContext=YY_START;
g_commentCount=1;
if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
BEGIN(SkipCComment);
}
<*>"//"[/]? {
outputArray(yytext,yyleng);
outputArray(yytext,(int)yyleng);
g_lastCPPContext=YY_START;
if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented!
BEGIN(SkipCPPComment);
......
......@@ -1217,7 +1217,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT
// should be improved.
// (translate tabs to space, etc)
codifyLines(yytext);
adjustScopesAndSuites(yyleng);
adjustScopesAndSuites((int)yyleng);
}
"\n"|({BB}"\n") {
......
......@@ -787,7 +787,7 @@ STARTDOCSYMS "##"
if (computeIndent(&yytext[1])<=g_indent)
{
int i;
for (i=yyleng-1;i>=0;i--)
for (i=(int)yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
......@@ -805,7 +805,7 @@ STARTDOCSYMS "##"
if (computeIndent(&yytext[1])<=g_indent)
{
int i;
for (i=yyleng-1;i>=0;i--)
for (i=(int)yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
......
......@@ -124,9 +124,10 @@ void Qhp::initialize()
// Add extra root node
QCString fullProjectname = getFullProjectName();
QCString indexFile = "index"+Doxygen::htmlFileExtension;
const char * const attributes[] =
{ "title", fullProjectname,
"ref", QCString("index")+Doxygen::htmlFileExtension,
"ref", indexFile,
NULL
};
m_toc.open("section", attributes);
......@@ -211,7 +212,7 @@ void Qhp::addContentsItem(bool /*isDir*/, const char * name,
}
void Qhp::addIndexItem(Definition *context,MemberDef *md,
const char *word)
const char *sectionAnchor,const char *word)
{
(void)word;
//printf("addIndexItem(%s %s %s\n",
......@@ -235,7 +236,7 @@ void Qhp::addIndexItem(Definition *context,MemberDef *md,
QCString level1 = context->name();
QCString level2 = word ? QCString(word) : md->name();
QCString contRef = separateMemberPages ? cfname : cfiname;
QCString anchor = md->anchor();
QCString anchor = sectionAnchor ? QCString(sectionAnchor) : md->anchor();
QCString ref;
......@@ -256,7 +257,7 @@ void Qhp::addIndexItem(Definition *context,MemberDef *md,
// <keyword name="Foo" id="Foo" ref="doc.html"/>
QCString contRef = context->getOutputFileBase();
QCString level1 = word ? QCString(word) : context->name();
QCString ref = makeFileName(contRef);
QCString ref = makeRef(contRef,sectionAnchor);
const char * attributes[] =
{
"name", level1,
......
......@@ -35,7 +35,8 @@ class Qhp : public IndexIntf
const char * file, const char * anchor,
bool separateIndex,bool addToNavIndex,
Definition *def);
void addIndexItem(Definition *context,MemberDef *md,const char *title);
void addIndexItem(Definition *context, MemberDef *md,
const char *sectionAnchor, const char *title);
void addIndexFile(const char * name);
void addImageFile(const char * name);
void addStyleSheetFile(const char * name);
......
......@@ -1964,9 +1964,11 @@ void RTFGenerator::endMemberList()
// // not yet implemented
//}
//
void RTFGenerator::startDescTable()
void RTFGenerator::startDescTable(const char *title)
{
DBG_RTF(t << "{\\comment (startDescTable) }" << endl)
startSimpleSect(EnumValues,0,0,title);
startDescForItem();
//t << "{" << endl;
//incrementIndentLevel();
//t << rtf_Style_Reset << rtf_CList_DepthStyle();
......@@ -1976,6 +1978,8 @@ void RTFGenerator::endDescTable()
{
//decrementIndentLevel();
DBG_RTF(t << "{\\comment (endDescTable)}" << endl)
endDescForItem();
endSimpleSect();
//t << "}" << endl;
//t << rtf_Style_Reset << styleStack.top();
}
......@@ -2295,7 +2299,7 @@ static void encodeForOutput(FTextStream &t,const QCString &s)
char *outputPtr = enc.data();
if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
{
enc.resize(enc.size()-oLeft);
enc.resize(enc.size()-(unsigned int)oLeft);
converted=TRUE;
}
portable_iconv_close(cd);
......
......@@ -190,7 +190,7 @@ class RTFGenerator : public OutputGenerator
void endContents() {}
void writeNonBreakableSpace(int);
void startDescTable();
void startDescTable(const char *title);
void endDescTable();
void startDescTableTitle();
void endDescTableTitle();
......
......@@ -3554,7 +3554,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
}
<MemberSpec>([*&]*{BN}*)*{ID}{BN}*("["[^\]\n]*"]")* { // the [] part could be improved.
lineCount();
int i=0,l=yyleng,j;
int i=0,l=(int)yyleng,j;
while (i<l && (!isId(yytext[i]))) i++;
msName = QCString(yytext).right(l-i).stripWhiteSpace();
j=msName.find("[");
......@@ -4001,7 +4001,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
{
// for defines we interpret a comment
// as documentation for the define
int i;for (i=yyleng-1;i>=0;i--)
int i;for (i=(int)yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
......@@ -4052,7 +4052,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
{
// for defines we interpret a comment
// as documentation for the define
int i;for (i=yyleng-1;i>0;i--)
int i;for (i=(int)yyleng-1;i>0;i--)
{
unput(yytext[i]);
}
......@@ -4291,11 +4291,20 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\"
current->args += " volatile ";
current->argList->volatileSpecifier=TRUE;
}
<FuncQual>{BN}*"noexcept"{BN}* { // volatile member function
<FuncQual>{BN}*"noexcept"{BN}* { // noexcept qualifier
lineCount() ;
current->args += " noexcept ";
current->spec |= Entry::NoExcept;
}
<FuncQual>{BN}*"noexcept"{BN}*"(" { // noexcept expression
lineCount() ;
current->args += " noexcept(";
current->spec |= Entry::NoExcept;
lastRoundContext=FuncQual;
pCopyRoundString=&current->args;
roundCount=0;
BEGIN(CopyRound);
}
<FuncQual,TrailingReturn>{BN}*"="{BN}*"0"{BN}* { // pure virtual member function
lineCount() ;
current->args += " = 0";
......
......@@ -30,6 +30,7 @@
#include "pagedef.h"
#include "growbuf.h"
#include "message.h"
#include "version.h"
// file format: (all multi-byte values are stored in big endian format)
......@@ -70,10 +71,11 @@ void IndexWord::addUrlIndex(int idx,bool hiPriority)
//--------------------------------------------------------------------
SearchIndex::SearchIndex() : SearchIndexIntf(Internal),
m_words(328829), m_index(numIndexEntries), m_urlIndex(-1)
m_words(328829), m_index(numIndexEntries), m_url2IdMap(10007), m_urls(10007), m_urlIndex(-1)
{
int i;
m_words.setAutoDelete(TRUE);
m_url2IdMap.setAutoDelete(TRUE);
m_urls.setAutoDelete(TRUE);
m_index.setAutoDelete(TRUE);
for (i=0;i<numIndexEntries;i++) m_index.insert(i,new QList<IndexWord>);
......@@ -87,7 +89,6 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
QCString url=isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
url+=Config_getString("HTML_FILE_EXTENSION");
if (anchor) url+=QCString("#")+anchor;
m_urlIndex++;
QCString name=ctx->qualifiedName();
if (ctx->definitionType()==Definition::TypeMember)
{
......@@ -159,7 +160,17 @@ void SearchIndex::setCurrentDoc(Definition *ctx,const char *anchor,bool isSource
}
}
m_urls.insert(m_urlIndex,new URL(name,url));
int *pIndex = m_url2IdMap.find(url);
if (pIndex==0)
{
++m_urlIndex;
m_url2IdMap.insert(url,new int(m_urlIndex));
m_urls.insert(m_urlIndex,new URL(name,url));
}
else
{
m_urls.insert(*pIndex,new URL(name,url));
}
}
static int charsToIndex(const char *word)
......@@ -398,8 +409,8 @@ struct SearchDocEntry
{
QCString type;
QCString name;
QCString tag;
QCString url;
QCString tagFile;
QCString url;
GrowBuf importantText;
GrowBuf normalText;
};
......@@ -503,31 +514,23 @@ static QCString definitionToName(Definition *ctx)
void SearchIndexExternal::setCurrentDoc(Definition *ctx,const char *anchor,bool isSourceFile)
{
//if (p->openOk)
//{
QCString tagFile = stripPath(Config_getString("GENERATE_TAGFILE"));
QCString baseName = isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
QCString url = baseName + Doxygen::htmlFileExtension;
if (anchor) url+=QCString("#")+anchor;
QCString key = tagFile+";"+url;
p->current = p->docEntries.find(key);
if (!p->current)
{
SearchDocEntry *e = new SearchDocEntry;
e->type = definitionToName(ctx);
e->type = isSourceFile ? QCString("source") : definitionToName(ctx);
e->name = ctx->qualifiedName();
e->tag = stripPath(Config_getString("GENERATE_TAGFILE"));
QCString baseName = isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
e->url = baseName + Doxygen::htmlFileExtension;
if (anchor) e->url+=QCString("#")+anchor;
e->tagFile = tagFile;
e->url = url;
p->current = e;
p->docEntries.append(e->url,e);
//if (p->insideDoc)
//{
// p->t << " </doc>" << endl;
//}
//p->t << " <doc>" << endl;
//QCString baseName = isSourceFile ? ((FileDef*)ctx)->getSourceFileBase() : ctx->getOutputFileBase();
//p->t << " <field name=\"type\">" << definitionToName(ctx) << "</field>" << endl;
//p->t << " <field name=\"name\">" << convertToXML(ctx->qualifiedName()) << "</field>" << endl;
//p->t << " <field name=\"tag\">" << convertToXML(stripPath(Config_getString("GENERATE_TAGFILE"))) << "</field>" << endl;
//p->t << " <field name=\"url\">" << baseName << Doxygen::htmlFileExtension;
//if (anchor) p->t << "#" << anchor;
//p->t << "</field>" << endl;
//p->insideDoc=TRUE;
//}
p->docEntries.append(key,e);
}
}
void SearchIndexExternal::addWord(const char *word,bool hiPriority)
......@@ -536,14 +539,6 @@ void SearchIndexExternal::addWord(const char *word,bool hiPriority)
GrowBuf *pText = hiPriority ? &p->current->importantText : &p->current->normalText;
if (pText->getPos()>0) pText->addChar(' ');
pText->addStr(word);
//if (p->openOk)
//{
// p->t << " <field name=\"text";
// if (hiPriority) p->t << "\" boost=\"yes";
// p->t << "\">";
// p->t << convertToXML(word);
// p->t << "</field>" << endl;
//}
}
void SearchIndexExternal::write(const char *fileName)
......@@ -561,10 +556,10 @@ void SearchIndexExternal::write(const char *fileName)
doc->normalText.addChar(0); // make sure buffer ends with a 0 terminator
doc->importantText.addChar(0); // make sure buffer ends with a 0 terminator
t << " <doc>" << endl;
t << " <field name=\"type\">" << doc->type << "</field>" << endl;
t << " <field name=\"name\">" << convertToXML(doc->name) << "</field>" << endl;
t << " <field name=\"tag\">" << convertToXML(doc->tag) << "</field>" << endl;
t << " <field name=\"url\">" << doc->url << "</field>" << endl;
t << " <field name=\"type\">" << doc->type << "</field>" << endl;
t << " <field name=\"name\">" << convertToXML(doc->name) << "</field>" << endl;
t << " <field name=\"tag\">" << convertToXML(doc->tagFile) << "</field>" << endl;
t << " <field name=\"url\">" << convertToXML(doc->url) << "</field>" << endl;
t << " <field name=\"keywords\">" << convertToXML(doc->importantText.get()) << "</field>" << endl;
t << " <field name=\"text\">" << convertToXML(doc->normalText.get()) << "</field>" << endl;
t << " </doc>" << endl;
......@@ -1023,6 +1018,7 @@ void writeJavascriptSearchIndex()
" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" << endl;
t << "<html><head><title></title>" << endl;
t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>" << endl;
t << "<meta name=\"generator\" content=\"Doxygen " << versionString << "\">" << endl;
t << "<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>" << endl;
t << "<script type=\"text/javascript\" src=\"" << baseName << ".js\"></script>" << endl;
t << "<script type=\"text/javascript\" src=\"search.js\"></script>" << endl;
......
......@@ -24,6 +24,7 @@
#include <qdict.h>
#include <qintdict.h>
#include <qvector.h>
#include "sortdict.h"
class FTextStream;
class Definition;
......@@ -89,7 +90,8 @@ class SearchIndex : public SearchIndexIntf
void addWord(const char *word,bool hiPrio,bool recurse);
QDict<IndexWord> m_words;
QVector< QList<IndexWord> > m_index;
QIntDict<URL> m_urls;
QDict<int> m_url2IdMap;
QIntDict<URL> m_urls;
int m_urlIndex;
};
......
......@@ -162,7 +162,7 @@ int Store::write(const char *buf,uint size)
#else
portable_off_t curPos = m_cur;
#endif
int bytesInBlock = BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1));
int bytesInBlock = (int)(BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1)));
int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0;
int numBytes = size - bytesLeft;
STORE_ASSERT(bytesInBlock>=0);
......@@ -254,7 +254,7 @@ void Store::end()
#else
portable_off_t curPos = m_cur;
#endif
int bytesInBlock = BLOCK_SIZE - (curPos & (BLOCK_SIZE-1));
int bytesInBlock = (int)(BLOCK_SIZE - (curPos & (BLOCK_SIZE-1)));
//printf("%x: Store::end erasing %x bytes\n",(int)curPos&~(BLOCK_SIZE-1),bytesInBlock);
//printf("end: bytesInBlock=%x\n",bytesInBlock);
// zero out rest of the block
......@@ -327,7 +327,7 @@ int Store::read(char *buf,uint size)
#else
portable_off_t curPos = m_cur;
#endif
int bytesInBlock = BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1));
int bytesInBlock = (int)(BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1)));
int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0;
int numBytes = size - bytesLeft;
//printf(" Store::read: pos=%x num=%d left=%d\n",(int)curPos,numBytes,bytesLeft);
......
......@@ -172,7 +172,7 @@ int TclFindElement(
}
else if (openBraces == 1)
{
size = (p - elemStart);
size = (int)(p - elemStart);
p++;
if ((p >= limit) || isspace(UCHAR(*p)))
{ /* INTL: ISO space. */
......@@ -211,7 +211,7 @@ int TclFindElement(
case '\v':
if ((openBraces == 0) && !inQuotes)
{
size = (p - elemStart);
size = (int)(p - elemStart);
goto done;
}
break;
......@@ -223,7 +223,7 @@ int TclFindElement(
case '"':
if (inQuotes)
{
size = (p - elemStart);
size = (int)(p - elemStart);
p++;
if ((p >= limit) || isspace(UCHAR(*p)))
{ /* INTL: ISO space */
......@@ -254,7 +254,7 @@ int TclFindElement(
{
return TCL_ERROR;
}
size = (p - elemStart);
size = (int)(p - elemStart);
}
done:
......@@ -316,7 +316,7 @@ int Tcl_SplitList(
}
}
}
length = l - list;
length = (int)(l - list);
argv = (CONST char **) ckalloc((unsigned)
((size * sizeof(char *)) + length + 1));
for (i = 0, p = ((char *) argv) + size*sizeof(char *);
......@@ -326,7 +326,7 @@ int Tcl_SplitList(
result = TclFindElement(list, length, &element, &list,
&elSize, &brace);
length -= (list - prevList);
length -= (int)(list - prevList);
if (result != TCL_OK)
{
ckfree((char *) argv);
......
......@@ -16,7 +16,7 @@
*
*/
/*! @file
* @brief ´Danish translation
* @brief Danish translation
*/
/*
......
......@@ -70,7 +70,7 @@ class TranslatorDecoder : public Translator
char *oPtr = output.data();
if (!portable_iconv(cd,&iPtr,&iLeft,&oPtr,&oLeft))
{
oSize -= oLeft;
oSize -= (int)oLeft;
output.resize(oSize+1);
output.at(oSize)='\0';
return output;
......
......@@ -2290,7 +2290,7 @@ QCString transcodeCharacterStringToUTF8(const QCString &input)
char *outputPtr = output.data();
if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
{
outputSize-=oLeft;
outputSize-=(int)oLeft;
output.resize(outputSize+1);
output.at(outputSize)='\0';
//printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
......@@ -2383,7 +2383,7 @@ QCString fileToString(const char *name,bool filter,bool isSourceCode)
QCString contents(bSize);
int totalSize=0;
int size;
while ((size=fread(contents.data()+totalSize,1,bSize,f))==bSize)
while ((size=(int)fread(contents.data()+totalSize,1,bSize,f))==bSize)
{
totalSize+=bSize;
contents.resize(totalSize+bSize);
......@@ -3321,7 +3321,7 @@ static QCString getCanonicalTypeForIdentifier(
if (mType && mType->isTypedef()) // but via a typedef
{
result = resolvedType;
result = resolvedType+ts; // the +ts was added for bug 685125
}
else
{
......@@ -7054,7 +7054,7 @@ static int transcodeCharacterBuffer(const char *fileName,BufStr &srcBuf,int size
uint newSize=0;
if (!portable_iconv(cd, &srcPtr, &iLeft, &dstPtr, &oLeft))
{
newSize = tmpBufSize-oLeft;
newSize = tmpBufSize-(int)oLeft;
srcBuf.shrink(newSize);
strncpy(srcBuf.data(),tmpBuf.data(),newSize);
//printf("iconv: input size=%d output size=%d\n[%s]\n",size,newSize,srcBuf.data());
......@@ -7110,7 +7110,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf)
const int bufSize=1024;
char buf[bufSize];
int numRead;
while ((numRead=fread(buf,1,bufSize,f))>0)
while ((numRead=(int)fread(buf,1,bufSize,f))>0)
{
//printf(">>>>>>>>Reading %d bytes\n",numRead);
inBuf.addArray(buf,numRead),size+=numRead;
......
......@@ -361,7 +361,7 @@ static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE)
{
g_yyLineNr++;
QCString line = sp;
line = line.left(p-sp-1);
line = line.left((int)(p-sp)-1);
//*(p-1)='\0';
//g_code->codify(sp);
writeWord(line,cl,classlink);
......
This diff is collapsed.
......@@ -25,6 +25,7 @@
#include <qcstring.h>
#include "layout.h"
#include "memberlist.h"
#include "arguments.h"
class Entry;
class ClassDef;
......@@ -262,6 +263,14 @@ class VhdlDocGen
static void writeOverview(OutputList &ol);
static void writeOverview();
// flowcharts
static void createFlowChart( MemberDef*);
static void addFlowImage(FTextStream,QCString);
static void setFlowMember( const MemberDef *flowMember);
static const MemberDef * getFlowMember();
static void resetFlowMember();
private:
static void findAllArchitectures(QList<QCString>& ql,const ClassDef *cd);
......@@ -272,4 +281,90 @@ class VhdlDocGen
static void writeRecorUnit(QCString & largs,OutputList& ol ,const MemberDef *mdef);
};
class FlowNode
{
public:
enum nodeType {
IF_NO = 1<<1,
ELSIF_NO = 1<<2,
ELSE_NO = 1<<3,
CASE_NO = 1<<4,
WHEN_NO = 1<<5,
EXIT_NO = 1<<6,
END_NO = 1<<7,
TEXT_NO = 1<<8,
START_NO = 1<<9,
ENDIF_NO = 1<<10,
FOR_NO = 1<<11,
WHILE_NO = 1<<12,
END_LOOP = 1<<13,
END_CASE = 1<<14,
VARIABLE_NO = 1<<15,
RETURN_NO = 1<<16,
LOOP_NO = 1<<17,
NEXT_NO = 1<<18,
EXIT_WHEN_NO = 1<<19,
NEXT_WHEN_NO = 1<<20,
EMPTY_NO = 1<<21
};
//---------- create svg -------------------------------------------------------------
static void createSVG();
static void startDot(FTextStream &t);
static void endDot(FTextStream &t);
static void codify(FTextStream &t,const char *str);
static void writeShape(FTextStream &t,const FlowNode* fl);
static void writeEdge(FTextStream &t,int fl_from,int fl_to,int i);
static void writeEdge(FTextStream &t,const FlowNode* fl_from,const FlowNode* fl_to,int i);
//static void writeEndNode(FTextStream &t,const FlowNode* fl);
static void writeFlowLinks(FTextStream &t);
//static void writeStartNode(FTextStream &t,const FlowNode* fl);
static void checkNode(int);
static void checkNode(const FlowNode*);
static QCString getNodeName(int n);
static void colTextNodes();
static int getTextLink(const FlowNode* fl,uint index);
static int getNoLink(const FlowNode*,uint);
static int getNextNode(int);
static int findNode(int index,int stamp,int type);
static int findNode(int index,int type);
static int findNextLoop(int j,int stamp);
static int findPrevLoop(int j,int stamp);
static int findLabel(int j,QCString &);
static void delFlowList();
static const char* getNodeType(int c);
static void addFlowNode(int type,const char* text,const char* exp,const char * label=NULL);
static void moveToPrevLevel();
static void printFlowList();
static void setLabel(const char* text);
static int getTimeStamp();
static void printNodeList();
static void writeFlowNode();
static void alignFuncProc(QCString & q,const ArgumentList* al,bool isFunc);
static QCString convertNameToFileName();
static QList<FlowNode> flowList;
static int ifcounter;
static int nodeCounter;
static int imageCounter;
static int caseCounter;
FlowNode(int typ,const char* t,const char* ex,const char* label=NULL);
~FlowNode();
int id;
int stamp;
int type;
QCString label;
QCString text;
QCString exp;
};
#endif
This diff is collapsed.
......@@ -114,7 +114,7 @@ static struct
} str_doc;
#define YY_NEVER_INTERACTIVE 1
#define YY_USER_ACTION num_chars += vhdlScanYYleng;
#define YY_USER_ACTION num_chars += (int)vhdlScanYYleng;
#define MAX_KEYWORD_LEN 20
......
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