diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2013-04-02 19:27:49 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2013-04-02 19:27:49 (GMT) |
commit | ebf4b3641c9149eaf4468aa8df64e1c7517e5f0c (patch) | |
tree | 23804fcf753b3487b9a1ea28d4d28b71fa4ae208 /src | |
parent | deaa34e0c1d990f37fe00e465ac7a22f705904f0 (diff) | |
download | Doxygen-ebf4b3641c9149eaf4468aa8df64e1c7517e5f0c.zip Doxygen-ebf4b3641c9149eaf4468aa8df64e1c7517e5f0c.tar.gz Doxygen-ebf4b3641c9149eaf4468aa8df64e1c7517e5f0c.tar.bz2 |
Release-1.8.3.1-20130402
Diffstat (limited to 'src')
106 files changed, 1954 insertions, 500 deletions
diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..3eae438 --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,47 @@ +*~ +.*sw? +\#* +.DS_Store + +*.rej +*.orig + +Makefile +*.pro +/.makeconfig +/.tmakeconfig +/VERSION +/src/libdoxycfg.t +/src/libdoxygen.t +/packages/rpm/doxygen.spec +/libmd5/Makefile.libmd5 +/qtools/Makefile.qtools +/src/Makefile.doxygen +/src/Makefile.libdoxycfg +/src/Makefile.libdoxygen + +/bin +/lib +/objects +/src/ce_lex.cpp +/src/ce_parse.cpp +/src/ce_parse.h +/src/code.cpp +/src/commentcnv.cpp +/src/commentscan.cpp +/src/config.cpp +/src/declinfo.cpp +/src/defargs.cpp +/src/doctokenizer.cpp +/src/fortrancode.cpp +/src/fortranscanner.cpp +/src/pre.cpp +/src/pycode.cpp +/src/pyscanner.cpp +/src/scanner.cpp +/src/tclscanner.cpp +/src/version.cpp +/src/vhdlcode.cpp +/src/vhdlparser.cpp +/src/vhdlparser.h +/src/vhdlscanner.cpp diff --git a/src/clangparser.cpp b/src/clangparser.cpp index c9e192f..08ad05d 100644 --- a/src/clangparser.cpp +++ b/src/clangparser.cpp @@ -122,6 +122,19 @@ static QStrList getClangOptions() return options; } +#if 0 +static void inclusionVisitor(CXFile includedFile, + CXSourceLocation* inclusionStack, + unsigned includeLen, + CXClientData clientData) +{ + const char *fileName = (const char *)clientData; + CXString incFileName = clang_getFileName(includedFile); + printf("--- file %s includes %s\n",fileName,clang_getCString(incFileName)); + clang_disposeString(incFileName); +} +#endif + void ClangParser::start(const char *fileName) { static bool clangAssistedParsing = Config_getBool("CLANG_ASSISTED_PARSING"); @@ -177,6 +190,10 @@ void ClangParser::start(const char *fileName) if (p->tu) { + //clang_getInclusions(p->tu, + // inclusionVisitor, + // (CXClientData)fileName + // ); for (uint i=0, n=clang_getNumDiagnostics(p->tu); i!=n; ++i) { CXDiagnostic diag = clang_getDiagnostic(p->tu, i); @@ -610,7 +627,7 @@ void ClangParser::writeSources(OutputList &ol,FileDef *fd) char const *s = clang_getCString(tokenString); CXCursorKind cursorKind = clang_getCursorKind(p->cursors[i]); CXTokenKind tokenKind = clang_getTokenKind(p->tokens[i]); - printf("%d:%d %s cursorKind=%d tokenKind=%d\n",line,column,s,cursorKind,tokenKind); + //printf("%d:%d %s cursorKind=%d tokenKind=%d\n",line,column,s,cursorKind,tokenKind); switch (tokenKind) { case CXToken_Keyword: diff --git a/src/classdef.cpp b/src/classdef.cpp index bb29882..dd32918 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -187,7 +187,7 @@ class ClassDefImpl bool isGeneric; - int spec; + uint64 spec; }; void ClassDefImpl::init(const char *defFileName, const char *name, @@ -435,6 +435,12 @@ void ClassDef::internalInsertMember(MemberDef *md, { switch (md->memberType()) { + case MemberType_Service: // UNO IDL + addMemberToList(MemberListType_services,md,TRUE); + break; + case MemberType_Interface: // UNO IDL + addMemberToList(MemberListType_interfaces,md,TRUE); + break; case MemberType_Signal: // Qt specific addMemberToList(MemberListType_signals,md,TRUE); break; @@ -581,6 +587,12 @@ void ClassDef::internalInsertMember(MemberDef *md, { switch (md->memberType()) { + case MemberType_Service: // UNO IDL + addMemberToList(MemberListType_serviceMembers,md,FALSE); + break; + case MemberType_Interface: // UNO IDL + addMemberToList(MemberListType_interfaceMembers,md,FALSE); + break; case MemberType_Property: addMemberToList(MemberListType_propertyMembers,md,FALSE); break; @@ -1035,6 +1047,14 @@ void ClassDef::showUsedFiles(OutputList &ol) { ol.parseText(theTranslator->trEnumGeneratedFromFiles(m_impl->files.count()==1)); } + else if (m_impl->compType==Service) + { + ol.parseText(theTranslator->trServiceGeneratedFromFiles(m_impl->files.count()==1)); + } + else if (m_impl->compType==Singleton) + { + ol.parseText(theTranslator->trSingletonGeneratedFromFiles(m_impl->files.count()==1)); + } else { ol.parseText(theTranslator->trGeneratedFromFiles( @@ -1811,6 +1831,7 @@ void ClassDef::addClassAttributes(OutputList &ol) if (isFinal()) sl.append("final"); if (isSealed()) sl.append("sealed"); if (isAbstract()) sl.append("abstract"); + if (getLanguage()==SrcLangExt_IDL && isPublished()) sl.append("published"); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); @@ -1923,10 +1944,12 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString & /*page writeAuthorSection(ol); break; case LayoutDocEntry::NamespaceNestedNamespaces: + case LayoutDocEntry::NamespaceNestedConstantGroups: case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileNamespaces: + case LayoutDocEntry::FileConstantGroups: case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludedByGraph: @@ -1980,6 +2003,14 @@ void ClassDef::writeDocumentation(OutputList &ol) { pageTitle = theTranslator->trEnumReference(displayName()); } + else if (m_impl->compType==Service) + { + pageTitle = theTranslator->trServiceReference(displayName()); + } + else if (m_impl->compType==Singleton) + { + pageTitle = theTranslator->trSingletonReference(displayName()); + } else { pageTitle = theTranslator->trCompoundReference(displayName(), @@ -2288,6 +2319,8 @@ void ClassDef::writeMemberList(OutputList &ol) md->isFriend() || md->isRelated() || md->isExplicit() || md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) || md->isSignal() || md->isSlot() || + (getLanguage()==SrcLangExt_IDL && + (md->isOptional() || md->isAttribute() || md->isUNOProperty())) || md->isStatic() || lang==SrcLangExt_VHDL ) && memberWritten) @@ -2315,6 +2348,18 @@ void ClassDef::writeMemberList(OutputList &ol) if (md->isStatic()) sl.append("static"); if (md->isSignal()) sl.append("signal"); if (md->isSlot()) sl.append("slot"); +// this is the extra member page + if (md->isOptional()) sl.append("optional"); + if (md->isAttribute()) sl.append("attribute"); + if (md->isUNOProperty()) sl.append("property"); + if (md->isReadonly()) sl.append("readonly"); + if (md->isBound()) sl.append("bound"); + if (md->isRemovable()) sl.append("removable"); + if (md->isConstrained()) sl.append("constrained"); + if (md->isTransient()) sl.append("transient"); + if (md->isMaybeVoid()) sl.append("maybevoid"); + if (md->isMaybeDefault()) sl.append("maybedefault"); + if (md->isMaybeAmbiguous())sl.append("maybeambiguous"); } const char *s=sl.first(); while (s) @@ -3159,7 +3204,7 @@ void ClassDef::determineImplUsageRelation() cd=getResolvedClass(getNamespaceDef()->name()+"::"+usedClassName,0,&templSpec); } if (cd==0) cd=getResolvedClass(name()+"::"+usedClassName,0,&templSpec); - if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try inbetween scopes! + if (cd==0) cd=getResolvedClass(usedClassName,0,&templSpec); // TODO: also try in-between scopes! //printf("Search for class %s result=%p\n",usedClassName.data(),cd); if (cd) // class exists { @@ -3221,7 +3266,7 @@ void ClassDef::addUsedInterfaceClasses(MemberDef *md,const char *typeStr) while ((i=re.match(type,p,&l))!=-1) // for each class name in the type { ClassDef *cd=getClass(name()+"::"+type.mid(i,l)); - if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try inbetween scopes! + if (cd==0) cd=getClass(type.mid(i,l)); // TODO: also try in-between scopes! if (cd && cd!=this && !isBaseClass(cd)) { if (m_impl->usesIntfClassDict==0) @@ -3317,6 +3362,8 @@ QCString ClassDef::compoundTypeString() const case Protocol: return "protocol"; case Category: return "category"; case Exception: return "exception"; + case Service: return "service"; + case Singleton: return "singleton"; default: return "unknown"; } } @@ -4337,6 +4384,11 @@ bool ClassDef::isSealed() const return m_impl->spec&Entry::Sealed; } +bool ClassDef::isPublished() const +{ + return m_impl->spec&Entry::Published; +} + bool ClassDef::isObjectiveC() const { return getLanguage()==SrcLangExt_ObjC; @@ -4537,7 +4589,7 @@ bool ClassDef::isGeneric() const return m_impl->isGeneric; } -void ClassDef::setClassSpecifier(int spec) +void ClassDef::setClassSpecifier(uint64 spec) { m_impl->spec = spec; } diff --git a/src/classdef.h b/src/classdef.h index 9db5cae..f4d5962 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -48,7 +48,8 @@ class ArgumentList; /** A class representing of a compound symbol. * - * A compound can be a class, struct, union, interface, or exception. + * A compound can be a class, struct, union, interface, service, singleton, + * or exception. * \note This class should be renamed to CompoundDef */ class ClassDef : public Definition @@ -61,7 +62,9 @@ class ClassDef : public Definition Interface, //=Entry::INTERFACE_SEC, Protocol, //=Entry::PROTOCOL_SEC, Category, //=Entry::CATEGORY_SEC, - Exception //=Entry::EXCEPTION_SEC + Exception, //=Entry::EXCEPTION_SEC + Service, //=Entry::CLASS_SEC + Singleton, //=Entry::CLASS_SEC }; /** Creates a new compound definition. @@ -256,6 +259,9 @@ class ClassDef : public Definition /** Returns TRUE if this class is marked as sealed */ bool isSealed() const; + /** Returns TRUE if this class is marked as published */ + bool isPublished() const; + /** Returns TRUE if this class represents an Objective-C 2.0 extension (nameless category) */ bool isExtension() const; @@ -320,7 +326,7 @@ class ClassDef : public Definition void setIsStatic(bool b); void setCompoundType(CompoundType t); void setClassName(const char *name); - void setClassSpecifier(int spec); + void setClassSpecifier(uint64 spec); void setTemplateArguments(ArgumentList *al); void setTemplateBaseClassNames(QDict<int> *templateNames); diff --git a/src/commentcnv.l b/src/commentcnv.l index 97f5194..6e7fa30 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -43,12 +43,6 @@ #define ADDCHAR(c) g_outBuf->addChar(c) #define ADDARRAY(a,s) g_outBuf->addArray(a,s) -enum GuardType -{ - Guard_Cond, - Guard_CondNot -}; - struct CondCtx { CondCtx(int line,QCString id,bool b) @@ -85,8 +79,6 @@ static bool g_lastEscaped; static int g_lastBlockContext; static bool g_pythonDocString; -static GuardType guardType; // kind of guard for conditional section - static SrcLangExt g_lang; static bool isFixedForm; // For Fortran @@ -181,22 +173,13 @@ static inline void copyToOutput(const char *s,int len) static void startCondSection(const char *sectId) { + //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); CondParser prs; bool expResult = prs.parse(g_fileName,g_lineNr,sectId); g_condStack.push(new CondCtx(g_lineNr,sectId,g_skip)); - if (guardType == Guard_Cond) // found @cond + if (!expResult) // not enabled { - if (!expResult) // not enabled - { - g_skip=TRUE; - } - } - else if (guardType == Guard_CondNot) // found @notcond - { - if (expResult) // enabled - { - g_skip=TRUE; - } + g_skip=TRUE; } } @@ -212,6 +195,7 @@ static void endCondSection() CondCtx *ctx = g_condStack.pop(); g_skip=ctx->skip; } + //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); } /** copies string \a s with length \a len to the output, while @@ -721,7 +705,6 @@ void replaceComment(int offset); } <CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section g_condCtx = YY_START; - guardType = Guard_Cond; BEGIN(CondLine); } <CComment,ReadLine>[\\@]"endcond"/[^a-z_A-Z0-9] { // end of conditional section @@ -769,7 +752,6 @@ void replaceComment(int offset); <CondLine>[ \t]* <CComment,ReadLine>[\\@]"cond"[ \t\r]*/\n | <CondLine>. { // forgot section id? - guardType = Guard_Cond; if (YY_START!=CondLine) g_condCtx=YY_START; bool oldSkip=g_skip; startCondSection(" "); // fake section id causing the section to be hidden unconditionally diff --git a/src/commentscan.l b/src/commentscan.l index 9b2994a..4ac850e 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -665,7 +665,7 @@ static void stripTrailingWhiteSpace(QCString &s) while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--; if (i!=(int)len-1) { - s.resize(i+2); // string upto and including char at pos i and \0 terminator + s.resize(i+2); // string up to and including char at pos i and \0 terminator } } @@ -877,7 +877,7 @@ LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]* CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]* SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID}) -MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ +MAILADDR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+ RCSTAG "$"{ID}":"[^\n$]+"$" %option noyywrap @@ -939,7 +939,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" * words and whitespace and other characters (#,?!, etc). * grouping commands (e.g. @{ and @}) * language switch (e.g. \~english or \~). - * mail adress (e.g. dimitri@stack.nl). + * mail address (e.g. dimitri@stack.nl). * quoted text, such as "foo@bar" * XML commands, <summary></summary><remarks></remarks> */ @@ -950,7 +950,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" <Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command addOutput(yytext); } -<Comment>{MAILADR} { // mail adress +<Comment>{MAILADDR} { // mail address addOutput(yytext); } <Comment>"\""[^"\n]*"\"" { // quoted text diff --git a/src/compound.xsd b/src/compound.xsd index fd24fc9..d623c5f 100644 --- a/src/compound.xsd +++ b/src/compound.xsd @@ -172,6 +172,18 @@ <xsd:attribute name="required" type="DoxBool" use="optional"/> <!-- Objective-C 2.0 property accessor --> <xsd:attribute name="accessor" type="DoxAccessor" use="optional"/> + <!-- UNO IDL --> + <xsd:attribute name="attribute" type="DoxBool" use="optional"/> + <xsd:attribute name="property" type="DoxBool" use="optional"/> + <xsd:attribute name="readonly" type="DoxBool" use="optional"/> + <xsd:attribute name="bound" type="DoxBool" use="optional"/> + <xsd:attribute name="removable" type="DoxBool" use="optional"/> + <xsd:attribute name="contrained" type="DoxBool" use="optional"/> + <xsd:attribute name="transient" type="DoxBool" use="optional"/> + <xsd:attribute name="maybevoid" type="DoxBool" use="optional"/> + <xsd:attribute name="maybedefault" type="DoxBool" use="optional"/> + <xsd:attribute name="maybeambiguous" type="DoxBool" use="optional"/> + </xsd:complexType> <xsd:complexType name="descriptionType" mixed="true"> @@ -742,6 +754,8 @@ <xsd:enumeration value="friend" /> <xsd:enumeration value="dcop" /> <xsd:enumeration value="slot" /> + <xsd:enumeration value="interface" /> + <xsd:enumeration value="service" /> </xsd:restriction> </xsd:simpleType> @@ -771,6 +785,10 @@ <xsd:enumeration value="protocol" /> <xsd:enumeration value="category" /> <xsd:enumeration value="exception" /> + <xsd:enumeration value="service" /> + <xsd:enumeration value="singleton" /> + <xsd:enumeration value="module" /> + <xsd:enumeration value="type" /> <xsd:enumeration value="file" /> <xsd:enumeration value="namespace" /> <xsd:enumeration value="group" /> diff --git a/src/compound_xsd.h b/src/compound_xsd.h index 7a726ae..8ec3633 100644 --- a/src/compound_xsd.h +++ b/src/compound_xsd.h @@ -172,6 +172,18 @@ " <xsd:attribute name=\"required\" type=\"DoxBool\" use=\"optional\"/>\n" " <!-- Objective-C 2.0 property accessor -->\n" " <xsd:attribute name=\"accessor\" type=\"DoxAccessor\" use=\"optional\"/>\n" +" <!-- UNO IDL -->\n" +" <xsd:attribute name=\"attribute\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"property\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"readonly\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"bound\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"removable\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"contrained\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"transient\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"maybevoid\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"maybedefault\" type=\"DoxBool\" use=\"optional\"/>\n" +" <xsd:attribute name=\"maybeambiguous\" type=\"DoxBool\" use=\"optional\"/>\n" +"\n" " </xsd:complexType>\n" "\n" " <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n" @@ -742,6 +754,8 @@ " <xsd:enumeration value=\"friend\" />\n" " <xsd:enumeration value=\"dcop\" />\n" " <xsd:enumeration value=\"slot\" />\n" +" <xsd:enumeration value=\"interface\" />\n" +" <xsd:enumeration value=\"service\" />\n" " </xsd:restriction>\n" " </xsd:simpleType>\n" "\n" @@ -771,6 +785,10 @@ " <xsd:enumeration value=\"protocol\" />\n" " <xsd:enumeration value=\"category\" />\n" " <xsd:enumeration value=\"exception\" />\n" +" <xsd:enumeration value=\"service\" />\n" +" <xsd:enumeration value=\"singleton\" />\n" +" <xsd:enumeration value=\"module\" />\n" +" <xsd:enumeration value=\"type\" />\n" " <xsd:enumeration value=\"file\" />\n" " <xsd:enumeration value=\"namespace\" />\n" " <xsd:enumeration value=\"group\" />\n" diff --git a/src/config.h b/src/config.h index a33909c..47bef4c 100644 --- a/src/config.h +++ b/src/config.h @@ -67,6 +67,7 @@ class ConfigOption QCString dependsOn() const { return m_dependency; } void addDependency(const char *dep) { m_dependency = dep; } void setEncoding(const QCString &e) { m_encoding = e; } + void setUserComment(const QCString &u) { m_userComment = u; } protected: virtual void writeTemplate(FTextStream &t,bool sl,bool upd) = 0; @@ -75,7 +76,7 @@ class ConfigOption virtual void writeXML(FTextStream&) {} virtual void init() {} - QCString convertToComment(const QCString &s); + QCString convertToComment(const QCString &s, const QCString &u); void writeBoolValue(FTextStream &t,bool v); void writeIntValue(FTextStream &t,int i); void writeStringValue(FTextStream &t,QCString &s); @@ -86,6 +87,7 @@ class ConfigOption QCString m_doc; QCString m_dependency; QCString m_encoding; + QCString m_userComment; OptionType m_kind; }; @@ -135,9 +137,13 @@ class ConfigList : public ConfigOption if (!sl) { t << endl; - t << convertToComment(m_doc); + t << convertToComment(m_doc, m_userComment); t << endl; } + else if (!m_userComment.isEmpty()) + { + t << convertToComment("", m_userComment); + } t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; writeStringList(t,m_value); t << "\n"; @@ -175,9 +181,13 @@ class ConfigEnum : public ConfigOption if (!sl) { t << endl; - t << convertToComment(m_doc); + t << convertToComment(m_doc, m_userComment); t << endl; } + else if (!m_userComment.isEmpty()) + { + t << convertToComment("", m_userComment); + } t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; writeStringValue(t,m_value); t << "\n"; @@ -216,9 +226,13 @@ class ConfigString : public ConfigOption if (!sl) { t << endl; - t << convertToComment(m_doc); + t << convertToComment(m_doc, m_userComment); t << endl; } + else if (!m_userComment.isEmpty()) + { + t << convertToComment("", m_userComment); + } t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; writeStringValue(t,m_value); t << "\n"; @@ -259,9 +273,13 @@ class ConfigInt : public ConfigOption if (!sl) { t << endl; - t << convertToComment(m_doc); + t << convertToComment(m_doc, m_userComment); t << endl; } + else if (!m_userComment.isEmpty()) + { + t << convertToComment("", m_userComment); + } t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; if (upd && !m_valueString.isEmpty()) { @@ -306,9 +324,13 @@ class ConfigBool : public ConfigOption if (!sl) { t << endl; - t << convertToComment(m_doc); + t << convertToComment(m_doc, m_userComment); t << endl; } + else if (!m_userComment.isEmpty()) + { + t << convertToComment("", m_userComment); + } t << m_name << m_spaces.left(MAX_OPTION_LENGTH-m_name.length()) << "="; if (upd && !m_valueString.isEmpty()) { @@ -570,6 +592,22 @@ class Config */ void create(); + /*! Append user comment + */ + void appendUserComment(const QCString &u) + { + m_userComment += u; + } + /*! Take the user comment and reset it internally + * \returns user comment + */ + QCString takeUserComment() + { + QCString result=m_userComment; + m_userComment.resize(0); + return result; + } + protected: Config() @@ -594,6 +632,7 @@ class Config QList<ConfigOption> *m_obsolete; QDict<ConfigOption> *m_dict; static Config *m_instance; + QCString m_userComment; bool m_initialized; }; diff --git a/src/config.l b/src/config.l index b32fd76..0c2bcbf 100644 --- a/src/config.l +++ b/src/config.l @@ -77,11 +77,11 @@ static QCString configStringRecode( /* ----------------------------------------------------------------- */ -QCString ConfigOption::convertToComment(const QCString &s) +QCString ConfigOption::convertToComment(const QCString &s, const QCString &u) { + //printf("convertToComment(%s)=%s\n",s.data(),u.data()); QCString result; - if (s.isEmpty()) return result; - else + if (!s.isEmpty()) { QCString tmp=s.stripWhiteSpace(); char *p=tmp.data(); @@ -101,6 +101,11 @@ QCString ConfigOption::convertToComment(const QCString &s) } result+='\n'; } + if (!u.isEmpty()) + { + if (!result.isEmpty()) result+='\n'; + result+= u; + } return result; } @@ -589,7 +594,8 @@ static void readIncludeFile(const char *incName) %% <*>\0x0d -<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); } +<Start,GetString,GetStrList,GetBool,SkipInvalid>"##".*"\n" { config->appendUserComment(yytext);} +<Start,GetString,GetStrList,GetBool,SkipInvalid>"#" { BEGIN(SkipComment); } <Start>[a-z_A-Z][a-z_A-Z0-9]*[ \t]*"=" { QCString cmd=yytext; cmd=cmd.left(cmd.length()-1).stripWhiteSpace(); ConfigOption *option = config->get(cmd); @@ -601,6 +607,7 @@ static void readIncludeFile(const char *incName) } else // known tag { + option->setUserComment(config->takeUserComment()); option->setEncoding(encoding); switch(option->kind()) { @@ -654,6 +661,7 @@ static void readIncludeFile(const char *incName) } else // known tag { + option->setUserComment(config->takeUserComment()); switch(option->kind()) { case ConfigOption::O_Info: @@ -798,6 +806,8 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd) t << "# This file describes the settings to be used by the documentation system\n"; t << "# doxygen (www.doxygen.org) for a project.\n"; t << "#\n"; + t << "# All text after a double hash (##) is considered a comment and is placed\n"; + t << "# in front of the TAG it is preceding .\n"; t << "# All text after a hash (#) is considered a comment and will be ignored.\n"; t << "# The format is:\n"; t << "# TAG = value [value, ...]\n"; @@ -811,6 +821,12 @@ void Config::writeTemplate(FTextStream &t,bool sl,bool upd) option->writeTemplate(t,sl,upd); option = m_options->next(); } + /* print last lines of user comment that were at the end of the file */ + if (m_userComment) + { + t << "\n"; + t << m_userComment; + } } void Config::writeXML(FTextStream &t) @@ -1130,6 +1146,21 @@ void Config::check() exit(1); } } + // Test to see if MathJax code file is valid + if (Config_getBool("USE_MATHJAX")) + { + QCString &MathJaxCodefile = Config_getString("MATHJAX_CODEFILE"); + if (!MathJaxCodefile.isEmpty()) + { + QFileInfo fi(MathJaxCodefile); + if (!fi.exists()) + { + config_err("error: tag MATHJAX_CODEFILE file `%s' " + "does not exist\n",MathJaxCodefile.data()); + exit(1); + } + } + } // Test to see if LaTeX header is valid QCString &latexHeaderFile = Config_getString("LATEX_HEADER"); if (!latexHeaderFile.isEmpty()) @@ -1506,6 +1537,24 @@ void Config::init() option->init(); option = m_options->next(); } + + // sanity check if all depends relations are valid + option = m_options->first(); + while (option) + { + QCString depName = option->dependsOn(); + if (!depName.isEmpty()) + { + ConfigOption * opt = Config::instance()->get(depName); + if (opt==0) + { + config_err("Config option '%s' has invalid depends relation on unknown option '%s'\n", + option->name().data(),depName.data()); + exit(1); + } + } + option = m_options->next(); + } } void Config::create() diff --git a/src/config.xml b/src/config.xml index 53e47da..db51172 100644 --- a/src/config.xml +++ b/src/config.xml @@ -819,7 +819,7 @@ for better parsing at the cost of reduced performance. This can be particularly helpful with template rich C++ code for which doxygen's built-in parser lacks the necessairy type information. ' defval='0'/> - <option type='string' id='CLANG_OPTIONS' settings='USE_LIBCLANG' docs=' + <option type='string' id='CLANG_OPTIONS' setting='USE_LIBCLANG' docs=' If clang assisted parsing is enabled you can provide the compiler with command line options that you would normally use when invoking the compiler. Note that the include paths will be set by doxygen based on the files and directory @@ -923,7 +923,7 @@ the luminance component of the colors in the HTML output. Values below the output darker. The value divided by 100 is the actual gamma applied, so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not change the gamma. -' minval='40' maxval='240' defval='80'/> +' minval='40' maxval='240' defval='80' depends='GENERATE_HTML'/> <option type='bool' id='HTML_TIMESTAMP' docs=' If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML page will contain the date and time when the page was generated. Setting @@ -943,7 +943,7 @@ visible (unless a fully collapsed tree already exceeds this amount). So setting the number of entries 1 will produce a full collapsed tree by default. 0 is a special value representing an infinite number of entries and will result in a full expanded tree by default. -' minval='0' maxval='9999' defval='100'/> +' minval='0' maxval='9999' defval='100' depends='GENERATE_HTML'/> <option type='bool' id='GENERATE_DOCSET' docs=' If the GENERATE_DOCSET tag is set to YES, additional index files will be generated that can be used as input for Apple's Xcode 3 @@ -1130,7 +1130,7 @@ configure the path to it using the MATHJAX_RELPATH option. ' defval='0'/> <option type='enum' id='MATHJAX_FORMAT' defval='HTML-CSS' docs=' When MathJax is enabled you can set the default output format to be used for -thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and +the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and SVG. The default value is HTML-CSS, which is slower, but has the best compatibility. '> @@ -1153,6 +1153,11 @@ The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension names that should be enabled during MathJax rendering. ' depends='USE_MATHJAX'> </option> + <option type='string' id='MATHJAX_CODEFILE' format='string' docs=' +The MATHJAX_CODEFILE tag can be used to specify a file with javascript +pieces of code that will be used on startup of the MathJax code. +' depends='USE_MATHJAX'> + </option> <option type='bool' id='SEARCHENGINE' docs=' When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript @@ -1300,7 +1305,7 @@ such as SOURCE_BROWSER. The LATEX_BIB_STYLE tag can be used to specify the style to use for the bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See http://en.wikipedia.org/wiki/BibTeX for more info. -' defval='plain'/> +' defval='plain' depends='GENERATE_LATEX'/> </group> <group name='RTF' docs='configuration options related to the RTF output'> <option type='bool' id='GENERATE_RTF' docs=' @@ -1575,7 +1580,7 @@ allowed to run in parallel. When set to 0 (the default) doxygen will base this on the number of processors available in the system. You can set it explicitly to a value larger than 0 to get control over the balance between CPU load and processing speed. -' defval='0' minval='0' maxval='32'/> +' defval='0' minval='0' maxval='32' dependes='HAVE_DOT'/> <option type='string' id='DOT_FONTNAME' format='string' docs=' By default doxygen will use the Helvetica font for all dot files that doxygen generates. When you want a differently looking font you can specify @@ -1619,7 +1624,7 @@ If the UML_LOOK tag is enabled, the fields and methods are shown inside the class node. If there are many fields or methods and many nodes the graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the number of items for each type to make the size more -managable. Set this to 0 for no limit. Note that the threshold may be +manageable. Set this to 0 for no limit. Note that the threshold may be exceeded by 50% before the limit is enforced. ' defval='10' minval='0' maxval='100' depends='HAVE_DOT'/> <option type='bool' id='TEMPLATE_RELATIONS' docs=' diff --git a/src/configoptions.cpp b/src/configoptions.cpp index e4eb361..327c883 100644 --- a/src/configoptions.cpp +++ b/src/configoptions.cpp @@ -1162,6 +1162,7 @@ void addConfigOptions(Config *cfg) FALSE ); #endif +#if USE_LIBCLANG //---- cs = cfg->addString( "CLANG_OPTIONS", @@ -1171,6 +1172,7 @@ void addConfigOptions(Config *cfg) "specified at INPUT and INCLUDE_PATH." ); cs->addDependency("CLANG_ASSISTED_PARSING"); +#endif //--------------------------------------------------------------------------- cfg->addInfo("Index","configuration options related to the alphabetical class index"); //--------------------------------------------------------------------------- @@ -1324,6 +1326,7 @@ void addConfigOptions(Config *cfg) "and 100 does not change the gamma.", 40,240,80 ); + ci->addDependency("GENERATE_HTML"); //---- cb = cfg->addBool( "HTML_TIMESTAMP", @@ -1355,6 +1358,7 @@ void addConfigOptions(Config *cfg) "and will result in a full expanded tree by default.", 0,9999,100 ); + ci->addDependency("GENERATE_HTML"); //---- cb = cfg->addBool( "GENERATE_DOCSET", @@ -1658,7 +1662,7 @@ void addConfigOptions(Config *cfg) ce = cfg->addEnum( "MATHJAX_FORMAT", "When MathJax is enabled you can set the default output format to be used for\n" - "thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and\n" + "the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and\n" "SVG. The default value is HTML-CSS, which is slower, but has the best\n" "compatibility.", "HTML-CSS" @@ -1688,6 +1692,13 @@ void addConfigOptions(Config *cfg) ); cl->addDependency("USE_MATHJAX"); //---- + cs = cfg->addString( + "MATHJAX_CODEFILE", + "The MATHJAX_CODEFILE tag can be used to specify a file with javascript\n" + "pieces of code that will be used on startup of the MathJax code." + ); + cs->addDependency("USE_MATHJAX"); + //---- cb = cfg->addBool( "SEARCHENGINE", "When the SEARCHENGINE tag is enabled doxygen will generate a search box\n" @@ -1924,6 +1935,7 @@ void addConfigOptions(Config *cfg) "http://en.wikipedia.org/wiki/BibTeX for more info." ); cs->setDefaultValue("plain"); + cs->addDependency("GENERATE_LATEX"); //--------------------------------------------------------------------------- cfg->addInfo("RTF","configuration options related to the RTF output"); //--------------------------------------------------------------------------- @@ -2424,7 +2436,7 @@ void addConfigOptions(Config *cfg) "the class node. If there are many fields or methods and many nodes the\n" "graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS\n" "threshold limits the number of items for each type to make the size more\n" - "managable. Set this to 0 for no limit. Note that the threshold may be\n" + "manageable. Set this to 0 for no limit. Note that the threshold may be\n" "exceeded by 50% before the limit is enforced.", 0,100,10 ); diff --git a/src/defgen.cpp b/src/defgen.cpp index 52f91c7..62a22e2 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -96,6 +96,8 @@ void generateDEFForMember(MemberDef *md, case MemberType_Variable: memType="variable"; break; case MemberType_Typedef: memType="typedef"; break; case MemberType_Enumeration: memType="enum"; break; + case MemberType_Interface: memType="interface"; break; + case MemberType_Service: memType="service"; break; case MemberType_Function: memType="function"; isFunc=TRUE; break; case MemberType_Signal: memType="signal"; isFunc=TRUE; break; case MemberType_Friend: memType="friend"; isFunc=TRUE; break; @@ -428,6 +430,8 @@ void generateDEFForClass(ClassDef *cd,FTextStream &t) if (numMembers>0) { generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubTypes),"public-type"); + generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_interfaces),"interfaces"); + generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_services),"services"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubMethods),"public-func"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubAttribs),"public-attrib"); generateDEFClassSection(cd,t,cd->getMemberList(MemberListType_pubSlots),"public-slot"); diff --git a/src/dirdef.cpp b/src/dirdef.cpp index cf3d69e..a63de25 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -403,10 +403,12 @@ void DirDef::writeDocumentation(OutputList &ol) case LayoutDocEntry::ClassAllMembersLink: case LayoutDocEntry::ClassUsedFiles: case LayoutDocEntry::NamespaceNestedNamespaces: + case LayoutDocEntry::NamespaceNestedConstantGroups: case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileNamespaces: + case LayoutDocEntry::FileConstantGroups: case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludedByGraph: diff --git a/src/docbookgen.cpp b/src/docbookgen.cpp index 335c8dc..8cd1063 100644 --- a/src/docbookgen.cpp +++ b/src/docbookgen.cpp @@ -433,21 +433,22 @@ static void generateDocbookForMember(MemberDef *md,FTextStream &t,Definition *de // group members are only visible in their group //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; QCString memType; - bool isFunc=FALSE; switch (md->memberType()) { case MemberType_Define: memType="define"; break; - case MemberType_EnumValue: ASSERT(0); break; - case MemberType_Property: memType="property"; break; - case MemberType_Event: memType="event"; break; + case MemberType_Function: memType="function"; break; case MemberType_Variable: memType="variable"; break; case MemberType_Typedef: memType="typedef"; break; case MemberType_Enumeration: memType="enum"; break; - case MemberType_Function: memType="function"; isFunc=TRUE; break; - case MemberType_Signal: memType="signal"; isFunc=TRUE; break; - case MemberType_Friend: memType="friend"; isFunc=TRUE; break; - case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break; - case MemberType_Slot: memType="slot"; isFunc=TRUE; break; + case MemberType_EnumValue: ASSERT(0); break; + case MemberType_Signal: memType="signal"; break; + case MemberType_Slot: memType="slot"; break; + case MemberType_Friend: memType="friend"; break; + case MemberType_DCOP: memType="dcop"; break; + case MemberType_Property: memType="property"; break; + case MemberType_Event: memType="event"; break; + case MemberType_Interface: memType="interface"; break; + case MemberType_Service: memType="service"; break; } QCString scopeName; if (md->getClassDef()) diff --git a/src/docsets.cpp b/src/docsets.cpp index a6c06ac..2aa2918 100644 --- a/src/docsets.cpp +++ b/src/docsets.cpp @@ -396,6 +396,10 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md, break; case MemberType_Event: type="event"; break; + case MemberType_Interface: + type="ifc"; break; + case MemberType_Service: + type="svc"; break; } cd = md->getClassDef(); nd = md->getNamespaceDef(); diff --git a/src/doctokenizer.l b/src/doctokenizer.l index cc8a944..a84b073 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -349,14 +349,14 @@ SPCMD3 {CMD}form#[0-9]+ SPCMD4 {CMD}"::" INOUT "inout"|"in"|"out"|("in"{BLANK}*","{BLANK}*"out")|("out"{BLANK}*","{BLANK}*"in") PARAMIO {CMD}param{BLANK}*"["{BLANK}*{INOUT}{BLANK}*"]" -TEMPCHAR [a-z_A-Z0-9,: \t\*\&] +TEMPCHAR [a-z_A-Z0-9.,: \t\*\&\(\)\[\]] FUNCCHAR [a-z_A-Z0-9,:\<\> \t\^\*\&\[\]] SCOPESEP "::"|"#"|"." TEMPLPART "<"{TEMPCHAR}*">" ANONNS "anonymous_namespace{"[^}]*"}" SCOPEPRE (({ID}{TEMPLPART}?)|{ANONNS}){SCOPESEP} SCOPEKEYS ":"({ID}":")* -SCOPECPP {SCOPEPRE}*(~)?{ID}("<"{TEMPCHAR}*">")? +SCOPECPP {SCOPEPRE}*(~)?{ID}{TEMPLPART}? SCOPEOBJC {SCOPEPRE}?{ID}{SCOPEKEYS}? SCOPEMASK {SCOPECPP}|{SCOPEOBJC} FUNCARG "("{FUNCCHAR}*")"({BLANK}*("volatile"|"const"){BLANK})? @@ -380,7 +380,7 @@ HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">" HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p" HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P" HTMLKEYW {HTMLKEYL}|{HTMLKEYU} -REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}(":")?){FUNCARG}? +REFWORD2 ("#"|"::")?((({ID}{TEMPLPART}?)|{ANONNS})("."|"#"|"::"|"-"|"/"))*({ID}{TEMPLPART}?(":")?){FUNCARG}? REFWORD3 ({ID}":")*{ID}":"? REFWORD {LABELID}|{REFWORD2}|{REFWORD3} diff --git a/src/dot.cpp b/src/dot.cpp index be0a32a..95c52fe 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -63,6 +63,18 @@ static const char svgZoomHeader[] = "<svg id=\"main\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" onload=\"init(evt)\">\n" +"<style type=\"text/css\"><![CDATA[\n" +".edge:hover path { stroke: red; }\n" +".edge:hover polygon { stroke: red; fill: red; }\n" +"]]></style>\n" +"<script type=\"text/javascript\"><![CDATA[\n" +"var edges = document.getElementsByTagName('g');\n" +"for (var i=0;i<edges.length;i++) {\n" +" if (edges[i].id.substr(0,4)=='edge') {\n" +" edges[i].setAttribute('class','edge');\n" +" }\n" +"}\n" +"]]></script>\n" " <defs>\n" " <circle id=\"rim\" cx=\"0\" cy=\"0\" r=\"7\"/>\n" " <circle id=\"rim2\" cx=\"0\" cy=\"0\" r=\"3.5\"/>\n" diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 4adc4fc..4dd39e3 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -295,6 +295,24 @@ static void findMember(EntryNav *rootNav, bool isFunc ); +enum FindBaseClassRelation_Mode +{ + TemplateInstances, + DocumentedOnly, + Undocumented +}; + +static bool findClassRelation( + EntryNav *rootNav, + Definition *context, + ClassDef *cd, + BaseInfo *bi, + QDict<int> *templateNames, + /*bool insertUndocumented*/ + FindBaseClassRelation_Mode mode, + bool isArtificial + ); + /** A struct contained the data for an STL class */ struct STLInfo { @@ -1138,7 +1156,8 @@ ArgumentList *getTemplateArgumentsFromName( return ali.current(); } -static ClassDef::CompoundType convertToCompoundType(int section,int specifier) +static +ClassDef::CompoundType convertToCompoundType(int section,uint64 specifier) { ClassDef::CompoundType sec=ClassDef::Class; if (specifier&Entry::Struct) @@ -1153,6 +1172,10 @@ static ClassDef::CompoundType convertToCompoundType(int section,int specifier) sec=ClassDef::Protocol; else if (specifier&Entry::Exception) sec=ClassDef::Exception; + else if (specifier&Entry::Service) + sec=ClassDef::Service; + else if (specifier&Entry::Singleton) + sec=ClassDef::Singleton; switch(section) { @@ -1180,6 +1203,12 @@ static ClassDef::CompoundType convertToCompoundType(int section,int specifier) case Entry::EXCEPTIONDOC_SEC: sec=ClassDef::Exception; break; + case Entry::SERVICEDOC_SEC: + sec=ClassDef::Service; + break; + case Entry::SINGLETONDOC_SEC: + sec=ClassDef::Singleton; + break; } return sec; } @@ -1716,7 +1745,7 @@ static void buildNamespaceList(EntryNav *rootNav) tagFileName=rootNav->tagInfo()->fileName; } //printf("++ new namespace %s lang=%s\n",fullName.data(),langToString(root->lang).data()); - NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,root->startColumn,fullName,tagName,tagFileName); + NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,root->startColumn,fullName,tagName,tagFileName,root->type,root->spec&Entry::Published); nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); nd->addSectionsToDefinition(root->anchors); @@ -2275,7 +2304,7 @@ static MemberDef *addVariableToClass( // new member variable, typedef or enum value MemberDef *md=new MemberDef( root->fileName,root->startLine,root->startColumn, - root->type,name,root->args,0, + root->type,name,root->args,root->exception, prot,Normal,root->stat,related, mtype,root->tArgLists ? root->tArgLists->last() : 0,0); md->setTagInfo(rootNav->tagInfo()); @@ -3002,6 +3031,148 @@ static void buildVarList(EntryNav *rootNav) } //---------------------------------------------------------------------- +// Searches the Entry tree for Interface sections (UNO IDL only). +// If found they are stored in their service or in the global list. +// + +static void addInterfaceOrServiceToServiceOrSingleton( + EntryNav *const rootNav, + ClassDef *const cd, + QCString const& rname) +{ + Entry *const root = rootNav->entry(); + FileDef *const fd = rootNav->fileDef(); + enum MemberType const type = (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC) + ? MemberType_Interface + : MemberType_Service; + MemberDef *const md = new MemberDef( + root->fileName, root->startLine, root->startColumn, root->type, rname, + "", "", root->protection, root->virt, root->stat, Member, + type, 0, root->argList); + md->setTagInfo(rootNav->tagInfo()); + md->setMemberClass(cd); + md->setDocumentation(root->doc,root->docFile,root->docLine); + md->setDocsForDefinition(false); + md->setBriefDescription(root->brief,root->briefFile,root->briefLine); + md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine); + md->setBodySegment(root->bodyLine,root->endBodyLine); + md->setMemberSpecifiers(root->spec); + md->setMemberGroupId(root->mGrpId); + md->setTypeConstraints(root->typeConstr); + md->setLanguage(root->lang); + md->setBodyDef(fd); + md->setFileDef(fd); + md->addSectionsToDefinition(root->anchors); + QCString const def = root->type + " " + rname; + md->setDefinition(def); + md->enableCallGraph(root->callGraph); + md->enableCallerGraph(root->callerGraph); + + Debug::print(Debug::Functions,0, + " Interface Member:\n" + " `%s' `%s' proto=%d\n" + " def=`%s'\n", + root->type.data(), + rname.data(), + root->proto, + def.data() + ); + + // add member to the global list of all members + MemberName *mn; + if ((mn=Doxygen::memberNameSDict->find(rname))) + { + mn->append(md); + } + else + { + mn = new MemberName(rname); + mn->append(md); + Doxygen::memberNameSDict->append(rname,mn); + } + + // add member to the class cd + cd->insertMember(md); + // also add the member as a "base" (to get nicer diagrams) + // hmm... should "optional" interface/service be handled differently? + BaseInfo base(rname,Public,Normal); + findClassRelation(rootNav,cd,cd,&base,0,DocumentedOnly,true) + || findClassRelation(rootNav,cd,cd,&base,0,Undocumented,true); + // add file to list of used files + cd->insertUsedFile(root->fileName); + + addMemberToGroups(root,md); + rootNav->changeSection(Entry::EMPTY_SEC); + md->setRefItems(root->sli); +} + +static void buildInterfaceAndServiceList(EntryNav *const rootNav) +{ + if (rootNav->section()==Entry::EXPORTED_INTERFACE_SEC || + rootNav->section()==Entry::INCLUDED_SERVICE_SEC) + { + rootNav->loadEntry(g_storage); + Entry *const root = rootNav->entry(); + + Debug::print(Debug::Functions,0, + "EXPORTED_INTERFACE_SEC:\n" + " `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%lld proto=%d docFile=%s\n", + root->type.data(), + rootNav->parent()->name().data(), + root->name.data(), + root->args.data(), + root->relates.data(), + root->relatesType, + root->fileName.data(), + root->startLine, + root->bodyLine, + root->tArgLists ? (int)root->tArgLists->count() : -1, + root->mGrpId, + root->spec, + root->proto, + root->docFile.data() + ); + + QCString const rname = removeRedundantWhiteSpace(root->name); + + if (!rname.isEmpty()) + { + QCString const scope = rootNav->parent()->name(); + ClassDef *const cd = getClass(scope); + assert(cd); + if (cd && ((ClassDef::Interface == cd->compoundType()) || + (ClassDef::Service == cd->compoundType()) || + (ClassDef::Singleton == cd->compoundType()))) + { + addInterfaceOrServiceToServiceOrSingleton(rootNav,cd,rname); + } + else + { + assert(false); // was checked by scanner.l + } + } + else if (rname.isEmpty()) + { + warn(root->fileName,root->startLine, + "warning: Illegal member name found."); + } + + rootNav->releaseEntry(); + } + // can only have these in IDL anyway + switch (rootNav->lang()) + { + case SrcLangExt_Unknown: // fall through (root node always is Unknown) + case SrcLangExt_IDL: + RECURSE_ENTRYTREE(buildInterfaceAndServiceList,rootNav); + break; + default: + return; // nothing to do here + } +} + + +//---------------------------------------------------------------------- // Searches the Entry tree for Function sections. // If found they are stored in their class or in the global list. @@ -3188,7 +3359,7 @@ static void buildFunctionList(EntryNav *rootNav) Debug::print(Debug::Functions,0, "FUNCTION_SEC:\n" - " `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%d proto=%d docFile=%s\n", + " `%s' `%s'::`%s' `%s' relates=`%s' relatesType=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%lld proto=%d docFile=%s\n", root->type.data(), rootNav->parent()->name().data(), root->name.data(), @@ -3930,24 +4101,6 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co return result; } -enum FindBaseClassRelation_Mode -{ - TemplateInstances, - DocumentedOnly, - Undocumented -}; - -static bool findClassRelation( - EntryNav *rootNav, - Definition *context, - ClassDef *cd, - BaseInfo *bi, - QDict<int> *templateNames, - /*bool insertUndocumented*/ - FindBaseClassRelation_Mode mode, - bool isArtificial - ); - static void findUsedClassesForClass(EntryNav *rootNav, Definition *context, @@ -5528,7 +5681,7 @@ static void findMember(EntryNav *rootNav, Debug::print(Debug::FindMembers,0, "findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d," "isFunc=%d mGrpId=%d tArgList=%p (#=%d) " - "spec=%d lang=%x\n", + "spec=%lld lang=%x\n", root,funcDecl.data(),root->relates.data(),overloaded,isFunc,root->mGrpId, root->tArgLists,root->tArgLists ? root->tArgLists->count() : 0, root->spec,root->lang @@ -6563,7 +6716,7 @@ static void filterMemberDocumentation(EntryNav *rootNav) Entry *root = rootNav->entry(); int i=-1,l; Debug::print(Debug::FindMembers,0, - "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->spec=%d root->mGrpId=%d\n", + "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->spec=%lld root->mGrpId=%d\n", root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->spec,root->mGrpId ); //printf("rootNav->parent()->name()=%s\n",rootNav->parent()->name().data()); @@ -6668,6 +6821,11 @@ static void filterMemberDocumentation(EntryNav *rootNav) //if (!root->relates.isEmpty()) printf(" Relates %s\n",root->relates.data()); findMember(rootNav,root->name,FALSE,FALSE); } + else if (root->section==Entry::EXPORTED_INTERFACE_SEC || + root->section==Entry::INCLUDED_SERVICE_SEC) + { + findMember(rootNav,root->type + " " + root->name,FALSE,FALSE); + } else { // skip section @@ -6682,7 +6840,9 @@ static void findMemberDocumentation(EntryNav *rootNav) rootNav->section()==Entry::FUNCTION_SEC || rootNav->section()==Entry::VARIABLE_SEC || rootNav->section()==Entry::VARIABLEDOC_SEC || - rootNav->section()==Entry::DEFINE_SEC + rootNav->section()==Entry::DEFINE_SEC || + rootNav->section()==Entry::INCLUDED_SERVICE_SEC || + rootNav->section()==Entry::EXPORTED_INTERFACE_SEC ) { rootNav->loadEntry(g_storage); @@ -6824,6 +6984,7 @@ static void findEnums(EntryNav *rootNav) if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd); md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodyDef(rootNav->fileDef()); + md->setMemberSpecifiers(root->spec); // UNO IDL "published" md->setEnumBaseType(root->args); //printf("Enum %s definition at line %d of %s: protection=%d\n", // root->name.data(),root->bodyLine,root->fileName.data(),root->protection); @@ -10504,6 +10665,9 @@ void parseInput() buildVarList(rootNav); g_s.end(); + g_s.begin("Building interface member list...\n"); + buildInterfaceAndServiceList(rootNav); // UNO IDL + g_s.begin("Building member list...\n"); // using class info only ! buildFunctionList(rootNav); g_s.end(); diff --git a/src/doxygen.css b/src/doxygen.css index 2781983..715935a 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -1,7 +1,7 @@ /* The standard CSS for doxygen $doxygenversion */ body, table, div, p, dl { - font: 400 14px/19px Roboto,sans-serif; + font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ @@ -687,6 +687,7 @@ div.directory { .directory td.entry { white-space: nowrap; padding-right: 6px; + padding-top: 3px; } .directory td.entry a { diff --git a/src/doxygen.md b/src/doxygen.md index 0cf222e..7941149 100644 --- a/src/doxygen.md +++ b/src/doxygen.md @@ -6,7 +6,7 @@ Introduction This page provides a high-level overview of the internals of doxygen, with links to the relevant parts of the code. This document is intended for -developers who want to work on doxygen. Users of doxygen are refered to the +developers who want to work on doxygen. Users of doxygen are referred to the [User Manual](http://www.doxygen.org/manual.html). The generic starting point of the application is of cource the main() function. diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in index baa53ae..15af1f5 100644 --- a/src/doxygen.pro.in +++ b/src/doxygen.pro.in @@ -20,7 +20,7 @@ HEADERS = doxygen.h SOURCES = main.cpp unix:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% win32:INCLUDEPATH += . -win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread +win32-mingw:LIBS += -L../lib -ldoxygen -ldoxycfg -lqtools -lmd5 -lpthread %%SQLITE3_LIBS%% %%LIBCLANG_LIBS%% win32-msvc:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib win32-msvc:TMAKE_LFLAGS += /LIBPATH:..\lib win32-borland:LIBS += qtools.lib md5.lib doxygen.lib doxycfg.lib shell32.lib iconv.lib diff --git a/src/doxygen_css.h b/src/doxygen_css.h index b5d492e..601b28f 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -1,7 +1,7 @@ "/* The standard CSS for doxygen $doxygenversion */\n" "\n" "body, table, div, p, dl {\n" -" font: 400 14px/19px Roboto,sans-serif;\n" +" font: 400 14px/22px Roboto,sans-serif;\n" "}\n" "\n" "/* @group Heading Levels */\n" @@ -687,6 +687,7 @@ ".directory td.entry {\n" " white-space: nowrap;\n" " padding-right: 6px;\n" +" padding-top: 3px;\n" "}\n" "\n" ".directory td.entry a {\n" diff --git a/src/entry.h b/src/entry.h index 1c8abac..cecd095 100644 --- a/src/entry.h +++ b/src/entry.h @@ -79,9 +79,11 @@ class Entry INTERFACEDOC_SEC = 0x00010000, PROTOCOLDOC_SEC = 0x00020000, CATEGORYDOC_SEC = 0x00040000, + SERVICEDOC_SEC = 0x00080000, + SINGLETONDOC_SEC = 0x00100000, COMPOUNDDOC_MASK = CLASSDOC_SEC | STRUCTDOC_SEC | UNIONDOC_SEC | INTERFACEDOC_SEC | EXCEPTIONDOC_SEC | PROTOCOLDOC_SEC | - CATEGORYDOC_SEC, + CATEGORYDOC_SEC | SERVICEDOC_SEC | SINGLETONDOC_SEC, SOURCE_SEC = 0x00400000, HEADER_SEC = 0x00800000, @@ -111,56 +113,69 @@ class Entry PACKAGEDOC_SEC = 0x16000000, OBJCIMPL_SEC = 0x17000000, DIRDOC_SEC = 0x18000000 + ,EXPORTED_INTERFACE_SEC = 0x19000000 + ,INCLUDED_SERVICE_SEC = 0x1A000000 }; - enum MemberSpecifier - { - Inline = 0x00000001, - Explicit = 0x00000002, - Mutable = 0x00000004, - Settable = 0x00000008, - Gettable = 0x00000010, - Readable = 0x00000020, - Writable = 0x00000040, - Final = 0x00000080, - Abstract = 0x00000100, - Addable = 0x00000200, - Removable = 0x00000400, - Raisable = 0x00000800, - Override = 0x00001000, - New = 0x00002000, - Sealed = 0x00004000, - Initonly = 0x00008000, - Optional = 0x00010000, - Required = 0x00020000, - NonAtomic = 0x00040000, - Copy = 0x00080000, - Retain = 0x00100000, - Assign = 0x00200000, - Strong = 0x00400000, - Weak = 0x00800000, - Unretained = 0x01000000, - Alias = 0x02000000, - ConstExp = 0x04000000, - Default = 0x08000000, - Delete = 0x10000000, - NoExcept = 0x20000000 - }; - enum ClassSpecifier - { - Template = 0x0001, - Generic = 0x0002, - Ref = 0x0004, - Value = 0x0008, - Interface = 0x0010, - Struct = 0x0020, - Union = 0x0040, - Exception = 0x0080, - Protocol = 0x0100, - Category = 0x0200, - SealedClass = 0x0400, - AbstractClass = 0x0800, - Enum = 0x1000 // for Java-style enums - }; + + // class specifiers (add new items to the end) + static const uint64 Template = (1ULL<<0); + static const uint64 Generic = (1ULL<<1); + static const uint64 Ref = (1ULL<<2); + static const uint64 Value = (1ULL<<3); + static const uint64 Interface = (1ULL<<4); + static const uint64 Struct = (1ULL<<5); + static const uint64 Union = (1ULL<<6); + static const uint64 Exception = (1ULL<<7); + static const uint64 Protocol = (1ULL<<8); + static const uint64 Category = (1ULL<<9); + static const uint64 SealedClass = (1ULL<<10); + static const uint64 AbstractClass = (1ULL<<11); + static const uint64 Enum = (1ULL<<12); // for Java-style enums + static const uint64 Service = (1ULL<<13); // UNO IDL + static const uint64 Singleton = (1ULL<<14); // UNO IDL + + // member specifiers (add new items to the beginning) + static const uint64 Inline = (1ULL<<24); + static const uint64 Explicit = (1ULL<<25); + static const uint64 Mutable = (1ULL<<26); + static const uint64 Settable = (1ULL<<27); + static const uint64 Gettable = (1ULL<<28); + static const uint64 Readable = (1ULL<<29); + static const uint64 Writable = (1ULL<<30); + static const uint64 Final = (1ULL<<31); + static const uint64 Abstract = (1ULL<<32); + static const uint64 Addable = (1ULL<<33); + static const uint64 Removable = (1ULL<<34); + static const uint64 Raisable = (1ULL<<35); + static const uint64 Override = (1ULL<<36); + static const uint64 New = (1ULL<<37); + static const uint64 Sealed = (1ULL<<38); + static const uint64 Initonly = (1ULL<<39); + static const uint64 Optional = (1ULL<<40); + static const uint64 Required = (1ULL<<41); + static const uint64 NonAtomic = (1ULL<<42); + static const uint64 Copy = (1ULL<<43); + static const uint64 Retain = (1ULL<<44); + static const uint64 Assign = (1ULL<<45); + static const uint64 Strong = (1ULL<<46); + static const uint64 Weak = (1ULL<<47); + static const uint64 Unretained = (1ULL<<48); + static const uint64 Alias = (1ULL<<49); + static const uint64 ConstExp = (1ULL<<50); + static const uint64 Default = (1ULL<<51); + static const uint64 Delete = (1ULL<<52); + static const uint64 NoExcept = (1ULL<<53); + static const uint64 Attribute = (1ULL<<54); // UNO IDL attribute + static const uint64 Property = (1ULL<<55); // UNO IDL property + static const uint64 Readonly = (1ULL<<56); // on UNO IDL attribute or property + static const uint64 Bound = (1ULL<<57); // on UNO IDL attribute or property + static const uint64 Constrained = (1ULL<<58); // on UNO IDL property + static const uint64 Transient = (1ULL<<59); // on UNO IDL property + static const uint64 MaybeVoid = (1ULL<<60); // on UNO IDL property + static const uint64 MaybeDefault = (1ULL<<61); // on UNO IDL property + static const uint64 MaybeAmbiguous = (1ULL<<62); // on UNO IDL property + static const uint64 Published = (1ULL<<63); // UNO IDL keyword + enum GroupDocType { GROUPDOC_NORMAL, //!< defgroup @@ -220,7 +235,7 @@ class Entry // content Protection protection; //!< class protection MethodTypes mtype; //!< signal, slot, (dcop) method, or property? - int spec; //!< class/member specifiers + uint64 spec; //!< class/member specifiers int initLines; //!< define/variable initializer lines to show bool stat; //!< static ? bool explicitExternal; //!< explicitly defined as external? diff --git a/src/filedef.cpp b/src/filedef.cpp index 9c8e944..82db047 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -411,10 +411,11 @@ void FileDef::writeSourceLink(OutputList &ol) } } -void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title) +void FileDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title, + bool const isConstantGroup) { // write list of namespaces - if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title); + if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup); } void FileDef::writeClassDeclarations(OutputList &ol,const QCString &title) @@ -646,9 +647,15 @@ void FileDef::writeDocumentation(OutputList &ol) case LayoutDocEntry::FileNamespaces: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; - writeNamespaceDeclarations(ol,ls->title(lang)); + writeNamespaceDeclarations(ol,ls->title(lang),false); } break; + case LayoutDocEntry::FileConstantGroups: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNamespaceDeclarations(ol,ls->title(lang),true); + } + break; case LayoutDocEntry::MemberGroups: writeMemberGroups(ol); break; @@ -693,6 +700,7 @@ void FileDef::writeDocumentation(OutputList &ol) case LayoutDocEntry::ClassUsedFiles: case LayoutDocEntry::ClassInlineClasses: case LayoutDocEntry::NamespaceNestedNamespaces: + case LayoutDocEntry::NamespaceNestedConstantGroups: case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::GroupClasses: diff --git a/src/filedef.h b/src/filedef.h index 1d037d5..7376861 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -190,7 +190,8 @@ class FileDef : public Definition void writeMemberGroups(OutputList &ol); void writeAuthorSection(OutputList &ol); void writeSourceLink(OutputList &ol); - void writeNamespaceDeclarations(OutputList &ol,const QCString &title); + void writeNamespaceDeclarations(OutputList &ol,const QCString &title, + bool isConstantGroup); void writeClassDeclarations(OutputList &ol,const QCString &title); void writeInlineClasses(OutputList &ol); void startMemberDeclarations(OutputList &ol); diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 8a2103d..83da1d0 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -78,7 +78,7 @@ enum InterfaceType { IF_NONE, IF_SPECIFIC, IF_GENERIC, IF_ABSTRACT }; // {{{ ----- Helper structs ----- //! Holds modifiers (ie attributes) for one symbol (variable, function, etc) struct SymbolModifiers { - enum Protection {NONE_P, PUBLIC, PRIVATE, PROTECTED}; + enum Protection {NONE_P, PUBLIC, PRIVATE}; enum Direction {NONE_D, IN, OUT, INOUT}; //!< This is only used with function return value. @@ -86,6 +86,7 @@ struct SymbolModifiers { Protection protection; Direction direction; bool optional; + bool protect; QCString dimension; bool allocatable; bool external; @@ -101,7 +102,7 @@ struct SymbolModifiers { QCString passVar; SymbolModifiers() : type(), returnName(), protection(NONE_P), direction(NONE_D), - optional(FALSE), dimension(), allocatable(FALSE), + optional(FALSE), protect(FALSE), dimension(), allocatable(FALSE), external(FALSE), intrinsic(FALSE), parameter(FALSE), pointer(FALSE), target(FALSE), save(FALSE), deferred(FALSE), nonoverridable(FALSE), nopass(FALSE), pass(FALSE), passVar() {} @@ -145,9 +146,9 @@ struct CommentInPrepass { }; static QList<CommentInPrepass> comments; -#define MAX_INCLUDE_DEPTH 10 -YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; +YY_BUFFER_STATE *include_stack = NULL; int include_stack_ptr = 0; +int include_stack_cnt = 0; static QFile inputFile; static QCString yyFileName; @@ -257,7 +258,7 @@ TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLE INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")" ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PROTECTED|PRIVATE|PUBLIC|SAVE|TARGET|NOPASS|PASS{ARGS}?|DEFERRED|NON_OVERRIDABLE) -ACCESS_SPEC (PROTECTED|PRIVATE|PUBLIC) +ACCESS_SPEC (PRIVATE|PUBLIC) LANGUAGE_BIND_SPEC BIND{BS}"("{BS}C{BS}(,{BS}NAME{BS}"="{BS}"\""(.*)"\""{BS})?")" /* Assume that attribute statements are almost the same as attributes. */ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} @@ -549,9 +550,6 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA /*------- access specification --------------------------------------------------------------------------*/ -<ModuleBody>protected/{BS}(\n|"!") { defaultProtection = Protected; - current->protection = defaultProtection ; - } <ModuleBody>private/{BS}(\n|"!") { defaultProtection = Private; current->protection = defaultProtection ; } @@ -593,10 +591,6 @@ private { current->protection = Private; typeProtection = Private; } -protected { - current->protection = Protected; - typeProtection = Protected; - } {LANGUAGE_BIND_SPEC} { /* ignored for now */ } @@ -1406,10 +1400,10 @@ static const char* prepassFixedForm(const char* contents) static void pushBuffer(QCString& buffer) { - if ( include_stack_ptr >= MAX_INCLUDE_DEPTH ) + if (include_stack_cnt <= include_stack_ptr) { - fprintf( stderr, "Stack buffers nested too deeply" ); - exit( 1 ); + include_stack_cnt++; + include_stack = (YY_BUFFER_STATE *)realloc(include_stack, include_stack_cnt * sizeof(YY_BUFFER_STATE)); } include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; yy_switch_to_buffer(yy_scan_string(buffer)); @@ -1501,6 +1495,7 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs) allocatable |= mdfs.allocatable; external |= mdfs.external; intrinsic |= mdfs.intrinsic; + protect |= mdfs.protect; parameter |= mdfs.parameter; pointer |= mdfs.pointer; target |= mdfs.target; @@ -1542,7 +1537,7 @@ SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString) } else if (mdfString=="protected") { - newMdf.protection = SymbolModifiers::PROTECTED; + newMdf.protect = TRUE; } else if (mdfString=="optional") { @@ -1734,7 +1729,7 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs) if (!typeName.isEmpty()) typeName += ", "; typeName += "private"; } - else if (mdfs.protection == SymbolModifiers::PROTECTED) + if (mdfs.protect) { if (!typeName.isEmpty()) typeName += ", "; typeName += "protected"; @@ -1760,8 +1755,6 @@ static void applyModifiers(Entry *ent, SymbolModifiers& mdfs) ent->protection = Public; else if (mdfs.protection == SymbolModifiers::PRIVATE) ent->protection = Private; - else if (mdfs.protection == SymbolModifiers::PROTECTED) - ent->protection = Protected; } /*! Starts the new scope in fortran program. Consider using this function when @@ -2107,6 +2100,7 @@ static void handleCommentBlock(const QCString &doc,bool brief) static void subrHandleCommentBlock(const QCString &doc,bool brief) { + QCString loc_doc; Entry *tmp_entry = current; current = subrCurrent.first(); // temporarily switch to the entry of the subroutine / function if (docBlock.stripWhiteSpace().find("\\param") == 0) @@ -2120,8 +2114,57 @@ static void subrHandleCommentBlock(const QCString &doc,bool brief) else { int dir1 = modifiers[current_root][argName.lower()].direction; - handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + - argName + " " + doc,brief); + loc_doc = doc.stripWhiteSpace(); + if (loc_doc.lower().find(directionParam[SymbolModifiers::IN]) == 0) + { + if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || + (directionParam[dir1] == directionParam[SymbolModifiers::IN])) + { + handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::IN] + " " + + argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::IN])),brief); + } + else + { + warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName); + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + doc,brief); + } + } + else if (loc_doc.lower().find(directionParam[SymbolModifiers::OUT]) == 0) + { + if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || + (directionParam[dir1] == directionParam[SymbolModifiers::OUT])) + { + handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::OUT] + " " + + argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::OUT])),brief); + } + else + { + warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName); + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + doc,brief); + } + } + else if (loc_doc.lower().find(directionParam[SymbolModifiers::INOUT]) == 0) + { + if ((directionParam[dir1] == directionParam[SymbolModifiers::NONE_D]) || + (directionParam[dir1] == directionParam[SymbolModifiers::INOUT])) + { + handleCommentBlock(QCString("\n\n@param ") + directionParam[SymbolModifiers::INOUT] + " " + + argName + " " + loc_doc.right(loc_doc.length()-strlen(directionParam[SymbolModifiers::INOUT])),brief); + } + else + { + warn(yyFileName,yyLineNr, "warning: inconsistency between intent attribute and documenation for variable: "+argName); + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + doc,brief); + } + } + else + { + handleCommentBlock(QCString("\n\n@param ") + directionParam[dir1] + " " + + argName + " " + doc,brief); + } } current=tmp_entry; } diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 9938120..4d0707b 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -1059,10 +1059,12 @@ void GroupDef::writeDocumentation(OutputList &ol) case LayoutDocEntry::ClassUsedFiles: case LayoutDocEntry::ClassInlineClasses: case LayoutDocEntry::NamespaceNestedNamespaces: + case LayoutDocEntry::NamespaceNestedConstantGroups: case LayoutDocEntry::NamespaceClasses: case LayoutDocEntry::NamespaceInlineClasses: case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileNamespaces: + case LayoutDocEntry::FileConstantGroups: case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludedByGraph: diff --git a/src/growbuf.h b/src/growbuf.h index f1bf315..bc8e4b5 100644 --- a/src/growbuf.h +++ b/src/growbuf.h @@ -4,6 +4,8 @@ #include <stdlib.h> #include <string.h> +#define GROW_AMOUNT 1024 + /** Class representing a string buffer optimised for growing. */ class GrowBuf { @@ -11,21 +13,27 @@ class GrowBuf GrowBuf() : str(0), pos(0), len(0) {} ~GrowBuf() { free(str); str=0; pos=0; len=0; } void clear() { pos=0; } - void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); } + void addChar(char c) { if (pos>=len) { len+=GROW_AMOUNT; str = (char*)realloc(str,len); } str[pos++]=c; } void addStr(const char *s) { - int l=strlen(s); - if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); } - strcpy(&str[pos],s); - pos+=l; + if (s) + { + int l=strlen(s); + if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); } + strcpy(&str[pos],s); + pos+=l; + } } void addStr(const char *s,int n) { - int l=strlen(s); - if (n<l) l=n; - if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); } - strncpy(&str[pos],s,n); - pos+=l; + if (s) + { + int l=strlen(s); + if (n<l) l=n; + if (pos+l>=len) { len+=l+GROW_AMOUNT; str = (char*)realloc(str,len); } + strncpy(&str[pos],s,n); + pos+=l; + } } const char *get() { return str; } int getPos() const { return pos; } diff --git a/src/htags.cpp b/src/htags.cpp index 896f304..27ad952 100644 --- a/src/htags.cpp +++ b/src/htags.cpp @@ -32,7 +32,7 @@ static QDict<QCString> g_symbolDict(10007); /*! constructs command line of htags(1) and executes it. * \retval TRUE success - * \retval FALSE an error has occured. + * \retval FALSE an error has occurred. */ bool Htags::execute(const QCString &htmldir) { diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index c517776..d334e8f 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1834,11 +1834,11 @@ void HtmlDocVisitor::filterQuotedCdataAttr(const char* str) // it's enough to replace these two, provided that the declaration // for the HTML version we generate (and as supported by the browser) // specifies that all the other symbols used in rawVal are - // within the right charachter class (i.e., they're not - // some multinational weird charachters not in the BASESET). + // within the right character class (i.e., they're not + // some multinational weird characters not in the BASESET). // We assume that 1) the browser will support whatever is remaining // in the formula and 2) the TeX formulae are generally governed - // by even stricter charachter restrictions so it should be enough. + // by even stricter character restrictions so it should be enough. // // On some incompliant browsers, additional translation of // '>' and '<' into ">" and "<", respectively, might be needed; diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index df95ede..b272177 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -104,6 +104,7 @@ static const char extsearch_script[]= static QCString g_header; static QCString g_footer; +static QCString g_mathjax_code; //------------------------- Pictures for the Tabs ------------------------ @@ -1176,8 +1177,13 @@ static QCString substituteHtmlKeywords(const QCString &s, } mathJaxJs += "],\n" " jax: [\"input/TeX\",\"output/"+mathJaxFormat+"\"],\n" - "});\n" - "</script>"; + "});\n"; + if (!g_mathjax_code.isEmpty()) + { + mathJaxJs += g_mathjax_code; + mathJaxJs += "\n"; + } + mathJaxJs += "</script>"; mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n"; } @@ -1445,6 +1451,15 @@ void HtmlGenerator::init() { g_footer = defaultHtmlFooter; } + + if (Config_getBool("USE_MATHJAX")) + { + if (!Config_getString("MATHJAX_CODEFILE").isEmpty()) + { + g_mathjax_code=fileToString(Config_getString("MATHJAX_CODEFILE")); + //printf("g_mathjax_code='%s'\n",g_mathjax_code.data()); + } + } createSubDirs(d); QCString fileName=dname+"/tabs.css"; @@ -2383,7 +2398,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket) { if (emptyList) { - if (closeBracket) t << "</td><td>)"; + if (closeBracket) t << ")</td><td>"; t << "</td>" << endl; t << " <td>"; } @@ -2413,6 +2428,22 @@ void HtmlGenerator::endParameterList() t << " </tr>" << endl; } +void HtmlGenerator::exceptionEntry(const char* prefix,bool closeBracket) +{ + DBG_HTML(t << "<!-- exceptionEntry -->" << endl;) + t << "</td>" << endl; + t << " </tr>" << endl; + t << " <tr>" << endl; + t << " <td align=\"right\">"; + // colspan 2 so it gets both parameter type and parameter name columns + if (prefix) + t << prefix << "</td><td>(</td><td colspan=\"2\">"; + else if (closeBracket) + t << "</td><td>)</td><td></td><td>"; + else + t << "</td><td></td><td colspan=\"2\">"; +} + void HtmlGenerator::endMemberDoc(bool hasArgs) { DBG_HTML(t << "<!-- endMemberDoc -->" << endl;) diff --git a/src/htmlgen.h b/src/htmlgen.h index 1968f38..34eb1e5 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -308,6 +308,7 @@ class HtmlGenerator : public OutputGenerator void endParameterName(bool last,bool emptyList,bool closeBracket); void startParameterList(bool); void endParameterList(); + virtual void exceptionEntry(const char*,bool); void startConstraintList(const char *); void startConstraintParam(); diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 593ca69..8f99b30 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -2387,6 +2387,14 @@ void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeB } } +void LatexGenerator::exceptionEntry(const char* prefix,bool closeBracket) +{ + if (prefix) + t << " " << prefix; + else if (closeBracket) + t << ")"; + t << " "; +} void LatexGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *) { diff --git a/src/latexgen.h b/src/latexgen.h index 54e926d..2712d31 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -240,6 +240,7 @@ class LatexGenerator : public OutputGenerator void endParameterName(bool,bool,bool); void startParameterList(bool); void endParameterList(); + void exceptionEntry(const char*,bool); void startConstraintList(const char *); void startConstraintParam(); diff --git a/src/layout.cpp b/src/layout.cpp index 93194c8..acddbc0 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -313,6 +313,12 @@ class LayoutParser : public QXmlDefaultHandler SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE), SrcLangExt_Fortran,theTranslator->trDataTypes() ))); + m_sHandler.insert("class/memberdecl/services", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberListType_services,theTranslator->trServices())); + m_sHandler.insert("class/memberdecl/interfaces", + new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, + MemberListType_interfaces,theTranslator->trInterfaces())); m_sHandler.insert("class/memberdecl/publictypes", new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, MemberListType_pubTypes,theTranslator->trPublicTypes())); @@ -422,6 +428,12 @@ class LayoutParser : public QXmlDefaultHandler m_sHandler.insert("class/memberdef/enums", new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, MemberListType_enumMembers,theTranslator->trMemberEnumerationDocumentation())); + m_sHandler.insert("class/memberdef/services", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberListType_serviceMembers,theTranslator->trInterfaces())); + m_sHandler.insert("class/memberdef/interfaces", + new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, + MemberListType_interfaceMembers,theTranslator->trInterfaces())); m_sHandler.insert("class/memberdef/constructors", new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry, MemberListType_constructors,theTranslator->trConstructorDocumentation())); @@ -465,12 +477,16 @@ class LayoutParser : public QXmlDefaultHandler new StartElementHandler(this,&LayoutParser::startMemberDecl)); m_sHandler.insert("namespace/memberdecl/nestednamespaces", new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry, - COMPILE_FOR_3_OPTIONS( + COMPILE_FOR_4_OPTIONS( theTranslator->trNamespaces(), SrcLangExt_Java,theTranslator->trPackages(), SrcLangExt_VHDL,theTranslator->trPackages(), + SrcLangExt_IDL,theTranslator->trModules(), SrcLangExt_Fortran,theTranslator->trModules() ))); + m_sHandler.insert("namespace/memberdecl/constantgroups", + new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedConstantGroups,&LayoutParser::startSectionEntry, + theTranslator->trConstantGroups())); m_sHandler.insert("namespace/memberdecl/classes", new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry, COMPILE_FOR_2_OPTIONS( @@ -559,11 +575,15 @@ class LayoutParser : public QXmlDefaultHandler ))); m_sHandler.insert("file/memberdecl/namespaces", new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry, - COMPILE_FOR_2_OPTIONS( + COMPILE_FOR_3_OPTIONS( theTranslator->trNamespaces(), SrcLangExt_Java,theTranslator->trPackages(), + SrcLangExt_IDL,theTranslator->trModules(), SrcLangExt_Fortran,theTranslator->trModules() ))); + m_sHandler.insert("file/memberdecl/constantgroups", + new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry, + theTranslator->trConstantGroups())); m_sHandler.insert("file/memberdecl/defines", new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry, MemberListType_decDefineMembers,theTranslator->trDefines())); diff --git a/src/layout.h b/src/layout.h index a40d0b0..2506076 100644 --- a/src/layout.h +++ b/src/layout.h @@ -45,11 +45,11 @@ struct LayoutDocEntry ClassUsedFiles, // Namespace specific items - NamespaceNestedNamespaces, NamespaceClasses, - NamespaceInlineClasses, + NamespaceNestedNamespaces, NamespaceNestedConstantGroups, + NamespaceClasses, NamespaceInlineClasses, // File specific items - FileClasses, FileNamespaces, + FileClasses, FileNamespaces, FileConstantGroups, FileIncludes, FileIncludeGraph, FileIncludedByGraph, FileSourceLink, FileInlineClasses, diff --git a/src/layout_default.h b/src/layout_default.h index d2dfce6..d775926 100644 --- a/src/layout_default.h +++ b/src/layout_default.h @@ -31,6 +31,8 @@ " <memberdecl>\n" " <nestedclasses visible=\"yes\" title=\"\"/>\n" " <publictypes title=\"\"/>\n" +" <services title=\"\"/>\n" +" <interfaces title=\"\"/>\n" " <publicslots title=\"\"/>\n" " <signals title=\"\"/>\n" " <publicmethods title=\"\"/>\n" @@ -65,6 +67,8 @@ " <inlineclasses title=\"\"/>\n" " <typedefs title=\"\"/>\n" " <enums title=\"\"/>\n" +" <services title=\"\"/>\n" +" <interfaces title=\"\"/>\n" " <constructors title=\"\"/>\n" " <functions title=\"\"/>\n" " <related title=\"\"/>\n" @@ -82,6 +86,7 @@ " <briefdescription visible=\"yes\"/>\n" " <memberdecl>\n" " <nestednamespaces visible=\"yes\" title=\"\"/>\n" +" <constantgroups visible=\"yes\" title=\"\"/>\n" " <classes visible=\"yes\" title=\"\"/>\n" " <typedefs title=\"\"/>\n" " <enums title=\"\"/>\n" @@ -110,6 +115,7 @@ " <memberdecl>\n" " <classes visible=\"yes\" title=\"\"/>\n" " <namespaces visible=\"yes\" title=\"\"/>\n" +" <constantgroups visible=\"yes\" title=\"\"/>\n" " <defines title=\"\"/>\n" " <typedefs title=\"\"/>\n" " <enums title=\"\"/>\n" diff --git a/src/layout_default.xml b/src/layout_default.xml index b0bbec4..f087958 100644 --- a/src/layout_default.xml +++ b/src/layout_default.xml @@ -31,6 +31,8 @@ <memberdecl> <nestedclasses visible="yes" title=""/> <publictypes title=""/> + <services title=""/> + <interfaces title=""/> <publicslots title=""/> <signals title=""/> <publicmethods title=""/> @@ -65,6 +67,8 @@ <inlineclasses title=""/> <typedefs title=""/> <enums title=""/> + <services title=""/> + <interfaces title=""/> <constructors title=""/> <functions title=""/> <related title=""/> @@ -82,6 +86,7 @@ <briefdescription visible="yes"/> <memberdecl> <nestednamespaces visible="yes" title=""/> + <constantgroups visible="yes" title=""/> <classes visible="yes" title=""/> <typedefs title=""/> <enums title=""/> @@ -110,6 +115,7 @@ <memberdecl> <classes visible="yes" title=""/> <namespaces visible="yes" title=""/> + <constantgroups visible="yes" title=""/> <defines title=""/> <typedefs title=""/> <enums title=""/> diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 9a6f029..e854bfc 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -32,7 +32,7 @@ ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt) - : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE), + : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(FALSE), m_indent(0), m_langExt(langExt) { } diff --git a/src/mangen.cpp b/src/mangen.cpp index 32c7a7e..a50ee73 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -33,15 +33,33 @@ static QCString getExtension() { + /* + * [.][nuber][rest] + * in case of . missing, just ignore it + * in case number missing, just place a 3 in front of it + */ QCString ext = Config_getString("MAN_EXTENSION"); - if( ext.length() >= 2 && - ext.data()[0] == '.') + if (ext.isEmpty()) { - ext = ext.mid(1, ext.length()-1); + ext = "3"; } else { - ext = "3"; + if (ext.at(0)=='.') + { + if (ext.length()==1) + { + ext = "3"; + } + else // strip . + { + ext = ext.mid(1); + } + } + if (ext.at(0)<='0' || ext.at(0)>='9') + { + ext.prepend("3"); + } } return ext; } @@ -50,7 +68,7 @@ ManGenerator::ManGenerator() : OutputGenerator() { dir=Config_getString("MAN_OUTPUT")+"/man" + getExtension(); firstCol=TRUE; - paragraph=FALSE; + paragraph=TRUE; col=0; upperCase=FALSE; insideTabbing=FALSE; @@ -129,8 +147,8 @@ static QCString buildFileName(const char *name) } } - QCString &manExtension = Config_getString("MAN_EXTENSION"); - if (fileName.right(2)!=manExtension) + QCString manExtension = "." + getExtension(); + if (fileName.right(manExtension.length())!=manExtension) { fileName+=manExtension; } @@ -798,4 +816,12 @@ void ManGenerator::endLabels() { } +void ManGenerator::endHeaderSection() +{ + if (!firstCol) + { + t<< endl; firstCol=TRUE; + } +} + diff --git a/src/mangen.h b/src/mangen.h index 663f695..eda360e 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -95,7 +95,7 @@ class ManGenerator : public OutputGenerator void startMemberSections() {} void endMemberSections() {} void startHeaderSection() {} - void endHeaderSection() {} + void endHeaderSection(); void startMemberHeader(const char *); void endMemberHeader(); void insertMemberAlign(bool) {} @@ -229,6 +229,7 @@ class ManGenerator : public OutputGenerator void endParameterName(bool,bool,bool) {} void startParameterList(bool) {} void endParameterList() {} + void exceptionEntry(const char*,bool) {} void startFontClass(const char *) {} void endFontClass() {} diff --git a/src/markdown.cpp b/src/markdown.cpp index 0a31bad..9411782 100644 --- a/src/markdown.cpp +++ b/src/markdown.cpp @@ -473,6 +473,25 @@ static int processNmdash(GrowBuf &out,const char *data,int,int size) return 0; } +/** Process quoted section "...", can contain one embedded newline */ +static int processQuoted(GrowBuf &out,const char *data,int,int size) +{ + int i=1; + int nl=0; + while (i<size && data[i]!='"' && nl<2) + { + if (data[i]=='\n') nl++; + i++; + } + if (i<size && data[i]=='"' && nl<2) + { + out.addStr(data,i+1); + return i+1; + } + // not a quoted section + return 0; +} + /** Process a HTML tag. Note that <pre>..</pre> are treated specially, in * the sense that all code inside is written unprocessed */ @@ -2197,6 +2216,7 @@ QCString processMarkdown(const QCString &fileName,Entry *e,const QCString &input g_actions[(unsigned int)'!']=processLink; g_actions[(unsigned int)'<']=processHtmlTag; g_actions[(unsigned int)'-']=processNmdash; + g_actions[(unsigned int)'"']=processQuoted; init=TRUE; } diff --git a/src/marshal.cpp b/src/marshal.cpp index da71843..a6b3e75 100644 --- a/src/marshal.cpp +++ b/src/marshal.cpp @@ -33,6 +33,12 @@ void marshalUInt(StorageIntf *s,uint v) s->write((const char *)b,4); } +void marshalUInt64(StorageIntf *s,uint64 v) +{ + marshalUInt(s, uint(v>>32)); + marshalUInt(s, uint(v&0xFFFFFFFF)); +} + void marshalBool(StorageIntf *s,bool b) { char c = b; @@ -345,7 +351,7 @@ void marshalEntry(StorageIntf *s,Entry *e) marshalInt(s,e->section); marshalInt(s,(int)e->protection); marshalInt(s,(int)e->mtype); - marshalInt(s,e->spec); + marshalUInt64(s,e->spec); marshalInt(s,e->initLines); marshalBool(s,e->stat); marshalBool(s,e->explicitExternal); @@ -426,6 +432,13 @@ uint unmarshalUInt(StorageIntf *s) return result; } +uint64 unmarshalUInt64(StorageIntf *s) +{ + uint64 result=uint64(unmarshalUInt(s))<<32; + result|=unmarshalUInt(s); + return result; +} + bool unmarshalBool(StorageIntf *s) { char result; @@ -719,7 +732,7 @@ Entry * unmarshalEntry(StorageIntf *s) e->section = unmarshalInt(s); e->protection = (Protection)unmarshalInt(s); e->mtype = (MethodTypes)unmarshalInt(s); - e->spec = unmarshalInt(s); + e->spec = unmarshalUInt64(s); e->initLines = unmarshalInt(s); e->stat = unmarshalBool(s); e->explicitExternal = unmarshalBool(s); diff --git a/src/marshal.h b/src/marshal.h index 49d58e4..977a89b 100644 --- a/src/marshal.h +++ b/src/marshal.h @@ -44,6 +44,7 @@ class Entry; void marshalInt(StorageIntf *s,int v); void marshalUInt(StorageIntf *s,uint v); +void marshalUInt64(StorageIntf *s,uint64 v); void marshalBool(StorageIntf *s,bool b); void marshalQCString(StorageIntf *s,const QCString &str); void marshalQGString(StorageIntf *s,const QGString &str); @@ -70,6 +71,7 @@ void marshalEntryTree(StorageIntf *s,Entry *e); int unmarshalInt(StorageIntf *s); uint unmarshalUInt(StorageIntf *s); +uint64 unmarshalUInt64(StorageIntf *s); bool unmarshalBool(StorageIntf *s); QCString unmarshalQCString(StorageIntf *s); QGString unmarshalQGString(StorageIntf *s); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index e01ab6a..cdf5686 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -374,6 +374,68 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, return TRUE; } +static void writeExceptionListImpl( + OutputList &ol, ClassDef *cd, MemberDef *md, QCString const& exception) +{ + // this is ordinary exception spec - there must be a '(' + int index = exception.find('('); + if (-1!=index) + { + ol.exceptionEntry(exception.left(index),false); + ++index; // paren in second column so skip it here + for (int comma = exception.find(',', index); -1!=comma; ) + { + ++comma; // include comma + linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md, + exception.mid(index,comma-index)); + ol.exceptionEntry(0,false); + index=comma; + comma = exception.find(',', index); + } + int close = exception.find(')', index); + if (-1!=close) + { + QCString type=removeRedundantWhiteSpace(exception.mid(index,close-index)); + linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,type); + ol.exceptionEntry(0,true); + } + else + warn(md->getDefFileName(),md->getDefLine(), + "missing ) in exception list on member %s",qPrint(md->name())); + } + else + { + // fallback - is it possible to get here? + warn(md->getDefFileName(),md->getDefLine(), + "missing ( in exception list on member %s",qPrint(md->name())); + ol.docify(" "); + linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md,exception); + } +} + +static void writeExceptionList(OutputList &ol, ClassDef *cd, MemberDef *md) +{ + QCString exception(QCString(md->excpString()).stripWhiteSpace()); + if ('{'==exception.at(0)) + { + // this is an UNO IDL attribute - need special handling + int index = exception.find(';'); + int oldIndex = 1; + while (-1 != index) // there should be no more than 2 (set / get) + { + // omit '{' and ';' -> "set raises (...)" + writeExceptionListImpl(ol,cd,md,exception.mid(oldIndex,index-oldIndex)); + oldIndex=index+1; + index = exception.find(';',oldIndex); + } + // the rest is now just '}' - omit that + } + else + { + writeExceptionListImpl(ol,cd,md,exception); + } +} + static void writeTemplatePrefix(OutputList &ol,ArgumentList *al) { ol.docify("template<"); @@ -467,7 +529,7 @@ class MemberDefImpl QCString enumBaseType; // base type of the enum (C++11) int initLines; // number of lines in the initializer - int memSpec; // The specifiers present for this member + uint64 memSpec; // The specifiers present for this member MemberType mtype; // returns the kind of member int maxInitLines; // when the initializer will be displayed int userInitLines; // result of explicit \hideinitializer or \showinitializer @@ -1828,6 +1890,8 @@ bool MemberDef::isDetailedSectionLinkable() const (hasMultiLineInitializer() && !hideUndocMembers) || // has one or more documented arguments (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()) || + // is an attribute or property - need to display that tag + (m_impl->memSpec & (Entry::Attribute|Entry::Property)) || // has user comments Doxygen::userComments ; @@ -1917,7 +1981,7 @@ void MemberDef::_getLabels(QStrList &sl,Definition *container) const if (isGettable()) sl.append("get"); if (isSettable()) sl.append("set"); if (isAddable()) sl.append("add"); - if (isRemovable()) sl.append("remove"); + if (!isUNOProperty() && isRemovable()) sl.append("remove"); if (isRaisable()) sl.append("raise"); if (isReadable()) sl.append("read"); if (isWritable()) sl.append("write"); @@ -1954,6 +2018,17 @@ void MemberDef::_getLabels(QStrList &sl,Definition *container) const if (isDefault()) sl.append("default"); if (isDelete()) sl.append("delete"); if (isNoExcept()) sl.append("noexcept"); + if (isAttribute()) sl.append("attribute"); + if (isUNOProperty()) sl.append("property"); + if (isReadonly()) sl.append("readonly"); + if (isBound()) sl.append("bound"); + if (isUNOProperty() && isRemovable()) sl.append("removable"); + if (isConstrained()) sl.append("constrained"); + if (isTransient()) sl.append("transient"); + if (isMaybeVoid()) sl.append("maybevoid"); + if (isMaybeDefault()) sl.append("maybedefault"); + if (isMaybeAmbiguous()) sl.append("maybeambiguous"); + if (isPublished()) sl.append("published"); // enum } if (isObjCProperty() && isImplementation()) { @@ -2595,8 +2670,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } if (excpString()) // add exception list { - ol.docify(" "); - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),this,excpString()); + writeExceptionList(ol,cd,this); + hasParameterList=true; // call endParameterList below } } @@ -3001,6 +3076,8 @@ QCString MemberDef::memberTypeName() const case MemberType_DCOP: return "dcop"; case MemberType_Property: return "property"; case MemberType_Event: return "event"; + case MemberType_Interface: return "interface"; + case MemberType_Service: return "service"; default: return "unknown"; } } @@ -3409,6 +3486,8 @@ void MemberDef::_writeTagData(const DefType compoundType) case MemberType_Friend: Doxygen::tagFile << "friend"; break; case MemberType_DCOP: Doxygen::tagFile << "dcop"; break; case MemberType_Slot: Doxygen::tagFile << "slot"; break; + case MemberType_Interface: Doxygen::tagFile << "interface"; break; + case MemberType_Service: Doxygen::tagFile << "service"; break; } if (m_impl->prot!=Public) { @@ -3883,7 +3962,7 @@ int MemberDef::initializerLines() const return m_impl->initLines; } -int MemberDef::getMemberSpecifiers() const +uint64 MemberDef::getMemberSpecifiers() const { makeResident(); return m_impl->memSpec; @@ -4231,6 +4310,65 @@ bool MemberDef::isNoExcept() const return (m_impl->memSpec&Entry::NoExcept)!=0; } +bool MemberDef::isAttribute() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Attribute)!=0; +} + +bool MemberDef::isUNOProperty() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Property)!=0; +} + +bool MemberDef::isReadonly() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Readonly)!=0; +} + +bool MemberDef::isBound() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Bound)!=0; +} + +bool MemberDef::isConstrained() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Constrained)!=0; +} + +bool MemberDef::isTransient() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Transient)!=0; +} + +bool MemberDef::isMaybeVoid() const +{ + makeResident(); + return (m_impl->memSpec&Entry::MaybeVoid)!=0; +} + +bool MemberDef::isMaybeDefault() const +{ + makeResident(); + return (m_impl->memSpec&Entry::MaybeDefault)!=0; +} + +bool MemberDef::isMaybeAmbiguous() const +{ + makeResident(); + return (m_impl->memSpec&Entry::MaybeAmbiguous)!=0; +} + +bool MemberDef::isPublished() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Published)!=0; +} bool MemberDef::isImplementation() const @@ -4461,13 +4599,13 @@ void MemberDef::setProtection(Protection p) m_isLinkableCached = 0; } -void MemberDef::setMemberSpecifiers(int s) +void MemberDef::setMemberSpecifiers(uint64 s) { makeResident(); m_impl->memSpec=s; } -void MemberDef::mergeMemberSpecifiers(int s) +void MemberDef::mergeMemberSpecifiers(uint64 s) { makeResident(); m_impl->memSpec|=s; @@ -4787,7 +4925,7 @@ void MemberDef::flushToDisk() const marshalQCString (Doxygen::symbolStorage,m_impl->initializer); marshalQCString (Doxygen::symbolStorage,m_impl->extraTypeChars); marshalInt (Doxygen::symbolStorage,m_impl->initLines); - marshalInt (Doxygen::symbolStorage,m_impl->memSpec); + marshalUInt64 (Doxygen::symbolStorage,m_impl->memSpec); marshalInt (Doxygen::symbolStorage,(int)m_impl->mtype); marshalInt (Doxygen::symbolStorage,m_impl->maxInitLines); marshalInt (Doxygen::symbolStorage,m_impl->userInitLines); @@ -4892,7 +5030,7 @@ void MemberDef::loadFromDisk() const m_impl->initializer = unmarshalQCString (Doxygen::symbolStorage); m_impl->extraTypeChars = unmarshalQCString (Doxygen::symbolStorage); m_impl->initLines = unmarshalInt (Doxygen::symbolStorage); - m_impl->memSpec = unmarshalInt (Doxygen::symbolStorage); + m_impl->memSpec = unmarshalUInt64 (Doxygen::symbolStorage); m_impl->mtype = (MemberType)unmarshalInt (Doxygen::symbolStorage); m_impl->maxInitLines = unmarshalInt (Doxygen::symbolStorage); m_impl->userInitLines = unmarshalInt (Doxygen::symbolStorage); @@ -5128,7 +5266,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef) } if (!mdef->documentation().isEmpty()) { - //printf("transfering docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString()); + //printf("transferring docs mdef->mdec (%s->%s)\n",mdef->argsString(),mdec->argsString()); mdec->setDocumentation(mdef->documentation(),mdef->docFile(),mdef->docLine()); mdec->setDocsForDefinition(mdef->isDocsForDefinition()); if (mdefAl!=0) @@ -5141,7 +5279,7 @@ void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef) } else if (!mdec->documentation().isEmpty()) { - //printf("transfering docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString()); + //printf("transferring docs mdec->mdef (%s->%s)\n",mdec->argsString(),mdef->argsString()); mdef->setDocumentation(mdec->documentation(),mdec->docFile(),mdec->docLine()); mdef->setDocsForDefinition(mdec->isDocsForDefinition()); if (mdecAl!=0) diff --git a/src/memberdef.h b/src/memberdef.h index dba22e6..9ed4102 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -73,7 +73,7 @@ class MemberDef : public Definition const char *extraTypeChars() const; const QCString &initializer() const; int initializerLines() const; - int getMemberSpecifiers() const; + uint64 getMemberSpecifiers() const; MemberList *getSectionList(Definition *d) const; // scope query members @@ -148,6 +148,16 @@ class MemberDef : public Definition bool isDefault() const; bool isDelete() const; bool isNoExcept() const; + bool isAttribute() const; // UNO IDL attribute + bool isUNOProperty() const; // UNO IDL property + bool isReadonly() const; + bool isBound() const; + bool isConstrained() const; + bool isTransient() const; + bool isMaybeVoid() const; + bool isMaybeDefault() const; + bool isMaybeAmbiguous() const; + bool isPublished() const; // UNO IDL published bool isTemplateSpecialization() const; bool hasDocumentedParams() const; bool hasDocumentedReturnType() const; @@ -240,8 +250,8 @@ class MemberDef : public Definition void setFileDef(FileDef *fd); void setAnchor(); void setProtection(Protection p); - void setMemberSpecifiers(int s); - void mergeMemberSpecifiers(int s); + void setMemberSpecifiers(uint64 s); + void mergeMemberSpecifiers(uint64 s); void setInitializer(const char *i); void setBitfields(const char *s); void setMaxInitLines(int lines); diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 60c1291..c44bd81 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -136,6 +136,9 @@ void MemberList::countDecMembers(bool countEnumValues,GroupDef *gd) case MemberType_Event: // fall through case MemberType_Property: m_varCnt++,m_numDecMembers++; break; +// apparently necessary to get this to show up in declarations section? + case MemberType_Interface: // fall through + case MemberType_Service: // fall through case MemberType_Function: // fall through case MemberType_Signal: // fall through case MemberType_DCOP: // fall through @@ -250,6 +253,8 @@ bool MemberList::declVisible() const case MemberType_Slot: // fall through case MemberType_DCOP: // fall through case MemberType_Property: // fall through + case MemberType_Interface: // fall through + case MemberType_Service: // fall through case MemberType_Event: return TRUE; case MemberType_Enumeration: @@ -334,6 +339,8 @@ void MemberList::writePlainDeclarations(OutputList &ol, case MemberType_Slot: // fall through case MemberType_DCOP: // fall through case MemberType_Property: // fall through + case MemberType_Interface: // fall through + case MemberType_Service: // fall through case MemberType_Event: { if (first) ol.startMemberList(),first=FALSE; @@ -891,6 +898,8 @@ QCString MemberList::listTypeAsString() const case MemberListType_dcopMethods: return "dcop-methods"; case MemberListType_properties: return "properties"; case MemberListType_events: return "events"; + case MemberListType_interfaces: return "interfaces"; + case MemberListType_services: return "services"; case MemberListType_decDefineMembers: return "define-members"; case MemberListType_decProtoMembers: return "proto-members"; case MemberListType_decTypedefMembers: return "typedef-members"; diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index dc5214a..b95cec8 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -35,8 +35,10 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc, const char *name,const char *lref, - const char *fName) : + const char *fName, const char*type, + bool isPublished) : Definition(df,dl,dc,name) + ,m_isPublished(isPublished) { if (fName) { @@ -58,6 +60,18 @@ NamespaceDef::NamespaceDef(const char *df,int dl,int dc, memberGroupSDict->setAutoDelete(TRUE); visited=FALSE; m_subGrouping=Config_getBool("SUBGROUPING"); + if (type && !strcmp("module", type)) + { + m_type = MODULE; + } + else if (type && !strcmp("constants", type)) + { + m_type = CONSTANT_GROUP; + } + else + { + m_type = NAMESPACE; + } } NamespaceDef::~NamespaceDef() @@ -347,9 +361,10 @@ void NamespaceDef::writeInlineClasses(OutputList &ol) if (classSDict) classSDict->writeDocumentation(ol,this); } -void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title) +void NamespaceDef::writeNamespaceDeclarations(OutputList &ol,const QCString &title, + bool const isConstantGroup) { - if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,TRUE); + if (namespaceSDict) namespaceSDict->writeDeclaration(ol,title,isConstantGroup,TRUE); } void NamespaceDef::writeMemberGroups(OutputList &ol) @@ -421,6 +436,20 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol) ol.popGeneratorState(); } +void NamespaceDef::addNamespaceAttributes(OutputList &ol) +{ + // UNO IDL constant groups may be published + if (getLanguage()==SrcLangExt_IDL && isConstantGroup() && m_isPublished) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.startLabels(); + ol.writeLabel("published",false); + ol.endLabels(); + ol.popGeneratorState(); + } +} + void NamespaceDef::writeDocumentation(OutputList &ol) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); @@ -437,6 +466,12 @@ void NamespaceDef::writeDocumentation(OutputList &ol) { pageTitle = theTranslator->trModuleReference(displayName()); } + else if (lang==SrcLangExt_IDL) + { + pageTitle = isConstantGroup() + ? theTranslator->trConstantGroupReference(displayName()) + : theTranslator->trModuleReference(displayName()); + } else { pageTitle = theTranslator->trNamespaceReference(displayName()); @@ -455,6 +490,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) startTitle(ol,getOutputFileBase(),this); ol.parseText(pageTitle); addGroupListToTitle(ol,this); + addNamespaceAttributes(ol); endTitle(ol,getOutputFileBase(),displayName()); ol.startContents(); @@ -498,9 +534,15 @@ void NamespaceDef::writeDocumentation(OutputList &ol) case LayoutDocEntry::NamespaceNestedNamespaces: { LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; - writeNamespaceDeclarations(ol,ls->title(lang)); + writeNamespaceDeclarations(ol,ls->title(lang),false); } break; + case LayoutDocEntry::NamespaceNestedConstantGroups: + { + LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde; + writeNamespaceDeclarations(ol,ls->title(lang),true); + } + break; case LayoutDocEntry::MemberGroups: writeMemberGroups(ol); break; @@ -546,6 +588,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) case LayoutDocEntry::ClassInlineClasses: case LayoutDocEntry::FileClasses: case LayoutDocEntry::FileNamespaces: + case LayoutDocEntry::FileConstantGroups: case LayoutDocEntry::FileIncludes: case LayoutDocEntry::FileIncludeGraph: case LayoutDocEntry::FileIncludedByGraph: @@ -825,7 +868,8 @@ bool NamespaceSDict::declVisible() const return FALSE; } -void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool localName) +void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title, + bool const isConstantGroup,bool localName) { @@ -839,7 +883,27 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca bool found=FALSE; for (ni.toFirst();(nd=ni.current()) && !found;++ni) { - if (nd->isLinkable()) found=TRUE; + if (nd->isLinkable()) + { + SrcLangExt lang = nd->getLanguage(); + if (SrcLangExt_IDL==lang) + { + if (isConstantGroup == nd->isConstantGroup()) + { + found=TRUE; + break; + } + } + else if (!isConstantGroup) // ensure we only get extra section in IDL + { + if (nd->isConstantGroup()) + { + err("Internal inconsistency: constant group but not IDL?"); + } + found=TRUE; + break; + } + } } if (!found) return; // no linkable namespaces in the list @@ -855,6 +919,8 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca if (nd->isLinkable()) { SrcLangExt lang = nd->getLanguage(); + if (lang==SrcLangExt_IDL && (isConstantGroup != nd->isConstantGroup())) + continue; // will be output in another pass, see layout_default.xml ol.startMemberDeclaration(); ol.startMemberItem(nd->getOutputFileBase(),0); if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp) @@ -865,9 +931,20 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca { ol.docify("module "); } - else + else if (lang==SrcLangExt_IDL) { - ol.docify("namespace "); + if (nd->isModule()) + { + ol.docify("module "); + } + else if (nd->isConstantGroup()) + { + ol.docify("constants"); + } + else + { + err("Internal inconsistency: namespace in IDL not module or cg"); + } } ol.insertMemberAlign(); QCString name; diff --git a/src/namespacedef.h b/src/namespacedef.h index dbc98d5..ff64107 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -39,7 +39,8 @@ class NamespaceDef : public Definition public: NamespaceDef(const char *defFileName,int defLine,int defColumn, const char *name,const char *ref=0, - const char *refFile=0); + const char *refFile=0,const char*type=0, + bool isPublished=false); ~NamespaceDef(); DefType definitionType() const { return TypeNamespace; } QCString getOutputFileBase() const; @@ -63,7 +64,10 @@ class NamespaceDef : public Definition void combineUsingRelations(); QCString displayName(bool=TRUE) const; QCString localName() const; - + + bool isConstantGroup() const { return CONSTANT_GROUP == m_type; } + bool isModule() const { return MODULE == m_type; } + bool isLinkableInProject() const; bool isLinkable() const; void addMembersToMemberGroup(); @@ -101,12 +105,14 @@ class NamespaceDef : public Definition void endMemberDeclarations(OutputList &ol); void writeClassDeclarations(OutputList &ol,const QCString &title); void writeInlineClasses(OutputList &ol); - void writeNamespaceDeclarations(OutputList &ol,const QCString &title); + void writeNamespaceDeclarations(OutputList &ol,const QCString &title, + bool isConstantGroup=false); void writeMemberGroups(OutputList &ol); void writeAuthorSection(OutputList &ol); void startMemberDocumentation(OutputList &ol); void endMemberDocumentation(OutputList &ol); void writeSummaryLinks(OutputList &ol); + void addNamespaceAttributes(OutputList &ol); QCString fileName; QStrList files; @@ -121,6 +127,8 @@ class NamespaceDef : public Definition ClassSDict *classSDict; NamespaceSDict *namespaceSDict; bool m_subGrouping; + enum { NAMESPACE, MODULE, CONSTANT_GROUP } m_type; + bool m_isPublished; }; /** A list of NamespaceDef objects. */ @@ -164,7 +172,8 @@ class NamespaceSDict : public SDict<NamespaceDef> ((NamespaceDef *)item2)->name() ); } - void writeDeclaration(OutputList &ol,const char *title,bool localName=FALSE); + void writeDeclaration(OutputList &ol,const char *title, + bool isConstantGroup=false, bool localName=FALSE); bool declVisible() const; }; diff --git a/src/outputgen.h b/src/outputgen.h index 52189c2..719f2cd 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -404,6 +404,7 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endParameterName(bool,bool,bool) = 0; virtual void startParameterList(bool) = 0; virtual void endParameterList() = 0; + virtual void exceptionEntry(const char*,bool) = 0; virtual void startConstraintList(const char *) = 0; virtual void startConstraintParam() = 0; diff --git a/src/outputlist.h b/src/outputlist.h index 59b7f5f..71481ba 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -422,6 +422,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startParameterList,openBracket); } void endParameterList() { forall(&OutputGenerator::endParameterList); } + void exceptionEntry(const char* prefix,bool closeBracket) + { forall(&OutputGenerator::exceptionEntry,prefix,closeBracket); } void startConstraintList(const char *header) { forall(&OutputGenerator::startConstraintList,header); } diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index bba416f..be8b1d9 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -1575,6 +1575,8 @@ void PerlModGenerator::generatePerlModForMember(MemberDef *md,Definition *) case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break; case MemberType_Slot: memType="slot"; isFunc=TRUE; break; case MemberType_Event: memType="event"; break; + case MemberType_Interface: memType="interface"; break; + case MemberType_Service: memType="service"; break; } m_output.openHash() @@ -59,12 +59,6 @@ #define DBG_CTX(x) do { } while(0) #define YY_NEVER_INTERACTIVE 1 -enum GuardType -{ - Guard_Cond, - Guard_CondNot -}; - struct FileState { FileState(int size) : fileBuf(size), @@ -370,8 +364,8 @@ static bool g_isSource; static bool g_lexInit = FALSE; static int g_fenceSize = 0; +static bool g_ccomment; -static GuardType guardType; // kind of guard for conditional section //DefineDict* getGlobalDefineDict() //{ // return g_globalDefineDict; @@ -1665,24 +1659,14 @@ static void readIncludeFile(const QCString &inc) static void startCondSection(const char *sectId) { + //printf("startCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); CondParser prs; bool expResult = prs.parse(g_yyFileName,g_yyLineNr,sectId); g_condStack.push(new bool(g_skip)); - if (guardType == Guard_Cond) + if (!expResult) { - if (!expResult) - { - g_skip=TRUE; - } + g_skip=TRUE; } - else if (guardType == Guard_CondNot) - { - if (expResult) - { - g_skip=TRUE; - } - } - //printf("startCondSection(%s)=%d expResult=%d\n",sectId,g_skip,expResult); } static void endCondSection() @@ -1696,6 +1680,7 @@ static void endCondSection() bool *ctx = g_condStack.pop(); g_skip=*ctx; } + //printf("endCondSection: skip=%d stack=%d\n",g_skip,g_condStack.count()); } static void forceEndCondSection() @@ -1796,7 +1781,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) %x IgnoreLine %x FindDefineArgs %x ReadString -%x CondLine +%x CondLineC +%x CondLineCpp %x SkipCond %% @@ -2519,17 +2505,28 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } BEGIN(SkipVerbatim); } -<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section - guardType = Guard_Cond; - g_condCtx = YY_START; - outputArray(yytext,yyleng); - BEGIN(CondLine); +<SkipCPPComment>[\\@]"cond"[ \t]+ { // conditional section + g_ccomment=TRUE; + BEGIN(CondLineCpp); + } +<SkipCComment>[\\@]"cond"[ \t]+ { // conditional section + g_ccomment=FALSE; + BEGIN(CondLineC); } -<CondLine>[!()&| \ta-z_A-Z0-9.\-]+ { +<CondLineC,CondLineCpp>[!()&| \ta-z_A-Z0-9.\-]+ { startCondSection(yytext); - outputArray(yytext,(int)yyleng); if (g_skip) { + if (YY_START==CondLineC) + { + // end C comment + outputArray("*/",2); + g_ccomment=TRUE; + } + else + { + g_ccomment=FALSE; + } BEGIN(SkipCond); } else @@ -2537,16 +2534,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) BEGIN(g_condCtx); } } -<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*/\n { - guardType = Guard_Cond; - g_condCtx = YY_START; - outputArray(yytext,(int)yyleng); - } -<CondLine>. { +<CondLineC,CondLineCpp>. { // non-guard character unput(*yytext); startCondSection(" "); if (g_skip) { + if (YY_START==CondLineC) + { + // end C comment + outputArray("*/",2); + g_ccomment=TRUE; + } + else + { + g_ccomment=FALSE; + } BEGIN(SkipCond); } else @@ -2554,15 +2556,36 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) BEGIN(g_condCtx); } } +<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*/\n { // no guard + if (YY_START==SkipCComment) + { + g_ccomment=TRUE; + // end C comment + outputArray("*/",2); + } + else + { + g_ccomment=FALSE; + } + BEGIN(SkipCond); + } <SkipCond>\n { g_yyLineNr++; outputChar('\n'); } <SkipCond>. { } <SkipCond>[^\/\!*\\@\n]+ { } +<SkipCond>"//"[/!] { g_ccomment=FALSE; } +<SkipCond>"/*"[*!] { g_ccomment=TRUE; } <SkipCond>[\\@]"endcond"/[^a-z_A-Z0-9] { - outputArray(yytext,(int)yyleng); endCondSection(); + if (!g_skip) + { + if (g_ccomment) + { + outputArray("/** ",4); + } + BEGIN(g_condCtx); + } } <SkipCComment,SkipCPPComment>[\\@]"endcond"/[^a-z_A-Z0-9] { - outputArray(yytext,(int)yyleng); endCondSection(); if (!g_skip) { @@ -2823,14 +2846,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } <*>"/*"/"*/" | <*>"/*"[*]? { - outputArray(yytext,(int)yyleng); - g_lastCContext=YY_START; - g_commentCount=1; - if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented! - BEGIN(SkipCComment); + if (YY_START==SkipVerbatim || YY_START==SkipCond) + { + REJECT; + } + else + { + outputArray(yytext,(int)yyleng); + g_lastCContext=YY_START; + g_commentCount=1; + if (yyleng==3) g_lastGuardName.resize(0); // reset guard in case the #define is documented! + BEGIN(SkipCComment); + } } <*>"//"[/]? { - if (YY_START==SkipVerbatim) + if (YY_START==SkipVerbatim || YY_START==SkipCond) { REJECT; } diff --git a/src/pycode.l b/src/pycode.l index 19e1119..226c448 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -1173,7 +1173,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codifyLines(yytext); endFontClass(); - // No indentation necesary + // No indentation necessary g_noSuiteFound = FALSE; } @@ -1182,7 +1182,7 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codifyLines(yytext); endFontClass(); - // No indentation necesary + // No indentation necessary g_noSuiteFound = FALSE; } {IDENTIFIER} { diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 1bdeb55..c3b715c 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -2701,6 +2701,16 @@ void RTFGenerator::endParameterType() t << " "; } +void RTFGenerator::exceptionEntry(const char* prefix,bool closeBracket) +{ + DBG_RTF(t << "{\\comment (exceptionEntry)}" << endl) + if (prefix) + t << " " << prefix; + else if (closeBracket) + t << ")"; + t << " "; +} + void RTFGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *) { RTFDocVisitor *visitor = new RTFDocVisitor(t,*this,ctx?ctx->getDefFileExtension():QCString("")); diff --git a/src/rtfgen.h b/src/rtfgen.h index a580b79..6c3393f 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -230,6 +230,7 @@ class RTFGenerator : public OutputGenerator void endParameterName(bool,bool,bool) {} void startParameterList(bool) {} void endParameterList() {} + void exceptionEntry(const char*,bool); void startConstraintList(const char *); void startConstraintParam(); diff --git a/src/scanner.l b/src/scanner.l index 0423299..452632b 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -608,9 +608,6 @@ BN [ \t\n\r] BL [ \t\r]*"\n" B [ \t] BS ^(({B}*"//")?)(({B}*"*"+)?){B}* -FILESCHAR [a-z_A-Z0-9\x80-\xFF\\:\\\/\-\+] -FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+] -FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]+"\"") ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?) SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)(((~|!){BN}*)?{ID}) @@ -713,6 +710,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" %x QtPropRead %x QtPropWrite %x ReadInitializer +%x UNOIDLAttributeBlock %x GetCallType %x CppQuote %x EndCppQuote @@ -1332,6 +1330,17 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" current->virt = Virtual; lineCount(); } +<FindMembers>{B}*"published"{BN}+ { // UNO IDL published keyword + if (insideIDL) + { + lineCount(); + current->spec |= Entry::Published; + } + else + { + REJECT; + } + } <FindMembers>{B}*"abstract"{BN}+ { if (!insidePHP) { @@ -1428,13 +1437,77 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" current->name = QCString(yytext).stripWhiteSpace(); } } -<FindMembers>{B}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba IDL/Java interface +<FindMembers>{B}*"constants"{BN}+ { // UNO IDL constant group + lineCount(); + if (insideIDL) + { + isTypedef=FALSE; + current->section = Entry::NAMESPACE_SEC; + current->type = "constants"; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->startColumn = yyColNr; + current->bodyLine = yyLineNr; + BEGIN( CompoundName ); + } + else + { + addType( current ) ; + current->name = QCString(yytext).stripWhiteSpace(); + } + } +<FindMembers>{BN}*("service"){BN}+ { // UNO IDL service + lineCount(); + if (insideIDL) + { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Service | + // preserve UNO IDL [optional] or published + (current->spec & (Entry::Optional|Entry::Published)); + addType( current ) ; + current->type += " service " ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + BEGIN( CompoundName ); + } + else // TODO is addType right? just copy/pasted + { + addType( current ) ; + current->name = QCString(yytext).stripWhiteSpace(); + } + } +<FindMembers>{BN}*("singleton"){BN}+ { // UNO IDL singleton + lineCount(); + if (insideIDL) + { + isTypedef=FALSE; + current->section = Entry::CLASS_SEC; + current->spec = Entry::Singleton | + (current->spec & Entry::Published); // preserve + addType( current ) ; + current->type += " singleton " ; + current->fileName = yyFileName; + current->startLine = yyLineNr; + current->bodyLine = yyLineNr; + BEGIN( CompoundName ); + } + else // TODO is addType right? just copy/pasted + { + addType( current ) ; + current->name = QCString(yytext).stripWhiteSpace(); + } + } +<FindMembers>{BN}*((("disp")?"interface")|"valuetype"){BN}+ { // M$/Corba/UNO IDL/Java interface lineCount(); if (insideIDL || insideJava || insideCS || insideD || insidePHP) { isTypedef=FALSE; current->section = Entry::CLASS_SEC; - current->spec = Entry::Interface; + current->spec = Entry::Interface | + // preserve UNO IDL [optional] or published + (current->spec & (Entry::Optional|Entry::Published)); addType( current ) ; current->type += " interface" ; current->fileName = yyFileName; @@ -1501,7 +1574,8 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" <FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception isTypedef=FALSE; current->section = Entry::CLASS_SEC; - current->spec = Entry::Exception; + current->spec = Entry::Exception | + (current->spec & Entry::Published); // preserve UNO IDL addType( current ) ; current->type += " exception" ; current->fileName = yyFileName; @@ -1607,7 +1681,8 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" <FindMembers>{B}*{TYPEDEFPREFIX}"struct"/{BN}+ { isTypedef=((QCString)yytext).find("typedef")!=-1; current->section = Entry::CLASS_SEC ; - current->spec = Entry::Struct; + current->spec = Entry::Struct | + (current->spec & Entry::Published); // preserve UNO IDL // bug 582676: can be a struct nested in an interface so keep insideObjC state //current->objc = insideObjC = FALSE; addType( current ) ; @@ -2640,6 +2715,15 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" initBracketCount=0; BEGIN(ReadInitializer); } +<UNOIDLAttributeBlock>{BN}*[gs]"et"{BN}+"raises"{BN}*"("{BN}*{SCOPENAME}{BN}*(","{BN}*{SCOPENAME}{BN}*)*")"{BN}*";" { + lineCount(); + current->exception += " "; + current->exception += removeRedundantWhiteSpace(yytext); + } +<UNOIDLAttributeBlock>"}" { + current->exception += " }"; + BEGIN(FindMembers); + } /* Read initializer rules */ <ReadInitializer>"(" { lastRoundContext=YY_START; @@ -3248,6 +3332,39 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } current->spec |= Entry::Gettable; } +<IDLAttribute>"property" { // UNO IDL property + current->spec |= Entry::Property; + } +<IDLAttribute>"attribute" { // UNO IDL attribute + current->spec |= Entry::Attribute; + } +<IDLAttribute>"optional" { // on UNO IDL interface/service/attribute/property + current->spec |= Entry::Optional; + } +<IDLAttribute>"readonly" { // on UNO IDL attribute or property + current->spec |= Entry::Readonly; + } +<IDLAttribute>"bound" { // on UNO IDL attribute or property + current->spec |= Entry::Bound; + } +<IDLAttribute>"removable" { // on UNO IDL property + current->spec |= Entry::Removable; + } +<IDLAttribute>"constrained" { // on UNO IDL property + current->spec |= Entry::Constrained; + } +<IDLAttribute>"transient" { // on UNO IDL property + current->spec |= Entry::Transient; + } +<IDLAttribute>"maybevoid" { // on UNO IDL property + current->spec |= Entry::MaybeVoid; + } +<IDLAttribute>"maybedefault" { // on UNO IDL property + current->spec |= Entry::MaybeDefault; + } +<IDLAttribute>"maybeambiguous" { // on UNO IDL property + current->spec |= Entry::MaybeAmbiguous; + } <IDLAttribute>. { } <IDLPropName>{BN}*{ID}{BN}* { @@ -5044,6 +5161,28 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" current_root->addSubEntry(current); current = new Entry; } + else if (insideIDL && + (((current_root->spec & (Entry::Interface | + Entry::Service)) && + (current->spec & Entry::Interface)) || + ((current_root->spec & (Entry::Service | + Entry::Singleton)) && + (current->spec & Entry::Service)))) + { + // interface inside of UNO IDL service or interface + // service inside of UNO IDL service or singleton + // there may be documentation on the member, + // so do not throw it away... + current->name = yytext; + current->name=current->name.left(current->name.length()-1).stripWhiteSpace(); + current->section = (current->spec & Entry::Interface) + ? Entry::EXPORTED_INTERFACE_SEC + : Entry::INCLUDED_SERVICE_SEC; +// current->section = Entry::MEMBERDOC_SEC; + current->spec &= ~(Entry::Interface|Entry::Service); // FIXME: horrible: Interface == Gettable, so need to clear it - actually we're mixing values from different enums in this case... granted only Optional and Interface are actually valid in this context but urgh... + current_root->addSubEntry(current); + current = new Entry; + } unput(';'); current->reset(); @@ -5299,7 +5438,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" (current->spec & Entry::Struct) || (current->spec & Entry::Ref) || (current->spec & Entry::Value) || - insidePHP || insideCS || insideD || insideObjC + insidePHP || insideCS || insideD || insideObjC || insideIDL ) baseProt=Public; else @@ -5583,7 +5722,7 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" } if ((current->spec & (Entry::Interface|Entry::Struct)) || insideJava || insidePHP || insideCS || - insideD || insideObjC) + insideD || insideObjC || insideIDL) { baseProt=Public; } @@ -5784,6 +5923,13 @@ RAWEND ")"[^ \t\(\)\\]{0,16}\" curlyCount=0; BEGIN( CSAccessorDecl ); } + else if (insideIDL && (current->spec & Entry::Attribute)) + { + // UNO IDL: attributes may have setter and getter + // exception specifications + current->exception = " {"; + BEGIN(UNOIDLAttributeBlock); + } else { if ((insideJava || insideCS || insideD) && @@ -6330,7 +6476,7 @@ static void parseCompounds(Entry *rt) // set default protection based on the compound type if( ce->section==Entry::CLASS_SEC ) // class { - if (insidePHP || insideD || insideJS) + if (insidePHP || insideD || insideJS || insideIDL) { current->protection = protection = Public ; } diff --git a/src/translator.h b/src/translator.h index 41d3461..4de5da7 100644 --- a/src/translator.h +++ b/src/translator.h @@ -582,6 +582,18 @@ class Translator virtual QCString trMethodDocumentation() = 0; virtual QCString trDesignOverview() = 0; +////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trInterfaces() = 0; + virtual QCString trServices() = 0; + virtual QCString trConstantGroups() = 0; + virtual QCString trConstantGroupReference(const char *namespaceName) = 0; + virtual QCString trServiceReference(const char *sName) = 0; + virtual QCString trSingletonReference(const char *sName) = 0; + virtual QCString trServiceGeneratedFromFiles(bool single) = 0; + virtual QCString trSingletonGeneratedFromFiles(bool single) = 0; }; #endif diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 3073517..4a4db9d 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -41,7 +41,38 @@ class TranslatorAdapterBase : public Translator }; -class TranslatorAdapter_1_8_2 : public TranslatorAdapterBase +class TranslatorAdapter_1_8_4 : public TranslatorAdapterBase +{ + public: + virtual QCString updateNeededMessage() + { return createUpdateNeededMessage(idLanguage(),"release 1.8.4"); } + + virtual QCString trInterfaces() + { return english.trInterfaces(); } + + virtual QCString trServices() + { return english.trServices(); } + + virtual QCString trConstantGroups() + { return english.trConstantGroups(); } + + virtual QCString trConstantGroupReference(const char *namespaceName) + { return english.trConstantGroupReference(namespaceName); } + + virtual QCString trServiceReference(const char *sName) + { return english.trServiceReference(sName); } + + virtual QCString trSingletonReference(const char *sName) + { return english.trSingletonReference(sName); } + + virtual QCString trServiceGeneratedFromFiles(bool single) + { return english.trServiceGeneratedFromFiles(single); } + + virtual QCString trSingletonGeneratedFromFiles(bool single) + { return english.trSingletonGeneratedFromFiles(single); } +}; + +class TranslatorAdapter_1_8_2 : public TranslatorAdapter_1_8_4 { public: virtual QCString updateNeededMessage() @@ -70,7 +101,7 @@ class TranslatorAdapter_1_8_2 : public TranslatorAdapterBase }; -/** Adapter class for languages that only contain translations upto +/** Adapter class for languages that only contain translations up to * version 1.8.0. */ class TranslatorAdapter_1_8_0 : public TranslatorAdapter_1_8_2 @@ -102,7 +133,7 @@ class TranslatorAdapter_1_8_0 : public TranslatorAdapter_1_8_2 }; -/** Adapter class for languages that only contain translations upto +/** Adapter class for languages that only contain translations up to * version 1.7.5. */ class TranslatorAdapter_1_7_5 : public TranslatorAdapter_1_8_0 @@ -121,7 +152,7 @@ class TranslatorAdapter_1_7_5 : public TranslatorAdapter_1_8_0 { return english.trDirDepGraph(name); } }; -/** Adapter class for languages that only contain translations upto +/** Adapter class for languages that only contain translations up to * version 1.6.3. */ class TranslatorAdapter_1_6_3 : public TranslatorAdapter_1_7_5 @@ -142,7 +173,7 @@ class TranslatorAdapter_1_6_3 : public TranslatorAdapter_1_7_5 { return english.trDateTime(year,month,day,dayOfWeek,hour,minutes,seconds,includeTime); } }; -/** Adapter class for languages that only contain translations upto +/** Adapter class for languages that only contain translations up to * version 1.6.0. */ class TranslatorAdapter_1_6_0 : public TranslatorAdapter_1_6_3 @@ -167,7 +198,7 @@ class TranslatorAdapter_1_6_0 : public TranslatorAdapter_1_6_3 { return english.trNoMatches(); } }; -/** Adapter class for languages that only contain translations upto +/** Adapter class for languages that only contain translations up to * version 1.5.4 */ class TranslatorAdapter_1_5_4 : public TranslatorAdapter_1_6_0 @@ -246,7 +277,7 @@ class TranslatorAdapter_1_5_4 : public TranslatorAdapter_1_6_0 { return english.trTypeConstraints(); } }; -/** Adapter class for languages that only contain translations upto +/** Adapter class for languages that only contain translations up to * version 1.4.6 */ class TranslatorAdapter_1_4_6 : public TranslatorAdapter_1_5_4 diff --git a/src/translator_am.h b/src/translator_am.h index 5264a21..d8ab0fd 100644 --- a/src/translator_am.h +++ b/src/translator_am.h @@ -572,36 +572,38 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 ClassDef::CompoundType compType,
bool isTemplate)
{
- QCString result=(QCString)clName;
- if (isTemplate)
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Դասի"; break;
- case ClassDef::Struct: result+=" Կառուցվածքի"; break;
- case ClassDef::Union: result+=" Միավորման"; break;
- case ClassDef::Interface: result+=" Ինտերֆեյսի"; break;
- case ClassDef::Protocol: result+=" Արձանագրության"; break;
- case ClassDef::Category: result+=" Դասակարգման"; break;
- case ClassDef::Exception: result+=" Բացառության"; break;
- }
- result+=" Ձևանմուշներ";
- }
- else
- {
- switch(compType)
- {
- case ClassDef::Class: result+=" Դաս"; break;
- case ClassDef::Struct: result+=" Կառուցվածք"; break;
- case ClassDef::Union: result+=" Միավորում"; break;
- case ClassDef::Interface: result+=" Ինտերֆեյս"; break;
- case ClassDef::Protocol: result+=" Արձանագրություն"; break;
- case ClassDef::Category: result+=" Դասակարգում"; break;
- case ClassDef::Exception: result+=" Բացառություն"; break;
- }
- }
- return result;
- }
+ QCString result=(QCString)clName;
+ if (isTemplate)
+ {
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Դասի"; break;
+ case ClassDef::Struct: result+=" Կառուցվածքի"; break;
+ case ClassDef::Union: result+=" Միավորման"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյսի"; break;
+ case ClassDef::Protocol: result+=" Արձանագրության"; break;
+ case ClassDef::Category: result+=" Դասակարգման"; break;
+ case ClassDef::Exception: result+=" Բացառության"; break;
+ default: break;
+ }
+ result+=" Ձևանմուշներ";
+ }
+ else
+ {
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Դաս"; break;
+ case ClassDef::Struct: result+=" Կառուցվածք"; break;
+ case ClassDef::Union: result+=" Միավորում"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյս"; break;
+ case ClassDef::Protocol: result+=" Արձանագրություն"; break;
+ case ClassDef::Category: result+=" Դասակարգում"; break;
+ case ClassDef::Exception: result+=" Բացառություն"; break;
+ default: break;
+ }
+ }
+ return result;
+ }
/*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName)
@@ -755,6 +757,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="արձանագրության"; break;
case ClassDef::Category: result+="դասակարգման"; break;
case ClassDef::Exception: result+="բացառության"; break;
+ default: break;
}
result+=" փաստագրությունը ստեղծվել է հետևյալ ֆայլ";
if (single) result+="ից."; else result+="երից.";
@@ -1623,30 +1626,32 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 QCString result=(QCString)clName;
if (!isTemplate)
{
- switch(compType)
- {
- case ClassDef::Class: result+=" Մոդուլ"; break;
- case ClassDef::Struct: result+=" Տիպ"; break;
- case ClassDef::Union: result+=" Միավորում"; break;
- case ClassDef::Interface: result+=" Ինտերֆեյս"; break;
- case ClassDef::Protocol: result+=" Արձանագրություն"; break;
- case ClassDef::Category: result+=" Դասակարգում"; break;
- case ClassDef::Exception: result+=" Բացառություն"; break;
- }
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Մոդուլ"; break;
+ case ClassDef::Struct: result+=" Տիպ"; break;
+ case ClassDef::Union: result+=" Միավորում"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյս"; break;
+ case ClassDef::Protocol: result+=" Արձանագրություն"; break;
+ case ClassDef::Category: result+=" Դասակարգում"; break;
+ case ClassDef::Exception: result+=" Բացառություն"; break;
+ default: break;
+ }
}
else
{
- switch(compType)
- {
- case ClassDef::Class: result+=" Մոդուլի"; break;
- case ClassDef::Struct: result+=" Տիպի"; break;
- case ClassDef::Union: result+=" Միավորման"; break;
- case ClassDef::Interface: result+=" Ինտերֆեյսի"; break;
- case ClassDef::Protocol: result+=" Արձանագրության"; break;
- case ClassDef::Category: result+=" Դասակարգման"; break;
- case ClassDef::Exception: result+=" Բացառության"; break;
- }
- result+=" Ձևանմուշ";
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Մոդուլի"; break;
+ case ClassDef::Struct: result+=" Տիպի"; break;
+ case ClassDef::Union: result+=" Միավորման"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյսի"; break;
+ case ClassDef::Protocol: result+=" Արձանագրության"; break;
+ case ClassDef::Category: result+=" Դասակարգման"; break;
+ case ClassDef::Exception: result+=" Բացառության"; break;
+ default: break;
+ }
+ result+=" Ձևանմուշ";
}
return result;
}
@@ -1710,6 +1715,7 @@ class TranslatorArmenian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="արձանագրության"; break;
case ClassDef::Category: result+="դասակարգման"; break;
case ClassDef::Exception: result+="բացառության"; break;
+ default: break;
}
result+=" փաստագրությունը ստեղծվել է հետևալ ֆայլ";
if (single) result+="ից."; else result+="երից.";
diff --git a/src/translator_ar.h b/src/translator_ar.h index 818cef8..8b6b2e0 100644 --- a/src/translator_ar.h +++ b/src/translator_ar.h @@ -644,6 +644,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Reference"; @@ -803,6 +804,7 @@ class TranslatorArabic : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+=" "; break; case ClassDef::Category: result+=" "; break; case ClassDef::Exception: result+=" "; break; + default: break; } result+=" "; if (single) result+=" :"; else result+=" :"; diff --git a/src/translator_br.h b/src/translator_br.h index f4c0c20..e67ad9f 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -609,6 +609,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" Protocolo "; break; case ClassDef::Category: result+=" Categoria "; break; case ClassDef::Exception: result+=" Exceção "; break; + default: break; } result+=(QCString)clName; return result; @@ -767,6 +768,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="protocolo "; break; case ClassDef::Category: result+="categoria "; break; case ClassDef::Exception: result+="exceção "; break; + default: break; } result+=" foi gerada a partir "; if (single) result+="do seguinte arquivo:"; else result+="dos seguintes arquivos:"; @@ -1671,6 +1673,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="do Protocolo "; break; case ClassDef::Category: result+="da Categoria "; break; case ClassDef::Exception: result+="da Exceção "; break; + default: break; } result += clName; @@ -1738,6 +1741,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="esto protocolo "; break; case ClassDef::Category: result+="esta categoria "; break; case ClassDef::Exception: result+="esta exceção "; break; + default: break; } result+=" foi gerada a partir do"; diff --git a/src/translator_ca.h b/src/translator_ca.h index 521037e..f888dc1 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -621,6 +621,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="l Protocol "; break; case ClassDef::Category: result+=" la Categoria "; break; case ClassDef::Exception: result+=" l'Excepció "; break; + default: break; } if (isTemplate) result+="Template "; result+=(QCString)clName; @@ -780,6 +781,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" protocol"; break; case ClassDef::Category: result+="a categoria"; break; case ClassDef::Exception: result+="a excepció"; break; + default: break; } result+=" es va generar a partir del"; if (!single) result+="s"; @@ -1674,6 +1676,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="l Protocol "; break; case ClassDef::Category: result+=" la Categoria "; break; case ClassDef::Exception: result+=" l'Excepció "; break; + default: break; } if (isTemplate) result+="Template "; result+=(QCString)clName; @@ -1745,6 +1748,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" protocol"; break; case ClassDef::Category: result+="a categoria"; break; case ClassDef::Exception: result+="a excepció"; break; + default: break; } result+=" es va generar a partir del"; if (!single) result+="s"; diff --git a/src/translator_cn.h b/src/translator_cn.h index ac9dca4..ba6e078 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -19,7 +19,7 @@ #define TRANSLATOR_CN_H /*! - If you want insert a space whenever Chinese meets English charactors, set + If you want insert a space whenever Chinese meets English characters, set CN_SPC to " ", else null. */ #define CN_SPC " " @@ -30,7 +30,7 @@ class TranslatorChinese : public TranslatorAdapter_1_8_2 /*! Used for identification of the language. The identification * should not be translated. It should be replaced by the name * of the language in English using lower-case characters only - * (e.g. "czech", "japanese", "russian", etc.). It sould be equal to + * (e.g. "czech", "japanese", "russian", etc.). It should be equal to * the identification used in the language.cpp. */ @@ -475,6 +475,7 @@ class TranslatorChinese : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="协议"; break; case ClassDef::Category: result+="分类"; break; case ClassDef::Exception: result+="异常"; break; + default: break; } result+=CN_SPC"参考"; return result; @@ -643,6 +644,7 @@ class TranslatorChinese : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="协议"; break; case ClassDef::Category: result+="分类"; break; case ClassDef::Exception: result+="异常"; break; + default: break; } result+="的文档由以下文件生成:"; return result; @@ -1609,6 +1611,7 @@ class TranslatorChinese : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+=CN_SPC"协议"; break; case ClassDef::Category: result+=CN_SPC"目录"; break; case ClassDef::Exception: result+=CN_SPC"异常"; break; + default: break; } if (isTemplate) result+="模板"CN_SPC; result+="参考手册"; @@ -1683,6 +1686,7 @@ class TranslatorChinese : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+=CN_SPC"协议"; break; case ClassDef::Category: result+=CN_SPC"目录"; break; case ClassDef::Exception: result+=CN_SPC"异常"; break; + default: break; } result+=CN_SPC"的文档由以下文件生成:"; return result; diff --git a/src/translator_cz.h b/src/translator_cz.h index d8d9428..31d645f 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -84,7 +84,7 @@ // something else. It is difficult to find the general translation // for all kinds in the Czech language. -class TranslatorCzech : public Translator +class TranslatorCzech : public TranslatorAdapter_1_8_2 { public: // --- Language control methods ------------------- @@ -657,6 +657,7 @@ class TranslatorCzech : public Translator case ClassDef::Protocol: result += "protokolu "; break; case ClassDef::Category: result += "kategorie "; break; case ClassDef::Exception: result += "výjimky "; break; + default: break; } result += clName; return result; @@ -829,6 +830,7 @@ class TranslatorCzech : public Translator case ClassDef::Protocol: result+="tento protokol "; break; case ClassDef::Category: result+="tuto kategorii "; break; case ClassDef::Exception: result+="tuto výjimku"; break; + default: break; } result+=" byla generována z "; if (single) result+="následujícího souboru:"; @@ -1719,6 +1721,7 @@ class TranslatorCzech : public Translator case ClassDef::Protocol: result += "protokolu "; break; case ClassDef::Category: result += "kategorie "; break; case ClassDef::Exception: result += "výjimky "; break; + default: break; } result += clName; return result; @@ -1786,6 +1789,7 @@ class TranslatorCzech : public Translator case ClassDef::Protocol: result+="k tomuto protokolu"; break; case ClassDef::Category: result+="k této kategorii"; break; case ClassDef::Exception: result+="k této výjimce"; break; + default: break; } result+=" byla vygenerována z "; if (single) result+="následujícího souboru:"; diff --git a/src/translator_de.h b/src/translator_de.h index 415bf77..ed9bf29 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -133,7 +133,7 @@ #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public Translator +class TranslatorGerman : public TranslatorAdapter_1_8_2 { public: @@ -684,6 +684,7 @@ class TranslatorGerman : public Translator case ClassDef::Protocol: result+="Protokoll"; break; case ClassDef::Category: result+="Kategorie"; break; case ClassDef::Exception: result+="Ausnahmen"; break; + default: break; } result+="referenz"; return result; @@ -851,6 +852,7 @@ class TranslatorGerman : public Translator case ClassDef::Protocol: result+="s Protokoll"; break; case ClassDef::Category: result+=" Kategorie"; break; case ClassDef::Exception: result+=" Ausnahme"; break; + default: break; } result+=" wurde erzeugt aufgrund der Datei"; if (single) result+=":"; else result+="en:"; @@ -1776,6 +1778,7 @@ class TranslatorGerman : public Translator case ClassDef::Protocol: result+="Protokoll"; break; case ClassDef::Category: result+="Kategorie"; break; case ClassDef::Exception: result+="Ausnahmen"; break; + default: break; } if (isTemplate) result+="-Template"; result+="-Referenz"; @@ -1844,6 +1847,7 @@ class TranslatorGerman : public Translator case ClassDef::Protocol: result+="dieses Protokoll"; break; case ClassDef::Category: result+="diese Kategorie"; break; case ClassDef::Exception: result+="diese Ausnahme"; break; + default: break; } if (single) result+=" wurde aus der folgenden Datei erzeugt:"; diff --git a/src/translator_dk.h b/src/translator_dk.h index 4611b1a..6d17df5 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -632,6 +632,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" Protokol-"; break; case ClassDef::Category: result+=" Kategori-"; break; // " Category-" case ClassDef::Exception: result+=" Undtagelse-"; break; // " Exception" + default: break; } if (isTemplate) result+="skabelon-"; // "template-" result+="reference"; @@ -789,6 +790,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="protokol"; break; // "protocol" case ClassDef::Category: result+="kategori"; break; // "category" case ClassDef::Exception: result+="undtagelse"; break; // "exception" + default: break; } result+=" blev genereret ud fra fil"; if (single) result+="en:"; else result+="erne:"; @@ -1604,6 +1606,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" Protocol"; break; // " Protocol" case ClassDef::Category: result+=" Kategori"; break; // " Category" case ClassDef::Exception: result+=" Undtagelse"; break; // " Exception" + default: break; } if (isTemplate) result+=" Template"; result+=" Reference"; @@ -1673,6 +1676,7 @@ class TranslatorDanish : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="protokol"; break; // "protocol" case ClassDef::Category: result+="kategori"; break; // "category" case ClassDef::Exception: result+="undtagelse"; break; // "exception" + default: break; } result+=" var lavet udfra flgende file"; // " was generated from the following file" if (single) result+=":"; else result+="r:"; // ":" / "s:" diff --git a/src/translator_en.h b/src/translator_en.h index ccddccb..1ab9921 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -621,6 +621,7 @@ class TranslatorEnglish : public Translator case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Reference"; @@ -779,6 +780,7 @@ class TranslatorEnglish : public Translator case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" was generated from the following file"; if (single) result+=":"; else result+="s:"; @@ -1679,6 +1681,7 @@ class TranslatorEnglish : public Translator case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Reference"; @@ -1747,6 +1750,7 @@ class TranslatorEnglish : public Translator case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" was generated from the following file"; if (single) result+=":"; else result+="s:"; @@ -1988,6 +1992,62 @@ class TranslatorEnglish : public Translator } ////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + + /** old style UNO IDL services: implemented interfaces */ + virtual QCString trInterfaces() + { return "Exported Interfaces"; } + + /** old style UNO IDL services: inherited services */ + virtual QCString trServices() + { return "Included Services"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroups() + { return "Constant Groups"; } + + /** UNO IDL constant groups */ + virtual QCString trConstantGroupReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Constant Group Reference"; + return result; + } + /** UNO IDL service page title */ + virtual QCString trServiceReference(const char *sName) + { + QCString result=(QCString)sName; + result+=" Service Reference"; + return result; + } + /** UNO IDL singleton page title */ + virtual QCString trSingletonReference(const char *sName) + { + QCString result=(QCString)sName; + result+=" Singleton Reference"; + return result; + } + /** UNO IDL service page */ + virtual QCString trServiceGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"The documentation for this service " + "was generated from the following file"; + if (single) result+=":"; else result+="s:"; + return result; + } + /** UNO IDL singleton page */ + virtual QCString trSingletonGeneratedFromFiles(bool single) + { + // single is true implies a single file + QCString result=(QCString)"The documentation for this singleton " + "was generated from the following file"; + if (single) result+=":"; else result+="s:"; + return result; + } + +////////////////////////////////////////////////////////////////////////// }; diff --git a/src/translator_eo.h b/src/translator_eo.h index a4f60a1..9c08d4c 100644 --- a/src/translator_eo.h +++ b/src/translator_eo.h @@ -42,7 +42,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorEsperanto : public Translator +class TranslatorEsperanto : public TranslatorAdapter_1_8_2 { public: @@ -623,6 +623,7 @@ class TranslatorEsperanto : public Translator case ClassDef::Protocol: result+="protokolo "; break; case ClassDef::Category: result+="kategorio "; break; case ClassDef::Exception: result+="escepto "; break; + default: break; } result+=(QCString)clName; return result; @@ -780,6 +781,7 @@ class TranslatorEsperanto : public Translator case ClassDef::Protocol: result+="protokolo"; break; case ClassDef::Category: result+="kategorio"; break; case ClassDef::Exception: result+="escepto"; break; + default: break; } result+=" generitas el la "; if (single) result+="sekva dosiero:"; @@ -1679,6 +1681,7 @@ class TranslatorEsperanto : public Translator case ClassDef::Protocol: result+="protokolo "; break; case ClassDef::Category: result+="kategorio "; break; case ClassDef::Exception: result+="escepto "; break; + default: break; } result+=(QCString)clName; return result; @@ -1745,6 +1748,7 @@ class TranslatorEsperanto : public Translator case ClassDef::Protocol: result+="protokolo"; break; case ClassDef::Category: result+="kategorio"; break; case ClassDef::Exception: result+="escepto"; break; + default: break; } result+=" kreiĝis el la "; if (single) result+="sekva dosiero:"; else result+="sekvaj dosieroj:"; diff --git a/src/translator_es.h b/src/translator_es.h index 745498b..9d3ba1d 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -33,7 +33,7 @@ * Updated to 1.8.2 by Bartomeu Creus Navarro (01-julio-2012) */ -class TranslatorSpanish : public Translator +class TranslatorSpanish : public TranslatorAdapter_1_8_2 { public: @@ -613,6 +613,7 @@ class TranslatorSpanish : public Translator case ClassDef::Protocol: result+="l Protocolo "; break; case ClassDef::Category: result+=" la Categoria "; break; case ClassDef::Exception: result+=" la Excepción "; break; + default: break; } result+=(QCString)clName; return result; @@ -780,6 +781,7 @@ class TranslatorSpanish : public Translator case ClassDef::Protocol: result+="e protocolo"; break; case ClassDef::Category: result+="a categoría"; break; case ClassDef::Exception: result+="a excepción"; break; + default: break; } result+=" fue generada a partir de"; if (single) result+="l siguiente fichero:"; @@ -1737,6 +1739,7 @@ class TranslatorSpanish : public Translator case ClassDef::Protocol: result+="l protocolo"; break; case ClassDef::Category: result+=" la categoría"; break; case ClassDef::Exception: result+=" la excepción"; break; + default: break; } result+=(QCString)clName; return result; @@ -1805,6 +1808,7 @@ class TranslatorSpanish : public Translator case ClassDef::Protocol: result+="e protocolo"; break; case ClassDef::Category: result+="a categoría"; break; case ClassDef::Exception: result+="a excepción"; break; + default: break; } result+=" fue generada de"; if (single) result+="l siguiente fichero:"; diff --git a/src/translator_fa.h b/src/translator_fa.h index 647ae28..d3c38a6 100644 --- a/src/translator_fa.h +++ b/src/translator_fa.h @@ -623,6 +623,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result=" Protocol"; break; case ClassDef::Category: result=" Category"; break; case ClassDef::Exception: result=" استثناء"; break; + default: break; } if (isTemplate) result+=" قالب"; result=QCString(clName) + " مرجع" +result ; @@ -779,6 +780,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" از روی پرونده "; if (single) result+=""; else result+="های "; @@ -1651,6 +1653,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Reference"; @@ -1708,6 +1711,7 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" was generated from the following file"; if (single) result+=":"; else result+="s:"; diff --git a/src/translator_fi.h b/src/translator_fi.h index cfe933d..ff852e8 100644 --- a/src/translator_fi.h +++ b/src/translator_fi.h @@ -686,6 +686,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol" case ClassDef::Category: result+=" kategoria"; break; // " Category" case ClassDef::Exception: result+=" poikkeus"; break; // " Exception" + default: break; } if (isTemplate) result+="malli"; // " Template" result+="referenssi"; // " Reference" @@ -845,6 +846,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protokollalle"; break; // "protocol" case ClassDef::Category: result+="kategorialle"; break; // "category" case ClassDef::Exception: result+="poikkeukselle"; break; // "exception" + default: break; } if (single) result+=" luotiin seuraavasta tiedostosta:"; // " was generated from the following file" else result+=" luotiin seuraavista tiedostoista:"; // ":" or "s:" @@ -1799,6 +1801,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" protokolla"; break; // " Protocol" case ClassDef::Category: result+=" kategoria"; break; // " Category" case ClassDef::Exception: result+=" poikkeus"; break; // " Exception" + default: break; } if (isTemplate) result+="malli"; // " Template" result+="referenssi"; // " Reference" @@ -1866,6 +1869,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protokollalle"; break; // "protocol" case ClassDef::Category: result+="kategorialle"; break; // "category" case ClassDef::Exception: result+="poikkeukselle"; break; // "exception" + default: break; } result+=" luotiin "; // " was generated from the following file" if (single) result+="seuraavasta tiedostosta:"; else result+="seuraavista tiedostoista:"; // ":" / "s:" diff --git a/src/translator_fr.h b/src/translator_fr.h index 482667e..8befead 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -679,6 +679,7 @@ class TranslatorFrench : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="le protocol "; break; case ClassDef::Category: result+="la catgorie "; break; case ClassDef::Exception: result+="l'exception "; break; + default: break; } result+=(QCString)clName; return result; @@ -838,6 +839,7 @@ class TranslatorFrench : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="ce protocol"; female = false; break; case ClassDef::Category: result+="cette catgorie"; break; case ClassDef::Exception: result+="cette exception"; break; + default: break; } if (female) result+= " a t gnre partir "; else result+=" a t gnr partir "; @@ -1739,6 +1741,7 @@ class TranslatorFrench : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="du protocole "; break; case ClassDef::Category: result+="de la catgorie "; break; case ClassDef::Exception: result+="de l'exception "; break; + default: break; } result+=(QCString)clName; return result; @@ -1806,6 +1809,7 @@ class TranslatorFrench : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="ce protocole"; break; case ClassDef::Category: result+="cette catgorie"; break; case ClassDef::Exception: result+="cette exception"; break; + default: break; } result+=" a t gnre partir "; if (single) result+="du fichier suivant :"; else result+="des fichiers suivants :"; diff --git a/src/translator_gr.h b/src/translator_gr.h index 8457f4c..636da39 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -19,14 +19,14 @@ * 15 Dec 2001 : Translation to greek by * Harry Kalogirou <no email> * - * 01 Jan 2009 : Greek maintainance by + * 01 Jan 2009 : Greek maintenance by * Paul Gessos <gessos.paul@yahoo.gr> */ #ifndef TRANSLATOR_GR_H #define TRANSLATOR_GR_H -class TranslatorGreek : public Translator +class TranslatorGreek : public TranslatorAdapter_1_8_2 { public: @@ -593,8 +593,9 @@ class TranslatorGreek : public Translator case ClassDef::Protocol: result+=" Πρωτοκόλλου "; break; case ClassDef::Category: result+=" Κατηγορίας "; break; case ClassDef::Exception: result+=" Εξαίρεσης "; break; + default: break; } - result+=clName; + result+=clName; return result; } @@ -751,6 +752,7 @@ class TranslatorGreek : public Translator case ClassDef::Protocol: result+="αυτό το πρωτόκολλο"; break; case ClassDef::Category: result+="αυτή την κατηγορία"; break; case ClassDef::Exception: result+="αυτή την εξαίρεση"; break; + default: break; } result+=" δημιουργήθηκε απο τ"; if (single) result+="ο ακόλουθο αρχείο:"; else result+="α ακόλουθα αρχεία:"; @@ -1650,6 +1652,7 @@ class TranslatorGreek : public Translator case ClassDef::Protocol: result+=" Πρωτόκολλο"; break; case ClassDef::Category: result+=" Κατηγορία"; break; case ClassDef::Exception: result+=" Εξαίρεση"; break; + default: break; } if (isTemplate) result+=" Πρότυπο"; result+=" Δήλωση"; @@ -1717,6 +1720,7 @@ class TranslatorGreek : public Translator case ClassDef::Protocol: result+="αυτό το πρωτόκολλο"; break; case ClassDef::Category: result+="αυτή την κατηγορία"; break; case ClassDef::Exception: result+="αυτή την εξαίρεση"; break; + default: break; } result+=" δημιουργήθηκε από "; if (single) result+="το παρακάτω αρχείο:"; else result+="τα παρακάτω αρχεία:"; diff --git a/src/translator_hr.h b/src/translator_hr.h index 0c33407..bb124dd 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -18,7 +18,7 @@ // Updates: // -------- // 2000/08/20 -// - Better handling of ISO-8859-2/ WIN 1250 stuff based on (actualy stolen from :-)) Czech translations +// - Better handling of ISO-8859-2/ WIN 1250 stuff based on (actually stolen from :-)) Czech translations // implemented by Petr Prikryl (prikrylp@skil.cz). // As opposed to Czech translation this one assumes that Doxygen strings are written in Linux ( it's true, // I don't have QT pro licence ) , and uses ISOToWin function when built in WIN32 @@ -367,9 +367,9 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+=" protokola "; break; case ClassDef::Category: result+=" kategorije "; break; case ClassDef::Exception: result+=" iznimke (exception) "; break; + default: break; } - result += clName; - + result += clName; return result; } QCString trFileReference(const char *fileName) @@ -517,6 +517,7 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="protokola"; break; case ClassDef::Category: result+="kategorije"; break; case ClassDef::Exception: result+="iznimke (exception)"; break; + default: break; } result+=" je napravljena iz " + trFile(FALSE, single) + ": "; return result; @@ -1359,13 +1360,14 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 QCString result=(QCString)clName; switch(compType) { - case ClassDef::Class: result+=" Modul"; break; - case ClassDef::Struct: result+=" Tip"; break; - case ClassDef::Union: result+=" Unija"; break; - case ClassDef::Interface: result+=" Sučelje"; break; - case ClassDef::Protocol: result+=" Protokol"; break; - case ClassDef::Category: result+=" Kategorija"; break; - case ClassDef::Exception: result+=" Iznimka"; break; + case ClassDef::Class: result+=" Modul"; break; + case ClassDef::Struct: result+=" Tip"; break; + case ClassDef::Union: result+=" Unija"; break; + case ClassDef::Interface: result+=" Sučelje"; break; + case ClassDef::Protocol: result+=" Protokol"; break; + case ClassDef::Category: result+=" Kategorija"; break; + case ClassDef::Exception: result+=" Iznimka"; break; + default: break; } if (isTemplate) result+=" Predložak"; result+=" Referenca"; @@ -1426,13 +1428,14 @@ class TranslatorCroatian : public TranslatorAdapter_1_8_2 QCString result=(QCString)"Dokumentacija ovog "; switch(compType) { - case ClassDef::Class: result+="modula"; break; - case ClassDef::Struct: result+="tipa"; break; - case ClassDef::Union: result+="unije"; break; - case ClassDef::Interface: result+="sučelja"; break; - case ClassDef::Protocol: result+="protokola"; break; - case ClassDef::Category: result+="kategorije"; break; - case ClassDef::Exception: result+="iznimke"; break; + case ClassDef::Class: result+="modula"; break; + case ClassDef::Struct: result+="tipa"; break; + case ClassDef::Union: result+="unije"; break; + case ClassDef::Interface: result+="sučelja"; break; + case ClassDef::Protocol: result+="protokola"; break; + case ClassDef::Category: result+="kategorije"; break; + case ClassDef::Exception: result+="iznimke"; break; + default: break; } result+=" je napravljena iz :"; return result; diff --git a/src/translator_hu.h b/src/translator_hu.h index 17d588e..58cb0d5 100644 --- a/src/translator_hu.h +++ b/src/translator_hu.h @@ -602,6 +602,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+=" protocol"; break; // translate me! case ClassDef::Category: result+=" category"; break; // translate me! case ClassDef::Exception: result+=" kivtel"; break; + default: break; } if (isTemplate) result+="sablon-"; result+="referencia"; @@ -761,6 +762,7 @@ class TranslatorHungarian : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+="protocol"; break; // translate me! case ClassDef::Category: result+="category"; break; // translate me! case ClassDef::Exception: result+="a kivtelrl"; break; + default: break; } result+=" a kvetkez fjl"; if (!single) result+="ok"; diff --git a/src/translator_id.h b/src/translator_id.h index 3afbe50..18e561a 100644 --- a/src/translator_id.h +++ b/src/translator_id.h @@ -603,6 +603,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" Protokol "; break; case ClassDef::Category: result+=" Kategori "; break; case ClassDef::Exception: result+=" Eksepsi "; break; + default: break; } if (isTemplate) result+=" Template "; result+=(QCString)clName; @@ -762,6 +763,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="protokol"; break; case ClassDef::Category: result+="kategori"; break; case ClassDef::Exception: result+="eksepsi"; break; + default: break; } result+=" ini dibangkitkan dari file"; result+=single ? "" : "-file"; @@ -1658,6 +1660,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="Protokol "; break; case ClassDef::Category: result+="Kategori "; break; case ClassDef::Exception: result+="Eksepsi "; break; + default: break; } result+=(QCString)clName; return result; @@ -1724,6 +1727,7 @@ class TranslatorIndonesian : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" ini dibangkitkan dari file"; if (!single) result+="-file "; diff --git a/src/translator_it.h b/src/translator_it.h index 53c9cb7..db8bd81 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -51,7 +51,7 @@ * 2001/05: adopted new translation mechanism (trough adapters), * translated new items used since version 1.2.5 and 1.2.6, * revised those function returning strings in OPTIMIZE_OTPUT_FOR_C case, - * corrections regarding the plurals of some english terms mantained in the translation, + * corrections regarding the plurals of some english terms maintained in the translation, * changed some terms to better suit the sense * 2001/02: translated new items used since version 1.2.4 * 2000/11: modified slightly the translation in trLegendDocs() function, @@ -633,6 +633,7 @@ class TranslatorItalian : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="il protocollo "; break; case ClassDef::Category: result+="la categoria "; break; case ClassDef::Exception: result+="l'eccezione "; break; + default: break; } result+=(QCString)clName; return result; @@ -794,6 +795,7 @@ class TranslatorItalian : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="o protocollo"; break; case ClassDef::Category: result+="a categoria"; break; case ClassDef::Exception: result+="a eccezione"; break; + default: break; } result+=" è stata generata a partire "; if (single) result+="dal seguente file:"; @@ -1657,6 +1659,7 @@ class TranslatorItalian : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+=" il protocollo"; break; case ClassDef::Category: result+=" la categoria"; break; case ClassDef::Exception: result+=" l'eccezione"; break; + default: break; } result+=(QCString)clName; return result; @@ -1725,6 +1728,7 @@ class TranslatorItalian : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="o protocollo"; break; case ClassDef::Category: result+="a categoria"; break; case ClassDef::Exception: result+="a eccezione"; break; + default: break; } result+=" è stata generata a partire "; if (single) result+="dal seguente file:"; else result+="dai seguenti file:"; diff --git a/src/translator_jp.h b/src/translator_jp.h index 8f080a4..418d6bb 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -601,6 +601,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=decode("ץȥ "); break; case ClassDef::Category: result+=decode("ƥ "); break; case ClassDef::Exception: result+=decode("㳰 "); break; + default: break; } if (isTemplate) result+=decode("ƥץ졼 "); result+=(QCString)clName; @@ -759,6 +760,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=decode("ץȥ"); break; case ClassDef::Category: result+=decode("ƥ"); break; case ClassDef::Exception: result+=decode("㳰"); break; + default: break; } result+=decode("ϼΥե뤫ޤ:"); return result; @@ -1660,6 +1662,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=decode("ץȥ "); break; case ClassDef::Category: result+=decode("ƥ "); break; case ClassDef::Exception: result+=decode("㳰 "); break; + default: break; } if (isTemplate) result += decode("ƥץ졼 "); result+=(QCString)clName; @@ -1720,6 +1723,7 @@ class TranslatorJapanese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=decode("ץȥ"); break; case ClassDef::Category: result+=decode("ƥ"); break; case ClassDef::Exception: result+=decode("㳰"); break; + default: break; } result+=decode(decode("ϼΥե뤫ޤ:")); return result; diff --git a/src/translator_kr.h b/src/translator_kr.h index 043323c..3e411aa 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -641,6 +641,7 @@ class TranslatorKorean : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=" "; break; case ClassDef::Category: result+=" īװ"; break; case ClassDef::Exception: result+=" "; break; + default: break; } if (isTemplate) result+=" ø"; result+=" "; @@ -800,6 +801,7 @@ class TranslatorKorean : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=""; break; case ClassDef::Category: result+="īװ"; break; case ClassDef::Exception: result+=""; break; + default: break; } result+=" ȭ "; if (!single) result+=""; @@ -1691,6 +1693,7 @@ class TranslatorKorean : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=" "; break; case ClassDef::Category: result+=" īװ"; break; case ClassDef::Exception: result+=" "; break; + default: break; } if (isTemplate) result+=" ø"; result+=" "; @@ -1761,6 +1764,7 @@ class TranslatorKorean : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=""; break; case ClassDef::Category: result+="īװ"; break; case ClassDef::Exception: result+=""; break; + default: break; } result+=" ȭ :"; return result; diff --git a/src/translator_lt.h b/src/translator_lt.h index 166ecbd..414ea8f 100644 --- a/src/translator_lt.h +++ b/src/translator_lt.h @@ -611,6 +611,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+=" Protokolas"; break; case ClassDef::Category: result+=" Kategorija"; break; case ClassDef::Exception: result+=" Iimtis"; break; + default: break; } if (isTemplate) result+=" ablonas"; return result; @@ -769,6 +770,7 @@ class TranslatorLithuanian : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+="iam protocolui"; break; case ClassDef::Category: result+="iai kategorijai"; break; case ClassDef::Exception: result+="iai iimiai"; break; + default: break; } result+=" sugeneruota i "; if (single) result+="io failo:"; else result+="i fail:"; diff --git a/src/translator_mk.h b/src/translator_mk.h index f162def..e190241 100644 --- a/src/translator_mk.h +++ b/src/translator_mk.h @@ -607,6 +607,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Протокол"; break; case ClassDef::Category: result+=" Категорија"; break; case ClassDef::Exception: result+=" Исклучок"; break; + default: break; } if (isTemplate) result+=" Образец"; result+=" Повикување"; @@ -766,6 +767,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="овој протокол"; break; case ClassDef::Category: result+="оваа категорија"; break; case ClassDef::Exception: result+="овој исклучок"; break; + default: break; } result+=" беше создадена од "; if (single) result+="следнава датотека:"; else result+="следниве датотеки:"; @@ -1660,6 +1662,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Протокол"; break; case ClassDef::Category: result+=" Категорија"; break; case ClassDef::Exception: result+=" Исклучок"; break; + default: break; } if (isTemplate) result+=" Образец"; return result; @@ -1726,6 +1729,7 @@ class TranslatorMacedonian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="овој протокол"; break; case ClassDef::Category: result+="оваа категорија"; break; case ClassDef::Exception: result+="овој исклучок"; break; + default: break; } result+=" беше создадена од "; if (single) result+="следнава датотека:"; else result+="следниве датотеки:"; diff --git a/src/translator_nl.h b/src/translator_nl.h index 3c1cb8e..41d77fb 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -18,7 +18,7 @@ #ifndef TRANSLATOR_NL_H #define TRANSLATOR_NL_H -class TranslatorDutch : public Translator +class TranslatorDutch : public TranslatorAdapter_1_8_2 { public: QCString idLanguage() @@ -268,6 +268,7 @@ class TranslatorDutch : public Translator case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } result+=" Referentie"; return result; @@ -416,6 +417,7 @@ class TranslatorDutch : public Translator case ClassDef::Protocol: result+="dit protocol"; break; case ClassDef::Category: result+="deze categorie"; break; case ClassDef::Exception: result+="deze exceptie"; break; + default: break; } result+=" is gegenereerd op grond van "; if (single) result+="het"; else result+="de"; @@ -1277,6 +1279,7 @@ class TranslatorDutch : public Translator case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Referentie"; @@ -1340,6 +1343,7 @@ class TranslatorDutch : public Translator case ClassDef::Protocol: result+="dit protocol"; break; case ClassDef::Category: result+="deze category"; break; case ClassDef::Exception: result+="deze exception"; break; + default: break; } result+=" is gegenereerd op grond van "; if (single) result+="het"; else result+="de"; diff --git a/src/translator_no.h b/src/translator_no.h index 536eb95..5430538 100644 --- a/src/translator_no.h +++ b/src/translator_no.h @@ -650,6 +650,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 case ClassDef::Exception: result+=" Unntak"; break; case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; + default: break; } if (isTemplate) result+=" Mal"; result+=" Referanse"; @@ -809,6 +810,7 @@ class TranslatorNorwegian : public TranslatorAdapter_1_4_6 case ClassDef::Exception: result+="dette unntak"; break; case ClassDef::Protocol: result+="denne protocol"; break; case ClassDef::Category: result+="denne category"; break; + default: break; } result+=" ble generert fra flgende fil"; if (single) result+=":"; else result+="er:"; diff --git a/src/translator_pl.h b/src/translator_pl.h index 49ce796..b1e90ce 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -615,6 +615,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+=" protokołu "; break; case ClassDef::Category: result+=" kategorii "; break; case ClassDef::Exception: result+=" wyjątku "; break; + default: break; } result+=(QCString)clName; return result; @@ -774,6 +775,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="go protokołu"; break; case ClassDef::Category: result+="j kategorii"; break; case ClassDef::Exception: result+="go wyjątku"; break; + default: break; } result+=" została wygenerowana z plik"; if (single) result+="u:"; else result+="ów:"; @@ -1669,6 +1671,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+=" protokołu "; break; case ClassDef::Category: result+=" kategorii "; break; case ClassDef::Exception: result+=" wyjątku "; break; + default: break; } result+=(QCString)clName; return result; @@ -1735,6 +1738,7 @@ class TranslatorPolish : public TranslatorAdapter_1_8_2 case ClassDef::Protocol: result+="go protokołu"; break; case ClassDef::Category: result+="j kategorii"; break; case ClassDef::Exception: result+="go wyjątku"; break; + default: break; } result+=" została wygenerowana z plik"; if (single) result+="u:"; else result+="ów:"; diff --git a/src/translator_pt.h b/src/translator_pt.h index 08d228f..5130fcf 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -616,6 +616,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="ao protocolo "; break; case ClassDef::Category: result+="à categoria "; break; case ClassDef::Exception: result+="à excepção "; break; + default: break; } if (isTemplate) result+="Template "; result+=(QCString)clName; @@ -778,6 +779,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="este protocolo"; break; case ClassDef::Category: result+="esta categoria"; break; case ClassDef::Exception: result+="esta excepção"; break; + default: break; } result+=" foi gerada a partir "; if (single) result+=" do seguinte ficheiro:"; @@ -1673,6 +1675,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="do Protocolo "; break; case ClassDef::Category: result+="da Categoria "; break; case ClassDef::Exception: result+="da Exceção "; break; + default: break; } result += clName; @@ -1740,6 +1743,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="esto protocolo "; break; case ClassDef::Category: result+="esta categoria "; break; case ClassDef::Exception: result+="esta exceção "; break; + default: break; } result+=" foi gerada a partir do"; diff --git a/src/translator_ro.h b/src/translator_ro.h index c0a4c3d..1cba127 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -632,10 +632,11 @@ class TranslatorRomanian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protocolul "; break; case ClassDef::Category: result+="categoria "; break; case ClassDef::Exception: result+="excepţia "; break; + default: break; } - if (isTemplate) result+=" (Template) "; - result+=(QCString)clName; - + if (isTemplate) result+=" (Template) "; + result+=(QCString)clName; + return result; } @@ -794,6 +795,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="categorie"; break; case ClassDef::Exception: result+="excepţie"; break; + default: break; } result+=" a fost generată din fişier"; if (single) result+="ul:"; else result+="ele:"; @@ -1690,6 +1692,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="Protocolul "; break; case ClassDef::Category: result+="Categoria "; break; case ClassDef::Exception: result+="Excepţia "; break; + default: break; } if (isTemplate) result+="(Template) "; result+=(QCString)clName; @@ -1758,6 +1761,7 @@ class TranslatorRomanian : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protocolului"; break; case ClassDef::Category: result+="categoriei"; break; case ClassDef::Exception: result+="excepţiei"; break; + default: break; } result+=" a fost generată din următo"; if (single) result+="rul fişier:"; else result+="arele fişiere:"; diff --git a/src/translator_ru.h b/src/translator_ru.h index 8e2fc6f..5c8295a 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -581,6 +581,7 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="протокола"; break; case ClassDef::Category: result+="категории"; break; case ClassDef::Exception: result+="исключения"; break; + default: break; } } else @@ -594,6 +595,7 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="Протокол"; break; case ClassDef::Category: result+="Категория"; break; case ClassDef::Exception: result+="Исключение"; break; + default: break; } } result+=" "; @@ -765,6 +767,8 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5 case ClassDef::Exception: result+="исключени"; if (single) result+="я"; else result+="й"; break; + default: + break; } result+=" находятся в файл"; if (single) result+="е:"; else result+="ах:"; @@ -1644,6 +1648,7 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=" Протокол"; break; case ClassDef::Category: result+=" Категория"; break; case ClassDef::Exception: result+=" Исключение"; break; + default: break; } } else @@ -1658,6 +1663,7 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="протокола"; break; case ClassDef::Category: result+="категории"; break; case ClassDef::Exception: result+="исключения"; break; + default: break; } } return result; @@ -1722,6 +1728,7 @@ class TranslatorRussian : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="протоколу"; break; case ClassDef::Category: result+="кетегории"; break; case ClassDef::Exception: result+="исключению"; break; + default: break; } result+=" сгенерирована на основе следующ"; if (single) result+="его файла:"; else result+="их файлов:"; diff --git a/src/translator_sc.h b/src/translator_sc.h index bf04fc9..edf5ba2 100644 --- a/src/translator_sc.h +++ b/src/translator_sc.h @@ -611,30 +611,35 @@ class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0 bool isTemplate) { QCString result=(QCString)clName; - if (isTemplate) { - result+=" Шаблон"; - switch(compType) - { - case ClassDef::Class: result+="ска класа"; break; - case ClassDef::Struct: result+="ска структура"; break; - case ClassDef::Union: result+="ска унија"; break; - case ClassDef::Interface: result+="ски интерфејс"; break; - case ClassDef::Protocol: result+="ски протокол"; break; - case ClassDef::Category: result+="ска категорија"; break; - case ClassDef::Exception: result+="ски изузетак"; break; - } - } else { - result+=" Референца"; - switch(compType) - { - case ClassDef::Class: result+=" класе"; break; - case ClassDef::Struct: result+=" структуре"; break; - case ClassDef::Union: result+=" уније"; break; - case ClassDef::Interface: result+=" интерфејса"; break; - case ClassDef::Protocol: result+=" протокола"; break; - case ClassDef::Category: result+=" категорије"; break; - case ClassDef::Exception: result+=" изузетка"; break; - } + if (isTemplate) + { + result+=" Шаблон"; + switch(compType) + { + case ClassDef::Class: result+="ска класа"; break; + case ClassDef::Struct: result+="ска структура"; break; + case ClassDef::Union: result+="ска унија"; break; + case ClassDef::Interface: result+="ски интерфејс"; break; + case ClassDef::Protocol: result+="ски протокол"; break; + case ClassDef::Category: result+="ска категорија"; break; + case ClassDef::Exception: result+="ски изузетак"; break; + default: break; + } + } + else + { + result+=" Референца"; + switch(compType) + { + case ClassDef::Class: result+=" класе"; break; + case ClassDef::Struct: result+=" структуре"; break; + case ClassDef::Union: result+=" уније"; break; + case ClassDef::Interface: result+=" интерфејса"; break; + case ClassDef::Protocol: result+=" протокола"; break; + case ClassDef::Category: result+=" категорије"; break; + case ClassDef::Exception: result+=" изузетка"; break; + default: break; + } } return result; } @@ -792,6 +797,7 @@ class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="овај протокол"; break; case ClassDef::Category: result+="ову категорију"; break; case ClassDef::Exception: result+="овај изузетак"; break; + default: break; } result+=" је произведена из"; if (single) result+="следеће датотеке:"; else result+="следећих датотека:"; @@ -1703,6 +1709,7 @@ class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" протокола"; break; case ClassDef::Category: result+=" категорије"; break; case ClassDef::Exception: result+=" изузетка"; break; + default: break; } return result; } @@ -1768,6 +1775,7 @@ class TranslatorSerbianCyrilic : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="овај протокол"; break; case ClassDef::Category: result+="ову категорију"; break; case ClassDef::Exception: result+="овај изузетак"; break; + default: break; } result+=" је направљен из следећ"; if (single) result+="е датотеке:"; else result+="их датотека:"; diff --git a/src/translator_si.h b/src/translator_si.h index f1dc23f..7295e44 100644 --- a/src/translator_si.h +++ b/src/translator_si.h @@ -281,8 +281,9 @@ class TranslatorSlovene : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+=" protocol "; break; // translate me! case ClassDef::Category: result+=" category "; break; // translate me! case ClassDef::Exception: result+=" IDL prekinitev "; break; + default: break; } - result += (QCString)clName; + result += (QCString)clName; return result; } @@ -429,6 +430,7 @@ class TranslatorSlovene : public TranslatorAdapter_1_4_6 case ClassDef::Protocol: result+="protocol"; break; // translate me! case ClassDef::Category: result+="category"; break; // translate me! case ClassDef::Exception: result+="prekinitve (exception)"; break; + default: break; } result+=" je zgrajen na podlagi naslednj"; if (single) result+="e "; else result+="ih"; diff --git a/src/translator_sk.h b/src/translator_sk.h index 9418576..4fd63ec 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -31,7 +31,7 @@ #ifndef TRANSLATOR_SK_H #define TRANSLATOR_SK_H -class TranslatorSlovak : public Translator +class TranslatorSlovak : public TranslatorAdapter_1_8_2 { public: // --- Language control methods ------------------- @@ -593,6 +593,7 @@ class TranslatorSlovak : public Translator case ClassDef::Protocol: result+="protokol "; break; case ClassDef::Category: result+="kategória "; break; case ClassDef::Exception: result+="výnimky "; break; + default: break; } result+=clName; return result; @@ -765,6 +766,7 @@ class TranslatorSlovak : public Translator case ClassDef::Protocol: result+="protokol"; break; case ClassDef::Category: result+="kategória"; break; case ClassDef::Exception: result+="túto výnimku"; break; + default: break; } result+=" bola generovaná z "; if (single) result+="nasledujúceho súboru:"; @@ -1645,6 +1647,7 @@ class TranslatorSlovak : public Translator case ClassDef::Protocol: result += "protokolu "; break; case ClassDef::Category: result += "kategórie "; break; case ClassDef::Exception: result += "výnimky "; break; + default: break; } result += clName; return result; @@ -1712,6 +1715,7 @@ class TranslatorSlovak : public Translator case ClassDef::Protocol: result+="k tomuto protokolu"; break; case ClassDef::Category: result+="k tejto kategórii"; break; case ClassDef::Exception: result+="k tejto výnimke"; break; + default: break; } result+=" bola vygenerovaná z "; if (single) result+="nasledujúceho súboru:"; diff --git a/src/translator_sr.h b/src/translator_sr.h index a9ce978..7311eac 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -623,6 +623,7 @@ private: case ClassDef::Protocol: result+="protokola "; break; case ClassDef::Category: result+="kategorije "; break; case ClassDef::Exception: result+="izuzetka "; break; + default: break; } if (isTemplate) result += "šablona "; result += clName; @@ -782,6 +783,7 @@ private: case ClassDef::Protocol: result+="ovog protokola"; break; case ClassDef::Category: result+="ove kategorije"; break; case ClassDef::Exception: result+="ovog izuzetka"; break; + default: break; } result+=" je napravljena na osnovu "; if (single) result+="datoteke "; else result+="sledećih datoteka:"; @@ -1680,6 +1682,7 @@ private: case ClassDef::Protocol: result+=" Protokol"; break; case ClassDef::Category: result+=" Kategorija"; break; case ClassDef::Exception: result+=" Izuzetak"; break; + default: break; } result+=" - sažet pregled"; if (isTemplate) result+=" šablona"; @@ -1747,6 +1750,7 @@ private: case ClassDef::Protocol: result+="protokol"; break; case ClassDef::Category: result+="kategoriju"; break; case ClassDef::Exception: result+="izuzetak"; break; + default: break; } result+=" napravljena je automatski od sledeć"; if (single) result+="e datoteke:"; else result+="ih datoteka:"; diff --git a/src/translator_sv.h b/src/translator_sv.h index 7b25d6a..b6bb3d7 100644 --- a/src/translator_sv.h +++ b/src/translator_sv.h @@ -509,6 +509,7 @@ class TranslatorSwedish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" protocol"; break; // translate me! case ClassDef::Category: result+=" category"; break; // translate me! case ClassDef::Exception: result+=" undantag"; break; + default: break; } if (isTemplate) result+="template"; result+="referens"; @@ -650,6 +651,7 @@ class TranslatorSwedish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protocol"; break; // translate me! case ClassDef::Category: result+="category"; break; // translate me! case ClassDef::Exception: result+="detta undantag "; break; + default: break; } result+="var genererad frn fljande fil"; if (single) result+=":"; else result+="er:"; @@ -1548,6 +1550,7 @@ class TranslatorSwedish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Protokoll"; break; case ClassDef::Category: result+=" Kategori"; break; case ClassDef::Exception: result+=" Undantag"; break; + default: break; } if (isTemplate) result+=" Mall"; result+=" Referens"; @@ -1613,6 +1616,7 @@ class TranslatorSwedish : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protokoll"; break; case ClassDef::Category: result+="kategori"; break; case ClassDef::Exception: result+="undantag"; break; + default: break; } result+=" genererades frn fljade fil"; if (single) result+=":"; else result+="er:"; diff --git a/src/translator_tr.h b/src/translator_tr.h index efb0d14..9c66c55 100644 --- a/src/translator_tr.h +++ b/src/translator_tr.h @@ -620,6 +620,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=" Protokol"; break; case ClassDef::Category: result+=" Kategori"; break; case ClassDef::Exception: result+=" İstisna"; break; + default: break; } if (isTemplate) result+=" Şablon"; result+=" Referans"; @@ -779,6 +780,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="protokol"; break; case ClassDef::Category: result+="kategori"; break; case ClassDef::Exception: result+="istisna"; break; + default: break; } result+=" için dokümantasyon aşağıdaki dosya"; if (single) result+=""; else result+="lar"; @@ -1676,6 +1678,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+=" Protokol"; break; case ClassDef::Category: result+=" Kategori"; break; case ClassDef::Exception: result+=" İstisna"; break; + default: break; } if (isTemplate) result+=" Şablon"; result+=" Referans"; @@ -1743,6 +1746,7 @@ class TranslatorTurkish : public TranslatorAdapter_1_7_5 case ClassDef::Protocol: result+="protokol"; break; case ClassDef::Category: result+="kategori"; break; case ClassDef::Exception: result+="istisna"; break; + default: break; } result+=" için dokümantasyon aşağıdaki dosya"; if (single) result+=":"; else result+="lar"; diff --git a/src/translator_tw.h b/src/translator_tw.h index 3edd462..29f2cd3 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -627,6 +627,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+=" 協定"; break; case ClassDef::Category: result+=" 分類"; break; case ClassDef::Exception: result+=" 例外"; break; + default: break; } if (isTemplate) result+=" 樣版"; result+=" 參考文件"; @@ -786,6 +787,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="協定(protocol)"; break; case ClassDef::Category: result+="分類(category)"; break; case ClassDef::Exception: result+="例外(exception)"; break; + default: break; } result+=" 文件是由下列檔案中產生"; if (single) result+=":"; else result+=":"; @@ -1659,6 +1661,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="協議"; break; case ClassDef::Category: result+="分類"; break; case ClassDef::Exception: result+="例外"; break; + default: break; } if (isTemplate) result+=" Template"; result+="參考文件"; @@ -1725,6 +1728,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_8_0 case ClassDef::Protocol: result+="協議"; break; case ClassDef::Category: result+="分類"; break; case ClassDef::Exception: result+="例外"; break; + default: break; } result+="文件由下列檔案產生"; return result; diff --git a/src/translator_ua.h b/src/translator_ua.h index 6ac1681..2a80e22 100644 --- a/src/translator_ua.h +++ b/src/translator_ua.h @@ -19,7 +19,7 @@ #ifndef TRANSLATOR_UA_H #define TRANSLATOR_UA_H -class TranslatorUkrainian : public Translator +class TranslatorUkrainian : public TranslatorAdapter_1_8_2 { public: /*! Used for identification of the language. */ @@ -572,6 +572,7 @@ class TranslatorUkrainian : public Translator case ClassDef::Protocol: result+="протоколу"; break; case ClassDef::Category: result+="категорії"; break; case ClassDef::Exception: result+="Виняток"; break; + default: break; } } else @@ -585,6 +586,7 @@ class TranslatorUkrainian : public Translator case ClassDef::Protocol: result+="Протокол"; break; case ClassDef::Category: result+="Категорія"; break; case ClassDef::Exception: result+="Виняток"; break; + default: break; } } result+=" "; @@ -755,6 +757,8 @@ class TranslatorUkrainian : public Translator case ClassDef::Exception: if (single) result+="цього винятку"; else result+="цих винятків"; break; + default: + break; } result+=" була створена з файл"; if (single) result+="у:"; else result+="ів:"; @@ -1635,6 +1639,7 @@ class TranslatorUkrainian : public Translator case ClassDef::Protocol: result+=" Протокол"; break; case ClassDef::Category: result+=" Категорія"; break; case ClassDef::Exception: result+=" Виняток"; break; + default: break; } } else @@ -1649,6 +1654,7 @@ class TranslatorUkrainian : public Translator case ClassDef::Protocol: result+="протоколу"; break; case ClassDef::Category: result+="категорії"; break; case ClassDef::Exception: result+="винятка"; break; + default: break; } } return result; @@ -1716,6 +1722,7 @@ class TranslatorUkrainian : public Translator case ClassDef::Protocol: result+="цього протоколу"; break; case ClassDef::Category: result+="цієї категорії"; break; case ClassDef::Exception: result+="цього винятку"; break; + default: break; } result+=" було згенеровано з "; if (single) result+="наступного файлу:"; else result+="наступних файлів:"; diff --git a/src/translator_vi.h b/src/translator_vi.h index 592c005..36fb48a 100644 --- a/src/translator_vi.h +++ b/src/translator_vi.h @@ -627,6 +627,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Tham chiếu"; @@ -786,6 +787,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" được biên soạn từ các file sau đây"; if (single) result+=":"; else result+=":"; @@ -1683,6 +1685,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Category"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Tham chiếu"; @@ -1750,6 +1753,7 @@ class TranslatorVietnamese : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protocol"; break; case ClassDef::Category: result+="category"; break; case ClassDef::Exception: result+="exception"; break; + default: break; } result+=" được biên soạn từ các file sau đây"; if (single) result+=":"; else result+="s:"; diff --git a/src/translator_za.h b/src/translator_za.h index fb02744..eb278d6 100644 --- a/src/translator_za.h +++ b/src/translator_za.h @@ -606,6 +606,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Protocol"; break; case ClassDef::Category: result+=" Kategorie"; break; case ClassDef::Exception: result+=" Exception"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Verwysing"; @@ -765,6 +766,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protokol"; break; case ClassDef::Category: result+="kategorie"; break; case ClassDef::Exception: result+="eksepsie"; break; + default: break; } result+=" is gegenereer vanaf die volgende leër"; if (single) result+=":"; else result+="s:"; @@ -1663,6 +1665,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+=" Protokol"; break; case ClassDef::Category: result+=" Kategorie"; break; case ClassDef::Exception: result+=" Eksepsie"; break; + default: break; } if (isTemplate) result+=" Template"; result+=" Bron"; @@ -1730,6 +1733,7 @@ class TranslatorAfrikaans : public TranslatorAdapter_1_6_0 case ClassDef::Protocol: result+="protokcol"; break; case ClassDef::Category: result+="kategorie"; break; case ClassDef::Exception: result+="eksepsie"; break; + default: break; } result+=" is gegenereer vanaf die foldende leer"; if (single) result+=":"; else result+="s:"; diff --git a/src/translatordecoder.h b/src/translatordecoder.h index f6ba8dd..6537774 100644 --- a/src/translatordecoder.h +++ b/src/translatordecoder.h @@ -789,6 +789,28 @@ class TranslatorDecoder : public Translator { return toUtf8(m_translator->trDesignOverview()); } ////////////////////////////////////////////////////////////////////////// +// new since 1.8.4 +////////////////////////////////////////////////////////////////////////// + + QCString trInterfaces() + { return toUtf8(m_translator->trInterfaces()); } + QCString trServices() + { return toUtf8(m_translator->trServices()); } + QCString trConstantGroups() + { return toUtf8(m_translator->trConstantGroups()); } + QCString trConstantGroupReference(const char *namespaceName) + { return toUtf8(m_translator->trConstantGroupReference(fromUtf8(namespaceName))); } + QCString trServiceReference(const char *sName) + { return toUtf8(m_translator->trServiceReference(fromUtf8(sName))); } + QCString trSingletonReference(const char *sName) + { return toUtf8(m_translator->trSingletonReference(fromUtf8(sName))); } + QCString trServiceGeneratedFromFiles(bool single) + { return toUtf8(m_translator->trServiceGeneratedFromFiles(single)); } + QCString trSingletonGeneratedFromFiles(bool single) + { return toUtf8(m_translator->trSingletonGeneratedFromFiles(single)); } + + +////////////////////////////////////////////////////////////////////////// private: Translator *m_translator; void *m_toUtf8; diff --git a/src/types.h b/src/types.h index 2db4b5d..18affcc 100644 --- a/src/types.h +++ b/src/types.h @@ -169,7 +169,14 @@ enum MemberListType MemberListType_redefinedBy = 67, MemberListType_enumFields = 68, - MemberListType_memberGroup = 69 + MemberListType_memberGroup = 69, + + // this one is for the summary section on the class page + MemberListType_interfaces = 70, + // this one is for the detailed section on the class page + MemberListType_interfaceMembers = 71 + MemberListType_detailedLists, + MemberListType_services = 72, + MemberListType_serviceMembers = 73 + MemberListType_detailedLists, }; enum MemberType @@ -185,7 +192,9 @@ enum MemberType MemberType_Friend, MemberType_DCOP, MemberType_Property, - MemberType_Event + MemberType_Event, + MemberType_Interface, + MemberType_Service, }; #endif diff --git a/src/util.cpp b/src/util.cpp index f0e0ea4..205d0ba 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1824,6 +1824,49 @@ nextChar: return growBuf.get(); } +/** + * Returns the position in the string where a function parameter list + * begins, or -1 if one is not found. + */ +int findParameterList(const QString &name) +{ + int pos=-1; + int templateDepth=0; + do + { + if (templateDepth > 0) + { + int nextOpenPos=name.findRev('>', pos); + int nextClosePos=name.findRev('<', pos); + if (nextOpenPos!=-1 && nextOpenPos>nextClosePos) + { + ++templateDepth; + pos=nextOpenPos-1; + } + else + { + --templateDepth; + pos=nextClosePos-1; + } + } + else + { + int lastAnglePos=name.findRev('>', pos); + int bracePos=name.findRev('(', pos); + if (lastAnglePos!=-1 && lastAnglePos>bracePos) + { + ++templateDepth; + pos=lastAnglePos-1; + } + else + { + return bracePos; + } + } + } while (pos!=-1); + return -1; +} + bool rightScopeMatch(const QCString &scope, const QCString &name) { return (name==scope || // equal @@ -4308,7 +4351,7 @@ bool resolveRef(/* in */ const char *scName, QCString tsName = name; //bool memberScopeFirst = tsName.find('#')!=-1; QCString fullName = substitute(tsName,"#","::"); - if (fullName.find("anonymous_namespace{")==-1) + if (fullName.find("anonymous_namespace{")==-1 && fullName.find('<')==-1) { fullName = removeRedundantWhiteSpace(substitute(fullName,".","::")); } @@ -4317,7 +4360,7 @@ bool resolveRef(/* in */ const char *scName, fullName = removeRedundantWhiteSpace(fullName); } - int bracePos=fullName.findRev('('); // reverse is needed for operator()(...) + int bracePos=findParameterList(fullName); int endNamePos=bracePos!=-1 ? bracePos : fullName.length(); int scopePos=fullName.findRev("::",endNamePos); bool explicitScope = fullName.left(2)=="::" && // ::scope or #scope @@ -4474,7 +4517,7 @@ QCString linkToText(SrcLangExt lang,const char *link,bool isFileName) // replace # by :: result=substitute(result,"#","::"); // replace . by :: - if (!isFileName) result=substitute(result,".","::"); + if (!isFileName && result.find('<')==-1) result=substitute(result,".","::"); // strip leading :: prefix if present if (result.at(0)==':' && result.at(1)==':') { @@ -5463,7 +5506,7 @@ QCString convertToJSString(const char *s) } } growBuf.addChar(0); - return growBuf.get(); + return convertCharEntitiesToUTF8(growBuf.get()); } @@ -5610,25 +5653,31 @@ QCString convertCharEntitiesToUTF8(const QCString &s) init=FALSE; } - if (s==0) return result; + if (s.length()==0) return result; + static GrowBuf growBuf; + growBuf.clear(); int p,i=0,l; while ((p=entityPat.match(s,i,&l))!=-1) { - if (p>i) result+=s.mid(i,p-i); + if (p>i) + { + growBuf.addStr(s.mid(i,p-i)); + } QCString entity = s.mid(p+1,l-2); char *code = entityMap.find(entity); if (code) { - result+=code; + growBuf.addStr(code); } else { - result+=s.mid(p,l); + growBuf.addStr(s.mid(p,l)); } i=p+l; } - result+=s.mid(i,s.length()-i); - return result; + growBuf.addStr(s.mid(i,s.length()-i)); + growBuf.addChar(0); + return growBuf.get(); } /*! Returns the standard string that is generated when the \\overload @@ -6434,6 +6483,11 @@ QCString stripPath(const char *s) { result=result.mid(i+1); } + i=result.findRev('\\'); + if (i!=-1) + { + result=result.mid(i+1); + } return result; } diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index 25d7fed..fa25000 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -126,6 +126,38 @@ static void codify(FTextStream &t,const char *str) } } +static void writeLink(const MemberDef* mdef,OutputList &ol) +{ + ol.writeObjectLink(mdef->getReference(), + mdef->getOutputFileBase(), + mdef->anchor(), + mdef->name()); +} + +static void startFonts(const QCString& q, const char *keyword,OutputList& ol) +{ + ol.startFontClass(keyword); + ol.docify(q.data()); + ol.endFontClass(); +} + +static QCString splitString(QCString& str,char c) +{ + QCString n=str; + int i=str.find(c); + if (i>0) + { + n=str.left(i); + str=str.remove(0,i+1); + } + return n; +} + +static int compareString(const QCString& s1,const QCString& s2) +{ + return qstricmp(s1.stripWhiteSpace(),s2.stripWhiteSpace()); +} + static void createSVG() { QCString ov =Config_getString("HTML_OUTPUT"); @@ -842,7 +874,7 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql, for (fmni.toFirst();(mdef=fmni.current());++fmni) { QCString mname=mdef->name(); - if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (VhdlDocGen::compareString(funcname,mname)==0)) + if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (compareString(funcname,mname)==0)) { LockingPtr<ArgumentList> alp = mdef->argumentList(); @@ -859,18 +891,18 @@ MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql, for (;(arg=ali.current());++ali) { arg1=ali1.current(); ++ali1; - equ+=abs(VhdlDocGen::compareString(arg->type,arg1->type)); + equ+=abs(compareString(arg->type,arg1->type)); QCString s1=arg->type; QCString s2=arg1->type; VhdlDocGen::deleteAllChars(s1,' '); VhdlDocGen::deleteAllChars(s2,' '); - equ+=abs(VhdlDocGen::compareString(s1,s2)); + equ+=abs(compareString(s1,s2)); s1=arg->attrib; s2=arg1->attrib; VhdlDocGen::deleteAllChars(s1,' '); VhdlDocGen::deleteAllChars(s2,' '); - equ+=abs(VhdlDocGen::compareString(s1,s2)); + equ+=abs(compareString(s1,s2)); // printf("\n 1. type [%s] name [%s] attrib [%s]",arg->type,arg->name,arg->attrib); // printf("\n 2. type [%s] name [%s] attrib [%s]",arg1->type,arg1->name,arg1->attrib); } // for @@ -1061,11 +1093,6 @@ void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& typ ol.lineBreak(); } -int VhdlDocGen::compareString(const QCString& s1,const QCString& s2) -{ - return qstricmp(s1.stripWhiteSpace(),s2.stripWhiteSpace()); -} - /*! * strips the "--" prefixes of vhdl comments @@ -1177,7 +1204,7 @@ QCString VhdlDocGen::getProtectionName(int prot) return ""; } -QCString VhdlDocGen::trTypeString(int type) +QCString VhdlDocGen::trTypeString(uint64 type) { switch(type) { @@ -1296,16 +1323,16 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD find=find.left(j); buf[0]=temp[j]; ss=VhdlDocGen::findKeyWord(find); - bool k=VhdlDocGen::isNumber(find); // is this a number + bool k=isNumber(find); // is this a number if (k) { ol.docify(" "); - VhdlDocGen::startFonts(find,"vhdldigit",ol); + startFonts(find,"vhdldigit",ol); ol.docify(" "); } else if (j != 0 && ss) { - VhdlDocGen::startFonts(find,ss->data(),ol); + startFonts(find,ss->data(),ol); } else { @@ -1314,7 +1341,7 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD VhdlDocGen::writeStringLink(mdef,find,ol); } } - VhdlDocGen::startFonts(&buf[0],"vhdlchar",ol); + startFonts(&buf[0],"vhdlchar",ol); QCString st=temp.remove(0,j+1); find=st; @@ -1324,7 +1351,7 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD if (ii>1) { QCString com=find.left(ii+1); - VhdlDocGen::startFonts(com,"keyword",ol); + startFonts(com,"keyword",ol); temp=find.remove(0,ii+1); } } @@ -1337,7 +1364,7 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD }//if else { - VhdlDocGen::startFonts(find,"vhdlchar",ol); + startFonts(find,"vhdlchar",ol); } ol.endBold(); }// writeFormatString @@ -1345,7 +1372,6 @@ void VhdlDocGen::writeFormatString(const QCString& s,OutputList&ol,const MemberD /*! * returns TRUE if this string is a number */ - bool VhdlDocGen::isNumber(const QCString& s) { static QRegExp regg("[0-9][0-9eEfFbBcCdDaA_.#-+?xXzZ]*"); @@ -1358,12 +1384,6 @@ bool VhdlDocGen::isNumber(const QCString& s) }// isNumber -void VhdlDocGen::startFonts(const QCString& q, const char *keyword,OutputList& ol) -{ - ol.startFontClass(keyword); - ol.docify(q.data()); - ol.endFontClass(); -} /*! * inserts white spaces for better readings @@ -1453,17 +1473,17 @@ void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const arg->defval+=" "; if (str) { - VhdlDocGen::startFonts(arg->defval,str->data(),ol); + startFonts(arg->defval,str->data(),ol); } else { - VhdlDocGen::startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.) + startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.) } - VhdlDocGen::startFonts(nn,"vhdlchar",ol); // write name + startFonts(nn,"vhdlchar",ol); // write name if (qstricmp(arg->attrib,arg->type) != 0) { - VhdlDocGen::startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out + startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out } ol.docify(" "); VhdlDocGen::formatString(arg->type,ol,mdef); @@ -1520,23 +1540,23 @@ void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const if (str) VhdlDocGen::formatString(att,ol,mdef); else - VhdlDocGen::startFonts(att,"vhdlchar",ol); + startFonts(att,"vhdlchar",ol); } QCString nn=arg->name; nn+=": "; QCString ss=arg->type.stripWhiteSpace(); //.lower(); QCString w=ss.stripWhiteSpace();//.upper(); - VhdlDocGen::startFonts(nn,"vhdlchar",ol); - VhdlDocGen::startFonts("in ","stringliteral",ol); + startFonts(nn,"vhdlchar",ol); + startFonts("in ","stringliteral",ol); QCString *str=VhdlDocGen::findKeyWord(ss); if (str) VhdlDocGen::formatString(w,ol,mdef); else - VhdlDocGen::startFonts(w,"vhdlchar",ol); + startFonts(w,"vhdlchar",ol); if (arg->attrib) - VhdlDocGen::startFonts(arg->attrib,"vhdlchar",ol); + startFonts(arg->attrib,"vhdlchar",ol); sem=TRUE; @@ -1580,7 +1600,7 @@ void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const M ol.docify(" , "); } QCString nn=arg->name; - // VhdlDocGen::startFonts(nn,"vhdlchar",ol); + // startFonts(nn,"vhdlchar",ol); VhdlDocGen::writeFormatString(nn,ol,mdef); sem=TRUE; } @@ -2253,14 +2273,6 @@ void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, }// end writeVhdlDeclaration -void VhdlDocGen::writeLink(const MemberDef* mdef,OutputList &ol) -{ - ol.writeObjectLink(mdef->getReference(), - mdef->getOutputFileBase(), - mdef->anchor(), - mdef->name()); -} - void VhdlDocGen::writePlainVHDLDeclarations( MemberList* mlist,OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,int specifier) @@ -2293,7 +2305,7 @@ void VhdlDocGen::writePlainVHDLDeclarations( pack.clear(); }//plainDeclaration -bool VhdlDocGen::membersHaveSpecificType(MemberList *ml,int type) +static bool membersHaveSpecificType(MemberList *ml,uint64 type) { if (ml==0) return FALSE; MemberDef *mdd=0; @@ -2392,7 +2404,7 @@ bool VhdlDocGen::writeClassType( ClassDef *& cd, return FALSE; }// writeClassLink -QCString VhdlDocGen::trVhdlType(int type,bool sing) +QCString VhdlDocGen::trVhdlType(uint64 type,bool sing) { switch(type) { @@ -2536,7 +2548,7 @@ void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList& } } } - VhdlDocGen::startFonts(mem,"vhdlchar",ol); + startFonts(mem,"vhdlchar",ol); }// found component @@ -2548,17 +2560,18 @@ void VhdlDocGen::writeSource(MemberDef *mdef,OutputList& ol,QCString & cname) QCString codeFragment=mdef->documentation(); - if(cname.isEmpty()) + if (cname.isEmpty()) { writeLink(mdef,ol); int fi=0; int j=0; - do { + do + { fi=codeFragment.find("\n",++fi); } while(fi>=0 && j++ <3); // show only the first four lines - if(j==4) + if (j==4) { codeFragment=codeFragment.left(fi); codeFragment.append("\n .... "); @@ -2734,7 +2747,7 @@ static void writeUCFLink(const MemberDef* mdef,OutputList &ol) { QCString largs(mdef->argsString()); - QCString n= VhdlDocGen::splitString(largs, '#'); + QCString n= splitString(largs, '#'); // VhdlDocGen::adjustRecordMember(mdef); bool equ=(n.length()==largs.length()); @@ -2747,7 +2760,7 @@ static void writeUCFLink(const MemberDef* mdef,OutputList &ol) if (mdef->name().contains("dummy")==0) { - VhdlDocGen::writeLink(mdef,ol); + writeLink(mdef,ol); } if (equ) { @@ -2757,18 +2770,6 @@ static void writeUCFLink(const MemberDef* mdef,OutputList &ol) VhdlDocGen::formatString(largs,ol,mdef); } -QCString VhdlDocGen::splitString(QCString& str, char c) -{ - QCString n=str; - int i=str.find(c); - if (i>0) - { - n=str.left(i); - str=str.remove(0,i+1); - } - return n; -} - bool VhdlDocGen::findConstraintFile(LayoutNavEntry *lne) { FileName *fn=Doxygen::inputNameList->first(); @@ -3398,7 +3399,7 @@ bool VhdlDocGen::isMisc(const MemberDef *mdef) static int ifcounter=0; static int nodeCounter=0; -struct +static struct { // link colors const char *textNodeLink; @@ -4097,7 +4098,6 @@ void FlowChart::alignFuncProc( QCString & q,const ArgumentList* al,bool isFunc) prev.fill(' ',len+1); Argument *arg; - bool first=TRUE; q+="\n"; for (;(arg=ali.current());++ali) { @@ -4117,7 +4117,6 @@ void FlowChart::alignFuncProc( QCString & q,const ArgumentList* al,bool isFunc) attl.prepend(prev.data()); temp+=attl; - first=FALSE; } q+=temp; diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h index 35a35a8..7c78373 100644 --- a/src/vhdldocgen.h +++ b/src/vhdldocgen.h @@ -117,8 +117,6 @@ class VhdlDocGen static MemberDef* findFunction(const QList<Argument> &ql, const QCString& name, const QCString& package, bool type); - static int compareString(const QCString& s1, - const QCString& s2); static QCString getClassTitle(const ClassDef*); static void writeInlineClassLink(const ClassDef*, OutputList &ol); @@ -154,8 +152,8 @@ class VhdlDocGen //----------------------------------------------------- // translatable items - static QCString trTypeString(int type); - static QCString trVhdlType(int type,bool sing=true); + static QCString trTypeString(uint64 type); + static QCString trVhdlType(uint64 type,bool sing=true); // trClassHierarchy. static QCString trDesignUnitHierarchy(); @@ -206,25 +204,16 @@ class VhdlDocGen const char *title,const char *subtitle,bool showEnumValues,int type); static bool writeClassType(ClassDef *&,OutputList &ol ,QCString & cname); - static QCString convertArgumentListToString(const ArgumentList* al,bool f); static QCString getProcessNumber(); static QCString getRecordNumber(); static QCString getClassName(const ClassDef*); - // obsolete - // static void adjustRecordMember(MemberDef *mdef); - - static void writeLink(const MemberDef* mdef,OutputList &ol); - static void adjustMemberName(QCString& nn); - static bool membersHaveSpecificType(MemberList *ml,int type); - static void startFonts(const QCString& q, const char *keyword,OutputList& ol); static bool isNumber(const QCString& s); static QCString getProtectionName(int prot); - static QCString splitString(QCString & str, char c); + static void parseUCF(const char* input,Entry* entity,QCString f,bool vendor); - static bool findConstraintFile( LayoutNavEntry *lne); static ClassDef* findArchitecture(const ClassDef *cd); diff --git a/src/vhdlparser.y b/src/vhdlparser.y index 19c0a4f..3d3cc64 100644 --- a/src/vhdlparser.y +++ b/src/vhdlparser.y @@ -125,7 +125,7 @@ int vhdlScanYYlex (); void vhdlScanYYerror (char const *); static void addVhdlType(const QCString &name,int startLine, - int section,int spec, + int section,uint64 spec, const char* args,const char* type, Protection prot=Public); static void addCompInst(char *n, char* instName,char* comp,int line); @@ -143,7 +143,7 @@ static bool isFuncProcProced(); static void initEntry(Entry *e); static void addProto(const char *s1,const char *s2,const char *s3, const char *s4,const char *s5,const char *s6); -static void createFunction(const QCString &impure,int spec, +static void createFunction(const QCString &impure,uint64 spec, const QCString &fname); static void createFlow(); @@ -2461,7 +2461,7 @@ static void addProto(const char *s1,const char *s2,const char *s3, } } -static void createFunction(const QCString &impure,int spec, +static void createFunction(const QCString &impure,uint64 spec, const QCString &fname) { @@ -2513,8 +2513,8 @@ static void createFunction(const QCString &impure,int spec, } -static void addVhdlType(const QCString &name,int startLine,int section,int spec, - const char* args,const char* type,Protection prot) +static void addVhdlType(const QCString &name,int startLine,int section, + uint64 spec,const char* args,const char* type,Protection prot) { static QRegExp reg("[\\s]"); diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 1ab72ff..9ab5c0a 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -81,6 +81,8 @@ class XmlSectionMapper : public QIntDict<char> insert(MemberListType_dcopMethods,"dcop-func"); insert(MemberListType_properties,"property"); insert(MemberListType_events,"event"); + insert(MemberListType_interfaces,"interfaces"); + insert(MemberListType_services,"services"); insert(MemberListType_pubStaticMethods,"public-static-func"); insert(MemberListType_pubStaticAttribs,"public-static-attrib"); insert(MemberListType_proTypes,"protected-type"); @@ -558,17 +560,19 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De switch (md->memberType()) { case MemberType_Define: memType="define"; break; - case MemberType_EnumValue: ASSERT(0); break; - case MemberType_Property: memType="property"; break; - case MemberType_Event: memType="event"; break; + case MemberType_Function: memType="function"; isFunc=TRUE; break; case MemberType_Variable: memType="variable"; break; case MemberType_Typedef: memType="typedef"; break; case MemberType_Enumeration: memType="enum"; break; - case MemberType_Function: memType="function"; isFunc=TRUE; break; + case MemberType_EnumValue: ASSERT(0); break; case MemberType_Signal: memType="signal"; isFunc=TRUE; break; + case MemberType_Slot: memType="slot"; isFunc=TRUE; break; case MemberType_Friend: memType="friend"; isFunc=TRUE; break; case MemberType_DCOP: memType="dcop"; isFunc=TRUE; break; - case MemberType_Slot: memType="slot"; isFunc=TRUE; break; + case MemberType_Property: memType="property"; break; + case MemberType_Event: memType="event"; break; + case MemberType_Interface: memType="interface"; break; + case MemberType_Service: memType="service"; break; } ti << " <member refid=\"" << memberOutputFileBase(md) @@ -673,7 +677,47 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De { t << " initonly=\"yes\""; } - + + if (md->isAttribute()) + { + t << " attribute=\"yes\""; + } + if (md->isUNOProperty()) + { + t << " property=\"yes\""; + } + if (md->isReadonly()) + { + t << " readonly=\"yes\""; + } + if (md->isBound()) + { + t << " bound=\"yes\""; + } + if (md->isRemovable()) + { + t << " removable=\"yes\""; + } + if (md->isConstrained()) + { + t << " constrained=\"yes\""; + } + if (md->isTransient()) + { + t << " transient=\"yes\""; + } + if (md->isMaybeVoid()) + { + t << " maybevoid=\"yes\""; + } + if (md->isMaybeDefault()) + { + t << " maybedefault=\"yes\""; + } + if (md->isMaybeAmbiguous()) + { + t << " maybeambiguous=\"yes\""; + } } else if (md->memberType() == MemberType_Property) { |