From 2bf4cfeda1be93954baf688017e147b565c06d9b Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Thu, 12 Feb 2004 20:39:00 +0000 Subject: Release-1.3.6 --- Doxyfile | 2 +- INSTALL | 4 +- README | 4 +- VERSION | 2 +- doc/index.doc | 2 +- doc/install.doc | 8 +-- doc/language.doc | 2 +- libmd5/md5.c | 2 +- libmd5/md5.h | 2 +- src/classdef.cpp | 7 +++ src/classdef.h | 9 +++ src/code.l | 56 +++++++++++++++--- src/commentcnv.l | 2 +- src/compound.xsd | 2 + src/compound_xsd.h | 2 + src/docparser.cpp | 19 ++++-- src/docparser.h | 6 +- src/dot.cpp | 51 ++++++++++------ src/doxygen.cpp | 18 ++++-- src/entry.h | 8 ++- src/filedef.cpp | 3 - src/groupdef.cpp | 5 +- src/htmldocvisitor.cpp | 9 ++- src/htmlgen.cpp | 40 +++++++++---- src/htmlgen.h | 6 +- src/index.xsd | 2 + src/index_xsd.h | 2 + src/latexgen.h | 6 +- src/mangen.h | 6 +- src/memberdef.cpp | 78 +++++++++++++++++++------ src/memberdef.h | 1 + src/membergroup.h | 2 +- src/namespacedef.cpp | 3 + src/outputgen.h | 6 +- src/outputlist.cpp | 1 + src/outputlist.h | 13 +++-- src/rtfgen.h | 6 +- src/scanner.l | 131 ++++++++++++++++++++++++++++++------------ src/translator_br.h | 4 ++ src/translator_ca.h | 4 ++ src/translator_cn.h | 4 ++ src/translator_cz.h | 4 ++ src/translator_de.h | 4 ++ src/translator_dk.h | 4 ++ src/translator_en.h | 4 ++ src/translator_es.h | 4 ++ src/translator_fi.h | 2 + src/translator_fr.h | 4 ++ src/translator_gr.h | 4 ++ src/translator_hr.h | 4 ++ src/translator_hu.h | 4 ++ src/translator_it.h | 4 ++ src/translator_jp.h | 4 ++ src/translator_kr.h | 4 ++ src/translator_nl.h | 4 ++ src/translator_no.h | 4 ++ src/translator_pl.h | 4 ++ src/translator_pt.h | 4 ++ src/translator_ro.h | 4 ++ src/translator_ru.h | 8 +++ src/translator_se.h | 4 ++ src/translator_si.h | 4 ++ src/translator_sk.h | 4 ++ src/translator_sr.h | 4 ++ src/translator_tw.h | 4 ++ src/translator_ua.h | 22 +++++-- tmake/bin/tmake | 4 +- tmake/lib/hpux-acc/tmake.conf | 2 +- 68 files changed, 508 insertions(+), 158 deletions(-) diff --git a/Doxyfile b/Doxyfile index aaebebe..30ef62a 100644 --- a/Doxyfile +++ b/Doxyfile @@ -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 diff --git a/INSTALL b/INSTALL index c8cfd36..1b79237 100644 --- a/INSTALL +++ b/INSTALL @@ -1,7 +1,7 @@ -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) diff --git a/README b/README index 36cacfc..bf5c967 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -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) diff --git a/VERSION b/VERSION index ec52481..95b25ae 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.5-20040125 +1.3.6 diff --git a/doc/index.doc b/doc/index.doc index 7e8ce2c..4956018 100644 --- a/doc/index.doc +++ b/doc/index.doc @@ -27,7 +27,7 @@ Version: $(VERSION)

Introduction

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:
    diff --git a/doc/install.doc b/doc/install.doc index f996711..8546efe 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -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 BISONLIB environment variable points to the + Make sure the BISON_SIMPLE environment variable points to the location where the files bison.simple and - bison.hairy are located. For instance if these files are in - c:\\tools\\cygwin\\share then BISONLIB should - be set to //c/tools/cygwin/share/ + is located. For instance if these file is in + c:\\tools\\cygwin\\usr\\share then BISON_SIMPLE should + be set to c:/tools/cygwin/usr/share/bison.simple Also make sure the tools are available from a dos box, by adding the directory they are in to the search path. diff --git a/doc/language.doc b/doc/language.doc index 8434f74..98188f3 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -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, diff --git a/libmd5/md5.c b/libmd5/md5.c index d75105c..0945b28 100644 --- a/libmd5/md5.c +++ b/libmd5/md5.c @@ -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); diff --git a/libmd5/md5.h b/libmd5/md5.h index e62aa07..8e85a8a 100644 --- a/libmd5/md5.h +++ b/libmd5/md5.h @@ -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 diff --git a/src/classdef.cpp b/src/classdef.cpp index 9ca6ae8..ff014c9 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -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"; diff --git a/src/classdef.h b/src/classdef.h index ae42993..fb7dd88 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -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; diff --git a/src/code.l b/src/code.l index 2f3b501..316b05f 100644 --- a/src/code.l +++ b/src/code.l @@ -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 -^([ \t]*"#"[ \t]*"include"[ \t]*)("<"|"\"") { +^([ \t]*"#"[ \t]*("include"|"import")[ \t]*)("<"|"\"") { startFontClass("preprocessor"); g_code->codify(yytext); BEGIN( ReadInclude ); } -("class"|"struct"|"union"|"namespace")[ \t\n]+ { +("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); } +"@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); + } ";" { 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 ); } -"virtual"|"public"|"protected"|"private" { +"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 ); } +"(" { + g_code->codify(yytext); + g_sharpCount=1; + BEGIN ( SkipSharp ); + } +"(" { + g_code->codify(yytext); + ++g_sharpCount; + } +")" { + g_code->codify(yytext); + if (--g_sharpCount<=0) + BEGIN ( 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); } "]" { + 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" } } ")" { + g_theVarContext.addVariable(g_parmType,g_parmName); g_theCallContext.popScope(); g_code->codify(yytext); if (--g_bracketCount<=0) diff --git a/src/commentcnv.l b/src/commentcnv.l index cfb3846..668e2e9 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -238,7 +238,7 @@ void replaceComment(int offset); g_readLineCtx=YY_START; BEGIN(ReadLine); } -^[ \t]*"//!"/.*\n { +^[ \t]*"//!"/.*\n { replaceComment(0); g_readLineCtx=YY_START; BEGIN(ReadLine); diff --git a/src/compound.xsd b/src/compound.xsd index 51f7ff6..aa45adf 100644 --- a/src/compound.xsd +++ b/src/compound.xsd @@ -606,6 +606,8 @@ + + diff --git a/src/compound_xsd.h b/src/compound_xsd.h index 90753b7..d43646e 100644 --- a/src/compound_xsd.h +++ b/src/compound_xsd.h @@ -606,6 +606,8 @@ " \n" " \n" " \n" +" \n" +" \n" " \n" " \n" " \n" diff --git a/src/docparser.cpp b/src/docparser.cpp index 80bea8d..760e1b5 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -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") // 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; } diff --git a/src/docparser.h b/src/docparser.h index 8742ed5..05d6c93 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -561,8 +561,8 @@ class DocImage : public CompAccept, 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, 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::accept(this,v); } void parse(); private: DocNode *m_parent; + HtmlAttribList m_attribs; QString m_name; Type m_type; QString m_width; diff --git a/src/dot.cpp b/src/dot.cpp index 87f843b..d7de2db 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -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 *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; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 640ce0f..869cb8c 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -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(), diff --git a/src/entry.h b/src/entry.h index cf46027..82d1a36 100644 --- a/src/entry.h +++ b/src/entry.h @@ -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, diff --git a/src/filedef.cpp b/src/filedef.cpp index c8e3839..0642245 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -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()); diff --git a/src/groupdef.cpp b/src/groupdef.cpp index fd82f35..e9507ad 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -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(); } diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 03ca662..bea84fa 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -293,10 +293,9 @@ void HtmlDocVisitor::visit(DocFormula *f) { if (m_hide) return; bool bDisplay = f->text().at(0)=='\\'; - if (bDisplay) m_t << "

    " << endl; - m_t << "\"";" << endl; + m_t << "\"";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 << "

    " << endl; m_t << "name() << "\" alt=\"" - << baseName << "\">" << endl; + << baseName << "\"" << htmlAttribsToString(img->attribs()) << ">" << endl; if (img->hasCaption()) { m_t << "

    "; diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 26ace6e..a5113b6 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -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 << " " << endl; } -void HtmlGenerator::startMemberDocName() +void HtmlGenerator::startMemberDocName(bool align) { DBG_HTML(t << "" << endl;) t << " " << endl; - t << " "; + t << " "; } void HtmlGenerator::endMemberDocName() @@ -1000,13 +1009,18 @@ void HtmlGenerator::endMemberDocName() t << "" << endl; } -void HtmlGenerator::startParameterList() +void HtmlGenerator::startParameterList(bool openBracket) { DBG_HTML(t << "" << endl;) - t << " ( " << endl; + t << " "; + if (openBracket) + { + t << "( "; + } + t << "" << 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 << "" << endl;) t << " " << endl; - t << " " << endl; + t << " "; + if (key) t << key; + t << "" << endl; t << " " << endl; t << " "; } diff --git a/src/htmlgen.h b/src/htmlgen.h index a788f0a..4c303d6 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -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 << ""; } diff --git a/src/index.xsd b/src/index.xsd index 20918c0..1e214fa 100644 --- a/src/index.xsd +++ b/src/index.xsd @@ -32,6 +32,8 @@ + + diff --git a/src/index_xsd.h b/src/index_xsd.h index 0049282..f947a8a 100644 --- a/src/index_xsd.h +++ b/src/index_xsd.h @@ -32,6 +32,8 @@ " \n" " \n" " \n" +" \n" +" \n" " \n" " \n" " \n" diff --git a/src/latexgen.h b/src/latexgen.h index 652ccd4..2ec1563 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -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 *) {} diff --git a/src/mangen.h b/src/mangen.h index 1c8086e..a830a32 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -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 *) {} diff --git a/src/memberdef.cpp b/src/memberdef.cpp index cde2c5a..8a3b927 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -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(" "); - 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; +} + + diff --git a/src/memberdef.h b/src/memberdef.h index e29621f..b3dc90f 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -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; diff --git a/src/membergroup.h b/src/membergroup.h index 63e6bdb..454117b 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -22,7 +22,7 @@ #include #include "sortdict.h" -#define NOGROUP -1 +#define DOX_NOGROUP -1 class MemberDef; class ClassDef; diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 8e66402..6d00bbc 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -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); diff --git a/src/outputgen.h b/src/outputgen.h index ae9cc04..cb85446 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -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: diff --git a/src/outputlist.cpp b/src/outputlist.cpp index 1629a52..fbacc76 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -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) diff --git a/src/outputlist.h b/src/outputlist.h index d6c68c9..86600df 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -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); diff --git a/src/rtfgen.h b/src/rtfgen.h index 5785e58..65cd94e 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -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 *) {} diff --git a/src/scanner.l b/src/scanner.l index beb2ac6..873b377 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -106,7 +106,7 @@ static bool removeSlashes; static Specifier virt; static Specifier baseVirt; static QCString msType,msName,msArgs; -static int memberGroupId = NOGROUP; +static int memberGroupId = DOX_NOGROUP; static QCString memberGroupHeader; static QCString memberGroupDocs; static bool isTypedef; @@ -180,7 +180,7 @@ static void initParser() sharpCount = 0; roundCount = 0; curlyCount = 0; - memberGroupId = NOGROUP; + memberGroupId = DOX_NOGROUP; memberGroupRelates.resize(0); memberGroupInside.resize(0); mtype = Method; @@ -809,10 +809,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] %% <*>\x06[^\x06]*\x06 { // new file - if (memberGroupId!=NOGROUP) + if (memberGroupId!=DOX_NOGROUP) { warn(yyFileName,yyLineNr,"Warning: Missing //@}"); - memberGroupId=NOGROUP; + memberGroupId=DOX_NOGROUP; } yyLineNr= 0 ; // there is always an extra newline at the start of the file int i; @@ -1063,6 +1063,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] {ID} { // name of parameter current->argList->getLast()->name=yytext; } +"..." { // name of parameter + current->argList->getLast()->name=yytext; + } ":" { current->name += ':'; } @@ -1236,6 +1239,19 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->bodyLine = yyLineNr; BEGIN( CompoundName ); } +{B}*"@protocol"{BN}+ { // Objective-C protocol definition + lineCount(); + isTypedef=FALSE; + current->section = Entry::PROTOCOL_SEC; + current->objc = insideObjC = TRUE; + current->protection = protection = Public ; + addType( current ) ; + current->type += " protocol" ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + BEGIN( CompoundName ); + } {B}*"exception"{BN}+ { // Corba IDL exception isTypedef=FALSE; current->section = Entry::EXCEPTION_SEC; @@ -1247,6 +1263,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] lineCount(); BEGIN( CompoundName ); } +"@class" | // for Objective C class declarations {B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"class{" | {B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"class"{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; @@ -1290,15 +1307,6 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; - //if (current->mtArgList) // transfer template arguments - //{ - // if (current->tArgList) - // { - // delete current->tArgList; - // } - // current->tArgList = current->mtArgList; - // current->mtArgList = 0; - //} lineCount() ; if (yytext[yyleng-1]=='{') unput('{'); BEGIN( CompoundName ) ; @@ -1868,7 +1876,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (current_root->section & Entry::SCOPE_MASK) { current->inside = current_root->name+"::"; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupInside = current->inside.copy(); } @@ -1892,7 +1900,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] } } "//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" { - if (memberGroupId==NOGROUP && autoGroupStack.isEmpty()) + if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty()) { warn(yyFileName,yyLineNr, "Warning: end of group without matching begin."); @@ -2282,8 +2290,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->args = current->args.simplifyWhiteSpace(); current->type = current->type.simplifyWhiteSpace(); current->name = current->name.stripWhiteSpace(); - //printf("adding `%s' `%s' `%s' brief=%s\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data()); - if (insideObjC) // method definition follows + //printf("adding `%s' `%s' `%s' brief=%s insideObjC=%d %x\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data(),insideObjC,current->section); + if (insideObjC && + (current->section==Entry::INTERFACE_SEC || current->section==Entry::CATEGORY_SEC) + ) // method definition follows { BEGIN( ReadBodyIntf ) ; } @@ -3299,7 +3309,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (--sharpCount<=0) { current->name = removeRedundantWhiteSpace(current->name); - BEGIN( lastClassTemplSpecContext ); + if (current->section == Entry::PROTOCOL_SEC) + { // Objective-C protocol + unput('{'); // fake start of body + BEGIN( ClassVar ); + } + else + { + BEGIN( lastClassTemplSpecContext ); + } } } "<" { @@ -3312,6 +3330,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] {SCOPENAME} { current->name = yytext ; lineCount(); + if (current->section == Entry::PROTOCOL_SEC) + { + unput('{'); // fake start of body + } BEGIN( ClassVar ); } {CSSCOPENAME} { // C# style scope @@ -3335,6 +3357,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] BEGIN( FindMembers ); } } +"," // Multiple class forward declaration {ID} { if (insideIDL && strcmp(yytext,"switch")==0) { @@ -3381,6 +3404,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (insideObjC && *yytext=='(') // class category { current->name+='('; + current->section=Entry::CATEGORY_SEC; BEGIN( ClassCategory ); } else @@ -3404,7 +3428,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->type.resize(0); if (current->section == Entry::INTERFACE_SEC || current->section == Entry::STRUCT_SEC || - insidePHP || insideCS || insideD + insidePHP || insideCS || insideD || insideObjC ) baseProt=Public; else @@ -3430,7 +3454,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->name.sprintf("@%d",anonCount++); } curlyCount=0; - if (current->section==Entry::NAMESPACE_SEC) + if (current->section==Entry::PROTOCOL_SEC) + { + BEGIN( ReadBodyIntf ); + } + else if (current->section==Entry::NAMESPACE_SEC) { BEGIN( ReadNSBody ); } @@ -3467,6 +3495,24 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->args += ' '; current->args += name; } +^{B}*/[\-+] { + if (!insideObjC) + { + REJECT; + } + else + { + unput('{'); // insert start of fake body + } + } +"@end" { // empty ObjC interface + unput('d'); // insert fake body: {}@end + unput('n'); + unput('e'); + unput('@'); + unput('}'); + unput('{'); + } "<" { current->name += *yytext; sharpCount=1; lastSkipSharpContext = YY_START; @@ -3509,7 +3555,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] current->extends->append( new BaseInfo(baseName,baseProt,baseVirt) ); - if (current->section == Entry::INTERFACE_SEC || insideJava || insidePHP || insideCS || insideD) + if (current->section==Entry::INTERFACE_SEC || + insideJava || insidePHP || insideCS || + insideD || insideObjC) baseProt=Public; else baseProt=Private; @@ -3525,7 +3573,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] new BaseInfo(baseName,baseProt,baseVirt) ); curlyCount=0; - BEGIN( ReadBody ) ; + if (insideObjC) + { + BEGIN( ReadBodyIntf ); + } + else + { + BEGIN( ReadBody ) ; + } } {B}*"(" { roundCount++; @@ -3563,7 +3618,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (current_root->section & Entry::SCOPE_MASK) { current->inside = current_root->name+"::"; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupInside = current->inside.copy(); } @@ -3577,7 +3632,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (current_root->section & Entry::SCOPE_MASK) { current->inside = current_root->name+"::"; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupInside = current->inside.copy(); } @@ -3633,7 +3688,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (current_root->section & Entry::SCOPE_MASK) { current->inside = current_root->name+"::"; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupInside = current->inside.copy(); } @@ -3652,7 +3707,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] if (current_root->section & Entry::SCOPE_MASK) { current->inside = current_root->name+"::"; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupInside = current->inside.copy(); } @@ -4059,7 +4114,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] } ({ID}"::")*{ID} { current->relates = yytext; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupRelates = yytext; } @@ -4072,7 +4127,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ({ID}"::")*{ID} { current->relatesDup = TRUE; current->relates = yytext; - if (current->mGrpId!=NOGROUP) + if (current->mGrpId!=DOX_NOGROUP) { memberGroupRelates = yytext; } @@ -4536,13 +4591,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] BEGIN( GroupName ); } {CMD}"{" { - if (memberGroupId==NOGROUP && current->section==Entry::GROUPDOC_SEC) + if (memberGroupId==DOX_NOGROUP && current->section==Entry::GROUPDOC_SEC) { startGroupInDoc(); } } {CMD}"}" { - if (memberGroupId==NOGROUP && autoGroupStack.isEmpty()) + if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty()) { warn(yyFileName,yyLineNr, "Warning: end of group without matching begin."); @@ -5352,7 +5407,7 @@ static void startGroup() } else { - //if (memberGroupId!=NOGROUP) + //if (memberGroupId!=DOX_NOGROUP) //{ // //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. " // // "Previous command was found at line %d.",lastMemberGroupLine); @@ -5389,7 +5444,7 @@ static void startGroupInDoc() } else if (current->section == Entry::MEMBERGRP_SEC) /* scope for a member group: @name */ { - //if (memberGroupId!=NOGROUP) + //if (memberGroupId!=DOX_NOGROUP) //{ // printf("startGroupInDoc ends group %d\n",memberGroupId); // endGroup(); @@ -5414,7 +5469,7 @@ static void startGroupInDoc() static void endGroup() { - if (memberGroupId!=NOGROUP) // end of member group + if (memberGroupId!=DOX_NOGROUP) // end of member group { //Doxygen::memberDocDict.insert(memberGroupId, // new QCString(memberGroupDocs) @@ -5425,12 +5480,12 @@ static void endGroup() info->doc = memberGroupDocs; info->docFile = yyFileName; } - memberGroupId=NOGROUP; + memberGroupId=DOX_NOGROUP; memberGroupRelates.resize(0); memberGroupInside.resize(0); if (YY_START!=ReadInitializer) { - current->mGrpId=NOGROUP; + current->mGrpId=DOX_NOGROUP; current->relates.resize(0); } memberGroupDocs.resize(0); @@ -5450,7 +5505,7 @@ static void endGroup() static void forceEndGroup() { - while (memberGroupId!=NOGROUP || !autoGroupStack.isEmpty()) + while (memberGroupId!=DOX_NOGROUP || !autoGroupStack.isEmpty()) { //printf("forceEndGroup ends group %d\n",memberGroupId); endGroup(); @@ -5543,7 +5598,7 @@ static void parseCompounds(Entry *rt) current->protection = protection = Public ; } } - else // named struct, union + else // named struct, union, protocol, category { current->protection = protection = Public ; } @@ -5551,7 +5606,7 @@ static void parseCompounds(Entry *rt) virt = Normal; //printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat); - memberGroupId = NOGROUP; + memberGroupId = DOX_NOGROUP; memberGroupRelates.resize(0); memberGroupInside.resize(0); diff --git a/src/translator_br.h b/src/translator_br.h index 3a39c69..4e3279e 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -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 "; diff --git a/src/translator_ca.h b/src/translator_ca.h index 639519d..dff8361 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -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"; diff --git a/src/translator_cn.h b/src/translator_cn.h index 1083ea7..f044067 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -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+="µÄÎĵµÓÉÒÔÏÂÎļþÉú³É£º"; diff --git a/src/translator_cz.h b/src/translator_cz.h index feb92f6..9ccc00e 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -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 "; diff --git a/src/translator_de.h b/src/translator_de.h index 2f13544..0089d27 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -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"; diff --git a/src/translator_dk.h b/src/translator_dk.h index 4eae217..5eeee4d 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -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"; diff --git a/src/translator_en.h b/src/translator_en.h index 61e8aa4..bf7bbe3 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -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"; diff --git a/src/translator_es.h b/src/translator_es.h index 6298ca2..9aae1fa 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -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 "; diff --git a/src/translator_fi.h b/src/translator_fi.h index 0aba2c7..19d4b62 100644 --- a/src/translator_fi.h +++ b/src/translator_fi.h @@ -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" diff --git a/src/translator_fr.h b/src/translator_fr.h index 08f4a70..9a05607 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -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 "; diff --git a/src/translator_gr.h b/src/translator_gr.h index 8953339..3e39781 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -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+=" äçìéïõñãÞèçêå áðï ô"; diff --git a/src/translator_hr.h b/src/translator_hr.h index f326252..89b324c 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -370,6 +370,8 @@ class TranslatorCroatian : public Translator case ClassDef::Struct: result+=" strukture "; break; case ClassDef::Union: result+=" unije "; break; case ClassDef::Interface: result+=" suèelja (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+="suèelja (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) + ": "; diff --git a/src/translator_hu.h b/src/translator_hu.h index 2a843bb..ee6a438 100644 --- a/src/translator_hu.h +++ b/src/translator_hu.h @@ -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"; diff --git a/src/translator_it.h b/src/translator_it.h index 77162f8..4d39e94 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -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 "; diff --git a/src/translator_jp.h b/src/translator_jp.h index 573a63e..2ed60ff 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -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("¤ÎÀâÌÀ¤Ï¼¡¤Î¥Õ¥¡¥¤¥ë¤«¤éÀ¸À®¤µ¤ì¤Þ¤·¤¿:"); diff --git a/src/translator_kr.h b/src/translator_kr.h index b1cdeb7..f087589 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -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+="À» À§ÇÑ ¹®¼­È­´Â ´ÙÀ½ÀÇ ÆÄÀÏ"; diff --git a/src/translator_nl.h b/src/translator_nl.h index c367c30..3e80326 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -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"; diff --git a/src/translator_no.h b/src/translator_no.h index 60a7d83..3fd21ee 100644 --- a/src/translator_no.h +++ b/src/translator_no.h @@ -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 følgende fil"; diff --git a/src/translator_pl.h b/src/translator_pl.h index ec54ec1..278f747 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -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"; diff --git a/src/translator_pt.h b/src/translator_pt.h index 1016cdc..1a92daf 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -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 "; diff --git a/src/translator_ro.h b/src/translator_ro.h index b06fad5..d9e7124 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -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"; diff --git a/src/translator_ru.h b/src/translator_ru.h index 89a3272..db45e08 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -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; diff --git a/src/translator_se.h b/src/translator_se.h index 2c347ed..2b07dd9 100644 --- a/src/translator_se.h +++ b/src/translator_se.h @@ -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+=" gränssnitt"; 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 gränssnitt "; 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 från följande fil"; diff --git a/src/translator_si.h b/src/translator_si.h index 71924d3..bd70b28 100644 --- a/src/translator_si.h +++ b/src/translator_si.h @@ -274,6 +274,8 @@ class TranslatorSlovene : public TranslatorAdapter_1_2_16 case ClassDef::Struct: result+=" Struktura "; break; case ClassDef::Union: result+=" Mno¾ica "; 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"; diff --git a/src/translator_sk.h b/src/translator_sk.h index b061e1a..f9a52fd 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -629,6 +629,8 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_18 case ClassDef::Struct: result+="štruktúry "; 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+="výnimky "; break; } result+=clName; @@ -799,6 +801,8 @@ class TranslatorSlovak : public TranslatorAdapter_1_2_18 case ClassDef::Struct: result+="túto štruktúru (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+="túto výnimku"; break; } result+=" bola generovaná z "; diff --git a/src/translator_sr.h b/src/translator_sr.h index 2b1d4bc..37f7dcf 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -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 "; diff --git a/src/translator_tw.h b/src/translator_tw.h index f37a878..95c9568 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -646,6 +646,8 @@ class TranslatorChinesetraditional : public Translator case ClassDef::Struct: result+=" µ²ºc"; break; case ClassDef::Union: result+=" Áp¦X"; 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+="µ²ºc(structure)"; break; case ClassDef::Union: result+="Áp¦X(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+=" ¤å¥ó¬O¥Ñ¤U¦CÀɮפ¤²£¥Í"; diff --git a/src/translator_ua.h b/src/translator_ua.h index 8789220..2a4f97f 100644 --- a/src/translator_ua.h +++ b/src/translator_ua.h @@ -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; diff --git a/tmake/bin/tmake b/tmake/bin/tmake index 4862c3f..9158d7a 100755 --- a/tmake/bin/tmake +++ b/tmake/bin/tmake @@ -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 ( /^\<\<(.*)$/ ) { diff --git a/tmake/lib/hpux-acc/tmake.conf b/tmake/lib/hpux-acc/tmake.conf index 2c49784..a8f539d 100755 --- a/tmake/lib/hpux-acc/tmake.conf +++ b/tmake/lib/hpux-acc/tmake.conf @@ -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 -- cgit v0.12