Commit a9b8e482 authored by dimitri's avatar dimitri

Release-1.3.6

parent 3ced6106
......@@ -203,7 +203,7 @@ PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = NO
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
HAVE_DOT = YES
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
UML_LOOK = NO
......
DOXYGEN Version 1.3.5-20040125
DOXYGEN Version 1.3.6
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (25 January 2004)
Dimitri van Heesch (12 February 2004)
DOXYGEN Version 1.3.5_20040125
DOXYGEN Version 1.3.6
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) (25 January 2004)
Dimitri van Heesch (dimitri@stack.nl) (12 February 2004)
1.3.5-20040125
1.3.6
......@@ -27,7 +27,7 @@ Version: $(VERSION)
<h2>Introduction</h2>
Doxygen is a documentation system for C++, C, Java, IDL
(Corba and Microsoft flavors) and to some extent PHP, C# and D.
(Corba and Microsoft flavors) and to some extent Objective-C, PHP, C# and D.
It can help you in three ways:
<ol>
......
......@@ -436,11 +436,11 @@ Here is what is required:
As a third alternative one could use the GNUWin32 tools that can be
found at http://gnuwin32.sourceforge.net/
Make sure the <code>BISONLIB</code> environment variable points to the
Make sure the <code>BISON_SIMPLE</code> environment variable points to the
location where the files <code>bison.simple</code> and
<code>bison.hairy</code> are located. For instance if these files are in
<code>c:\\tools\\cygwin\\share</code> then BISONLIB should
be set to <code>//c/tools/cygwin/share/</code>
is located. For instance if these file is in
<code>c:\\tools\\cygwin\\usr\\share</code> then BISON_SIMPLE should
be set to <code>c:/tools/cygwin/usr/share/bison.simple</code>
Also make sure the tools are available from a dos box, by adding
the directory they are in to the search path.
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version 1.3.5), 30 languages
Currently (version 1.3.5-20040202), 30 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
......
......@@ -174,7 +174,7 @@ void MD5Final (MD5_CTX *context, unsigned char digest[16])
MD5_memset ((POINTER)context, 0, sizeof (*context));
}
void MD5Buffer (const char *buf,unsigned int len,unsigned char sig[16])
void MD5Buffer (const unsigned char *buf,unsigned int len,unsigned char sig[16])
{
MD5_CTX md5;
MD5Init(&md5);
......
......@@ -42,7 +42,7 @@ typedef struct {
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 MD5Buffer (const unsigned char *buf,unsigned int len,unsigned char sig[16]);
void MD5SigToString(unsigned char sig[16],char *str,int len);
#ifdef __cplusplus
......
......@@ -91,6 +91,7 @@ ClassDef::ClassDef(
m_artificial = FALSE;
m_isAbstract = FALSE;
m_isStatic = FALSE;
m_isObjC = FALSE;
m_membersMerged = FALSE;
QCString ns;
extractNamespaceName(m_name,m_className,ns);
......@@ -997,6 +998,10 @@ void ClassDef::writeDocumentation(OutputList &ol)
{
ol.docify("import ");
}
else if (isObjectiveC())
{
ol.docify("#import ");
}
else
{
ol.docify("#include ");
......@@ -2381,6 +2386,8 @@ QCString ClassDef::compoundTypeString() const
case Struct: return "struct";
case Union: return "union";
case Interface: return "interface";
case Protocol: return "protocol";
case Category: return "category";
case Exception: return "exception";
}
return "unknown";
......
......@@ -63,6 +63,8 @@ class ClassDef : public Definition
Struct=Entry::STRUCT_SEC,
Union=Entry::UNION_SEC,
Interface=Entry::INTERFACE_SEC,
Protocol=Entry::PROTOCOL_SEC,
Category=Entry::CATEGORY_SEC,
Exception=Entry::EXCEPTION_SEC
};
DefType definitionType() { return TypeClass; }
......@@ -197,6 +199,9 @@ class ClassDef : public Definition
*/
bool isAbstract() const { return m_isAbstract; }
/*! Returns TRUE if this class is implemented in Objective-C */
bool isObjectiveC() const { return m_isObjC; }
/*! returns the name of the class including outer classes, but not
* including namespaces.
*/
......@@ -288,6 +293,7 @@ class ClassDef : public Definition
void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
void setClassIsArtificial() { m_artificial = TRUE; }
void setIsStatic(bool b) { m_isStatic=b; }
void setIsObjectiveC(bool b) { m_isObjC=b; }
void addListReferences();
/*! Creates a new compound definition.
......@@ -425,6 +431,9 @@ class ClassDef : public Definition
/*! Is the class part of an unnamed namespace? */
bool m_isStatic;
/*! Is the class part implemented in Objective C? */
bool m_isObjC;
/*! TRUE if classes members are merged with those of the base classes. */
bool m_membersMerged;
......
......@@ -1079,9 +1079,10 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+
KEYWORD ("asm"|"auto"|"class"|"const"|"const_cast"|"delete"|"dynamic_cast"|"enum"|"explicit"|"extern"|"false"|"friend"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"sizeof"|"static"|"static_cast"|"struct"|"template"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient")
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol")
KEYWORD ("asm"|"auto"|"class"|"const"|"const_cast"|"delete"|"dynamic_cast"|"enum"|"explicit"|"extern"|"false"|"friend"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"sizeof"|"static"|"static_cast"|"struct"|"template"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC)
FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"for"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"boolean")
TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"boolean"|"id"|"SEL")
%option noyywrap
......@@ -1109,12 +1110,12 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
%%
<*>\x0d
<Body>^([ \t]*"#"[ \t]*"include"[ \t]*)("<"|"\"") {
<Body>^([ \t]*"#"[ \t]*("include"|"import")[ \t]*)("<"|"\"") {
startFontClass("preprocessor");
g_code->codify(yytext);
BEGIN( ReadInclude );
}
<Body>("class"|"struct"|"union"|"namespace")[ \t\n]+ {
<Body>("class"|"struct"|"union"|"namespace"|"@interface"|"@implementation"|"@interface")[ \t\n]+ {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
......@@ -1234,11 +1235,30 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_currentMemberDef=0;
if (g_currentDefinition)
g_currentDefinition=g_currentDefinition->getOuterScope();
else
g_currentDefinition=0;
}
BEGIN(Body);
}
<Body>"@end" {
g_theVarContext.popScope();
int *scope = g_scopeStack.pop();
if (scope==SCOPEBLOCK || scope==CLASSBLOCK)
{
popScope();
}
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
g_inClass=FALSE;
g_insideBody=FALSE;
g_currentMemberDef=0;
if (g_currentDefinition)
g_currentDefinition=g_currentDefinition->getOuterScope();
BEGIN(Body);
}
<ClassName,ClassVar>";" {
g_code->codify(yytext);
g_searchingForBody=FALSE;
......@@ -1330,7 +1350,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_curClassBases.clear();
BEGIN( Body );
}
<Bases>"virtual"|"public"|"protected"|"private" {
<Bases>"virtual"|"public"|"protected"|"private"|"@public"|"@private"|"@protected" {
startFontClass("keyword");
g_code->codify(yytext);
endFontClass();
......@@ -1354,6 +1374,22 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
if (--g_sharpCount<=0)
BEGIN ( Bases );
}
<Bases>"(" {
g_code->codify(yytext);
g_sharpCount=1;
BEGIN ( SkipSharp );
}
<SkipSharp>"(" {
g_code->codify(yytext);
++g_sharpCount;
}
<SkipSharp>")" {
g_code->codify(yytext);
if (--g_sharpCount<=0)
BEGIN ( Bases );
}
<Bases>"," {
g_code->codify(yytext);
}
......@@ -1618,9 +1654,14 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_type.resize(0);
g_name.resize(0);
}
else if (*yytext=='[')
{
g_theCallContext.pushScope();
}
g_args.resize(0);
}
<Body>"]" {
g_theCallContext.popScope();
g_code->codify(yytext);
// TODO: nested arrays like: a[b[0]->func()]->func()
g_name = g_saveName.copy();
......@@ -1673,6 +1714,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
}
}
<MemberCall2,FuncCall>")" {
g_theVarContext.addVariable(g_parmType,g_parmName);
g_theCallContext.popScope();
g_code->codify(yytext);
if (--g_bracketCount<=0)
......
......@@ -238,7 +238,7 @@ void replaceComment(int offset);
g_readLineCtx=YY_START;
BEGIN(ReadLine);
}
<SComment>^[ \t]*"//!"/.*\n {
<SComment>^[ \t]*"//!"/.*\n {
replaceComment(0);
g_readLineCtx=YY_START;
BEGIN(ReadLine);
......
......@@ -606,6 +606,8 @@
<xsd:enumeration value="struct" />
<xsd:enumeration value="union" />
<xsd:enumeration value="interface" />
<xsd:enumeration value="protocol" />
<xsd:enumeration value="category" />
<xsd:enumeration value="exception" />
<xsd:enumeration value="file" />
<xsd:enumeration value="namespace" />
......
......@@ -606,6 +606,8 @@
" <xsd:enumeration value=\"struct\" />\n"
" <xsd:enumeration value=\"union\" />\n"
" <xsd:enumeration value=\"interface\" />\n"
" <xsd:enumeration value=\"protocol\" />\n"
" <xsd:enumeration value=\"category\" />\n"
" <xsd:enumeration value=\"exception\" />\n"
" <xsd:enumeration value=\"file\" />\n"
" <xsd:enumeration value=\"namespace\" />\n"
......
......@@ -3316,7 +3316,8 @@ void DocPara::handleImage(const QString &cmdName)
return;
}
doctokenizerYYsetStatePara();
DocImage *img = new DocImage(this,findAndCopyImage(g_token->name,t),t);
HtmlAttribList attrList;
DocImage *img = new DocImage(this,attrList,findAndCopyImage(g_token->name,t),t);
m_children.append(img);
img->parse();
}
......@@ -3982,7 +3983,8 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
{
HtmlAttribListIterator li(tagHtmlAttribs);
HtmlAttrib *opt;
for (li.toFirst();(opt=li.current());++li)
int index=0;
for (li.toFirst();(opt=li.current());++li,++index)
{
if (opt->name=="name") // <a name=label> tag
{
......@@ -4002,7 +4004,8 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
// copy attributes
HtmlAttribList attrList = tagHtmlAttribs;
// and remove the href attribute
attrList.remove(opt);
bool result = attrList.remove(index);
ASSERT(result);
DocHRef *href = new DocHRef(this,attrList,opt->value);
m_children.append(href);
g_insideHtmlLink=TRUE;
......@@ -4039,12 +4042,18 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
HtmlAttribListIterator li(tagHtmlAttribs);
HtmlAttrib *opt;
bool found=FALSE;
for (li.toFirst();(opt=li.current());++li)
int index=0;
for (li.toFirst();(opt=li.current());++li,++index)
{
//printf("option name=%s value=%s\n",opt->name.data(),opt->value.data());
if (opt->name=="src" && !opt->value.isEmpty())
{
DocImage *img = new DocImage(this,opt->value,DocImage::Html);
// copy attributes
HtmlAttribList attrList = tagHtmlAttribs;
// and remove the href attribute
bool result = attrList.remove(index);
ASSERT(result);
DocImage *img = new DocImage(this,attrList,opt->value,DocImage::Html);
m_children.append(img);
found = TRUE;
}
......
......@@ -561,8 +561,8 @@ class DocImage : public CompAccept<DocImage>, public DocNode
{
public:
enum Type { Html, Latex, Rtf };
DocImage(DocNode *parent,const QString &name,Type t) :
m_parent(parent), m_name(name), m_type(t) {}
DocImage(DocNode *parent,const HtmlAttribList &attribs,const QString &name,Type t) :
m_parent(parent), m_attribs(attribs), m_name(name), m_type(t) {}
Kind kind() const { return Kind_Image; }
Type type() const { return m_type; }
QString name() const { return m_name; }
......@@ -570,11 +570,13 @@ class DocImage : public CompAccept<DocImage>, public DocNode
bool hasCaption() const { return !m_children.isEmpty(); }
QString width() const { return m_width; }
QString height() const { return m_height; }
const HtmlAttribList &attribs() const { return m_attribs; }
void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); }
void parse();
private:
DocNode *m_parent;
HtmlAttribList m_attribs;
QString m_name;
Type m_type;
QString m_width;
......
......@@ -604,7 +604,7 @@ void DotNode::write(QTextStream &t,
bool backArrows
)
{
//printf("DotNode::write(%d) name=%s\n",distance,m_label.data());
//printf("DotNode::write(%d) name=%s this=%p written=%d\n",distance,m_label.data(),this,m_written);
if (m_written) return; // node already written to the output
if (m_distance>distance) return;
QList<DotNode> *nl = toChildren ? m_children : m_parents;
......@@ -631,6 +631,7 @@ void DotNode::write(QTextStream &t,
{
if (cn->m_distance<=distance)
{
//printf("write arrow %s%s%s\n",label().data(),backArrows?"<-":"->",cn->label().data());
writeArrow(t,gt,format,cn,dnli2.current(),topDown,backArrows);
}
cn->write(t,gt,format,topDown,toChildren,distance,backArrows);
......@@ -644,19 +645,21 @@ void DotNode::write(QTextStream &t,
{
if (pn->m_distance<=distance)
{
//printf("write arrow %s%s%s\n",label().data(),backArrows?"<-":"->",pn->label().data());
writeArrow(t,
gt,
format,
pn,
pn->m_edgeInfo->at(pn->m_children->findRef(this)),
FALSE,
backArrows
);
gt,
format,
pn,
pn->m_edgeInfo->at(pn->m_children->findRef(this)),
FALSE,
backArrows
);
}
pn->write(t,gt,format,TRUE,FALSE,distance,backArrows);
}
}
}
//printf("end DotNode::write(%d) name=%s\n",distance,m_label.data());
}
void DotNode::writeXML(QTextStream &t,bool isClassGraph)
......@@ -935,12 +938,18 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
if (node->m_subgraphId==n->m_subgraphId)
{
node->clearWriteFlag();
}
}
for (dnli2.toFirst();(node=dnli2.current());++dnli2)
{
if (node->m_subgraphId==n->m_subgraphId)
{
node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
}
}
uchar md5_sig[16];
QCString sigStr(33);
MD5Buffer(buf.ascii(),buf.length(),md5_sig);
MD5Buffer((const unsigned char *)buf.ascii(),buf.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33);
if (checkAndUpdateMd5Signature(baseName,sigStr) ||
!QFileInfo(mapName).exists())
......@@ -957,6 +966,12 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
if (node->m_subgraphId==n->m_subgraphId)
{
node->clearWriteFlag();
}
}
for (dnli2.toFirst();(node=dnli2.current());++dnli2)
{
if (node->m_subgraphId==n->m_subgraphId)
{
node->write(t,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
}
}
......@@ -1006,11 +1021,11 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
for ( ; (bcd=bcli.current()) ; ++bcli )
{
ClassDef *bClass=bcd->classDef;
//printf("Trying super class=`%s'\n",bClass->name().data());
//printf(" Trying super class=`%s' usedNodes=%d\n",bClass->name().data(),m_usedNodes->count());
if (bClass->isVisibleInHierarchy() && hasVisibleRoot(bClass->baseClasses()))
{
DotNode *bn;
//printf("Node `%s' Found visible class=`%s'\n",n->m_label.data(),
//printf(" Node `%s' Found visible class=`%s'\n",n->m_label.data(),
// bClass->name().data());
if ((bn=m_usedNodes->find(bClass->name()))) // node already present
{
......@@ -1018,7 +1033,7 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
{
n->addChild(bn,bcd->prot);
bn->addParent(n);
//printf("Adding node %s to existing base node %s (c=%d,p=%d)\n",
//printf(" Adding node %s to existing base node %s (c=%d,p=%d)\n",
// n->m_label.data(),
// bn->m_label.data(),
// bn->m_children ? bn->m_children->count() : 0,
......@@ -1027,7 +1042,7 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
}
//else
//{
// printf("Class already has an arrow!\n");
// printf(" Class already has an arrow!\n");
//}
}
else
......@@ -1039,14 +1054,15 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
bClass->displayName(),
tmp_url.data()
);
//printf("Adding node %s to new base node %s (c=%d,p=%d)\n",
n->addChild(bn,bcd->prot);
bn->addParent(n);
//printf(" Adding node %s to new base node %s (c=%d,p=%d)\n",
// n->m_label.data(),
// bn->m_label.data(),
// bn->m_children ? bn->m_children->count() : 0,
// bn->m_parents ? bn->m_parents->count() : 0
// );
n->addChild(bn,bcd->prot);
bn->addParent(n);
//printf(" inserting %s (%p)\n",bClass->name().data(),bn);
m_usedNodes->insert(bClass->name(),bn); // add node to the used list
}
if (!bClass->visited && !hideSuper && bClass->subClasses()->count()>0)
......@@ -1057,6 +1073,7 @@ void DotGfxHierarchyTable::addHierarchy(DotNode *n,ClassDef *cd,bool hideSuper)
}
}
}
//printf("end addHierarchy\n");
}
void DotGfxHierarchyTable::addClassList(ClassSDict *cl)
......@@ -1481,7 +1498,7 @@ QCString computeMd5Signature(DotNode *root,
}
uchar md5_sig[16];
QCString sigStr(33);
MD5Buffer(buf.ascii(),buf.length(),md5_sig);
MD5Buffer((const unsigned char *)buf.ascii(),buf.length(),md5_sig);
MD5SigToString(md5_sig,sigStr.data(),33);
//printf("md5: %s | file: %s\n",sigStr,baseName.data());
return sigStr;
......
......@@ -715,16 +715,24 @@ static void addClassToContext(Entry *root)
{
case Entry::UNION_SEC:
case Entry::UNIONDOC_SEC:
sec=ClassDef::Union; break;
sec=ClassDef::Union;
break;
case Entry::STRUCT_SEC:
case Entry::STRUCTDOC_SEC:
sec=ClassDef::Struct; break;
sec=ClassDef::Struct;
break;
case Entry::INTERFACE_SEC:
case Entry::INTERFACEDOC_SEC:
sec=ClassDef::Interface; break;
sec=ClassDef::Interface;
break;
case Entry::PROTOCOL_SEC:
case Entry::PROTOCOLDOC_SEC:
sec=ClassDef::Protocol;
break;
case Entry::EXCEPTION_SEC:
case Entry::EXCEPTIONDOC_SEC:
sec=ClassDef::Exception; break;
sec=ClassDef::Exception;
break;
}
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
......@@ -746,9 +754,9 @@ static void addClassToContext(Entry *root)
tagName,refFileName);
cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
cd->setIsObjectiveC(root->objc);
//printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
ArgumentList *tArgList =
getTemplateArgumentsFromName(fullName,root->tArgLists);
//printf("class %s template args=%s\n",fullName.data(),
......
......@@ -184,8 +184,11 @@ class Entry
EXCEPTION_SEC = 0x00000008,
NAMESPACE_SEC = 0x00000010,
INTERFACE_SEC = 0x00000020,
PROTOCOL_SEC = 0x00000040,
CATEGORY_SEC = 0x00000080,
COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC |
INTERFACE_SEC | EXCEPTION_SEC,
INTERFACE_SEC | EXCEPTION_SEC |
PROTOCOL_SEC | CATEGORY_SEC,
SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
CLASSDOC_SEC = 0x00000100,
......@@ -194,8 +197,9 @@ class Entry
EXCEPTIONDOC_SEC = 0x00000800,
NAMESPACEDOC_SEC = 0x00001000,
INTERFACEDOC_SEC = 0x00002000,
PROTOCOLDOC_SEC = 0x00004000,
COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC |
INTERFACEDOC_SEC | EXCEPTIONDOC_SEC,
INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC,
SOURCE_SEC = 0x00010000,
HEADER_SEC = 0x00020000,
......
......@@ -150,12 +150,9 @@ void FileDef::writeDetailedDocumentation(OutputList &ol)
{
ol.writeRuler();
ol.pushGeneratorState();
//bool latexOn = ol.isEnabled(OutputGenerator::Latex);
//if (latexOn) ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.writeAnchor(0,"_details");
//if (latexOn) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
ol.startGroupHeader();
ol.parseText(theTranslator->trDetailedDescription());
......
......@@ -479,10 +479,13 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.pushGeneratorState();
ol.disable(OutputGenerator::Latex);
ol.disable(OutputGenerator::RTF);
ol.disable(OutputGenerator::Man);
ol.startTextLink(0,"_details");
ol.parseText(theTranslator->trMore());
ol.endTextLink();
//ol.enable(OutputGenerator::Latex);
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.newParagraph();
ol.popGeneratorState();
}
......
......@@ -293,10 +293,9 @@ void HtmlDocVisitor::visit(DocFormula *f)
{
if (m_hide) return;
bool bDisplay = f->text().at(0)=='\\';
if (bDisplay) m_t << "<p class=formulaDsp>" << endl;
m_t << "<img class=formula"
<< (bDisplay ? "Dsp" : "Inl");
m_t << " alt=\"";
if (bDisplay) m_t << "<p class=\"formulaDsp\">" << endl;
m_t << "<img class=\"formula" << (bDisplay ? "Dsp" : "Inl");
m_t << "\" alt=\"";
filterQuotedCdataAttr(f->text());
m_t << "\"";
/// @todo cache image dimensions on formula generation and give height/width
......@@ -696,7 +695,7 @@ void HtmlDocVisitor::visitPre(DocImage *img)
}
m_t << "<div align=\"center\">" << endl;
m_t << "<img src=\"" << img->name() << "\" alt=\""
<< baseName << "\">" << endl;
<< baseName << "\"" << htmlAttribsToString(img->attribs()) << ">" << endl;
if (img->hasCaption())
{
m_t << "<p><strong>";
......
......@@ -57,15 +57,22 @@ static const char *defaultStyleSheet =
" margin: 2px;\n"
" padding: 2px;\n"
"}\n"
"A.qindex { text-decoration: none; font-weight: bold; color: #1A419D}\n"
"A.qindex:visited { text-decoration: none; font-weight: bold; color: #1A419D}\n"
"A.qindex {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D;\n"
" padding: 2px;\n"
"}\n"
"A.qindex:visited {\n"
" text-decoration: none;\n"
" font-weight: bold;\n"
" color: #1A419D\n"
" padding: 2px;\n"
"}\n"
"A.qindex:hover {\n"
" text-decoration: none;\n"
" background-color: #ddddff;\n"
" padding-top: 2px;\n"
" padding-right: 2px;\n"
" padding-bottom: 2px;\n"
" padding-left: 2px;\n"
" padding: 2px;\n"
"}\n"
"A.qindexHL {\n"
" text-decoration: none;\n"
......@@ -987,11 +994,13 @@ void HtmlGenerator::endMemberDocPrefixItem()
t << " </tr>" << endl;
}
void HtmlGenerator::startMemberDocName()
void HtmlGenerator::startMemberDocName(bool align)
{
DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
t << " <tr>" << endl;
t << " <td class=\"md\" nowrap valign=\"top\"> ";
t << " <td class=\"md\" nowrap valign=\"top\"";
if (align) t << " align=\"right\"";
t << "> ";
}
void HtmlGenerator::endMemberDocName()
......@@ -1000,13 +1009,18 @@ void HtmlGenerator::endMemberDocName()
t << "</td>" << endl;
}
void HtmlGenerator::startParameterList()
void HtmlGenerator::startParameterList(bool openBracket)
{
DBG_HTML(t << "<!-- startParameterList -->" << endl;)
t << " <td class=\"md\" valign=\"top\">(&nbsp;</td>" << endl;
t << " <td class=\"md\" valign=\"top\">";
if (openBracket)
{
t << "(&nbsp;";
}
t << "</td>" << endl;
}
void HtmlGenerator::startParameterType(bool first)
void HtmlGenerator::startParameterType(bool first,const char *key)
{
if (first)
{
......@@ -1017,7 +1031,9 @@ void HtmlGenerator::startParameterType(bool first)
{
DBG_HTML(t << "<!-- startParameterType -->" << endl;)
t << " <tr>" << endl;
t << " <td></td>" << endl;
t << " <td class=\"md\" nowrap align=\"right\">";
if (key) t << key;
t << "</td>" << endl;
t << " <td></td>" << endl;
t << " <td class=\"md\" nowrap>";
}
......
......@@ -195,13 +195,13 @@ class HtmlGenerator : public OutputGenerator
void startMemberDocPrefixItem();
void endMemberDocPrefixItem();
void startMemberDocName();
void startMemberDocName(bool);
void endMemberDocName();
void startParameterType(bool first);
void startParameterType(bool first,const char *key);
void endParameterType();
void startParameterName(bool);
void endParameterName(bool last,bool emptyList);
void startParameterList();
void startParameterList(bool);
void endParameterList();
void startFontClass(const char *s) { t << "<span class=\"" << s << "\">"; }
......
......@@ -32,6 +32,8 @@
<xsd:enumeration value="struct"/>
<xsd:enumeration value="union"/>
<xsd:enumeration value="interface"/>
<xsd:enumeration value="protocol"/>
<xsd:enumeration value="category"/>
<xsd:enumeration value="exception"/>
<xsd:enumeration value="file"/>
<xsd:enumeration value="namespace"/>
......
......@@ -32,6 +32,8 @@
" <xsd:enumeration value=\"struct\"/>\n"
" <xsd:enumeration value=\"union\"/>\n"
" <xsd:enumeration value=\"interface\"/>\n"
" <xsd:enumeration value=\"protocol\"/>\n"
" <xsd:enumeration value=\"category\"/>\n"
" <xsd:enumeration value=\"exception\"/>\n"
" <xsd:enumeration value=\"file\"/>\n"
" <xsd:enumeration value=\"namespace\"/>\n"
......
......@@ -270,13 +270,13 @@ class LatexGenerator : public OutputGenerator
void startMemberDocPrefixItem() {}
void endMemberDocPrefixItem() {}
void startMemberDocName() {}
void startMemberDocName(bool) {}
void endMemberDocName() {}
void startParameterType(bool) {}
void startParameterType(bool,const char *) {}
void endParameterType() {}
void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void startParameterList(bool) {}
void endParameterList() {}
void startFontClass(const char *) {}
......
......@@ -237,13 +237,13 @@ class ManGenerator : public OutputGenerator
void startMemberDocPrefixItem() {}
void endMemberDocPrefixItem() {}
void startMemberDocName() {}
void startMemberDocName(bool) {}
void endMemberDocName() {}
void startParameterType(bool) {}
void startParameterType(bool,const char *) {}
void endParameterType() {}
void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void startParameterList(bool) {}
void endParameterList() {}
void startFontClass(const char *) {}
......
......@@ -89,10 +89,10 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.endMemberDocName();
ol.startParameterList();
ol.startParameterList(!md->isObjCMethod());
ol.enableAll();
ol.disable(OutputGenerator::Html);
ol.docify("("); // start argument list
if (!md->isObjCMethod()) ol.docify("("); // start argument list
ol.endMemberDocName();
ol.popGeneratorState();
//printf("===> name=%s isDefine=%d\n",md->name().data(),md->isDefine());
......@@ -125,10 +125,10 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
bool first=TRUE;
while (a)
{
if (md->isDefine() || first) ol.startParameterType(first);
if (md->isDefine() || first) ol.startParameterType(first,md->isObjCMethod()?"dummy":0);
QRegExp re(")(");
int vp;
if (!a->attrib.isEmpty()) // argument has an IDL attribute
if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
{
ol.docify(a->attrib+" ");
}
......@@ -136,12 +136,14 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
{
//printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data());
QCString n=a->type.left(vp);
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n);
}
else // non-function pointer type
{
QCString n=a->type;
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n);
}
......@@ -181,11 +183,18 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
a=defArgList->next();
if (a)
{
ol.docify(", "); // there are more arguments
if (!md->isObjCMethod()) ol.docify(", "); // there are more arguments
if (!md->isDefine())
{
QCString key;
if (md->isObjCMethod() && a->attrib.length()>2)
{
//printf("Found parameter keyword %s\n",a->attrib.data());
// strip [ and ]
key=a->attrib.mid(1,a->attrib.length()-2)+":";
}
ol.endParameterName(FALSE,FALSE);
ol.startParameterType(FALSE);
ol.startParameterType(FALSE,key);
}
}
first=FALSE;
......@@ -193,13 +202,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
//if (!first) ol.writeString("&nbsp;");
ol.docify(")"); // end argument list
if (!md->isObjCMethod()) ol.docify(")"); // end argument list
ol.enableAll();
ol.disableAllBut(OutputGenerator::Html);
if (!md->isDefine())
{
if (first) ol.startParameterName(defArgList->count()<2);
ol.endParameterName(TRUE,defArgList->count()<2);
ol.endParameterName(!md->isObjCMethod(),defArgList->count()<2);
}
else
{
......@@ -929,6 +938,11 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
else
{
if (isObjCMethod())
{
ltype.prepend("(");
ltype.append(")");
}
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),ltype,TRUE);
}
bool htmlOn = ol.isEnabled(OutputGenerator::Html);
......@@ -996,7 +1010,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
}
if (argsString())
if (argsString() && !isObjCMethod())
{
if (!isDefine()) ol.writeString(" ");
//ol.docify(argsString());
......@@ -1237,7 +1251,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (si==-1) si=0;
while ((pi=r.match(ldef,i+l,&l))!=-1) ei=i=pi+l;
// first si characters of ldef contain compound type name
ol.startMemberDocName();
ol.startMemberDocName(isObjCMethod());
ol.docify(ldef.left(si));
ol.docify(" { ... } ");
// last ei characters of ldef contain pointer/reference specifiers
......@@ -1304,7 +1318,28 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
}
}
ol.startMemberDocName();
ol.startMemberDocName(isObjCMethod());
if (isObjCMethod())
{
int dp = ldef.find(':');
if (dp!=-1)
{
ldef=ldef.left(dp+1);
}
int l=ldef.length();
//printf("start >%s<\n",ldef.data());
int i=l-1;
while (i>=0 && (isId(ldef.at(i)) || ldef.at(i)==':')) i--;
while (i>=0 && isspace(ldef.at(i))) i--;
if (i>0)
{
// insert braches around the type
QCString tmp("("+ldef.left(i+1)+")"+ldef.mid(i+1));
ldef=tmp;
}
//printf("end >%s< i=%d\n",ldef.data(),i);
if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
}
linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef);
writeDefArgumentList(ol,cd,scopeName,this);
if (hasOneLineInitializer()) // add initializer
......@@ -1329,12 +1364,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
Specifier lvirt=virtualness();
if (protection()!=Public || lvirt!=Normal ||
isFriend() || isRelated() || isExplicit() ||
isMutable() || (isInline() && Config_getBool("INLINE_INFO")) ||
isSignal() || isSlot() ||
isStatic() || (classDef && classDef!=container) ||
isSettable() || isGettable()
if (!isObjCMethod() &&
(protection()!=Public || lvirt!=Normal ||
isFriend() || isRelated() || isExplicit() ||
isMutable() || (isInline() && Config_getBool("INLINE_INFO")) ||
isSignal() || isSlot() ||
isStatic() || (classDef && classDef!=container) ||
isSettable() || isGettable()
)
)
{
// write the member specifier list
......@@ -2137,3 +2174,10 @@ void MemberDef::setInbodyDocumentation(const char *docs,
m_inbodyFile = docFile;
}
bool MemberDef::isObjCMethod() const
{
if (classDef && classDef->isObjectiveC() && isFunction()) return TRUE;
return FALSE;
}
......@@ -126,6 +126,7 @@ class MemberDef : public Definition
bool isGettable() const { return (memSpec&Entry::Gettable)!=0; }
bool isSettable() const { return (memSpec&Entry::Settable)!=0; }
bool isExternal() const { return explExt; }
bool isObjCMethod() const;
bool isConstructor() const;
bool isDestructor() const;
bool hasOneLineInitializer() const;
......
......@@ -22,7 +22,7 @@
#include <qlist.h>
#include "sortdict.h"
#define NOGROUP -1
#define DOX_NOGROUP -1
class MemberDef;
class ClassDef;
......
......@@ -308,6 +308,9 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
ol.startTextLink(0,"_details");
ol.parseText(theTranslator->trMore());
ol.endTextLink();
ol.enableAll();
ol.disableAllBut(OutputGenerator::Man);
ol.newParagraph();
ol.popGeneratorState();
}
ol.disable(OutputGenerator::Man);
......
......@@ -346,13 +346,13 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void lastIndexPage() = 0;
virtual void startMemberDocPrefixItem() = 0;
virtual void endMemberDocPrefixItem() = 0;
virtual void startMemberDocName() = 0;
virtual void startMemberDocName(bool) = 0;
virtual void endMemberDocName() = 0;
virtual void startParameterType(bool) = 0;
virtual void startParameterType(bool,const char *) = 0;
virtual void endParameterType() = 0;
virtual void startParameterName(bool) = 0;
virtual void endParameterName(bool,bool) = 0;
virtual void startParameterList() = 0;
virtual void startParameterList(bool) = 0;
virtual void endParameterList() = 0;
protected:
......
......@@ -273,6 +273,7 @@ FORALL4(const char *a1,const char *a2,const char *a3,bool a4,a1,a2,a3,a4)
#endif
FORALL2(int a1,bool a2,a1,a2)
FORALL2(bool a1,HighlightedItem a2,a1,a2)
FORALL2(bool a1,const char *a2,a1,a2)
FORALL2(ParamListTypes a1,const char *a2,a1,a2)
FORALL1(IndexSections a1,a1)
FORALL2(const char *a1,const char *a2,a1,a2)
......
......@@ -329,20 +329,20 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startMemberDocPrefixItem); }
void endMemberDocPrefixItem()
{ forall(&OutputGenerator::endMemberDocPrefixItem); }
void startMemberDocName()
{ forall(&OutputGenerator::startMemberDocName); }
void startMemberDocName(bool align)
{ forall(&OutputGenerator::startMemberDocName,align); }
void endMemberDocName()
{ forall(&OutputGenerator::endMemberDocName); }
void startParameterType(bool first)
{ forall(&OutputGenerator::startParameterType,first); }
void startParameterType(bool first,const char *key)
{ forall(&OutputGenerator::startParameterType,first,key); }
void endParameterType()
{ forall(&OutputGenerator::endParameterType); }
void startParameterName(bool one)
{ forall(&OutputGenerator::startParameterName,one); }
void endParameterName(bool last,bool one)
{ forall(&OutputGenerator::endParameterName,last,one); }
void startParameterList()
{ forall(&OutputGenerator::startParameterList); }
void startParameterList(bool openBracket)
{ forall(&OutputGenerator::startParameterList,openBracket); }
void endParameterList()
{ forall(&OutputGenerator::endParameterList); }
void startFontClass(const char *c)
......@@ -392,6 +392,7 @@ class OutputList : public OutputDocInterface
#endif
FORALLPROTO2(int,bool);
FORALLPROTO2(bool,HighlightedItem);
FORALLPROTO2(bool,const char *);
FORALLPROTO2(ParamListTypes,const char *);
FORALLPROTO2(const char *,const char *);
FORALLPROTO2(const char *,bool);
......
......@@ -240,13 +240,13 @@ class RTFGenerator : public OutputGenerator
void startMemberDocPrefixItem() {}
void endMemberDocPrefixItem() {}
void startMemberDocName() {}
void startMemberDocName(bool) {}
void endMemberDocName() {}
void startParameterType(bool) {}
void startParameterType(bool,const char *) {}
void endParameterType() {}
void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void startParameterList(bool) {}
void endParameterList() {}
void startFontClass(const char *) {}
......
This diff is collapsed.
......@@ -634,6 +634,8 @@ class TranslatorBrazilian: public Translator
case ClassDef::Struct: result+=" Estrutura "; break;
case ClassDef::Union: result+=" União "; break;
case ClassDef::Interface: result+=" Interface "; break;
case ClassDef::Protocol: result+=" Protocol "; break; // translate me!
case ClassDef::Category: result+=" Category "; break; // translate me!
case ClassDef::Exception: result+=" Exceção "; break;
}
result+=(QCString)clName;
......@@ -790,6 +792,8 @@ class TranslatorBrazilian: public Translator
case ClassDef::Struct: result+="estrutura "; break;
case ClassDef::Union: result+="união "; break;
case ClassDef::Interface: result+="interface "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="exceção "; break;
}
result+=" foi gerada a partir ";
......
......@@ -644,6 +644,8 @@ class TranslatorCatalan : public TranslatorAdapter_1_2_17
case ClassDef::Struct: result+=" Estructura "; break;
case ClassDef::Union: result+=" Unió "; break;
case ClassDef::Interface: result+=" Interfície "; break;
case ClassDef::Protocol: result+=" Protocol "; break; // translate me!
case ClassDef::Category: result+=" Category "; break; // translate me!
case ClassDef::Exception: result+=" Excepció "; break;
}
if (isTemplate) result+="Template ";
......@@ -801,6 +803,8 @@ class TranslatorCatalan : public TranslatorAdapter_1_2_17
case ClassDef::Struct: result+="estructura"; break;
case ClassDef::Union: result+="unió"; break;
case ClassDef::Interface: result+="interfície"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="excepció"; break;
}
result+=" es va generar a partir del";
......
......@@ -495,6 +495,8 @@ class TranslatorChinese : public TranslatorAdapter_1_2_13
case ClassDef::Struct: result+="结构"; break;
case ClassDef::Union: result+="联合"; break;
case ClassDef::Interface: result+="接口"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="异常"; break;
}
result+="参考";
......@@ -659,6 +661,8 @@ class TranslatorChinese : public TranslatorAdapter_1_2_13
case ClassDef::Struct: result+="结构"; break;
case ClassDef::Union: result+="联合"; break;
case ClassDef::Interface: result+="接口"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="异常"; break;
}
result+="的文档由以下文件生成:";
......
......@@ -763,6 +763,8 @@ class TranslatorCzech : public Translator
case ClassDef::Struct: result+="struktury "; break;
case ClassDef::Union: result+="unie "; break;
case ClassDef::Interface: result+="rozhraní "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="výjimky "; break;
}
result+=clName;
......@@ -933,6 +935,8 @@ class TranslatorCzech : public Translator
case ClassDef::Struct: result+="tuto strukturu (struct)"; break;
case ClassDef::Union: result+="tuto unii (union)"; break;
case ClassDef::Interface: result+="toto rozhraní"; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="tuto výjimku"; break;
}
result+=" byla generována z ";
......
......@@ -670,6 +670,8 @@ class TranslatorGerman : public Translator
case ClassDef::Struct: result+="Struktur"; break;
case ClassDef::Union: result+="Varianten"; break;
case ClassDef::Interface: result+="Schnittstellen"; break;
case ClassDef::Protocol: result+="Protocol"; break; // translate me!
case ClassDef::Category: result+="Category"; break; // translate me!
case ClassDef::Exception: result+="Ausnahmen"; break;
}
result+="referenz";
......@@ -836,6 +838,8 @@ class TranslatorGerman : public Translator
case ClassDef::Struct: result+=" Struktur"; break;
case ClassDef::Union: result+=" Variante"; break;
case ClassDef::Interface: result+=" Schnittstelle"; break;
case ClassDef::Protocol: result+=" Protocol"; break; // translate me!
case ClassDef::Category: result+=" Category"; break; // translate me!
case ClassDef::Exception: result+=" Ausnahme"; break;
}
result+=" wurde erzeugt aufgrund der Datei";
......
......@@ -641,6 +641,8 @@ class TranslatorDanish : public Translator
case ClassDef::Struct: result+=" Datastruktur-"; break;
case ClassDef::Union: result+=" Union-"; break;
case ClassDef::Interface: result+=" Grænseflade-"; break;
case ClassDef::Protocol: result+=" Protocol-"; break; // translate me!
case ClassDef::Category: result+=" Category-"; break; // translate me!
case ClassDef::Exception: result+=" Exception-"; break;
}
if (isTemplate) result+="template-";
......@@ -796,6 +798,8 @@ class TranslatorDanish : public Translator
case ClassDef::Struct: result+="datastruktur"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="grænseflade"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="exception"; break;
}
result+=" blev genereret ud fra fil";
......
......@@ -645,6 +645,8 @@ class TranslatorEnglish : public Translator
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Protocol: result+=" Protocol"; break;
case ClassDef::Category: result+=" Category"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
if (isTemplate) result+=" Template";
......@@ -802,6 +804,8 @@ class TranslatorEnglish : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Protocol: result+="protocol"; break;
case ClassDef::Category: result+="category"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" was generated from the following file";
......
......@@ -537,6 +537,8 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+="la Estructura "; break;
case ClassDef::Union: result+="la Unión "; break;
case ClassDef::Interface: result+="la Interfaz "; break;
case ClassDef::Protocol: result+="Protocol "; break; // translate me!
case ClassDef::Category: result+="Category "; break; // translate me!
case ClassDef::Exception: result+="la Excepción "; break;
}
result+=(QCString)clName;
......@@ -694,6 +696,8 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+="estructura"; break;
case ClassDef::Union: result+="unión"; break;
case ClassDef::Interface: result+="interfaz"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="excepción"; break;
}
result+=" fué generada a partir ";
......
......@@ -486,6 +486,8 @@ class TranslatorFinnish : public TranslatorEnglish
case ClassDef::Struct: result+=" Struct"; break; // "Struct"
case ClassDef::Union: result+=" Union"; break; // "Union"
case ClassDef::Interface: result+=" Interface"; break; // "Interface"
case ClassDef::Protocol: result+=" Protocol"; break; // translate me!
case ClassDef::Category: result+=" Category"; break; // translate me!
case ClassDef::Exception: result+=" Exception"; break; // "Interface"
}
result+=" Referenssi"; // " Reference"
......
......@@ -536,6 +536,8 @@ class TranslatorFrench : public Translator
case ClassDef::Struct: result+="la structure "; break;
case ClassDef::Union: result+="l'union "; break;
case ClassDef::Interface: result+="l'interface "; break;
case ClassDef::Protocol: result+="le protocol "; break;
case ClassDef::Category: result+="la catégorie "; break;
case ClassDef::Exception: result+="l'exception "; break;
}
......@@ -694,6 +696,8 @@ class TranslatorFrench : public Translator
case ClassDef::Struct: result+="structure"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Protocol: result+="protocol"; break;
case ClassDef::Category: result+="category"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" a été générée à partir ";
......
......@@ -619,6 +619,8 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
case ClassDef::Struct: result+=" "; break;
case ClassDef::Union: result+=" "; break;
case ClassDef::Interface: result+=" "; break;
case ClassDef::Protocol: result+=" Protocol"; break; // translate me!
case ClassDef::Category: result+=" Category"; break; // translate me!
case ClassDef::Exception: result+=" "; break;
}
if (isTemplate) result+=" Template";
......@@ -776,6 +778,8 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
case ClassDef::Struct: result+=" "; break;
case ClassDef::Union: result+=" "; break;
case ClassDef::Interface: result+=" "; break;
case ClassDef::Protocol: result+="Protocol"; break; // translate me!
case ClassDef::Category: result+="Category"; break; // translate me!
case ClassDef::Exception: result+=" "; break;
}
result+=" ";
......
......@@ -370,6 +370,8 @@ class TranslatorCroatian : public Translator
case ClassDef::Struct: result+=" strukture "; break;
case ClassDef::Union: result+=" unije "; break;
case ClassDef::Interface: result+=" suelja (interface) "; break;
case ClassDef::Protocol: result+=" protocol "; break; // translate me!
case ClassDef::Category: result+=" category "; break; // translate me!
case ClassDef::Exception: result+=" iznimke (exception) "; break;
}
result += clName;
......@@ -518,6 +520,8 @@ class TranslatorCroatian : public Translator
case ClassDef::Struct: result+="strukture"; break;
case ClassDef::Union: result+="unije"; break;
case ClassDef::Interface: result+="suelja (interface)"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="iznimke (exception)"; break;
}
result+=" je generirana iz " + trFile(FALSE, single) + ": ";
......
......@@ -608,6 +608,8 @@ class TranslatorHungarian : public Translator
case ClassDef::Struct: result+=" struktúra"; break;
case ClassDef::Union: result+=" unió"; break;
case ClassDef::Interface: result+=" interfész"; break;
case ClassDef::Protocol: result+=" protocol"; break; // translate me!
case ClassDef::Category: result+=" category"; break; // translate me!
case ClassDef::Exception: result+=" kivétel"; break;
}
if (isTemplate) result+="sablon-";
......@@ -765,6 +767,8 @@ class TranslatorHungarian : public Translator
case ClassDef::Struct: result+="a struktúráról"; break;
case ClassDef::Union: result+="az unióról"; break;
case ClassDef::Interface: result+="az interfészrõl"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="a kivételrõl"; break;
}
result+=" a következõ fájl";
......
......@@ -644,6 +644,8 @@ class TranslatorItalian : public Translator
case ClassDef::Struct: result+="la struct "; break;
case ClassDef::Union: result+="la union "; break;
case ClassDef::Interface: result+="l'interfaccia "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="exception "; break;
}
result+=(QCString)clName;
......@@ -803,6 +805,8 @@ class TranslatorItalian : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interfaccia"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="exception"; break;
}
result+=" è stata generata a partire ";
......
......@@ -601,6 +601,8 @@ class TranslatorJapanese : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+=decode("構造体 "); break;
case ClassDef::Union: result+=decode("共用体 "); break;
case ClassDef::Interface: result+=decode("インタフェース"); break;
case ClassDef::Protocol: result+=decode("Protocol"); break; // translate me!
case ClassDef::Category: result+=decode("Category"); break; // translate me!
case ClassDef::Exception: result+=decode("例外"); break; //TODO:fixme
}
if (isTemplate) result+=decode(" テンプレート");
......@@ -757,6 +759,8 @@ class TranslatorJapanese : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+=decode("構造体"); break;
case ClassDef::Union: result+=decode("共用体"); break;
case ClassDef::Interface: result+=decode("インタフェース"); break;
case ClassDef::Protocol: result+=decode("Protocol"); break; // translate me!
case ClassDef::Category: result+=decode("Category"); break; // translate me!
case ClassDef::Exception: result+=decode("例外"); break; //TODO:fixme
}
result+=decode("の説明は次のファイルから生成されました:");
......
......@@ -581,6 +581,8 @@ class TranslatorKorean : public Translator
case ClassDef::Struct: result+=" 구조체"; break;
case ClassDef::Union: result+=" 공용체"; break;
case ClassDef::Interface: result+=" 인터페이스"; break;
case ClassDef::Protocol: result+=" protocol"; break; // translate me!
case ClassDef::Category: result+=" category"; break; // translate me!
case ClassDef::Exception: result+=" 예외"; break;
}
result+=" 참조";
......@@ -738,6 +740,8 @@ class TranslatorKorean : public Translator
case ClassDef::Struct: result+="구조체"; break;
case ClassDef::Union: result+="공용체"; break;
case ClassDef::Interface: result+="인터페이스"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="예외"; break;
}
result+="을 위한 문서화는 다음의 파일";
......
......@@ -280,6 +280,8 @@ class TranslatorDutch : public Translator
case ClassDef::Struct: result+=" Struct"; break;
case ClassDef::Union: result+=" Union"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Protocol: result+=" Protocol"; break;
case ClassDef::Category: result+=" Category"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
result+=" Referentie";
......@@ -426,6 +428,8 @@ class TranslatorDutch : public Translator
case ClassDef::Struct: result+="struct"; break;
case ClassDef::Union: result+="union"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Protocol: result+="protocol"; break;
case ClassDef::Category: result+="category"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" is gegenereerd op grond van de volgende file";
......
......@@ -346,6 +346,8 @@ class TranslatorNorwegian : public TranslatorAdapter_1_2_2
case ClassDef::Struct: result+=" struktur"; break;
case ClassDef::Union: result+=" union"; break;
case ClassDef::Interface: result+=" grensesnitt"; break;
case ClassDef::Protocol: result+=" protocol"; break; // translate me!
case ClassDef::Category: result+=" category"; break; // translate me!
case ClassDef::Exception: result+=" unntak"; break;
}
result+="referanse";
......@@ -484,6 +486,8 @@ class TranslatorNorwegian : public TranslatorAdapter_1_2_2
case ClassDef::Struct: result+="denne strukt "; break;
case ClassDef::Union: result+="denne union "; break;
case ClassDef::Interface: result+="dette grensesnittet "; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="unntak "; break;
}
result+="var generert fra flgende fil";
......
......@@ -658,6 +658,8 @@ class TranslatorPolish : public TranslatorAdapter_1_3
case ClassDef::Struct: result+=" struktury "; break;
case ClassDef::Union: result+=" unii "; break;
case ClassDef::Interface: result+=" interfejsu "; break;
case ClassDef::Protocol: result+=decode(" protocol "); break; // translate me!
case ClassDef::Category: result+=decode(" category "); break; // translate me!
case ClassDef::Exception: result+=decode(" wyj±tku "); break;
}
result+=(QCString)clName;
......@@ -815,6 +817,8 @@ class TranslatorPolish : public TranslatorAdapter_1_3
case ClassDef::Struct: result+="j struktury"; break;
case ClassDef::Union: result+="j unii"; break;
case ClassDef::Interface: result+="go interfejsu"; break;
case ClassDef::Protocol: result+=decode("protocol"); break; // translate me!
case ClassDef::Category: result+=decode("category"); break; // translate me!
case ClassDef::Exception: result+="go wyj±tku"; break;
}
result+=" zosta³a wygenerowana z plik";
......
......@@ -630,6 +630,8 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+="à estrutura "; break;
case ClassDef::Union: result+="à união "; break;
case ClassDef::Interface: result+="ao interface "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="à excepção "; break;
}
if (isTemplate) result+="Template ";
......@@ -790,6 +792,8 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+="esta estrutura"; break;
case ClassDef::Union: result+="esta união"; break;
case ClassDef::Interface: result+="este interface"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="esta excepção"; break;
}
result+=" foi gerada a partir ";
......
......@@ -659,6 +659,8 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
case ClassDef::Struct: result+="structura"; break;
case ClassDef::Union: result+="uniunea"; break;
case ClassDef::Interface: result+="interfaþa"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="excepþia"; break;
}
if (isTemplate) result+=" (Template) ";
......@@ -819,6 +821,8 @@ class TranslatorRomanian: public TranslatorAdapter_1_2_16
case ClassDef::Struct: result+="structurã"; break;
case ClassDef::Union: result+="uniune"; break;
case ClassDef::Interface: result+="interfaþã"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="excepþie"; break;
}
result+=" a fost generatã din fiºier";
......
......@@ -660,6 +660,8 @@ class TranslatorRussian : public Translator
case ClassDef::Struct: result+=""; break;
case ClassDef::Union: result+=""; break;
case ClassDef::Interface: result+=""; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+=""; break;
}
}
......@@ -671,6 +673,8 @@ class TranslatorRussian : public Translator
case ClassDef::Struct: result+=""; break;
case ClassDef::Union: result+=""; break;
case ClassDef::Interface: result+=""; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+=""; break;
}
}
......@@ -834,6 +838,10 @@ class TranslatorRussian : public Translator
case ClassDef::Interface: result+="";
if (single) result+=''; else result+="";
break;
case ClassDef::Protocol: result+="Protocol"; // translate me!
break;
case ClassDef::Category: result+="Category"; // translate me!
break;
case ClassDef::Exception: result+="";
if (single) result+=''; else result+='';
break;
......
......@@ -524,6 +524,8 @@ class TranslatorSwedish : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+=" strukt"; break;
case ClassDef::Union: result+=" union"; break;
case ClassDef::Interface: result+=" grnssnitt"; break;
case ClassDef::Protocol: result+=" protocol"; break; // translate me!
case ClassDef::Category: result+=" category"; break; // translate me!
case ClassDef::Exception: result+=" undantag"; break;
}
if (isTemplate) result+="template";
......@@ -663,6 +665,8 @@ class TranslatorSwedish : public TranslatorAdapter_1_3_3
case ClassDef::Struct: result+="denna strukt "; break;
case ClassDef::Union: result+="denna union "; break;
case ClassDef::Interface: result+="detta grnssnitt "; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="detta undantag "; break;
}
result+="var genererad frn fljande fil";
......
......@@ -274,6 +274,8 @@ class TranslatorSlovene : public TranslatorAdapter_1_2_16
case ClassDef::Struct: result+=" Struktura "; break;
case ClassDef::Union: result+=" Mnoica "; break;
case ClassDef::Interface: result+=" IDL vmesnik "; break;
case ClassDef::Protocol: result+=" protocol "; break; // translate me!
case ClassDef::Category: result+=" category "; break; // translate me!
case ClassDef::Exception: result+=" IDL prekinitev "; break;
}
result += (QCString)clName;
......@@ -420,6 +422,8 @@ class TranslatorSlovene : public TranslatorAdapter_1_2_16
case ClassDef::Struct: result+="strukture"; break;
case ClassDef::Union: result+="unije"; break;
case ClassDef::Interface: result+="vmesnika (interface)"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="prekinitve (exception)"; break;
}
result+=" je zgrajen na podlagi naslednj";
......
......@@ -629,6 +629,8 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_18
case ClassDef::Struct: result+="truktry "; break;
case ClassDef::Union: result+="unionu "; break;
case ClassDef::Interface: result+="rozhrania "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="vnimky "; break;
}
result+=clName;
......@@ -799,6 +801,8 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_18
case ClassDef::Struct: result+="tto truktru (struct)"; break;
case ClassDef::Union: result+="tento union"; break;
case ClassDef::Interface: result+="toto rozhranie"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="tto vnimku"; break;
}
result+=" bola generovan z ";
......
......@@ -645,6 +645,8 @@ private:
case ClassDef::Struct: result+="strukture "; break;
case ClassDef::Union: result+="unije "; break;
case ClassDef::Interface: result+="interfejsa "; break;
case ClassDef::Protocol: result+="protocol "; break; // translate me!
case ClassDef::Category: result+="category "; break; // translate me!
case ClassDef::Exception: result+="izuzetka "; break;
}
if (isTemplate) result += "¹ablona ";
......@@ -803,6 +805,8 @@ private:
case ClassDef::Struct: result+="ove strukture"; break;
case ClassDef::Union: result+="ove unije"; break;
case ClassDef::Interface: result+="ovog interfejsa"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="ovog izuzetka"; break;
}
result+=" je napravljena iz ";
......
......@@ -646,6 +646,8 @@ class TranslatorChinesetraditional : public Translator
case ClassDef::Struct: result+=" 結構"; break;
case ClassDef::Union: result+=" 聯合"; break;
case ClassDef::Interface: result+=" 介面"; break;
case ClassDef::Protocol: result+=" protocol"; break; // translate me!
case ClassDef::Category: result+=" category"; break; // translate me!
case ClassDef::Exception: result+=" 例外"; break;
}
if (isTemplate) result+=" 樣版";
......@@ -803,6 +805,8 @@ class TranslatorChinesetraditional : public Translator
case ClassDef::Struct: result+="結構(structure)"; break;
case ClassDef::Union: result+="聯合(union)"; break;
case ClassDef::Interface: result+="介面(interface)"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="例外(exception)"; break;
}
result+=" 文件是由下列檔案中產生";
......
......@@ -42,19 +42,23 @@ class TranslatorUkrainian : public TranslatorAdapter_1_2_11
/* Used to get the command(s) for the language support. */
virtual QCString latexLanguageSupportCommand()
{
#ifdef _WIN32
{ return "\\usepackage[cp1251]{inputenc}\n\\usepackage[ukrainian]{babel}\n"; }
return "\\usepackage[cp1251]{inputenc}\n\\usepackage[ukrainian]{babel}\n";
#else
{ return "\\usepackage[koi8-u]{inputenc}\n\\usepackage[ukrainian]{babel}\n"; }
return "\\usepackage[koi8-u]{inputenc}\n\\usepackage[ukrainian]{babel}\n";
#endif
}
/*! return the language charset. This will be used for the HTML output */
virtual QCString idLanguageCharset()
{
#ifdef _WIN32
{ return "Windows-1251"; }
return "Windows-1251";
#else
{ return "koi8-u"; }
return "koi8-u";
#endif
}
// --- Language translation methods -------------------
......@@ -618,6 +622,8 @@ class TranslatorUkrainian : public TranslatorAdapter_1_2_11
case ClassDef::Struct: result+="ÓÔÒÕËÔÕÒÉ"; break;
case ClassDef::Union: result+="ÏÂ'¤ÄÎÁÎÎÑ"; break;
case ClassDef::Interface: result+="¦ÎÔÅÒÆÅÊÓÕ"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="÷ÉÎÑÔÏË"; break;
}
}
......@@ -629,6 +635,8 @@ class TranslatorUkrainian : public TranslatorAdapter_1_2_11
case ClassDef::Struct: result+="óÔÒÕËÔÕÒÁ"; break;
case ClassDef::Union: result+="ïÂ'¤ÄÎÁÎÎÑ"; break;
case ClassDef::Interface: result+="¶ÎÔÅÒÆÅÊÓ"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Exception: result+="÷ÉÎÑÔÏË"; break;
}
}
......@@ -791,6 +799,12 @@ class TranslatorUkrainian : public TranslatorAdapter_1_2_11
case ClassDef::Interface:
if (single) result+="ÃØÏÇÏ ¦ÎÔÅÒÆÅÊÓÕ"; else result+="ÃÉÈ ¦ÎÔÅÒÆÅÊÓ¦×";
break;
case ClassDef::Protocol:
if (single) result+="protocol"; else result+="protocols"; // translate me!
break;
case ClassDef::Category:
if (single) result+="category"; else result+="categories"; // translate me!
break;
case ClassDef::Exception:
if (single) result+="ÃØÏÇÏ ×ÉÎÑÔËÕ"; else result+="ÃÉÈ ×ÉÎÑÔ˦×";
break;
......
......@@ -457,7 +457,7 @@ sub Project {
$r = "";
foreach ( @settings ) {
$v = $_;
if ( $v =~ s/^\s*((?:[^:\s]*?:)?)(\w+)\s*(\+=|\*=|\-=|\/=|=)// ) {
if ( $v =~ s/^\s*([^:\r\n]+:)?(\w+)\s*(\+=|\*=|\-=|\/=|=)// ) {
$if_var = $1;
if ( $if_var ne "" ) {
chop $if_var;
......@@ -550,7 +550,7 @@ sub ScanProject {
s/\#.*//; # strip comment
s/^\s+//; # strip white space
s/\s+$//;
if ( /^\s*((?:(?:[^:\s]*?:)?)\w+\s*(\+|\-|\*|\/)?=)/ ) {
if ( /^(([^:\r\n]+:)?\w+\s*(\+|\-|\*|\/)?=)/ ) {
$var = $1; # var also contains the ".="
s/^.*?=\s*//;
if ( /^\<\<(.*)$/ ) {
......
......@@ -8,7 +8,7 @@ TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = aCC
TMAKE_CFLAGS = -w -D__STRICT_ANSI__
TMAKE_CFLAGS = -w -D__STRICT_ANSI__ -DPNG_USE_LOCAL_ARRAYS
TMAKE_CFLAGS_WARN_ON =
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O
......
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