Commit a934b38c authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.8.1.2-20120729

parent ae962ae4
DOXYGEN Version 1.8.1.2
DOXYGEN Version 1.8.1.2-20120729
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (12 July 2012)
Dimitri van Heesch (29 July 2012)
......@@ -129,7 +129,7 @@ rpmbinary: dist
ctags:
ctags -f tags src addon/doxywizard qtools
ctags -R -f tags src addon/doxywizard qtools
FORCE:
DOXYGEN Version 1.8.1.2
DOXYGEN Version 1.8.1.2_20120729
Please read INSTALL for compilation instructions.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (12 July 2012)
Dimitri van Heesch (dimitri@stack.nl) (29 July 2012)
......@@ -1070,6 +1070,13 @@ class IPage : public ICompound
virtual const IDocTitle *title() const = 0;
};
/** \brief Interface to a directory in the object model. */
class IDir : public ICompound
{
public:
virtual ICompoundIterator *nestedCompounds() const = 0;
};
/*! Root node of the object model. */
class IDoxygen
{
......
......@@ -507,15 +507,19 @@ ICompound *CompoundHandler::toICompound() const
{
switch (m_kind)
{
case IClass::Class: return (IClass *)this;
case IStruct::Struct: return (IStruct *)this;
case IUnion::Union: return (IUnion *)this;
case IException::Exception: return (IException *)this;
case IInterface::Interface: return (IInterface *)this;
case INamespace::Namespace: return (INamespace *)this;
case IFile::File: return (IFile *)this;
case IGroup::Group: return (IGroup *)this;
case IPage::Page: return (IPage *)this;
case ICompound::Class: return (IClass *)this;
case ICompound::Struct: return (IStruct *)this;
case ICompound::Union: return (IUnion *)this;
case ICompound::Interface: return (IInterface *)this;
case ICompound::Protocol: return (IClass *)this;
case ICompound::Category: return (IClass *)this;
case ICompound::Exception: return (IException *)this;
case ICompound::File: return (IFile *)this;
case ICompound::Namespace: return (INamespace *)this;
case ICompound::Group: return (IGroup *)this;
case ICompound::Page: return (IPage *)this;
case ICompound::Example: return (IPage *)this;
case ICompound::Dir: return (IDir *)this;
default: return 0;
}
return 0;
......
......@@ -110,6 +110,7 @@ class CompoundHandler : public IClass,
public IFile,
public IGroup,
public IPage,
public IDir,
public BaseHandler<CompoundHandler>
{
friend class RelatedCompound;
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=8
doxygen_version_revision=1.2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO
doxygen_version_mmn=20120729
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -600,6 +600,7 @@ Structural indicators
\sa section \ref cmdendinternal "\\endinternal".
<hr>
\section cmdmainpage \\mainpage [(title)]
......
......@@ -135,33 +135,33 @@ Compilation is now done by performing the following steps:
\section install_bin_unix Installing the binaries on UNIX
After the compilation of the source code do a <code>make install</code>
to install doxygen. If you downloaded the binary distribution for UNIX,
type:
After the compilation of the source code do a <code>make install</code>
to install doxygen. If you downloaded the binary distribution for UNIX,
type:
./configure
make install
./configure
make install
Binaries are installed into the directory <code>\<prefix\>/bin</code>.
Use <code>make install_docs</code> to install the
documentation and examples into <code>\<docdir\>/doxygen</code>.
Binaries are installed into the directory <code>\<prefix\>/bin</code>.
Use <code>make install_docs</code> to install the
documentation and examples into <code>\<docdir\>/doxygen</code>.
<code>\<prefix\></code> defaults to <code>/usr/local</code> but can be changed with
the <code>--prefix</code> option of the configure script.
The default <code>\<docdir\></code> directory is
<code>\<prefix\>/share/doc/packages</code> and can be changed with
the <code>--docdir</code> option of the configure script.
<code>\<prefix\></code> defaults to <code>/usr/local</code> but can be changed with
the <code>--prefix</code> option of the configure script.
The default <code>\<docdir\></code> directory is
<code>\<prefix\>/share/doc/packages</code> and can be changed with
the <code>--docdir</code> option of the configure script.
Alternatively, you can also copy the binaries from the <code>bin</code>
directory manually to some <code>bin</code> directory in your search path.
This is sufficient to use doxygen.
Alternatively, you can also copy the binaries from the <code>bin</code>
directory manually to some <code>bin</code> directory in your search path.
This is sufficient to use doxygen.
\note You need the GNU install tool for this to work (it is part of
the coreutils package). Other install tools may put the binaries in
the wrong directory!
\note You need the GNU install tool for this to work (it is part of
the coreutils package). Other install tools may put the binaries in
the wrong directory!
If you have a RPM or DEP package, then please follow the
standard installation procedure that is required for these packages.
If you have a RPM or DEP package, then please follow the
standard installation procedure that is required for these packages.
\section unix_problems Known compilation problems for UNIX
......
......@@ -164,7 +164,7 @@ MD5Final(md5byte digest[16], struct MD5Context *ctx)
byteSwap(ctx->buf, 4);
memcpy(digest, ctx->buf, 16);
memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
}
#ifndef ASM_MD5
......
......@@ -92,7 +92,10 @@
# if !defined(MAC_OS_X_VERSION_10_7)
# define MAC_OS_X_VERSION_10_7 MAC_OS_X_VERSION_10_6 + 10
# endif
# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_7)
# if !defined(MAC_OS_X_VERSION_10_8)
# define MAC_OS_X_VERSION_10_8 MAC_OS_X_VERSION_10_7 + 10
# endif
# if (MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_8)
# warning "This version of Mac OS X is unsupported"
# endif
#elif defined(MSDOS) || defined(_MSDOS) || defined(__MSDOS__)
......
......@@ -826,7 +826,7 @@ static uint char_val( const char **str, uint *strlength ) // get char value
}
#if defined(DEBUG)
#if 0 //defined(DEBUG)
static uint *dump( uint *p )
{
while ( *p != END ) {
......
......@@ -51,8 +51,9 @@ static void report_error(int code, const char *where, const char *what)
qWarning("%s: %s failure: %d", where, what, code);
}
struct QWaitConditionPrivate
class QWaitConditionPrivate
{
public:
pthread_mutex_t mutex;
pthread_cond_t cond;
int waiters;
......
#include "arguments.h"
#include "marshal.h"
#include <assert.h>
/*! the argument list is documented if one of its
* arguments is documented
......@@ -15,3 +17,80 @@ bool ArgumentList::hasDocumentation() const
return hasDocs;
}
ArgumentList *ArgumentList::deepCopy() const
{
ArgumentList *argList = new ArgumentList;
argList->setAutoDelete(TRUE);
QListIterator<Argument> ali(*this);
Argument *a;
for (;(a=ali.current());++ali)
{
argList->append(new Argument(*a));
}
argList->constSpecifier = constSpecifier;
argList->volatileSpecifier = volatileSpecifier;
argList->pureSpecifier = pureSpecifier;
argList->trailingReturnType = trailingReturnType;
return argList;
}
ArgumentList *ArgumentList::unmarshal(StorageIntf *s)
{
uint i;
uint count = unmarshalUInt(s);
if (count==NULL_LIST) return 0; // null list
ArgumentList *result = new ArgumentList;
assert(count<1000000);
//printf("unmarshalArgumentList: %d\n",count);
for (i=0;i<count;i++)
{
Argument *a = new Argument;
a->attrib = unmarshalQCString(s);
a->type = unmarshalQCString(s);
a->canType = unmarshalQCString(s);
a->name = unmarshalQCString(s);
a->array = unmarshalQCString(s);
a->defval = unmarshalQCString(s);
a->docs = unmarshalQCString(s);
result->append(a);
}
result->constSpecifier = unmarshalBool(s);
result->volatileSpecifier = unmarshalBool(s);
result->pureSpecifier = unmarshalBool(s);
result->trailingReturnType = unmarshalQCString(s);
return result;
}
void ArgumentList::marshal(StorageIntf *s,ArgumentList *argList)
{
if (argList==0)
{
marshalUInt(s,NULL_LIST); // null pointer representation
}
else
{
marshalUInt(s,argList->count());
if (argList->count()>0)
{
ArgumentListIterator ali(*argList);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
marshalQCString(s,a->attrib);
marshalQCString(s,a->type);
marshalQCString(s,a->canType);
marshalQCString(s,a->name);
marshalQCString(s,a->array);
marshalQCString(s,a->defval);
marshalQCString(s,a->docs);
}
}
marshalBool(s,argList->constSpecifier);
marshalBool(s,argList->volatileSpecifier);
marshalBool(s,argList->pureSpecifier);
marshalQCString(s,argList->trailingReturnType);
}
}
......@@ -19,6 +19,8 @@
#include "qtbc.h"
#include <qlist.h>
class StorageIntf;
/*! \brief This class contains the information about the argument of a
* function or template
*
......@@ -71,7 +73,7 @@ struct Argument
/*! \brief This class represents an function or template argument list.
*
* This class also stores some information about member that is typically
* put after the argument list, such as wether the member is const,
* put after the argument list, such as whether the member is const,
* volatile or pure virtual.
*/
class ArgumentList : public QList<Argument>
......@@ -85,6 +87,9 @@ class ArgumentList : public QList<Argument>
{ setAutoDelete(TRUE); }
/*! Destroys the argument list */
~ArgumentList() {}
/*! Makes a deep copy of this object */
ArgumentList *deepCopy() const;
/*! Does any argument of this list have documentation? */
bool hasDocumentation() const;
/*! Does the member modify the state of the class? default: FALSE. */
bool constSpecifier;
......@@ -92,6 +97,12 @@ class ArgumentList : public QList<Argument>
bool volatileSpecifier;
/*! Is this a pure virtual member? default: FALSE */
bool pureSpecifier;
/*! C++11 style Trailing return type? */
QCString trailingReturnType;
/*! C++11 defaulted method */
static ArgumentList *unmarshal(StorageIntf *s);
static void marshal(StorageIntf *s,ArgumentList *argList);
};
typedef QListIterator<Argument> ArgumentListIterator;
......
This diff is collapsed.
......@@ -244,6 +244,15 @@ class ClassDef : public Definition
/** Returns TRUE if this class is implemented in C# */
bool isCSharp() const;
/** Returns TRUE if this class is marked as final */
bool isFinal() const;
/** Returns TRUE if this class is marked as sealed */
bool isSealed() const;
/** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */
bool isExtension() const;
/** Returns the class of which this is a category (Objective-C only) */
ClassDef *categoryOf() const;
......@@ -303,6 +312,7 @@ class ClassDef : public Definition
void setIsStatic(bool b);
void setCompoundType(CompoundType t);
void setClassName(const char *name);
void setClassSpecifier(int spec);
void setTemplateArguments(ArgumentList *al);
void setTemplateBaseClassNames(QDict<int> *templateNames);
......@@ -387,6 +397,7 @@ class ClassDef : public Definition
int countInheritedDecMembers(MemberList::ListType lt);
int countAdditionalInheritedMembers();
void writeAdditionalInheritedMembers(OutputList &ol);
void addClassAttributes(OutputList &ol);
ClassDefImpl *m_impl;
......
......@@ -96,6 +96,7 @@ bool ClassSDict::declVisible(const ClassDef::CompoundType *filter) const
void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter,
const char *header,bool localNames)
{
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
if (count()>0)
{
ClassSDict::Iterator sdi(*this);
......@@ -105,6 +106,8 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
{
//printf(" ClassSDict::writeDeclaration for %s\n",cd->name().data());
if (cd->name().find('@')==-1 &&
!cd->isExtension() &&
(cd->protection()!=Private || extractPrivate) &&
(filter==0 || *filter==cd->compoundType())
)
{
......
......@@ -89,6 +89,7 @@ static bool g_insideBody;
static int g_bodyCurlyCount;
static QCString g_saveName;
static QCString g_saveType;
static QCString g_delimiter;
static int g_bracketCount = 0;
static int g_curlyCount = 0;
......@@ -880,7 +881,7 @@ static bool getLinkInScope(const QCString &c, // scope
if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef,FALSE,g_forceTagReference) &&
md->isLinkable() && (!varOnly || md->isVariable()))
{
//printf("found it!\n");
//printf("found it %s!\n",md->qualifiedName().data());
if (g_exampleBlock)
{
QCString anchor;
......@@ -1302,6 +1303,10 @@ static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
ClassDef *ccd=0;
QCString locScope=g_classScope;
QCString locFunc=removeRedundantWhiteSpace(funcName);
QCString funcScope;
QCString funcWithScope=locFunc;
QCString funcWithFullScope=locFunc;
QCString fullScope=locScope;
//fprintf(stdout,"*** locScope=%s locFunc=%s\n",locScope.data(),locFunc.data());
int len=2;
int i=locFunc.findRev("::");
......@@ -1323,14 +1328,7 @@ static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
if (i==-1) i=locFunc.findRev("\\"),len=1; // for PHP
if (i>0)
{
if (locScope.isEmpty())
{
locScope=locFunc.left(i);
}
else
{
locScope+="::"+locFunc.left(i);
}
funcScope=locFunc.left(i);
locFunc=locFunc.right(locFunc.length()-i-len).stripWhiteSpace();
int ts=locScope.find('<'); // start of template
int te=locScope.findRev('>'); // end of template
......@@ -1340,9 +1338,28 @@ static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
// remove template from scope
locScope=locScope.left(ts)+locScope.right(locScope.length()-te-1);
}
ts=funcScope.find('<'); // start of template
te=funcScope.findRev('>'); // end of template
//printf("ts=%d te=%d\n",ts,te);
if (ts!=-1 && te!=-1 && te>ts)
{
// remove template from scope
funcScope=funcScope.left(ts)+funcScope.right(funcScope.length()-te-1);
}
if (!funcScope.isEmpty())
{
funcWithScope = funcScope+"::"+locFunc;
if (!locScope.isEmpty())
{
fullScope=locScope+"::"+funcScope;
}
}
if (!locScope.isEmpty())
{
funcWithFullScope = locScope+"::"+funcWithScope;
}
}
//printf("generateFunctionLink(%s) classScope=`%s'\n",locFunc.data(),locScope.data());
if (!locScope.isEmpty() && (ccd=g_codeClassSDict->find(locScope)))
if (!fullScope.isEmpty() && (ccd=g_codeClassSDict->find(fullScope)))
{
//printf("using classScope %s\n",g_classScope.data());
if (ccd->baseClasses())
......@@ -1357,7 +1374,22 @@ static void generateFunctionLink(CodeOutputInterface &ol,const char *funcName)
}
}
}
if (!getLink(locScope,locFunc,ol,funcName))
if (!locScope.isEmpty() && fullScope!=locScope && (ccd=g_codeClassSDict->find(locScope)))
{
//printf("using classScope %s\n",g_classScope.data());
if (ccd->baseClasses())
{
BaseClassListIterator bcli(*ccd->baseClasses());
for ( ; bcli.current() ; ++bcli)
{
if (getLink(bcli.current()->classDef->name(),funcWithScope,ol,funcName))
{
goto exit;
}
}
}
}
if (!getLink(locScope,funcWithScope,ol,funcName))
{
generateClassOrGlobalLink(ol,funcName);
}
......@@ -1782,7 +1814,7 @@ SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property")
KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC})
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string"|"nullptr")
CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
ARITHOP "+"|"-"|"/"|"*"|"%"|"--"|"++"
......@@ -1790,6 +1822,9 @@ ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
BITOP "&"|"|"|"^"|"<<"|">>"|"~"
OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
RAWEND ")"[^ \t\(\)\\]{0,16}\"
%option noyywrap
%x SkipString
......@@ -1823,6 +1858,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
%x ObjCSkipStr
%x OldStyleArgs
%x UsingName
%x RawString
%%
......@@ -2130,6 +2166,14 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
generateClassOrGlobalLink(*g_code,yytext);
BEGIN( ClassVar );
}
<ClassName>{ID}{B}*"("{ID}")" { // Obj-C category
g_curClassName=removeRedundantWhiteSpace(yytext);
g_scopeStack.push(CLASSBLOCK);
pushScope(g_curClassName);
addType();
generateClassOrGlobalLink(*g_code,yytext);
BEGIN( ClassVar );
}
<PackageName>{ID}("."{ID})* {
g_curClassName=substitute(yytext,".","::");
//printf("found package: %s\n",g_curClassName.data());
......@@ -2502,6 +2546,18 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_name+=yytext;
BEGIN( FuncCall );
}
<FuncCall,Body,MemberCall,MemberCall2,SkipInits>{RAWBEGIN} {
QCString text=yytext;
int i=text.find('R');
g_code->codify(text.left(i+1));
startFontClass("stringliteral");
g_code->codify(yytext+i+1);
g_lastStringContext=YY_START;
g_inForEachExpression = FALSE;
g_delimiter = yytext+i+2;
g_delimiter=g_delimiter.left(g_delimiter.length()-1);
BEGIN( RawString );
}
<FuncCall,Body,MemberCall,MemberCall2,SkipInits>\" {
startFontClass("stringliteral");
g_code->codify(yytext);
......@@ -2538,6 +2594,18 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
<SkipString,SkipStringS>\\. {
g_code->codify(yytext);
}
<RawString>{RAWEND} {
g_code->codify(yytext);
QCString delimiter = yytext+1;
delimiter=delimiter.left(delimiter.length()-1);
if (delimiter==g_delimiter)
{
BEGIN( g_lastStringContext );
}
}
<RawString>[^)]+ { g_code->codify(yytext); }
<RawString>. { g_code->codify(yytext); }
<RawString>\n { codifyLines(yytext); }
<SkipVerbString>[^"\n]+ {
g_code->codify(yytext);
}
......
......@@ -36,6 +36,8 @@
#include <assert.h>
#define YY_NO_INPUT 1
#define ADDCHAR(c) g_outBuf->addChar(c)
#define ADDARRAY(a,s) g_outBuf->addArray(a,s)
......
......@@ -47,6 +47,8 @@
#include "cite.h"
#include "markdown.h"
#define YY_NO_INPUT 1
// forward declarations
static bool handleBrief(const QCString &);
static bool handleFn(const QCString &);
......@@ -533,7 +535,14 @@ static void addXRefItem(const char *listName,const char *itemTitle,
RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0);
item->text += " <p>";
item->text += outputXRef;
if (Doxygen::markdownSupport)
{
item->text += processMarkdown(yyFileName,current,outputXRef);
}
else
{
item->text += outputXRef;
}
//printf("%s: text +=%s\n",listName,item->text.data());
}
else // new item
......@@ -548,7 +557,14 @@ static void addXRefItem(const char *listName,const char *itemTitle,
sprintf(anchorLabel,"_%s%06d",listName,itemId);
RefItem *item = refList->getRefItem(itemId);
ASSERT(item!=0);
item->text = outputXRef;
if (Doxygen::markdownSupport)
{
item->text = processMarkdown(yyFileName,current,outputXRef);
}
else
{
item->text = outputXRef;
}
item->listAnchor = anchorLabel;
docEntry->addSpecialListItem(listName,itemId);
QCString cmdString;
......@@ -835,7 +851,9 @@ DL [dD][lL]
IMG [iI][mM][gG]
HR [hH][rR]
PARA [pP][aA][rR][aA]
CODE [cC][oO][dD][eE]
DETAILEDHTML {PRE}|{UL}|{TABLE}|{OL}|{DL}|{P}|[Hh][1-6]|{IMG}|{HR}|{PARA}
DETAILEDHTMLOPT {CODE}
BN [ \t\n\r]
BL [ \t\r]*"\n"
B [ \t]
......@@ -955,6 +973,14 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
// continue with the same input
REJECT;
}
<Comment>"<"{DETAILEDHTMLOPT}{ATTR}">" { // HTML command that ends a brief description
if (current->lang==SrcLangExt_CSharp)
{
setOutput(OutputDoc);
}
// continue with the same input
REJECT;
}
<Comment>"<summary>" { // start of a .NET XML style brief description
setOutput(OutputBrief);
addOutput(yytext);
......@@ -2323,6 +2349,7 @@ static bool handleDeprecated(const QCString &)
static bool handleXRefItem(const QCString &)
{
newXRefKind = XRef_Item;
BEGIN(XRefItemParam1);
return FALSE;
}
......
......@@ -40,6 +40,9 @@
<xsd:attribute name="id" type="xsd:string" />
<xsd:attribute name="kind" type="DoxCompoundKind" />
<xsd:attribute name="prot" type="DoxProtectionKind" />
<xsd:attribute name="final" type="DoxBool" use="optional"/>
<xsd:attribute name="sealed" type="DoxBool" use="optional"/>
<xsd:attribute name="abstract" type="DoxBool" use="optional"/>
</xsd:complexType>
<xsd:complexType name="listofallmembersType">
......
......@@ -40,6 +40,9 @@
" <xsd:attribute name=\"id\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"kind\" type=\"DoxCompoundKind\" />\n"
" <xsd:attribute name=\"prot\" type=\"DoxProtectionKind\" />\n"
" <xsd:attribute name=\"final\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"sealed\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"abstract\" type=\"DoxBool\" use=\"optional\"/>\n"
" </xsd:complexType>\n"
"\n"
" <xsd:complexType name=\"listofallmembersType\">\n"
......
......@@ -43,6 +43,8 @@
#undef Config_getEnum
#undef Config_getBool
#define YY_NO_INPUT 1
// use in-class definitions
#define Config_getString(val) getString(__FILE__,__LINE__,val)
#define Config_getInt(val) getInt(__FILE__,__LINE__,val)
......@@ -463,8 +465,8 @@ static QCString configStringRecode(
}
size_t iLeft=(size_t)inputSize;
size_t oLeft=(size_t)outputSize;
const char *inputPtr = str.data();
char *outputPtr = output.data();
char *inputPtr = str.data();
char *outputPtr = output.data();
if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft))
{
outputSize-=(int)oLeft;
......@@ -904,7 +906,7 @@ static void substEnvVarsInStrList(QStrList &sl)
if (!wasQuoted) /* as a result of the expansion, a single string
may have expanded into a list, which we'll
add to sl. If the orginal string already
add to sl. If the original string already
contained multiple elements no further
splitting is done to allow quoted items with spaces! */
{
......@@ -1484,7 +1486,7 @@ void Config::check()
bool b5 = Config_getBool("SKIP_FUNCTION_MACROS");
bool b6 = Config_getBool("EXTRACT_PACKAGE");
const char *s1,*s2,*s3,*s4,*s5,*s6;
if (b1) s1=" INLINDE_INHERITED_MEMB = NO (was YES)\n"; else s1="";
if (b1) s1=" INLINE_INHERITED_MEMB = NO (was YES)\n"; else s1="";
if (b2) s2=" INHERIT_DOCS = NO (was YES)\n"; else s2="";
if (!b3) s3=" HIDE_SCOPE_NAMES = YES (was NO)\n"; else s3="";
if (!b4) s4=" EXTRACT_PRIVATE = YES (was NO)\n"; else s4="";
......
......@@ -23,6 +23,7 @@
#include "ce_parse.h" // generated header file
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_INPUT 1
QCString g_strToken;
CPPValue g_resultValue;
......
......@@ -28,6 +28,8 @@
#include "declinfo.h"
#include "util.h"
#include "message.h"
#define YY_NO_INPUT 1
/* -----------------------------------------------------------------
*
......
......@@ -58,6 +58,7 @@
#include "arguments.h"
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_INPUT 1
/* -----------------------------------------------------------------
* state variables
......@@ -79,6 +80,7 @@ static int g_argCurlyCount;
static int g_readArgContext;
static int g_lastDocContext;
static int g_lastDocChar;
static QCString g_delimiter;
/* -----------------------------------------------------------------
*/
......@@ -100,11 +102,14 @@ static int yyread(char *buf,int max_size)
B [ \t]
ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
RAWBEGIN (u|U|L|u8)?R\"[^ \t\(\)\\]{0,16}"("
RAWEND ")"[^ \t\(\)\\]{0,16}\"
%option noyywrap
%x Start
%x CopyArgString
%x CopyRawString
%x CopyArgRound
%x CopyArgRound2
%x CopyArgSharp
......@@ -115,6 +120,7 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
%x FuncQual
%x ReadDocBlock
%x ReadDocLine
%x TrailingReturn
%%
......@@ -137,6 +143,13 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
<ReadFuncArgDef>"'"\\[0-7]{1,3}"'" { g_curArgDefValue+=yytext; }
<ReadFuncArgDef>"'"\\."'" { g_curArgDefValue+=yytext; }
<ReadFuncArgDef>"'"."'" { g_curArgDefValue+=yytext; }
<ReadFuncArgDef>{RAWBEGIN} { g_curArgDefValue+=yytext;
QCString text=yytext;
int i=text.find('"');
g_delimiter = yytext+i+1;
g_delimiter=g_delimiter.left(g_delimiter.length()-1);
BEGIN( CopyRawString );
}
<ReadFuncArgDef>\" {
g_curArgDefValue+=*yytext;
BEGIN( CopyArgString );
......@@ -222,6 +235,11 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
BEGIN( g_readArgContext );
}
}
<CopyArgRound>")"/{B}* {
*g_copyArgValue += *yytext;
if (g_argRoundCount>0) g_argRoundCount--;
else BEGIN( g_readArgContext );
}
<CopyArgSharp>"<" {
g_argSharpCount++;
*g_copyArgValue += *yytext;
......@@ -235,7 +253,7 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
g_argCurlyCount++;
*g_copyArgValue += *yytext;
}
<CopyArgSharp>"}" {
<CopyArgCurly>"}" {
*g_copyArgValue += *yytext;
if (g_argCurlyCount>0) g_argCurlyCount--;
else BEGIN( g_readArgContext );
......@@ -243,6 +261,15 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
<CopyArgString>\\. {
g_curArgDefValue+=yytext;
}
<CopyRawString>{RAWEND} {
g_curArgDefValue+=yytext;
QCString delimiter = yytext+1;
delimiter=delimiter.left(delimiter.length()-1);
if (delimiter==g_delimiter)
{
BEGIN( ReadFuncArgDef );
}
}
<CopyArgString>\" {
g_curArgDefValue+=*yytext;
BEGIN( ReadFuncArgDef );
......@@ -385,7 +412,7 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
<ReadFuncArgDef,CopyArgString>"->"|">="|">>" {
g_curArgDefValue+=yytext;
}
<ReadFuncArgDef,CopyArgString>. {
<ReadFuncArgDef,CopyArgString,CopyRawString>. {
g_curArgDefValue+=*yytext;
}
<CopyArgRound,CopyArgRound2,CopyArgSharp,CopyArgCurly>{ID} {
......@@ -401,9 +428,24 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
<FuncQual>"volatile" {
g_argList->volatileSpecifier=TRUE;
}
<FuncQual>"="{B}*"0" {
<FuncQual,TrailingReturn>"="{B}*"0" {
g_argList->pureSpecifier=TRUE;
BEGIN(FuncQual);
}
<FuncQual>"->" { // C++11 trailing return type
g_argList->trailingReturnType=" -> ";
BEGIN(TrailingReturn);
}
<TrailingReturn>{B}/("final"|"override"){B}* {
unput(*yytext);
BEGIN(FuncQual);
}
<TrailingReturn>. {
g_argList->trailingReturnType+=yytext;
}
<TrailingReturn>\n {
g_argList->trailingReturnType+=yytext;
}
<FuncQual>")"{B}*"["[^]]*"]" { // for functions returning a pointer to an array,
// i.e. ")[]" in "int (*f(int))[4]" with argsString="(int))[4]"
g_extraTypeChars=yytext;
......@@ -447,8 +489,10 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
*/
/*! Converts an argument string into an ArgumentList.
* \param argsString the list of Arguments.
* \param al a reference to resulting argument list pointer.
* \param[in] argsString the list of Arguments.
* \param[out] al a reference to resulting argument list pointer.
* \param[out] extraTypeChars point to string to which trailing characters
* for complex types are written to
*/
void stringToArgumentList(const char *argsString,ArgumentList* al,QCString *extraTypeChars)
......
......@@ -292,6 +292,85 @@ Definition::Definition(const char *df,int dl,
}
}
Definition::Definition(const Definition &d) : DefinitionIntf(), LockableObj()
{
m_name = d.m_name;
m_defLine = d.m_defLine;
m_impl = new DefinitionImpl;
*m_impl = *d.m_impl;
m_impl->sectionDict = 0;
m_impl->sourceRefByDict = 0;
m_impl->sourceRefsDict = 0;
m_impl->partOfGroups = 0;
m_impl->xrefListItems = 0;
m_impl->brief = 0;
m_impl->details = 0;
m_impl->body = 0;
m_impl->inbodyDocs = 0;
if (d.m_impl->sectionDict)
{
m_impl->sectionDict = new SectionDict(17);
SDict<SectionInfo>::Iterator it(*d.m_impl->sectionDict);
SectionInfo *si;
for (it.toFirst();(si=it.current());++it)
{
m_impl->sectionDict->append(si->label,si);
}
}
if (d.m_impl->sourceRefByDict)
{
m_impl->sourceRefByDict = new MemberSDict;
MemberSDict::IteratorDict it(*d.m_impl->sourceRefByDict);
MemberDef *md;
for (it.toFirst();(md=it.current());++it)
{
m_impl->sourceRefByDict->append(it.currentKey(),md);
}
}
if (d.m_impl->sourceRefsDict)
{
m_impl->sourceRefsDict = new MemberSDict;
MemberSDict::IteratorDict it(*d.m_impl->sourceRefsDict);
MemberDef *md;
for (it.toFirst();(md=it.current());++it)
{
m_impl->sourceRefsDict->append(it.currentKey(),md);
}
}
if (d.m_impl->partOfGroups)
{
GroupListIterator it(*d.m_impl->partOfGroups);
GroupDef *gd;
for (it.toFirst();(gd=it.current());++it)
{
makePartOfGroup(gd);
}
}
if (d.m_impl->xrefListItems)
{
setRefItems(d.m_impl->xrefListItems);
}
if (d.m_impl->brief)
{
m_impl->brief = new BriefInfo(*d.m_impl->brief);
}
if (d.m_impl->details)
{
m_impl->details = new DocInfo(*d.m_impl->details);
}
if (d.m_impl->body)
{
m_impl->body = new BodyInfo(*d.m_impl->body);
}
if (d.m_impl->inbodyDocs)
{
m_impl->details = new DocInfo(*d.m_impl->inbodyDocs);
}
m_isSymbol = d.m_isSymbol;
if (m_isSymbol) addToMap(m_name,this);
}
Definition::~Definition()
{
if (m_isSymbol)
......@@ -1297,6 +1376,7 @@ QCString Definition::qualifiedName() const
void Definition::setOuterScope(Definition *d)
{
makeResident();
//printf("%s::setOuterScope(%s)\n",name().data(),d?d->name().data():"<none>");
if (m_impl->outerScope!=d)
{
m_impl->qualifiedName.resize(0); // flush cached scope name
......
......@@ -336,8 +336,9 @@ class Definition : public DefinitionIntf, public LockableObj
void lock() const {}
void unlock() const {}
private:
Definition(const Definition &d);
private:
static void addToMap(const char *name,Definition *d);
static void removeFromMap(Definition *d);
......
......@@ -18,8 +18,8 @@ static int g_dirCount=0;
DirDef::DirDef(const char *path) : Definition(path,1,path)
{
bool fullPathNames = Config_getBool("FULL_PATH_NAMES");
// get display name (stipping the paths mentioned in STRIP_FROM_PATH)
m_dispName = stripFromPath(path);
// get short name (last part of path)
m_shortName = path;
m_diskName = path;
......@@ -33,6 +33,11 @@ DirDef::DirDef(const char *path) : Definition(path,1,path)
m_shortName = m_shortName.mid(pi+1);
}
setLocalName(m_shortName);
m_dispName = fullPathNames ? stripFromPath(path) : m_shortName;
if (m_dispName.at(m_dispName.length()-1)=='/')
{ // strip trailing /
m_dispName = m_dispName.left(m_dispName.length()-1);
}
m_fileList = new FileList;
m_usedDirs = new QDict<UsedDir>(257);
......@@ -198,7 +203,7 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
ol.disable(OutputGenerator::Man);
//ol.startParagraph();
ol.startDirDepGraph();
ol.parseText(theTranslator->trDirDepGraph(displayName()));
ol.parseText(theTranslator->trDirDepGraph(shortName()));
ol.endDirDepGraph(dirDep);
//ol.endParagraph();
ol.enableAll();
......@@ -218,6 +223,7 @@ void DirDef::writeSubDirList(OutputList &ol)
DirDef *dd=m_subdirs.first();
while (dd)
{
ol.startMemberDeclaration();
ol.startMemberItem(dd->getOutputFileBase(),0);
ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
ol.insertMemberAlign();
......@@ -239,6 +245,7 @@ void DirDef::writeSubDirList(OutputList &ol)
);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
dd=m_subdirs.next();
}
......@@ -258,6 +265,7 @@ void DirDef::writeFileList(OutputList &ol)
FileDef *fd=m_fileList->first();
while (fd)
{
ol.startMemberDeclaration();
ol.startMemberItem(fd->getOutputFileBase(),0);
ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
ol.insertMemberAlign();
......@@ -300,6 +308,7 @@ void DirDef::writeFileList(OutputList &ol)
);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
fd=m_fileList->next();
}
ol.endMemberList();
......@@ -353,6 +362,7 @@ void DirDef::writeDocumentation(OutputList &ol)
//---------------------------------------- start flexible part -------------------------------
SrcLangExt lang = getLanguage();
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Directory));
LayoutDocEntry *lde;
......@@ -381,7 +391,7 @@ void DirDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::DetailedDesc:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeDetailedDescription(ol,ls->title);
writeDetailedDescription(ol,ls->title(lang));
}
break;
case LayoutDocEntry::ClassIncludes:
......
......@@ -397,7 +397,7 @@ static void checkArgumentName(const QCString &name,bool isParam)
}
/*! Checks if the parameters that have been specified using \@param are
* indeed all paramters.
* indeed all parameters.
* Must be called after checkArgumentName() has been called for each
* argument.
*/
......@@ -1838,7 +1838,7 @@ void DocInclude::parse()
break;
case Snippet:
readTextFileByName(m_file,m_text);
// check here for the existance of the blockId inside the file, so we
// check here for the existence of the blockId inside the file, so we
// only generate the warning once.
int count;
if (!m_blockId.isEmpty() && (count=m_text.contains(m_blockId.data()))!=2)
......
......@@ -36,6 +36,7 @@
#include "portable.h"
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_INPUT 1
//--------------------------------------------------------------------------
......
......@@ -349,7 +349,7 @@ static QCString replaceRef(const QCString &buf,const QCString relPath,
* references followed by a $ and then the URL.
* \param context the context (file, class, or namespace) in which the
* map file was found
* \returns TRUE if succesful.
* \returns TRUE if successful.
*/
static bool convertMapFile(FTextStream &t,const char *mapName,
const QCString relPath, bool urlOnly=FALSE,
......@@ -1774,7 +1774,7 @@ void DotNode::writeBox(FTextStream &t,
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (!dotTransparent)
{
ClassDef* ccd=this->m_classDef;
ClassDef* ccd=m_classDef;
t << ",color=\"" << labCol << "\", fillcolor=\"";
if (ccd && vhdlOpt && (VhdlDocGen::VhdlClasses)ccd->protection()==VhdlDocGen::ARCHITECTURECLASS)
......
This diff is collapsed.
......@@ -455,8 +455,11 @@ table.memberdecls {
color: #555;
}
.memItemLeft, .memItemRight, .memTemplParams {
border-bottom: 1px solid ##E2;
.memSeparator {
border-bottom: 1px solid #DEE4F0;
line-height: 1px;
margin: 0px;
padding: 0px;
}
.memItemLeft, .memTemplItemLeft {
......@@ -470,6 +473,7 @@ table.memberdecls {
.memTemplParams {
color: ##60;
white-space: nowrap;
font-size: 80%;
}
/* @end */
......@@ -648,12 +652,13 @@ span.mlabel {
border-right:1px solid ##CC;
border-bottom:1px solid ##CC;
text-shadow: none;
color: white;
margin-right: 4px;
padding: 2px 3px;
border-radius: 3px;
font-size: 7pt;
color: white;
margin-right: 4px;
padding: 2px 3px;
border-radius: 3px;
font-size: 7pt;
white-space: nowrap;
vertical-align: middle;
}
......@@ -824,6 +829,7 @@ table.fieldtable {
font-size: 11px;
background-image:url('tab_b.png');
background-repeat:repeat-x;
background-position: 0 -5px;
height:30px;
line-height:30px;
color:##9b;
......
......@@ -455,8 +455,11 @@
" color: #555;\n"
"}\n"
"\n"
".memItemLeft, .memItemRight, .memTemplParams {\n"
" border-bottom: 1px solid ##E2;\n"
".memSeparator {\n"
" border-bottom: 1px solid #DEE4F0;\n"
" line-height: 1px;\n"
" margin: 0px;\n"
" padding: 0px;\n"
"}\n"
"\n"
".memItemLeft, .memTemplItemLeft {\n"
......@@ -470,6 +473,7 @@
".memTemplParams {\n"
" color: ##60;\n"
" white-space: nowrap;\n"
" font-size: 80%;\n"
"}\n"
"\n"
"/* @end */\n"
......@@ -648,12 +652,13 @@
" border-right:1px solid ##CC;\n"
" border-bottom:1px solid ##CC;\n"
" text-shadow: none;\n"
" color: white;\n"
" margin-right: 4px;\n"
" padding: 2px 3px;\n"
" border-radius: 3px;\n"
" font-size: 7pt;\n"
" color: white;\n"
" margin-right: 4px;\n"
" padding: 2px 3px;\n"
" border-radius: 3px;\n"
" font-size: 7pt;\n"
" white-space: nowrap;\n"
" vertical-align: middle;\n"
"}\n"
"\n"
"\n"
......@@ -824,6 +829,7 @@
" font-size: 11px;\n"
" background-image:url('tab_b.png');\n"
" background-repeat:repeat-x;\n"
" background-position: 0 -5px;\n"
" height:30px;\n"
" line-height:30px;\n"
" color:##9b;\n"
......
......@@ -81,8 +81,7 @@ Entry::Entry(const Entry &e)
virt = e.virt;
args = e.args;
bitfields = e.bitfields;
argList = new ArgumentList;
argList->setAutoDelete(TRUE);
argList = e.argList->deepCopy();
tArgLists = 0;
program = e.program;
initializer = e.initializer;
......@@ -169,27 +168,10 @@ Entry::Entry(const Entry &e)
anchors->append(new SectionInfo(*s));
}
// deep copy argument list
QListIterator<Argument> ali(*e.argList);
Argument *a;
for (;(a=ali.current());++ali)
{
argList->append(new Argument(*a));
}
argList->constSpecifier = e.argList->constSpecifier;
argList->volatileSpecifier = e.argList->volatileSpecifier;
argList->pureSpecifier = e.argList->pureSpecifier;
// deep copy type contraint list
if (e.typeConstr)
{
typeConstr = new ArgumentList;
typeConstr->setAutoDelete(TRUE);
QListIterator<Argument> tcli(*e.typeConstr);
for (;(a=tcli.current());++tcli)
{
typeConstr->append(new Argument(*a));
}
typeConstr = e.typeConstr->deepCopy();
}
// deep copy template argument lists
......
......@@ -140,9 +140,11 @@ class Entry
Strong = 0x00400000,
Weak = 0x00800000,
Unretained = 0x01000000,
Composition = 0x02000000,
Aggregation = 0x04000000,
Association = 0x08000000
Alias = 0x02000000,
ConstExp = 0x04000000,
Default = 0x08000000,
Delete = 0x10000000,
NoExcept = 0x20000000
};
enum ClassSpecifier
{
......
......@@ -167,7 +167,7 @@ void FileDef::findSectionsInDocumentation()
void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
{
if ((!briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!documentation().isEmpty() ||
!documentation().stripWhiteSpace().isEmpty() || // avail empty section
(Config_getBool("SOURCE_BROWSER") && getStartBodyLine()!=-1 && getBodyDef())
)
{
......@@ -487,6 +487,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
LayoutDocManager::instance().docEntries(LayoutDocManager::File));
LayoutDocEntry *lde;
bool first=TRUE;
SrcLangExt lang=getLanguage();
for (eli.toFirst();(lde=eli.current());++eli)
{
if ((lde->kind()==LayoutDocEntry::FileClasses && classSDict && classSDict->declVisible()) ||
......@@ -495,7 +496,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
QCString label = lde->kind()==LayoutDocEntry::FileClasses ? "nested-classes" : "namespaces";
ol.writeSummaryLink(0,label,ls->title,first);
ol.writeSummaryLink(0,label,ls->title(lang),first);
first=FALSE;
}
else if (lde->kind()==LayoutDocEntry::MemberDecl)
......@@ -504,7 +505,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
MemberList * ml = getMemberList(lmd->type);
if (ml && ml->declVisible())
{
ol.writeSummaryLink(0,ml->listTypeAsString(),lmd->title,first);
ol.writeSummaryLink(0,ml->listTypeAsString(),lmd->title(lang),first);
first=FALSE;
}
}
......@@ -602,6 +603,7 @@ void FileDef::writeDocumentation(OutputList &ol)
//---------------------------------------- start flexible part -------------------------------
SrcLangExt lang = getLanguage();
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::File));
LayoutDocEntry *lde;
......@@ -630,13 +632,13 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::FileClasses:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeClassDeclarations(ol,ls->title);
writeClassDeclarations(ol,ls->title(lang));
}
break;
case LayoutDocEntry::FileNamespaces:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeNamespaceDeclarations(ol,ls->title);
writeNamespaceDeclarations(ol,ls->title(lang));
}
break;
case LayoutDocEntry::MemberGroups:
......@@ -645,7 +647,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::MemberDecl:
{
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
writeMemberDeclarations(ol,lmd->type,lmd->title);
writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
}
break;
case LayoutDocEntry::MemberDeclEnd:
......@@ -654,7 +656,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::DetailedDesc:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeDetailedDescription(ol,ls->title);
writeDetailedDescription(ol,ls->title(lang));
}
break;
case LayoutDocEntry::MemberDefStart:
......@@ -666,7 +668,7 @@ void FileDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::MemberDef:
{
LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
writeMemberDocumentation(ol,lmd->type,lmd->title);
writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
}
break;
case LayoutDocEntry::MemberDefEnd:
......@@ -985,7 +987,7 @@ void FileDef::addSourceRef(int line,Definition *d,MemberDef *md)
srcDefDict->insert(line,d);
if (md) srcMemberDict->insert(line,md);
//printf("Adding member %s with anchor %s at line %d to file %s\n",
// md->name().data(),md->anchor().data(),line,name().data());
// md?md->name().data():"<none>",md?md->anchor().data():"<none>",line,name().data());
}
}
......
......@@ -47,6 +47,7 @@
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_TOP_STATE 1
#define YY_NO_INPUT 1
//--------------------------------------------------------------------------------
......
......@@ -67,8 +67,7 @@
#include "arguments.h"
#define YY_NEVER_INTERACTIVE 1
class Arguments;
#define YY_NO_INPUT 1
enum ScanVar { V_IGNORE, V_VARIABLE, V_PARAMETER};
enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT };
......@@ -205,7 +204,6 @@ static void scanner_abort();
static void startScope(Entry *scope);
static bool endScope(Entry *scope, bool isGlobalRoot=FALSE);
static QCString getFullName(Entry *e);
//static bool isTypeName(QCString name);
static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root);
static int getAmpersandAtTheStart(const char *buf, int length);
......@@ -1856,6 +1854,7 @@ static bool endScope(Entry *scope, bool isGlobalRoot)
return TRUE;
}
#if 0
//! Return full name of the entry. Sometimes we must combine several names recursively.
static QCString getFullName(Entry *e)
{
......@@ -1866,6 +1865,7 @@ static QCString getFullName(Entry *e)
return getFullName(e->parent())+"::"+name;
}
#endif
static int yyread(char *buf,int max_size)
{
......@@ -2104,7 +2104,9 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief)
}
//----------------------------------------------------------------------------
#if 0
static int level=0;
static void debugCompounds(Entry *rt) // print Entry structure (for debugging)
{
level++;
......@@ -2117,6 +2119,7 @@ static void debugCompounds(Entry *rt) // print Entry structure (for debugging)
}
level--;
}
#endif
static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
......
......@@ -885,7 +885,8 @@ static void generateBriefDoc(FTextStream &t,Definition *def)
{
DocNode *root = validatingParseDoc(def->briefFile(),def->briefLine(),
def,0,brief,FALSE,FALSE,0,TRUE,TRUE);
HtmlGenerator htmlGen;
QCString relPath = relativePathToRoot(def->getOutputFileBase());
HtmlCodeGenerator htmlGen(t,relPath);
HtmlDocVisitor *visitor = new HtmlDocVisitor(t,htmlGen,0);
root->accept(visitor);
delete visitor;
......@@ -1257,6 +1258,8 @@ static void generateJSNavTree(const QList<FTVNode> &nodeList)
tsidx << "};" << endl;
t << endl << "];" << endl;
}
t << endl << "var SYNCONMSG = '" << theTranslator->trPanelSynchronisationTooltip(FALSE) << "';";
t << endl << "var SYNCOFFMSG = '" << theTranslator->trPanelSynchronisationTooltip(TRUE) << "';";
t << endl << navtree_script;
}
}
......
......@@ -135,6 +135,7 @@ void GroupDef::addFile(const FileDef *def)
{
static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
if (def->isHidden()) return;
updateLanguage(def);
if (sortBriefDocs)
fileList->inSort(def);
else
......@@ -145,6 +146,7 @@ bool GroupDef::addClass(const ClassDef *cd)
{
static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
if (cd->isHidden()) return FALSE;
updateLanguage(cd);
if (classSDict->find(cd->qualifiedName())==0)
{
QCString qn = cd->qualifiedName();
......@@ -192,6 +194,7 @@ bool GroupDef::addNamespace(const NamespaceDef *def)
{
static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
if (def->isHidden()) return FALSE;
updateLanguage(def);
if (namespaceSDict->find(def->name())==0)
{
if (sortBriefDocs)
......@@ -252,6 +255,7 @@ void GroupDef::addMembersToMemberGroup()
bool GroupDef::insertMember(MemberDef *md,bool docOnly)
{
if (md->isHidden()) return FALSE;
updateLanguage(md);
//printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data());
MemberNameInfo *mni=0;
if ((mni=(*allMemberNameInfoSDict)[md->name()]))
......@@ -651,6 +655,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
FileDef *fd=fileList->first();
while (fd)
{
ol.startMemberDeclaration();
ol.startMemberItem(fd->getOutputFileBase(),0);
ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
ol.insertMemberAlign();
......@@ -666,6 +671,7 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
fd=fileList->next();
}
ol.endMemberList();
......@@ -706,6 +712,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
{
if (gd->isVisible())
{
ol.startMemberDeclaration();
ol.startMemberItem(gd->getOutputFileBase(),0);
//ol.docify(theTranslator->trGroup(FALSE,TRUE));
//ol.docify(" ");
......@@ -722,6 +729,7 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
ol.parseDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
}
gd=groupList->next();
}
......@@ -741,6 +749,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
DirDef *dd=dirList->first();
while (dd)
{
ol.startMemberDeclaration();
ol.startMemberItem(dd->getOutputFileBase(),0);
ol.parseText(theTranslator->trDir(FALSE,TRUE));
ol.insertMemberAlign();
......@@ -756,6 +765,7 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
dd=dirList->next();
}
......@@ -871,6 +881,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
LayoutDocEntry *lde;
bool first=TRUE;
SrcLangExt lang = getLanguage();
for (eli.toFirst();(lde=eli.current());++eli)
{
if ((lde->kind()==LayoutDocEntry::GroupClasses && classSDict->declVisible()) ||
......@@ -886,7 +897,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
lde->kind()==LayoutDocEntry::GroupFiles ? "files" :
lde->kind()==LayoutDocEntry::GroupNestedGroups ? "groups" :
"dirs";
ol.writeSummaryLink(0,label,ls->title,first);
ol.writeSummaryLink(0,label,ls->title(lang),first);
first=FALSE;
}
else if (lde->kind()==LayoutDocEntry::MemberDecl)
......@@ -895,7 +906,7 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
MemberList * ml = getMemberList(lmd->type);
if (ml && ml->declVisible())
{
ol.writeSummaryLink(0,ml->listTypeAsString(),lmd->title,first);
ol.writeSummaryLink(0,ml->listTypeAsString(),lmd->title(lang),first);
first=FALSE;
}
}
......@@ -950,6 +961,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
//---------------------------------------- start flexible part -------------------------------
SrcLangExt lang=getLanguage();
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Group));
LayoutDocEntry *lde;
......@@ -966,7 +978,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::GroupClasses:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeClasses(ol,ls->title);
writeClasses(ol,ls->title(lang));
}
break;
case LayoutDocEntry::GroupInlineClasses:
......@@ -977,7 +989,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::GroupNamespaces:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeNamespaces(ol,ls->title);
writeNamespaces(ol,ls->title(lang));
}
break;
case LayoutDocEntry::MemberGroups:
......@@ -986,7 +998,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::MemberDecl:
{
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
writeMemberDeclarations(ol,lmd->type,lmd->title);
writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
}
break;
case LayoutDocEntry::MemberDeclEnd:
......@@ -995,7 +1007,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::DetailedDesc:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeDetailedDescription(ol,ls->title);
writeDetailedDescription(ol,ls->title(lang));
}
break;
case LayoutDocEntry::MemberDefStart:
......@@ -1004,7 +1016,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::MemberDef:
{
LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
writeMemberDocumentation(ol,lmd->type,lmd->title);
writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
}
break;
case LayoutDocEntry::MemberDefEnd:
......@@ -1013,7 +1025,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::GroupNestedGroups:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeNestedGroups(ol,ls->title);
writeNestedGroups(ol,ls->title(lang));
}
break;
case LayoutDocEntry::GroupPageDocs:
......@@ -1022,13 +1034,13 @@ void GroupDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::GroupDirs:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeDirs(ol,ls->title);
writeDirs(ol,ls->title(lang));
}
break;
case LayoutDocEntry::GroupFiles:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeFiles(ol,ls->title);
writeFiles(ol,ls->title(lang));
}
break;
case LayoutDocEntry::GroupGraph:
......@@ -1482,3 +1494,13 @@ bool GroupDef::isLinkable() const
return hasUserDocumentation();
}
// let the "programming language" for a group depend on what is inserted into it.
// First item that has an associated languages determines the language for the whole group.
void GroupDef::updateLanguage(const Definition *d)
{
if (getLanguage()==SrcLangExt_Unknown && d->getLanguage()!=SrcLangExt_Unknown)
{
setLanguage(d->getLanguage());
}
}
......@@ -132,6 +132,7 @@ class GroupDef : public Definition
void endMemberDocumentation(OutputList &ol);
void writeAuthorSection(OutputList &ol);
void writeSummaryLinks(OutputList &ol);
void updateLanguage(const Definition *);
QCString title; // title of the group
bool titleSet; // true if title is not the same as the name
......
This diff is collapsed.
......@@ -20,6 +20,7 @@
#include "qtbc.h"
#include "outputgen.h"
#include "ftextstream.h"
//#define PREFRAG_START "<div class=\"fragment\"><pre class=\"fragment\">"
//#define PREFRAG_END "</pre></div>"
......@@ -27,7 +28,35 @@
#define PREFRAG_END "</div><!-- fragment -->"
class QFile;
class FTextStream;
class HtmlCodeGenerator : public CodeOutputInterface
{
public:
HtmlCodeGenerator(FTextStream &t,const QCString &relPath);
HtmlCodeGenerator();
void setTextStream(FTextStream &t);
void setRelativePath(const QCString &path);
void codify(const char *text);
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip);
void writeLineNumber(const char *,const char *,const char *,int);
void startCodeLine(bool);
void endCodeLine();
void startCodeAnchor(const char *label);
void endCodeAnchor();
void startFontClass(const char *s);
void endFontClass();
void writeCodeAnchor(const char *anchor);
void linkableSymbol(int,const char *,Definition *,Definition *);
private:
void docify(const char *str);
bool m_streamSet;
FTextStream m_t;
int m_col;
QCString m_relPath;
};
/** Generator for HTML output */
class HtmlGenerator : public OutputGenerator
......@@ -55,6 +84,34 @@ class HtmlGenerator : public OutputGenerator
bool isEnabled(OutputType o) { return (o==Html && active); }
OutputGenerator *get(OutputType o) { return (o==Html) ? this : 0; }
// ---- CodeOutputInterface
void codify(const char *text)
{ m_codeGen.codify(text); }
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip)
{ m_codeGen.writeCodeLink(ref,file,anchor,name,tooltip); }
void writeLineNumber(const char *ref,const char *file,const char *anchor,int lineNumber)
{ m_codeGen.writeLineNumber(ref,file,anchor,lineNumber); }
void startCodeLine(bool hasLineNumbers)
{ m_codeGen.startCodeLine(hasLineNumbers); }
void endCodeLine()
{ m_codeGen.endCodeLine(); }
void startCodeAnchor(const char *label)
{ m_codeGen.startCodeAnchor(label); }
void endCodeAnchor()
{ m_codeGen.endCodeAnchor(); }
void startFontClass(const char *s)
{ m_codeGen.startFontClass(s); }
void endFontClass()
{ m_codeGen.endFontClass(); }
void writeCodeAnchor(const char *anchor)
{ m_codeGen.writeCodeAnchor(anchor); }
void linkableSymbol(int line,const char *symName,
Definition *symDef,Definition *context)
{ m_codeGen.linkableSymbol(line,symName,symDef,context); }
// ---------------------------
void printDoc(DocNode *,const char *);
void startFile(const char *name,const char *manName,const char *title);
......@@ -90,12 +147,10 @@ class HtmlGenerator : public OutputGenerator
void startIndexItem(const char *ref,const char *file);
void endIndexItem(const char *ref,const char *file);
void docify(const char *text);
void codify(const char *text);
void writeObjectLink(const char *ref,const char *file,
const char *anchor,const char *name);
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *name,
const char *tooltip);
void startTextLink(const char *file,const char *anchor);
void endTextLink();
void startHtmlLink(const char *url);
......@@ -126,7 +181,7 @@ class HtmlGenerator : public OutputGenerator
void startMemberItem(const char *anchor,int,const char *inheritId);
void endMemberItem();
void startMemberTemplateParams();
void endMemberTemplateParams(const char *anchor);
void endMemberTemplateParams(const char *anchor,const char *inheritId);
void startMemberGroupHeader(bool);
void endMemberGroupHeader();
......@@ -138,6 +193,8 @@ class HtmlGenerator : public OutputGenerator
void insertMemberAlign(bool);
void startMemberDescription(const char *anchor,const char *inheritId);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *anchor,const char *inheritId);
void writeInheritedSectionTitle(const char *id, const char *ref,
const char *file, const char *anchor,
const char *title,const char *name);
......@@ -147,9 +204,6 @@ class HtmlGenerator : public OutputGenerator
{ t << "<a name=\"" << name <<"\" id=\"" << name << "\"></a>"; }
void startCodeFragment() { t << PREFRAG_START; }
void endCodeFragment() { t << PREFRAG_END; }
void writeLineNumber(const char *,const char *,const char *,int);
void startCodeLine(bool);
void endCodeLine();
void startEmphasis() { t << "<em>"; }
void endEmphasis() { t << "</em>"; }
void startBold() { t << "<b>"; }
......@@ -168,8 +222,6 @@ class HtmlGenerator : public OutputGenerator
const char *anchor,const char *name,
const char *args);
void endDoxyAnchor(const char *fName,const char *anchor);
void startCodeAnchor(const char *label);
void endCodeAnchor();
void writeLatexSpacing() {}
void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name);
......@@ -270,16 +322,10 @@ class HtmlGenerator : public OutputGenerator
void startInlineMemberDoc();
void endInlineMemberDoc();
void startFontClass(const char *s) { t << "<span class=\"" << s << "\">"; }
void endFontClass() { t << "</span>"; }
void startLabels();
void writeLabel(const char *l,bool isLast);
void endLabels();
void writeCodeAnchor(const char *anchor)
{ t << "<a name=\"" << anchor << "\"></a>"; }
void linkableSymbol(int,const char *,Definition *,Definition *) {}
//static void generateSectionImages();
......@@ -293,9 +339,9 @@ class HtmlGenerator : public OutputGenerator
HtmlGenerator &operator=(const HtmlGenerator &g);
HtmlGenerator(const HtmlGenerator &g);
int col;
int m_sectionCount;
bool m_emptySection;
HtmlCodeGenerator m_codeGen;
};
#endif
......@@ -610,7 +610,7 @@ QCString HtmlHelp::recode(const QCString &s)
QCString output(oSize);
size_t iLeft = iSize;
size_t oLeft = oSize;
const char *iPtr = s.data();
char *iPtr = s.data();
char *oPtr = output.data();
if (!portable_iconv(m_fromUtf8,&iPtr,&iLeft,&oPtr,&oLeft))
{
......
......@@ -384,11 +384,12 @@ void addMembersToIndex(T *def,LayoutDocManager::LayoutPart part,
ClassSDict::Iterator it(*classes);
for (;(cd=it.current());++it)
{
if (cd->isLinkable())
if (cd->isLinkable() && (cd->partOfGroups()==0 || def->definitionType()==Definition::TypeGroup))
{
bool isNestedClass = def->definitionType()==Definition::TypeClass;
addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(FALSE),cd->anchor(),
addToIndex && isNestedClass,preventSeparateIndex);
addToIndex && isNestedClass,
preventSeparateIndex || cd->isEmbeddedInOuterScope());
}
}
}
......@@ -1374,7 +1375,7 @@ void writeClassTree(ClassSDict *clDict,FTVHelp *ftv,bool addToIndex,bool globalO
ftv->addContentsItem(count>0,cd->displayName(FALSE),cd->getReference(),
cd->getOutputFileBase(),cd->anchor(),FALSE,TRUE,cd);
if (addToIndex &&
!cd->isEmbeddedInOuterScope() &&
cd->partOfGroups()==0 &&
(cd->getOuterScope()==0 ||
cd->getOuterScope()->definitionType()!=Definition::TypeClass
)
......@@ -1402,7 +1403,7 @@ static bool containsVisibleChild(NamespaceDef *nd,bool includeClasses)
NamespaceDef *cnd;
for (cnli.toFirst();(cnd=cnli.current());++cnli)
{
if (cnd->isLinkable() && cnd->localName().find('@')!=-1)
if (cnd->isLinkable() && cnd->localName().find('@')==-1)
{
return TRUE;
}
......@@ -3158,6 +3159,7 @@ bool writeMemberNavIndex(FTextStream &t,
//----------------------------------------------------------------------------
#if 0
static bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bool &first)
{
static struct NavEntryCountMap
......@@ -3239,6 +3241,7 @@ static bool writeFullNavIndex(FTextStream &t, LayoutNavEntry *root,int indent,bo
}
return found;
}
#endif
//----------------------------------------------------------------------------
......@@ -3563,21 +3566,24 @@ static void writeGroupTreeNode(OutputList &ol, GroupDef *gd, int level, FTVHelp*
ClassDef *cd;
for (;(cd=it.current());++it)
{
bool nestedClassInSameGroup =
cd->getOuterScope() && cd->getOuterScope()->definitionType()==Definition::TypeClass &&
cd->getOuterScope()->partOfGroups()!=0 && cd->getOuterScope()->partOfGroups()->contains(gd);
if (cd->isVisible() && !nestedClassInSameGroup)
//bool nestedClassInSameGroup =
// cd->getOuterScope() && cd->getOuterScope()->definitionType()==Definition::TypeClass &&
// cd->getOuterScope()->partOfGroups()!=0 && cd->getOuterScope()->partOfGroups()->contains(gd);
//printf("===== GroupClasses: %s visible=%d nestedClassInSameGroup=%d\n",cd->name().data(),cd->isVisible(),nestedClassInSameGroup);
if (cd->isVisible() /*&& !nestedClassInSameGroup*/)
{
if (cd->isLinkable() && cd->isEmbeddedInOuterScope())
{
//if (cd->isEmbeddedInOuterScope())
//{
//printf("add class & members %d\n",addToIndex);
addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(FALSE),cd->anchor(),addToIndex,TRUE);
}
else // only index the class, not its members
{
Doxygen::indexList.addContentsItem(FALSE,
cd->localName(),cd->getReference(),
cd->getOutputFileBase(),cd->anchor(),FALSE,FALSE);
}
//}
//else // only index the class, not its members
//{
// printf("%s: add class only\n",cd->name().data());
// Doxygen::indexList.addContentsItem(FALSE,
// cd->displayName(TRUE),cd->getReference(),
// cd->getOutputFileBase(),cd->anchor(),addToIndex,TRUE);
//}
}
}
}
......
/*
* Copyright (C) 2008 by Sebastian Pipping.
* Copyright (C) 2008 Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
* Sebastian Pipping <sebastian@pipping.org>
*/
#include "indexlog.h"
#include "message.h"
#include "config.h"
#include <qstring.h>
#include <qfile.h>
IndexLog::IndexLog()
{
}
IndexLog::~IndexLog()
{
}
void IndexLog::initialize()
{
char const * const attributes[] =
{ "xmlns",
"http://doxygen.org/xmlns/indexlog/1/0/",
NULL
};
m_out.open("log", attributes);
openMethodCall("initialize");
closeMethodCall();
}
void IndexLog::finalize()
{
openMethodCall("finalize");
closeMethodCall();
m_out.close("log");
QCString fileName = Config_getString("HTML_OUTPUT")+"/index.log.xml";
QFile file(fileName);
if (!file.open(IO_WriteOnly))
{
err("Could not open file %s for writing\n", fileName.data());
exit(1);
}
m_out.dumpTo(file);
file.flush();
file.close();
}
void IndexLog::incContentsDepth()
{
openMethodCall("incContentsDepth");
closeMethodCall();
}
void IndexLog::decContentsDepth()
{
openMethodCall("decContentsDepth");
closeMethodCall();
}
void IndexLog::addContentsItem(bool isDir, char const * name,
char const * ref, char const * file,
char const * anchor)
{
openMethodCall("addContentsItem");
addBoolParameter("isDir", isDir);
addStringParameter("name", name);
addStringParameter("ref", ref);
addStringParameter("file", file);
addStringParameter("anchor", anchor);
closeMethodCall();
}
void IndexLog::addIndexItem(char const * level1, char const * level2,
char const * contRef, char const * memRef,
char const * anchor, const MemberDef * md)
{
openMethodCall("addIndexItem");
addStringParameter("level1", level1);
addStringParameter("level2", level2);
addStringParameter("contRef", contRef);
addStringParameter("memRef", memRef);
addStringParameter("anchor", anchor);
addMemberDefParameter("md", md);
closeMethodCall();
}
void IndexLog::addIndexFile(char const * name)
{
openMethodCall("addIndexFile");
addStringParameter("name", name);
closeMethodCall();
}
void IndexLog::openMethodCall(char const * methodName)
{
m_out.setCompressionEnabled(true);
m_out.open("call");
m_out.openCloseContent("method", methodName);
}
void IndexLog::addPrimitiveParameter(char const * parameterName,
char const * value)
{
m_out.open("param");
m_out.openCloseContent("name", parameterName);
if (value != NULL)
{
m_out.openCloseContent("value", value);
}
m_out.close("param");
}
void IndexLog::addBoolParameter(char const * parameterName, bool value)
{
addPrimitiveParameter(parameterName, value ? "true" : "false");
}
void IndexLog::addStringParameter(char const * parameterName,
char const * value)
{
addPrimitiveParameter(parameterName, value);
}
void IndexLog::addMemberDefParameter(char const * parameterName,
const MemberDef * /*value*/)
{
m_out.open("param");
m_out.openCloseContent("name", parameterName);
m_out.close("param");
}
void IndexLog::closeMethodCall()
{
m_out.setCompressionEnabled(false);
m_out.close("call");
}
/*
* Copyright (C) 2008 by Sebastian Pipping.
* Copyright (C) 2008 Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
* Sebastian Pipping <sebastian@pipping.org>
*/
#ifndef INDEXLOG_H
#define INDEXLOG_H
#include "index.h"
#include "qhpxmlwriter.h"
class IndexLog : public IndexIntf
{
public:
IndexLog();
~IndexLog();
// BEGIN IndexIntf
void initialize();
void finalize();
void incContentsDepth();
void decContentsDepth();
void addContentsItem(bool isDir, const char *name, const char *ref,
const char *file, const char *anchor);
void addIndexItem(const char *level1, const char *level2,
const char *contRef, const char *memRef,
const char *anchor, const MemberDef * md);
void addIndexFile(const char *name);
// END IndexIntf
private:
void openMethodCall(char const * methodName);
void addPrimitiveParameter(char const * parameterName,
char const * value);
void addBoolParameter(char const * parameterName, bool value);
void addStringParameter(char const * parameterName,
char const * value);
void addMemberDefParameter(char const * parameterName,
const MemberDef * value);
void closeMethodCall();
QhpXmlWriter m_out;
};
#endif // INDEXLOG_H
......@@ -2097,7 +2097,7 @@ void LatexGenerator::startMemberTemplateParams()
}
}
void LatexGenerator::endMemberTemplateParams(const char *)
void LatexGenerator::endMemberTemplateParams(const char *,const char *)
{
if (templateMemberItem)
{
......
......@@ -117,7 +117,7 @@ class LatexGenerator : public OutputGenerator
void startMemberItem(const char *,int,const char *);
void endMemberItem();
void startMemberTemplateParams();
void endMemberTemplateParams(const char *);
void endMemberTemplateParams(const char *,const char *);
void startMemberGroupHeader(bool);
void endMemberGroupHeader();
......@@ -165,6 +165,8 @@ class LatexGenerator : public OutputGenerator
void endSmall() { t << "\\normalsize "; }
void startMemberDescription(const char *,const char *);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
void writeInheritedSectionTitle(const char *,const char *,const char *,
const char *,const char *,const char *) {}
void startDescList(SectionTypes) { t << "\\begin{Desc}\n\\item["; }
......
This diff is collapsed.
......@@ -78,8 +78,10 @@ struct LayoutDocEntrySimple : LayoutDocEntry
struct LayoutDocEntrySection: public LayoutDocEntrySimple
{
LayoutDocEntrySection(Kind k,const QCString &tl) :
LayoutDocEntrySimple(k), title(tl) {}
QCString title;
LayoutDocEntrySimple(k), m_title(tl) {}
QCString title(SrcLangExt lang) const;
private:
QCString m_title;
};
/** @brief Represents of a member declaration list with configurable title and subtitle. */
......@@ -87,23 +89,28 @@ struct LayoutDocEntryMemberDecl: public LayoutDocEntry
{
LayoutDocEntryMemberDecl(MemberList::ListType tp,
const QCString &tl,const QCString &ss)
: type(tp), title(tl),subscript(ss) {}
: type(tp), m_title(tl), m_subscript(ss) {}
Kind kind() const { return MemberDecl; }
MemberList::ListType type;
QCString title;
QCString subscript;
QCString title(SrcLangExt lang) const;
QCString subtitle(SrcLangExt lang) const;
private:
QCString m_title;
QCString m_subscript;
};
/** @brief Represents of a member definition list with configurable title. */
struct LayoutDocEntryMemberDef: public LayoutDocEntry
{
LayoutDocEntryMemberDef(MemberList::ListType tp,const QCString &tl)
: type(tp), title(tl) {}
: type(tp), m_title(tl) {}
Kind kind() const { return MemberDef; }
MemberList::ListType type;
QCString title;
QCString title(SrcLangExt lang) const;
private:
QCString m_title;
};
/** @brief Base class for the layout of a navigation item at the top of the HTML pages. */
......
......@@ -61,7 +61,6 @@ HEADERS = arguments.h \
htmldocvisitor.h \
htmlgen.h \
htmlhelp.h \
indexlog.h \
image.h \
index.h \
index_xsd.h \
......@@ -211,7 +210,6 @@ SOURCES = arguments.cpp \
htmldocvisitor.cpp \
htmlgen.cpp \
htmlhelp.cpp \
indexlog.cpp \
image.cpp \
index.cpp \
language.cpp \
......
......@@ -115,7 +115,7 @@ class ManGenerator : public OutputGenerator
void startMemberItem(const char *,int,const char *);
void endMemberItem();
void startMemberTemplateParams() {}
void endMemberTemplateParams(const char *) {}
void endMemberTemplateParams(const char *,const char *) {}
void startMemberGroupHeader(bool);
void endMemberGroupHeader();
......@@ -161,6 +161,8 @@ class ManGenerator : public OutputGenerator
void endSmall() {}
void startMemberDescription(const char *,const char *) { t << "\n.RI \"\\fI"; firstCol=FALSE; }
void endMemberDescription() { t << "\\fP\""; firstCol=FALSE; }
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
void writeInheritedSectionTitle(const char *,const char *,const char *,
const char *,const char *,const char *) {}
void startDescList(SectionTypes);
......
......@@ -2007,14 +2007,14 @@ static QCString processBlocks(const QCString &s,int indent)
//printf("Found FencedCodeBlock lang='%s' start=%d end=%d code={%s}\n",
// lang.data(),blockStart,blockEnd,QCString(data+pi+blockStart).left(blockEnd-blockStart).data());
if (!lang.isEmpty() && lang.at(0)=='.') lang=lang.mid(1);
if (lang.isEmpty()) out.addStr("@verbatim"); else out.addStr("@code");
out.addStr("@code");
if (!lang.isEmpty())
{
out.addStr("{"+lang+"}");
}
out.addStr(data+pi+blockStart,blockEnd-blockStart);
out.addStr("\n");
if (lang.isEmpty()) out.addStr("@endverbatim"); else out.addStr("@endcode");
out.addStr("@endcode");
i=pi+blockOffset;
pi=-1;
end=i+1;
......@@ -2144,6 +2144,22 @@ static QCString detab(const QCString &s,int &refIndent)
QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input)
{
static bool init=FALSE;
if (!init)
{
// setup callback table for special characters
g_actions[(unsigned int)'_']=processEmphasis;
g_actions[(unsigned int)'*']=processEmphasis;
g_actions[(unsigned int)'`']=processCodeSpan;
g_actions[(unsigned int)'\\']=processSpecialCommand;
g_actions[(unsigned int)'@']=processSpecialCommand;
g_actions[(unsigned int)'[']=processLink;
g_actions[(unsigned int)'!']=processLink;
g_actions[(unsigned int)'<']=processHtmlTag;
g_actions[(unsigned int)'-']=processNmdash;
init=TRUE;
}
g_linkRefs.setAutoDelete(TRUE);
g_linkRefs.clear();
g_current = e;
......@@ -2160,18 +2176,8 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input
// then process block items (headers, rules, and code blocks, references)
s = processBlocks(s,refIndent);
//printf("======== Blocks =========\n---- output -----\n%s\n---------\n",s.data());
int size=s.length();
g_actions['_']=processEmphasis;
g_actions['*']=processEmphasis;
g_actions['`']=processCodeSpan;
g_actions['\\']=processSpecialCommand;
g_actions['@']=processSpecialCommand;
g_actions['[']=processLink;
g_actions['!']=processLink;
g_actions['<']=processHtmlTag;
g_actions['-']=processNmdash;
// finally process the inline markup (links, emphasis and code spans)
processInline(out,s,size);
processInline(out,s,s.length());
out.addChar(0);
Debug::print(Debug::Markdown,0,"======== Markdown =========\n---- input ------- \n%s\n---- output -----\n%s\n---------\n",input.data(),out.get());
return out.get();
......
......@@ -55,32 +55,7 @@ void marshalQGString(StorageIntf *s,const QGString &str)
void marshalArgumentList(StorageIntf *s,ArgumentList *argList)
{
if (argList==0)
{
marshalUInt(s,NULL_LIST); // null pointer representation
}
else
{
marshalUInt(s,argList->count());
if (argList->count()>0)
{
ArgumentListIterator ali(*argList);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
marshalQCString(s,a->attrib);
marshalQCString(s,a->type);
marshalQCString(s,a->canType);
marshalQCString(s,a->name);
marshalQCString(s,a->array);
marshalQCString(s,a->defval);
marshalQCString(s,a->docs);
}
}
marshalBool(s,argList->constSpecifier);
marshalBool(s,argList->volatileSpecifier);
marshalBool(s,argList->pureSpecifier);
}
ArgumentList::marshal(s,argList);
}
void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists)
......@@ -488,28 +463,7 @@ QGString unmarshalQGString(StorageIntf *s)
ArgumentList *unmarshalArgumentList(StorageIntf *s)
{
uint i;
uint count = unmarshalUInt(s);
if (count==NULL_LIST) return 0; // null list
ArgumentList *result = new ArgumentList;
assert(count<1000000);
//printf("unmarshalArgumentList: %d\n",count);
for (i=0;i<count;i++)
{
Argument *a = new Argument;
a->attrib = unmarshalQCString(s);
a->type = unmarshalQCString(s);
a->canType = unmarshalQCString(s);
a->name = unmarshalQCString(s);
a->array = unmarshalQCString(s);
a->defval = unmarshalQCString(s);
a->docs = unmarshalQCString(s);
result->append(a);
}
result->constSpecifier = unmarshalBool(s);
result->volatileSpecifier = unmarshalBool(s);
result->pureSpecifier = unmarshalBool(s);
return result;
return ArgumentList::unmarshal(s);
}
QList<ArgumentList> *unmarshalArgumentLists(StorageIntf *s)
......
This diff is collapsed.
......@@ -68,6 +68,7 @@ class MemberDef : public Definition
~MemberDef();
DefType definitionType() const { return TypeMember; }
// move this member into a different scope
MemberDef *deepCopy() const;
void moveTo(Definition *);
//-----------------------------------------------------------------------------------
......@@ -159,6 +160,10 @@ class MemberDef : public Definition
bool isSealed() const;
bool isImplementation() const;
bool isExternal() const;
bool isAlias() const;
bool isDefault() const;
bool isDelete() const;
bool isNoExcept() const;
bool isTemplateSpecialization() const;
bool hasDocumentedParams() const;
bool hasDocumentedReturnType() const;
......@@ -196,6 +201,8 @@ class MemberDef : public Definition
bool isDocsForDefinition() const;
MemberDef *getEnumScope() const;
LockingPtr< MemberList > enumFieldList() const;
void setEnumBaseType(const QCString &type);
QCString enumBaseType() const;
bool hasExamples();
LockingPtr<ExampleSDict> getExamples() const;
......@@ -235,6 +242,7 @@ class MemberDef : public Definition
MemberDef *getGroupAlias() const;
ClassDef *category() const;
MemberDef *categoryRelation() const;
QCString displayName(bool=TRUE) const;
......@@ -334,6 +342,7 @@ class MemberDef : public Definition
void copyArgumentNames(MemberDef *bmd);
void setCategory(ClassDef *);
void setCategoryRelation(MemberDef *);
void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
void setBriefDescription(const char *b,const char *briefFile,int briefLine);
......@@ -387,6 +396,7 @@ class MemberDef : public Definition
void _writeEnumValues(OutputList &ol,Definition *container,
const QCString &cfname,const QCString &ciname,
const QCString &cname);
void _writeCategoryRelation(OutputList &ol);
static int s_indentLevel;
// disable copying of member defs
......@@ -406,4 +416,6 @@ class MemberDef : public Definition
uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
};
void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef);
#endif
......@@ -365,6 +365,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
ol.startMemberList();
first=FALSE;
}
ol.startMemberDeclaration();
ol.startMemberItem(md->anchor(),0,inheritId);
ol.writeString("enum ");
ol.insertMemberAlign();
......@@ -391,6 +392,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
}
ol.endMemberDescription();
}
ol.endMemberDeclaration(md->anchor(),inheritId);
}
md->warnIfUndocumented();
break;
......
......@@ -389,6 +389,7 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
LayoutDocManager::instance().docEntries(LayoutDocManager::Namespace));
LayoutDocEntry *lde;
bool first=TRUE;
SrcLangExt lang = getLanguage();
for (eli.toFirst();(lde=eli.current());++eli)
{
if ((lde->kind()==LayoutDocEntry::NamespaceClasses && classSDict && classSDict->declVisible()) ||
......@@ -397,7 +398,7 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
QCString label = lde->kind()==LayoutDocEntry::NamespaceClasses ? "nested-classes" : "namespaces";
ol.writeSummaryLink(0,label,ls->title,first);
ol.writeSummaryLink(0,label,ls->title(lang),first);
first=FALSE;
}
else if (lde->kind()== LayoutDocEntry::MemberDecl)
......@@ -406,7 +407,7 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
MemberList * ml = getMemberList(lmd->type);
if (ml && ml->declVisible())
{
ol.writeSummaryLink(0,ml->listTypeAsString(),lmd->title,first);
ol.writeSummaryLink(0,ml->listTypeAsString(),lmd->title(lang),first);
first=FALSE;
}
}
......@@ -489,13 +490,13 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::NamespaceClasses:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeClassDeclarations(ol,ls->title);
writeClassDeclarations(ol,ls->title(lang));
}
break;
case LayoutDocEntry::NamespaceNestedNamespaces:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeNamespaceDeclarations(ol,ls->title);
writeNamespaceDeclarations(ol,ls->title(lang));
}
break;
case LayoutDocEntry::MemberGroups:
......@@ -504,7 +505,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::MemberDecl:
{
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
writeMemberDeclarations(ol,lmd->type,lmd->title);
writeMemberDeclarations(ol,lmd->type,lmd->title(lang));
}
break;
case LayoutDocEntry::MemberDeclEnd:
......@@ -513,7 +514,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::DetailedDesc:
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeDetailedDescription(ol,ls->title);
writeDetailedDescription(ol,ls->title(lang));
}
break;
case LayoutDocEntry::MemberDefStart:
......@@ -525,7 +526,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
case LayoutDocEntry::MemberDef:
{
LayoutDocEntryMemberDef *lmd = (LayoutDocEntryMemberDef*)lde;
writeMemberDocumentation(ol,lmd->type,lmd->title);
writeMemberDocumentation(ol,lmd->type,lmd->title(lang));
}
break;
case LayoutDocEntry::MemberDefEnd:
......@@ -852,6 +853,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca
if (nd->isLinkable())
{
SrcLangExt lang = nd->getLanguage();
ol.startMemberDeclaration();
ol.startMemberItem(nd->getOutputFileBase(),0);
if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp)
{
......@@ -887,6 +889,7 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca
ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE,0,TRUE);
ol.endMemberDescription();
}
ol.endMemberDeclaration(0,0);
}
}
ol.endMemberList();
......
......@@ -22,9 +22,15 @@ function stripPath2(uri)
function localStorageSupported()
{
return 'localStorage' in window && window['localStorage'] !== null;
try {
return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
}
catch(e) {
return false;
}
}
function storeLink(link)
{
if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
......@@ -411,16 +417,26 @@ function navTo(o,root,hash,relpath)
}
}
function showSyncOff(n,relpath)
{
n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
}
function showSyncOn(n,relpath)
{
n.html('<img src="'+relpath+'sync_on.png"/ title="'+SYNCONMSG+'">');
}
function toggleSyncButton(relpath)
{
var navSync = $('#nav-sync');
if (navSync.hasClass('sync')) {
navSync.removeClass('sync');
navSync.html('<img src="'+relpath+'sync_off.png"/>');
showSyncOff(navSync,relpath);
storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash'));
} else {
navSync.addClass('sync');
navSync.html('<img src="'+relpath+'sync_on.png"/>');
showSyncOn(navSync,relpath);
deleteLink();
}
}
......@@ -448,10 +464,10 @@ function initNavTree(toroot,relpath)
if (localStorageSupported()) {
var navSync = $('#nav-sync');
if (cachedLink()) {
navSync.html('<img src="'+relpath+'sync_off.png"/>');
showSyncOff(navSync,relpath);
navSync.removeClass('sync');
} else {
navSync.html('<img src="'+relpath+'sync_on.png"/>');
showSyncOn(navSync,relpath);
}
navSync.click(function(){ toggleSyncButton(relpath); });
}
......
......@@ -22,9 +22,15 @@
"\n"
"function localStorageSupported()\n"
"{\n"
" return 'localStorage' in window && window['localStorage'] !== null;\n"
" try {\n"
" return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;\n"
" }\n"
" catch(e) {\n"
" return false;\n"
" }\n"
"}\n"
"\n"
"\n"
"function storeLink(link)\n"
"{\n"
" if (!$(\"#nav-sync\").hasClass('sync') && localStorageSupported()) {\n"
......@@ -411,16 +417,26 @@
" }\n"
"}\n"
"\n"
"function showSyncOff(n,relpath)\n"
"{\n"
" n.html('<img src=\"'+relpath+'sync_off.png\" title=\"'+SYNCOFFMSG+'\"/>');\n"
"}\n"
"\n"
"function showSyncOn(n,relpath)\n"
"{\n"
" n.html('<img src=\"'+relpath+'sync_on.png\"/ title=\"'+SYNCONMSG+'\">');\n"
"}\n"
"\n"
"function toggleSyncButton(relpath)\n"
"{\n"
" var navSync = $('#nav-sync');\n"
" if (navSync.hasClass('sync')) {\n"
" navSync.removeClass('sync');\n"
" navSync.html('<img src=\"'+relpath+'sync_off.png\"/>');\n"
" showSyncOff(navSync,relpath);\n"
" storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash'));\n"
" } else {\n"
" navSync.addClass('sync');\n"
" navSync.html('<img src=\"'+relpath+'sync_on.png\"/>');\n"
" showSyncOn(navSync,relpath);\n"
" deleteLink();\n"
" }\n"
"}\n"
......@@ -448,10 +464,10 @@
" if (localStorageSupported()) {\n"
" var navSync = $('#nav-sync');\n"
" if (cachedLink()) {\n"
" navSync.html('<img src=\"'+relpath+'sync_off.png\"/>');\n"
" showSyncOff(navSync,relpath);\n"
" navSync.removeClass('sync');\n"
" } else {\n"
" navSync.html('<img src=\"'+relpath+'sync_on.png\"/>');\n"
" showSyncOn(navSync,relpath);\n"
" }\n"
" navSync.click(function(){ toggleSyncButton(relpath); });\n"
" }\n"
......
......@@ -97,8 +97,8 @@ class BaseOutputDocInterface : public CodeOutputInterface
Examples
};
virtual void parseDoc(const char *,int, const char *,MemberDef *,
const QCString &,bool) {}
//virtual void parseDoc(const char *,int, const char *,MemberDef *,
// const QCString &,bool) {}
virtual void parseText(const QCString &) {}
/*! Start of a bullet list: e.g. \c \<ul\> in html. startItemListItem() is
......@@ -343,7 +343,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void startMemberItem(const char *,int,const char *) = 0;
virtual void endMemberItem() = 0;
virtual void startMemberTemplateParams() = 0;
virtual void endMemberTemplateParams(const char *) = 0;
virtual void endMemberTemplateParams(const char *,const char *) = 0;
virtual void startMemberGroupHeader(bool) = 0;
virtual void endMemberGroupHeader() = 0;
virtual void startMemberGroupDocs() = 0;
......@@ -364,6 +364,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void writeEndAnnoItem(const char *name) = 0;
virtual void startMemberDescription(const char *anchor,const char *inheritId) = 0;
virtual void endMemberDescription() = 0;
virtual void startMemberDeclaration() = 0;
virtual void endMemberDeclaration(const char *anchor,const char *inheritId) = 0;
virtual void writeInheritedSectionTitle(const char *id,const char *ref,
const char *file,const char *anchor,
const char *title,const char *name) = 0;
......@@ -478,7 +480,7 @@ class OutputDocInterface : public BaseOutputDocInterface
/*! Enables a specific output format (useful for OutputList only) */
virtual void enable(OutputGenerator::OutputType o) = 0;
/*! Check whether a specific output format is currenly enabled
/*! Check whether a specific output format is currently enabled
* (useful for OutputList only)
*/
virtual bool isEnabled(OutputGenerator::OutputType o) = 0;
......
......@@ -213,8 +213,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::endMemberItem); }
void startMemberTemplateParams()
{ forall(&OutputGenerator::startMemberTemplateParams); }
void endMemberTemplateParams(const char *anchor)
{ forall(&OutputGenerator::endMemberTemplateParams,anchor); }
void endMemberTemplateParams(const char *anchor,const char *inheritId)
{ forall(&OutputGenerator::endMemberTemplateParams,anchor,inheritId); }
void startMemberGroupHeader(bool b)
{ forall(&OutputGenerator::startMemberGroupHeader,b); }
void endMemberGroupHeader()
......@@ -305,6 +305,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startMemberDescription,anchor,inheritId); }
void endMemberDescription()
{ forall(&OutputGenerator::endMemberDescription); }
void startMemberDeclaration()
{ forall(&OutputGenerator::startMemberDeclaration); }
void endMemberDeclaration(const char *anchor,const char *inheritId)
{ forall(&OutputGenerator::endMemberDeclaration,anchor,inheritId); }
void writeInheritedSectionTitle(const char *id, const char *ref,
const char *file, const char *anchor,
const char *title,const char *name)
......
......@@ -49,7 +49,7 @@ int portable_system(const char *command,const char *args,bool commandHasConsole
#endif
#if !defined(_WIN32) || defined(__CYGWIN__)
commandHasConsole=commandHasConsole;
(void)commandHasConsole;
/*! taken from the system() manpage on my Linux box */
int pid,status=0;
......
......@@ -37,7 +37,7 @@ void portable_sleep(int ms);
extern "C" {
void * portable_iconv_open(const char* tocode, const char* fromcode);
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
size_t portable_iconv (void *cd, char** inbuf, size_t *inbytesleft,
char* * outbuf, size_t *outbytesleft);
int portable_iconv_close (void *cd);
}
......
......@@ -11,8 +11,8 @@ void * portable_iconv_open(const char* tocode, const char* fromcode)
return iconv_open(tocode,fromcode);
}
size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft,
char** outbuf, size_t *outbytesleft)
size_t portable_iconv (void *cd, char** inbuf, size_t *inbytesleft,
char** outbuf, size_t *outbytesleft)
{
return iconv((iconv_t)cd,inbuf,inbytesleft,outbuf,outbytesleft);
}
......
......@@ -39,6 +39,7 @@
#include "searchindex.h"
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_INPUT 1
static ClassSDict g_codeClassSDict(17);
static QCString g_curClassName;
......
......@@ -53,6 +53,7 @@
#include "arguments.h"
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_INPUT 1
/* -----------------------------------------------------------------
*
......
This diff is collapsed.
......@@ -115,7 +115,7 @@ class RTFGenerator : public OutputGenerator
void startMemberItem(const char *,int,const char *);
void endMemberItem();
void startMemberTemplateParams() {}
void endMemberTemplateParams(const char *) {}
void endMemberTemplateParams(const char *,const char *) {}
void insertMemberAlign(bool) {}
void writeRuler() { rtfwriteRuler_thin(); }
......@@ -157,6 +157,8 @@ class RTFGenerator : public OutputGenerator
void startMemberDescription(const char *,const char *);
void endMemberDescription();
void startMemberDeclaration() {}
void endMemberDeclaration(const char *,const char *) {}
void writeInheritedSectionTitle(const char *,const char *,const char *,
const char *,const char *,const char *) {}
void startDescList(SectionTypes);
......
This diff is collapsed.
......@@ -49,6 +49,7 @@
#include "arguments.h"
#define YY_NEVER_INTERACTIVE 1
#define YY_NO_INPUT 1
#define MAX_INCLUDE_DEPTH 10
......
......@@ -518,6 +518,18 @@ class Translator
virtual QCString trInheritedFrom(const char *members,const char *what) = 0;
virtual QCString trAdditionalInheritedMembers() = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.8.2
//////////////////////////////////////////////////////////////////////////
virtual QCString trPanelSynchronisationTooltip(bool enable) = 0;
virtual QCString trProvidedByCategory() = 0;
virtual QCString trExtendsClass() = 0;
virtual QCString trClassMethods() = 0;
virtual QCString trInstanceMethods() = 0;
virtual QCString trMethodDocumentation() = 0;
virtual QCString trDesignOverview() = 0;
};
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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