Commit 8a5c51f2 authored by dimitri's avatar dimitri

Release-1.3.4-20031112

parent a2a1e97f
...@@ -187,4 +187,4 @@ DOT_CLEANUP = YES ...@@ -187,4 +187,4 @@ DOT_CLEANUP = YES
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration::addtions related to the search engine # Configuration::addtions related to the search engine
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
SEARCHENGINE = NO SEARCHENGINE = YES
DOXYGEN Version 1.3.4-20031103 DOXYGEN Version 1.3.4-20031112
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (03 November 2003) Dimitri van Heesch (12 November 2003)
...@@ -73,12 +73,25 @@ docs: FORCE ...@@ -73,12 +73,25 @@ docs: FORCE
pdf: docs pdf: docs
cd latex ; $(MAKE) cd latex ; $(MAKE)
archive: clean DISTFILES = Doxyfile libpng libmd5 addon tmake doc wintools examples bin lib objects \
tar zcvf dx`date +%y%m%d`.tgz Doxyfile libpng libmd5 addon tmake doc wintools examples bin lib objects \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \ qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL make.bat LANGUAGE.HOWTO LICENSE PLATFORMS \ Makefile.win_make.in INSTALL make.bat LANGUAGE.HOWTO LICENSE PLATFORMS \
VERSION packages VERSION packages
archive: clean
tar zcvf dx`date +%y%m%d`.tgz $(DISTFILES)
DISTDIR = doxygen-`echo $(VERSION) | tr - _`
dist: clean
rm -rf $(DISTDIR)
mkdir $(DISTDIR)
cp -a $(DISTFILES) README $(DISTDIR)
find $(DISTDIR) \( -name "CVS" -o -name ".cvsignore" \) \
-print0 | xargs -0 rm -rf
tar zcvf $(DISTDIR).src.tar.gz $(DISTDIR)
rm -rf $(DISTDIR)
src/version.cpp: Makefile src/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
......
DOXYGEN Version 1.3.4_20031103 DOXYGEN Version 1.3.4_20031112
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (03 November 2003) Dimitri van Heesch (dimitri@stack.nl) (12 November 2003)
1.3.4-20031103 1.3.4-20031112
...@@ -356,7 +356,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -356,7 +356,7 @@ followed by the descriptions of the tags grouped by category.
The new default is to treat a multi-line C++ comment block as a detailed The new default is to treat a multi-line C++ comment block as a detailed
description. Set this tag to YES if you prefer the old behaviour instead. description. Set this tag to YES if you prefer the old behaviour instead.
Note that setting this tag to YES also means that rational rose comments Note that setting this tag to YES also means that rational rose comments
are not recognised any more. are not recognized any more.
\anchor cfg_details_at_top \anchor cfg_details_at_top
<dt>\c DETAILS_AT_TOP <dd> <dt>\c DETAILS_AT_TOP <dd>
...@@ -371,7 +371,7 @@ followed by the descriptions of the tags grouped by category. ...@@ -371,7 +371,7 @@ followed by the descriptions of the tags grouped by category.
\addindex INHERIT_DOCS \addindex INHERIT_DOCS
If the \c INHERIT_DOCS tag is set to \c YES (the default) then an undocumented If the \c INHERIT_DOCS tag is set to \c YES (the default) then an undocumented
member inherits the documentation from any documented member that it member inherits the documentation from any documented member that it
reimplements. re-implements.
\anchor cfg_distribute_group_doc \anchor cfg_distribute_group_doc
<dt>\c DISTRIBUTE_GROUP_DOC <dd> <dt>\c DISTRIBUTE_GROUP_DOC <dd>
...@@ -940,7 +940,7 @@ function's detailed documentation block. ...@@ -940,7 +940,7 @@ function's detailed documentation block.
If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c CHM_FILE tag can If the \c GENERATE_HTMLHELP tag is set to \c YES, the \c CHM_FILE tag can
be used to specify the file name of the resulting .chm file. You be used to specify the file name of the resulting .chm file. You
can add a path in front of the file if the result should not be can add a path in front of the file if the result should not be
written to the html output dir. written to the html output directory.
\anchor cfg_hhc_location \anchor cfg_hhc_location
<dt>\c HHC_LOCATION <dd> <dt>\c HHC_LOCATION <dd>
...@@ -989,7 +989,7 @@ function's detailed documentation block. ...@@ -989,7 +989,7 @@ function's detailed documentation block.
\anchor cfg_generate_treeview \anchor cfg_generate_treeview
<dt>\c GENERATE_TREEVIEW <dd> <dt>\c GENERATE_TREEVIEW <dd>
\addindex GENERATE_TREEVIEW \addindex GENERATE_TREEVIEW
If the \c GENERATE_TREEVIEW tag is set to YES, a side pannel will be If the \c GENERATE_TREEVIEW tag is set to YES, a side panel will be
generated containing a tree-like index structure (just like the one that generated containing a tree-like index structure (just like the one that
is generated for HTML Help). For this to work a browser that supports is generated for HTML Help). For this to work a browser that supports
JavaScript and frames is required (for instance Mozilla 1.0+, Netscape 6.0+ JavaScript and frames is required (for instance Mozilla 1.0+, Netscape 6.0+
...@@ -1132,7 +1132,7 @@ EXTRA_PACKAGES = times ...@@ -1132,7 +1132,7 @@ EXTRA_PACKAGES = times
<dt>\c GENERATE_RTF <dd> <dt>\c GENERATE_RTF <dd>
\addindex GENERATE_RTF \addindex GENERATE_RTF
If the \c GENERATE_RTF tag is set to \c YES doxygen will generate RTF output. If the \c GENERATE_RTF tag is set to \c YES doxygen will generate RTF output.
The RTF output is optimised for Word 97 and may not look too pretty with The RTF output is optimized for Word 97 and may not look too pretty with
other readers/editors. other readers/editors.
\anchor cfg_rtf_output \anchor cfg_rtf_output
...@@ -1165,7 +1165,7 @@ EXTRA_PACKAGES = times ...@@ -1165,7 +1165,7 @@ EXTRA_PACKAGES = times
<dt>\c RTF_STYLESHEET_FILE <dd> <dt>\c RTF_STYLESHEET_FILE <dd>
\addindex RTF_STYLESHEET_FILE \addindex RTF_STYLESHEET_FILE
Load stylesheet definitions from file. Syntax is similar to doxygen's Load stylesheet definitions from file. Syntax is similar to doxygen's
config file, i.e. a series of assigments. You only have to provide config file, i.e. a series of assignments. You only have to provide
replacements, missing definitions are set to their default value. replacements, missing definitions are set to their default value.
See also section \ref doxygen_usage for information on how to generate See also section \ref doxygen_usage for information on how to generate
...@@ -1441,7 +1441,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre> ...@@ -1441,7 +1441,7 @@ TAGFILES = file1=loc1 "file2 = loc2" ... </pre>
If the \c CLASS_DIAGRAMS tag is set to \c YES (the default) doxygen will If the \c CLASS_DIAGRAMS tag is set to \c YES (the default) doxygen will
generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or generate a class diagram (in HTML and \f$\mbox{\LaTeX}\f$) for classes with base or
super classes. Setting the tag to \c NO turns the diagrams off. super classes. Setting the tag to \c NO turns the diagrams off.
Note that this option is superceded by the HAVE_DOT option below. Note that this option is superseded by the HAVE_DOT option below.
This is only a fallback. It is recommended to install and use dot, This is only a fallback. It is recommended to install and use dot,
since it yields more powerful graphs. since it yields more powerful graphs.
...@@ -1555,7 +1555,7 @@ note that a graph may be further truncated if the graph's image dimensions are ...@@ -1555,7 +1555,7 @@ note that a graph may be further truncated if the graph's image dimensions are
not sufficient to fit the graph (see not sufficient to fit the graph (see
\ref cfg_max_dot_graph_width "MAX_DOT_GRAPH_WIDTH" and \ref cfg_max_dot_graph_width "MAX_DOT_GRAPH_WIDTH" and
\ref cfg_max_dot_graph_height "MAX_DOT_GRAPH_HEIGHT"). \ref cfg_max_dot_graph_height "MAX_DOT_GRAPH_HEIGHT").
If 0 is used fot the depth value (the default), the graph is If 0 is used for the depth value (the default), the graph is
not depth-constraint. not depth-constraint.
\anchor cfg_max_dot_graph_width \anchor cfg_max_dot_graph_width
......
This diff is collapsed.
/* /* MD5.H - header file for MD5C.C
* Declaration of functions and data types used for MD5 sum computing
* library functions. Copyright (C) 1995, 1996 Free Software
* Foundation, Inc. NOTE: The canonical source of this file is
* maintained with the GNU C Library. Bugs can be reported to
* bug-glibc@prep.ai.mit.edu.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* $Id$
*/ */
/* /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
* NOTE: during quick performance tests on a sun ultra and an alpha rights reserved.
* 255 300, the md5 libraries performed upwards of 3mb/sec. That
* included disk i/o on bobcat and panther.
*/
#ifndef __MD5_H__
#define __MD5_H__
#ifdef __cplusplus
extern "C" {
#endif
/* License to copy and use this software is granted provided that it
* Size of a standard MD5 signature in bytes. This definition is for is identified as the "RSA Data Security, Inc. MD5 Message-Digest
* external programs only. The MD5 routines themselves reference the Algorithm" in all material mentioning or referencing this software
* signature as 4 unsigned 32-bit integers. or this function.
*/
#define MD5_SIZE 16
/* License is also granted to make and use derivative works provided
* NOTE: the following is assumed to generate a 32-bit unsigned data that such works are identified as "derived from the RSA Data
* type. Security, Inc. MD5 Message-Digest Algorithm" in all material
*/ mentioning or referencing the derived work.
typedef unsigned int md5_uint32;
#define MAX_MD5_UINT32 ((md5_uint32)4294967295U)
/* RSA Data Security, Inc. makes no representations concerning either
* The MD5 algorithm works on blocks of characters of 64 bytes. This the merchantability of this software or the suitability of this
* is an internal value only and is not necessary for external use. software for any particular purpose. It is provided "as is"
*/ without express or implied warranty of any kind.
#define MD5_BLOCK_SIZE 64
/* These notices must be retained in any copies of any part of this
* Structure to save state of computation between the single steps. documentation and/or software.
*/ */
typedef struct
{
md5_uint32 md_A; /* accumulater 1 */
md5_uint32 md_B; /* accumulater 2 */
md5_uint32 md_C; /* accumulater 3 */
md5_uint32 md_D; /* accumulater 4 */
md5_uint32 md_total[2]; /* totaling storage */ #ifndef _MD5_H_
md5_uint32 md_buf_len; /* length of the storage buffer */ #define _MD5_H_
char md_buffer[MD5_BLOCK_SIZE * 2]; /* character storage buffer */
} md5_t;
/*<<<<<<<<<< The below prototypes are auto-generated by fillproto */
/*
* md5_init
*
* DESCRIPTION:
*
* Initialize structure containing state of MD5 computation. (RFC 1321,
* 3.3: Step 3). This is for progressive MD5 calculations only. If
* you have the complete string available, md5_buffer should be used.
* md5_process should be called for each bunch of bytes and after the
* last process call, md5_finish should be called to get the
* signature.
*
* RETURNS:
*
* None.
*
* ARGUMENTS:
*
* md5_p - Pointer to md5 structure that we are initializing.
*/
extern
void md5_init(md5_t *md5_p);
/* #ifdef __cplusplus
* md5_process extern "C" {
* #endif
* DESCRIPTION:
*
* This function is used to progressively calculate a MD5 signature some
* number of bytes at a time. If you have the complete string
* available, md5_buffer should be used. The MD5 structure should
* have been initialized with md5_init and after the last process
* call, md5_finish should be called to get the results.
*
* RETURNS:
*
* None.
*
* ARGUMENTS:
*
* md5_p - Pointer to MD5 structure which we are progressively updating.
*
* buffer - A buffer of bytes whose MD5 signature we are calculating.
*
* buf_len - The length of the buffer.
*/
extern
void md5_process(md5_t *md5_p, const void *buffer,
const unsigned int buf_len);
/*
* md5_finish
*
* DESCRIPTION:
*
* Finish a progressing MD5 calculation and copy the resulting MD5
* signature into the result buffer which should be 16 bytes
* (MD5_SIZE). After this call, the MD5 structure is invalid.
*
* RETURNS:
*
* None.
*
* ARGUMENTS:
*
* md5_p - Pointer to MD5 structure which we are finishing.
*
* signature - A 16 byte buffer that will contain the MD5 signature.
*/
extern
void md5_finish(md5_t *md5_p, void *signature);
/*
* md5_buffer
*
* DESCRIPTION:
*
* This function is used to calculate a MD5 signature for a buffer of
* bytes. If you only have part of a buffer that you want to process
* then md5_init, md5_process, and md5_finish should be used.
*
* RETURNS:
*
* None.
*
* ARGUMENTS:
*
* buffer - A buffer of bytes whose MD5 signature we are calculating.
*
* buf_len - The length of the buffer.
*
* signature - A 16 byte buffer that will contain the MD5 signature.
*/
extern
void md5_buffer(const char *buffer, const unsigned int buf_len,
void *signature);
/* #include "md5_loc.h"
* md5_sig_to_string
*
* DESCRIPTION:
*
* Convert a MD5 signature in a 16 byte buffer into a hexadecimal string
* representation.
*
* RETURNS:
*
* None.
*
* ARGUMENTS:
*
* signature - a 16 byte buffer that contains the MD5 signature.
*
* str - a string of charactes which should be at least 33 bytes long (2
* characters per MD5 byte and 1 for the \0).
*
* str_len - the length of the string.
*/
extern
void md5_sig_to_string(void *signature, char *str, const int str_len);
/* /* MD5 context. */
* md5_sig_from_string typedef struct {
* UINT4 state[4]; /* state (ABCD) */
* DESCRIPTION: UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
* unsigned char buffer[64]; /* input buffer */
* Convert a MD5 signature from a hexadecimal string representation into } MD5_CTX;
* a 16 byte buffer.
*
* RETURNS:
*
* None.
*
* ARGUMENTS:
*
* signature - A 16 byte buffer that will contain the MD5 signature.
*
* str - A string of charactes which _must_ be at least 32 bytes long (2
* characters per MD5 byte).
*/
extern
void md5_sig_from_string(void *signature, const char *str);
/*<<<<<<<<<< This is end of the auto-generated output from fillproto. */ void MD5Init(MD5_CTX *ctx);
void MD5Update (MD5_CTX *ctx, const unsigned char *buf, unsigned int len);
void MD5Final (MD5_CTX *ctx, unsigned char sig[16]);
void MD5Buffer (const char *buf,unsigned int len,unsigned char sig[16]);
void MD5SigToString(unsigned char sig[16],char *str,int len);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* ! __MD5_H__ */ #endif
/* /* GLOBAL.H - RSAREF types and constants */
* Local defines for the md5 functions.
*
* $Id$
*/
/* /* Copyright (C) RSA Laboratories, a division of RSA Data Security,
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All Inc., created 1991. All rights reserved.
* rights reserved.
*
* License to copy and use this software is granted provided that it is
* identified as the "RSA Data Security, Inc. MD5 Message-Digest
* Algorithm" in all material mentioning or referencing this software
* or this function.
*
* License is also granted to make and use derivative works provided that
* such works are identified as "derived from the RSA Data Security,
* Inc. MD5 Message-Digest Algorithm" in all material mentioning or
* referencing the derived work.
*
* RSA Data Security, Inc. makes no representations concerning either the
* merchantability of this software or the suitability of this
* software for any particular purpose. It is provided "as is" without
* express or implied warranty of any kind.
*
* These notices must be retained in any copies of any part of this
* documentation and/or software.
*/ */
#ifndef __MD5_LOC_H__ #ifndef _MD5LOC_H
#define __MD5_LOC_H__ #define _MD5LOC_H
#ifdef __cplusplus /* POINTER defines a generic pointer type */
extern "C" { typedef unsigned char *POINTER;
#endif
#define HEX_STRING "0123456789abcdef" /* to convert to hex */ /* UINT2 defines a two byte word */
#define BLOCK_SIZE_MASK (MD5_BLOCK_SIZE - 1) typedef unsigned short int UINT2;
/* /* UINT4 defines a four byte word */
* Define my endian-ness. Could not do in a portable manner using the typedef unsigned long int UINT4;
* include files -- grumble.
*/
#if defined(__alpha) || defined(WIN32) || defined(__i386__)
/*
* little endian
*/
#define SWAP(n) (n)
#endif
#ifdef __sparc #ifndef NULL_PTR
/* #define NULL_PTR ((POINTER)0)
* big endian - big is better
*/
#define SWAP(n) \
(((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
#endif #endif
/* #ifndef UNUSED_ARG
* These are the four functions used in the four steps of the MD5 #define UNUSED_ARG(x) x = *(&x);
* algorithm and defined in the RFC 1321. The first function is a
* little bit optimized (as found in Colin Plumbs public domain
* implementation).
*/
/* #define FF(b, c, d) ((b & c) | (~b & d)) */
#define FF(b, c, d) (d ^ (b & (c ^ d)))
#define FG(b, c, d) FF(d, b, c)
#define FH(b, c, d) (b ^ c ^ d)
#define FI(b, c, d) (c ^ (b | ~d))
/*
* It is unfortunate that C does not provide an operator for cyclic
* rotation. Hope the C compiler is smart enough. -- Modified to
* remove the w = at the front - Gray 2/97
*/
#define CYCLIC(w, s) ((w << s) | (w >> (32 - s)))
/*
* First Round: using the given function, the context and a constant
* the next context is computed. Because the algorithms processing
* unit is a 32-bit word and it is determined to work on words in
* little endian byte order we perhaps have to change the byte order
* before the computation. To reduce the work for the next steps we
* store the swapped words in the array CORRECT_WORDS. -- Modified to
* fix the handling of unaligned buffer spaces - Gray 7/97
*/
#define OP1(a, b, c, d, b_p, c_p, s, T) \
do { \
memcpy(c_p, b_p, sizeof(md5_uint32)); \
*c_p = SWAP(*c_p); \
a += FF (b, c, d) + *c_p + T; \
a = CYCLIC (a, s); \
a += b; \
b_p = (char *)b_p + sizeof(md5_uint32); \
c_p++; \
} while (0)
/*
* Second to Fourth Round: we have the possibly swapped words in
* CORRECT_WORDS. Redefine the macro to take an additional first
* argument specifying the function to use.
*/
#define OP234(FUNC, a, b, c, d, k, s, T) \
do { \
a += FUNC (b, c, d) + k + T; \
a = CYCLIC (a, s); \
a += b; \
} while (0)
#ifdef __cplusplus
}
#endif #endif
#endif /* ! __MD5_LOC_H__ */ #endif /* end _GLOBAL_H_ */
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.4_20031103 Version: 1.3.4_20031112
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -38,7 +38,7 @@ tmake: ...@@ -38,7 +38,7 @@ tmake:
$(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen $(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
$(ENV) $(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag $(ENV) $(PERL) $(TMAKE) doxytag.pro >Makefile.doxytag
clean: Makefile.libdoxygen Makefile.doxygen Makefile.doxytag clean: Makefile.libdoxygen Makefile.libdoxycfg Makefile.doxygen Makefile.doxytag
$(MAKE) -f Makefile.libdoxygen clean $(MAKE) -f Makefile.libdoxygen clean
$(MAKE) -f Makefile.libdoxycfg clean $(MAKE) -f Makefile.libdoxycfg clean
$(MAKE) -f Makefile.doxygen clean $(MAKE) -f Makefile.doxygen clean
......
...@@ -853,7 +853,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -853,7 +853,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")); Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "outputlist.h" #include "outputlist.h"
#include "util.h" #include "util.h"
#include "membername.h" #include "membername.h"
#include "searchindex.h"
#define YY_NEVER_INTERACTIVE 1 #define YY_NEVER_INTERACTIVE 1
...@@ -78,7 +79,8 @@ static QCString g_name; ...@@ -78,7 +79,8 @@ static QCString g_name;
static QCString g_args; static QCString g_args;
static QCString g_classScope; static QCString g_classScope;
static QCString g_realScope; static QCString g_realScope;
static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope, 2 for internal blocks static QStack<int> g_scopeStack; //!< 1 if bracket starts a scope,
// 2 for internal blocks
static int g_anchorCount; static int g_anchorCount;
static FileDef * g_sourceFileDef; static FileDef * g_sourceFileDef;
static Definition * g_currentDefinition; static Definition * g_currentDefinition;
...@@ -318,6 +320,24 @@ static void popScope() ...@@ -318,6 +320,24 @@ static void popScope()
//printf("popScope() result: `%s'\n",g_classScope.data()); //printf("popScope() result: `%s'\n",g_classScope.data());
} }
static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="")
{
static bool searchEngineEnabled=Config_getBool("SEARCHENGINE");
if (searchEngineEnabled)
{
Doxygen::searchIndex->setCurrentDoc(name,base,anchor);
}
}
static void addToSearchIndex(const char *text)
{
static bool searchEngineEnabled=Config_getBool("SEARCHENGINE");
if (searchEngineEnabled)
{
Doxygen::searchIndex->addWord(text);
}
}
static void setClassScope(const QCString &name) static void setClassScope(const QCString &name)
{ {
//printf("setClassScope(%s)\n",name.data()); //printf("setClassScope(%s)\n",name.data());
...@@ -360,17 +380,27 @@ static void startCodeLine() ...@@ -360,17 +380,27 @@ static void startCodeLine()
g_realScope = d->name().copy(); g_realScope = d->name().copy();
//printf("Real scope: `%s'\n",g_realScope.data()); //printf("Real scope: `%s'\n",g_realScope.data());
g_bodyCurlyCount = 0; g_bodyCurlyCount = 0;
QCString lineAnchor;
lineAnchor.sprintf("l%05d",g_yyLineNr);
if (g_currentMemberDef) if (g_currentMemberDef)
{ {
g_code->writeLineNumber(g_currentMemberDef->getReference(), g_code->writeLineNumber(g_currentMemberDef->getReference(),
g_currentMemberDef->getOutputFileBase(), g_currentMemberDef->getOutputFileBase(),
g_currentMemberDef->anchor(),g_yyLineNr); g_currentMemberDef->anchor(),g_yyLineNr);
setCurrentDoc(
g_currentMemberDef->qualifiedName(),
g_sourceFileDef->getSourceFileBase(),
lineAnchor);
} }
else else
{ {
g_code->writeLineNumber(d->getReference(), g_code->writeLineNumber(d->getReference(),
d->getOutputFileBase(), d->getOutputFileBase(),
0,g_yyLineNr); 0,g_yyLineNr);
setCurrentDoc(
d->qualifiedName(),
g_sourceFileDef->getSourceFileBase(),
lineAnchor);
} }
} }
else else
...@@ -683,6 +713,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -683,6 +713,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
} }
} }
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className); writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
addToSearchIndex(className);
if (md) if (md)
{ {
Definition *d = md->getOuterScope()==Doxygen::globalScope ? Definition *d = md->getOuterScope()==Doxygen::globalScope ?
...@@ -717,6 +748,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -717,6 +748,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
if (md->isLinkable()) if (md->isLinkable())
{ {
writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName); writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName);
addToSearchIndex(clName);
if (g_currentMemberDef) if (g_currentMemberDef)
{ {
addDocCrossReference(g_currentMemberDef,md); addDocCrossReference(g_currentMemberDef,md);
...@@ -727,6 +759,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -727,6 +759,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
} }
codifyLines(clName); codifyLines(clName);
addToSearchIndex(clName);
} }
} }
...@@ -782,6 +815,7 @@ static bool getLink(const char *className, ...@@ -782,6 +815,7 @@ static bool getLink(const char *className,
md->getOutputFileBase(), md->getOutputFileBase(),
md->anchor(), md->anchor(),
text ? text : memberName); text ? text : memberName);
addToSearchIndex(text ? text : memberName);
return TRUE; return TRUE;
} }
} }
...@@ -834,6 +868,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const ...@@ -834,6 +868,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
// write the actual link // write the actual link
writeMultiLineCodeLink(ol,xmd->getReference(), writeMultiLineCodeLink(ol,xmd->getReference(),
xmd->getOutputFileBase(),xmd->anchor(),memName); xmd->getOutputFileBase(),xmd->anchor(),memName);
addToSearchIndex(memName);
return TRUE; return TRUE;
} }
...@@ -934,6 +969,7 @@ static void generateMemberLink(BaseCodeDocInterface &ol,const QCString &varName, ...@@ -934,6 +969,7 @@ static void generateMemberLink(BaseCodeDocInterface &ol,const QCString &varName,
} }
} }
codifyLines(memName); codifyLines(memName);
addToSearchIndex(memName);
return; return;
} }
...@@ -1499,12 +1535,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1499,12 +1535,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext)) if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
{ {
g_code->codify(yytext); g_code->codify(yytext);
addToSearchIndex(yytext);
} }
g_name.resize(0); g_name.resize(0);
} }
else else
{ {
g_code->codify(yytext); g_code->codify(yytext);
addToSearchIndex(yytext);
g_name.resize(0); g_name.resize(0);
} }
g_type.resize(0); g_type.resize(0);
...@@ -1524,12 +1562,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1524,12 +1562,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext)) if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
{ {
g_code->codify(yytext); g_code->codify(yytext);
addToSearchIndex(yytext);
} }
g_name.resize(0); g_name.resize(0);
} }
else else
{ {
g_code->codify(yytext); g_code->codify(yytext);
addToSearchIndex(yytext);
g_name.resize(0); g_name.resize(0);
} }
g_type.resize(0); g_type.resize(0);
...@@ -2104,6 +2144,10 @@ void parseCode(BaseCodeDocInterface &od,const char *className,const QCString &s, ...@@ -2104,6 +2144,10 @@ void parseCode(BaseCodeDocInterface &od,const char *className,const QCString &s,
g_exampleBlock = exBlock; g_exampleBlock = exBlock;
g_exampleName = exName; g_exampleName = exName;
g_sourceFileDef = fd; g_sourceFileDef = fd;
if (fd)
{
setCurrentDoc(fd->name(),fd->getSourceFileBase());
}
g_currentDefinition = 0; g_currentDefinition = 0;
g_currentMemberDef = 0; g_currentMemberDef = 0;
g_searchingForBody = FALSE; g_searchingForBody = FALSE;
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
*/ */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
//#include <iostream.h>
#include <assert.h> #include <assert.h>
#include <ctype.h> #include <ctype.h>
#include <stdarg.h> #include <stdarg.h>
...@@ -1489,7 +1488,7 @@ void Config::create() ...@@ -1489,7 +1488,7 @@ void Config::create()
"will interpret the first line (until the first dot) of a JavaDoc-style \n" "will interpret the first line (until the first dot) of a JavaDoc-style \n"
"comment as the brief description. If set to NO, the JavaDoc \n" "comment as the brief description. If set to NO, the JavaDoc \n"
"comments will behave just like the Qt-style comments (thus requiring an \n" "comments will behave just like the Qt-style comments (thus requiring an \n"
"explict @brief command for a brief description. \n", "explicit @brief command for a brief description. \n",
FALSE FALSE
); );
cb = addBool( cb = addBool(
...@@ -1513,7 +1512,7 @@ void Config::create() ...@@ -1513,7 +1512,7 @@ void Config::create()
"INHERIT_DOCS", "INHERIT_DOCS",
"If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n" "If the INHERIT_DOCS tag is set to YES (the default) then an undocumented \n"
"member inherits the documentation from any documented member that it \n" "member inherits the documentation from any documented member that it \n"
"reimplements. \n", "re-implements. \n",
TRUE TRUE
); );
cb = addBool( cb = addBool(
...@@ -2007,7 +2006,7 @@ void Config::create() ...@@ -2007,7 +2006,7 @@ void Config::create()
"If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \n" "If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can \n"
"be used to specify the file name of the resulting .chm file. You \n" "be used to specify the file name of the resulting .chm file. You \n"
"can add a path in front of the file if the result should not be \n" "can add a path in front of the file if the result should not be \n"
"written to the html output dir. \n" "written to the html output directory. \n"
); );
cs->addDependency("GENERATE_HTML"); cs->addDependency("GENERATE_HTML");
cs = addString( cs = addString(
...@@ -2187,7 +2186,7 @@ void Config::create() ...@@ -2187,7 +2186,7 @@ void Config::create()
cb = addBool( cb = addBool(
"GENERATE_RTF", "GENERATE_RTF",
"If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n" "If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output \n"
"The RTF output is optimised for Word 97 and may not look very pretty with \n" "The RTF output is optimized for Word 97 and may not look very pretty with \n"
"other RTF readers or editors.\n", "other RTF readers or editors.\n",
FALSE FALSE
); );
...@@ -2222,7 +2221,7 @@ void Config::create() ...@@ -2222,7 +2221,7 @@ void Config::create()
cs = addString( cs = addString(
"RTF_STYLESHEET_FILE", "RTF_STYLESHEET_FILE",
"Load stylesheet definitions from file. Syntax is similar to doxygen's \n" "Load stylesheet definitions from file. Syntax is similar to doxygen's \n"
"config file, i.e. a series of assigments. You only have to provide \n" "config file, i.e. a series of assignments. You only have to provide \n"
"replacements, missing definitions are set to their default value. \n" "replacements, missing definitions are set to their default value. \n"
); );
cs->setWidgetType(ConfigString::File); cs->setWidgetType(ConfigString::File);
...@@ -2277,9 +2276,7 @@ void Config::create() ...@@ -2277,9 +2276,7 @@ void Config::create()
"GENERATE_XML", "GENERATE_XML",
"If the GENERATE_XML tag is set to YES Doxygen will \n" "If the GENERATE_XML tag is set to YES Doxygen will \n"
"generate an XML file that captures the structure of \n" "generate an XML file that captures the structure of \n"
"the code including all documentation. Note that this \n" "the code including all documentation. \n",
"feature is still experimental and incomplete at the \n"
"moment. \n",
FALSE FALSE
); );
cs = addString( cs = addString(
...@@ -2500,7 +2497,7 @@ void Config::create() ...@@ -2500,7 +2497,7 @@ void Config::create()
"If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n" "If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will \n"
"generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or \n" "generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base or \n"
"super classes. Setting the tag to NO turns the diagrams off. Note that this \n" "super classes. Setting the tag to NO turns the diagrams off. Note that this \n"
"option is superceded by the HAVE_DOT option below. This is only a fallback. It is \n" "option is superseded by the HAVE_DOT option below. This is only a fallback. It is \n"
"recommended to install and use dot, since it yields more powerful graphs. \n", "recommended to install and use dot, since it yields more powerful graphs. \n",
TRUE TRUE
); );
...@@ -2540,7 +2537,7 @@ void Config::create() ...@@ -2540,7 +2537,7 @@ void Config::create()
cb = addBool( cb = addBool(
"UML_LOOK", "UML_LOOK",
"If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n" "If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n"
"collaboration diagrams in a style similiar to the OMG's Unified Modeling \n" "collaboration diagrams in a style similar to the OMG's Unified Modeling \n"
"Language. \n", "Language. \n",
FALSE FALSE
); );
......
...@@ -207,6 +207,8 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, ...@@ -207,6 +207,8 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine,
m_docLine = docLine; m_docLine = docLine;
} }
#define uni_isupper(c) (QChar(c).category()==QChar::Letter_Uppercase)
void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine) void Definition::setBriefDescription(const char *b,const char *briefFile,int briefLine)
{ {
if (b==0) return; if (b==0) return;
...@@ -219,7 +221,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri ...@@ -219,7 +221,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
{ {
case '.': case '!': case '?': break; case '.': case '!': case '?': break;
default: default:
if (isupper(m_brief.at(0))) m_brief+='.'; if (uni_isupper(m_brief.at(0))) m_brief+='.';
break; break;
} }
} }
......
...@@ -4782,16 +4782,15 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, ...@@ -4782,16 +4782,15 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
if (indexWords && md && Config_getBool("SEARCHENGINE")) if (indexWords && md && Config_getBool("SEARCHENGINE"))
{ {
g_searchUrl=md->getOutputFileBase()+ g_searchUrl=md->getOutputFileBase();
Config_getString("HTML_FILE_EXTENSION")+"#"+md->anchor();
Doxygen::searchIndex->setCurrentDoc( Doxygen::searchIndex->setCurrentDoc(
theTranslator->trMember(TRUE,TRUE)+" "+md->qualifiedName(), theTranslator->trMember(TRUE,TRUE)+" "+md->qualifiedName(),
g_searchUrl); g_searchUrl,
md->anchor());
} }
else if (indexWords && ctx && Config_getBool("SEARCHENGINE")) else if (indexWords && ctx && Config_getBool("SEARCHENGINE"))
{ {
g_searchUrl=ctx->getOutputFileBase()+ g_searchUrl=ctx->getOutputFileBase();
Config_getString("HTML_FILE_EXTENSION");
QCString name = ctx->qualifiedName(); QCString name = ctx->qualifiedName();
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{ {
......
...@@ -938,11 +938,12 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -938,11 +938,12 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE); node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
} }
} }
char md5_sig[16]; uchar md5_sig[16];
QCString sigStr(33); QCString sigStr(33);
md5_buffer(buf.ascii(),buf.length(),md5_sig); MD5Buffer(buf.ascii(),buf.length(),md5_sig);
md5_sig_to_string(md5_sig,sigStr.data(),33); MD5SigToString(md5_sig,sigStr.data(),33);
if (checkAndUpdateMd5Signature(baseName,sigStr)) if (checkAndUpdateMd5Signature(baseName,sigStr) ||
!QFileInfo(mapName).exists())
{ {
// image was new or has changed // image was new or has changed
QCString dotName=baseName+".dot"; QCString dotName=baseName+".dot";
...@@ -1478,10 +1479,10 @@ QCString computeMd5Signature(DotNode *root, ...@@ -1478,10 +1479,10 @@ QCString computeMd5Signature(DotNode *root,
pn->write(md5stream,gt,format,TRUE,FALSE,distance,backArrows); pn->write(md5stream,gt,format,TRUE,FALSE,distance,backArrows);
} }
} }
char md5_sig[16]; uchar md5_sig[16];
QCString sigStr(33); QCString sigStr(33);
md5_buffer(buf.ascii(),buf.length(),md5_sig); MD5Buffer(buf.ascii(),buf.length(),md5_sig);
md5_sig_to_string(md5_sig,sigStr.data(),33); MD5SigToString(md5_sig,sigStr.data(),33);
//printf("md5: %s | file: %s\n",sigStr,baseName.data()); //printf("md5: %s | file: %s\n",sigStr,baseName.data());
return sigStr; return sigStr;
} }
...@@ -1492,9 +1493,9 @@ static bool findMaximalDotGraph(DotNode *root, ...@@ -1492,9 +1493,9 @@ static bool findMaximalDotGraph(DotNode *root,
QDir &thisDir, QDir &thisDir,
DotNode::GraphType gt, DotNode::GraphType gt,
GraphOutputFormat format, GraphOutputFormat format,
bool lrRank=FALSE, bool lrRank /*=FALSE*/,
bool renderParents=FALSE, bool renderParents /*=FALSE*/,
bool backArrows=TRUE bool backArrows /*=TRUE*/
) )
{ {
int minDistance=1; // min distance that shows only direct children. int minDistance=1; // min distance that shows only direct children.
...@@ -1506,10 +1507,6 @@ static bool findMaximalDotGraph(DotNode *root, ...@@ -1506,10 +1507,6 @@ static bool findMaximalDotGraph(DotNode *root,
int maxDotGraphHeight = Config_getInt("MAX_DOT_GRAPH_HEIGHT"); int maxDotGraphHeight = Config_getInt("MAX_DOT_GRAPH_HEIGHT");
int lastFit=minDistance; int lastFit=minDistance;
QCString md5 = computeMd5Signature(root,gt,format,lrRank,
renderParents,maxDistance,backArrows);
if (!checkAndUpdateMd5Signature(baseName,md5)) return FALSE;
// binary search for the maximal inheritance depth that fits in a reasonable // binary search for the maximal inheritance depth that fits in a reasonable
// sized image (dimensions: Config_getInt("MAX_DOT_GRAPH_WIDTH"), Config_getInt("MAX_DOT_GRAPH_HEIGHT")) // sized image (dimensions: Config_getInt("MAX_DOT_GRAPH_WIDTH"), Config_getInt("MAX_DOT_GRAPH_HEIGHT"))
while (minDistance<=maxDistance) while (minDistance<=maxDistance)
...@@ -1631,9 +1628,28 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1631,9 +1628,28 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),baseName, QCString md5 = computeMd5Signature(m_startNode, // root
thisDir,m_graphType,format,!isTBRank,m_graphType==DotNode::Inheritance)) m_graphType, // gt
format, // format
!isTBRank, // lrRank
m_graphType==DotNode::Inheritance, // renderParent
QMIN(m_recDepth,m_maxDistance), // maxDist
TRUE // backArrows
);
if (checkAndUpdateMd5Signature(baseName,md5) ||
!QFileInfo(baseName+".map").exists()
)
{ {
findMaximalDotGraph(m_startNode, // root
QMIN(m_recDepth,m_maxDistance), // maxDist
baseName, // baseName
thisDir, // thisDir
m_graphType, // gt
format, // format
!isTBRank, // lrRank
m_graphType==DotNode::Inheritance, // renderParents
TRUE // backArrows
);
if (format==BITMAP) // run dot to create a bitmap image if (format==BITMAP) // run dot to create a bitmap image
{ {
QCString dotArgs(maxCmdLine); QCString dotArgs(maxCmdLine);
...@@ -1686,7 +1702,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1686,7 +1702,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot"); if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
} }
if (format==BITMAP) // run dot to create a bitmap image if (format==BITMAP && generateImageMap) // run dot to create a image map
{ {
QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName); QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName);
out << "<p><center><img src=\"" << baseName << "." out << "<p><center><img src=\"" << baseName << "."
...@@ -1879,11 +1895,28 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1879,11 +1895,28 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
if (m_inverse) mapName+="dep"; if (m_inverse) mapName+="dep";
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance), QCString md5 = computeMd5Signature(m_startNode, // root
baseName,thisDir,DotNode::Dependency,format, DotNode::Dependency, // gt
FALSE,FALSE,!m_inverse) format, // format
FALSE, // lrRank
FALSE, // renderParents
QMIN(m_recDepth,m_maxDistance), // maxDist
!m_inverse // backArrows
);
if (checkAndUpdateMd5Signature(baseName,md5) ||
!QFileInfo(baseName+".map").exists()
) )
{ {
findMaximalDotGraph(m_startNode, // root
QMIN(m_recDepth,m_maxDistance), // maxDist
baseName, // baseName
thisDir, // thisDir
DotNode::Dependency, // gt
format, // format
FALSE, // lrRank
FALSE, // renderParents
!m_inverse // backArrows
);
if (format==BITMAP) if (format==BITMAP)
{ {
// run dot to create a bitmap image // run dot to create a bitmap image
...@@ -1943,7 +1976,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1943,7 +1976,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot"); if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
} }
if (format==BITMAP) if (format==BITMAP && generateImageMap)
{ {
out << "<p><center><img src=\"" << baseName << "." out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#" << imgExt << "\" border=\"0\" usemap=\"#"
...@@ -2045,14 +2078,31 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2045,14 +2078,31 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QDir thisDir; QDir thisDir;
QCString baseName=m_diskName+"_cgraph"; QCString baseName=m_diskName+"_cgraph";
//baseName=convertNameToFile(baseName);
QCString mapName=baseName; QCString mapName=baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance), QCString md5 = computeMd5Signature(m_startNode, // root
baseName,thisDir,DotNode::CallGraph,format, DotNode::CallGraph, // gt
TRUE,FALSE,FALSE)) format, // format
TRUE, // lrRank
FALSE, // renderParents
QMIN(m_recDepth,m_maxDistance), // maxDist
FALSE // backArrows
);
if (checkAndUpdateMd5Signature(baseName,md5) ||
!QFileInfo(baseName+".map").exists()
)
{ {
findMaximalDotGraph(m_startNode, // root
QMIN(m_recDepth,m_maxDistance), // maxDist
baseName, // baseName
thisDir, // thisDir
DotNode::CallGraph, // gt
format, // format
TRUE, // lrRank
FALSE, // renderParents
FALSE // backArrows
);
if (format==BITMAP) if (format==BITMAP)
{ {
// run dot to create a bitmap image // run dot to create a bitmap image
...@@ -2108,7 +2158,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2108,7 +2158,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
} }
} }
if (format==BITMAP) if (format==BITMAP && generateImageMap)
{ {
out << "<p><center><img src=\"" << baseName << "." out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#" << imgExt << "\" border=\"0\" usemap=\"#"
......
...@@ -8155,6 +8155,11 @@ void parseInput() ...@@ -8155,6 +8155,11 @@ void parseInput()
inheritDocumentation(); inheritDocumentation();
} }
// compute the shortest possible names of all files
// without loosing the uniqueness of the file names.
msg("Generating disk names...\n");
Doxygen::inputNameList.generateDiskNames();
msg("Adding source references...\n"); msg("Adding source references...\n");
addSourceReferences(); addSourceReferences();
...@@ -8269,11 +8274,6 @@ void generateOutput() ...@@ -8269,11 +8274,6 @@ void generateOutput()
msg("Counting data structures...\n"); msg("Counting data structures...\n");
countDataStructures(); countDataStructures();
// compute the shortest possible names of all files
// without loosing the uniqueness of the file names.
msg("Generating disk names...\n");
Doxygen::inputNameList.generateDiskNames();
msg("Resolving user defined references...\n"); msg("Resolving user defined references...\n");
resolveUserReferences(); resolveUserReferences();
......
...@@ -223,7 +223,7 @@ void FileDef::writeDocumentation(OutputList &ol) ...@@ -223,7 +223,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")); Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -427,7 +427,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -427,7 +427,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")); Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -817,7 +817,7 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -817,7 +817,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
// write search index info // write search index info
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(qualifiedName(),getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")+"#"+anchor()); Doxygen::searchIndex->setCurrentDoc(qualifiedName(),getOutputFileBase(),anchor());
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
Doxygen::searchIndex->addWord(qualifiedName().lower()); Doxygen::searchIndex->addWord(qualifiedName().lower());
} }
......
...@@ -263,7 +263,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) ...@@ -263,7 +263,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE")) if (Config_getBool("SEARCHENGINE"))
{ {
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION")); Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower()); Doxygen::searchIndex->addWord(localName().lower());
} }
......
...@@ -276,7 +276,7 @@ function main() ...@@ -276,7 +276,7 @@ function main()
$requiredWords = array(); $requiredWords = array();
$forbiddenWords = array(); $forbiddenWords = array();
$foundWords = array(); $foundWords = array();
$word=strtolower(strtok($query," ")); $word=strtok($query," ");
while ($word) // for each word in the search query while ($word) // for each word in the search query
{ {
if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; } if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
...@@ -286,7 +286,7 @@ function main() ...@@ -286,7 +286,7 @@ function main()
$foundWords[]=$word; $foundWords[]=$word;
search($file,$word,$results); search($file,$word,$results);
} }
$word=strtolower(strtok(" ")); $word=strtok(" ");
} }
$docs = array(); $docs = array();
combine_results($results,$docs); combine_results($results,$docs);
......
...@@ -276,7 +276,7 @@ ...@@ -276,7 +276,7 @@
" $requiredWords = array();\n" " $requiredWords = array();\n"
" $forbiddenWords = array();\n" " $forbiddenWords = array();\n"
" $foundWords = array();\n" " $foundWords = array();\n"
" $word=strtolower(strtok($query,\" \"));\n" " $word=strtok($query,\" \");\n"
" while ($word) // for each word in the search query\n" " while ($word) // for each word in the search query\n"
" {\n" " {\n"
" if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }\n" " if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }\n"
...@@ -286,7 +286,7 @@ ...@@ -286,7 +286,7 @@
" $foundWords[]=$word;\n" " $foundWords[]=$word;\n"
" search($file,$word,$results);\n" " search($file,$word,$results);\n"
" }\n" " }\n"
" $word=strtolower(strtok(\" \"));\n" " $word=strtok(\" \");\n"
" }\n" " }\n"
" $docs = array();\n" " $docs = array();\n"
" combine_results($results,$docs);\n" " combine_results($results,$docs);\n"
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "qtbc.h" #include "qtbc.h"
#include "searchindex.h" #include "searchindex.h"
#include "config.h"
#include <qfile.h> #include <qfile.h>
...@@ -59,8 +60,10 @@ SearchIndex::SearchIndex() : m_words(328829), m_index(numIndexEntries), m_urlInd ...@@ -59,8 +60,10 @@ SearchIndex::SearchIndex() : m_words(328829), m_index(numIndexEntries), m_urlInd
for (i=0;i<numIndexEntries;i++) m_index.insert(i,new QList<IndexWord>); for (i=0;i<numIndexEntries;i++) m_index.insert(i,new QList<IndexWord>);
} }
void SearchIndex::setCurrentDoc(const char *name,const char *url) void SearchIndex::setCurrentDoc(const char *name,const char *baseName,const char *anchor)
{ {
QCString url=baseName+Config_getString("HTML_FILE_EXTENSION");
if (anchor) url+=(QCString)"#"+anchor;
m_urlIndex++; m_urlIndex++;
m_urls.insert(m_urlIndex,new URL(name,url)); m_urls.insert(m_urlIndex,new URL(name,url));
} }
...@@ -84,7 +87,7 @@ void SearchIndex::addWord(const char *word) ...@@ -84,7 +87,7 @@ void SearchIndex::addWord(const char *word)
int idx=charsToIndex(word); int idx=charsToIndex(word);
if (idx<0) return; if (idx<0) return;
w = new IndexWord(word); w = new IndexWord(word);
//printf("addWord(%s) at index %d\n",word,idx); //fprintf(stderr,"addWord(%s) at index %d\n",word,idx);
m_index[idx]->append(w); m_index[idx]->append(w);
m_words.insert(word,w); m_words.insert(word,w);
} }
......
...@@ -57,7 +57,7 @@ class SearchIndex ...@@ -57,7 +57,7 @@ class SearchIndex
{ {
public: public:
SearchIndex(); SearchIndex();
void setCurrentDoc(const char *name,const char *url); void setCurrentDoc(const char *name,const char *baseName,const char *anchor=0);
void addWord(const char *word); void addWord(const char *word);
void write(const char *file); void write(const char *file);
private: private:
......
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