Commit 8a5c51f2 authored by dimitri's avatar dimitri

Release-1.3.4-20031112

parent a2a1e97f
......@@ -187,4 +187,4 @@ DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# 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
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (03 November 2003)
Dimitri van Heesch (12 November 2003)
......@@ -73,11 +73,24 @@ docs: FORCE
pdf: docs
cd latex ; $(MAKE)
DISTFILES = Doxyfile libpng libmd5 addon tmake doc wintools examples bin lib objects \
qtools src configure configure.bin Makefile.in Makefile.win_nmake.in \
Makefile.win_make.in INSTALL make.bat LANGUAGE.HOWTO LICENSE PLATFORMS \
VERSION packages
archive: clean
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 \
Makefile.win_make.in INSTALL make.bat LANGUAGE.HOWTO LICENSE PLATFORMS \
VERSION packages
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
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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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.
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.
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
<dt>\c DETAILS_AT_TOP <dd>
......@@ -371,7 +371,7 @@ followed by the descriptions of the tags grouped by category.
\addindex INHERIT_DOCS
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
reimplements.
re-implements.
\anchor cfg_distribute_group_doc
<dt>\c DISTRIBUTE_GROUP_DOC <dd>
......@@ -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
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
written to the html output dir.
written to the html output directory.
\anchor cfg_hhc_location
<dt>\c HHC_LOCATION <dd>
......@@ -989,7 +989,7 @@ function's detailed documentation block.
\anchor cfg_generate_treeview
<dt>\c GENERATE_TREEVIEW <dd>
\addindex GENERATE_TREEVIEW
If the \c GENERATE_TREEVIEW tag is set to YES, a side pannel will be
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
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+
......@@ -1132,7 +1132,7 @@ EXTRA_PACKAGES = times
<dt>\c GENERATE_RTF <dd>
\addindex GENERATE_RTF
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.
\anchor cfg_rtf_output
......@@ -1165,7 +1165,7 @@ EXTRA_PACKAGES = times
<dt>\c RTF_STYLESHEET_FILE <dd>
\addindex RTF_STYLESHEET_FILE
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.
See also section \ref doxygen_usage for information on how to generate
......@@ -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
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.
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,
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
not sufficient to fit the graph (see
\ref cfg_max_dot_graph_width "MAX_DOT_GRAPH_WIDTH" and
\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.
\anchor cfg_max_dot_graph_width
......
This diff is collapsed.
/*
* 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$
/* MD5.H - header file for MD5C.C
*/
/*
* NOTE: during quick performance tests on a sun ultra and an alpha
* 255 300, the md5 libraries performed upwards of 3mb/sec. That
* included disk i/o on bobcat and panther.
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
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_H__
#define __MD5_H__
#ifndef _MD5_H_
#define _MD5_H_
#ifdef __cplusplus
extern "C" {
#endif
/*
* Size of a standard MD5 signature in bytes. This definition is for
* external programs only. The MD5 routines themselves reference the
* signature as 4 unsigned 32-bit integers.
*/
#define MD5_SIZE 16
/*
* NOTE: the following is assumed to generate a 32-bit unsigned data
* type.
*/
typedef unsigned int md5_uint32;
#define MAX_MD5_UINT32 ((md5_uint32)4294967295U)
/*
* The MD5 algorithm works on blocks of characters of 64 bytes. This
* is an internal value only and is not necessary for external use.
*/
#define MD5_BLOCK_SIZE 64
/*
* Structure to save state of computation between the single steps.
*/
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 */
md5_uint32 md_buf_len; /* length of the storage buffer */
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);
/*
* md5_process
*
* 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);
/*
* 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_sig_from_string
*
* DESCRIPTION:
*
* Convert a MD5 signature from a hexadecimal string representation into
* 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. */
#include "md5_loc.h"
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
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
}
#endif
#endif /* ! __MD5_H__ */
#endif
/*
* Local defines for the md5 functions.
*
* $Id$
*/
/* GLOBAL.H - RSAREF types and constants */
/*
* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
* 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.
/* Copyright (C) RSA Laboratories, a division of RSA Data Security,
Inc., created 1991. All rights reserved.
*/
#ifndef __MD5_LOC_H__
#define __MD5_LOC_H__
#ifndef _MD5LOC_H
#define _MD5LOC_H
#ifdef __cplusplus
extern "C" {
#endif
/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;
#define HEX_STRING "0123456789abcdef" /* to convert to hex */
#define BLOCK_SIZE_MASK (MD5_BLOCK_SIZE - 1)
/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;
/*
* Define my endian-ness. Could not do in a portable manner using the
* include files -- grumble.
*/
#if defined(__alpha) || defined(WIN32) || defined(__i386__)
/*
* little endian
*/
#define SWAP(n) (n)
#endif
/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;
#ifdef __sparc
/*
* big endian - big is better
*/
#define SWAP(n) \
(((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
#ifndef NULL_PTR
#define NULL_PTR ((POINTER)0)
#endif
/*
* These are the four functions used in the four steps of the MD5
* 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
}
#ifndef UNUSED_ARG
#define UNUSED_ARG(x) x = *(&x);
#endif
#endif /* ! __MD5_LOC_H__ */
#endif /* end _GLOBAL_H_ */
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.4_20031103
Version: 1.3.4_20031112
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -38,7 +38,7 @@ tmake:
$(ENV) $(PERL) $(TMAKE) doxygen.pro >Makefile.doxygen
$(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.libdoxycfg clean
$(MAKE) -f Makefile.doxygen clean
......
......@@ -853,7 +853,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE"))
{
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower());
}
......
......@@ -34,6 +34,7 @@
#include "outputlist.h"
#include "util.h"
#include "membername.h"
#include "searchindex.h"
#define YY_NEVER_INTERACTIVE 1
......@@ -78,7 +79,8 @@ static QCString g_name;
static QCString g_args;
static QCString g_classScope;
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 FileDef * g_sourceFileDef;
static Definition * g_currentDefinition;
......@@ -318,6 +320,24 @@ static void popScope()
//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)
{
//printf("setClassScope(%s)\n",name.data());
......@@ -360,17 +380,27 @@ static void startCodeLine()
g_realScope = d->name().copy();
//printf("Real scope: `%s'\n",g_realScope.data());
g_bodyCurlyCount = 0;
QCString lineAnchor;
lineAnchor.sprintf("l%05d",g_yyLineNr);
if (g_currentMemberDef)
{
g_code->writeLineNumber(g_currentMemberDef->getReference(),
g_currentMemberDef->getOutputFileBase(),
g_currentMemberDef->anchor(),g_yyLineNr);
setCurrentDoc(
g_currentMemberDef->qualifiedName(),
g_sourceFileDef->getSourceFileBase(),
lineAnchor);
}
else
{
g_code->writeLineNumber(d->getReference(),
d->getOutputFileBase(),
0,g_yyLineNr);
setCurrentDoc(
d->qualifiedName(),
g_sourceFileDef->getSourceFileBase(),
lineAnchor);
}
}
else
......@@ -683,6 +713,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
}
}
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
addToSearchIndex(className);
if (md)
{
Definition *d = md->getOuterScope()==Doxygen::globalScope ?
......@@ -717,6 +748,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
if (md->isLinkable())
{
writeMultiLineCodeLink(ol,md->getReference(),md->getOutputFileBase(),md->anchor(),clName);
addToSearchIndex(clName);
if (g_currentMemberDef)
{
addDocCrossReference(g_currentMemberDef,md);
......@@ -727,6 +759,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
}
codifyLines(clName);
addToSearchIndex(clName);
}
}
......@@ -782,6 +815,7 @@ static bool getLink(const char *className,
md->getOutputFileBase(),
md->anchor(),
text ? text : memberName);
addToSearchIndex(text ? text : memberName);
return TRUE;
}
}
......@@ -834,6 +868,7 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
// write the actual link
writeMultiLineCodeLink(ol,xmd->getReference(),
xmd->getOutputFileBase(),xmd->anchor(),memName);
addToSearchIndex(memName);
return TRUE;
}
......@@ -934,6 +969,7 @@ static void generateMemberLink(BaseCodeDocInterface &ol,const QCString &varName,
}
}
codifyLines(memName);
addToSearchIndex(memName);
return;
}
......@@ -1499,12 +1535,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
{
g_code->codify(yytext);
addToSearchIndex(yytext);
}
g_name.resize(0);
}
else
{
g_code->codify(yytext);
addToSearchIndex(yytext);
g_name.resize(0);
}
g_type.resize(0);
......@@ -1524,12 +1562,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
{
g_code->codify(yytext);
addToSearchIndex(yytext);
}
g_name.resize(0);
}
else
{
g_code->codify(yytext);
addToSearchIndex(yytext);
g_name.resize(0);
}
g_type.resize(0);
......@@ -2104,6 +2144,10 @@ void parseCode(BaseCodeDocInterface &od,const char *className,const QCString &s,
g_exampleBlock = exBlock;
g_exampleName = exName;
g_sourceFileDef = fd;
if (fd)
{
setCurrentDoc(fd->name(),fd->getSourceFileBase());
}
g_currentDefinition = 0;
g_currentMemberDef = 0;
g_searchingForBody = FALSE;
......
......@@ -19,7 +19,6 @@
*/
#include <stdio.h>
#include <stdlib.h>
//#include <iostream.h>
#include <assert.h>
#include <ctype.h>
#include <stdarg.h>
......@@ -1489,7 +1488,7 @@ void Config::create()
"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"
"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
);
cb = addBool(
......@@ -1513,7 +1512,7 @@ void Config::create()
"INHERIT_DOCS",
"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"
"reimplements. \n",
"re-implements. \n",
TRUE
);
cb = addBool(
......@@ -2007,7 +2006,7 @@ void Config::create()
"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"
"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 = addString(
......@@ -2187,7 +2186,7 @@ void Config::create()
cb = addBool(
"GENERATE_RTF",
"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",
FALSE
);
......@@ -2222,7 +2221,7 @@ void Config::create()
cs = addString(
"RTF_STYLESHEET_FILE",
"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"
);
cs->setWidgetType(ConfigString::File);
......@@ -2277,9 +2276,7 @@ void Config::create()
"GENERATE_XML",
"If the GENERATE_XML tag is set to YES Doxygen will \n"
"generate an XML file that captures the structure of \n"
"the code including all documentation. Note that this \n"
"feature is still experimental and incomplete at the \n"
"moment. \n",
"the code including all documentation. \n",
FALSE
);
cs = addString(
......@@ -2500,7 +2497,7 @@ void Config::create()
"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"
"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",
TRUE
);
......@@ -2540,7 +2537,7 @@ void Config::create()
cb = addBool(
"UML_LOOK",
"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",
FALSE
);
......
......@@ -207,6 +207,8 @@ void Definition::setDocumentation(const char *d,const char *docFile,int 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)
{
if (b==0) return;
......@@ -219,7 +221,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
{
case '.': case '!': case '?': break;
default:
if (isupper(m_brief.at(0))) m_brief+='.';
if (uni_isupper(m_brief.at(0))) m_brief+='.';
break;
}
}
......
......@@ -4782,16 +4782,15 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
if (indexWords && md && Config_getBool("SEARCHENGINE"))
{
g_searchUrl=md->getOutputFileBase()+
Config_getString("HTML_FILE_EXTENSION")+"#"+md->anchor();
g_searchUrl=md->getOutputFileBase();
Doxygen::searchIndex->setCurrentDoc(
theTranslator->trMember(TRUE,TRUE)+" "+md->qualifiedName(),
g_searchUrl);
g_searchUrl,
md->anchor());
}
else if (indexWords && ctx && Config_getBool("SEARCHENGINE"))
{
g_searchUrl=ctx->getOutputFileBase()+
Config_getString("HTML_FILE_EXTENSION");
g_searchUrl=ctx->getOutputFileBase();
QCString name = ctx->qualifiedName();
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
......
......@@ -938,11 +938,12 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
}
}
char md5_sig[16];
uchar md5_sig[16];
QCString sigStr(33);
md5_buffer(buf.ascii(),buf.length(),md5_sig);
md5_sig_to_string(md5_sig,sigStr.data(),33);
if (checkAndUpdateMd5Signature(baseName,sigStr))
MD5Buffer(buf.ascii(),buf.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33);
if (checkAndUpdateMd5Signature(baseName,sigStr) ||
!QFileInfo(mapName).exists())
{
// image was new or has changed
QCString dotName=baseName+".dot";
......@@ -1478,10 +1479,10 @@ QCString computeMd5Signature(DotNode *root,
pn->write(md5stream,gt,format,TRUE,FALSE,distance,backArrows);
}
}
char md5_sig[16];
uchar md5_sig[16];
QCString sigStr(33);
md5_buffer(buf.ascii(),buf.length(),md5_sig);
md5_sig_to_string(md5_sig,sigStr.data(),33);
MD5Buffer(buf.ascii(),buf.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33);
//printf("md5: %s | file: %s\n",sigStr,baseName.data());
return sigStr;
}
......@@ -1492,9 +1493,9 @@ static bool findMaximalDotGraph(DotNode *root,
QDir &thisDir,
DotNode::GraphType gt,
GraphOutputFormat format,
bool lrRank=FALSE,
bool renderParents=FALSE,
bool backArrows=TRUE
bool lrRank /*=FALSE*/,
bool renderParents /*=FALSE*/,
bool backArrows /*=TRUE*/
)
{
int minDistance=1; // min distance that shows only direct children.
......@@ -1506,10 +1507,6 @@ static bool findMaximalDotGraph(DotNode *root,
int maxDotGraphHeight = Config_getInt("MAX_DOT_GRAPH_HEIGHT");
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
// sized image (dimensions: Config_getInt("MAX_DOT_GRAPH_WIDTH"), Config_getInt("MAX_DOT_GRAPH_HEIGHT"))
while (minDistance<=maxDistance)
......@@ -1631,9 +1628,28 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),baseName,
thisDir,m_graphType,format,!isTBRank,m_graphType==DotNode::Inheritance))
QCString md5 = computeMd5Signature(m_startNode, // root
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
{
QCString dotArgs(maxCmdLine);
......@@ -1686,7 +1702,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
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);
out << "<p><center><img src=\"" << baseName << "."
......@@ -1879,11 +1895,28 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
if (m_inverse) mapName+="dep";
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::Dependency,format,
FALSE,FALSE,!m_inverse)
QCString md5 = computeMd5Signature(m_startNode, // root
DotNode::Dependency, // gt
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)
{
// run dot to create a bitmap image
......@@ -1943,7 +1976,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
}
if (format==BITMAP)
if (format==BITMAP && generateImageMap)
{
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
......@@ -2045,14 +2078,31 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QDir thisDir;
QCString baseName=m_diskName+"_cgraph";
//baseName=convertNameToFile(baseName);
QCString mapName=baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::CallGraph,format,
TRUE,FALSE,FALSE))
QCString md5 = computeMd5Signature(m_startNode, // root
DotNode::CallGraph, // gt
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)
{
// run dot to create a bitmap image
......@@ -2108,7 +2158,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
}
}
if (format==BITMAP)
if (format==BITMAP && generateImageMap)
{
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
......
......@@ -8155,6 +8155,11 @@ void parseInput()
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");
addSourceReferences();
......@@ -8269,11 +8274,6 @@ void generateOutput()
msg("Counting data structures...\n");
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");
resolveUserReferences();
......
......@@ -223,7 +223,7 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE"))
{
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower());
}
......
......@@ -427,7 +427,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE"))
{
Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->setCurrentDoc(title,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower());
}
......
......@@ -817,7 +817,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
// write search index info
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(qualifiedName().lower());
}
......
......@@ -263,7 +263,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SEARCHENGINE"))
{
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase()+Config_getString("HTML_FILE_EXTENSION"));
Doxygen::searchIndex->setCurrentDoc(pageTitle,getOutputFileBase());
Doxygen::searchIndex->addWord(localName().lower());
}
......
......@@ -276,7 +276,7 @@ function main()
$requiredWords = array();
$forbiddenWords = array();
$foundWords = array();
$word=strtolower(strtok($query," "));
$word=strtok($query," ");
while ($word) // for each word in the search query
{
if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
......@@ -286,7 +286,7 @@ function main()
$foundWords[]=$word;
search($file,$word,$results);
}
$word=strtolower(strtok(" "));
$word=strtok(" ");
}
$docs = array();
combine_results($results,$docs);
......
......@@ -276,7 +276,7 @@
" $requiredWords = array();\n"
" $forbiddenWords = array();\n"
" $foundWords = array();\n"
" $word=strtolower(strtok($query,\" \"));\n"
" $word=strtok($query,\" \");\n"
" while ($word) // for each word in the search query\n"
" {\n"
" if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }\n"
......@@ -286,7 +286,7 @@
" $foundWords[]=$word;\n"
" search($file,$word,$results);\n"
" }\n"
" $word=strtolower(strtok(\" \"));\n"
" $word=strtok(\" \");\n"
" }\n"
" $docs = array();\n"
" combine_results($results,$docs);\n"
......
......@@ -17,6 +17,7 @@
#include "qtbc.h"
#include "searchindex.h"
#include "config.h"
#include <qfile.h>
......@@ -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>);
}
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_urls.insert(m_urlIndex,new URL(name,url));
}
......@@ -84,7 +87,7 @@ void SearchIndex::addWord(const char *word)
int idx=charsToIndex(word);
if (idx<0) return;
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_words.insert(word,w);
}
......
......@@ -57,7 +57,7 @@ class SearchIndex
{
public:
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 write(const char *file);
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