diff options
Diffstat (limited to 'src')
212 files changed, 12367 insertions, 1636 deletions
diff --git a/src/Makefile.in b/src/Makefile.in index 57bbcea..6377ded 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,8 +1,8 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby @@ -48,6 +48,7 @@ distclean: clean -$(RM) scanner.cpp code.cpp config.cpp pre.cpp ce_lex.cpp \ ce_parse.cpp ce_parse.h doxytag.cpp tag.cpp commentscan.cpp \ declinfo.cpp defargs.cpp commentcnv.cpp doctokenizer.cpp \ - pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp + pycode.cpp pyscanner.cpp fortrancode.cpp fortranscanner.cpp \ + vhdlscanner.cpp vhdlcode.cpp FORCE: diff --git a/src/bufstr.h b/src/bufstr.h index 18db9d4..80da421 100644 --- a/src/bufstr.h +++ b/src/bufstr.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/classdef.cpp b/src/classdef.cpp index 182815a..f52b083 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -36,6 +36,7 @@ #include "debug.h" #include "docparser.h" #include "searchindex.h" +#include "vhdldocgen.h" //static inline MemberList *createNewMemberList(MemberList::ListType lt) //{ @@ -142,13 +143,6 @@ class ClassDefImpl /* user defined member groups */ MemberGroupSDict *memberGroupSDict; - /*! Indicated whether this class exists because it is used by - * some other class only (TRUE) or if some class inherits from - * it (FALSE). This is need to remove used-only classes from - * the inheritance tree. - */ - bool artificial; - /*! Is this an abstact class? */ bool isAbstract; @@ -206,7 +200,6 @@ void ClassDefImpl::init(const char *defFileName, const char *name, variableInstances = 0; templateMaster =0; templBaseClassNames = 0; - artificial = FALSE; isAbstract = FALSE; isStatic = FALSE; isTemplArg = FALSE; @@ -283,8 +276,13 @@ QCString ClassDef::displayName() const { static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString n; - if (hideScopeNames) + if (vhdlOpt) + { + n = VhdlDocGen::getClassName(this); + } + else if (hideScopeNames) { n=m_impl->className; } @@ -364,9 +362,9 @@ void ClassDef::internalInsertMember(MemberDef *md, bool addToAllList ) { + //printf("insertInternalMember(%s) isHidden()=%d\n",md->name().data(),md->isHidden()); if (md->isHidden()) return; - //printf("adding %s::%s\n",name().data(),md->name().data()); if (!isReference()) { static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); @@ -912,12 +910,23 @@ void ClassDef::writeDetailedDescription(OutputList &ol, const QCString &pageType void ClassDef::showUsedFiles(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (Config_getBool("SHOW_USED_FILES")) { ol.writeRuler(); - ol.parseText(theTranslator->trGeneratedFromFiles( + if (fortranOpt) + { + ol.parseText(theTranslator->trGeneratedFromFilesFortran( m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType, m_impl->files.count()==1)); + } + else + { + ol.parseText(theTranslator->trGeneratedFromFiles( + m_impl->isObjC && m_impl->compType==Interface ? Class : m_impl->compType, + m_impl->files.count()==1)); + } + bool first=TRUE; const char *file = m_impl->files.first(); @@ -1083,9 +1092,13 @@ void ClassDef::writeClassDiagrams(OutputList &ol) { Doxygen::tagFile << " virtualness=\"virtual\""; } - Doxygen::tagFile << ">" << convertToXML(cd->name()) << "</base>" << endl; + Doxygen::tagFile << ">" << convertToXML(cd->name()) + << "</base>" << endl; } - ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->displayName()+bcd->templSpecifiers); + ol.writeObjectLink(cd->getReference(), + cd->getOutputFileBase(), + 0, + cd->displayName()+bcd->templSpecifiers); } else { @@ -1158,18 +1171,38 @@ void ClassDef::writeClassDiagrams(OutputList &ol) // write all documentation for this class void ClassDef::writeDocumentation(OutputList &ol) { + static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString pageType = " "; + QCString pageTitle = " "; + pageType += compoundTypeString(); toupper(pageType.at(1)); - QCString pageTitle = theTranslator->trCompoundReference(displayName(), + if (fortranOpt) + { + pageTitle = theTranslator->trCompoundReferenceFortran(displayName(), + m_impl->compType, + m_impl->tempArgs != 0); + } + else if (vhdlOpt) + { + // TODO: translate + pageTitle = VhdlDocGen::getClassTitle(this)+" Reference"; + } + else + { + pageTitle = theTranslator->trCompoundReference(displayName(), m_impl->compType == Interface && m_impl->isObjC ? Class : m_impl->compType, m_impl->tempArgs != 0); + } - startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible); + startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,TRUE); if (getOuterScope()!=Doxygen::globalScope) { writeNavigationPath(ol); } + ol.endQuickIndices(); + ol.startContents(); startTitle(ol,getOutputFileBase()); ol.parseText(pageTitle); addGroupListToTitle(ol,this); @@ -1437,12 +1470,16 @@ void ClassDef::writeDocumentation(OutputList &ol) // ); // nested classes - if (m_impl->innerClasses) m_impl->innerClasses->writeDeclaration(ol,0,0,TRUE); + if (m_impl->innerClasses) + { + m_impl->innerClasses->writeDeclaration(ol,0,0,TRUE); + } ol.endMemberSections(); // write detailed description - if (!Config_getBool("DETAILS_AT_TOP")) { + if (!Config_getBool("DETAILS_AT_TOP")) + { writeDetailedDescription(ol,pageType,exampleFlag); } @@ -1489,7 +1526,8 @@ void ClassDef::writeMemberDocumentation(OutputList &ol) /////////////////////////////////////////////////////////////////////////// //// Member definitions + detailed documentation /////////////////////////////////////////////////////////////////////////// - + bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); + if (Config_getBool("SEPARATE_MEMBER_PAGES")) { ol.disable(OutputGenerator::Html); @@ -1499,7 +1537,14 @@ void ClassDef::writeMemberDocumentation(OutputList &ol) writeMemberDocumentation(ol,MemberList::typedefMembers,theTranslator->trMemberTypedefDocumentation()); writeMemberDocumentation(ol,MemberList::enumMembers,theTranslator->trMemberEnumerationDocumentation()); writeMemberDocumentation(ol,MemberList::constructors,theTranslator->trConstructorDocumentation()); - writeMemberDocumentation(ol,MemberList::functionMembers,theTranslator->trMemberFunctionDocumentation()); + if (fortranOpt) + { + writeMemberDocumentation(ol,MemberList::functionMembers,theTranslator->trMemberFunctionDocumentationFortran()); + } + else + { + writeMemberDocumentation(ol,MemberList::functionMembers,theTranslator->trMemberFunctionDocumentation()); + } writeMemberDocumentation(ol,MemberList::relatedMembers,theTranslator->trRelatedFunctionDocumentation()); writeMemberDocumentation(ol,MemberList::variableMembers,theTranslator->trMemberDataDocumentation()); writeMemberDocumentation(ol,MemberList::propertyMembers,theTranslator->trPropertyDocumentation()); @@ -1610,8 +1655,9 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol) // write the list of all (inherited) members for this class void ClassDef::writeMemberList(OutputList &ol) { - if (m_impl->allMemberNameInfoSDict==0 || - Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) return; + static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + if (m_impl->allMemberNameInfoSDict==0 || cOpt) return; // only for HTML ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); @@ -1734,7 +1780,11 @@ void ClassDef::writeMemberList(OutputList &ol) ol.parseText(theTranslator->trDefinedIn()+" "); if (cd->isLinkable()) { - ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->displayName()); + ol.writeObjectLink( + cd->getReference(), + cd->getOutputFileBase(), + 0, + cd->displayName()); } else { @@ -1749,8 +1799,10 @@ void ClassDef::writeMemberList(OutputList &ol) if (memberWritten) { ol.writeString("<td>"); - ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(), - 0,cd->displayName()); + ol.writeObjectLink(cd->getReference(), + cd->getOutputFileBase(), + 0, + cd->displayName()); ol.writeString("</td>"); ol.writeString("<td>"); } @@ -1759,14 +1811,16 @@ void ClassDef::writeMemberList(OutputList &ol) md->isFriend() || md->isRelated() || md->isExplicit() || md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) || md->isSignal() || md->isSlot() || - md->isStatic() + md->isStatic() || vhdlOpt ) && memberWritten) { ol.startTypewriter(); ol.docify(" ["); QStrList sl; - if (md->isFriend()) sl.append("friend"); + if (vhdlOpt) sl.append(VhdlDocGen::trVhdlType( + md->getMemberSpecifiers())); //append vhdl type + else if (md->isFriend()) sl.append("friend"); else if (md->isRelated()) sl.append("related"); else { @@ -1993,7 +2047,7 @@ bool ClassDef::isLinkableInProject() const else { return !name().isEmpty() && /* no name */ - !m_impl->artificial && !isHidden() && + !isArtificial() && !isHidden() && name().find('@')==-1 && /* anonymous compound */ (m_impl->prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */ (!m_impl->isLocal || Config_getBool("EXTRACT_LOCAL_CLASSES")) && /* local */ @@ -2029,7 +2083,7 @@ bool ClassDef::isVisibleInHierarchy() // and not an annonymous compound name().find('@')==-1 && // not an artifically introduced class - !m_impl->artificial && + !isArtificial() && // and not privately inherited (m_impl->prot!=Private || extractPrivate) && // documented or shown anyway or documentation is external @@ -2097,6 +2151,13 @@ static bool isStandardFunc(MemberDef *md) void ClassDef::mergeMembers() { if (m_impl->membersMerged) return; + + static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + QCString sep="::"; + if (optimizeOutputForJava || vhdlOpt) sep="."; + int sepLen = sep.length(); + m_impl->membersMerged=TRUE; //printf(" mergeMembers for %s\n",name().data()); bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" ); @@ -2171,7 +2232,7 @@ void ClassDef::mergeMembers() // dstMd->name().data(), // dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data()); - QCString scope=dstMi->scopePath.left(dstMi->scopePath.find("::")+2); + QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen); if (scope!=dstMi->ambiguityResolutionScope.left(scope.length())) dstMi->ambiguityResolutionScope.prepend(scope); ambigue=TRUE; @@ -2184,7 +2245,7 @@ void ClassDef::mergeMembers() // if base class is an interface (and thus implicitly virtual). //printf("same member found srcMi->virt=%d dstMi->virt=%d\n",srcMi->virt,dstMi->virt); if ((srcMi->virt!=Normal && dstMi->virt!=Normal) || - bClass->name()+"::"+srcMi->scopePath == dstMi->scopePath || + bClass->name()+sep+srcMi->scopePath == dstMi->scopePath || dstMd->getClassDef()->compoundType()==Interface ) { @@ -2198,7 +2259,7 @@ void ClassDef::mergeMembers() // dstMd->name().data(), // dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data()); - QCString scope=dstMi->scopePath.left(dstMi->scopePath.find("::")+2); + QCString scope=dstMi->scopePath.left(dstMi->scopePath.find(sep)+sepLen); if (scope!=dstMi->ambiguityResolutionScope.left(scope.length())) { dstMi->ambiguityResolutionScope.prepend(scope); @@ -2236,7 +2297,7 @@ void ClassDef::mergeMembers() if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt; MemberInfo *newMi = new MemberInfo(srcMd,prot,virt,TRUE); - newMi->scopePath=bClass->name()+"::"+srcMi->scopePath; + newMi->scopePath=bClass->name()+sep+srcMi->scopePath; if (ambigue) { //printf("$$ New member %s %s add scope %s::\n", @@ -2244,7 +2305,7 @@ void ClassDef::mergeMembers() // srcMd->name().data(), // bClass->name().data()); - QCString scope=bClass->name()+"::"; + QCString scope=bClass->name()+sep; if (scope!=srcMi->ambiguityResolutionScope.left(scope.length())) { newMi->ambiguityResolutionScope= @@ -2256,12 +2317,12 @@ void ClassDef::mergeMembers() if (srcMi->ambigClass==0) { newMi->ambigClass=bClass; - newMi->ambiguityResolutionScope=bClass->name()+"::"; + newMi->ambiguityResolutionScope=bClass->name()+sep; } else { newMi->ambigClass=srcMi->ambigClass; - newMi->ambiguityResolutionScope=srcMi->ambigClass->name()+"::"; + newMi->ambiguityResolutionScope=srcMi->ambigClass->name()+sep; } } dstMni->append(newMi); @@ -2308,7 +2369,7 @@ void ClassDef::mergeMembers() } //printf("Adding!\n"); MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,virt,TRUE); - newMi->scopePath=bClass->name()+"::"+mi->scopePath; + newMi->scopePath=bClass->name()+sep+mi->scopePath; newMi->ambigClass=mi->ambigClass; newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope.copy(); newMni->append(newMi); @@ -2620,16 +2681,33 @@ void ClassDef::determineIntfUsageRelation() QCString ClassDef::compoundTypeString() const { if (m_impl->compType==Interface && m_impl->isObjC) return "class"; - switch (m_impl->compType) + if (Config_getBool("OPTIMIZE_FOR_FORTRAN")) + { + switch (m_impl->compType) + { + case Class: return "module"; + case Struct: return "type"; + case Union: return "union"; + case Interface: return "interface"; + case Protocol: return "protocol"; + case Category: return "category"; + case Exception: return "exception"; + default: return "unknown"; + } + } + else { - case Class: return "class"; - case Struct: return "struct"; - case Union: return "union"; - case Interface: return "interface"; - case Protocol: return "protocol"; - case Category: return "category"; - case Exception: return "exception"; - default: return "unknown"; + switch (m_impl->compType) + { + case Class: return "class"; + case Struct: return "struct"; + case Union: return "union"; + case Interface: return "interface"; + case Protocol: return "protocol"; + case Category: return "category"; + case Exception: return "exception"; + default: return "unknown"; + } } } @@ -2785,7 +2863,7 @@ ClassDef *ClassDef::insertTemplateInstance(const QCString &fileName, { Debug::print(Debug::Classes,0," New template instance class `%s'`%s'\n",name().data(),templSpec.data()); templateClass = new ClassDef( - fileName,startLine,name()+templSpec,ClassDef::Class); + fileName,startLine,localName()+templSpec,ClassDef::Class); templateClass->setTemplateMaster(this); templateClass->setOuterScope(getOuterScope()); templateClass->setHidden(isHidden()); @@ -2982,12 +3060,13 @@ QCString ClassDef::className() const void ClassDef::addListReferences() { + bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (!isLinkableInProject()) return; //printf("ClassDef(%s)::addListReferences()\n",name().data()); { LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems(); addRefItem(xrefItems.pointer(), - theTranslator->trClass(TRUE,TRUE), + fortranOpt?theTranslator->trType(TRUE,TRUE):theTranslator->trClass(TRUE,TRUE), getOutputFileBase(),displayName() ); } @@ -3094,8 +3173,19 @@ void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md) void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title, const char *subTitle) { + static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); MemberList * ml = getMemberList(lt); - if (ml) ml->writeDeclarations(ol,this,0,0,0,title,subTitle); + if (ml) + { + if (optimizeVhdl) // use specific declarations function + { + VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this); + } + else // ise generic declaration function + { + ml->writeDeclarations(ol,this,0,0,0,title,subTitle); + } + } } void ClassDef::writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title) @@ -3119,11 +3209,6 @@ bool ClassDef::isLocal() const return m_impl->isLocal; } -bool ClassDef::isArtificial() const -{ - return m_impl->artificial; -} - ClassSDict *ClassDef::getInnerClasses() { return m_impl->innerClasses; @@ -3254,11 +3339,6 @@ void ClassDef::setProtection(Protection p) m_impl->prot=p; } -void ClassDef::setClassIsArtificial() -{ - m_impl->artificial = TRUE; -} - void ClassDef::setIsStatic(bool b) { m_impl->isStatic=b; diff --git a/src/classdef.h b/src/classdef.h index 762d138..20d4df7 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -111,11 +111,6 @@ class ClassDef : public Definition /*! Returns TRUE if this is a local class definition, see EXTRACT_LOCAL_CLASSES */ bool isLocal() const; - /*! returns TRUE if this class was artificially introduced, for instance because - * it is used to show a template instantiation relation. - */ - bool isArtificial() const; - /*! returns the classes nested into this class */ ClassSDict *getInnerClasses(); @@ -286,7 +281,6 @@ class ClassDef : public Definition const QCString &templSpec,bool &freshInstance); void addUsedClass(ClassDef *cd,const char *accessName); void addUsedByClass(ClassDef *cd,const char *accessName); - void setClassIsArtificial(); void setIsStatic(bool b); void setIsObjectiveC(bool b); void setCompoundType(CompoundType t); @@ -340,126 +334,6 @@ class ClassDef : public Definition ClassDefImpl *m_impl; -#if 0 - /*! file name that forms the base for the output file containing the - * class documentation. For compatibility with Qt (e.g. links via tag - * files) this name cannot be derived from the class name directly. - */ - QCString m_fileName; - - /*! Include information about the header file should be included - * in the documentation. 0 by default, set by setIncludeFile(). - */ - IncludeInfo *m_incInfo; - - /*! List of base class (or super-classes) from which this class derives - * directly. - */ - BaseClassList *m_inherits; - - /*! List of sub-classes that directly derive from this class - */ - BaseClassList *m_inheritedBy; - - /*! Namespace this class is part of - * (this is the inner most namespace in case of nested namespaces) - */ - NamespaceDef *m_nspace; - - /*! File this class is defined in */ - FileDef *m_fileDef; - - /*! List of all members (including inherited members) */ - MemberNameInfoSDict *m_allMemberNameInfoSDict; - - /*! Template arguments of this class */ - ArgumentList *m_tempArgs; - - /*! Files that were used for generating the class documentation. */ - QStrList m_files; - - /*! Examples that use this class */ - ExampleSDict *m_exampleSDict; - - /*! Holds the kind of "class" this is. */ - CompoundType m_compType; - - /*! The protection level in which this class was found. - * Typically Public, but for nested classes this can also be Protected - * or Private. - */ - Protection m_prot; - - /*! The inner classes contained in this class. Will be 0 if there are - * no inner classes. - */ - ClassSDict *m_innerClasses; - - /* classes for the collaboration diagram */ - UsesClassDict *m_usesImplClassDict; - UsesClassDict *m_usedByImplClassDict; - UsesClassDict *m_usesIntfClassDict; - - /*! Template instances that exists of this class, the key in the - * dictionary is the template argument list. - */ - QDict<ClassDef> *m_templateInstances; - - /*! Template instances that exists of this class, as defined by variables. - * We do NOT want to document these individually. The key in the - * dictionary is the template argument list. - */ - QDict<ClassDef> *m_variableInstances; - - QDict<int> *m_templBaseClassNames; - - /*! The class this class is an instance of. */ - ClassDef *m_templateMaster; - - /*! class name with outer class scope, but without namespace scope. */ - QCString m_className; - - /*! If this class is a Objective-C category, then this points to the - * class which is extended. - */ - ClassDef *m_categoryOf; - - QList<MemberList> m_memberLists; - - /* user defined member groups */ - MemberGroupSDict *memberGroupSDict; - - /*! Indicated whether this class exists because it is used by - * some other class only (TRUE) or if some class inherits from - * it (FALSE). This is need to remove used-only classes from - * the inheritance tree. - */ - bool m_artificial; - - /*! Is this an abstact class? */ - bool m_isAbstract; - - /*! Is the class part of an unnamed namespace? */ - bool m_isStatic; - - /*! Is the class part implemented in Objective C? */ - bool m_isObjC; - - /*! TRUE if classes members are merged with those of the base classes. */ - bool m_membersMerged; - - /*! TRUE if the class is defined in a source file rather than a header file. */ - bool m_isLocal; - - bool m_isTemplArg; - - /*! Does this class group its user-grouped members - * as a sub-section of the normal (public/protected/..) - * groups? - */ - bool m_subGrouping; -#endif - }; /*! \brief Class that contains information about a usage relation. diff --git a/src/classlist.cpp b/src/classlist.cpp index 6619b8e..ee23331 100644 --- a/src/classlist.cpp +++ b/src/classlist.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -21,6 +21,7 @@ #include "outputlist.h" #include "language.h" #include "doxygen.h" +#include "vhdldocgen.h" ClassList::ClassList() : QList<ClassDef>() { @@ -66,6 +67,8 @@ ClassListIterator::ClassListIterator(const ClassList &cllist) : void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *filter, const char *header,bool localNames) { + static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); if (count()>0) { ClassSDict::Iterator sdi(*this); @@ -91,9 +94,14 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f { ol.parseText(header); } + else if (vhdlOpt) + { + ol.parseText(VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE)); + } else { - ol.parseText(theTranslator->trCompounds()); + ol.parseText(fortranOpt ? theTranslator->trDataTypes() : + theTranslator->trCompounds()); } ol.endMemberHeader(); ol.startMemberList(); @@ -103,7 +111,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f !cd->isReference()) // skip classes found in tag files { Doxygen::tagFile << " <class kind=\"" << cd->compoundTypeString() - << "\">" << convertToXML(cd->name()) << "</class>" << endl; + << "\">" << convertToXML(cd->name()) << "</class>" << endl; } ol.startMemberItem(FALSE); QCString tmp = cd->compoundTypeString(); @@ -116,16 +124,20 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f { cname = cd->displayName(); } - ol.writeString(tmp); - ol.writeString(" "); - ol.insertMemberAlign(); + + if (!vhdlOpt) // for VHDL we swap the name and the type + { + ol.writeString(tmp); + ol.writeString(" "); + ol.insertMemberAlign(); + } if (isLink) { ol.writeObjectLink(cd->getReference(), cd->getOutputFileBase(), 0, cname - ); + ); } else { @@ -133,16 +145,21 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f ol.docify(cname); ol.endBold(); } + if (vhdlOpt) // now write the type + { + ol.insertMemberAlign(); + VhdlDocGen::writeClassType(cd,ol,cname); + } ol.endMemberItem(); if (!cd->briefDescription().isEmpty()) { ol.startMemberDescription(); ol.parseDoc(cd->briefFile(),cd->briefLine(),cd,0, - cd->briefDescription(),FALSE,FALSE); + cd->briefDescription(),FALSE,FALSE); if (//(!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) || //!cd->documentation().isEmpty()) cd->isLinkableInProject() - ) + ) { ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); diff --git a/src/classlist.h b/src/classlist.h index b212873..c408168 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index e6f74f0..bca36df 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -3,7 +3,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/cmdmapper.h b/src/cmdmapper.h index d5a2376..796284f 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -3,7 +3,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -1665,6 +1665,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} %option noyywrap %x SkipString +%x SkipStringS %x SkipVerbString %x SkipCPP %x SkipComment @@ -2334,18 +2335,33 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} g_inForEachExpression = FALSE; BEGIN( SkipString ); } +<FuncCall,Body,MemberCall,MemberCall2,SkipInits>\' { + startFontClass("stringliteral"); + g_code->codify(yytext); + g_lastStringContext=YY_START; + g_inForEachExpression = FALSE; + BEGIN( SkipStringS ); + } <SkipString>[^\"\\\r\n]* { g_code->codify(yytext); } -<SkipString>"//"|"/*" { +<SkipStringS>[^\'\\\r\n]* { g_code->codify(yytext); } -<SkipString>@?\" { +<SkipString,SkipStringS>"//"|"/*" { + g_code->codify(yytext); + } +<SkipString>@?\" { + g_code->codify(yytext); + endFontClass(); + BEGIN( g_lastStringContext ); + } +<SkipStringS>\' { g_code->codify(yytext); endFontClass(); BEGIN( g_lastStringContext ); } -<SkipString>\\. { +<SkipString,SkipStringS>\\. { g_code->codify(yytext); } <SkipVerbString>[^"\n]+ { diff --git a/src/commentcnv.h b/src/commentcnv.h index 8bc8030..eb6dce5 100644 --- a/src/commentcnv.h +++ b/src/commentcnv.h @@ -1,8 +1,8 @@ /***************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/commentcnv.l b/src/commentcnv.l index e9a3b47..68ee64e 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -1,8 +1,8 @@ /***************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -65,6 +65,8 @@ static QCString g_aliasString; static int g_blockCount; static int g_lastBlockContext; +static SrcLangExt g_lang; + static void replaceCommentMarker(const char *s,int len) { const char *p=s; @@ -268,7 +270,7 @@ void replaceComment(int offset); %% -<Scan>[^"'\/\n\\]* { /* eat anything that is not " / or \n */ +<Scan>[^"'\/\n\\#\\-]* { /* eat anything that is not " / or \n */ copyToOutput(yytext,yyleng); } <Scan>"\"" { /* start of a string */ @@ -312,6 +314,28 @@ void replaceComment(int offset); copyToOutput(yytext,yyleng); BEGIN(CComment); } +<Scan>"##" { + if (g_lang!=SrcLangExt_Python) + { + REJECT; + } + else + { + copyToOutput(yytext,yyleng); + BEGIN(CComment); + } + } +<Scan>"--!" { + if (g_lang!=SrcLangExt_VHDL) + { + REJECT; + } + else + { + copyToOutput(yytext,yyleng); + BEGIN(CComment); + } + } <CComment,ReadLine>[\\@]("dot"|"code"|"msc")/[^a-z_A-Z0-9] { /* start of a verbatim block */ copyToOutput(yytext,yyleng); g_lastCommentContext = YY_START; @@ -414,6 +438,28 @@ void replaceComment(int offset); copyToOutput(yytext,yyleng); BEGIN(Scan); } +<CComment>"\n"/[ \t]*[^#] { /* end of Python comment */ + if (g_lang!=SrcLangExt_Python) + { + REJECT; + } + else + { + copyToOutput(yytext,yyleng); + BEGIN(Scan); + } + } +<CComment>"\n"/[ \t]*[^\-] { /* end of VHDL comment */ + if (g_lang!=SrcLangExt_VHDL) + { + REJECT; + } + else + { + copyToOutput(yytext,yyleng); + BEGIN(Scan); + } + } <CComment>. { copyToOutput(yytext,yyleng); } @@ -480,8 +526,12 @@ void replaceComment(int offset); if (YY_START==CComment && oldSkip && !g_skip) { //printf("** Adding start of comment!\n"); - ADDCHAR('/'); - ADDCHAR('*'); + if (g_lang!=SrcLangExt_Python && + g_lang!=SrcLangExt_VHDL) + { + ADDCHAR('/'); + ADDCHAR('*'); + } } } <CondLine>[a-z_A-Z][a-z_A-Z0-9.\-]* { @@ -490,8 +540,12 @@ void replaceComment(int offset); if (g_condCtx==CComment && !oldSkip && g_skip) { //printf("** Adding terminator for comment!\n"); - ADDCHAR('*'); - ADDCHAR('/'); + if (g_lang!=SrcLangExt_Python && + g_lang!=SrcLangExt_VHDL) + { + ADDCHAR('*'); + ADDCHAR('/'); + } } BEGIN(g_condCtx); } @@ -504,8 +558,12 @@ void replaceComment(int offset); if (g_condCtx==CComment && !oldSkip && g_skip) { //printf("** Adding terminator for comment!\n"); - ADDCHAR('*'); - ADDCHAR('/'); + if (g_lang!=SrcLangExt_Python && + g_lang!=SrcLangExt_VHDL) + { + ADDCHAR('*'); + ADDCHAR('/'); + } } if (*yytext=='\n') g_lineNr++; BEGIN(g_condCtx); @@ -587,6 +645,7 @@ void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName) g_mlBrief = Config_getBool("MULTILINE_CPP_IS_BRIEF"); g_skip = FALSE; g_fileName = fileName; + g_lang = getLanguageFromFileName(fileName); g_lineNr = 0; g_condStack.clear(); g_condStack.setAutoDelete(TRUE); diff --git a/src/commentscan.h b/src/commentscan.h index 85ff2a0..d01bea9 100644 --- a/src/commentscan.h +++ b/src/commentscan.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/commentscan.l b/src/commentscan.l index 8635906..b72df2f 100644 --- a/src/commentscan.l +++ b/src/commentscan.l @@ -1,6 +1,6 @@ /***************************************************************************** * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -912,7 +912,7 @@ RCSTAG "$"{ID}":"[^\n$]+"$" DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName); if (cmdPtr) // special action is required { - if (cmdPtr->endsBrief && !current->brief.stripWhiteSpace().isEmpty()) + if (cmdPtr->endsBrief) { briefEndsAtDot=FALSE; // this command forces the end of brief description diff --git a/src/config.l b/src/config.l index 23d0c5b..4be1ff7 100644 --- a/src/config.l +++ b/src/config.l @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -116,13 +116,14 @@ void ConfigOption::writeStringValue(QTextStream &t,QCString &s) if (p) { while ((c=*p++)!=0 && !needsEscaping) - needsEscaping = (c==' ' || c=='\n' || c=='\t' || c=='"'); + needsEscaping = (c==' ' || c=='\n' || c=='\t' || c=='"' || c=='#'); if (needsEscaping) { t << "\""; p=se.data(); while (*p) { + if (*p==' ' && *(p+1)=='\0') break; // skip inserted space at the end if (*p=='"') t << "\\"; // escape quotes t << *p++; } @@ -333,7 +334,7 @@ static int yyread(char *buf,int max_size) else { //assert(includeStack.current()->newState==YY_CURRENT_BUFFER); - return fread(buf,1,max_size,includeStack.current()->filePtr); + return (int)fread(buf,1,max_size,includeStack.current()->filePtr); } } @@ -347,7 +348,7 @@ static QCString configStringRecode( QCString outputEncoding = toEncoding; if (inputEncoding.isEmpty() || outputEncoding.isEmpty() || inputEncoding==outputEncoding) return str; int inputSize=str.length(); - int outputSize=inputSize*4+1; + size_t outputSize=inputSize*4+1; QCString output(outputSize); void *cd = portable_iconv_open(outputEncoding,inputEncoding); if (cd==(void *)(-1)) @@ -1213,6 +1214,8 @@ void Config::check() filePatternList.append("*.dox"); filePatternList.append("*.py"); filePatternList.append("*.f90"); + filePatternList.append("*.vhd"); + filePatternList.append("*.vhdl"); if (portable_fileSystemIsCaseSensitive()) { // unix => case sensitive match => also include useful uppercase versions @@ -1231,6 +1234,8 @@ void Config::check() filePatternList.append("*.MM"); filePatternList.append("*.PY"); filePatternList.append("*.F90"); + filePatternList.append("*.VHD"); + filePatternList.append("*.VHDL"); } } @@ -1304,6 +1309,35 @@ void Config::check() Config_getBool("SOURCE_BROWSER")=TRUE; Config_getBool("REFERENCED_BY_RELATION")=TRUE; } + // some default settings for vhdl + if (Config_getBool("OPTIMIZE_OUTPUT_VHDL") && + (Config_getBool("INLINE_INHERITED_MEMB") || + Config_getBool("INHERIT_DOCS") || + !Config_getBool("HIDE_SCOPE_NAMES") || + !Config_getBool("EXTRACT_PRIVATE") + ) + ) + { + bool b1 = Config_getBool("INLINE_INHERITED_MEMB"); + bool b2 = Config_getBool("INHERIT_DOCS"); + bool b3 = Config_getBool("HIDE_SCOPE_NAMES"); + bool b4 = Config_getBool("EXTRACT_PRIVATE"); + char *s1,*s2,*s3,*s4; + if (b1) s1=" INLINDE_INHERITED_MEMB = NO (was YES)\n"; else s1=""; + if (b2) s2=" INHERIT_DOCS = NO (was YES)\n"; else s2=""; + if (!b3) s3=" HIDE_SCOPE_NAMES = YES (was NO)\n"; else s3=""; + if (!b4) s4=" EXTRACT_PRIVATE = YES (was NO)\n"; else s4=""; + + config_err("Warning: enabling OPTIMIZE_OUTPUT_VHDL assumes the following settings:\n" + "%s%s%s%s",s1,s2,s3,s4 + ); + + Config_getBool("INLINE_INHERITED_MEMB") = FALSE; + Config_getBool("INHERIT_DOCS") = FALSE; + Config_getBool("HIDE_SCOPE_NAMES") = TRUE; + Config_getBool("EXTRACT_PRIVATE") = TRUE; + } + } void Config::init() @@ -1334,11 +1368,11 @@ void Config::create() cs = addString( "DOXYFILE_ENCODING", - "This tag specifies the encoding used for all characters in the config file that \n" - "follow. The default is UTF-8 which is also the encoding used for all text before \n" - "the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into \n" - "libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of \n" - "possible encodings.\n" + "This tag specifies the encoding used for all characters in the config file \n" + "that follow. The default is UTF-8 which is also the encoding used for all \n" + "text before the first occurrence of this tag. Doxygen uses libiconv (or the \n" + "iconv built into libc) for the transcoding. See \n" + "http://www.gnu.org/software/libiconv for the list of possible encodings.\n" ); cs->setDefaultValue("UTF-8"); cs = addString( @@ -1379,8 +1413,8 @@ void Config::create() "Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, \n" "Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, \n" "Italian, Japanese, Japanese-en (Japanese with English messages), Korean, \n" - "Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, \n" - "Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n", + "Korean-en, Lithuanian, Norwegian, Macedonian, Polish, Portuguese, Romanian, \n" + "Russian, Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.\n", "English" ); #ifdef LANG_ZA @@ -1446,6 +1480,9 @@ void Config::create() #ifdef LANG_NO ce->addValue("Norwegian"); #endif +#ifdef LANG_MK + ce->addValue("Macedonian"); +#endif #ifdef LANG_FA ce->addValue("Persian"); #endif @@ -1650,15 +1687,29 @@ void Config::create() cb = addBool( "OPTIMIZE_OUTPUT_JAVA", "Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java \n" - "sources only. Doxygen will then generate output that is more tailored for Java. \n" - "For instance, namespaces will be presented as packages, qualified scopes \n" - "will look different, etc. \n", + "sources only. Doxygen will then generate output that is more tailored for \n" + "Java. For instance, namespaces will be presented as packages, qualified \n" + "scopes will look different, etc. \n", + FALSE + ); + cb = addBool( + "OPTIMIZE_FOR_FORTRAN", + "Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran \n" + "sources only. Doxygen will then generate output that is more tailored for \n" + "Fortran. \n", + FALSE + ); + cb = addBool( + "OPTIMIZE_OUTPUT_VHDL", + "Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL \n" + "sources. Doxygen will then generate output that is tailored for \n" + "VHDL. \n", FALSE ); cb = addBool( "BUILTIN_STL_SUPPORT", - "If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to \n" - "include (a tag file for) the STL sources as input, then you should \n" + "If you use STL classes (i.e. std::string, std::vector, etc.) but do not want \n" + "to include (a tag file for) the STL sources as input, then you should \n" "set this tag to YES in order to let doxygen match functions declarations and \n" "definitions whose arguments contain STL classes (e.g. func(std::string); v.s. \n" "func(std::string) {}). This also make the inheritance and collaboration \n" @@ -1745,10 +1796,11 @@ void Config::create() ); cb = addBool( "EXTRACT_ANON_NSPACES", - "If this flag is set to YES, the members of anonymous namespaces will be extracted \n" - "and appear in the documentation as a namespace called 'anonymous_namespace{file}', \n" - "where file will be replaced with the base name of the file that contains the anonymous \n" - "namespace. By default anonymous namespace are hidden. \n", + "If this flag is set to YES, the members of anonymous namespaces will be \n" + "extracted and appear in the documentation as a namespace called \n" + "'anonymous_namespace{file}', where file will be replaced with the base \n" + "name of the file that contains the anonymous namespace. By default \n" + "anonymous namespace are hidden. \n", FALSE ); cb = addBool( @@ -1909,8 +1961,8 @@ void Config::create() ); cs = addString( "FILE_VERSION_FILTER", "The FILE_VERSION_FILTER tag can be used to specify a program or script that \n" - "doxygen should invoke to get the current version for each file (typically from the \n" - "version control system). Doxygen will invoke the program by executing (via \n" + "doxygen should invoke to get the current version for each file (typically from \n" + "the version control system). Doxygen will invoke the program by executing (via \n" "popen()) the command <command> <input-file>, where <command> is the value of \n" "the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file \n" "provided by doxygen. Whatever the program writes to standard output \n" @@ -1987,10 +2039,11 @@ void Config::create() ); cl->setWidgetType(ConfigList::FileAndDir); cs = addString( "INPUT_ENCODING", - "This tag can be used to specify the character encoding of the source files that \n" - "doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default \n" - "input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding. \n" - "See http://www.gnu.org/software/libiconv for the list of possible encodings.\n" + "This tag can be used to specify the character encoding of the source files \n" + "that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is \n" + "also the default input encoding. Doxygen uses libiconv (or the iconv built \n" + "into libc) for the transcoding. See http://www.gnu.org/software/libiconv for \n" + "the list of possible encodings.\n" ); cs->setDefaultValue("UTF-8"); cl = addList( @@ -2034,9 +2087,10 @@ void Config::create() cl = addList( "EXCLUDE_SYMBOLS", "The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names \n" - "(namespaces, classes, functions, etc.) that should be excluded from the output. \n" - "The symbol name can be a fully qualified name, a word, or if the wildcard * is used, \n" - "a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test \n" + "(namespaces, classes, functions, etc.) that should be excluded from the \n" + "output. The symbol name can be a fully qualified name, a word, or if the \n" + "wildcard * is used, a substring. Examples: ANamespace, AClass, \n" + "AClass::ANamespace, ANamespace::*Test \n" ); cl = addList( "EXAMPLE_PATH", @@ -2255,7 +2309,38 @@ void Config::create() "of the generated HTML documentation. \n", FALSE ); + cb = addBool( + "GENERATE_DOCSET", + "If the GENERATE_DOCSET tag is set to YES, additional index files \n" + "will be generated that can be used as input for Apple's Xcode 3 \n" + "integrated development environment, introduced with OSX 10.5 (Leopard). \n" + "To create a documentation set, doxygen will generate a Makefile in the \n" + "HTML output directory. Running make will produce the docset in that \n" + "directory and running \"make install\" will install the docset in \n" + "~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find \n" + "it at startup.", + FALSE + ); cb->addDependency("GENERATE_HTML"); + cs = addString( + "DOCSET_FEEDNAME", + "When GENERATE_DOCSET tag is set to YES, this tag determines the name of the \n" + "feed. A documentation feed provides an umbrella under which multiple \n" + "documentation sets from a single provider (such as a company or product suite) \n" + "can be grouped. \n" + ); + cs->setDefaultValue("Doxygen generated docs"); + cb->addDependency("GENERATE_DOCSET"); + cs = addString( + "DOCSET_BUNDLE_ID", + "When GENERATE_DOCSET tag is set to YES, this tag specifies a string that \n" + "should uniquely identify the documentation set bundle. This should be a \n" + "reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen \n" + "will append .docset to the name. \n" + ); + cs->setDefaultValue("org.doxygen.Project"); + cb->addDependency("GENERATE_DOCSET"); + cb = addBool( "HTML_DYNAMIC_SECTIONS", "If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML \n" @@ -2429,7 +2514,7 @@ void Config::create() "is prepared for conversion to pdf (using ps2pdf). The pdf file will \n" "contain links (just like the HTML output) instead of page references \n" "This makes the output suitable for online browsing using a pdf viewer. \n", - FALSE + TRUE ); cb->addDependency("GENERATE_LATEX"); cb = addBool( @@ -2437,7 +2522,7 @@ void Config::create() "If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of \n" "plain latex in the generated Makefile. Set this option to YES to get a \n" "higher quality PDF documentation. \n", - FALSE + TRUE ); cb->addDependency("GENERATE_LATEX"); cb = addBool( @@ -2793,10 +2878,11 @@ void Config::create() ); cs = addString( "MSCGEN_PATH", "You can define message sequence charts within doxygen comments using the \\msc \n" - "command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to \n" - "produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to \n" - "specify the directory where the mscgen tool resides. If left empty the tool is assumed to \n" - "be found in the default search path. \n" + "command. Doxygen will then run the mscgen tool (see \n" + "http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the \n" + "documentation. The MSCGEN_PATH tag allows you to specify the directory where \n" + "the mscgen tool resides. If left empty the tool is assumed to be found in the \n" + "default search path. \n" ); cb = addBool( "HIDE_UNDOC_RELATIONS", @@ -2873,21 +2959,21 @@ void Config::create() cb->addDependency("HAVE_DOT"); cb = addBool( "CALL_GRAPH", - "If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will \n" - "generate a call dependency graph for every global function or class method. \n" - "Note that enabling this option will significantly increase the time of a run. \n" - "So in most cases it will be better to enable call graphs for selected \n" - "functions only using the \\callgraph command.\n", + "If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then \n" + "doxygen will generate a call dependency graph for every global function \n" + "or class method. Note that enabling this option will significantly increase \n" + "the time of a run. So in most cases it will be better to enable call graphs \n" + "for selected functions only using the \\callgraph command.\n", FALSE ); cb->addDependency("HAVE_DOT"); cb = addBool( "CALLER_GRAPH", - "If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will \n" - "generate a caller dependency graph for every global function or class method. \n" - "Note that enabling this option will significantly increase the time of a run. \n" - "So in most cases it will be better to enable caller graphs for selected \n" - "functions only using the \\callergraph command.\n", + "If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then \n" + "doxygen will generate a caller dependency graph for every global function \n" + "or class method. Note that enabling this option will significantly increase \n" + "the time of a run. So in most cases it will be better to enable caller \n" + "graphs for selected functions only using the \\callergraph command.\n", FALSE ); cb->addDependency("HAVE_DOT"); @@ -2938,9 +3024,9 @@ void Config::create() "The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of \n" "nodes that will be shown in the graph. If the number of nodes in a graph \n" "becomes larger than this value, doxygen will truncate the graph, which is \n" - "visualized by representing a node as a red box. Note that doxygen if the number \n" - "of direct children of the root node in a graph is already larger than \n" - "MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note \n" + "visualized by representing a node as a red box. Note that doxygen if the \n" + "number of direct children of the root node in a graph is already larger than \n" + "DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note \n" "that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. \n", 0,10000, 50 ); @@ -2962,10 +3048,10 @@ void Config::create() cb = addBool( "DOT_TRANSPARENT", "Set the DOT_TRANSPARENT tag to YES to generate images with a transparent \n" - "background. This is disabled by default, which results in a white background. \n" - "Warning: Depending on the platform used, enabling this option may lead to \n" - "badly anti-aliased labels on the edges of a graph (i.e. they become hard to \n" - "read). \n", + "background. This is enabled by default, which results in a transparent \n" + "background. Warning: Depending on the platform used, enabling this option \n" + "may lead to badly anti-aliased labels on the edges of a graph (i.e. they \n" + "become hard to read). \n", TRUE ); cb->addDependency("HAVE_DOT"); diff --git a/src/constexp.h b/src/constexp.h index d2bc7d0..8449409 100644 --- a/src/constexp.h +++ b/src/constexp.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/constexp.l b/src/constexp.l index 5e44ba3..5b725d3 100644 --- a/src/constexp.l +++ b/src/constexp.l @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/constexp.y b/src/constexp.y index b0ced42..04c6224 100644 --- a/src/constexp.y +++ b/src/constexp.y @@ -1,6 +1,6 @@ /****************************************************************************** * - * $Id$ + * * * * Copyright (C) 1997-2007 by Dimitri van Heesch. diff --git a/src/cppvalue.cpp b/src/cppvalue.cpp index 5858e60..af4b03d 100644 --- a/src/cppvalue.cpp +++ b/src/cppvalue.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/cppvalue.h b/src/cppvalue.h index c9a48f0..77d4864 100644 --- a/src/cppvalue.h +++ b/src/cppvalue.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/debug.cpp b/src/debug.cpp index 274294e..d770953 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/debug.h b/src/debug.h index 1a35900..0330077 100644 --- a/src/debug.h +++ b/src/debug.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/declinfo.h b/src/declinfo.h index 07869d8..1dfaa7a 100644 --- a/src/declinfo.h +++ b/src/declinfo.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/declinfo.l b/src/declinfo.l index 5cb3944..d36610e 100644 --- a/src/declinfo.l +++ b/src/declinfo.l @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/defargs.h b/src/defargs.h index abee943..cb0f81b 100644 --- a/src/defargs.h +++ b/src/defargs.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/defargs.l b/src/defargs.l index a924f10..b7259a1 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/defgen.cpp b/src/defgen.cpp index 87a46de..2fd358e 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/defgen.h b/src/defgen.h index 7c8e2e4..37e8399 100644 --- a/src/defgen.h +++ b/src/defgen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/define.cpp b/src/define.cpp index 47e4541..a18604e 100644 --- a/src/define.cpp +++ b/src/define.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/define.h b/src/define.h index b57007b..9d2cd17 100644 --- a/src/define.h +++ b/src/define.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/definition.cpp b/src/definition.cpp index 408f831..9bc0ad6 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -72,6 +72,7 @@ class DefinitionImpl QCString ref; // reference to external documentation bool hidden; + bool isArtificial; Definition *outerScope; // not owner @@ -133,6 +134,7 @@ void DefinitionImpl::init(const char *df,int dl, partOfGroups=0; xrefListItems=0; hidden = FALSE; + isArtificial = FALSE; } //----------------------------------------------------------------------------------------- @@ -283,7 +285,10 @@ Definition::Definition(const char *df,int dl, if (isSymbol) addToMap(name,this); _setBriefDescription(b,df,dl); _setDocumentation(d,df,dl,TRUE,FALSE); - if (matchExcludedSymbols(name)) m_impl->hidden = TRUE; + if (matchExcludedSymbols(name)) + { + m_impl->hidden = TRUE; + } } Definition::~Definition() @@ -479,11 +484,12 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri static bool readCodeFragment(const char *fileName, int &startLine,int &endLine,QCString &result) { + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine); if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name QCString cmd=getFileFilter(fileName)+" \""+fileName+"\""; FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r"); - bool found=FALSE; + bool found=vhdlOpt; // for VHDL not bracket search is possible if (f) { int c=0; @@ -709,6 +715,8 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) actualStart,actualEnd,codeFragment) ) { + //printf("Adding code fragement '%s' ext='%s'\n", + // codeFragment.data(),m_impl->defFileExt.data()); ParserInterface *pIntf = Doxygen::parserManager->getParser(m_impl->defFileExt); pIntf->resetCodeParserState(); //printf("Read:\n`%s'\n\n",codeFragment.data()); @@ -929,16 +937,43 @@ void Definition::addInnerCompound(Definition *) err("Error: Definition::addInnerCompound() called\n"); } -QCString Definition::qualifiedName() +QCString Definition::qualifiedName() const { + static int count=0; + count++; makeResident(); - if (!m_impl->qualifiedName.isEmpty()) return m_impl->qualifiedName; + if (!m_impl->qualifiedName.isEmpty()) + { + count--; + return m_impl->qualifiedName; + } +#if 0 + if (count>20) + { + printf("Definition::qualifiedName() Infinite recursion detected! Type=%d\n",definitionType()); + printf("Trace:\n"); + Definition *d = (Definition *)this; + for (int i=0;d && i<20;i++) + { + printf(" %s\n",d->name().data()); + d = d->getOuterScope(); + } + } +#endif - //printf("start Definition::qualifiedName() localName=%s\n",m_localName.data()); + //printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data()); if (m_impl->outerScope==0) { - if (m_impl->localName=="<globalScope>") return ""; - else return m_impl->localName; + if (m_impl->localName=="<globalScope>") + { + count--; + return ""; + } + else + { + count--; + return m_impl->localName; + } } if (m_impl->outerScope->name()=="<globalScope>") @@ -949,7 +984,8 @@ QCString Definition::qualifiedName() { m_impl->qualifiedName = m_impl->outerScope->qualifiedName()+"::"+m_impl->localName; } - //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data()); + //printf("end %s::qualifiedName()=%s\n",name().data(),m_impl->qualifiedName.data()); + count--; return m_impl->qualifiedName; }; @@ -1068,7 +1104,9 @@ void Definition::writePathFragment(OutputList &ol) const if (m_impl->outerScope->definitionType()==Definition::TypeClass || m_impl->outerScope->definitionType()==Definition::TypeNamespace) { - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + if (Config_getBool("OPTIMIZE_OUTPUT_JAVA") || + Config_getBool("OPTIMIZE_OUTPUT_VHDL") + ) { ol.writeString("."); } @@ -1112,9 +1150,9 @@ void Definition::writeNavigationPath(OutputList &ol) const ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - ol.writeString("<div class=\"nav\">\n"); + ol.writeString(" <div class=\"navpath\">"); writePathFragment(ol); - ol.writeString("</div>\n"); + ol.writeString("\n </div>\n"); ol.popGeneratorState(); } @@ -1217,6 +1255,11 @@ bool Definition::isVisible() const return isLinkable() && !m_impl->hidden; } +bool Definition::isArtificial() const +{ + return m_impl->isArtificial; +} + QCString Definition::getReference() const { makeResident(); @@ -1288,6 +1331,12 @@ void Definition::setHidden(bool b) m_impl->hidden = m_impl->hidden || b; } +void Definition::setArtificial(bool b) +{ + makeResident(); + m_impl->isArtificial = b; +} + void Definition::setLocalName(const QCString name) { makeResident(); @@ -1318,6 +1367,7 @@ void Definition::flushToDisk() const marshalQCString (Doxygen::symbolStorage,m_impl->qualifiedName); marshalQCString (Doxygen::symbolStorage,m_impl->ref); marshalBool (Doxygen::symbolStorage,m_impl->hidden); + marshalBool (Doxygen::symbolStorage,m_impl->isArtificial); marshalObjPointer (Doxygen::symbolStorage,m_impl->outerScope); marshalQCString (Doxygen::symbolStorage,m_impl->defFileName); marshalInt (Doxygen::symbolStorage,m_impl->defLine); @@ -1348,6 +1398,7 @@ void Definition::loadFromDisk() const m_impl->qualifiedName = unmarshalQCString (Doxygen::symbolStorage); m_impl->ref = unmarshalQCString (Doxygen::symbolStorage); m_impl->hidden = unmarshalBool (Doxygen::symbolStorage); + m_impl->isArtificial = unmarshalBool (Doxygen::symbolStorage); m_impl->outerScope = (Definition *)unmarshalObjPointer (Doxygen::symbolStorage); m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage); m_impl->defLine = unmarshalInt (Doxygen::symbolStorage); diff --git a/src/definition.h b/src/definition.h index 8f57ba8..afaf34f 100644 --- a/src/definition.h +++ b/src/definition.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -120,7 +120,7 @@ class Definition : public DefinitionIntf, public LockableObj /*! Returns the fully qualified name of this definition */ - virtual QCString qualifiedName(); + virtual QCString qualifiedName() const; /*! Returns the name of this definition as it appears in the symbol map. */ @@ -200,6 +200,11 @@ class Definition : public DefinitionIntf, public LockableObj /*! Returns TRUE iff this item is supposed to be hidden from the output. */ bool isHidden() const; + /*! returns TRUE if this entity was artificially introduced, for + * instance because it is used to show a template instantiation relation. + */ + bool isArtificial() const; + /*! If this definition was imported via a tag file, this function * returns the tagfile for the external project. This can be * translated into an external link target via @@ -271,6 +276,8 @@ class Definition : public DefinitionIntf, public LockableObj void setHidden(bool b); + void setArtificial(bool b); + //----------------------------------------------------------------------------------- // --- actions ---- //----------------------------------------------------------------------------------- diff --git a/src/diagram.cpp b/src/diagram.cpp index dc6b05d..53c062b 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/diagram.h b/src/diagram.h index d0c9d12..ba1b410 100644 --- a/src/diagram.h +++ b/src/diagram.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 7768c32..415a2fa 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -142,11 +142,14 @@ void DirDef::writeDocumentation(OutputList &ol) QCString shortTitle=theTranslator->trDirReference(m_shortName); QCString title=theTranslator->trDirReference(m_dispName); - startFile(ol,getOutputFileBase(),name(),title); + startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE); // write navigation path writeNavigationPath(ol); + ol.endQuickIndices(); + ol.startContents(); + startTitle(ol,getOutputFileBase()); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); diff --git a/src/dirdef.h b/src/dirdef.h index 234a708..c88ffa9 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/docparser.cpp b/src/docparser.cpp index 3418c22..529d0e7 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -3621,7 +3621,9 @@ endlist: DBG(("DocHtmlList::parseXml() end retval=%x\n",retval)); DocNode *n=g_nodeStack.pop(); ASSERT(n==this); - return retval==RetVal_EndList ? RetVal_OK : retval; + return retval==RetVal_EndList || + (retval==RetVal_CloseXml || g_token->name=="list") ? + RetVal_OK : retval; } //--------------------------------------------------------------------------- @@ -5972,6 +5974,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, //g_token = new TokenInfo; // store parser state so we can re-enter this function if needed + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); docParserPushContext(); if (ctx && @@ -5999,9 +6002,10 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, if (indexWords && md && Config_getBool("SEARCHENGINE")) { + g_searchUrl=md->getOutputFileBase(); Doxygen::searchIndex->setCurrentDoc( - theTranslator->trMember(TRUE,TRUE)+" "+md->qualifiedName(), + (fortranOpt?theTranslator->trSubprogram(TRUE,TRUE):theTranslator->trMember(TRUE,TRUE))+" "+md->qualifiedName(), g_searchUrl, md->anchor()); } @@ -6040,7 +6044,11 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, { name = theTranslator->trPackage(name); } - else + else if(fortranOpt) + { + name.prepend(theTranslator->trModule(TRUE,TRUE)+" "); + } + else { name.prepend(theTranslator->trNamespace(TRUE,TRUE)+" "); } diff --git a/src/docparser.h b/src/docparser.h index e39127c..93a6a76 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/docsets.cpp b/src/docsets.cpp new file mode 100644 index 0000000..52a3c33 --- /dev/null +++ b/src/docsets.cpp @@ -0,0 +1,385 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#include "docsets.h" +#include "config.h" +#include "message.h" +#include "doxygen.h" +#include <qfile.h> + + +DocSets::DocSets() : m_nodes(17), m_scopes(17) +{ + m_nf = 0; + m_tf = 0; + m_dc = 0; + m_id = 0; + m_nodes.setAutoDelete(TRUE); +} + +DocSets::~DocSets() +{ + delete m_nf; + delete m_tf; +} + +void DocSets::initialize() +{ + // -- get config options + QCString projectName = Config_getString("PROJECT_NAME"); + if (projectName.isEmpty()) projectName="root"; + QCString bundleId = Config_getString("DOCSET_BUNDLE_ID"); + if (bundleId.isEmpty()) bundleId="org.doxygen.Project"; + QCString feedName = Config_getString("DOCSET_FEEDNAME"); + if (feedName.isEmpty()) feedName="FeedName"; + + // -- write Makefile + { + QCString mfName = Config_getString("HTML_OUTPUT") + "/Makefile"; + QFile makefile(mfName); + if (!makefile.open(IO_WriteOnly)) + { + err("Could not open file %s for writing\n",mfName.data()); + exit(1); + } + QTextStream ts(&makefile); + ts.setEncoding(QTextStream::UnicodeUTF8); + + ts << "DOCSET_NAME=" << bundleId << ".docset\n" + "DOCSET_CONTENTS=$(DOCSET_NAME)/Contents\n" + "DOCSET_RESOURCES=$(DOCSET_CONTENTS)/Resources\n" + "DOCSET_DOCUMENTS=$(DOCSET_RESOURCES)/Documents\n" + "DOCSET_INSTALL=~/Library/Developer/Shared/Documentation/DocSets\n" + "\n" + "all: always\n" + "\tmkdir -p $(DOCSET_DOCUMENTS)\n" + "\tcp Nodes.xml $(DOCSET_RESOURCES)\n" + "\tcp Tokens.xml $(DOCSET_RESOURCES)\n" + "\tcp Info.plist $(DOCSET_CONTENTS)\n" + "\ttar --exclude $(DOCSET_NAME) \\\n" + "\t --exclude Nodes.xml \\\n" + "\t --exclude Tokens.xml \\\n" + "\t --exclude Info.plist \\\n" + "\t --exclude Makefile -c -f - . \\\n" + "\t | (cd $(DOCSET_DOCUMENTS); tar xvf -)\n" + "\tdocsetutil index $(DOCSET_NAME)\n" + "\trm -f $(DOCSET_DOCUMENTS)/Nodes.xml\n" + "\trm -f $(DOCSET_DOCUMENTS)/Info.plist\n" + "\trm -f $(DOCSET_DOCUMENTS)/Makefile\n" + "\trm -f $(DOCSET_RESOURCES)/Nodes.xml\n" + "\trm -f $(DOCSET_RESOURCES)/Tokens.xml\n" + "\n" + "install:\n" + "\tmkdir -p $(DOCSET_INSTALL)\n" + "\tcp -a $(DOCSET_NAME) $(DOCSET_INSTALL)\n" + "\n" + "uninstall:\n" + "\trm -rf $(DOCSET_INSTALL)\n" + "\n" + "always:\n"; + } + + // -- write Info.plist + { + QCString plName = Config_getString("HTML_OUTPUT") + "/Info.plist"; + QFile plist(plName); + if (!plist.open(IO_WriteOnly)) + { + err("Could not open file %s for writing\n",plName.data()); + exit(1); + } + QTextStream ts(&plist); + ts.setEncoding(QTextStream::UnicodeUTF8); + + ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"\n" + "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" + "<plist version=\"1.0\">\n" + "<dict>\n" + " <key>CFBundleName</key>\n" + " <string>" << projectName << "</string>\n" + " <key>CFBundleIdentifier</key>\n" + " <string>" << bundleId << ".docset</string>\n" + " <key>DocSetFeedName</key>\n" + " <string>" << feedName << "</string>\n" + "</dict>\n" + "</plist>\n"; + } + + // -- start Nodes.xml + QCString notes = Config_getString("HTML_OUTPUT") + "/Nodes.xml"; + m_nf = new QFile(notes); + if (!m_nf->open(IO_WriteOnly)) + { + err("Could not open file %s for writing\n",notes.data()); + exit(1); + } + QCString indexName="index"; + if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"; + m_nts.setDevice(m_nf); + m_nts.setEncoding(QTextStream::UnicodeUTF8); + m_nts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl; + m_nts << "<DocSetNodes version=\"1.0\">" << endl; + m_nts << " <TOC>" << endl; + m_nts << " <Node>" << endl; + m_nts << " <Name>Root</Name>" << endl; + m_nts << " <Path>" << indexName << Doxygen::htmlFileExtension << "</Path>" << endl; + m_nts << " <Subnodes>" << endl; + m_dc = 1; + m_firstNode.resize(m_dc); + m_firstNode.at(0)=TRUE; + + QCString tokens = Config_getString("HTML_OUTPUT") + "/Tokens.xml"; + m_tf = new QFile(tokens); + if (!m_tf->open(IO_WriteOnly)) + { + err("Could not open file %s for writing\n",tokens.data()); + exit(1); + } + m_tts.setDevice(m_tf); + m_tts.setEncoding(QTextStream::UnicodeUTF8); + m_tts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl; + m_tts << "<Tokens version=\"1.0\">" << endl; +} + +void DocSets::finalize() +{ + m_nts << indent() << " </Node>" << endl; + m_dc--; + m_nts << " </Subnodes>" << endl; + m_nts << " </Node>" << endl; + m_nts << " </TOC>" << endl; + m_nts << "</DocSetNodes>" << endl; + m_nf->close(); + delete m_nf; + m_nf=0; + + m_tts << "</Tokens>" << endl; + m_tf->close(); + delete m_tf; + m_tf=0; +} + +QCString DocSets::indent() +{ + QCString result; + result.fill(' ',(m_dc+2)*2); + return result; +} + +void DocSets::incContentsDepth() +{ + ++m_dc; + m_nts << indent() << "<Subnodes>" << endl; + m_firstNode.resize(m_dc); + if (m_dc>0) + { + m_firstNode.at(m_dc-1)=TRUE; + } +} + +void DocSets::decContentsDepth() +{ + if (!m_firstNode.at(m_dc-1)) + { + m_nts << indent() << " </Node>" << endl; + } + m_nts << indent() << "</Subnodes>" << endl; + --m_dc; +} + +void DocSets::addContentsItem(bool isDir, + const char *name, + const char *ref, + const char *file, + const char *anchor) +{ + (void)isDir; + if (file && ref==0) + { + if (!m_firstNode.at(m_dc-1)) + { + m_nts << indent() << " </Node>" << endl; + } + m_firstNode.at(m_dc-1)=FALSE; + m_nts << indent() << " <Node>" << endl; + m_nts << indent() << " <Name>" << convertToXML(name) << "</Name>" << endl; + m_nts << indent() << " <Path>" << file << Doxygen::htmlFileExtension; + if (anchor) + { + m_nts << "#" << anchor; + } + m_nts << "</Path>" << endl; + } +} + +void DocSets::addIndexItem(const char *, const char *, + const char *, const char *, + const char *,const MemberDef *md) +{ + if (!md->isLinkable()) return; // internal symbol + + ClassDef *cd = md->getClassDef(); + NamespaceDef *nd = md->getNamespaceDef(); + FileDef *fd = md->getFileDef(); + + // determine language + QCString lang; + SrcLangExt langExt = SrcLangExt_Cpp; + if (fd) langExt = getLanguageFromFileName(fd->name()); + switch (langExt) + { + case SrcLangExt_Cpp: + { + if (md->isObjCMethod()) + lang="occ"; // Objective C/C++ + else if (fd && fd->name().right(2).lower()==".c") + lang="c"; // Plain C + else + lang="cpp"; // C++ + } + break; + case SrcLangExt_ObjC: lang="occ"; break; // Objective C++ + case SrcLangExt_IDL: lang="idl"; break; // IDL + case SrcLangExt_CSharp: lang="csharp"; break; // C# + case SrcLangExt_PHP: lang="php"; break; // PHP4/5 + case SrcLangExt_D: lang="d"; break; // D + case SrcLangExt_Java: lang="java"; break; // Java + case SrcLangExt_JS: lang="javascript"; break; // Javascript + case SrcLangExt_Python: lang="python"; break; // Python + case SrcLangExt_F90: lang="fortran"; break; // Fortran + case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL + } + + // determine scope + QCString scope; + QCString type; + QCString decl; + Definition *d = 0; + if (fd && fd->isLinkable() && m_scopes.find(fd->getOutputFileBase())==0) + { + writeToken(m_tts,fd,"file",lang,0,0,0); + m_scopes.append(fd->getOutputFileBase(),(void*)0x8); + } + if (cd) + { + scope = cd->qualifiedName(); + if (cd->isTemplate()) + type="tmplt"; + else if (cd->compoundType()==ClassDef::Interface) + type="intf"; + else if (cd->compoundType()==ClassDef::Category) + type="cat"; + else + type = "cl"; + d = cd; + IncludeInfo *ii = cd->includeInfo(); + if (ii) + { + decl=ii->includeName; + if (decl.isEmpty()) + { + decl=ii->local; + } + } + } + else if (nd) + { + scope = nd->name(); + type = "ns"; + d = cd; + } + if (d && d->isLinkable() && m_scopes.find(d->getOutputFileBase())==0) + { + writeToken(m_tts,d,type,lang,0,0,decl); + m_scopes.append(d->getOutputFileBase(),(void*)0x8); + } + + switch (md->memberType()) + { + case MemberDef::Define: + type="macro"; break; + case MemberDef::Function: + if (cd && cd->compoundType()==ClassDef::Interface) + type="intfm"; + else if (cd && cd->compoundType()==ClassDef::Class) + type="clm"; + else + type="func"; + break; + case MemberDef::Variable: + type="data"; break; + case MemberDef::Typedef: + type="tdef"; break; + case MemberDef::Enumeration: + type="enum"; break; + case MemberDef::EnumValue: + type="econst"; break; + case MemberDef::Prototype: + type="prototype"; break; + case MemberDef::Signal: + type="signal"; break; + case MemberDef::Slot: + type="slot"; break; + case MemberDef::Friend: + type="ffunc"; break; + case MemberDef::DCOP: + type="dcop"; break; + case MemberDef::Property: + type="property"; break; + case MemberDef::Event: + type="event"; break; + } + writeToken(m_tts,md,type,lang,scope,md->anchor()); +} + +void DocSets::writeToken(QTextStream &t, + const Definition *d, + const QCString &type, + const QCString &lang, + const char *scope, + const char *anchor, + const char *decl) +{ + t << " <Token>" << endl; + t << " <TokenIdentifier>" << endl; + t << " <Name>" << convertToXML(d->name()) << "</Name>" << endl; + t << " <APILanguage>" << lang << "</APILanguage>" << endl; + t << " <Type>" << type << "</Type>" << endl; + t << " <Scope>" << convertToXML(scope) << "</Scope>" << endl; + t << " </TokenIdentifier>" << endl; + t << " <Path>" << d->getOutputFileBase() + << Doxygen::htmlFileExtension << "</Path>" << endl; + if (anchor) + { + t << " <Anchor>" << anchor << "</Anchor>" << endl; + } + QCString tooltip = d->briefDescriptionAsTooltip(); + if (!tooltip.isEmpty()) + { + t << " <Abstract>" << tooltip << "</Abstract>" << endl; + } + if (decl) + { + t << " <DeclaredIn>" << convertToXML(decl) << "</DeclaredIn>" << endl; + } + t << " </Token>" << endl; +} + +void DocSets::addIndexFile(const char *name) +{ + (void)name; +} + diff --git a/src/docsets.h b/src/docsets.h new file mode 100644 index 0000000..5ef6eb2 --- /dev/null +++ b/src/docsets.h @@ -0,0 +1,84 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef DOCSETS_H +#define DOCSETS_H + +#include "qtbc.h" +#include <qtextstream.h> +#include <qstrlist.h> +#include "sortdict.h" + +#include "index.h" + +class QFile; +class Definition; + +/*! A class that generates docset files. + * These files can be used to create context help + * for use within Apple's Xcode 3.0 development environment + */ +class DocSets : public IndexIntf +{ + + public: + DocSets(); + ~DocSets(); + void initialize(); + void finalize(); + void incContentsDepth(); + void decContentsDepth(); + void addContentsItem(bool isDir, + const char *name, + const char *ref = 0, + const char *file = 0, + const char *anchor = 0 + ); + void addIndexItem(const char *level1, const char *level2, + const char *contRef, const char *memRef, + const char *anchor,const MemberDef *md); + void addIndexFile(const char *name); + + private: + void writeToken(QTextStream &t, const Definition *d, + const QCString &type, const QCString &lang, + const char *scope=0, const char *anchor=0, + const char *decl=0); + struct NodeDef + { + NodeDef(bool d,const QCString &n,const QCString &r, + const QCString &f,const QCString &a,int i) : + isDir(d), name(n), ref(r), file(f), anchor(a),id(i) {} + bool isDir; + QCString name; + QCString ref; + QCString file; + QCString anchor; + int id; + }; + QCString indent(); + QFile *m_nf; + QFile *m_tf; + QTextStream m_nts; + QTextStream m_tts; + int m_dc; + int m_id; + QArray<bool> m_firstNode; + SDict<NodeDef> m_nodes; + SDict<void> m_scopes; +}; + +#endif /* DOCSETS_H */ + diff --git a/src/doctokenizer.h b/src/doctokenizer.h index 13995b6..77f5167 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 233205d..5969cd2 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/docvisitor.h b/src/docvisitor.h index d48e444..9cbec1a 100644 --- a/src/docvisitor.h +++ b/src/docvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/dot.cpp b/src/dot.cpp index 87ed3e1..83c9eec 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -1,9 +1,9 @@ /***************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -1537,7 +1537,9 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,bool base,int distance) QDictIterator<void> dvi(*ucd->accessors); const char *s; bool first=TRUE; - for (;(s=dvi.currentKey());++dvi) + int count=0; + int maxLabels=10; + for (;(s=dvi.currentKey()) && count<maxLabels;++dvi,++count) { if (first) { @@ -1549,6 +1551,8 @@ void DotClassGraph::buildGraph(ClassDef *cd,DotNode *n,bool base,int distance) label+=QCString("\n")+s; } } + if (count==maxLabels) label+="\n..."; + //printf("addClass: %s templSpec=%s\n",ucd->classDef->name().data(),ucd->templSpecifiers.data()); addClass(ucd->classDef,n,EdgeInfo::Purple,label,0, ucd->templSpecifiers,base,distance); } @@ -3233,11 +3237,14 @@ void DotGroupCollaboration::Edge::write( QTextStream &t ) const QListIterator<Link> lli(links); Link *link; bool first=TRUE; - for( lli.toFirst(); (link=lli.current()); ++lli) + int count=0; + const int maxLabels = 10; + for( lli.toFirst(); (link=lli.current()) && count<maxLabels; ++lli,++count) { if (first) first=FALSE; else t << "\\n"; t << convertLabel(link->label); } + if (count==maxLabels) t << "\\n..."; t << "\""; } @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 4088467..2b04453 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -74,6 +74,7 @@ #include "store.h" #include "marshal.h" #include "portable.h" +#include "vhdlscanner.h" #define RECURSE_ENTRYTREE(func,var) \ do { if (var->children()) { \ @@ -240,6 +241,7 @@ struct STLInfo static STLInfo g_stlinfo[] = { // className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators +#if 0 { "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, { "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, @@ -282,7 +284,9 @@ static STLInfo g_stlinfo[] = { "multimap", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE }, { "set", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, { "multiset", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, +#endif { "vector", 0, 0, "T", "elements", 0, 0, FALSE, TRUE }, +#if 0 { "queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "priority_queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "stack", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, @@ -302,6 +306,7 @@ static STLInfo g_stlinfo[] = { "range_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE }, { "overflow_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE }, { "underflow_error", "runtime_error", 0, 0, 0, 0, 0, FALSE, FALSE }, +#endif { 0, 0, 0, 0, 0, 0, 0, FALSE, FALSE } }; @@ -313,7 +318,8 @@ static void addSTLMember(EntryNav *rootNav,const char *type,const char *name) memEntry->protection = Private; memEntry->section = Entry::VARIABLE_SEC; memEntry->brief = "STL member"; - memEntry->hidden = TRUE; + memEntry->hidden = FALSE; + memEntry->artificial = TRUE; //memEntry->parent = root; //root->addSubEntry(memEntry); EntryNav *memEntryNav = new EntryNav(rootNav,memEntry); @@ -329,7 +335,8 @@ static void addSTLIterator(EntryNav *classEntryNav,const char *name) iteratorClassEntry->name = name; iteratorClassEntry->section = Entry::CLASS_SEC; iteratorClassEntry->brief = "STL iterator class"; - iteratorClassEntry->hidden = TRUE; + iteratorClassEntry->hidden = FALSE; + iteratorClassEntry->artificial= TRUE; EntryNav *iteratorClassEntryNav = new EntryNav(classEntryNav,iteratorClassEntry); iteratorClassEntryNav->setEntry(iteratorClassEntry); classEntryNav->addChild(iteratorClassEntryNav); @@ -345,7 +352,8 @@ static void addSTLClasses(EntryNav *rootNav) namespaceEntry->name = "std"; namespaceEntry->section = Entry::NAMESPACE_SEC; namespaceEntry->brief = "STL namespace"; - namespaceEntry->hidden = TRUE; + namespaceEntry->hidden = FALSE; + namespaceEntry->artificial= TRUE; //root->addSubEntry(namespaceEntry); EntryNav *namespaceEntryNav = new EntryNav(rootNav,namespaceEntry); namespaceEntryNav->setEntry(namespaceEntry); @@ -366,7 +374,8 @@ static void addSTLClasses(EntryNav *rootNav) //classEntry->parent = namespaceEntry; classEntry->section = Entry::CLASS_SEC; classEntry->brief = "STL class"; - classEntry->hidden = TRUE; + classEntry->hidden = FALSE; + classEntry->artificial= TRUE; //namespaceEntry->addSubEntry(classEntry); EntryNav *classEntryNav = new EntryNav(namespaceEntryNav,classEntry); classEntryNav->setEntry(classEntry); @@ -855,6 +864,7 @@ static Definition *buildScopeFromQualifiedName(const QCString name,int level) { int idx=getScopeFragment(name,p,&l); QCString nsName = name.mid(idx,l); + if (nsName.isEmpty()) return prevScope; if (!fullScope.isEmpty()) fullScope+="::"; fullScope+=nsName; NamespaceDef *nd=Doxygen::namespaceSDict->find(fullScope); @@ -1159,8 +1169,8 @@ static void addClassToContext(EntryNav *rootNav) QCString namespaceName; extractNamespaceName(fullName,className,namespaceName); - //printf("New class: namespace `%s' name=`%s' brief=`%s' docs=`%s'\n", - // className.data(),namespaceName.data(),root->brief.data(),root->doc.data()); + //printf("New class: fullname %s namespace `%s' name=`%s' brief=`%s' docs=`%s'\n", + // fullName.data(),namespaceName.data(),className.data(),root->brief.data(),root->doc.data()); QCString tagName; QCString refFileName; @@ -1177,6 +1187,7 @@ static void addClassToContext(EntryNav *rootNav) cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); cd->setIsObjectiveC(root->objc); cd->setHidden(root->hidden); + cd->setArtificial(root->artificial); cd->setTypeConstraints(root->typeConstr); //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data()); @@ -1407,6 +1418,7 @@ static void buildNamespaceList(EntryNav *rootNav) nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); nd->addSectionsToDefinition(root->anchors); nd->setHidden(root->hidden); + nd->setArtificial(root->artificial); //printf("Adding namespace to group\n"); addNamespaceToGroups(root,nd); @@ -1572,7 +1584,9 @@ static void findUsingDirectives(EntryNav *rootNav) nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); nd->addSectionsToDefinition(root->anchors); + //printf("** Adding namespace %s hidden=%d\n",name.data(),root->hidden); nd->setHidden(root->hidden); + nd->setArtificial(TRUE); QListIterator<Grouping> gli(*root->groups); Grouping *g; @@ -1685,7 +1699,7 @@ static void findUsingDeclarations(EntryNav *rootNav) "<using>",1, name,ClassDef::Class); Doxygen::hiddenClasses->append(root->name,usingCd); - usingCd->setClassIsArtificial(); + usingCd->setArtificial(TRUE); } else { @@ -1930,6 +1944,7 @@ static MemberDef *addVariableToClass( // member already in the scope { addMemberDocs(rootNav,md,def,0,FALSE); + //printf(" Member already found!\n"); return md; } } @@ -1963,6 +1978,7 @@ static MemberDef *addVariableToClass( md->enableCallGraph(root->callGraph); md->enableCallerGraph(root->callerGraph); md->setHidden(root->hidden); + md->setArtificial(root->artificial); addMemberToGroups(root,md); //if (root->mGrpId!=-1) //{ @@ -1987,6 +2003,7 @@ static MemberDef *addVariableToClass( Doxygen::memberNameSDict->append(name,mn); // add the member to the class } + //printf(" New member adding to %s (%p)!\n",cd->name().data(),cd); cd->insertMember(md); md->setRefItems(root->sli); @@ -2112,7 +2129,7 @@ static MemberDef *addVariableToFile( } } Debug::print(Debug::Variables,0, - " new variable!\n"); + " new variable, nd=%s!\n",nd?nd->name().data():"<global>"); // new global variable, enum value or typedef MemberDef *md=new MemberDef( root->fileName,root->startLine, @@ -2328,6 +2345,7 @@ done: static void buildVarList(EntryNav *rootNav) { + //printf("buildVarList(%s)\n",rootNav->name().data()); int isFuncPtr=-1; if (!rootNav->name().isEmpty() && (rootNav->type().isEmpty() || compoundKeywordDict.find(rootNav->type())==0) && @@ -2487,6 +2505,7 @@ static void buildVarList(EntryNav *rootNav) int si=scope.find('@'); //int anonyScopes = 0; bool added=FALSE; + if (si!=-1) // anonymous scope { QCString pScope; @@ -2521,11 +2540,9 @@ static void buildVarList(EntryNav *rootNav) } } } - //printf("name=`%s' scope=%s scope.right=%s indentDepth=%d anonyScopes=%d\n", + //printf("name=`%s' scope=%s scope.right=%s\n", // name.data(),scope.data(), - // scope.right(scope.length()-si).data(), - // indentDepth, - // anonyScopes); + // scope.right(scope.length()-si).data()); addVariableToClass(rootNav, // entry cd, // class to add member to mtype, // member type @@ -3556,11 +3573,11 @@ static ClassDef *findClassWithinClassContext(Definition *context,ClassDef *cd,co ClassDef *result=0; if (context && cd!=context) { - result = getResolvedClass(context,0,name,0,0,FALSE,TRUE); + result = getResolvedClass(context,0,name,0,0,TRUE,TRUE); } if (result==0) { - result = getResolvedClass(cd,fd,name,0,0,FALSE,TRUE); + result = getResolvedClass(cd,fd,name,0,0,TRUE,TRUE); } //printf("** Trying to find %s within context %s class %s result=%s lookup=%p\n", // name.data(), @@ -3617,6 +3634,11 @@ static void findUsedClassesForClass(EntryNav *rootNav, { //printf(" Found variable %s in class %s\n",md->name().data(),masterCd->name().data()); QCString type=removeRedundantWhiteSpace(md->typeString()); + QCString typedefValue = resolveTypeDef(masterCd,type); + if (!typedefValue.isEmpty()) + { + type = typedefValue; + } int pos=0; QCString usedClassName; QCString templSpec; @@ -3690,7 +3712,7 @@ static void findUsedClassesForClass(EntryNav *rootNav, } if (usedCd) { - if (isArtificial) usedCd->setClassIsArtificial(); + if (isArtificial) usedCd->setArtificial(TRUE); Debug::print(Debug::Classes,0," Adding used class `%s' (1)\n", usedCd->name().data()); instanceCd->addUsedClass(usedCd,md->name()); usedCd->addUsedByClass(instanceCd,md->name()); @@ -3737,7 +3759,7 @@ static void findUsedClassesForClass(EntryNav *rootNav, } if (usedCd) { - if (isArtificial) usedCd->setClassIsArtificial(); + if (isArtificial) usedCd->setArtificial(TRUE); Debug::print(Debug::Classes,0," Adding used class `%s' (3)\n", usedCd->name().data()); instanceCd->addUsedClass(usedCd,md->name()); usedCd->addUsedByClass(instanceCd,md->name()); @@ -3747,6 +3769,10 @@ static void findUsedClassesForClass(EntryNav *rootNav, } } } + else + { + //printf("no members for class %s (%p)\n",masterCd->name().data(),masterCd); + } } static void findBaseClassesForClass( @@ -3837,7 +3863,7 @@ static bool findTemplateInstanceRelation(Entry *root, bool freshInstance=FALSE; ClassDef *instanceClass = templateClass->insertTemplateInstance( root->fileName,root->startLine,templSpec,freshInstance); - if (isArtificial) instanceClass->setClassIsArtificial(); + if (isArtificial) instanceClass->setArtificial(TRUE); instanceClass->setIsObjectiveC(root->objc); if (freshInstance) @@ -4197,7 +4223,7 @@ static bool findClassRelation( baseClass=new ClassDef(root->fileName,root->startLine, baseClassName,ClassDef::Class); Doxygen::hiddenClasses->append(baseClassName,baseClass); - if (isArtificial) baseClass->setClassIsArtificial(); + if (isArtificial) baseClass->setArtificial(TRUE); } } else @@ -4210,7 +4236,7 @@ static bool findClassRelation( baseClass=new ClassDef(root->fileName,root->startLine, baseClassName,ClassDef::Class); Doxygen::classSDict->append(baseClassName,baseClass); - if (isArtificial) baseClass->setClassIsArtificial(); + if (isArtificial) baseClass->setArtificial(TRUE); } } // add base class to this class @@ -7792,7 +7818,9 @@ static void generatePageDocs() if (!pd->getGroupDef() && !pd->isReference()) { msg("Generating docs for page %s...\n",pd->name().data()); + Doxygen::insideMainPage=TRUE; pd->writeDocumentation(*outputList); + Doxygen::insideMainPage=FALSE; } } } @@ -8131,7 +8159,7 @@ static void generateConfigFile(const char *configFile,bool shortList, if (fileOpened) { QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); Config::instance()->writeTemplate(t,shortList,updateOnly); if (!writeToStdout) { @@ -8802,7 +8830,7 @@ static void dumpSymbolMap() static void usage(const char *name) { - msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2007\n\n",versionString); + msg("Doxygen version %s\nCopyright Dimitri van Heesch 1997-2008\n\n",versionString); msg("You can use doxygen in a number of ways:\n\n"); msg("1) Use doxygen to generate a template configuration file:\n"); msg(" %s [-s] -g [configName]\n\n",name); @@ -8858,7 +8886,7 @@ void initDoxygen() Doxygen::parserManager = new ParserManager(defaultParser); Doxygen::parserManager->registerParser(".py",new PythonLanguageScanner); Doxygen::parserManager->registerParser(".f90", new FortranLanguageScanner); - Doxygen::parserManager->registerParser(".F90", new FortranLanguageScanner); + Doxygen::parserManager->registerParser(".vhd", new VHDLLanguageScanner); // register any additional parsers here... @@ -9747,7 +9775,14 @@ void parseInput() msg("Computing class relations...\n"); computeTemplateClassRelations(); flushUnresolvedRelations(); - computeClassRelations(); + //if (Config_getBool("OPTIMIZE_OUTPUT_VHDL")) + //{ + // VhdlDocGen::computeVhdlComponentRelations(classEntries,g_storage); + //} + //else + //{ + computeClassRelations(); + //} classEntries.clear(); addEnumValuesToEnums(rootNav); @@ -9882,9 +9917,8 @@ void generateOutput() outputList->add(new HtmlGenerator); HtmlGenerator::init(); if (Config_getBool("GENERATE_HTMLHELP")) Doxygen::indexList.addIndex(new HtmlHelp); - //HtmlHelp::getInstance()->initialize(); if (Config_getBool("GENERATE_TREEVIEW")) Doxygen::indexList.addIndex(new FTVHelp); - //FTVHelp::getInstance()->initialize(); + if (Config_getBool("GENERATE_DOCSET")) Doxygen::indexList.addIndex(new DocSets); Doxygen::indexList.initialize(); if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages(); copyStyleSheet(); @@ -9933,7 +9967,7 @@ void generateOutput() exit(1); } Doxygen::tagFile.setDevice(tag); - Doxygen::tagFile.setEncoding(QTextStream::Latin1); + Doxygen::tagFile.setEncoding(QTextStream::UnicodeUTF8); Doxygen::tagFile << "<?xml version='1.0' encoding='ISO-8859-1' standalone='yes' ?>" << endl; Doxygen::tagFile << "<tagfile>" << endl; } @@ -9966,6 +10000,9 @@ void generateOutput() msg("Generating index page...\n"); writeIndex(*outputList); + msg("Generating page index...\n"); + writePageIndex(*outputList); + msg("Generating example documentation...\n"); generateExampleDocs(); @@ -10030,9 +10067,6 @@ void generateOutput() msg("Generating file member index...\n"); writeFileMemberIndex(*outputList); - msg("Generating page index...\n"); - writePageIndex(*outputList); - //writeDirDependencyGraph(Config_getString("HTML_OUTPUT")); if (Config_getBool("GENERATE_RTF")) diff --git a/src/doxygen.css b/src/doxygen.css index e261cf6..74c22a2 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -2,19 +2,21 @@ BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Geneva, Arial, Helvetica, sans-serif; } BODY,TD { - font-size: 90%; + font-size: 90%; } H1 { text-align: center; - font-size: 160%; + font-size: 160%; } H2 { - font-size: 120%; + font-size: 120%; } H3 { - font-size: 100%; + font-size: 100%; +} +CAPTION { + font-weight: bold } -CAPTION { font-weight: bold } DIV.qindex { width: 100%; background-color: #e8eef2; @@ -24,7 +26,7 @@ DIV.qindex { padding: 2px; line-height: 140%; } -DIV.nav { +DIV.navpath { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; @@ -70,15 +72,43 @@ A.qindexHL:hover { background-color: #6666cc; color: #ffffff; } -A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } -A.el { text-decoration: none; font-weight: bold } -A.elRef { font-weight: bold } -A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} -A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} -A.codeRef:link { font-weight: normal; color: #0000FF} -A.codeRef:visited { font-weight: normal; color: #0000FF} -A:hover { text-decoration: none; background-color: #f2f2ff } -DL.el { margin-left: -1cm } +A.qindexHL:visited { + text-decoration: none; + background-color: #6666cc; + color: #ffffff +} +A.el { + text-decoration: none; + font-weight: bold +} +A.elRef { + font-weight: bold +} +A.code:link { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.code:visited { + text-decoration: none; + font-weight: normal; + color: #0000FF +} +A.codeRef:link { + font-weight: normal; + color: #0000FF +} +A.codeRef:visited { + font-weight: normal; + color: #0000FF +} +A:hover { + text-decoration: none; + background-color: #f2f2ff +} +DL.el { + margin-left: -1cm +} .fragment { font-family: monospace, fixed; font-size: 95%; @@ -95,7 +125,13 @@ PRE.fragment { padding-top: 4px; padding-bottom: 4px; } -DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +DIV.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px +} DIV.groupHeader { margin-left: 16px; @@ -103,7 +139,11 @@ DIV.groupHeader { margin-bottom: 6px; font-weight: bold; } -DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } +DIV.groupText { + margin-left: 16px; + font-style: italic; + font-size: 90% +} BODY { background: white; color: black; @@ -137,11 +177,16 @@ TD.indexvalue { border: 1px solid #CCCCCC; } TR.memlist { - background-color: #f0f0f0; + background-color: #f0f0f0; +} +P.formulaDsp { + text-align: center; +} +IMG.formulaDsp { +} +IMG.formulaInl { + vertical-align: middle; } -P.formulaDsp { text-align: center; } -IMG.formulaDsp { } -IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } @@ -149,8 +194,13 @@ SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } +SPAN.vhdldigit { color: #ff00ff } +SPAN.vhdlchar { color: #000000 } +SPAN.vhdlkeyword { color: #700070 } +SPAN.vhdllogic { color: #ff0000 } + .mdescLeft { - padding: 0px 8px 4px 8px; + padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; @@ -161,7 +211,7 @@ SPAN.charliteral { color: #008080 } margin: 0px; } .mdescRight { - padding: 0px 8px 4px 8px; + padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; @@ -258,23 +308,26 @@ SPAN.charliteral { color: #008080 } border-right-style: none; border-bottom-style: none; border-left-style: none; - color: #606060; + color: #606060; background-color: #FAFAFA; font-size: 80%; } -.search { color: #003399; - font-weight: bold; +.search { + color: #003399; + font-weight: bold; } FORM.search { - margin-bottom: 0px; - margin-top: 0px; + margin-bottom: 0px; + margin-top: 0px; } -INPUT.search { font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; +INPUT.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; } -TD.tiny { font-size: 75%; +TD.tiny { + font-size: 75%; } a { color: #1A41A8; @@ -282,67 +335,70 @@ a { a:visited { color: #2A3798; } -.dirtab { padding: 4px; - border-collapse: collapse; - border: 1px solid #84b0c7; +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #84b0c7; } -TH.dirtab { background: #e8eef2; - font-weight: bold; +TH.dirtab { + background: #e8eef2; + font-weight: bold; } -HR { height: 1px; - border: none; - border-top: 1px solid black; +HR { + height: 1px; + border: none; + border-top: 1px solid black; } /* Style for detailed member documentation */ .memtemplate { - font-size: 80%; - color: #606060; - font-weight: normal; - margin-left: 3px; + font-size: 80%; + color: #606060; + font-weight: normal; + margin-left: 3px; } .memnav { - background-color: #e8eef2; - border: 1px solid #84b0c7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; + background-color: #e8eef2; + border: 1px solid #84b0c7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; } .memitem { - padding: 4px; - background-color: #eef3f5; - border-width: 1px; - border-style: solid; - border-color: #dedeee; - -moz-border-radius: 8px 8px 8px 8px; + padding: 4px; + background-color: #eef3f5; + border-width: 1px; + border-style: solid; + border-color: #dedeee; + -moz-border-radius: 8px 8px 8px 8px; } .memname { - white-space: nowrap; - font-weight: bold; + white-space: nowrap; + font-weight: bold; } .memdoc{ - padding-left: 10px; + padding-left: 10px; } .memproto { - background-color: #d5e1e8; - width: 100%; - border-width: 1px; - border-style: solid; - border-color: #84b0c7; - font-weight: bold; - -moz-border-radius: 8px 8px 8px 8px; + background-color: #d5e1e8; + width: 100%; + border-width: 1px; + border-style: solid; + border-color: #84b0c7; + font-weight: bold; + -moz-border-radius: 8px 8px 8px 8px; } .paramkey { - text-align: right; + text-align: right; } .paramtype { - white-space: nowrap; + white-space: nowrap; } .paramname { - color: #602020; - font-style: italic; - white-space: nowrap; + color: #602020; + font-style: italic; + white-space: nowrap; } /* End Styling for detailed member documentation */ @@ -351,9 +407,27 @@ HR { height: 1px; font-family: sans-serif; margin:0.5em; } -.directory { font-size: 9pt; font-weight: bold; } -.directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } -.directory > h3 { margin-top: 0; } -.directory p { margin: 0px; white-space: nowrap; } -.directory div { display: none; margin: 0px; } -.directory img { vertical-align: -30%; } +.directory { + font-size: 9pt; + font-weight: bold; +} +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; +} +.directory > h3 { + margin-top: 0; +} +.directory p { + margin: 0px; + white-space: nowrap; +} +.directory div { + display: none; + margin: 0px; +} +.directory img { + vertical-align: -30%; +} + diff --git a/src/doxygen.h b/src/doxygen.h index e0d99c1..4a8430e 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -37,6 +37,7 @@ #include "reflist.h" #include "dirdef.h" #include "index.h" +#include "docsets.h" class PageSList; class PageSDict; diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in index 3519e09..6512e0d 100644 --- a/src/doxygen.pro.in +++ b/src/doxygen.pro.in @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby diff --git a/src/doxygen_css.h b/src/doxygen_css.h index ed651af..bf88dbe 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -2,19 +2,21 @@ " font-family: Geneva, Arial, Helvetica, sans-serif;\n" "}\n" "BODY,TD {\n" -" font-size: 90%;\n" +" font-size: 90%;\n" "}\n" "H1 {\n" " text-align: center;\n" -" font-size: 160%;\n" +" font-size: 160%;\n" "}\n" "H2 {\n" -" font-size: 120%;\n" +" font-size: 120%;\n" "}\n" "H3 {\n" -" font-size: 100%;\n" +" font-size: 100%;\n" +"}\n" +"CAPTION { \n" +" font-weight: bold \n" "}\n" -"CAPTION { font-weight: bold }\n" "DIV.qindex {\n" " width: 100%;\n" " background-color: #e8eef2;\n" @@ -24,7 +26,7 @@ " padding: 2px;\n" " line-height: 140%;\n" "}\n" -"DIV.nav {\n" +"DIV.navpath {\n" " width: 100%;\n" " background-color: #e8eef2;\n" " border: 1px solid #84b0c7;\n" @@ -70,15 +72,43 @@ " background-color: #6666cc;\n" " color: #ffffff;\n" "}\n" -"A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }\n" -"A.el { text-decoration: none; font-weight: bold }\n" -"A.elRef { font-weight: bold }\n" -"A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}\n" -"A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}\n" -"A.codeRef:link { font-weight: normal; color: #0000FF}\n" -"A.codeRef:visited { font-weight: normal; color: #0000FF}\n" -"A:hover { text-decoration: none; background-color: #f2f2ff }\n" -"DL.el { margin-left: -1cm }\n" +"A.qindexHL:visited { \n" +" text-decoration: none; \n" +" background-color: #6666cc; \n" +" color: #ffffff \n" +"}\n" +"A.el { \n" +" text-decoration: none; \n" +" font-weight: bold \n" +"}\n" +"A.elRef { \n" +" font-weight: bold \n" +"}\n" +"A.code:link { \n" +" text-decoration: none; \n" +" font-weight: normal; \n" +" color: #0000FF\n" +"}\n" +"A.code:visited { \n" +" text-decoration: none; \n" +" font-weight: normal; \n" +" color: #0000FF\n" +"}\n" +"A.codeRef:link { \n" +" font-weight: normal; \n" +" color: #0000FF\n" +"}\n" +"A.codeRef:visited { \n" +" font-weight: normal; \n" +" color: #0000FF\n" +"}\n" +"A:hover { \n" +" text-decoration: none; \n" +" background-color: #f2f2ff \n" +"}\n" +"DL.el { \n" +" margin-left: -1cm \n" +"}\n" ".fragment {\n" " font-family: monospace, fixed;\n" " font-size: 95%;\n" @@ -95,7 +125,13 @@ " padding-top: 4px;\n" " padding-bottom: 4px;\n" "}\n" -"DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n" +"DIV.ah { \n" +" background-color: black; \n" +" font-weight: bold; \n" +" color: #ffffff; \n" +" margin-bottom: 3px; \n" +" margin-top: 3px \n" +"}\n" "\n" "DIV.groupHeader {\n" " margin-left: 16px;\n" @@ -103,7 +139,11 @@ " margin-bottom: 6px;\n" " font-weight: bold;\n" "}\n" -"DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }\n" +"DIV.groupText { \n" +" margin-left: 16px; \n" +" font-style: italic; \n" +" font-size: 90% \n" +"}\n" "BODY {\n" " background: white;\n" " color: black;\n" @@ -137,11 +177,16 @@ " border: 1px solid #CCCCCC;\n" "}\n" "TR.memlist {\n" -" background-color: #f0f0f0; \n" +" background-color: #f0f0f0; \n" +"}\n" +"P.formulaDsp { \n" +" text-align: center; \n" +"}\n" +"IMG.formulaDsp {\n" +"}\n" +"IMG.formulaInl { \n" +" vertical-align: middle; \n" "}\n" -"P.formulaDsp { text-align: center; }\n" -"IMG.formulaDsp { }\n" -"IMG.formulaInl { vertical-align: middle; }\n" "SPAN.keyword { color: #008000 }\n" "SPAN.keywordtype { color: #604020 }\n" "SPAN.keywordflow { color: #e08000 }\n" @@ -149,8 +194,13 @@ "SPAN.preprocessor { color: #806020 }\n" "SPAN.stringliteral { color: #002080 }\n" "SPAN.charliteral { color: #008080 }\n" +"SPAN.vhdldigit { color: #ff00ff }\n" +"SPAN.vhdlchar { color: #000000 }\n" +"SPAN.vhdlkeyword { color: #700070 }\n" +"SPAN.vhdllogic { color: #ff0000 }\n" +"\n" ".mdescLeft {\n" -" padding: 0px 8px 4px 8px;\n" +" padding: 0px 8px 4px 8px;\n" " font-size: 80%;\n" " font-style: italic;\n" " background-color: #FAFAFA;\n" @@ -161,7 +211,7 @@ " margin: 0px;\n" "}\n" ".mdescRight {\n" -" padding: 0px 8px 4px 8px;\n" +" padding: 0px 8px 4px 8px;\n" " font-size: 80%;\n" " font-style: italic;\n" " background-color: #FAFAFA;\n" @@ -258,23 +308,26 @@ " border-right-style: none;\n" " border-bottom-style: none;\n" " border-left-style: none;\n" -" color: #606060;\n" +" color: #606060;\n" " background-color: #FAFAFA;\n" " font-size: 80%;\n" "}\n" -".search { color: #003399;\n" -" font-weight: bold;\n" +".search { \n" +" color: #003399;\n" +" font-weight: bold;\n" "}\n" "FORM.search {\n" -" margin-bottom: 0px;\n" -" margin-top: 0px;\n" +" margin-bottom: 0px;\n" +" margin-top: 0px;\n" "}\n" -"INPUT.search { font-size: 75%;\n" -" color: #000080;\n" -" font-weight: normal;\n" -" background-color: #e8eef2;\n" +"INPUT.search { \n" +" font-size: 75%;\n" +" color: #000080;\n" +" font-weight: normal;\n" +" background-color: #e8eef2;\n" "}\n" -"TD.tiny { font-size: 75%;\n" +"TD.tiny { \n" +" font-size: 75%;\n" "}\n" "a {\n" " color: #1A41A8;\n" @@ -282,67 +335,70 @@ "a:visited {\n" " color: #2A3798;\n" "}\n" -".dirtab { padding: 4px;\n" -" border-collapse: collapse;\n" -" border: 1px solid #84b0c7;\n" +".dirtab { \n" +" padding: 4px;\n" +" border-collapse: collapse;\n" +" border: 1px solid #84b0c7;\n" "}\n" -"TH.dirtab { background: #e8eef2;\n" -" font-weight: bold;\n" +"TH.dirtab { \n" +" background: #e8eef2;\n" +" font-weight: bold;\n" "}\n" -"HR { height: 1px;\n" -" border: none;\n" -" border-top: 1px solid black;\n" +"HR { \n" +" height: 1px;\n" +" border: none;\n" +" border-top: 1px solid black;\n" "}\n" "\n" "/* Style for detailed member documentation */\n" ".memtemplate {\n" -" font-size: 80%;\n" -" color: #606060;\n" -" font-weight: normal;\n" -" margin-left: 3px;\n" +" font-size: 80%;\n" +" color: #606060;\n" +" font-weight: normal;\n" +" margin-left: 3px;\n" "} \n" ".memnav { \n" -" background-color: #e8eef2;\n" -" border: 1px solid #84b0c7;\n" -" text-align: center;\n" -" margin: 2px;\n" -" margin-right: 15px;\n" -" padding: 2px;\n" +" background-color: #e8eef2;\n" +" border: 1px solid #84b0c7;\n" +" text-align: center;\n" +" margin: 2px;\n" +" margin-right: 15px;\n" +" padding: 2px;\n" "}\n" ".memitem {\n" -" padding: 4px;\n" -" background-color: #eef3f5;\n" -" border-width: 1px;\n" -" border-style: solid;\n" -" border-color: #dedeee;\n" -" -moz-border-radius: 8px 8px 8px 8px;\n" +" padding: 4px;\n" +" background-color: #eef3f5;\n" +" border-width: 1px;\n" +" border-style: solid;\n" +" border-color: #dedeee;\n" +" -moz-border-radius: 8px 8px 8px 8px;\n" "}\n" ".memname {\n" -" white-space: nowrap;\n" -" font-weight: bold;\n" +" white-space: nowrap;\n" +" font-weight: bold;\n" "}\n" ".memdoc{\n" -" padding-left: 10px;\n" +" padding-left: 10px;\n" "}\n" ".memproto {\n" -" background-color: #d5e1e8;\n" -" width: 100%;\n" -" border-width: 1px;\n" -" border-style: solid;\n" -" border-color: #84b0c7;\n" -" font-weight: bold;\n" -" -moz-border-radius: 8px 8px 8px 8px;\n" +" background-color: #d5e1e8;\n" +" width: 100%;\n" +" border-width: 1px;\n" +" border-style: solid;\n" +" border-color: #84b0c7;\n" +" font-weight: bold;\n" +" -moz-border-radius: 8px 8px 8px 8px;\n" "}\n" ".paramkey {\n" -" text-align: right;\n" +" text-align: right;\n" "}\n" ".paramtype {\n" -" white-space: nowrap;\n" +" white-space: nowrap;\n" "}\n" ".paramname {\n" -" color: #602020;\n" -" font-style: italic;\n" -" white-space: nowrap;\n" +" color: #602020;\n" +" font-style: italic;\n" +" white-space: nowrap;\n" "}\n" "/* End Styling for detailed member documentation */\n" "\n" @@ -351,9 +407,27 @@ " font-family: sans-serif;\n" " margin:0.5em;\n" "}\n" -".directory { font-size: 9pt; font-weight: bold; }\n" -".directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; }\n" -".directory > h3 { margin-top: 0; }\n" -".directory p { margin: 0px; white-space: nowrap; }\n" -".directory div { display: none; margin: 0px; }\n" -".directory img { vertical-align: -30%; }\n" +".directory { \n" +" font-size: 9pt; \n" +" font-weight: bold; \n" +"}\n" +".directory h3 { \n" +" margin: 0px; \n" +" margin-top: 1em; \n" +" font-size: 11pt; \n" +"}\n" +".directory > h3 { \n" +" margin-top: 0; \n" +"}\n" +".directory p { \n" +" margin: 0px; \n" +" white-space: nowrap; \n" +"}\n" +".directory div { \n" +" display: none; \n" +" margin: 0px; \n" +"}\n" +".directory img { \n" +" vertical-align: -30%; \n" +"}\n" +"\n" diff --git a/src/doxytag.l b/src/doxytag.l index 932222b..687fd63 100644 --- a/src/doxytag.l +++ b/src/doxytag.l @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -750,7 +750,7 @@ void parseFileOrDir(const char *fileName) void usage(const char *name) { - fprintf(stderr,"Doxytag version %s\nCopyright Dimitri van Heesch 1997-2007\n\n", + fprintf(stderr,"Doxytag version %s\nCopyright Dimitri van Heesch 1997-2008\n\n", versionString); fprintf(stderr," Generates a tag file and/or a search index for a set of HTML files\n\n"); fprintf(stderr,"Usage: %s [-t tag_file] [ html_file [html_file...] ]\n",name); diff --git a/src/doxytag.pro.in b/src/doxytag.pro.in index daf77b2..9231117 100644 --- a/src/doxytag.pro.in +++ b/src/doxytag.pro.in @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby diff --git a/src/doxytag.t b/src/doxytag.t index a652d72..4e765ea 100644 --- a/src/doxytag.t +++ b/src/doxytag.t @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby diff --git a/src/entry.cpp b/src/entry.cpp index 970459b..d0ba5cb 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -121,6 +121,7 @@ Entry::Entry(const Entry &e) objc = e.objc; tagInfo = e.tagInfo; hidden = e.hidden; + artificial = e.artificial; m_sublist = new QList<Entry>; m_sublist->setAutoDelete(TRUE); extends = new QList<BaseInfo>; @@ -280,6 +281,7 @@ void Entry::reset() spec = 0; objc = FALSE; hidden = FALSE; + artificial = FALSE; subGrouping = TRUE; protection = Public; groupDocType = GROUPDOC_NORMAL; diff --git a/src/entry.h b/src/entry.h index dec7a6c..04db9ac 100644 --- a/src/entry.h +++ b/src/entry.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -241,26 +241,32 @@ class Entry PACKAGE_SEC = 0x15000000, PACKAGEDOC_SEC = 0x16000000, OBJCIMPL_SEC = 0x17000000, - DIRDOC_SEC = 0x18000000, + DIRDOC_SEC = 0x18000000 }; enum MemberSpecifier { - Inline = 0x0001, - Explicit = 0x0002, - Mutable = 0x0004, - Settable = 0x0008, - Gettable = 0x0010, - Readable = 0x0020, - Writable = 0x0040, - Final = 0x0080, - Abstract = 0x0100, - Addable = 0x0200, - Removable = 0x0400, - Raisable = 0x0800, - Override = 0x1000, - New = 0x2000, - Sealed = 0x4000, - Initonly = 0x8000 + Inline = 0x000001, + Explicit = 0x000002, + Mutable = 0x000004, + Settable = 0x000008, + Gettable = 0x000010, + Readable = 0x000020, + Writable = 0x000040, + Final = 0x000080, + Abstract = 0x000100, + Addable = 0x000200, + Removable = 0x000400, + Raisable = 0x000800, + Override = 0x001000, + New = 0x002000, + Sealed = 0x004000, + Initonly = 0x008000, + Optional = 0x010000, + Required = 0x020000, + NonAtomic = 0x040000, + Copy = 0x080000, + Retain = 0x100000, + Assign = 0x200000, }; enum ClassSpecifier { @@ -361,6 +367,7 @@ class Entry QList<ListItemInfo> *sli; //!< special lists (test/todo/bug/deprecated/..) this entry is in bool objc; //!< Objective-C construct bool hidden; //!< does this represent an entity that is hidden from the output + bool artificial; //!< Artificially introduced item GroupDocType groupDocType; static int num; //!< counts the total number of entries diff --git a/src/example.h b/src/example.h index 80df545..8b3f87c 100644 --- a/src/example.h +++ b/src/example.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/filedef.cpp b/src/filedef.cpp index c33f4f8..5daeb6a 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -33,6 +33,7 @@ #include "htags.h" #include "parserintf.h" #include "portable.h" +#include "vhdldocgen.h" class DevNullCodeDocInterface : public CodeOutputInterface { @@ -214,6 +215,8 @@ void FileDef::writeDetailedDocumentation(OutputList &ol) */ void FileDef::writeDocumentation(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); //funcList->countDecMembers(); //QCString fn = name(); @@ -231,11 +234,13 @@ void FileDef::writeDocumentation(OutputList &ol) } QCString title = docname+versionTitle; QCString pageTitle=theTranslator->trFileReference(docname); - startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible); if (Config_getBool("SHOW_DIRECTORIES") && getDirDef()) { + startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE); getDirDef()->writeNavigationPath(ol); + ol.endQuickIndices(); + ol.startContents(); QCString pageTitleShort=theTranslator->trFileReference(name()); startTitle(ol,getOutputFileBase()); ol.pushGeneratorState(); @@ -250,6 +255,7 @@ void FileDef::writeDocumentation(OutputList &ol) } else { + startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible); startTitle(ol,getOutputFileBase()); ol.parseText(pageTitle); addGroupListToTitle(ol,this); @@ -445,18 +451,32 @@ void FileDef::writeDocumentation(OutputList &ol) bool found=FALSE; for (ndi.toFirst();(nd=ndi.current());++ndi) { - if (nd->name().find('@')==-1) + if (nd->name().find('@')==-1 && !nd->isArtificial()) { if (!found) { ol.startMemberHeader(); - ol.parseText(theTranslator->trNamespaces()); + if (fortranOpt) + { + ol.parseText(theTranslator->trModules()); + } + else + { + ol.parseText(theTranslator->trNamespaces()); + } ol.endMemberHeader(); ol.startMemberList(); found=TRUE; } ol.startMemberItem(0); - ol.writeString("namespace "); + if (fortranOpt) + { + ol.writeString("module "); + } + else + { + ol.writeString("namespace "); + } ol.insertMemberAlign(); if (nd->isLinkable()) { @@ -504,7 +524,10 @@ void FileDef::writeDocumentation(OutputList &ol) writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos()); writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); - writeMemberDeclarations(ol,MemberList::decFuncMembers,theTranslator->trFunctions()); + writeMemberDeclarations(ol,MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()) ; writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); ol.endMemberSections(); @@ -541,13 +564,14 @@ void FileDef::writeDocumentation(OutputList &ol) void FileDef::writeMemberDocumentation(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (Config_getBool("SEPARATE_MEMBER_PAGES")) { ol.disable(OutputGenerator::Html); } writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); - writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation()); + writeMemberDocumentation(ol,MemberList::docProtoMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionPrototypeDocumentation()); writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation()); @@ -631,17 +655,20 @@ void FileDef::writeSource(OutputList &ol) } QCString pageTitle = theTranslator->trSourceFile(title); ol.disableAllBut(OutputGenerator::Html); - startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible); if (Config_getBool("SHOW_DIRECTORIES") && getDirDef()) { + startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE); getDirDef()->writeNavigationPath(ol); + ol.endQuickIndices(); + ol.endContents(); startTitle(ol,getOutputFileBase()); ol.parseText(name()); endTitle(ol,getOutputFileBase(),title); } else { + startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE); startTitle(ol,0); ol.parseText(title); endTitle(ol,0,0); diff --git a/src/filedef.h b/src/filedef.h index 20ac57f..d03f816 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/filename.cpp b/src/filename.cpp index 929cc5f..bbbc707 100644 --- a/src/filename.cpp +++ b/src/filename.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/filename.h b/src/filename.h index 71620ea..b2dd496 100644 --- a/src/filename.h +++ b/src/filename.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/formula.cpp b/src/formula.cpp index 380a53e..037ce9d 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -1,8 +1,8 @@ /****************************************************************************** i - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/formula.h b/src/formula.h index ef46baa..5fa4f7e 100644 --- a/src/formula.h +++ b/src/formula.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/fortrancode.h b/src/fortrancode.h index 5f0366e..48e50d1 100644 --- a/src/fortrancode.h +++ b/src/fortrancode.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2006 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/fortrancode.l b/src/fortrancode.l index c71de8f..63fdb0a 100644 --- a/src/fortrancode.l +++ b/src/fortrancode.l @@ -957,5 +957,9 @@ extern "C" { // some bogus code to keep the compiler happy } #elif YY_FLEX_SUBMINOR_VERSION<33 #error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!" +#else +extern "C" { // some bogus code to keep the compiler happy + void fcodeYYdummy() { yy_top_state(); } +} #endif diff --git a/src/fortranscanner.h b/src/fortranscanner.h index da782a9..c040f9a 100644 --- a/src/fortranscanner.h +++ b/src/fortranscanner.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2006 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/fortranscanner.l b/src/fortranscanner.l index eecdd60..8eddc14 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -74,11 +74,11 @@ struct SymbolModifiers { enum Direction {NONE_D, IN, OUT, INOUT}; //!< This is only used with function return value. - QString type, returnName; + QCString type, returnName; Protection protection; Direction direction; bool optional; - QString dimension; + QCString dimension; bool allocatable; bool external; bool intrinsic; @@ -93,7 +93,7 @@ struct SymbolModifiers { pointer(FALSE), target(FALSE), save(FALSE) {} SymbolModifiers& operator|=(const SymbolModifiers &mdfs); - SymbolModifiers& operator|=(QString mdfrString); + SymbolModifiers& operator|=(QCString mdfrString); }; //ostream& operator<<(ostream& out, const SymbolModifiers& mdfs); @@ -132,7 +132,7 @@ static MethodTypes mtype; static bool gstat; static Specifier virt; -static QString debugStr; +static QCString debugStr; static QCString result; // function result static Argument *parameter; // element of parameter list static QCString argType; // fortran type of an argument of a parameter list @@ -146,7 +146,7 @@ static char stringStartSymbol; // single or double quote //! Accumulated modifiers of current statement, eg variable declaration. static SymbolModifiers currentModifiers; //! Holds program scope->symbol name->symbol modifiers. -static QMap<Entry*,QMap<QString,SymbolModifiers> > modifiers; +static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers; //----------------------------------------------------------------------------- @@ -154,14 +154,14 @@ static int yyread(char *buf,int max_size); static void startCommentBlock(bool); static void handleCommentBlock(const QCString &doc,bool brief); static void addCurrentEntry(); -static void addInterface(QString name); -static Argument *addFortranParameter(const QCString &type,const QCString &name, const QString docs); +static void addInterface(QCString name); +static Argument *addFortranParameter(const QCString &type,const QCString &name, const QCString docs); static void scanner_abort(); static void startScope(Entry *scope); static bool endScope(Entry *scope); -static QString getFullName(Entry *e); -static bool isTypeName(QString name); +static QCString getFullName(Entry *e); +static bool isTypeName(QCString name); static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root); //----------------------------------------------------------------------------- @@ -176,7 +176,7 @@ static void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *curre IDSYM [a-z_A-Z0-9] NOTIDSYM [^a-z_A-Z0-9] SEPARATE [:, \t] -ID [a-z_A-Z]+{IDSYM}* +ID [a-z_A-Z%]+{IDSYM}* PP_ID {ID} LABELID [a-z_A-Z]+[a-z_A-Z0-9\-]* SUBPROG (subroutine|function) @@ -245,15 +245,15 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} <String>\"|\' { // string ends with next quote without previous backspace if(yytext[0]!=stringStartSymbol) REJECT; // single vs double quote - // cout << "string end: " << debugStr << endl; + // fprintf(stderr,"string end: %s\n",debugStr.data()); yy_pop_state(); } -<String>. {debugStr+=yytext;} // ignore String contents (especially '!') +<String>. { debugStr+=yytext; } // ignore String contents (especially '!') <*>\"|\' { /* string starts */ if(YY_START == StrIgnore) REJECT; // ignore in simple comments - // cout << "string start: " << yytext[0] << yyLineNr << endl; + // fprintf(stderr,"string start: %c %d\n",yytext[0],yyLineNr); yy_push_state(YY_START); stringStartSymbol=yytext[0]; // single or double quote BEGIN(String); debugStr="!^!"; @@ -268,11 +268,11 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} yy_push_state(YY_START); BEGIN(StrIgnore); debugStr="*!"; - //cout << "start comment "<< yyLineNr << endl; + //fprintf(stderr,"start comment %d\n",yyLineNr); } } <StrIgnore>.?/\n { yy_pop_state(); // comment ends with endline character - //cout << "end comment " << yyLineNr <<" "<< debugStr << endl; + //fprintf(stderr,"end comment %d %s\n",yyLineNr,debugStr.data()); } // comment line ends <StrIgnore>. { debugStr+=yytext; } @@ -284,7 +284,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} BEGIN(Use); } <Use>{ID} { - //cout << "using dir "<< yytext << endl; + //fprintf(stderr,"using dir %s\n",yytext); current->name=yytext; current->fileName = yyFileName; current->section=Entry::USINGDIR_SEC; @@ -312,10 +312,10 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} /*------ ignore special fortran statements */ <Start,ModuleBody,SubprogBody>^[ \t]*interface({BS_}{ID}({BS}\({BS}[^ \t()]+{BS}\))?)? { // handle interface block - QString name = yytext; + QCString name = yytext; int index = name.find("interface", 0, FALSE); index = name.find(QRegExp("[^ \\t]"), index+9); - //cout<<name<<", "<<index<<endl; + //printf(stderr,"%s,%d\n",name.data(),index); if(index!=-1) name = name.right(name.length()-index); else // interface without name, must be inside subprog @@ -328,8 +328,6 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} if(!endScope(current_root)) yyterminate(); yy_pop_state(); - //cout << "end interface " << yyLineNr - // <<", "<<Interface<<endl; } <InterfaceBody>module{BS}procedure { yy_push_state(YY_START); BEGIN(ModuleProcedure); @@ -379,13 +377,13 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} /*------- type definition -------------------------------------------------------------------------------*/ -<Start,ModuleBody>^{BS}"type"({BS_}|({COMMA}{ACCESS_SPEC})) { /* type definition found : TYPE , access-spec::type-name |*/ +<Start,ModuleBody>"type"({BS_}|({COMMA}{ACCESS_SPEC})) { /* type definition found : TYPE , access-spec::type-name |*/ yy_push_state(YY_START); BEGIN(Typedef); current->protection = defaultProtection; } <Typedef>{ACCESS_SPEC} { - QString type= yytext; + QCString type= yytext; } <Typedef>{ID} { /* type name found */ //cout << "=========> got typedef " << yytext << ": " << yyLineNr << endl; @@ -420,16 +418,16 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} {TYPE_SPEC}/{SEPARATE} { /* variable declaration starts */ //fprintf(stderr,"4=========> got variable type: %s\n",yytext); - QString help=yytext; + QCString help=yytext; help= help.simplifyWhiteSpace(); - argType= help.latin1(); + argType= help; yy_push_state(AttributeList); } ^{BS}{PP_ID}{KIND}? { /* check for preprocessor symbol expand to type */ - QString str = yytext; + QCString str = yytext; str = str.stripWhiteSpace(); DefineDict* defines = getFileDefineDict(); - QString name; + QCString name; int index = str.find("("); if(index != -1) name = str.left(index).stripWhiteSpace(); @@ -437,30 +435,29 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} name = str; Define *define = (*defines)[name]; - if(define != NULL && isTypeName(define->definition)) { + if(define != 0 && isTypeName(define->definition)) { argType = str; yy_push_state(AttributeList); } else { REJECT; } } -{ATTR_STMT}/{BS_}{ID}|{BS}"::" { +{ATTR_STMT}/{BS_}{ID} | +{ATTR_STMT}/{BS}"::" { /* attribute statement starts */ //fprintf(stderr,"5=========> Attribute statement: %s\n", yytext); - QString tmp = yytext; + QCString tmp = yytext; currentModifiers |= tmp.stripWhiteSpace(); argType=""; yy_push_state(YY_START); - /* goto attribute parsing, however there must not be one, - just catch "::" if it is there. */ BEGIN( AttributeList ) ; - } + } } <AttributeList>{ {COMMA} {} {BS} {} {ATTR_SPEC} { /* update current modifiers */ - QString tmp = yytext; + QCString tmp = yytext; currentModifiers |= (tmp); } "::" { /* end attribute list */ @@ -476,11 +473,11 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} <Variable>{BS} {} <Variable>{ID} { /* parse variable declaration */ //cout << "5=========> got variable: " << argType << "::" << yytext << endl; - /* work around for bug in QCString.replace (QString works) */ - QString name=yytext; + /* work around for bug in QCString.replace (QCString works) */ + QCString name=yytext; /* remember attributes for the symbol */ modifiers[current_root][name.lower()] |= currentModifiers; - argName= name.latin1(); + argName= name; int last= yy_top_state(); v_type= V_IGNORE; @@ -505,8 +502,8 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} } } <Variable>{ARGS} { /* dimension of the previous entry. */ - QString name(argName); - QString attr("dimension"); + QCString name(argName); + QCString attr("dimension"); attr += yytext; modifiers[current_root][name] |= attr; } @@ -542,14 +539,14 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} /*------ fortran subroutine/function handling ------------------------------------------------------------*/ /* Start is initial condition */ -<Start,ModuleBody,InterfaceBody>{TYPE_SPEC}{BS}/{SUBPROG}{BS_} { +<Start,ModuleBody,SubprogBody,InterfaceBody>{TYPE_SPEC}{BS}/{SUBPROG}{BS_} { // TYPE_SPEC is for old function style function result result= yytext; result= result.stripWhiteSpace(); current->type = result; } <Start,ModuleBody,SubprogBody,InterfaceBody>{BS}{SUBPROG}{BS_} { // Fortran subroutine or function found - //cout << "1=========> got subprog, type:" << yytext <<endl; + //fprintf(stderr,"1=========> got subprog, type: %s\n",yytext); current->section = Entry::FUNCTION_SEC ; QCString subtype = yytext; subtype=subtype.lower().stripWhiteSpace(); if (!current->type) current->type = subtype; @@ -569,7 +566,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} } <Parameterlist>{ARGS} { //current->type not yet available - QString arglist= yytext; + QCString arglist= yytext; //cout << "3=========> got parameterlist " << yytext << endl; yyLineNr+= arglist.contains('\n'); arglist = arglist.replace(QRegExp("&[^\n]*\n"),""); @@ -716,7 +713,7 @@ void resolveModuleProcedures(QList<Entry> &moduleProcedures, Entry *current_root moduleProcedures.clear(); } -static bool isTypeName(QString name) +static bool isTypeName(QCString name) { name = name.lower(); return name=="integer" || name == "real" || @@ -724,9 +721,9 @@ static bool isTypeName(QString name) } /*! Extracts string which resides within parentheses of provided string. */ -static QString extractFromParens(const QString name) +static QCString extractFromParens(const QCString name) { - QString extracted = name; + QCString extracted = name; int start = extracted.find("("); if(start != -1) { @@ -761,18 +758,18 @@ SymbolModifiers& SymbolModifiers::operator|=(const SymbolModifiers &mdfs) } /*! Extracts and adds passed modifier to these modifiers.*/ -SymbolModifiers& SymbolModifiers::operator|=(QString mdfString) +SymbolModifiers& SymbolModifiers::operator|=(QCString mdfString) { mdfString = mdfString.lower(); SymbolModifiers newMdf; - if (mdfString.startsWith("dimension")) + if (mdfString.find("dimension")==0) { newMdf.dimension=mdfString; } else if (mdfString.contains("intent")) { - QString tmp = extractFromParens(mdfString); + QCString tmp = extractFromParens(mdfString); bool isin = tmp.contains("in"); bool isout = tmp.contains("out"); if(isin && isout) newMdf.direction = SymbolModifiers::INOUT; @@ -835,7 +832,7 @@ SymbolModifiers& SymbolModifiers::operator|=(QString mdfString) //} /*! Find argument with given name in \a subprog entry. */ -static Argument *findArgument(Entry* subprog, QString name, bool byTypeName = FALSE) +static Argument *findArgument(Entry* subprog, QCString name, bool byTypeName = FALSE) { QCString cname(name.lower()); for (unsigned int i=0; i<subprog->argList->count(); i++) @@ -846,12 +843,12 @@ static Argument *findArgument(Entry* subprog, QString name, bool byTypeName = FA return arg; } - return NULL; + return 0; } /*! Find function with given name in \a entry. */ #if 0 -static Entry *findFunction(Entry* entry, QString name) +static Entry *findFunction(Entry* entry, QCString name) { QCString cname(name.lower()); @@ -866,12 +863,12 @@ static Entry *findFunction(Entry* entry, QString name) return ce; } - return NULL; + return 0; } #endif /*! Apply modifiers stored in \a mdfs to the \a typeName string. */ -static QString applyModifiers(QString typeName, SymbolModifiers& mdfs) +static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs) { if(!mdfs.dimension.isNull()) { @@ -930,14 +927,14 @@ static QString applyModifiers(QString typeName, SymbolModifiers& mdfs) /*! Apply modifiers stored in \a mdfs to the \a arg argument. */ static void applyModifiers(Argument *arg, SymbolModifiers& mdfs) { - QString tmp = arg->type; + QCString tmp = arg->type; arg->type = applyModifiers(tmp, mdfs); } /*! Apply modifiers stored in \a mdfs to the \a ent entry. */ static void applyModifiers(Entry *ent, SymbolModifiers& mdfs) { - QString tmp = ent->type; + QCString tmp = ent->type; ent->type = applyModifiers(tmp, mdfs); if(mdfs.protection == SymbolModifiers::PUBLIC) @@ -955,7 +952,7 @@ static void startScope(Entry *scope) //cout<<"start scope: "<<scope->name<<endl; current_root= scope; /* start substructure */ - QMap<QString,SymbolModifiers> mdfMap; + QMap<QCString,SymbolModifiers> mdfMap; modifiers.insert(scope, mdfMap); } @@ -977,32 +974,33 @@ static bool endScope(Entry *scope) } // update variables or subprogram arguments with modifiers - QMap<QString,SymbolModifiers>& mdfsMap = modifiers[scope]; + QMap<QCString,SymbolModifiers>& mdfsMap = modifiers[scope]; - if(scope->section == Entry::FUNCTION_SEC) + if (scope->section == Entry::FUNCTION_SEC) { // iterate all symbol modifiers of the scope - for(QMap<QString,SymbolModifiers>::Iterator it=mdfsMap.begin(); it!=mdfsMap.end(); it++) { + for (QMap<QCString,SymbolModifiers>::Iterator it=mdfsMap.begin(); it!=mdfsMap.end(); it++) + { //cout<<it.key()<<": "<<it.data()<<endl; Argument *arg = findArgument(scope, it.key()); - if(arg) + if (arg) applyModifiers(arg, it.data()); } // find return type for function //cout<<"RETURN NAME "<<modifiers[current_root][scope->name.lower()].returnName<<endl; - QString returnName = modifiers[current_root][scope->name.lower()].returnName.lower(); - if(modifiers[scope].contains(returnName)) + QCString returnName = modifiers[current_root][scope->name.lower()].returnName.lower(); + if (modifiers[scope].contains(returnName)) { scope->type = modifiers[scope][returnName].type; // returning type works applyModifiers(scope, modifiers[scope][returnName]); // returning array works } } - else if(scope->section == Entry::CLASS_SEC) + if (scope->section == Entry::CLASS_SEC) { // was INTERFACE_SEC - if(scope->parent()->section == Entry::FUNCTION_SEC) + if (scope->parent()->section == Entry::FUNCTION_SEC) { // interface within function // iterate functions of interface and // try to find types for dummy(ie. argument) procedures. @@ -1011,11 +1009,11 @@ static bool endScope(Entry *scope) Entry *ce; for (;(ce=eli.current());++eli) { - if(ce->section != Entry::FUNCTION_SEC) + if (ce->section != Entry::FUNCTION_SEC) continue; Argument *arg = findArgument(scope->parent(), ce->name, TRUE); - if(arg != NULL) + if(arg != 0) { // set type of dummy procedure argument to interface arg->name = arg->type; @@ -1023,10 +1021,9 @@ static bool endScope(Entry *scope) } } } - } - else - { // not function section or interface + if (scope->section!=Entry::FUNCTION_SEC) + { // not function section // iterate variables: get and apply modifiers EntryListIterator eli(*scope->children()); Entry *ce; @@ -1048,10 +1045,10 @@ static bool endScope(Entry *scope) } //! Return full name of the entry. Sometimes we must combine several names recursively. -static QString getFullName(Entry *e) +static QCString getFullName(Entry *e) { - QString name = e->name; - if(e->section == Entry::CLASS_SEC // || e->section == Entry::INTERFACE_SEC + QCString name = e->name; + if (e->section == Entry::CLASS_SEC // || e->section == Entry::INTERFACE_SEC || !e->parent() || e->parent()->name.isEmpty()) return name; @@ -1061,7 +1058,7 @@ static QString getFullName(Entry *e) static int yyread(char *buf,int max_size) { int c=0; - while( c < max_size && inputString[inputPosition] ) + while ( c < max_size && inputString[inputPosition] ) { *buf = inputString[inputPosition++] ; c++; buf++; @@ -1099,7 +1096,7 @@ static void addCurrentEntry() * \note Code was brought to this procedure from the parser, * because there was/is idea to use it in several parts of the parser. */ -static void addInterface(QString name) +static void addInterface(QCString name) { current->section = Entry::CLASS_SEC; // was Entry::INTERFACE_SEC; current->spec = Entry::Interface; @@ -1115,7 +1112,7 @@ static void addInterface(QString name) if ((current_root) && (current_root->section == Entry::FUNCTION_SEC)) { - current->name = getFullName(current_root) + "__" + QString(current->name); + current->name = getFullName(current_root) + "__" + QCString(current->name); } current->fileName = yyFileName; @@ -1128,11 +1125,11 @@ static void addInterface(QString name) /*! Update the argument \a name with additional \a type info. */ -static Argument *addFortranParameter(const QCString &type,const QCString &name, const QString docs) +static Argument *addFortranParameter(const QCString &type,const QCString &name, const QCString docs) { - //cout<<"addFortranParameter(): "<<name<<" DOCS:"<<(docs.isNull()?QString("null"):docs)<<endl; + //cout<<"addFortranParameter(): "<<name<<" DOCS:"<<(docs.isNull()?QCString("null"):docs)<<endl; Argument *ret = 0; - if (current_root->argList==0) return FALSE; + if (current_root->argList==0) return 0; ArgumentListIterator ali(*current_root->argList); Argument *a; for (ali.toFirst();(a=ali.current());++ali) @@ -1143,7 +1140,7 @@ static Argument *addFortranParameter(const QCString &type,const QCString &name, //cout << "addParameter found: " << type << " , " << name << endl; a->type=type.stripWhiteSpace(); a->name=name.stripWhiteSpace(); - if(!docs.isNull()) + if (!docs.isNull()) a->docs = docs; break; } @@ -1327,7 +1324,7 @@ static void scanner_abort() #if !defined(YY_FLEX_SUBMINOR_VERSION) //---------------------------------------------------------------------------- extern "C" { // some bogus code to keep the compiler happy - void fscannerYYdummy() { yy_flex_realloc(0,0); } + void fscannerYYdummy() { yy_flex_realloc(0,0); yy_top_state(); } } #endif diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index ebe1149..0129b78 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -595,7 +595,7 @@ void FTVHelp::generateTreeView() { QTextStream t(&f); #if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); #endif t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n"; t << "<html><head>"; @@ -632,9 +632,7 @@ void FTVHelp::generateTreeView() else { QTextStream t(&f); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"; t << " <head>\n"; t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\" />\n"; diff --git a/src/ftvhelp.h b/src/ftvhelp.h index c2f063a..fee1944 100644 --- a/src/ftvhelp.h +++ b/src/ftvhelp.h @@ -71,7 +71,7 @@ class FTVHelp : public IndexIntf const char *anchor); void addIndexItem(const char *, const char *, const char *, const char *, - const char *) {} + const char *, const MemberDef *) {} void addIndexFile(const char *) {} private: diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 4905b28..de41fe7 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -34,6 +34,7 @@ #include "docparser.h" #include "searchindex.h" #include "dot.h" +#include "vhdldocgen.h" GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, const char *refFileName) : Definition(df,dl,na) @@ -290,107 +291,104 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly) if (!docOnly) { addMemberToList(MemberList::decVarMembers,md); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decVarMembers.inSort(md); - //else - // decVarMembers.append(md); } addMemberToList(MemberList::docVarMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docVarMembers.inSort(md); - //else - // docVarMembers.append(md); break; case MemberDef::Function: if (!docOnly) { addMemberToList(MemberList::decFuncMembers,md); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decFuncMembers.inSort(md); - //else - // decFuncMembers.append(md); } addMemberToList(MemberList::docFuncMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docFuncMembers.inSort(md); - //else - // docFuncMembers.append(md); break; case MemberDef::Typedef: if (!docOnly) { addMemberToList(MemberList::decTypedefMembers,md); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decTypedefMembers.inSort(md); - //else - // decTypedefMembers.append(md); } addMemberToList(MemberList::docTypedefMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docTypedefMembers.inSort(md); - //else - // docTypedefMembers.append(md); break; case MemberDef::Enumeration: if (!docOnly) { addMemberToList(MemberList::decEnumMembers,md); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decEnumMembers.inSort(md); - //else - // decEnumMembers.append(md); } addMemberToList(MemberList::docEnumMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docEnumMembers.inSort(md); - //else - // docEnumMembers.append(md); break; case MemberDef::EnumValue: if (!docOnly) { addMemberToList(MemberList::decEnumValMembers,md); - //printf("enum value %s!\n",md->name().data()); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decEnumValMembers.inSort(md); - //else - // decEnumValMembers.append(md); } addMemberToList(MemberList::docEnumValMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docEnumValMembers.inSort(md); - //else - // docEnumValMembers.append(md); break; case MemberDef::Prototype: if (!docOnly) { addMemberToList(MemberList::decProtoMembers,md); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decProtoMembers.inSort(md); - //else - // decProtoMembers.append(md); } addMemberToList(MemberList::docProtoMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docProtoMembers.inSort(md); - //else - // docProtoMembers.append(md); break; case MemberDef::Define: if (!docOnly) { addMemberToList(MemberList::decDefineMembers,md); - //if (Config_getBool("SORT_BRIEF_DOCS")) - // decDefineMembers.inSort(md); - //else - // decDefineMembers.append(md); } addMemberToList(MemberList::docDefineMembers,md); - //if (Config_getBool("SORT_MEMBER_DOCS")) - // docDefineMembers.inSort(md); - //else - // docDefineMembers.append(md); + break; + case MemberDef::Signal: + if (!docOnly) + { + addMemberToList(MemberList::decSignalMembers,md); + } + addMemberToList(MemberList::docSignalMembers,md); + break; + case MemberDef::Slot: + if (md->protection()==Public) + { + if (!docOnly) + { + addMemberToList(MemberList::decPubSlotMembers,md); + } + addMemberToList(MemberList::docPubSlotMembers,md); + } + else if (md->protection()==Protected) + { + if (!docOnly) + { + addMemberToList(MemberList::decProSlotMembers,md); + } + addMemberToList(MemberList::docProSlotMembers,md); + } + else + { + if (!docOnly) + { + addMemberToList(MemberList::decPriSlotMembers,md); + } + addMemberToList(MemberList::docPriSlotMembers,md); + } + break; + case MemberDef::Event: + if (!docOnly) + { + addMemberToList(MemberList::decEventMembers,md); + } + addMemberToList(MemberList::docEventMembers,md); + break; + case MemberDef::Property: + if (!docOnly) + { + addMemberToList(MemberList::decPropMembers,md); + } + addMemberToList(MemberList::docPropMembers,md); + break; + case MemberDef::Friend: + if (!docOnly) + { + addMemberToList(MemberList::decFriendMembers,md); + } + addMemberToList(MemberList::docFriendMembers,md); break; default: err("GroupDef::insertMembers(): " @@ -455,6 +453,39 @@ void GroupDef::removeMember(MemberDef *md) removeMemberFromList(MemberList::decDefineMembers,md); removeMemberFromList(MemberList::docDefineMembers,md); break; + case MemberDef::Signal: + removeMemberFromList(MemberList::decSignalMembers,md); + removeMemberFromList(MemberList::docSignalMembers,md); + break; + case MemberDef::Slot: + if (md->protection()==Public) + { + removeMemberFromList(MemberList::decPubSlotMembers,md); + removeMemberFromList(MemberList::docPubSlotMembers,md); + } + else if (md->protection()==Protected) + { + removeMemberFromList(MemberList::decProSlotMembers,md); + removeMemberFromList(MemberList::docProSlotMembers,md); + } + else + { + removeMemberFromList(MemberList::decPriSlotMembers,md); + removeMemberFromList(MemberList::docPriSlotMembers,md); + } + break; + case MemberDef::Event: + removeMemberFromList(MemberList::decEventMembers,md); + removeMemberFromList(MemberList::docEventMembers,md); + break; + case MemberDef::Property: + removeMemberFromList(MemberList::decPropMembers,md); + removeMemberFromList(MemberList::docPropMembers,md); + break; + case MemberDef::Friend: + removeMemberFromList(MemberList::decFriendMembers,md); + removeMemberFromList(MemberList::docFriendMembers,md); + break; default: err("GroupDef::removeMember(): unexpected member remove in file!\n"); } @@ -535,6 +566,8 @@ void GroupDef::writeDetailedDocumentation(OutputList &ol) void GroupDef::writeDocumentation(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); ol.pushGeneratorState(); startFile(ol,getOutputFileBase(),name(),title); startTitle(ol,getOutputFileBase()); @@ -715,21 +748,23 @@ void GroupDef::writeDocumentation(OutputList &ol) mg->writeDeclarations(ol,0,0,0,this); } - //allMemberList->writeDeclarations(ol,0,0,0,this,0,0); writeMemberDeclarations(ol,MemberList::decDefineMembers,theTranslator->trDefines()); - //decDefineMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trDefines(),0); writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos()); - //decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0); writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); - //decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0); writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); - //decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0); writeMemberDeclarations(ol,MemberList::decEnumValMembers,theTranslator->trEnumerationValues()); - //decEnumValMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerationValues(),0,TRUE); - writeMemberDeclarations(ol,MemberList::decFuncMembers,theTranslator->trFunctions()); - //decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0); + writeMemberDeclarations(ol,MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()); writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); - //decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0); + writeMemberDeclarations(ol,MemberList::decSignalMembers,theTranslator->trSignals()); + writeMemberDeclarations(ol,MemberList::decPubSlotMembers,theTranslator->trPublicSlots()); + writeMemberDeclarations(ol,MemberList::decProSlotMembers,theTranslator->trProtectedSlots()); + writeMemberDeclarations(ol,MemberList::decPriSlotMembers,theTranslator->trPrivateSlots()); + writeMemberDeclarations(ol,MemberList::decEventMembers,theTranslator->trEvents()); + writeMemberDeclarations(ol,MemberList::decPropMembers,theTranslator->trProperties()); + writeMemberDeclarations(ol,MemberList::decFriendMembers,theTranslator->trFriends()); } ol.endMemberSections(); @@ -786,38 +821,26 @@ void GroupDef::writeDocumentation(OutputList &ol) void GroupDef::writeMemberDocumentation(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (Config_getBool("SEPARATE_MEMBER_PAGES")) { ol.disable(OutputGenerator::Html); } writeMemberDocumentation(ol,MemberList::docDefineMembers,theTranslator->trDefineDocumentation()); - //docDefineMembers.writeDocumentation(ol,name(),this, - // theTranslator->trDefineDocumentation()); - writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation()); - //docProtoMembers.writeDocumentation(ol,name(),this, - // theTranslator->trFunctionPrototypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); - //docTypedefMembers.writeDocumentation(ol,name(),this, - // theTranslator->trTypedefDocumentation()); - writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); - //docEnumMembers.writeDocumentation(ol,name(),this, - // theTranslator->trEnumerationTypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docEnumValMembers,theTranslator->trEnumerationValueDocumentation()); - //docEnumValMembers.writeDocumentation(ol,name(),this, - // theTranslator->trEnumerationValueDocumentation(),TRUE); - - writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation()); - //docFuncMembers.writeDocumentation(ol,name(),this, - // theTranslator->trFunctionDocumentation()); - + writeMemberDocumentation(ol,MemberList::docFuncMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionDocumentation()); writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation()); - //docVarMembers.writeDocumentation(ol,name(),this, - // theTranslator->trVariableDocumentation()); + writeMemberDocumentation(ol,MemberList::docSignalMembers,theTranslator->trSignals()); // todo: add trSignalDocumentation() + writeMemberDocumentation(ol,MemberList::docPubSlotMembers,theTranslator->trPublicSlots()); // todo: add trSlotDocumentation() + writeMemberDocumentation(ol,MemberList::docProSlotMembers,theTranslator->trProtectedSlots()); // todo: add trSlotDocumentation() + writeMemberDocumentation(ol,MemberList::docPriSlotMembers,theTranslator->trPrivateSlots()); // todo: add trSlotDocumentation() + writeMemberDocumentation(ol,MemberList::docEventMembers,theTranslator->trEvents()); // todo: add trEventDocumentation() + writeMemberDocumentation(ol,MemberList::docPropMembers,theTranslator->trProperties()); // todo: add trPropertyDocumentation() + writeMemberDocumentation(ol,MemberList::docFriendMembers,theTranslator->trFriends()); // todo: add trFriendDocumentation() if (Config_getBool("SEPARATE_MEMBER_PAGES")) { diff --git a/src/groupdef.h b/src/groupdef.h index d0761b2..d2f262c 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/htags.cpp b/src/htags.cpp index 05cf07b..a6ac8e8 100644 --- a/src/htags.cpp +++ b/src/htags.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/htags.h b/src/htags.h index a75e9c7..d9c5532 100644 --- a/src/htags.h +++ b/src/htags.h @@ -1,6 +1,6 @@ /****************************************************************************** * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/htmlattrib.h b/src/htmlattrib.h index 8c852e4..78f2ced 100644 --- a/src/htmlattrib.h +++ b/src/htmlattrib.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index baebc7f..b3739fe 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -28,6 +28,7 @@ #include "htmlgen.h" #include "parserintf.h" #include "msc.h" +#include "util.h" static const int NUM_HTML_LIST_TYPES = 4; @@ -574,7 +575,7 @@ void HtmlDocVisitor::visitPre(DocSection *s) m_t << "<h" << s->level()+1 << ">"; m_t << "<a class=\"anchor\" name=\"" << s->anchor(); m_t << "\">" << endl; - filter(s->title()); + filter(convertCharEntitiesToUTF8(s->title().data())); m_t << "</a></h" << s->level()+1 << ">\n"; } diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h index 2708c7b..bbe7c34 100644 --- a/src/htmldocvisitor.h +++ b/src/htmldocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 143baf5..b6982b7 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -36,6 +36,7 @@ #include "pagedef.h" #include "debug.h" #include "dirdef.h" +#include "vhdldocgen.h" // #define GROUP_COLOR "#ff8080" @@ -443,7 +444,7 @@ static const char tabs_css[] = " padding-bottom : 6px;\n" "}\n" "\n" -"DIV.nav\n" +"DIV.navpath\n" "{\n" " background : none;\n" " border : none;\n" @@ -600,9 +601,7 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, void HtmlGenerator::writeHeaderFile(QFile &file) { QTextStream t(&file); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); writeDefaultHeaderFile(t,"$title",relativePathToRoot(0),TRUE); } @@ -840,7 +839,7 @@ void HtmlGenerator::writeString(const char *text) void HtmlGenerator::startIndexItem(const char *ref,const char *f) { - //printf("HtmlGenerator::startIndexItem(%s,%s,%s)\n",ref,f,name); + //printf("HtmlGenerator::startIndexItem(%s,%s)\n",ref,f); QCString *dest; t << "<li>"; if (ref || f) @@ -1688,8 +1687,8 @@ static void startQuickIndexList(QTextStream &t,bool compact) { if (compact) { - t << "<div class=\"tabs\">\n"; - t << " <ul>\n"; + t << " <div class=\"tabs\">\n"; + t << " <ul>\n"; } else { @@ -1701,8 +1700,8 @@ static void endQuickIndexList(QTextStream &t,bool compact) { if (compact) { - t << " </ul>\n"; - t << "</div>\n"; + t << " </ul>\n"; + t << " </div>\n"; } else { @@ -1714,7 +1713,7 @@ static void startQuickIndexItem(QTextStream &t,const char *l, bool hl,bool /*compact*/, const QCString &relPath) { - t << " <li"; if (hl) t << " class=\"current\""; + t << " <li"; if (hl) t << " class=\"current\""; t << "><a "; t << "href=\"" << relPath << l << "\">"; t << "<span>"; @@ -1736,6 +1735,7 @@ static void writeNamespaceSubIndex(QTextStream &t,bool compact, HighlightedItem hli,const QCString &relPath ) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); startQuickIndexList(t,compact); if (documentedNamespaces>0) { @@ -1745,7 +1745,11 @@ static void writeNamespaceSubIndex(QTextStream &t,bool compact, { t << fixSpaces(theTranslator->trPackages()); } - else + else if(fortranOpt) + { + t << theTranslator->trModulesList(); + } + else { t << theTranslator->trNamespaceList(); } @@ -1759,7 +1763,11 @@ static void writeNamespaceSubIndex(QTextStream &t,bool compact, { t << fixSpaces(theTranslator->trPackageMembers()); } - else + else if(fortranOpt) + { + t << fixSpaces(theTranslator->trModulesMembers()); + } + else { t << fixSpaces(theTranslator->trNamespaceMembers()); } @@ -1772,6 +1780,8 @@ static void writeClassSubIndex(QTextStream &t,bool compact, HighlightedItem hli,const QCString &relPath ) { + bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt=Config_getBool("OPTIMIZE_OUTPUT_VHDL"); startQuickIndexList(t,compact); if (annotatedClasses>0) { @@ -1784,21 +1794,46 @@ static void writeClassSubIndex(QTextStream &t,bool compact, } startQuickIndexItem(t,"annotated"+Doxygen::htmlFileExtension, hli==HLI_Annotated,compact,relPath); - t << fixSpaces(theTranslator->trCompoundList()); + if (fortranOpt) + { + t << fixSpaces(theTranslator->trCompoundListFortran()); + } + else if (vhdlOpt) + { + t << fixSpaces(VhdlDocGen::trDesignUnitList()); + } + else + { + t << fixSpaces(theTranslator->trCompoundList()); + } + endQuickIndexItem(t); } if (hierarchyClasses>0) { + QCString title = theTranslator->trClassHierarchy(); + if (vhdlOpt) title = VhdlDocGen::trDesignUnitHierarchy(); startQuickIndexItem(t,"hierarchy"+Doxygen::htmlFileExtension, hli==HLI_Hierarchy,compact,relPath); - t << fixSpaces(theTranslator->trClassHierarchy()); + t << fixSpaces(title); endQuickIndexItem(t); } if (documentedClassMembers[CMHL_All]>0) { startQuickIndexItem(t,"functions"+Doxygen::htmlFileExtension, hli==HLI_Functions,compact,relPath); - t << fixSpaces(theTranslator->trCompoundMembers()); + if (fortranOpt) + { + t << fixSpaces(theTranslator->trCompoundMembersFortran()); + } + else if (vhdlOpt) + { + t << fixSpaces(VhdlDocGen::trDesignUnitMembers()); + } + else + { + t << fixSpaces(theTranslator->trCompoundMembers()); + } endQuickIndexItem(t); } endQuickIndexList(t,compact); @@ -1828,6 +1863,8 @@ static void writeFileSubIndex(QTextStream &t,bool compact, static void writeDefaultQuickLinks(QTextStream &t,bool compact, HighlightedItem hli,const QCString &relPath) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); startQuickIndexList(t,compact); if (Config_getBool("GENERATE_TREEVIEW")) @@ -1843,6 +1880,18 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, t << fixSpaces(theTranslator->trMainPage()); endQuickIndexItem(t); + // -------------- Related pages + + if (indexedPages>0) + { + startQuickIndexItem(t,"pages"+Doxygen::htmlFileExtension, + hli==HLI_Pages,compact,relPath); + t << fixSpaces(theTranslator->trRelatedPages()); + endQuickIndexItem(t); + } + + // --------------- Modules + if (documentedGroups>0) { startQuickIndexItem(t,"modules"+Doxygen::htmlFileExtension, @@ -1862,6 +1911,10 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, { t << fixSpaces(theTranslator->trPackages()); } + else if (fortranOpt) + { + t << theTranslator->trModules(); + } else { t << theTranslator->trNamespaces(); @@ -1885,7 +1938,18 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, hli==HLI_Annotated || hli==HLI_Functions || hli==HLI_ClassVisible, compact,relPath); } - t << fixSpaces(theTranslator->trClasses()); + if (fortranOpt) + { + t << fixSpaces(theTranslator->trDataTypes()); + } + else if (vhdlOpt) + { + t << fixSpaces(VhdlDocGen::trDesignUnits()); + } + else + { + t << fixSpaces(theTranslator->trClasses()); + } endQuickIndexItem(t); if (!compact) { @@ -1919,16 +1983,6 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, endQuickIndexItem(t); } - // -------------- Related pages - - if (indexedPages>0) - { - startQuickIndexItem(t,"pages"+Doxygen::htmlFileExtension, - hli==HLI_Pages,compact,relPath); - t << fixSpaces(theTranslator->trRelatedPages()); - endQuickIndexItem(t); - } - // -------------- Examples if (Doxygen::exampleSDict->count()>0) @@ -1994,6 +2048,32 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, } +void HtmlGenerator::startQuickIndices() +{ + if (!Config_getBool("DISABLE_INDEX")) + { + t << "<div class=\"navigation\" id=\"top\">" << endl; + } +} + +void HtmlGenerator::endQuickIndices() +{ + if (!Config_getBool("DISABLE_INDEX")) + { + t << "</div>" << endl; + } +} + +void HtmlGenerator::startContents() +{ + t << "<div class=\"contents\">" << endl; +} + +void HtmlGenerator::endContents() +{ + t << "</div>" << endl; +} + void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli) { writeDefaultQuickLinks(t,compact,hli,relPath); @@ -2008,9 +2088,7 @@ void HtmlGenerator::writeSearchPage() if (f.open(IO_WriteOnly)) { QTextStream t(&f); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); if (g_header.isEmpty()) { writeDefaultHeaderFile(t,theTranslator->trSearch().data(),0,FALSE); diff --git a/src/htmlgen.h b/src/htmlgen.h index 3af767c..9f97d35 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -54,6 +54,7 @@ class HtmlGenerator : public OutputGenerator void startIndexSection(IndexSections) {} void endIndexSection(IndexSections) {} + void writePageLink(const char *,bool) {} void startProjectNumber(); void endProjectNumber(); void writeStyleInfo(int part); @@ -176,7 +177,11 @@ class HtmlGenerator : public OutputGenerator void endClassDiagram(const ClassDiagram &,const char *,const char *); void startPageRef() {} void endPageRef(const char *,const char *) {} + void startQuickIndices(); + void endQuickIndices(); void writeQuickLinks(bool compact,HighlightedItem hli); + void startContents(); + void endContents(); void writeNonBreakableSpace(int); void startDescTable() diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index 1ff3101..d77fe1c 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -299,9 +299,7 @@ void HtmlHelp::initialize() } /* Write the header of the contents file */ cts.setDevice(cf); -#if QT_VERSION >= 200 - cts.setEncoding(QTextStream::Latin1); -#endif + cts.setEncoding(QTextStream::UnicodeUTF8); cts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n" "<HTML><HEAD></HEAD><BODY>\n" "<OBJECT type=\"text/site properties\">\n" @@ -319,9 +317,7 @@ void HtmlHelp::initialize() } /* Write the header of the contents file */ kts.setDevice(kf); -#if QT_VERSION >= 200 - kts.setEncoding(QTextStream::Latin1); -#endif + kts.setEncoding(QTextStream::UnicodeUTF8); kts << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">\n" "<HTML><HEAD></HEAD><BODY>\n" "<OBJECT type=\"text/site properties\">\n" @@ -413,7 +409,7 @@ void HtmlHelp::createProjectFile() { QTextStream t(&f); #if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); #endif @@ -572,12 +568,14 @@ void HtmlHelp::addContentsItem(bool isDir, * \param contRef the output file refering to the container. * \param memRef the output file containing to the member documentation. * \param anchor the anchor of the item. + * \param md the member definition corresponding to this item. * \sa HtmlHelpIndex */ void HtmlHelp::addIndexItem(const char *level1, const char *level2, const char *contRef, const char *memRef, - const char *anchor) + const char *anchor,const MemberDef *md) { + (void)md; index->addItem(level1,level2,contRef,anchor,TRUE,FALSE); index->addItem(level2,level1,memRef,anchor,TRUE,TRUE); } diff --git a/src/htmlhelp.h b/src/htmlhelp.h index fb11d87..23a5d19 100644 --- a/src/htmlhelp.h +++ b/src/htmlhelp.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -75,7 +75,7 @@ class HtmlHelp : public IndexIntf const char *anchor = 0); void addIndexItem(const char *level1, const char *level2, const char *contRef, const char *memRef, - const char *anchor); + const char *anchor,const MemberDef *md); void addIndexFile(const char *name); private: diff --git a/src/image.cpp b/src/image.cpp index 799ef75..c2d79d5 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/image.h b/src/image.h index 11e15a6..f440b50 100644 --- a/src/image.h +++ b/src/image.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/index.cpp b/src/index.cpp index 100cf99..ad8647a 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -40,6 +40,7 @@ #include "dot.h" #include "pagedef.h" #include "dirdef.h" +#include "vhdldocgen.h" #define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200 #define MAX_ITEMS_BEFORE_QUICK_INDEX 30 @@ -187,12 +188,12 @@ static void startQuickIndexList(OutputList &ol) bool fancyTabs = TRUE; if (fancyTabs) { - ol.writeString("<div class=\"tabs\">\n"); - ol.writeString(" <ul>\n"); + ol.writeString(" <div class=\"tabs\">\n"); + ol.writeString(" <ul>\n"); } else { - ol.writeString("<div class=\"qindex\">"); + ol.writeString(" <div class=\"qindex\">"); } } @@ -201,9 +202,9 @@ static void endQuickIndexList(OutputList &ol) bool fancyTabs = TRUE; if (fancyTabs) { - ol.writeString(" </ul>\n"); + ol.writeString(" </ul>\n"); } - ol.writeString("</div>\n"); + ol.writeString(" </div>\n"); } static void startQuickIndexItem(OutputList &ol,const char *l, @@ -214,7 +215,7 @@ static void startQuickIndexItem(OutputList &ol,const char *l, first=FALSE; if (fancyTabs) { - ol.writeString(" <li"); + ol.writeString(" <li"); if (hl) ol.writeString(" class=\"current\""); ol.writeString("><a "); } @@ -268,14 +269,31 @@ void endTitle(OutputList &ol,const char *fileName,const char *name) } void startFile(OutputList &ol,const char *name,const char *manName, - const char *title,HighlightedItem hli) + const char *title,HighlightedItem hli,bool additionalIndices) { ol.startFile(name,manName,title); - if (!Config_getBool("DISABLE_INDEX")) ol.writeQuickLinks(TRUE,hli); + if (!Config_getBool("DISABLE_INDEX")) + { + ol.startQuickIndices(); + ol.writeQuickLinks(TRUE,hli); + if (!additionalIndices) + { + ol.endQuickIndices(); + ol.startContents(); + } + } + else + { + if (!additionalIndices) + { + ol.startContents(); + } + } } void endFile(OutputList &ol,bool) { + ol.endContents(); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); ol.writeFooter(); // write the footer @@ -564,6 +582,7 @@ int countClassHierarchy() void writeHierarchicalIndex(OutputList &ol) { + bool vhdlOpt=Config_getBool("OPTIMIZE_OUTPUT_VHDL"); if (hierarchyClasses==0) return; ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); @@ -571,10 +590,11 @@ void writeHierarchicalIndex(OutputList &ol) HLI_Hierarchy); startTitle(ol,0); QCString title = theTranslator->trClassHierarchy(); - if (!Config_getString("PROJECT_NAME").isEmpty()) - { - title.prepend(Config_getString("PROJECT_NAME")+" "); - } + if (vhdlOpt) title = VhdlDocGen::trDesignUnitHierarchy(); + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); @@ -606,11 +626,14 @@ void writeGraphicalClassHierarchy(OutputList &ol) QCString title = theTranslator->trGraphicalHierarchy(); startFile(ol,"inherits",0,title.data(),HLI_Hierarchy); startTitle(ol,0); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); - Doxygen::indexList.addContentsItem(FALSE,title,0,"inherits",0); + Doxygen::indexList.addContentsItem(FALSE,theTranslator->trGraphicalHierarchy(),0,"inherits",0); ol.startTextLink("hierarchy",0); ol.parseText(theTranslator->trGotoTextualHierarchy()); ol.endTextLink(); @@ -667,11 +690,14 @@ void writeFileIndex(OutputList &ol) startFile(ol,"files",0,theTranslator->trFileIndex().data(),HLI_Files); startTitle(ol,0); QCString title = theTranslator->trFileList(); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); - Doxygen::indexList.addContentsItem(TRUE,title,0,"files",0); + Doxygen::indexList.addContentsItem(TRUE,theTranslator->trFileList(),0,"files",0); Doxygen::indexList.incContentsDepth(); ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL"))); ol.endTextBlock(); @@ -827,6 +853,7 @@ int countNamespaces() void writeNamespaceIndex(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (documentedNamespaces==0) return; ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); @@ -836,14 +863,23 @@ void writeNamespaceIndex(OutputList &ol) startFile(ol,"namespaces",0,theTranslator->trPackageList().data(),HLI_Namespaces); title = theTranslator->trPackageList(); } + else if (fortranOpt) + { + startFile(ol,"namespaces",0,theTranslator->trModulesIndex().data(),HLI_Namespaces); + title = theTranslator->trModulesList(); + } else { startFile(ol,"namespaces",0,theTranslator->trNamespaceIndex().data(),HLI_Namespaces); title = theTranslator->trNamespaceList(); } startTitle(ol,0); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); - ol.parseText(title); + QCString longTitle = title; + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // longTitle.prepend(Config_getString("PROJECT_NAME")+" "); + //} + ol.parseText(longTitle); endTitle(ol,0,0); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,title,0,"namespaces",0); @@ -853,6 +889,10 @@ void writeNamespaceIndex(OutputList &ol) { ol.parseText(theTranslator->trPackageListDescription()); } + else if (fortranOpt) + { + ol.parseText(theTranslator->trModulesListDescription(Config_getBool("EXTRACT_ALL"))); + } else { ol.parseText(theTranslator->trNamespaceListDescription(Config_getBool("EXTRACT_ALL"))); @@ -947,7 +987,8 @@ void writeAnnotatedClassList(OutputList &ol) { if (cd->isLinkableInProject() && cd->templateMaster()==0) { - int c = cd->displayName().at(getPrefixIndex(cd->displayName())); + QCString dispName = cd->displayName(); + int c = dispName.at(getPrefixIndex(dispName)); g_classIndexLetterUsed[CHL_All][c]=TRUE; switch(cd->compoundType()) { @@ -1242,12 +1283,18 @@ void writeAlphabeticalClassList(OutputList &ol) void writeAlphabeticalIndex(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); if (annotatedClasses==0) return; ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); startFile(ol,"classes"+Doxygen::htmlFileExtension,0,theTranslator->trAlphabeticalList().data(),HLI_Classes); startTitle(ol,0); - ol.parseText(Config_getString("PROJECT_NAME")+" "+theTranslator->trCompoundIndex()); + ol.parseText(/*Config_getString("PROJECT_NAME")+" "+*/ + (fortranOpt ? theTranslator->trCompoundIndexFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitIndex() : + theTranslator->trCompoundIndex() + )); endTitle(ol,0,0); writeAlphabeticalClassList(ol); endFile(ol); @@ -1258,20 +1305,31 @@ void writeAlphabeticalIndex(OutputList &ol) void writeAnnotatedIndex(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); if (annotatedClasses==0) return; ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); - QCString title = theTranslator->trCompoundList(); + QCString title = fortranOpt ? theTranslator->trCompoundListFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitList() : + theTranslator->trCompoundList() ; startFile(ol,"annotated",0,title.data(),HLI_Annotated); startTitle(ol,0); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); - ol.parseText(title); + QCString longTitle = title; + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // longTitle.prepend(Config_getString("PROJECT_NAME")+" "); + //} + ol.parseText(longTitle); endTitle(ol,0,0); ol.startTextBlock(); Doxygen::indexList.addContentsItem(TRUE,title,0,"annotated",0); Doxygen::indexList.incContentsDepth(); - ol.parseText(theTranslator->trCompoundListDescription()); + QCString desc = fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : + theTranslator->trCompoundListDescription() ; + ol.parseText(desc); ol.endTextBlock(); writeAnnotatedClassList(ol); Doxygen::indexList.decContentsDepth(); @@ -1427,13 +1485,18 @@ void initClassMemberIndices() void addClassMemberNameToIndex(MemberDef *md) { static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); ClassDef *cd=0; if (md->isLinkableInProject() && - (cd=md->getClassDef()) && + (cd=md->getClassDef()) && cd->isLinkableInProject() && cd->templateMaster()==0) { + if (vhdlOpt && (VhdlDocGen::isRecord(md) || VhdlDocGen::isUnit(md))) + { + VhdlDocGen::adjustRecordMember(md); + } QCString n = md->name(); int index = getPrefixIndex(n); int letter = tolower(n.at(index)) & 0x7f; @@ -1650,6 +1713,9 @@ void writeQuickMemberIndex(OutputList &ol, static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl) { if (documentedClassMembers[hl]==0) return; + + static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); bool multiPageIndex=FALSE; int numPages=1; @@ -1667,7 +1733,10 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h } cmhlInfo[] = { CmhlInfo("functions", theTranslator->trAll()), - CmhlInfo("functions_func",theTranslator->trFunctions()), + CmhlInfo("functions_func", + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()), CmhlInfo("functions_vars",theTranslator->trVariables()), CmhlInfo("functions_type",theTranslator->trTypedefs()), CmhlInfo("functions_enum",theTranslator->trEnumerations()), @@ -1681,7 +1750,9 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h ol.disableAllBut(OutputGenerator::Html); QCString extension=Doxygen::htmlFileExtension; - QCString title = theTranslator->trCompoundMembers(); + QCString title = fortranOpt ? theTranslator->trCompoundMembersFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitMembers() : + theTranslator->trCompoundMembers() ; if (hl!=CMHL_All) title+=(QCString)" - "+cmhlInfo[hl].title; int page; @@ -1696,7 +1767,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h fileName+=QCString().sprintf("_0x%02x",page); } - startFile(ol,fileName+extension,0,title,HLI_Functions); + startFile(ol,fileName+extension,0,title,HLI_Functions,TRUE); startQuickIndexList(ol); @@ -1729,9 +1800,15 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h writeQuickMemberIndex(ol,g_memberIndexLetterUsed[hl],page, cmhlInfo[hl].fname,multiPageIndex); } + + ol.endQuickIndices(); + ol.startContents(); + if (hl==CMHL_All) { - ol.parseText(theTranslator->trCompoundMembersDescription(Config_getBool("EXTRACT_ALL"))); + static bool extractAll = Config_getBool("EXTRACT_ALL"); + ol.parseText(fortranOpt ? theTranslator->trCompoundMembersDescriptionFortran(extractAll) : + theTranslator->trCompoundMembersDescription(extractAll)); } else { @@ -1754,6 +1831,7 @@ static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight h void writeClassMemberIndex(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); writeClassMemberIndexFiltered(ol,CMHL_All); writeClassMemberIndexFiltered(ol,CMHL_Functions); writeClassMemberIndexFiltered(ol,CMHL_Variables); @@ -1766,7 +1844,7 @@ void writeClassMemberIndex(OutputList &ol) if (documentedClassMembers[CMHL_All]>0) { - QCString title = theTranslator->trCompoundMembers(); + QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers(); Doxygen::indexList.addContentsItem(FALSE,title,0,"functions",0); } } @@ -1777,6 +1855,8 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) { if (documentedFileMembers[hl]==0) return; + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); bool multiPageIndex=FALSE; int numPages=1; if (documentedFileMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX) @@ -1793,7 +1873,10 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) } fmhlInfo[] = { FmhlInfo("globals", theTranslator->trAll()), - FmhlInfo("globals_func",theTranslator->trFunctions()), + FmhlInfo("globals_func", + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()), FmhlInfo("globals_vars",theTranslator->trVariables()), FmhlInfo("globals_type",theTranslator->trTypedefs()), FmhlInfo("globals_enum",theTranslator->trEnumerations()), @@ -1805,7 +1888,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) ol.disableAllBut(OutputGenerator::Html); QCString extension=Doxygen::htmlFileExtension; - QCString title = theTranslator->trCompoundMembers(); + QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers(); int page; bool first=TRUE; @@ -1819,7 +1902,7 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) fileName+=QCString().sprintf("_0x%02x",page); } - startFile(ol,fileName+extension,0,title.data(),HLI_Globals); + startFile(ol,fileName+extension,0,title.data(),HLI_Globals,TRUE); startQuickIndexList(ol); @@ -1851,6 +1934,9 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) fmhlInfo[hl].fname,multiPageIndex); } + ol.endQuickIndices(); + ol.startContents(); + if (hl==FMHL_All) { ol.parseText(theTranslator->trFileMembersDescription(Config_getBool("EXTRACT_ALL"))); @@ -1899,6 +1985,9 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, { if (documentedNamespaceMembers[hl]==0) return; + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + bool multiPageIndex=FALSE; int numPages=1; if (documentedNamespaceMembers[hl]>MAX_ITEMS_BEFORE_MULTIPAGE_INDEX) @@ -1915,7 +2004,10 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, } nmhlInfo[] = { NmhlInfo("namespacemembers", theTranslator->trAll()), - NmhlInfo("namespacemembers_func",theTranslator->trFunctions()), + NmhlInfo("namespacemembers_func", + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()), NmhlInfo("namespacemembers_vars",theTranslator->trVariables()), NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()), NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()), @@ -1926,7 +2018,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, ol.disableAllBut(OutputGenerator::Html); QCString extension=Doxygen::htmlFileExtension; - QCString title = theTranslator->trCompoundMembers(); + QCString title = fortranOpt?theTranslator->trCompoundMembersFortran():theTranslator->trCompoundMembers(); int page; bool first=TRUE; @@ -1940,7 +2032,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, fileName+=QCString().sprintf("_0x%02x",page); } - startFile(ol,fileName+extension,0,title,HLI_NamespaceMembers); + startFile(ol,fileName+extension,0,title,HLI_NamespaceMembers,TRUE); startQuickIndexList(ol); @@ -1969,9 +2061,13 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, writeQuickMemberIndex(ol,g_namespaceIndexLetterUsed[hl],page, nmhlInfo[hl].fname,multiPageIndex); } + + ol.endQuickIndices(); + ol.startContents(); + if (hl==NMHL_All) { - ol.parseText(theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL"))); + ol.parseText(fortranOpt?theTranslator->trModulesMemberDescription(Config_getBool("EXTRACT_ALL")):theTranslator->trNamespaceMemberDescription(Config_getBool("EXTRACT_ALL"))); } else { @@ -1994,6 +2090,7 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol, void writeNamespaceMemberIndex(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); writeNamespaceMemberIndexFiltered(ol,NMHL_All); writeNamespaceMemberIndexFiltered(ol,NMHL_Functions); writeNamespaceMemberIndexFiltered(ol,NMHL_Variables); @@ -2003,7 +2100,7 @@ void writeNamespaceMemberIndex(OutputList &ol) if (documentedNamespaceMembers[NMHL_All]>0) { - QCString title = theTranslator->trNamespaceMembers(); + QCString title = fortranOpt?theTranslator->trModulesMembers():theTranslator->trNamespaceMembers(); Doxygen::indexList.addContentsItem(FALSE,title,0,"namespacemembers",0); } } @@ -2018,11 +2115,14 @@ void writeExampleIndex(OutputList &ol) QCString title = theTranslator->trExamples(); startFile(ol,"examples",0,title.data(),HLI_Examples); startTitle(ol,0); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); - Doxygen::indexList.addContentsItem(TRUE,title,0,"examples",0); + Doxygen::indexList.addContentsItem(TRUE,theTranslator->trExamples(),0,"examples",0); Doxygen::indexList.incContentsDepth(); ol.parseText(theTranslator->trExamplesDescription()); //ol.newParagraph(); @@ -2107,16 +2207,19 @@ void writePageIndex(OutputList &ol) { if (indexedPages==0) return; ol.pushGeneratorState(); - ol.disable(OutputGenerator::Man); + ol.disableAllBut(OutputGenerator::Html); startFile(ol,"pages",0,theTranslator->trPageIndex().data(),HLI_Pages); startTitle(ol,0); QCString title = theTranslator->trRelatedPages(); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); - Doxygen::indexList.addContentsItem(TRUE,title,0,"pages",0); - Doxygen::indexList.incContentsDepth(); + //Doxygen::indexList.addContentsItem(TRUE,theTranslator->trRelatedPages(),0,"pages",0); + //Doxygen::indexList.incContentsDepth(); ol.parseText(theTranslator->trRelatedPagesDescription()); ol.endTextBlock(); startIndexHierarchy(ol,0); @@ -2248,6 +2351,8 @@ void writeGroupIndexItem(GroupDef *gd,MemberList *ml,const QCString &title) */ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); if (level>20) { warn(gd->getDefFileName(),gd->getDefLine(), @@ -2347,7 +2452,10 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) writeGroupIndexItem(gd,gd->getMemberList(MemberList::docEnumMembers), theTranslator->trEnumerations()); writeGroupIndexItem(gd,gd->getMemberList(MemberList::docFuncMembers), - theTranslator->trFunctions()); + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions() + ); writeGroupIndexItem(gd,gd->getMemberList(MemberList::docVarMembers), theTranslator->trVariables()); writeGroupIndexItem(gd,gd->getMemberList(MemberList::docProtoMembers), @@ -2357,7 +2465,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) NamespaceSDict *namespaceSDict=gd->namespaceSDict; if (namespaceSDict->count()>0) { - Doxygen::indexList.addContentsItem(TRUE, convertToHtml(theTranslator->trNamespaces(),TRUE),gd->getReference(), gd->getOutputFileBase(), 0); + Doxygen::indexList.addContentsItem(TRUE,convertToHtml(fortranOpt?theTranslator->trModules():theTranslator->trNamespaces(),TRUE),gd->getReference(), gd->getOutputFileBase(), 0); Doxygen::indexList.incContentsDepth(); NamespaceSDict::Iterator ni(*namespaceSDict); @@ -2372,7 +2480,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level) // write classes if (gd->classSDict->count()>0) { - Doxygen::indexList.addContentsItem(TRUE, convertToHtml(theTranslator->trClasses(),TRUE), gd->getReference(), gd->getOutputFileBase(), 0); + Doxygen::indexList.addContentsItem(TRUE,convertToHtml(fortranOpt?theTranslator->trDataTypes():theTranslator->trClasses(),TRUE), gd->getReference(), gd->getOutputFileBase(), 0); Doxygen::indexList.incContentsDepth(); ClassDef *cd; @@ -2529,11 +2637,14 @@ void writeGroupIndex(OutputList &ol) startFile(ol,"modules",0,theTranslator->trModuleIndex().data(),HLI_Modules); startTitle(ol,0); QCString title = theTranslator->trModules(); - if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" "); + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); - Doxygen::indexList.addContentsItem(TRUE,title,0,"modules",0); + Doxygen::indexList.addContentsItem(TRUE,theTranslator->trModules(),0,"modules",0); Doxygen::indexList.incContentsDepth(); ol.parseText(theTranslator->trModulesDescription()); @@ -2554,14 +2665,14 @@ void writeDirIndex(OutputList &ol) startFile(ol,"dirs",0,theTranslator->trDirIndex().data(),HLI_Directories); startTitle(ol,0); QCString title = theTranslator->trDirectories(); - if (!Config_getString("PROJECT_NAME").isEmpty()) - { - title.prepend(Config_getString("PROJECT_NAME")+" "); - } + //if (!Config_getString("PROJECT_NAME").isEmpty()) + //{ + // title.prepend(Config_getString("PROJECT_NAME")+" "); + //} ol.parseText(title); endTitle(ol,0,0); ol.startTextBlock(); - Doxygen::indexList.addContentsItem(TRUE,title,0,"dirs",0); + Doxygen::indexList.addContentsItem(TRUE,theTranslator->trDirIndex(),0,"dirs",0); Doxygen::indexList.incContentsDepth(); ol.parseText(theTranslator->trDirDescription()); ol.endTextBlock(); @@ -2587,6 +2698,8 @@ static bool mainPageHasTitle() void writeIndex(OutputList &ol) { + static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); // save old generator state ol.pushGeneratorState(); @@ -2630,7 +2743,13 @@ void writeIndex(OutputList &ol) } } - if (!Config_getBool("DISABLE_INDEX")) ol.writeQuickLinks(TRUE,HLI_Main); + if (!Config_getBool("DISABLE_INDEX")) + { + ol.startQuickIndices(); + ol.writeQuickLinks(TRUE,HLI_Main); + ol.endQuickIndices(); + } + ol.startContents(); ol.startTitleHead(0); if (Doxygen::mainPage && !Doxygen::mainPage->title().isEmpty()) { @@ -2701,7 +2820,15 @@ void writeIndex(OutputList &ol) ol.disable(OutputGenerator::Latex); } - ol.parseText(projPrefix+theTranslator->trReferenceManual()); + if (projPrefix.isEmpty()) + { + ol.parseText(theTranslator->trReferenceManual()); + } + else + { + ol.parseText(projPrefix); + } + if (!Config_getString("PROJECT_NUMBER").isEmpty()) { ol.startProjectNumber(); @@ -2714,6 +2841,7 @@ void writeIndex(OutputList &ol) ol.endIndexSection(isTitlePageAuthor); ol.enable(OutputGenerator::Latex); + ol.lastIndexPage(); if (Doxygen::mainPage) { ol.startIndexSection(isMainPage); @@ -2723,99 +2851,121 @@ void writeIndex(OutputList &ol) } else { - ol.parseText(projPrefix+theTranslator->trMainPage()); + ol.parseText(/*projPrefix+*/theTranslator->trMainPage()); } ol.endIndexSection(isMainPage); } + if (documentedPages>0) + { + //ol.parseText(projPrefix+theTranslator->trPageDocumentation()); + //ol.endIndexSection(isPageDocumentation); + PageSDict::Iterator pdi(*Doxygen::pageSDict); + PageDef *pd=pdi.toFirst(); + bool first=Doxygen::mainPage==0; + for (pdi.toFirst();(pd=pdi.current());++pdi) + { + if (!pd->getGroupDef() && !pd->isReference()) + { + QCString title = pd->title(); + if (title.isEmpty()) title=pd->name(); + ol.startIndexSection(isPageDocumentation); + ol.parseText(title); + ol.endIndexSection(isPageDocumentation); + + ol.writePageLink(pd->getOutputFileBase(),first); + first=FALSE; + } + } + } if (!Config_getBool("LATEX_HIDE_INDICES")) { + //if (indexedPages>0) + //{ + // ol.startIndexSection(isPageIndex); + // ol.parseText(/*projPrefix+*/ theTranslator->trPageIndex()); + // ol.endIndexSection(isPageIndex); + //} if (documentedGroups>0) { ol.startIndexSection(isModuleIndex); - ol.parseText(projPrefix+theTranslator->trModuleIndex()); + ol.parseText(/*projPrefix+*/ theTranslator->trModuleIndex()); ol.endIndexSection(isModuleIndex); } if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0) { ol.startIndexSection(isDirIndex); - ol.parseText(projPrefix+theTranslator->trDirIndex()); + ol.parseText(/*projPrefix+*/ theTranslator->trDirIndex()); ol.endIndexSection(isDirIndex); } if (documentedNamespaces>0) { ol.startIndexSection(isNamespaceIndex); - ol.parseText(projPrefix+theTranslator->trNamespaceIndex()); + ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trModulesIndex():theTranslator->trNamespaceIndex())); ol.endIndexSection(isNamespaceIndex); } if (hierarchyClasses>0) { ol.startIndexSection(isClassHierarchyIndex); - ol.parseText(projPrefix+theTranslator->trHierarchicalIndex()); + ol.parseText(/*projPrefix+*/ + (fortranOpt ? theTranslator->trCompoundIndexFortran() : + vhdlOpt ? VhdlDocGen::trDesignUnitIndex() : + theTranslator->trCompoundIndex() + )); ol.endIndexSection(isClassHierarchyIndex); } if (annotatedClasses>0) { ol.startIndexSection(isCompoundIndex); - ol.parseText(projPrefix+theTranslator->trCompoundIndex()); + ol.parseText(/*projPrefix+*/ + (vhdlOpt ? VhdlDocGen::trDesignUnitIndex() : + theTranslator->trCompoundIndex() + )); ol.endIndexSection(isCompoundIndex); } if (documentedFiles>0) { ol.startIndexSection(isFileIndex); - ol.parseText(projPrefix+theTranslator->trFileIndex()); + ol.parseText(/*projPrefix+*/theTranslator->trFileIndex()); ol.endIndexSection(isFileIndex); } - if (indexedPages>0) - { - ol.startIndexSection(isPageIndex); - ol.parseText(projPrefix+theTranslator->trPageIndex()); - ol.endIndexSection(isPageIndex); - } } - ol.lastIndexPage(); if (documentedGroups>0) { ol.startIndexSection(isModuleDocumentation); - ol.parseText(projPrefix+theTranslator->trModuleDocumentation()); + ol.parseText(/*projPrefix+*/theTranslator->trModuleDocumentation()); ol.endIndexSection(isModuleDocumentation); } if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0) { ol.startIndexSection(isDirDocumentation); - ol.parseText(projPrefix+theTranslator->trDirDocumentation()); + ol.parseText(/*projPrefix+*/theTranslator->trDirDocumentation()); ol.endIndexSection(isDirDocumentation); } if (documentedNamespaces>0) { ol.startIndexSection(isNamespaceDocumentation); - ol.parseText(projPrefix+theTranslator->trNamespaceDocumentation()); + ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trModuleDocumentation():theTranslator->trNamespaceDocumentation())); ol.endIndexSection(isNamespaceDocumentation); } if (annotatedClasses>0) { ol.startIndexSection(isClassDocumentation); - ol.parseText(projPrefix+theTranslator->trClassDocumentation()); + ol.parseText(/*projPrefix+*/(fortranOpt?theTranslator->trTypeDocumentation():theTranslator->trClassDocumentation())); ol.endIndexSection(isClassDocumentation); } if (documentedFiles>0) { ol.startIndexSection(isFileDocumentation); - ol.parseText(projPrefix+theTranslator->trFileDocumentation()); + ol.parseText(/*projPrefix+*/theTranslator->trFileDocumentation()); ol.endIndexSection(isFileDocumentation); } if (Doxygen::exampleSDict->count()>0) { ol.startIndexSection(isExampleDocumentation); - ol.parseText(projPrefix+theTranslator->trExampleDocumentation()); + ol.parseText(/*projPrefix+*/theTranslator->trExampleDocumentation()); ol.endIndexSection(isExampleDocumentation); } - if (documentedPages>0) - { - ol.startIndexSection(isPageDocumentation); - ol.parseText(projPrefix+theTranslator->trPageDocumentation()); - ol.endIndexSection(isPageDocumentation); - } ol.endIndexSection(isEndIndex); endFile(ol); @@ -2827,7 +2977,7 @@ void writeIndex(OutputList &ol) ol.startTextBlock(); ol.parseDoc(defFileName,defLine,Doxygen::mainPage,0, Doxygen::mainPage->documentation(),FALSE,FALSE - /*,Doxygen::mainPage->sectionDict*/); + ); ol.endTextBlock(); endFile(ol); ol.enable(OutputGenerator::Man); diff --git a/src/index.h b/src/index.h index 88dc2e6..fe31d0f 100644 --- a/src/index.h +++ b/src/index.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -37,29 +37,38 @@ class IndexIntf virtual void addContentsItem(bool isDir, const char *name, const char *ref = 0, const char *file = 0, const char *anchor = 0) = 0; virtual void addIndexItem(const char *level1, const char *level2, const char *contRef, - const char *memRef, const char *anchor) = 0; + const char *memRef, const char *anchor,const MemberDef *md) = 0; virtual void addIndexFile(const char *name) = 0; }; class IndexList : public IndexIntf { + private: + QList<IndexIntf> m_intfs; + void foreach(void (IndexIntf::*methodPtr)()) { QListIterator<IndexIntf> li(m_intfs); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(); - }; + } template<typename A1> void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1) { QListIterator<IndexIntf> li(m_intfs); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1); - }; + } template<typename A1,typename A2,typename A3,typename A4,typename A5> void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { QListIterator<IndexIntf> li(m_intfs); for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5); - }; + } + template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6> + void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6) + { + QListIterator<IndexIntf> li(m_intfs); + for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6); + } public: IndexList() { m_intfs.setAutoDelete(TRUE); } @@ -78,14 +87,12 @@ class IndexList : public IndexIntf { foreach<bool,const char *,const char *,const char *,const char*> (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor); } void addIndexItem(const char *level1, const char *level2, const char *contRef, - const char *memRef, const char *anchor) - { foreach<const char *,const char *,const char *,const char *,const char *> - (&IndexIntf::addIndexItem,level1,level2,contRef,memRef,anchor); } + const char *memRef, const char *anchor,const MemberDef *md) + { foreach<const char *,const char *,const char *,const char *,const char *,const MemberDef *> + (&IndexIntf::addIndexItem,level1,level2,contRef,memRef,anchor,md); } void addIndexFile(const char *name) { foreach<const char *>(&IndexIntf::addIndexFile,name); } - private: - QList<IndexIntf> m_intfs; }; @@ -225,7 +232,8 @@ extern int documentedDirs; void startTitle(OutputList &ol,const char *fileName); void endTitle(OutputList &ol,const char *fileName,const char *name); void startFile(OutputList &ol,const char *name,const char *manName, - const char *title,HighlightedItem hli=HLI_None); + const char *title,HighlightedItem hli=HLI_None, + bool additionalIndices=FALSE); void endFile(OutputList &ol,bool external=FALSE); void initClassMemberIndices(); diff --git a/src/instdox.cpp b/src/instdox.cpp index 7aae5f6..03b3130 100644 --- a/src/instdox.cpp +++ b/src/instdox.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/instdox.h b/src/instdox.h index 7d20788..4b27b20 100644 --- a/src/instdox.h +++ b/src/instdox.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/language.cpp b/src/language.cpp index a1d043f..39c9e66 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -128,6 +128,9 @@ #ifdef LANG_FA #include "translator_fa.h" #endif +#ifdef LANG_MK +#include "translator_mk.h" +#endif #endif // !ENGLISH_ONLY #define L_EQUAL(a) !stricmp(langName,a) @@ -184,7 +187,7 @@ bool setTranslator(const char *langName) #ifdef LANG_IT else if (L_EQUAL("italian")) { - theTranslator=new TranslatorDecoder(new TranslatorItalian); + theTranslator=new TranslatorItalian; } #endif #ifdef LANG_DE @@ -357,6 +360,12 @@ bool setTranslator(const char *langName) theTranslator=new TranslatorDecoder(new TranslatorPersian); } #endif +#ifdef LANG_MK + else if (L_EQUAL("macedonian")) + { + theTranslator=new TranslatorMacedonian; + } +#endif #endif // ENGLISH_ONLY else // use the default language (i.e. english) { diff --git a/src/language.h b/src/language.h index bd97124..cc00dff 100644 --- a/src/language.h +++ b/src/language.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index c5293de..3d7b8c7 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -588,7 +588,7 @@ void LatexDocVisitor::visitPre(DocSection *s) m_t << "\\hypertarget{" << s->file() << "_" << s->anchor() << "}{}"; } m_t << "\\" << getSectionName(s->level()) << "{"; - filter(s->title()); + filter(convertCharEntitiesToUTF8(s->title().data())); m_t << "}\\label{" << s->file() << "_" << s->anchor() << "}" << endl; } diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index 5a904ba..413ea68 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 6561404..05d5b72 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -380,9 +380,7 @@ void LatexGenerator::writeHeaderFile(QFile &f) void LatexGenerator::writeStyleSheetFile(QFile &f) { QTextStream t(&f); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); writeDefaultStyleSheetPart1(t); QCString &projectName = Config_getString("PROJECT_NAME"); @@ -390,12 +388,12 @@ void LatexGenerator::writeStyleSheetFile(QFile &f) t << theTranslator->trGeneratedAt( dateToString(TRUE), projectName ); t << " doxygen"; //t << " " << theTranslator->trWrittenBy() << " "; - //t << "Dimitri van Heesch \\copyright~1997-2007"; + //t << "Dimitri van Heesch \\copyright~1997-2008"; writeDefaultStyleSheetPart2(t); t << theTranslator->trGeneratedAt( dateToString(TRUE), projectName ); t << " doxygen"; //t << " << theTranslator->trWrittenBy() << " "; - //t << "Dimitri van Heesch \\copyright~1997-2007"; + //t << "Dimitri van Heesch \\copyright~1997-2008"; writeDefaultStyleSheetPart3(t); } @@ -776,6 +774,7 @@ void LatexGenerator::endIndexSection(IndexSections is) case isPageDocumentation: { t << "}\n"; +#if 0 PageSDict::Iterator pdi(*Doxygen::pageSDict); PageDef *pd=pdi.toFirst(); bool first=TRUE; @@ -783,11 +782,16 @@ void LatexGenerator::endIndexSection(IndexSections is) { if (!pd->getGroupDef() && !pd->isReference()) { + if (compactLatex) t << "\\section"; else t << "\\chapter"; + t << "{" << pd->title(); + t << "}\n"; + if (compactLatex || first) t << "\\input" ; else t << "\\include"; t << "{" << pd->getOutputFileBase() << "}\n"; first=FALSE; } } +#endif } break; case isEndIndex: @@ -796,6 +800,15 @@ void LatexGenerator::endIndexSection(IndexSections is) break; } } + +void LatexGenerator::writePageLink(const char *name, bool first) +{ + bool &compactLatex = Config_getBool("COMPACT_LATEX"); + if (compactLatex || first) t << "\\input" ; else t << "\\include"; + t << "{" << name << "}\n"; +} + + void LatexGenerator::writeStyleInfo(int part) { switch(part) @@ -813,14 +826,14 @@ void LatexGenerator::writeStyleInfo(int part) break; case 2: { - //t << " Dimitri van Heesch \\copyright~1997-2007"; + //t << " Dimitri van Heesch \\copyright~1997-2008"; t << "}]{}\n"; writeDefaultStyleSheetPart2(t); } break; case 4: { - //t << " Dimitri van Heesch \\copyright~1997-2007"; + //t << " Dimitri van Heesch \\copyright~1997-2008"; writeDefaultStyleSheetPart3(t); endPlainFile(); } @@ -1568,6 +1581,13 @@ void LatexGenerator::endParamList() t << "\\end{Desc}" << endl; } +void LatexGenerator::startParameterType(bool first,const char *key) +{ + if (!first) + { + t << "\\/ " << key << " "; + } +} void LatexGenerator::printDoc(DocNode *n,const char *langExt) { diff --git a/src/latexgen.h b/src/latexgen.h index 4ab92e2..b5fad84 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -52,6 +52,7 @@ class LatexGenerator : public OutputGenerator void startIndexSection(IndexSections); void endIndexSection(IndexSections); + void writePageLink(const char *,bool); void startProjectNumber(); void endProjectNumber() {} void writeStyleInfo(int part); @@ -171,7 +172,11 @@ class LatexGenerator : public OutputGenerator void endClassDiagram(const ClassDiagram &,const char *,const char *); void startPageRef(); void endPageRef(const char *,const char *); + void startQuickIndices() {} + void endQuickIndices() {} void writeQuickLinks(bool,HighlightedItem) {} + void startContents() {} + void endContents() {} void writeNonBreakableSpace(int); void startDescTable() @@ -205,7 +210,7 @@ class LatexGenerator : public OutputGenerator void endMemberDocPrefixItem() {} void startMemberDocName(bool) {} void endMemberDocName() {} - void startParameterType(bool,const char *) {} + void startParameterType(bool,const char *); void endParameterType() {} void startParameterName(bool) {} void endParameterName(bool,bool,bool) {} diff --git a/src/libdoxycfg.pro.in b/src/libdoxycfg.pro.in index 822de52..9ec1616 100644 --- a/src/libdoxycfg.pro.in +++ b/src/libdoxycfg.pro.in @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby diff --git a/src/libdoxycfg.t b/src/libdoxycfg.t index e6817d5..c3f2f3c 100644 --- a/src/libdoxycfg.t +++ b/src/libdoxycfg.t @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index 5b926f0..61218d8 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby @@ -36,6 +36,7 @@ HEADERS = bufstr.h \ diagram.h \ dirdef.h \ docparser.h \ + docsets.h \ doctokenizer.h \ docvisitor.h \ dot.h \ @@ -120,6 +121,7 @@ HEADERS = bufstr.h \ translator_kr.h \ translator_nl.h \ translator_no.h \ + translator_mk.h \ translator_pl.h \ translator_pt.h \ translator_ro.h \ @@ -134,6 +136,9 @@ HEADERS = bufstr.h \ unistd.h \ util.h \ version.h \ + vhdlcode.h \ + vhdldocgen.h \ + vhdlscanner.h \ xmldocvisitor.h \ xmlgen.h SOURCES = ce_lex.cpp \ @@ -153,6 +158,7 @@ SOURCES = ce_lex.cpp \ diagram.cpp \ dirdef.cpp \ docparser.cpp \ + docsets.cpp \ doctokenizer.cpp \ dot.cpp \ doxygen.cpp \ @@ -206,6 +212,9 @@ SOURCES = ce_lex.cpp \ translator.cpp \ util.cpp \ version.cpp \ + vhdlcode.cpp \ + vhdldocgen.cpp \ + vhdlscanner.cpp \ xmldocvisitor.cpp \ xmlgen.cpp \ commentscan.cpp diff --git a/src/libdoxygen.t b/src/libdoxygen.t index ea6e839..0ab0b3c 100644 --- a/src/libdoxygen.t +++ b/src/libdoxygen.t @@ -1,7 +1,7 @@ # -# $Id$ +# # -# Copyright (C) 1997-2007 by Dimitri van Heesch. +# Copyright (C) 1997-2008 by Dimitri van Heesch. # # Permission to use, copy, modify, and distribute this software and its # documentation under the terms of the GNU General Public License is hereby @@ -63,6 +63,12 @@ sub GenerateDep { #$ GenerateDep("fortrancode.cpp","fortrancode.l"); $(LEX) -i -PfcodeYY -t fortrancode.l | $(INCBUFSIZE) >fortrancode.cpp +#$ GenerateDep("vhdlscanner.cpp","vhdlscanner.l"); + $(LEX) -i -PvhdlscanYY -t vhdlscanner.l | $(INCBUFSIZE) >vhdlscanner.cpp + +#$ GenerateDep("vhdlcode.cpp","vhdlcode.l"); + $(LEX) -i -PvhdlcodeYY -t vhdlcode.l | $(INCBUFSIZE) >vhdlcode.cpp + #$ GenerateDep("pre.cpp","pre.l"); $(LEX) -PpreYY -t pre.l | $(INCBUFSIZE) >pre.cpp diff --git a/src/lockingptr.h b/src/lockingptr.h index f694d24..86094fb 100644 --- a/src/lockingptr.h +++ b/src/lockingptr.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/logos.cpp b/src/logos.cpp index fd939ad..c682f61 100644 --- a/src/logos.cpp +++ b/src/logos.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/logos.h b/src/logos.h index a3cc4b6..2c55624 100644 --- a/src/logos.h +++ b/src/logos.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/main.cpp b/src/main.cpp index afb5010..c8ba81f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index dee0911..61e8d0e 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h index 4274568..0be9507 100644 --- a/src/mandocvisitor.h +++ b/src/mandocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/mangen.cpp b/src/mangen.cpp index 0feab40..d917435 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -416,9 +416,7 @@ void ManGenerator::startDoxyAnchor(const char *,const char *manName, { QTextStream linkstream; linkstream.setDevice(&linkfile); -#if QT_VERSION >= 200 - linkstream.setEncoding(QTextStream::Latin1); -#endif + linkstream.setEncoding(QTextStream::UnicodeUTF8); linkstream << ".so man" << getExtension() << "/" << buildFileName( manName ) << endl; } } diff --git a/src/mangen.h b/src/mangen.h index 25a6082..3b0f85c 100644 --- a/src/mangen.h +++ b/src/mangen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -50,6 +50,7 @@ class ManGenerator : public OutputGenerator void startIndexSection(IndexSections) {} void endIndexSection(IndexSections) {} + void writePageLink(const char *,bool) {} void startProjectNumber() {} void endProjectNumber() {} void writeStyleInfo(int) {} @@ -167,7 +168,11 @@ class ManGenerator : public OutputGenerator void endClassDiagram(const ClassDiagram &,const char *,const char *) {} void startPageRef() {} void endPageRef(const char *,const char *) {} + void startQuickIndices() {} + void endQuickIndices() {} void writeQuickLinks(bool,HighlightedItem) {} + void startContents() {} + void endContents() {} void writeNonBreakableSpace(int n) { int i; for (i=0;i<n;i++) t << " "; } void startDescTable() {} diff --git a/src/marshal.cpp b/src/marshal.cpp index a032a64..8983e27 100644 --- a/src/marshal.cpp +++ b/src/marshal.cpp @@ -412,6 +412,7 @@ void marshalEntry(StorageIntf *s,Entry *e) marshalItemInfoList(s,e->sli); marshalBool(s,e->objc); marshalBool(s,e->hidden); + marshalBool(s,e->artificial); marshalInt(s,(int)e->groupDocType); } @@ -725,9 +726,9 @@ ExampleSDict *unmarshalExampleSDict(StorageIntf *s) { QCString key = unmarshalQCString(s); Example *e = new Example; - marshalQCString(s,e->anchor); - marshalQCString(s,e->name); - marshalQCString(s,e->file); + e->anchor = unmarshalQCString(s); + e->name = unmarshalQCString(s); + e->file = unmarshalQCString(s); result->inSort(key,e); } return result; @@ -807,6 +808,7 @@ Entry * unmarshalEntry(StorageIntf *s) e->sli = unmarshalItemInfoList(s); e->objc = unmarshalBool(s); e->hidden = unmarshalBool(s); + e->artificial = unmarshalBool(s); e->groupDocType = (Entry::GroupDocType)unmarshalInt(s); return e; } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index c556047..2972f34 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -38,6 +38,8 @@ #include "parserintf.h" #include "marshal.h" #include "objcache.h" +#include "vhdlscanner.h" +#include "vhdldocgen.h" #define START_MARKER 0x4D454D5B // MEM[ #define END_MARKER 0x4D454D5D // MEM] @@ -1043,7 +1045,7 @@ bool MemberDef::isBriefSectionVisible() const !hasDocs ); - //printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d" + //printf("visibleIfStatic=%d visibleIfDocumented=%d visibleIfEnabled=%d " // "visibleIfPrivate=%d visibltIfNotDefaultCDTor=%d " // "visibleIfFriendCompound=%d\n",visibleIfStatic,visibleIfDocumented, // visibleIfEnabled,visibleIfPrivate,visibleIfNotDefaultCDTor, @@ -1325,6 +1327,25 @@ void MemberDef::writeDeclaration(OutputList &ol, } } + // add to index + if (isEnumerate() && name().at(0)=='@') + { + // don't add to index + } + else // index member + { + static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + QCString cfname = getOutputFileBase(); + QCString cfiname = d->getOutputFileBase(); + Doxygen::indexList.addIndexItem( + cname, // level1 + name(), // level2 + separateMemPages ? cfname : cfiname, // contRef + cfname, // memRef + anchor(), // anchor + this); // memberdef + } + // *** write arguments if (argsString() && !isObjCMethod()) { @@ -1545,6 +1566,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, bool inFile = container->definitionType()==Definition::TypeFile; bool hasDocs = isDetailedSectionVisible(inGroup,inFile); static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); //printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n", // name().data(),hasDocs,container->definitionType(),inGroup); if ( !hasDocs ) return; @@ -1573,23 +1595,20 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, QCString cfname = getOutputFileBase(); QCString cfiname = container->getOutputFileBase(); - //static bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); - //HtmlHelp *htmlHelp = HtmlHelp::getInstance(); - //if (hasHtmlHelp) + // the next part is moved to declaration + //if (isEnumerate() && name().at(0)=='@') //{ - if (isEnumerate() && name().at(0)=='@') - { - // don't add to index - } - else - { - Doxygen::indexList.addIndexItem( - ciname, // level1 - name(), // level2 - separateMemPages ? cfname : cfiname, // contRef - cfname, // memRef - memAnchor); // anchor - } + // // don't add to index + //} + //else + //{ + // Doxygen::indexList.addIndexItem( + // ciname, // level1 + // name(), // level2 + // separateMemPages ? cfname : cfiname, // contRef + // cfname, // memRef + // memAnchor, // anchor + // this); // memberdef //} // get member name @@ -1753,9 +1772,16 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- "); } - linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef); + if (optVhdl) + { + VhdlDocGen::writeVHDLTypeDocumentation(this,container,ol); + } + else + { + linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef); + hasParameterList=writeDefArgumentList(ol,cd,scopeName,this); + } - hasParameterList=writeDefArgumentList(ol,cd,scopeName,this); if (hasOneLineInitializer()) // add initializer { if (!isDefine()) @@ -1793,36 +1819,48 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ol.startTypewriter(); ol.docify(" ["); QStrList sl; - if (isFriend()) sl.append("friend"); - else if (isRelated()) sl.append("related"); + if (optVhdl) + { + sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers())); + } else { - if (Config_getBool("INLINE_INFO") && isInline()) sl.append("inline"); - if (isExplicit()) sl.append("explicit"); - if (isMutable()) sl.append("mutable"); - if (isStatic()) sl.append("static"); - if (isGettable()) sl.append("get"); - if (isSettable()) sl.append("set"); - if (isAddable()) sl.append("add"); - if (isRemovable()) sl.append("remove"); - if (isRaisable()) sl.append("raise"); - if (isReadable()) sl.append("read"); - if (isWritable()) sl.append("write"); - if (isFinal()) sl.append("final"); - if (isAbstract()) sl.append("abstract"); - if (isOverride()) sl.append("override"); - if (isInitonly()) sl.append("initonly"); - if (isSealed()) sl.append("sealed"); - if (isNew()) sl.append("new"); - if (protection()==Protected) sl.append("protected"); - else if (protection()==Private) sl.append("private"); - else if (protection()==Package) sl.append("package"); - if (lvirt==Virtual) sl.append("virtual"); - else if (lvirt==Pure) sl.append("pure virtual"); - if (isSignal()) sl.append("signal"); - if (isSlot()) sl.append("slot"); - } - if (m_impl->classDef && m_impl->classDef!=container) sl.append("inherited"); + if (isFriend()) sl.append("friend"); + else if (isRelated()) sl.append("related"); + else + { + if (Config_getBool("INLINE_INFO") && isInline()) sl.append("inline"); + if (isExplicit()) sl.append("explicit"); + if (isMutable()) sl.append("mutable"); + if (isStatic()) sl.append("static"); + if (isGettable()) sl.append("get"); + if (isSettable()) sl.append("set"); + if (isAddable()) sl.append("add"); + if (isRemovable()) sl.append("remove"); + if (isRaisable()) sl.append("raise"); + if (isReadable()) sl.append("read"); + if (isWritable()) sl.append("write"); + if (isFinal()) sl.append("final"); + if (isAbstract()) sl.append("abstract"); + if (isOverride()) sl.append("override"); + if (isInitonly()) sl.append("initonly"); + if (isSealed()) sl.append("sealed"); + if (isNew()) sl.append("new"); + if (isOptional()) sl.append("optional"); + if (isRequired()) sl.append("required"); + if (isAssign()) sl.append("assign"); + else if (isCopy()) sl.append("copy"); + else if (isRetain()) sl.append("retain"); + if (protection()==Protected) sl.append("protected"); + else if (protection()==Private) sl.append("private"); + else if (protection()==Package) sl.append("package"); + if (lvirt==Virtual) sl.append("virtual"); + else if (lvirt==Pure) sl.append("pure virtual"); + if (isSignal()) sl.append("signal"); + if (isSlot()) sl.append("slot"); + } + if (m_impl->classDef && m_impl->classDef!=container) sl.append("inherited"); + } const char *s=sl.first(); while (s) { @@ -1990,7 +2028,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, fmd->name(), // level2 separateMemPages ? cfname : cfiname, // contRef cfname, // memRef - fmd->anchor()); // anchor + fmd->anchor(), // anchor + fmd); // memberdef //ol.writeListItem(); ol.startDescTableTitle(); // this enables emphasis! ol.startDoxyAnchor(cfname,cname,fmd->anchor(),fmd->name(),fmd->argsString()); @@ -2346,6 +2385,14 @@ bool MemberDef::hasDocumentation() const (m_impl->defArgList!=0 && m_impl->defArgList->hasDocumentation()); // has doc arguments } +bool MemberDef::hasUserDocumentation() const +{ + bool hasDocs = Definition::hasUserDocumentation() || + (m_impl->inbodyDocs && !m_impl->inbodyDocs.isEmpty()); + return hasDocs; +} + + void MemberDef::setMemberGroup(MemberGroup *grp) { makeResident(); @@ -2540,6 +2587,7 @@ void MemberDef::addListReference(Definition *) static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); visited=TRUE; if (!isLinkableInProject()) return; QCString memLabel; @@ -2547,6 +2595,10 @@ void MemberDef::addListReference(Definition *) { memLabel=theTranslator->trGlobal(TRUE,TRUE); } + else if (fortranOpt) + { + memLabel=theTranslator->trSubprogram(TRUE,TRUE); + } else { memLabel=theTranslator->trMember(TRUE,TRUE); @@ -2884,7 +2936,7 @@ bool MemberDef::isObjCMethod() const return FALSE; } -QCString MemberDef::qualifiedName() +QCString MemberDef::qualifiedName() const { makeResident(); if (isObjCMethod()) @@ -3245,6 +3297,43 @@ bool MemberDef::isAbstract() const return (m_impl->memSpec&Entry::Abstract)!=0; } +bool MemberDef::isOptional() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Optional)!=0; +} + +bool MemberDef::isRequired() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Required)!=0; +} + +bool MemberDef::isNonAtomic() const +{ + makeResident(); + return (m_impl->memSpec&Entry::NonAtomic)!=0; +} + +bool MemberDef::isCopy() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Copy)!=0; +} + +bool MemberDef::isAssign() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Assign)!=0; +} + +bool MemberDef::isRetain() const +{ + makeResident(); + return (m_impl->memSpec&Entry::Retain)!=0; +} + + bool MemberDef::isImplementation() const { makeResident(); @@ -3953,7 +4042,7 @@ void MemberDef::copyArgumentNames(MemberDef *bmd) } { LockingPtr<ArgumentList> arguments = bmd->declArgumentList(); - if (m_impl->defArgList && arguments!=0) + if (m_impl->declArgList && arguments!=0) { ArgumentListIterator aliDst(*m_impl->declArgList); ArgumentListIterator aliSrc(*arguments); diff --git a/src/memberdef.h b/src/memberdef.h index 8715ec9..6336269 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -110,7 +110,7 @@ class MemberDef : public Definition const char *getGroupFileName() const; int getGroupStartLine() const; bool getGroupHasDocs() const; - QCString qualifiedName(); + QCString qualifiedName() const; QCString objCMethodName(bool localLink,bool showStatic) const; // direct kind info @@ -148,6 +148,12 @@ class MemberDef : public Definition bool isAbstract() const; bool isOverride() const; bool isInitonly() const; + bool isOptional() const; + bool isRequired() const; + bool isNonAtomic() const; + bool isCopy() const; + bool isAssign() const; + bool isRetain() const; bool isNew() const; bool isSealed() const; bool isImplementation() const; @@ -166,6 +172,7 @@ class MemberDef : public Definition bool isLinkableInProject() const; bool isLinkable() const; bool hasDocumentation() const; // overrides hasDocumentation in definition.h + bool hasUserDocumentation() const; // overrides hasUserDocumentation bool isBriefSectionVisible() const; bool isDetailedSectionVisible(bool inGroup,bool inFile) const; bool isDetailedSectionLinkable() const; diff --git a/src/membergroup.cpp b/src/membergroup.cpp index f7aaedb..3b9eb89 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/membergroup.h b/src/membergroup.h index 64ac0af..e718176 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 846a37f..25f7a44 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/memberlist.h b/src/memberlist.h index 1b6a5cf..6b3f5e6 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -86,18 +86,32 @@ class MemberList : public QList<MemberDef> decFuncMembers = 43 + declarationLists, decVarMembers = 44 + declarationLists, decEnumValMembers = 45 + declarationLists, - - docDefineMembers = 46 + documentationLists, - docProtoMembers = 47 + documentationLists, - docTypedefMembers = 48 + documentationLists, - docEnumMembers = 49 + documentationLists, - docFuncMembers = 50 + documentationLists, - docVarMembers = 51 + documentationLists, - docEnumValMembers = 52 + documentationLists, - - redefinedBy = 53, - enumFields = 54, - memberGroup = 55 + decPubSlotMembers = 46 + declarationLists, + decProSlotMembers = 47 + declarationLists, + decPriSlotMembers = 48 + declarationLists, + decSignalMembers = 49 + declarationLists, + decEventMembers = 50 + declarationLists, + decFriendMembers = 51 + declarationLists, + decPropMembers = 52 + declarationLists, + + docDefineMembers = 53 + documentationLists, + docProtoMembers = 54 + documentationLists, + docTypedefMembers = 55 + documentationLists, + docEnumMembers = 56 + documentationLists, + docFuncMembers = 57 + documentationLists, + docVarMembers = 58 + documentationLists, + docEnumValMembers = 59 + documentationLists, + docPubSlotMembers = 60 + documentationLists, + docProSlotMembers = 61 + documentationLists, + docPriSlotMembers = 62 + documentationLists, + docSignalMembers = 63 + documentationLists, + docEventMembers = 64 + documentationLists, + docFriendMembers = 65 + documentationLists, + docPropMembers = 66 + documentationLists, + + redefinedBy = 67, + enumFields = 68, + memberGroup = 69 }; MemberList(); diff --git a/src/membername.cpp b/src/membername.cpp index 6a594c2..5c7dddc 100644 --- a/src/membername.cpp +++ b/src/membername.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/membername.h b/src/membername.h index 74f5891..3a5385c 100644 --- a/src/membername.h +++ b/src/membername.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/message.cpp b/src/message.cpp index 2fedd9a..9466beb 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/message.h b/src/message.h index 0cf2c49..8b61372 100644 --- a/src/message.h +++ b/src/message.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/msc.cpp b/src/msc.cpp index d519a50..064e414 100644 --- a/src/msc.cpp +++ b/src/msc.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index 7bc6221..2df94db 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -27,6 +27,7 @@ #include "message.h" #include "docparser.h" #include "searchindex.h" +#include "vhdldocgen.h" NamespaceDef::NamespaceDef(const char *df,int dl, const char *name,const char *lref, @@ -267,20 +268,29 @@ void NamespaceDef::writeDetailedDocumentation(OutputList &ol) void NamespaceDef::writeDocumentation(OutputList &ol) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + QCString pageTitle; if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) { pageTitle = theTranslator->trPackage(displayName()); } + else if (fortranOpt) + { + pageTitle = theTranslator->trModuleReference(displayName()); + } else { pageTitle = theTranslator->trNamespaceReference(displayName()); } - startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible); + startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,TRUE); if (getOuterScope()!=Doxygen::globalScope) { writeNavigationPath(ol); } + ol.endQuickIndices(); + ol.startContents(); startTitle(ol,getOutputFileBase()); ol.parseText(pageTitle); addGroupListToTitle(ol,this); @@ -353,7 +363,10 @@ void NamespaceDef::writeDocumentation(OutputList &ol) writeMemberDeclarations(ol,MemberList::decProtoMembers,theTranslator->trFuncProtos()); writeMemberDeclarations(ol,MemberList::decTypedefMembers,theTranslator->trTypedefs()); writeMemberDeclarations(ol,MemberList::decEnumMembers,theTranslator->trEnumerations()); - writeMemberDeclarations(ol,MemberList::decFuncMembers,theTranslator->trFunctions()); + writeMemberDeclarations(ol,MemberList::decFuncMembers, + fortranOpt ? theTranslator->trSubprograms() : + vhdlOpt ? VhdlDocGen::trFunctionAndProc() : + theTranslator->trFunctions()); writeMemberDeclarations(ol,MemberList::decVarMembers,theTranslator->trVariables()); ol.endMemberSections(); @@ -391,6 +404,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) void NamespaceDef::writeMemberDocumentation(OutputList &ol) { + bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (Config_getBool("SEPARATE_MEMBER_PAGES")) { ol.disable(OutputGenerator::Html); @@ -400,7 +414,7 @@ void NamespaceDef::writeMemberDocumentation(OutputList &ol) writeMemberDocumentation(ol,MemberList::docProtoMembers,theTranslator->trFunctionPrototypeDocumentation()); writeMemberDocumentation(ol,MemberList::docTypedefMembers,theTranslator->trTypedefDocumentation()); writeMemberDocumentation(ol,MemberList::docEnumMembers,theTranslator->trEnumerationTypeDocumentation()); - writeMemberDocumentation(ol,MemberList::docFuncMembers,theTranslator->trFunctionDocumentation()); + writeMemberDocumentation(ol,MemberList::docFuncMembers,fortranOpt?theTranslator->trSubprogramDocumentation():theTranslator->trFunctionDocumentation()); writeMemberDocumentation(ol,MemberList::docVarMembers,theTranslator->trVariableDocumentation()); if (Config_getBool("SEPARATE_MEMBER_PAGES")) @@ -539,10 +553,11 @@ Definition *NamespaceDef::findInnerCompound(const char *n) void NamespaceDef::addListReferences() { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); { LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems(); addRefItem(xrefItems.pointer(), - theTranslator->trNamespace(TRUE,TRUE), + fortranOpt?theTranslator->trModule(TRUE,TRUE):theTranslator->trNamespace(TRUE,TRUE), getOutputFileBase(),displayName() ); } @@ -629,10 +644,15 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) // write list of namespaces ol.startMemberHeader(); bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); if (javaOpt) { ol.parseText(theTranslator->trPackages()); } + else if (fortranOpt) + { + ol.parseText(theTranslator->trModules()); + } else { ol.parseText(theTranslator->trNamespaces()); @@ -648,6 +668,10 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,bool localName) { ol.docify("package "); } + else if (fortranOpt) + { + ol.docify("module "); + } else { ol.docify("namespace "); @@ -744,8 +768,13 @@ bool NamespaceDef::isLinkableInProject() const { int i = name().findRev("::"); if (i==-1) i=0; else i+=2; + static bool extractAnonNs = Config_getBool("EXTRACT_ANON_NSPACES"); + if (extractAnonNs && name().mid(i,20)=="anonymous_namespace{") + { + return TRUE; + } return !name().isEmpty() && name().at(i)!='@' && - hasDocumentation() && !isReference() && !isHidden(); + hasDocumentation() && !isReference() && !isHidden() && !isArtificial(); } bool NamespaceDef::isLinkable() const diff --git a/src/namespacedef.h b/src/namespacedef.h index 5c54897..b8bc093 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/objcache.cpp b/src/objcache.cpp index c6761dc..082d012 100644 --- a/src/objcache.cpp +++ b/src/objcache.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/objcache.h b/src/objcache.h index 5a9e16b..b42f9a4 100644 --- a/src/objcache.h +++ b/src/objcache.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id:$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/outputgen.cpp b/src/outputgen.cpp index 13f7186..20523b6 100644 --- a/src/outputgen.cpp +++ b/src/outputgen.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -29,9 +29,7 @@ OutputGenerator::OutputGenerator() b.setBuffer(a); b.open( IO_WriteOnly ); t.setDevice(&b); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); active=TRUE; genStack = new QStack<bool>; genStack->setAutoDelete(TRUE); diff --git a/src/outputgen.h b/src/outputgen.h index 8a8d60d..9dbe5dc 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -297,6 +297,7 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endFile() = 0; virtual void startIndexSection(IndexSections) = 0; virtual void endIndexSection(IndexSections) = 0; + virtual void writePageLink(const char *,bool) = 0; virtual void startProjectNumber() = 0; virtual void endProjectNumber() = 0; virtual void writeStyleInfo(int part) = 0; @@ -364,7 +365,11 @@ class OutputGenerator : public BaseOutputDocInterface virtual void startDirDepGraph() = 0; virtual void endDirDepGraph(const DotDirDeps &g) = 0; virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0; + virtual void startQuickIndices() = 0; + virtual void endQuickIndices() = 0; virtual void writeQuickLinks(bool compact,HighlightedItem hli) = 0; + virtual void startContents() = 0; + virtual void endContents() = 0; virtual void startTextBlock(bool) = 0; virtual void endTextBlock(bool) = 0; virtual void lastIndexPage() = 0; diff --git a/src/outputlist.cpp b/src/outputlist.cpp index bbf321a..5d237fe 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/outputlist.h b/src/outputlist.h index b4416f3..e0a1553 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -75,6 +75,8 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startIndexSection,is); } void endIndexSection(IndexSections is) { forall(&OutputGenerator::endIndexSection,is); } + void writePageLink(const char *name,bool first) + { forall(&OutputGenerator::writePageLink,name,first); } void startProjectNumber() { forall(&OutputGenerator::startProjectNumber); } void endProjectNumber() @@ -306,8 +308,16 @@ class OutputList : public OutputDocInterface { forall(&OutputGenerator::startPageRef); } void endPageRef(const char *c,const char *a) { forall(&OutputGenerator::endPageRef,c,a); } + void startQuickIndices() + { forall(&OutputGenerator::startQuickIndices); } + void endQuickIndices() + { forall(&OutputGenerator::endQuickIndices); } void writeQuickLinks(bool compact,HighlightedItem hli) { forall(&OutputGenerator::writeQuickLinks,compact,hli); } + void startContents() + { forall(&OutputGenerator::startContents); } + void endContents() + { forall(&OutputGenerator::endContents); } void writeNonBreakableSpace(int num) { forall(&OutputGenerator::writeNonBreakableSpace,num); } void startDescTable() diff --git a/src/pagedef.cpp b/src/pagedef.cpp index 3859640..c159283 100644 --- a/src/pagedef.cpp +++ b/src/pagedef.cpp @@ -60,13 +60,16 @@ void PageDef::writeDocumentation(OutputList &ol) else pageName=name().lower(); - startFile(ol,pageName,pageName,title()); + startFile(ol,pageName,pageName,title(),HLI_None,TRUE); if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX")) { getOuterScope()->writeNavigationPath(ol); } + ol.endQuickIndices(); + ol.startContents(); + // save old generator state and write title only to Man generator ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Man); @@ -74,6 +77,9 @@ void PageDef::writeDocumentation(OutputList &ol) ol.endTitleHead(pageName, pageName); ol.popGeneratorState(); + // for Latex the section is already generated as a chapter in the index! + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Latex); SectionInfo *si=0; if (!title().isEmpty() && !name().isEmpty() && (si=Doxygen::sectionDict.find(pageName))!=0) @@ -85,6 +91,8 @@ void PageDef::writeDocumentation(OutputList &ol) si->title); ol.endSection(si->label,si->type); } + ol.popGeneratorState(); + ol.startTextBlock(); ol.parseDoc(docFile(), // fileName docLine(), // startLine diff --git a/src/pagedef.h b/src/pagedef.h index 347ce59..98ed31b 100644 --- a/src/pagedef.h +++ b/src/pagedef.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id:$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/parserintf.h b/src/parserintf.h index 941a10f..d5fcf08 100644 --- a/src/parserintf.h +++ b/src/parserintf.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -134,7 +134,12 @@ class ParserManager ParserInterface *getParser(const char *extension) { if (extension==0) return m_defaultParser; - ParserInterface *intf = m_parsers.find(extension); + QCString ext = QCString(extension).lower(); + ParserInterface *intf = m_parsers.find(ext); + if (intf==0 && ext.length()>4) + { + intf = m_parsers.find(ext.left(4)); + } return intf ? intf : m_defaultParser; } diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 9e9f760..95034dd 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -3,7 +3,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * Authors: Dimitri van Heesch, Miguel Lobo. * * Permission to use, copy, modify, and distribute this software and its diff --git a/src/perlmodgen.h b/src/perlmodgen.h index 14daa25..c1dea50 100644 --- a/src/perlmodgen.h +++ b/src/perlmodgen.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/pngenc.cpp b/src/pngenc.cpp index 6a2582d..6f8206e 100644 --- a/src/pngenc.cpp +++ b/src/pngenc.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/pngenc.h b/src/pngenc.h index ac1d1fa..bb2abe4 100644 --- a/src/pngenc.h +++ b/src/pngenc.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/portable.cpp b/src/portable.cpp index 174fa20..59484b2 100644 --- a/src/portable.cpp +++ b/src/portable.cpp @@ -377,7 +377,12 @@ void * portable_iconv_open(const char* tocode, const char* fromcode) size_t portable_iconv (void *cd, const char** inbuf, size_t *inbytesleft, char** outbuf, size_t *outbytesleft) { -#if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109)) || defined(_OS_SOLARIS_)) +// libiconv is a mess. For some platforms/version the prototype of inbuf is +// "const char **", for others it is "char **". C++ requires the proper cast to +// avoid a compile error, that is were the CASTNEEDED is for. +#if ((defined(_LIBICONV_VERSION) && (_LIBICONV_VERSION>=0x0109) && \ + !((defined(_OS_MAC_) || defined(Q_OS_MACX) )&& (_LIBICONV_VERSION==0x010B))) \ + || defined(_OS_SOLARIS_)) #define CASTNEEDED(x) (x) #else #define CASTNEEDED(x) (char **)(x) @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -215,15 +215,20 @@ static FILE *checkAndOpenFile(const QCString &absName) static FILE *findFile(const char *fileName,bool localInclude) { - if (localInclude && g_yyFileDef) + //printf("** findFile(%s,%d) g_yyFileName=%s\n",fileName,localInclude,g_yyFileName.data()); + if (localInclude && !g_yyFileName.isEmpty()) { - QCString absName = g_yyFileDef->getPath()+"/"+fileName; - FILE *f = checkAndOpenFile(absName); - if (f) + QFileInfo fi(g_yyFileName); + if (fi.exists()) { - setFileName(absName); - g_yyLineNr=1; - return f; + QCString absName = QCString(fi.dirPath().data())+"/"+fileName; + FILE *f = checkAndOpenFile(absName); + if (f) + { + setFileName(absName); + g_yyLineNr=1; + return f; + } } } if (g_pathList==0) @@ -1665,7 +1670,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) <DefinedExpr1,DefinedExpr2>. <SkipCPPBlock>^{B}*"#" { BEGIN(SkipCommand); } <SkipCPPBlock>^{B}*/[^#] { BEGIN(SkipLine); } -<SkipCPPBlock>\n { g_yyLineNr++; } +<SkipCPPBlock>\n { g_yyLineNr++; outputChar('\n'); } <SkipCPPBlock>. <SkipCommand>"if"(("n")?("def"))?/[ \t(!] { incrLevel(); @@ -1757,6 +1762,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } <EndImport>\\[\r]?"\n" { outputChar('\n'); + g_yyLineNr++; } <EndImport>. { } diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index c236a39..eca9943 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/pycode.h b/src/pycode.h index 667d29c..2bff408 100644 --- a/src/pycode.h +++ b/src/pycode.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/pycode.l b/src/pycode.l index 87c66cf..5955e85 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/pyscanner.h b/src/pyscanner.h index 3434a55..fbb9331 100644 --- a/src/pyscanner.h +++ b/src/pyscanner.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/pyscanner.l b/src/pyscanner.l index a4aafe3..c8857da 100644 --- a/src/pyscanner.l +++ b/src/pyscanner.l @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -86,7 +86,6 @@ static bool docBlockSpecial; static bool g_doubleQuote; static bool g_specialBlock; -//static bool g_expectModuleDocs; static int g_stringContext; static QGString * g_copyString; static int g_indent = 0; @@ -110,6 +109,7 @@ static QCString g_defVal; static int g_braceCount; static bool g_lexInit = FALSE; +static bool g_packageCommentAllowed; //----------------------------------------------------------------------------- @@ -121,6 +121,7 @@ static void initParser() gstat = FALSE; virt = Normal; previous = 0; + g_packageCommentAllowed = TRUE; g_packageNameCache.setAutoDelete(TRUE); } @@ -150,7 +151,7 @@ static void newVariable() { current->protection=Private; } - if (current_root->section&Entry::SCOPE_MASK) // mark as class variable + if (current_root->section&Entry::COMPOUND_MASK) // mark as class variable { current->stat = TRUE; } @@ -494,7 +495,6 @@ STARTDOCSYMS ^{B}"##"/[^#] ^{B}"def"{BB} | "def"{BB} { // start of a function/method definition g_indent=computeIndent(yytext); - //g_expectModuleDocs = FALSE; current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; @@ -508,28 +508,31 @@ STARTDOCSYMS ^{B}"##"/[^#] current->name.resize(0); current->args.resize(0); current->argList->clear(); + g_packageCommentAllowed = FALSE; BEGIN( FunctionDec ); } ^{B}"class"{BB} | "class"{BB} { // start of a class definition g_indent=computeIndent(yytext); - //g_expectModuleDocs = FALSE; current->section = Entry::CLASS_SEC; current->argList->clear(); current->type += "class" ; current->fileName = yyFileName; current->bodyLine = yyLineNr; + g_packageCommentAllowed = FALSE; BEGIN( ClassDec ) ; } ^{B}"from"{BB} | "from"{BB} { // start of an from import + g_packageCommentAllowed = FALSE; BEGIN( FromMod ); } ^{B}"import"{BB} | "import"{BB} { // start of an import statement + g_packageCommentAllowed = FALSE; BEGIN( Import ); } ^{B}{IDENTIFIER}/{B}"="[^=] { // variable @@ -539,22 +542,27 @@ STARTDOCSYMS ^{B}"##"/[^#] current->fileName = yyFileName; current->startLine = yyLineNr; current->bodyLine = yyLineNr; + g_packageCommentAllowed = FALSE; BEGIN(VariableDec); } - "'" { // start of a single quoted string - g_stringContext=YY_START; - g_copyString=0; - BEGIN( SingleQuoteString ); - } - "\"" { // start of a double quoted string - g_stringContext=YY_START; - g_copyString=0; - BEGIN( DoubleQuoteString ); - } + "'" { // start of a single quoted string + g_stringContext=YY_START; + g_copyString=0; + g_packageCommentAllowed = FALSE; + BEGIN( SingleQuoteString ); + } + "\"" { // start of a double quoted string + g_stringContext=YY_START; + g_copyString=0; + g_packageCommentAllowed = FALSE; + BEGIN( DoubleQuoteString ); + } {POUNDCOMMENT} { // normal comment + g_packageCommentAllowed = FALSE; } {IDENTIFIER} { // some other identifier + g_packageCommentAllowed = FALSE; } ^{BB} { g_curIndent=computeIndent(yytext); @@ -580,6 +588,7 @@ STARTDOCSYMS ^{B}"##"/[^#] } {STARTDOCSYMS} { // start of a special comment + g_packageCommentAllowed = FALSE; initSpecialBlock(); BEGIN(SpecialComment); } @@ -868,7 +877,8 @@ STARTDOCSYMS ^{B}"##"/[^#] bodyEntry = current; BEGIN( FunctionBody ); } - + {POUNDCOMMENT} { // a comment + } {PARAMNONEMPTY} { // Default rule inside arguments. } @@ -1103,6 +1113,7 @@ STARTDOCSYMS ^{B}"##"/[^#] } {TRIDOUBLEQUOTE} { // start of a comment block current->type = "string"; + current->initializer = yytext; g_doubleQuote=TRUE; g_copyString=¤t->initializer; g_stringContext=VariableEnd; @@ -1111,6 +1122,7 @@ STARTDOCSYMS ^{B}"##"/[^#] {TRISINGLEQUOTE} { // start of a comment block current->type = "string"; + current->initializer = yytext; g_doubleQuote=FALSE; g_copyString=¤t->initializer; g_stringContext=VariableEnd; @@ -1215,7 +1227,7 @@ STARTDOCSYMS ^{B}"##"/[^#] // printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock); if (g_doubleQuote==(yytext[0]=='"')) { - if (g_specialBlock) + if (g_specialBlock) // expecting a docstring { QCString actualDoc=docBlock; if (!docBlockSpecial) // legacy unformatted docstring @@ -1223,14 +1235,20 @@ STARTDOCSYMS ^{B}"##"/[^#] actualDoc.prepend("\\verbatim "); actualDoc.append("\\endverbatim "); } - //if (g_expectModuleDocs) - //{ - // actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr "); - //} //printf("-------> current=%p bodyEntry=%p\n",current,bodyEntry); handleCommentBlock(actualDoc, FALSE); } - //g_expectModuleDocs=FALSE; + else if (g_packageCommentAllowed) // expecting module docs + { + QCString actualDoc=docBlock; + if (!docBlockSpecial) // legacy unformatted docstring + { + actualDoc.prepend("\\verbatim "); + actualDoc.append("\\endverbatim "); + } + actualDoc.prepend("\\namespace "+g_moduleScope+"\\_linebr "); + handleCommentBlock(actualDoc, FALSE); + } if ((docBlockContext==ClassBody && !g_hideClassDocs) || docBlockContext==FunctionBody) { @@ -1246,6 +1264,7 @@ STARTDOCSYMS ^{B}"##"/[^#] { docBlock += yytext; } + g_packageCommentAllowed = FALSE; } @@ -1288,11 +1307,6 @@ STARTDOCSYMS ^{B}"##"/[^#] docBlock+=yytext; } \n { // new line that ends the comment - //if (g_expectModuleDocs) - //{ - // docBlock.prepend("\\namespace "+g_moduleScope+"\\_linebr "); - //} - //g_expectModuleDocs=FALSE; handleCommentBlock(docBlock, docBrief); yyLineNr++; BEGIN(docBlockContext); @@ -1352,10 +1366,9 @@ STARTDOCSYMS ^{B}"##"/[^#] {TRIDOUBLEQUOTE} | {TRISINGLEQUOTE} { *g_copyString += yytext; - //printf("Expected module block %d special=%d\n",g_expectModuleDocs,g_specialBlock); if (g_doubleQuote==(yytext[0]=='"')) { - BEGIN(docBlockContext); + BEGIN(g_stringContext); } } @@ -1462,9 +1475,7 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) gstat = FALSE; virt = Normal; current_root = rt; - //g_expectModuleDocs = TRUE; g_specialBlock = FALSE; - //g_insideConstructor = FALSE; inputFile.setName(fileName); @@ -1532,9 +1543,8 @@ static void parsePrototype(const QCString &text) return; } - //g_expectModuleDocs = FALSE; g_specialBlock = FALSE; - //g_insideConstructor = FALSE; + g_packageCommentAllowed = FALSE; const char *orgInputString; int orgInputPosition; @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/reflist.cpp b/src/reflist.cpp index 9125f3e..da53f04 100644 --- a/src/reflist.cpp +++ b/src/reflist.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/reflist.h b/src/reflist.h index 8ef0b4c..f9ba9ea 100644 --- a/src/reflist.h +++ b/src/reflist.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 65c5bb2..3eb5ae8 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h index 04f3bd6..70c960a 100644 --- a/src/rtfdocvisitor.h +++ b/src/rtfdocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 753d133..a0d5e31 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Parker Waechter & Dimitri van Heesch. + * Copyright (C) 1997-2008 by Parker Waechter & Dimitri van Heesch. * * Style sheet additions by Alexander Bartolich * @@ -37,6 +37,7 @@ #include "rtfdocvisitor.h" #include "docparser.h" #include "dirdef.h" +#include "vhdldocgen.h" //#define DBG_RTF(x) x; #define DBG_RTF(x) @@ -514,6 +515,7 @@ void RTFGenerator::startIndexSection(IndexSections is) { //Page Documentation beginRTFChapter(); + t << "{\\tc \\v "; } break; case isEndIndex: @@ -523,6 +525,8 @@ void RTFGenerator::startIndexSection(IndexSections is) void RTFGenerator::endIndexSection(IndexSections is) { + bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); switch (is) { case isTitlePageStart: @@ -623,7 +627,15 @@ void RTFGenerator::endIndexSection(IndexSections is) break; case isNamespaceIndex: t << "\\par " << rtf_Style_Reset << endl; - t << "{\\tc \\v " << theTranslator->trNamespaceIndex() << "}"<< endl; + if (fortranOpt) + { + t << "{\\tc \\v " << theTranslator->trModulesIndex() << "}"<< endl; + } + else + { + t << "{\\tc \\v " << theTranslator->trNamespaceIndex() << "}"<< endl; + } + t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"namespaces.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isClassHierarchyIndex: @@ -633,7 +645,18 @@ void RTFGenerator::endIndexSection(IndexSections is) break; case isCompoundIndex: t << "\\par " << rtf_Style_Reset << endl; - t << "{\\tc \\v " << theTranslator->trCompoundIndex() << "}"<< endl; + if (fortranOpt) + { + t << "{\\tc \\v " << theTranslator->trCompoundIndexFortran() << "}"<< endl; + } + else if (vhdlOpt) + { + t << "{\\tc \\v " << VhdlDocGen::trDesignUnitIndex() << "}"<< endl; + } + else + { + t << "{\\tc \\v " << theTranslator->trCompoundIndex() << "}"<< endl; + } t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"annotated.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; break; case isFileIndex: @@ -715,8 +738,14 @@ void RTFGenerator::endIndexSection(IndexSections is) ClassSDict::Iterator cli(*Doxygen::classSDict); ClassDef *cd=0; bool found=FALSE; - - t << "{\\tc \\v " << theTranslator->trClassDocumentation() << "}"<< endl; + if (fortranOpt) + { + t << "{\\tc \\v " << theTranslator->trTypeDocumentation() << "}"<< endl; + } + else + { + t << "{\\tc \\v " << theTranslator->trClassDocumentation() << "}"<< endl; + } for (cli.toFirst();(cd=cli.current()) && !found;++cli) { if (cd->isLinkableInProject() && cd->templateMaster()==0) @@ -802,21 +831,23 @@ void RTFGenerator::endIndexSection(IndexSections is) break; case isPageDocumentation: { - t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl; - PageSDict::Iterator pdi(*Doxygen::pageSDict); - PageDef *pd=pdi.toFirst(); - bool first=TRUE; - for (pdi.toFirst();(pd=pdi.current());++pdi) - { - if (!pd->getGroupDef() && !pd->isReference()) - { - if (first) t << "\\par " << rtf_Style_Reset << endl; - t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; - t << pd->getOutputFileBase(); - t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; - first=FALSE; - } - } +//#error "fix me in the same way as the latex index..." + //t << "{\\tc \\v " << theTranslator->trPageDocumentation() << "}"<< endl; + t << "}"<< endl; + //PageSDict::Iterator pdi(*Doxygen::pageSDict); + //PageDef *pd=pdi.toFirst(); + //bool first=TRUE; + //for (pdi.toFirst();(pd=pdi.current());++pdi) + //{ + // if (!pd->getGroupDef() && !pd->isReference()) + // { + // if (first) t << "\\par " << rtf_Style_Reset << endl; + // t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; + // t << pd->getOutputFileBase(); + // t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; + // first=FALSE; + // } + //} } break; case isEndIndex: @@ -831,6 +862,14 @@ void RTFGenerator::endIndexSection(IndexSections is) } } +void RTFGenerator::writePageLink(const char *name,bool first) +{ + if (first) t << "\\par " << rtf_Style_Reset << endl; + t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \""; + t << name; + t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n"; +} + void RTFGenerator::lastIndexPage() { DBG_RTF(t <<"{\\comment Beginning Body of RTF Document}\n") @@ -2393,9 +2432,7 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name) return FALSE; } QTextStream outt(&outf); -#if QT_VERSION >= 200 - outt.setEncoding(QTextStream::Latin1); -#endif + outt.setEncoding(QTextStream::UnicodeUTF8); if (!PreProcessFile(thisDir,mainRTFName,outt)) { @@ -2513,6 +2550,15 @@ void RTFGenerator::endParamList() t << "}"; } +void RTFGenerator::startParameterType(bool first,const char *key) +{ + DBG_RTF(t << "{\\comment (startParameterList)}" << endl) + if (!first) + { + t << " " << key << " "; + } +} + void RTFGenerator::printDoc(DocNode *n,const char *langExt) { RTFDocVisitor *visitor = new RTFDocVisitor(t,*this,langExt); diff --git a/src/rtfgen.h b/src/rtfgen.h index 5e39945..37d5b95 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Parker Waechter & Dimitri van Heesch. + * Copyright (C) 1997-2008 by Parker Waechter & Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -50,6 +50,7 @@ class RTFGenerator : public OutputGenerator void startIndexSection(IndexSections); void endIndexSection(IndexSections); + void writePageLink(const char *,bool); void startProjectNumber(); void endProjectNumber(); void writeStyleInfo(int part); @@ -162,7 +163,11 @@ class RTFGenerator : public OutputGenerator void endClassDiagram(const ClassDiagram &,const char *filename,const char *name); void startPageRef(); void endPageRef(const char *,const char *); + void startQuickIndices() {} + void endQuickIndices() {} void writeQuickLinks(bool,HighlightedItem) {} + void startContents() {} + void endContents() {} void writeNonBreakableSpace(int); void startDescTable(); @@ -199,7 +204,7 @@ class RTFGenerator : public OutputGenerator void endMemberDocPrefixItem() {} void startMemberDocName(bool) {} void endMemberDocName() {} - void startParameterType(bool,const char *) {} + void startParameterType(bool,const char *); void endParameterType() {} void startParameterName(bool) {} void endParameterName(bool,bool,bool) {} diff --git a/src/rtfstyle.cpp b/src/rtfstyle.cpp index aae7cef..e1c971f 100644 --- a/src/rtfstyle.cpp +++ b/src/rtfstyle.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -438,9 +438,7 @@ void loadStylesheet(const char *name, QDict<StyleData>& dict) static const QRegExp separator("[ \t]*=[ \t]*"); uint lineNr=1; QTextStream t(&file); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); while (!t.eof()) { @@ -487,9 +485,7 @@ void loadExtensions(const char *name) static const QRegExp separator("[ \t]*=[ \t]*"); uint lineNr=1; QTextStream t(&file); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::Latin1); -#endif + t.setEncoding(QTextStream::UnicodeUTF8); while (!t.eof()) { diff --git a/src/rtfstyle.h b/src/rtfstyle.h index f6d6335..a3d80ba 100644 --- a/src/rtfstyle.h +++ b/src/rtfstyle.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/scanner.h b/src/scanner.h index 33d9fb1..a234d93 100644 --- a/src/scanner.h +++ b/src/scanner.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/scanner.l b/src/scanner.l index b76b67d..3f86c2f 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -1,8 +1,8 @@ /***************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -653,6 +653,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) %x ObjCParams %x ObjCParamType %x ObjCProtocolList +%x ObjCPropAttr +%x ObjCSkipStatement %x QtPropType %x QtPropName %x QtPropAttr @@ -1109,21 +1111,73 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) roundCount=1; BEGIN( SkipRound ); } + else if (strncmp(yytext,"@property",9)==0) // ObjC 2.0 property + { + current->mtype = mtype = Property; + current->spec|=Entry::Readable | Entry::Writable | Entry::Assign; + current->protection = Public ; + unput('('); + BEGIN( ObjCPropAttr ); + } else { REJECT; } } +<ObjCPropAttr>"getter="{ID} { + current->read = yytext+7; + } +<ObjCPropAttr>"setter="{ID} { + current->write = yytext+7; + } +<ObjCPropAttr>"readonly" { + current->spec&=~Entry::Writable; + } +<ObjCPropAttr>"readwrite" { // default + } +<ObjCPropAttr>"assign" { // default + } +<ObjCPropAttr>"retain" { + current->spec&=~Entry::Assign; + current->spec|=Entry::Retain; + } +<ObjCPropAttr>"copy" { + current->spec&=~Entry::Assign; + current->spec|=Entry::Copy; + } +<ObjCPropAttr>"nonatmic" { + current->spec|=Entry::NonAtomic; + } +<ObjCPropAttr>")" { + BEGIN(FindMembers); + } <FindMembers>"@"{ID} { if (insideJava) // Java annotation { // skip annotation } + else if (strcmp(yytext,"@property")==0) // ObjC 2.0 property + { + current->mtype = mtype = Property; + current->spec|=Entry::Writable | Entry::Readable | Entry::Assign; + current->protection = Public ; + } + else if (strcmp(yytext,"@synthesize")==0) + { + BEGIN( ObjCSkipStatement ); + } + else if (strcmp(yytext,"@dynamic")==0) + { + BEGIN( ObjCSkipStatement ); + } else { REJECT; } } +<ObjCSkipStatement>";" { + BEGIN(FindMembers); + } <PackageName>{ID}("."{ID})* { isTypedef=FALSE; current->name = yytext; @@ -1183,6 +1237,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit; lineCount(); } +<FindMembers>{B}*"@required"{BN}+ { current->spec|=Entry::Required; + lineCount(); + } +<FindMembers>{B}*"@optional"{BN}+ { current->spec|=Entry::Optional; + lineCount(); + } /* <FindMembers>{B}*"import"{BN}+ { // IDL import keyword BEGIN( NextSemi ); @@ -2487,6 +2547,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } /* generic curly bracket list copy rules for growable strings */ +<GCopyCurly>^"#"{B}+[0-9]+{B}+"\""[^\"\n]+"\""{B}+"1"{B}*\n? { // start of included file marker + } +<GCopyCurly>^"#"{B}+[0-9]+{B}+"\""[^\"\n]+"\""{B}+"2"{B}*\n? { // end of included file marker + QCString line = QCString(yytext); + int s = line.find(' '); + int e = line.find('"',s); + yyLineNr = line.mid(s,e-s).toInt(); + if (yytext[yyleng-1]=='\n') + { + yyLineNr++; + } + } <GCopyCurly>\" { *pCopyCurlyGString+=*yytext; pCopyQuotedGString=pCopyCurlyGString; @@ -2520,7 +2592,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) *pCopyCurlyGString+=yytext; } } -<GCopyCurly>[^"'{}\/\n]+ { +<GCopyCurly>[^"'{}\/\n]+ { *pCopyCurlyGString+=yytext; } <GCopyCurly>"/" { *pCopyCurlyGString+=yytext; } @@ -3182,13 +3254,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <FindMembers>"("/{BN}*({TSCOPE}{BN}*"::")*{TSCOPE}{BN}*")"{BN}*"(" | /* typedef void (A<int>::func_t)(args...) */ <FindMembers>("("({BN}*{TSCOPE}{BN}*"::")*({BN}*[*&]{BN}*)+)+ { /* typedef void (A::*ptr_t)(args...) or int (*func(int))[] */ - current->bodyLine = yyLineNr; - lineCount(); - addType(current); - funcPtrType=yytext; - roundCount=0; - //current->type += yytext; - BEGIN( FuncPtr ); + if (insidePHP) // reference parameter + { + REJECT + } + else + { + current->bodyLine = yyLineNr; + lineCount(); + addType(current); + funcPtrType=yytext; + roundCount=0; + //current->type += yytext; + BEGIN( FuncPtr ); + } } <FuncPtr>{SCOPENAME} { current->name = yytext; diff --git a/src/searchindex.cpp b/src/searchindex.cpp index 4e9560e..378316f 100644 --- a/src/searchindex.cpp +++ b/src/searchindex.cpp @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/searchindex.h b/src/searchindex.h index 2f80c2a..59970b5 100644 --- a/src/searchindex.h +++ b/src/searchindex.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/section.h b/src/section.h index 48f5756..482ad0a 100644 --- a/src/section.h +++ b/src/section.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/sortdict.h b/src/sortdict.h index e40e87d..b9f6f7c 100644 --- a/src/sortdict.h +++ b/src/sortdict.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/store.cpp b/src/store.cpp index 9b082aa..f8c66c2 100644 --- a/src/store.cpp +++ b/src/store.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id:$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/store.h b/src/store.h index 85bb506..2e7eabd 100644 --- a/src/store.h +++ b/src/store.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/tagreader.cpp b/src/tagreader.cpp index a257685..1292ac4 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -237,12 +237,13 @@ class TagFileParser : public QXmlDefaultHandler m_inputFileName = fileName; } - void warn(const char *fmt,...) + void warn(const char *fmt) { - va_list args; - va_start(args, fmt); - ::warn(m_inputFileName,m_locator->lineNumber(),fmt,args); - va_end(args); + ::warn(m_inputFileName,m_locator->lineNumber(),fmt); + } + void warn(const char *fmt,const char *s) + { + ::warn(m_inputFileName,m_locator->lineNumber(),fmt,s); } void startCompound( const QXmlAttributes& attrib ) @@ -1395,6 +1396,7 @@ void parseTagFile(Entry *root,const char *fullName,const char *tagName) reader.parse( source ); handler.buildLists(root); handler.addIncludes(); + //handler.dump(); } diff --git a/src/tagreader.h b/src/tagreader.h index 8de56ea..a6bf3f9 100644 --- a/src/tagreader.h +++ b/src/tagreader.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp index 4904be2..ae0820d 100644 --- a/src/textdocvisitor.cpp +++ b/src/textdocvisitor.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/textdocvisitor.h b/src/textdocvisitor.h index f8cf023..321e9c6 100644 --- a/src/textdocvisitor.h +++ b/src/textdocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator.h b/src/translator.h index dc18558..a9ec6ea 100644 --- a/src/translator.h +++ b/src/translator.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -23,7 +23,6 @@ #include "util.h" #include "config.h" - class Translator { private: @@ -344,7 +343,7 @@ class Translator // Translation of the word - virtual QCString trClass(bool first_capital, bool singular) = 0; + virtual QCString trClass(bool first_capital, bool singular) = 0; virtual QCString trFile(bool first_capital, bool singular) = 0; virtual QCString trNamespace(bool first_capital, bool singular) = 0; virtual QCString trGroup(bool first_capital, bool singular) = 0; @@ -447,6 +446,36 @@ class Translator virtual QCString trCallerGraph() = 0; virtual QCString trEnumerationValueDocumentation() = 0; +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trMemberFunctionDocumentationFortran() = 0; + virtual QCString trCompoundListFortran() = 0; + virtual QCString trCompoundMembersFortran() = 0; + virtual QCString trCompoundListDescriptionFortran() = 0; + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) = 0; + virtual QCString trCompoundIndexFortran() = 0; + virtual QCString trTypeDocumentation() = 0; + virtual QCString trSubprograms() = 0; + virtual QCString trSubprogramDocumentation() = 0; + virtual QCString trDataTypes() = 0; + virtual QCString trModulesList() = 0; + virtual QCString trModulesListDescription(bool extractAll) = 0; + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) = 0; + virtual QCString trModuleReference(const char *namespaceName) = 0; + virtual QCString trModulesMembers() = 0; + virtual QCString trModulesMemberDescription(bool extractAll) = 0; + virtual QCString trModulesIndex() = 0; + virtual QCString trModule(bool first_capital, bool singular) = 0; + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) = 0; + virtual QCString trType(bool first_capital, bool singular) = 0; + virtual QCString trSubprogram(bool first_capital, bool singular) = 0; + virtual QCString trTypeConstraints() = 0; + }; #endif diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 631da7b..a73da00 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -41,7 +41,83 @@ class TranslatorAdapterBase : public Translator }; -class TranslatorAdapter_1_4_6 : public TranslatorAdapterBase +class TranslatorAdapter_1_5_4 : public TranslatorAdapterBase +{ + public: + virtual QCString updateNeededMessage() + { return createUpdateNeededMessage(idLanguage(),"release 1.5.4"); } + + virtual QCString trMemberFunctionDocumentationFortran() + { return english.trMemberFunctionDocumentationFortran(); } + + virtual QCString trCompoundListFortran() + { return english.trCompoundListFortran(); } + + virtual QCString trCompoundMembersFortran() + { return english.trCompoundMembersFortran(); } + + virtual QCString trCompoundListDescriptionFortran() + { return english.trCompoundListDescriptionFortran(); } + + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { return english.trCompoundMembersDescriptionFortran(extractAll); } + + virtual QCString trCompoundIndexFortran() + { return english.trCompoundIndexFortran(); } + + virtual QCString trTypeDocumentation() + { return english.trTypeDocumentation(); } + + virtual QCString trSubprograms() + { return english.trSubprograms(); } + + virtual QCString trSubprogramDocumentation() + { return english.trSubprogramDocumentation(); } + + virtual QCString trDataTypes() + { return english.trDataTypes(); } + + virtual QCString trModulesList() + { return english.trModulesList(); } + + virtual QCString trModulesListDescription(bool extractAll) + { return english.trModulesListDescription(extractAll); } + + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { return english.trCompoundReferenceFortran(clName,compType,isTemplate); } + + virtual QCString trModuleReference(const char *namespaceName) + { return english.trModuleReference(namespaceName); } + + virtual QCString trModulesMembers() + { return english.trModulesMembers(); } + + virtual QCString trModulesMemberDescription(bool extractAll) + { return english.trModulesMemberDescription(extractAll); } + + virtual QCString trModulesIndex() + { return english.trModulesIndex(); } + + virtual QCString trModule(bool first_capital, bool singular) + { return english.trModule(first_capital,singular); } + + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { return english.trGeneratedFromFilesFortran(compType,single); } + + virtual QCString trType(bool first_capital, bool singular) + { return english.trType(first_capital,singular); } + + virtual QCString trSubprogram(bool first_capital, bool singular) + { return english.trSubprogram(first_capital,singular); } + + virtual QCString trTypeConstraints() + { return english.trTypeConstraints(); } +}; + +class TranslatorAdapter_1_4_6 : public TranslatorAdapter_1_5_4 { public: virtual QCString updateNeededMessage() diff --git a/src/translator_ar.h b/src/translator_ar.h index 6a37040..2660d7d 100644 --- a/src/translator_ar.h +++ b/src/translator_ar.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_br.h b/src/translator_br.h index 44cdcf4..e61ef48 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -10,11 +10,13 @@ * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * - * Brazilian Portuguese translation version 20070914 + * Brazilian Portuguese translation version 20071216 * Maintainer: Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> - * Thanks to Jorge Ramos and others + * Thanks to Jorge Ramos and others for their contributions. * * History: + * 20071216: + * - New methods since 1.5.4 updated. * 20070914 * - "Translate me" fixed * - Revision number changed from doxygen version to a date string. @@ -28,7 +30,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian : public Translator +class TranslatorBrazilian : public TranslatorAdapter_1_5_4 { public: @@ -59,34 +61,34 @@ class TranslatorBrazilian : public Translator /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - return "iso-8859-1"; + return "utf-8"; } // --- Language translation methods ------------------- /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() - { return "Funções Relacionadas"; } + { return "Funções Relacionadas"; } /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { return "(Note que estas não são funções membros.)"; } + { return "(Note que estas não são funções membros.)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { return "Descrição Detalhada"; } + { return "Descrição Detalhada"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return "Definições de Tipos"; } + { return "Definições de Tipos"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return "Enumerações"; } + { return "Enumerações"; } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { return "Métodos"; } + { return "Métodos"; } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() @@ -115,7 +117,7 @@ class TranslatorBrazilian : public Translator /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "Esta é a lista de todos os membros de "; } + { return "Esta é a lista de todos os membros de "; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() @@ -127,17 +129,17 @@ class TranslatorBrazilian : public Translator virtual QCString trGeneratedAutomatically(const char *s) { QCString result="Gerado automaticamente por Doxygen"; if (s) result+=(QCString)" para "+s; - result+=" a partir de seu código-fonte."; + result+=" a partir de seu código-fonte."; return result; } /*! put after an enum name in the list of all members */ virtual QCString trEnumName() - { return "Nome da enumeração"; } + { return "[Enumeração]"; } /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "Valor enumerado"; } + { return "[Valor enumerado]"; } /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() @@ -149,7 +151,7 @@ class TranslatorBrazilian : public Translator * compounds or files (see the \\group command). */ virtual QCString trModules() - { return "Módulos"; } + { return "Módulos"; } /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() @@ -200,7 +202,7 @@ class TranslatorBrazilian : public Translator /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "Páginas relacionadas"; } + { return "Páginas relacionadas"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() @@ -212,14 +214,14 @@ class TranslatorBrazilian : public Translator /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "Esta lista de hierarquias está parcialmente ordenada (ordem alfabética):"; } + { return "Esta lista de hierarquias está parcialmente ordenada (ordem alfabética):"; } /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { - QCString result="Esta é a lista de todos os arquivos "; + QCString result="Esta é a lista de todos os arquivos "; if (!extractAll) result+="documentados "; - result+="e suas respectivas descrições:"; + result+="e suas respectivas descrições:"; return result; } @@ -229,22 +231,22 @@ class TranslatorBrazilian : public Translator if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Aqui estão as estruturas de dados e suas respectivas descrições:"; + return "Aqui estão as estruturas de dados e suas respectivas descrições:"; } else { - return "Aqui estão as classes, estruturas, uniões e interfaces e suas respectivas descrições:"; + return "Aqui estão as classes, estruturas, uniões e interfaces e suas respectivas descrições:"; } } /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Esta é a lista de "; + QCString result="Esta é a lista de "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="todas as estruturas e campos de uniões "; + result+="todas as estruturas e campos de uniões "; if (!extractAll) { result+="documentas"; @@ -258,23 +260,23 @@ class TranslatorBrazilian : public Translator result+="documentos"; } } - result+=" com referências para "; + result+=" com referências para "; if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="a documentação da estrutura/união de cada campo:"; + result+="a documentação da estrutura/união de cada campo:"; } else { - result+="a documentação da classe de cada membro:"; + result+="a documentação da classe de cada membro:"; } } else { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="a estrutura/união a que pertencem:"; + result+="a estrutura/união a que pertencem:"; } else { @@ -287,10 +289,10 @@ class TranslatorBrazilian : public Translator /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="Esta é a lista de "; + QCString result="Esta é a lista de "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="todas as funções, variáveis, definições, enumerações e definições de tipos "; + result+="todas as funções, variáveis, definições, enumerações e definições de tipos "; if (!extractAll) result+="documentadas "; } else @@ -298,41 +300,41 @@ class TranslatorBrazilian : public Translator result+="todos os membros dos arquivos "; if (!extractAll) result+="documentados "; } - result+="com referências para "; + result+="com referências para "; if (extractAll) result+="seus respectivos arquivos:"; else - result+="suas respectivas documentações:"; + result+="suas respectivas documentações:"; return result; } /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() - { return "Esta é a lista com todos os exemplos:"; } + { return "Esta é a lista com todos os exemplos:"; } /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "Esta é a lista com toda a documentação relacionadas:"; } + { return "Esta é a lista com toda a documentação relacionadas:"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { return "Esta é a lista com todos os módulos:"; } + { return "Esta é a lista com todos os módulos:"; } /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() - { return "\nDocumentação"; } + { return "\nDocumentação"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ virtual QCString trModuleIndex() - { return "Índice dos Módulos"; } + { return "Ãndice dos Módulos"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ virtual QCString trHierarchicalIndex() - { return "Índice Hierárquico"; } + { return "Ãndice Hierárquico"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. @@ -341,11 +343,11 @@ class TranslatorBrazilian : public Translator { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Índice das Estruturas de Dados"; + return "Ãndice das Estruturas de Dados"; } else { - return "Índice dos Componentes"; + return "Ãndice dos Componentes"; } } @@ -353,13 +355,13 @@ class TranslatorBrazilian : public Translator * list of all files. */ virtual QCString trFileIndex() - { return "Índice dos Arquivos"; } + { return "Ãndice dos Arquivos"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ virtual QCString trModuleDocumentation() - { return "Módulos"; } + { return "Módulos"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. @@ -392,47 +394,47 @@ class TranslatorBrazilian : public Translator * the documentation of all related pages. */ virtual QCString trPageDocumentation() - { return "Documentação Relacionada"; } + { return "Documentação Relacionada"; } /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() - { return "Guia de Referência"; } + { return "Guia de Referência"; } /*! This is used in the documentation of a file as a header before the * list of defines */ virtual QCString trDefines() - { return "Definições e Macros"; } + { return "Definições e Macros"; } /*! This is used in the documentation of a file as a header before the * list of function prototypes */ virtual QCString trFuncProtos() - { return "Protótipos de Funções"; } + { return "Protótipos de Funções"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() - { return "Definições de Tipos"; } + { return "Definições de Tipos"; } /*! This is used in the documentation of a file as a header before the * list of enumerations */ virtual QCString trEnumerations() - { return "Enumerações"; } + { return "Enumerações"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ virtual QCString trFunctions() - { return "Funções"; } + { return "Funções"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trVariables() - { return "Variáveis"; } + { return "Variáveis"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables @@ -444,37 +446,37 @@ class TranslatorBrazilian : public Translator * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { return "Definições e macros"; } + { return "Definições e macros"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ virtual QCString trFunctionPrototypeDocumentation() - { return "Protótipos das funções"; } + { return "Protótipos das funções"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { return "Definições dos tipos"; } + { return "Definições dos tipos"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() - { return "Enumerações"; } + { return "Enumerações"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() - { return "Funções"; } + { return "Funções"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ virtual QCString trVariableDocumentation() - { return "Variáveis"; } + { return "Variáveis"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds @@ -524,7 +526,7 @@ class TranslatorBrazilian : public Translator /*! this text is generated when the \\version command is used. */ virtual QCString trVersion() - { return "Versão"; } + { return "Versão"; } /*! this text is generated when the \\date command is used. */ virtual QCString trDate() @@ -536,15 +538,15 @@ class TranslatorBrazilian : public Translator /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() - { return "Veja também"; } + { return "Veja também"; } /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() - { return "Parâmetros"; } + { return "Parâmetros"; } /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() - { return "Exceções"; } + { return "Exceções"; } /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() @@ -561,9 +563,9 @@ class TranslatorBrazilian : public Translator /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="Esta é a lista de todos os Namespaces "; + QCString result="Esta é a lista de todos os Namespaces "; if (!extractAll) result+="documentados "; - result+="com suas respectivas descrições:"; + result+="com suas respectivas descrições:"; return result; } @@ -581,7 +583,7 @@ class TranslatorBrazilian : public Translator * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "Amigas e Funções Relacionadas"; } + { return "Amigas e Funções Relacionadas"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -592,17 +594,17 @@ class TranslatorBrazilian : public Translator ClassDef::CompoundType compType, bool isTemplate) { - QCString result="Referência da"; + QCString result="Referência da"; if (isTemplate) result+=" Template de"; switch(compType) { case ClassDef::Class: result+=" Classe "; break; case ClassDef::Struct: result+=" Estrutura "; break; - case ClassDef::Union: result+=" União "; break; + case ClassDef::Union: result+=" União "; break; case ClassDef::Interface: result+=" Interface "; break; case ClassDef::Protocol: result+=" Protocolo "; break; case ClassDef::Category: result+=" Categoria "; break; - case ClassDef::Exception: result+=" Exceção "; break; + case ClassDef::Exception: result+=" Exceção "; break; } result+=(QCString)clName; return result; @@ -611,7 +613,7 @@ class TranslatorBrazilian : public Translator /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { - QCString result = "Referência do Arquivo "; + QCString result = "Referência do Arquivo "; result += fileName; return result; } @@ -619,31 +621,31 @@ class TranslatorBrazilian : public Translator /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { - QCString result ="Refência do Namespace "; + QCString result ="Refência do Namespace "; result += namespaceName; return result; } virtual QCString trPublicMembers() - { return "Métodos Públicos"; } + { return "Métodos Públicos"; } virtual QCString trPublicSlots() - { return "Slots Públicos"; } + { return "Slots Públicos"; } virtual QCString trSignals() { return "Sinais"; } virtual QCString trStaticPublicMembers() - { return "Métodos Públicos Estáticos"; } + { return "Métodos Públicos Estáticos"; } virtual QCString trProtectedMembers() - { return "Métodos Protegidos"; } + { return "Métodos Protegidos"; } virtual QCString trProtectedSlots() { return "Slots Protegidos"; } virtual QCString trStaticProtectedMembers() - { return "Métodos Protegidos Estáticos"; } + { return "Métodos Protegidos Estáticos"; } virtual QCString trPrivateMembers() - { return "Métodos Privados"; } + { return "Métodos Privados"; } virtual QCString trPrivateSlots() { return "Slots Privados"; } virtual QCString trStaticPrivateMembers() - { return "Métodos Privados Estáticos"; } + { return "Métodos Privados Estáticos"; } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -691,7 +693,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trReimplementedFromList(int numEntries) { - return "Reimplementação de "+trWriteList(numEntries)+"."; + return "Reimplementação de "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of @@ -709,11 +711,11 @@ class TranslatorBrazilian : public Translator /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Esta é a lista com todos os membros do Namespace "; + QCString result="Esta é a lista com todos os membros do Namespace "; if (!extractAll) result+="documentados "; - result+="com referências para "; + result+="com referências para "; if (extractAll) - result+="a documentação de seus respectivos Namespaces:"; + result+="a documentação de seus respectivos Namespaces:"; else result+="os seus respectivos namespaces:"; return result; @@ -751,16 +753,16 @@ class TranslatorBrazilian : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"A documentação para esta "; + QCString result=(QCString)"A documentação para esta "; switch(compType) { case ClassDef::Class: result+="classe "; break; case ClassDef::Struct: result+="estrutura "; break; - case ClassDef::Union: result+="união "; break; + case ClassDef::Union: result+="união "; break; case ClassDef::Interface: result+="interface "; break; case ClassDef::Protocol: result+="protocolo "; break; case ClassDef::Category: result+="categoria "; break; - case ClassDef::Exception: result+="exceção "; break; + case ClassDef::Exception: result+="exceção "; break; } result+=" foi gerada a partir "; if (single) result+="do seguinte arquivo:"; else result+="dos seguintes arquivos:"; @@ -771,7 +773,7 @@ class TranslatorBrazilian : public Translator * list. */ virtual QCString trAlphabeticalList() - { return "Lista Alfabética"; } + { return "Lista Alfabética"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -784,7 +786,7 @@ class TranslatorBrazilian : public Translator /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "Página Principal"; } + { return "Página Principal"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. @@ -798,11 +800,11 @@ class TranslatorBrazilian : public Translator virtual QCString trDefinedAtLineInSourceFile() { - return "Definição na linha @0 do arquivo @1."; + return "Definição na linha @0 do arquivo @1."; } virtual QCString trDefinedInSourceFile() { - return "Definição no arquivo @0."; + return "Definição no arquivo @0."; } ////////////////////////////////////////////////////////////////////////// @@ -813,7 +815,7 @@ class TranslatorBrazilian : public Translator { /* * This note is for brazilians only. - * Esta é uma boa tradução para "deprecated"? + * Esta é uma boa tradução para "deprecated"? */ return "Descontinuado(a)"; } @@ -825,12 +827,12 @@ class TranslatorBrazilian : public Translator /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Diagrama de colaboração para "+clName+":"; + return (QCString)"Diagrama de colaboração para "+clName+":"; } /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Gráfico de dependência de inclusões para "+fName+":"; + return (QCString)"Gráfico de dependência de inclusões para "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() @@ -840,22 +842,22 @@ class TranslatorBrazilian : public Translator /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "Vá para o código-fonte deste arquivo."; + return "Vá para o código-fonte deste arquivo."; } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "Vá para a documentação deste arquivo."; + return "Vá para a documentação deste arquivo."; } /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "Pré-Condição"; + return "Pré-Condição"; } /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Pós-Condição"; + return "Pós-Condição"; } /*! Text for the \\invariant command */ virtual QCString trInvariant() @@ -870,23 +872,23 @@ class TranslatorBrazilian : public Translator /*! Text used the source code in the file index */ virtual QCString trCode() { - return "código"; + return "código"; } virtual QCString trGraphicalHierarchy() { - return "Gráfico de Hierarquia de Classes"; + return "Gráfico de Hierarquia de Classes"; } virtual QCString trGotoGraphicalHierarchy() { - return "Vá para o Gráfico de Hierarquia de Classes"; + return "Vá para o Gráfico de Hierarquia de Classes"; } virtual QCString trGotoTextualHierarchy() { - return "Vá para a Hierarquia de Classes (texto)"; + return "Vá para a Hierarquia de Classes (texto)"; } virtual QCString trPageIndex() { - return "Índice da Página"; + return "Ãndice da Página"; } ////////////////////////////////////////////////////////////////////////// @@ -895,11 +897,11 @@ class TranslatorBrazilian : public Translator virtual QCString trNote() { - return "Observação"; + return "Observação"; } virtual QCString trPublicTypes() { - return "Tipos Públicos"; + return "Tipos Públicos"; } virtual QCString trPublicAttribs() { @@ -909,12 +911,12 @@ class TranslatorBrazilian : public Translator } else { - return "Atributos Públicos"; + return "Atributos Públicos"; } } virtual QCString trStaticPublicAttribs() { - return "Atributos Estáticos Públicos"; + return "Atributos Estáticos Públicos"; } virtual QCString trProtectedTypes() { @@ -926,7 +928,7 @@ class TranslatorBrazilian : public Translator } virtual QCString trStaticProtectedAttribs() { - return "Atributos Estáticos Protegidos"; + return "Atributos Estáticos Protegidos"; } virtual QCString trPrivateTypes() { @@ -938,7 +940,7 @@ class TranslatorBrazilian : public Translator } virtual QCString trStaticPrivateAttribs() { - return "Atributos Privados Estáticos"; + return "Atributos Privados Estáticos"; } ////////////////////////////////////////////////////////////////////////// @@ -966,15 +968,15 @@ class TranslatorBrazilian : public Translator } virtual QCString trRemarks() { - return "Anotações"; + return "Anotações"; } virtual QCString trAttention() { - return "Atenção"; + return "Atenção"; } virtual QCString trInclByDepGraph() { - return "Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com este arquivo:"; + return "Este grafo mostra quais arquivos estão direta ou indiretamente relacionados com este arquivo:"; } virtual QCString trSince() { @@ -994,7 +996,7 @@ class TranslatorBrazilian : public Translator virtual QCString trLegendDocs() { return - "Esta página explica como interpretar os grafos gerados pelo doxygen.<p>\n" + "Esta página explica como interpretar os grafos gerados pelo doxygen.<p>\n" "Considere o seguinte exemplo:\n" "\\code\n" "/*! Invisible class because of truncation */\n" @@ -1025,30 +1027,30 @@ class TranslatorBrazilian : public Translator "};\n" "\\endcode\n" - "Se a tag \\c MAX_DOT_GRAPH_HEIGHT no arquivo de configuração tem o valor" - "200, o seguinte gráfo será gerado:" + "Se a tag \\c MAX_DOT_GRAPH_HEIGHT no arquivo de configuração tem o valor" + "200, o seguinte gráfo será gerado:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" - "As caixas no grafo acima tem as seguintes interpretações:\n" + "As caixas no grafo acima tem as seguintes interpretações:\n" "<ul>\n" "<li>Uma caixa inteiramente preta representa a estrutura ou a classe para qual " "o grafo foi gerado.\n" "<li>Uma caixa com bordas pretas denota uma estrutura ou classe documentada.\n" - "<li>Uma caixa com bordas cinzas denota uma estrutura ou classe não documentada.\n" + "<li>Uma caixa com bordas cinzas denota uma estrutura ou classe não documentada.\n" "<li>Uma caixa com bordas vermelhas denota uma estrutura ou classe documentada para\n" - "a qual nem todas as heranças ou componentes são mostradas no grafo. Um grafo é " - "truncado quando este é maior que o tamanho especificado." + "a qual nem todas as heranças ou componentes são mostradas no grafo. Um grafo é " + "truncado quando este é maior que o tamanho especificado." "</ul>\n" "As setas tem os seguintes significados:\n" "<ul>\n" - "<li>Uma seta azul escura é utilizada para denotar uma relação de herança " - "pública entre duas classes.\n" - "<li>Uma seta verde escura é utilizada para denotar uma herança protegida.\n" - "<li>Uma seta vermelho escura é utilizada para denotar uma herança privada.\n" - "<li>Uma seta púrpura pontilhada é usada se uma classe está contida ou é utilizada" - "por outra classe. A seta é marcada com a(s) variável(eis) " - "através das quais a classe ou estrutura apontada está acessível. \n" + "<li>Uma seta azul escura é utilizada para denotar uma relação de herança " + "pública entre duas classes.\n" + "<li>Uma seta verde escura é utilizada para denotar uma herança protegida.\n" + "<li>Uma seta vermelho escura é utilizada para denotar uma herança privada.\n" + "<li>Uma seta púrpura pontilhada é usada se uma classe está contida ou é utilizada" + "por outra classe. A seta é marcada com a(s) variável(eis) " + "através das quais a classe ou estrutura apontada está acessÃvel. \n" "</ul>\n"; } /*! text for the link to the legend page */ @@ -1079,7 +1081,7 @@ class TranslatorBrazilian : public Translator /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "Métodos DCOP"; + return "Métodos DCOP"; } ////////////////////////////////////////////////////////////////////////// @@ -1126,7 +1128,7 @@ class TranslatorBrazilian : public Translator /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Esta é a lista com os pacotes e suas respectivas descrições (se disponíveis):"; + return "Esta é a lista com os pacotes e suas respectivas descrições (se disponÃveis):"; } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() @@ -1200,7 +1202,7 @@ class TranslatorBrazilian : public Translator /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return "Índice"; + return "Ãndice"; } /*! This is used for translation of the word that will possibly @@ -1253,7 +1255,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trPage(bool first_capital, bool singular) { - QCString result((first_capital ? "Página" : "página")); + QCString result((first_capital ? "Página" : "página")); if (!singular) result+="s"; return result; } @@ -1305,7 +1307,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trReferences() { - return "Referências"; + return "Referências"; } ////////////////////////////////////////////////////////////////////////// @@ -1337,7 +1339,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trRTFTableOfContents() { - return "Conteúdo"; + return "Conteúdo"; } ////////////////////////////////////////////////////////////////////////// @@ -1385,7 +1387,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trPackageMembers() { - return "Funções do Pacote"; + return "Funções do Pacote"; } /*! Used as a heading for a list of static Java class functions with @@ -1393,7 +1395,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trStaticPackageMembers() { - return "Funções Estáticas do Pacote"; + return "Funções Estáticas do Pacote"; } /*! Used as a heading for a list of Java class variables with package @@ -1409,7 +1411,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trStaticPackageAttribs() { - return "Atributos Estáticos do Pacote"; + return "Atributos Estáticos do Pacote"; } ////////////////////////////////////////////////////////////////////////// @@ -1426,7 +1428,7 @@ class TranslatorBrazilian : public Translator /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Este é o grafo de chamadas para esta função:"; + return "Este é o grafo de chamadas para esta função:"; } ////////////////////////////////////////////////////////////////////////// @@ -1488,7 +1490,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trSourceFile(QCString& filename) { - return "Código-Fonte de " + filename; + return "Código-Fonte de " + filename; } ////////////////////////////////////////////////////////////////////////// @@ -1499,32 +1501,32 @@ class TranslatorBrazilian : public Translator * hierarchy. */ virtual QCString trDirIndex() - { return "Hierarquia de Diretórios"; } + { return "Hierarquia de Diretórios"; } /*! This is used as the name of the chapter containing the documentation * of the directories. */ virtual QCString trDirDocumentation() - { return "Documentação do Directório"; } + { return "Documentação do Directório"; } /*! This is used as the title of the directory index and also in the * Quick links of a HTML page, to link to the directory hierarchy. */ virtual QCString trDirectories() - { return "Diretórios"; } + { return "Diretórios"; } /*! This returns a sentences that introduces the directory hierarchy. * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { return "Esta Hierarquia de Diretórios está parcialmente ordenada (ordem alfabética)"; } + { return "Esta Hierarquia de Diretórios está parcialmente ordenada (ordem alfabética)"; } /*! This returns the title of a directory page. The name of the * directory is passed via \a dirName. */ virtual QCString trDirReference(const char *dirName) { - QCString result = "Referência do diretório "; + QCString result = "Referência do diretório "; result += dirName; return result; } @@ -1534,7 +1536,7 @@ class TranslatorBrazilian : public Translator */ virtual QCString trDir(bool first_capital, bool singular) { - QCString result((first_capital ? "Diretório" : "diretório")); + QCString result((first_capital ? "Diretório" : "diretório")); if (!singular) result+="s"; return result; } @@ -1547,8 +1549,8 @@ class TranslatorBrazilian : public Translator */ virtual QCString trOverloadText() { - return "Este é um método provido por conveniência. " - "Ele difere do método acima apenas na lista de " + return "Este é um método provido por conveniência. " + "Ele difere do método acima apenas na lista de " "argumentos que devem ser utilizados."; } @@ -1559,14 +1561,216 @@ class TranslatorBrazilian : public Translator /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Este é o diagrama de chamadas para esta função:"; + return "Este é o diagrama de chamadas para esta função:"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ virtual QCString trEnumerationValueDocumentation() - { return "Documentação da enumeração"; } + { return "Documentação da enumeração"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Documentação de Função Membro/Subrotina"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Lista de Tipos de Dados"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Campos de Dados"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Aqui estão os tipos de dados com descrições resumidas:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Esta é a lista de todos os membros "; + if (!extractAll) result+="documentados "; + result+="dos tipos de dados com links para "; + if (extractAll) + { + result+="a documentação dos tipos de dados para cada membro:"; + } + else + { + result+="os tipos de dados a que pertencem:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Ãndice de Tipos de Dados"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Documentação dos Tipos de Dados"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funções/Subrotinas"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Documentação da Função/Subrotina"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Tipos de Dados"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Lista de Módulos"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Esta é a lista de todos os módulos "; + if (!extractAll) result+="documentados "; + result+="com descrições resumidas:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result = (QCString)"Referência "; + + if (isTemplate) result+="da Template "; + + switch(compType) + { + case ClassDef::Class: result+="do Modulo "; break; + case ClassDef::Struct: result+="do Tipo "; break; + case ClassDef::Union: result+="da União "; break; + case ClassDef::Interface: result+="da Interface "; break; + case ClassDef::Protocol: result+="do Protocolo "; break; + case ClassDef::Category: result+="da Categoria "; break; + case ClassDef::Exception: result+="da Exceção "; break; + } + result += clName; + + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result = "Referência do Módulo "; + result += namespaceName; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Membros do Módulo"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Esta é a lista de todos os membros "; + if (!extractAll) result+="documentados "; + result+="dos módulos com links para "; + if (extractAll) + { + result+="a documentação dos módulos para cada membro:"; + } + else + { + result+="os módulos a que pertencem:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Ãndice dos Módulos"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Modulo" : "modulo")); + if (!singular) result+="s"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"A documentação para "; + switch(compType) + { + case ClassDef::Class: result+="este modulo "; break; + case ClassDef::Struct: result+="este tipo "; break; + case ClassDef::Union: result+="esta união "; break; + case ClassDef::Interface: result+="esta interface "; break; + case ClassDef::Protocol: result+="esto protocolo "; break; + case ClassDef::Category: result+="esta categoria "; break; + case ClassDef::Exception: result+="esta exceção "; break; + } + + result+=" foi gerada a partir do"; + if (single) + result+=" seguinte arquivo:"; + else + result+="s seguintes arquivos:"; + + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Tipo" : "tipo")); + if (!singular) result+="s"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Subprograma" : "subprograma")); + if (!singular) result+="s"; + return result; + } + + /*! C# Type Contraint list */ + virtual QCString trTypeContraints() + { + return "Restrições do Tipo"; + } }; #endif diff --git a/src/translator_ca.h b/src/translator_ca.h index 03a6fa6..38e5dcf 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -39,7 +39,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorCatalan : public Translator +class TranslatorCatalan : public TranslatorAdapter_1_5_4 { public: diff --git a/src/translator_cn.h b/src/translator_cn.h index 54ed3ec..80d7720 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -24,7 +24,7 @@ */ #define CN_SPC -class TranslatorChinese : public Translator +class TranslatorChinese : public TranslatorAdapter_1_5_4 { public: /*! Used for identification of the language. The identification diff --git a/src/translator_cz.h b/src/translator_cz.h index 17d2b39..1694d70 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -18,58 +18,57 @@ #ifndef TRANSLATOR_CZ_H #define TRANSLATOR_CZ_H +// Updates: +// -------- +// 2007/11/13 - Update for "new since 1.5.4 (mainly for Fortran)". +// 2007/03/20 - removing decode(), conversion of literals to UTF-8. +// 2006/06/13 - translation of the trEnumerationValueDocumentation(). +// and clear in the Czech language. +// modified trCallGraph() to make the meaning unambiguous +// 2006/05/10 - Update for "new since 1.4.6" -- trCallerGraph(), +// 2005/03/08 - Update for "new since 1.4.1" (trOverloadText()) +// 2005/02/11 - The "never used" methods removed. +// 2004/09/14 - The new methods "since 1.3.9" implemented. +// 2004/06/16 - The new method "since 1.3.8" implemented. +// 2004/02/27 - Text inside the trCallGraph() corrected. +// 2004/02/26 - trLegendDocs() updated. +// 2003/08/13 - Four new methods "since 1.3.3" implemented. +// 2003/06/10 - Two new methods "since 1.3.1" implemented. +// 2003/04/28 - Five new methods "since 1.3" implemented. +// 2002/10/15 - The new trEvents() and trEventDocumentation() implemented. +// 2002/07/29 - The new trDeprecatedList() implemented. +// 2002/07/08 - The new trRTFTableOfContents() implemented. (my birthday! ;) +// 2002/03/05 - ... forgot to replace TranslatorAdapter... by Translator. +// 2002/01/23 - Two new methods "since 1.2.13" implemented. +// 2001/11/06 - trReferences() implemented. +// 2001/07/16 - trClassDocumentation() updated as in the English translator. +// 2001/05/25 - Corrections. +// 2001/05/18 - Updates, corrections. +// 2001/05/02 - Decode() inline changed to decode(); cleaning. +// level as other translators. +// class Translator. The English translator is now on the same +// introducing TranslatorAdapter class and the abstract base +// 2001/04/20 - Update for "new since 1.2.6-20010422". Experimental version +// 2001/04/10 - Updates (1.2.6-20010408), cleaning. +// 2001/03/12 - Minor correction of comments (synchronous with translator.h). +// 2001/02/26 - Update for "new since 1.2.5" version (trBug(), trBugList()). +// 2001/02/15 - trMore() now returns only "..." (ellipsis). +// 2001/01/09 - Update for "new since 1.2.4" version. +// 2000/10/17 - Update for "new since 1.2.2" version. +// 2000/09/11 - Update for "new since 1.2.1" version. +// 2000/09/06 - Reimplementation of trInheritsList(). +// 2000/08/31 - ISOToWin() and WinToISO() moved to the base class. +// 2000/08/30 - Macro DECODE replaced by the inline (thanks to Boris Bralo). +// 2000/08/24 - Corrections, updates. +// 2000/08/02 - Updated for 1.2.0 +// 2000/07/19 - Updates for "new since 1.1.5"; encoding conversion separated. +// 2000/07/10 - Update to 1.1.5; conditionally decoding to iso-8859-2 for UNIX. +// 2000/06/20 - Prototype: with diacritics; based on ver. 1.1.4 (from scratch). // -// // The first translation from English to Czech was started by // Vlastimil Havran (1999--2000). The prototype version of Czech strings // with diacritics was implemented by Petr Prikryl (prikrylp@skil.cz), // 2000/06/20. Vlastimil agreed that Petr be the new maintainer. -// -// Updates: -// -------- -// 2000/06/20 - Prototype: with diacritics; based on ver. 1.1.4 (from scratch). -// 2000/07/10 - Update to 1.1.5; conditionally decoding to iso-8859-2 for UNIX. -// 2000/07/19 - Updates for "new since 1.1.5"; encoding conversion separated. -// 2000/08/02 - Updated for 1.2.0 -// 2000/08/24 - Corrections, updates. -// 2000/08/30 - Macro DECODE replaced by the inline (thanks to Boris Bralo). -// 2000/08/31 - ISOToWin() and WinToISO() moved to the base class. -// 2000/09/06 - Reimplementation of trInheritsList(). -// 2000/09/11 - Update for "new since 1.2.1" version. -// 2000/10/17 - Update for "new since 1.2.2" version. -// 2001/01/09 - Update for "new since 1.2.4" version. -// 2001/02/15 - trMore() now returns only "..." (ellipsis). -// 2001/02/26 - Update for "new since 1.2.5" version (trBug(), trBugList()). -// 2001/03/12 - Minor correction of comments (synchronous with translator.h). -// 2001/04/10 - Updates (1.2.6-20010408), cleaning. -// 2001/04/20 - Update for "new since 1.2.6-20010422". Experimental version -// introducing TranslatorAdapter class and the abstract base -// class Translator. The English translator is now on the same -// level as other translators. -// 2001/05/02 - ) inline changed to ); cleaning. -// 2001/05/18 - Updates, corrections. -// 2001/05/25 - Corrections. -// 2001/07/16 - trClassDocumentation() updated as in the English translator. -// 2001/11/06 - trReferences() implemented. -// 2002/01/23 - Two new methods "since 1.2.13" implemented. -// 2002/03/05 - ... forgot to replace TranslatorAdapter... by Translator. -// 2002/07/08 - The new trRTFTableOfContents() implemented. (my birthday! ;) -// 2002/07/29 - The new trDeprecatedList() implemented. -// 2002/10/15 - The new trEvents() and trEventDocumentation() implemented. -// 2003/04/28 - Five new methods "since 1.3" implemented. -// 2003/06/10 - Two new methods "since 1.3.1" implemented. -// 2003/08/13 - Four new methods "since 1.3.3" implemented. -// 2004/02/26 - trLegendDocs() updated. -// 2004/02/27 - Text inside the trCallGraph() corrected. -// 2004/06/16 - The new method "since 1.3.8" implemented. -// 2004/09/14 - The new methods "since 1.3.9" implemented. -// 2005/02/11 - The "never used" methods removed. -// 2005/03/08 - Update for "new since 1.4.1" (trOverloadText()) -// 2006/05/10 - Update for "new since 1.4.6" -- trCallerGraph(), -// modified trCallGraph() to make the meaning unambiguous -// and clear in the Czech language. -// 2006/06/13 - translation of the trEnumerationValueDocumentation(). -// 2007/03/20 - removing ), conversion of literals to UTF-8. // Todo // ---- @@ -77,17 +76,6 @@ // reimplemented element. It can be method, typedef or possibly // something else. It is difficult to find the general translation // for all kinds in the Czech language. -// -// Notices: -// -------- -// The conditional compilation ensures or the neutral functionality -// of the private inline ), or calling the WinToISO() method -// for on-line encoding conversion. If you want to maintain the -// source in the iso-8859-2, do convert the encoding of the source, -// change the conditional definition of the inline ) using the -// method ISO88592ToWin1250() -- for conversion of strings for the -// Windows version. The version which does not call the function is -// probably slightly faster. class TranslatorCzech : public Translator { @@ -106,14 +94,7 @@ class TranslatorCzech : public Translator /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - //if (Config_getBool("USE_WINDOWS_ENCODING")) - //{ return "utf-8"; - //} - //else - //{ - // return "iso-8859-2"; - //} } // --- Language translation methods ------------------- @@ -1633,6 +1614,208 @@ class TranslatorCzech : public Translator { return "Dokumentace výÄtových hodnot"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Dokumentace Älenských funkcÃ/podprogramů"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Seznam datových typů"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Datová pole"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Datové typy se struÄnými popisy:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + + QCString result="Následuje seznam vÅ¡ech "; + if (!extractAll) + { + result+="dokumentovaných "; + } + result+="složek datových typů"; + result+=" s odkazy na "; + if (!extractAll) + { + result+="dokumentaci datové struktury pro každou složku:"; + } + else + { + result+="pÅ™ÃsluÅ¡né datové typy:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "RejstÅ™Ãk datových typů"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Dokumentace k datovým typům"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funkce/podprogramy"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Dokumentace funkce/podprogramu"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Datové typy"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Seznam modulů"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Následuje seznam vÅ¡ech "; + if (!extractAll) result+="dokumentovaných "; + result+="modulů se struÄnými popisy:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result("Dokumentace "); + if (isTemplate) result += "Å¡ablony "; + switch(compType) + { + case ClassDef::Class: result += "tÅ™Ãdy "; break; + case ClassDef::Struct: result += "typu "; break; + case ClassDef::Union: result += "unie "; break; + case ClassDef::Interface: result += "rozhranà "; break; + case ClassDef::Protocol: result += "protokolu "; break; + case ClassDef::Category: result += "kategorie "; break; + case ClassDef::Exception: result += "výjimky "; break; + } + result += clName; + return result; + + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result="Dokumentace modulu "; + result += namespaceName; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Části modulu"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Následuje seznam vÅ¡ech "; + if (!extractAll) result+="dokumentovaných "; + result+="Äástà modulů s odkazy "; + if (extractAll) + { + result+="na dokumentaci modulu pro danou Äást:"; + } + else + { + result+="na moduly, ke kterým Äást patÅ™Ã:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "RejstÅ™Ãk modulů"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Modul" : "modul")); + if (!singular) result+="y"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"Dokumentace "; + switch(compType) + { + case ClassDef::Class: result+="k tomuto modulu"; break; + case ClassDef::Struct: result+="k tomuto typu"; break; + case ClassDef::Union: result+="k této unii"; break; + case ClassDef::Interface: result+="k tomuto rozhranÃ"; break; + 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; + } + result+=" byla vygenerována z "; + if (single) result+="následujÃcÃho souboru:"; + else result+="následujÃcÃch souborů:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Typ" : "typ")); + if (!singular) result+="y"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Podprogram" : "podprogram")); + if (!singular) result+="y"; + return result; + } + + /*! C# Type Contraint list */ + virtual QCString trTypeConstraints() + { + return "Omezenà typů (Type Constraints)"; + } + }; #endif // TRANSLATOR_CZ_H diff --git a/src/translator_de.h b/src/translator_de.h index fd1313d..1bbe711 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -117,7 +117,7 @@ #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public Translator +class TranslatorGerman : public TranslatorAdapter_1_5_4 { public: diff --git a/src/translator_dk.h b/src/translator_dk.h index 70ff479..6f46dbc 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -3,7 +3,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -79,7 +79,7 @@ #ifndef TRANSLATOR_DK_H #define TRANSLATOR_DK_H -class TranslatorDanish : public Translator +class TranslatorDanish : public TranslatorAdapter_1_5_4 { public: diff --git a/src/translator_en.h b/src/translator_en.h index c6fde5b..fda3b22 100644 --- a/src/translator_en.h +++ b/src/translator_en.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -42,10 +42,6 @@ */ class TranslatorEnglish : public Translator { - protected: - friend class TranslatorAdapterBase; - virtual ~TranslatorEnglish() {} - public: // --- Language control methods ------------------- @@ -1582,6 +1578,203 @@ class TranslatorEnglish : public Translator virtual QCString trEnumerationValueDocumentation() { return "Enumerator Documentation"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Member Function/Subroutine Documentation"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Data Types List"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Data Fields"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Here are the data types with brief descriptions:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Here is a list of all "; + if (!extractAll) + { + result+="documented "; + } + result+="data types members"; + result+=" with links to "; + if (!extractAll) + { + result+="the data structure documentation for each member"; + } + else + { + result+="the data types they belong to:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Data Type Index"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Data Type Documentation"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Functions/Subroutines"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Function/Subroutine Documentation"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Data Types"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Modules List"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Here is a list of all "; + if (!extractAll) result+="documented "; + result+="modules with brief descriptions:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + switch(compType) + { + case ClassDef::Class: result+=" Module"; break; + case ClassDef::Struct: result+=" Type"; break; + case ClassDef::Union: result+=" Union"; break; + case ClassDef::Interface: result+=" Interface"; break; + case ClassDef::Protocol: result+=" Protocol"; break; + case ClassDef::Category: result+=" Category"; break; + case ClassDef::Exception: result+=" Exception"; break; + } + if (isTemplate) result+=" Template"; + result+=" Reference"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Module Reference"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Module Members"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Here is a list of all "; + if (!extractAll) result+="documented "; + result+="module members with links to "; + if (extractAll) + { + result+="the module documentation for each member:"; + } + else + { + result+="the modules they belong to:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Modules Index"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Module" : "module")); + if (!singular) result+="s"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"The documentation for this "; + switch(compType) + { + case ClassDef::Class: result+="module"; break; + case ClassDef::Struct: result+="type"; break; + case ClassDef::Union: result+="union"; break; + case ClassDef::Interface: result+="interface"; break; + case ClassDef::Protocol: result+="protocol"; break; + case ClassDef::Category: result+="category"; break; + case ClassDef::Exception: result+="exception"; break; + } + result+=" was generated from the following file"; + if (single) result+=":"; else result+="s:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Type" : "type")); + if (!singular) result+="s"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Subprogram" : "subprogram")); + if (!singular) result+="s"; + return result; + } + + /*! C# Type Constraint list */ + virtual QCString trTypeConstraints() + { + return "Type Constraints"; + } }; diff --git a/src/translator_es.h b/src/translator_es.h index d145f69..7ae0072 100644 --- a/src/translator_es.h +++ b/src/translator_es.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -27,7 +27,7 @@ #ifndef TRANSLATOR_ES_H #define TRANSLATOR_ES_H -class TranslatorSpanish : public Translator +class TranslatorSpanish : public TranslatorAdapter_1_5_4 { public: diff --git a/src/translator_fa.h b/src/translator_fa.h index 5f3a436..1a245b2 100644 --- a/src/translator_fa.h +++ b/src/translator_fa.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_fi.h b/src/translator_fi.h index 132da4d..43813e6 100644 --- a/src/translator_fi.h +++ b/src/translator_fi.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_fr.h b/src/translator_fr.h index 0ee59b5..1ea6d00 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -100,7 +100,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorFrench : public Translator +class TranslatorFrench : public TranslatorAdapter_1_5_4 { public: diff --git a/src/translator_gr.h b/src/translator_gr.h index 224fe99..04f523b 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -26,7 +26,7 @@ #ifndef TRANSLATOR_GR_H #define TRANSLATOR_GR_H -class TranslatorGreek : public Translator +class TranslatorGreek : public TranslatorAdapter_1_5_4 { protected: friend class TranslatorAdapterBase; diff --git a/src/translator_hr.h b/src/translator_hr.h index 81d29f1..84f38be 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -108,7 +108,7 @@ class TranslatorCroatian : public Translator QCString trRelatedSubscript() { return "(To nisu member funkcije.)"; } QCString trDetailedDescription() - { return decode("Detaljno obja¹njenje"); } + { return decode("Detaljno objašnjenje"); } QCString trMemberTypedefDocumentation() { return decode("Dokumentacija typedef èlanova"); } QCString trMemberEnumerationDocumentation() @@ -118,7 +118,7 @@ class TranslatorCroatian : public Translator QCString trMemberDataDocumentation() { return "Documentacija varijabli"; } QCString trMore() - { return decode("Op¹irnije..."); } + { return decode("Opširnije..."); } QCString trListOfAllMembers() { return decode("Popis svih èlanova."); } QCString trMemberList() @@ -170,10 +170,10 @@ class TranslatorCroatian : public Translator QCString trExamples() { return "Primjeri"; } QCString trSearch() - { return decode("Tra¾i"); } + { return decode("Traži"); } QCString trClassHierarchyDescription() - { return decode("Stablo naslijeðivanja je slo¾eno " - "pribli¾no po abecedi:"); + { return decode("Stablo naslijeðivanja je složeno " + "približno po abecedi:"); } QCString trFileListDescription(bool extractAll) { @@ -371,8 +371,8 @@ class TranslatorCroatian : public Translator case ClassDef::Struct: result+=" strukture "; break; case ClassDef::Union: result+=" unije "; break; case ClassDef::Interface: result+=" suèelja (interface) "; break; - case ClassDef::Protocol: result+=" protocol "; break; // translate me! - case ClassDef::Category: result+=" category "; break; // translate me! + case ClassDef::Protocol: result+=" protokola "; break; + case ClassDef::Category: result+=" kategorije "; break; case ClassDef::Exception: result+=" iznimke (exception) "; break; } result += clName; @@ -411,11 +411,11 @@ class TranslatorCroatian : public Translator QCString trStaticProtectedMembers() { return decode("Static protected èlanovi"); } QCString trPrivateMembers() - { return decode("Private èlanovi"); } + { return decode("Privatni èlanovi"); } QCString trPrivateSlots() - { return decode("Private slotovi"); } + { return decode("Privatni slotovi"); } QCString trStaticPrivateMembers() - { return decode("Static private èlanovi"); } + { return decode("Statièni privatni èlanovi"); } // end of member sections QCString trWriteList(int numEntries) @@ -514,15 +514,15 @@ class TranslatorCroatian : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result="Dokumentacija ove "; + QCString result="Dokumentacija "; switch(compType) { case ClassDef::Class: result+="klase"; break; case ClassDef::Struct: result+="strukture"; break; case ClassDef::Union: result+="unije"; break; case ClassDef::Interface: result+="suèelja (interface)"; break; - case ClassDef::Protocol: result+="protocol"; break; // translate me! - case ClassDef::Category: result+="category"; break; // translate me! + case ClassDef::Protocol: result+="protokola"; break; + case ClassDef::Category: result+="kategorije"; break; case ClassDef::Exception: result+="iznimke (exception)"; break; } result+=" je generirana iz " + trFile(FALSE, single) + ": "; @@ -720,7 +720,7 @@ class TranslatorCroatian : public Translator } virtual QCString trAttention() { - return decode("Pa¾nja"); + return decode("Pažnja"); } virtual QCString trInclByDepGraph() { @@ -745,7 +745,7 @@ class TranslatorCroatian : public Translator virtual QCString trLegendDocs() { return - decode( "Ova stranica obja¹njava kako interpretirati grafikone koje je generirao " + decode( "Ova stranica objašnjava kako interpretirati grafikone koje je generirao " "doxygen.<p>\n" "Na primjer:\n" "\\code\n" @@ -908,7 +908,7 @@ class TranslatorCroatian : public Translator /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return decode("Sadr¾aj"); + return decode("Sadržaj"); } /*! This is used for translation of the word that will possibly @@ -1046,7 +1046,7 @@ class TranslatorCroatian : public Translator */ virtual QCString trRTFTableOfContents() { - return decode("Sadr¾aj"); + return decode("Sadržaj"); } ////////////////////////////////////////////////////////////////////////// // new since 1.2.17 @@ -1274,6 +1274,202 @@ class TranslatorCroatian : public Translator */ virtual QCString trEnumerationValueDocumentation() { return "Dokumentacija enumeracija"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Dokumentacija member funkcija/subrutina"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Lista tipova podataka"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Polja"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Tipovi podataka s kratkim opisom:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Lista svih "; + if (!extractAll) + { + result+="dokumentiranih "; + } + result+="polja"; + result+=" s linkovima na "; + if (!extractAll) + { + result+="dokumentaciju struktura podataka za svako polje"; + } + else + { + result+="strukture kojima pripadaju:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Kazalo data tipova"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Dokumentacija tipova podataka"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funkcije/Subrutine"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Documentacija funkcija/subrutina"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Tipovi podataka"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Popis modula"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Lista svih "; + if (!extractAll) result+="dokumentiranih "; + result+="modula s kratkim opisom:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + 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; + } + if (isTemplate) result+=" Predložak"; + result+=" Referenca"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" - Sadržaj modula"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Èlanovi modula"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Lista svih "; + if (!extractAll) result+="dokumentiranih "; + result+="èlanova modula s linkovima na "; + if (extractAll) + { + result+="dokumentaciju modula za svaki èlan:"; + } + else + { + result+="modul kojem pripadaju:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Kazalo modula"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Modul" : "modul")); + if (!singular) result+="i"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + 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; + } + result+=" je generirana iz :"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Tip" : "tip")); + if (!singular) result+="ovi"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Subprogram" : "subprogram")); + if (!singular) result+="i"; + return result; + } + + /*! C# Type Contraint list */ + virtual QCString trTypeConstraints() + { + return "Ogranièenja za tip podataka"; + } }; #endif diff --git a/src/translator_hu.h b/src/translator_hu.h index dd3e405..a6e4a82 100644 --- a/src/translator_hu.h +++ b/src/translator_hu.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_id.h b/src/translator_id.h index 311e0a8..d0fc52b 100644 --- a/src/translator_id.h +++ b/src/translator_id.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_it.h b/src/translator_it.h index edaba52..6f80b22 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -19,6 +19,8 @@ * * Revision history * + * 2007/11: updated translation of new items used since version 1.5.4 + * 2007/10: Included corrections provided by Arialdo Martini <arialdomartini@bebox.it>, updated some strings marked with 'translate me' comment * 2006/10: made class to derive directly from Translator class (reported in Petr Prikryl October 9 translator report) * 2006/06: updated translation of new items used since version 1.4.6 * 2006/05: translated new items used since version 1.4.6 @@ -56,7 +58,7 @@ * commented translator.h for the english language * 1999/09: corrected some small typos in the "new since 0.49-990425" section * added the "new since 0.49-990728" section - * 1999/06: revised and completed by Alessandro Falappa (actual mantainer) + * 1999/06: revised and completed by Alessandro Falappa (current mantainer) * 1999/??: initial italian translation by Ahmed Aldo Faisal */ @@ -67,7 +69,7 @@ * Nella traduzione non si sono tradotti alcuni termini inglesi ormai entrati * a far parte del "gergo" informatico (per es. file o namespace) * - * Il plurale dei termini inglesi non tradotti è stato reso con il singolare + * Il plurale dei termini inglesi non tradotti è stato reso con il singolare * della parola inglese secondo una convenzione spesso ritrovata nella documentazione * tecnica (ad es. "lista dei file" e non "lista dei files") * @@ -104,7 +106,7 @@ class TranslatorItalian : public Translator /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() { - return "iso-8859-1"; + return "UTF-8"; } // --- Language translation methods ------------------- @@ -119,7 +121,7 @@ class TranslatorItalian : public Translator /*! header that is put before the detailed description of files, classes and namespaces. */ QCString trDetailedDescription() - { return "Descrizione Dettagliata"; } + { return "Descrizione dettagliata"; } /*! header that is put before the list of typedefs. */ QCString trMemberTypedefDocumentation() @@ -152,15 +154,15 @@ class TranslatorItalian : public Translator /*! put in the class documentation */ QCString trListOfAllMembers() - { return "Lista di tutti i membri."; } + { return "Elenco di tutti i membri."; } /*! used as the title of the "list of all members" page of a class */ QCString trMemberList() - { return "Lista dei membri"; } + { return "Elenco dei membri"; } /*! this is the first part of a sentence that is followed by a class name */ QCString trThisIsTheListOfAllMembers() - { return "Questa è la lista completa di tutti i membri di "; } + { return "Questo è l'elenco completo di tutti i membri di "; } /*! this is the remainder of the sentence after the class name */ QCString trIncludingInheritedMembers() @@ -210,13 +212,13 @@ class TranslatorItalian : public Translator } else { - return "Lista dei composti"; + return "Elenco dei tipi composti"; } } /*! This is put above each page as a link to the list of documented files */ QCString trFileList() - { return "Lista dei file"; } + { return "Elenco dei file"; } /*! This is put above each page as a link to all members of compounds. */ QCString trCompoundMembers() @@ -259,14 +261,14 @@ class TranslatorItalian : public Translator /*! This is an introduction to the class hierarchy. */ QCString trClassHierarchyDescription() { - return "Questa lista di ereditarietà è ordinata " + return "Questo elenco di ereditarietà è ordinato " "approssimativamente, ma non completamente, in ordine alfabetico:"; } /*! This is an introduction to the list with all files. */ QCString trFileListDescription(bool extractAll) { - QCString result="Questa è una lista "; + QCString result="Questo è un elenco "; if (!extractAll) result+="dei file documentati "; else result+="di tutti i file "; result+="con una loro breve descrizione:"; @@ -283,14 +285,14 @@ class TranslatorItalian : public Translator } else { - return "Queste sono le classi, structs, unions e interfacce con una loro breve descrizione:"; + return "Queste sono le classi, le struct, le union e le interfacce con una loro breve descrizione:"; } } /*! This is an introduction to the page with all class members. */ QCString trCompoundMembersDescription(bool extractAll) { - QCString result="Questa è una lista "; + QCString result="Questo è un elenco "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { if (!extractAll) result+="delle struct e delle union documentate "; @@ -309,7 +311,7 @@ class TranslatorItalian : public Translator } else { - if (extractAll) result+="della classe di ciascun membro:"; + if (extractAll) result+="della classe a cui appartengono:"; else result+="delle classi a cui appartengono:"; } return result; @@ -318,11 +320,11 @@ class TranslatorItalian : public Translator /*! This is an introduction to the page with all file members. */ QCString trFileMembersDescription(bool extractAll) { - QCString result="Questa è una lista "; + QCString result="Questo è un elenco "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - if (!extractAll) result+="delle funczioni, variabili, define, tipi enumerati, e typedefs documentati "; - else result+="di tutte le funczioni, variabili, define, tipi enumerati, e typedefs "; + if (!extractAll) result+="delle funczioni, delle variabili, delle define, dei tipi enumerati e delle typedef documentate "; + else result+="di tutte le funczioni, variabili, define, tipi enumerati, e typedef "; } else { @@ -337,15 +339,15 @@ class TranslatorItalian : public Translator /*! This is an introduction to the page with the list of all examples */ QCString trExamplesDescription() - { return "Questa è la lista di tutti gli esempi:"; } + { return "Questo è l'elenco di tutti gli esempi:"; } /*! This is an introduction to the page with the list of related pages */ QCString trRelatedPagesDescription() - { return "Questa è la lista di tutte le pagine di documentazione generale:"; } + { return "Questo è l'elenco di tutte le pagine di documentazione generale:"; } /*! This is an introduction to the page with the list of class/file groups */ QCString trModulesDescription() - { return "Questa è la lista di tutti i moduli:"; } + { return "Questo è l'elenco di tutti i moduli:"; } // index titles (the project name is prepended for these) @@ -376,7 +378,7 @@ class TranslatorItalian : public Translator } else { - return "Indice dei composti"; + return "Indice dei tipi composti"; } } @@ -414,7 +416,7 @@ class TranslatorItalian : public Translator * the documentation of all related pages. */ QCString trPageDocumentation() - { return "Documentazione delle pagine collegate fra loro"; } + { return "Documentazione delle pagine tra loro collegate "; } /*! This is used in LaTeX as the title of the document */ QCString trReferenceManual() @@ -436,7 +438,7 @@ class TranslatorItalian : public Translator * list of typedefs */ QCString trTypedefs() - { return "Ridefinizioni di tipo (typedefs)"; } + { return "Ridefinizioni di tipo (typedef)"; } /*! This is used in the documentation of a file as a header before the * list of enumerations @@ -478,7 +480,7 @@ class TranslatorItalian : public Translator * of documentation blocks for typedefs */ QCString trTypedefDocumentation() - { return "Documentazione delle ridefinizioni di tipo (typedefs)"; } + { return "Documentazione delle ridefinizioni di tipo (typedef)"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types @@ -583,7 +585,7 @@ class TranslatorItalian : public Translator /*! used as an introduction to the namespace list */ QCString trNamespaceListDescription(bool extractAll) { - QCString result="Questa è la lista "; + QCString result="Questa è l'elenco "; if (!extractAll) result+="dei namespace documentati, "; else result+="di tutti i namespace "; result+="con una loro breve descrizione:"; @@ -623,9 +625,9 @@ class TranslatorItalian : public Translator case ClassDef::Struct: result+="la struct "; break; case ClassDef::Union: result+="la union "; break; case ClassDef::Interface: result+="l'interfaccia "; break; - case ClassDef::Protocol: result+="protocol "; break; // translate me! - case ClassDef::Category: result+="category "; break; // translate me! - case ClassDef::Exception: result+="exception "; break; + case ClassDef::Protocol: result+="il protocollo "; break; + case ClassDef::Category: result+="la categoria "; break; + case ClassDef::Exception: result+="l'eccezione "; break; } result+=(QCString)clName; return result; @@ -734,7 +736,7 @@ class TranslatorItalian : public Translator /*! This is an introduction to the page with all namespace members */ QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="Questa è la lista "; + QCString result="Questa è la lista "; if (!extractAll) result+="dei membri dei namespace documentati, "; else result+="di tutti i membri dei namespace "; result+="con collegamenti "; @@ -777,18 +779,18 @@ class TranslatorItalian : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"La documentazione per questa "; + QCString result=(QCString)"La documentazione per quest"; switch(compType) { - case ClassDef::Class: result+="classe"; break; - case ClassDef::Struct: result+="struct"; break; - case ClassDef::Union: result+="union"; break; - case ClassDef::Interface: result+="interfaccia"; break; - case ClassDef::Protocol: result+="protocol"; break; // translate me! - case ClassDef::Category: result+="category"; break; // translate me! - case ClassDef::Exception: result+="exception"; break; + case ClassDef::Class: result+="a classe"; break; + case ClassDef::Struct: result+="a struct"; break; + case ClassDef::Union: result+="a union"; break; + case ClassDef::Interface: result+="a interfaccia"; break; + case ClassDef::Protocol: result+="o protocollo"; break; + case ClassDef::Category: result+="a categoria"; break; + case ClassDef::Exception: result+="a eccezione"; break; } - result+=" è stata generata a partire "; + result+=" è stata generata a partire "; if (single) result+="dal seguente file:"; else result+="dai seguenti file:"; return result; @@ -977,7 +979,7 @@ class TranslatorItalian : public Translator /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "Lista di cose da fare"; + return "Elenco delle cose da fare"; } ////////////////////////////////////////////////////////////////////////// @@ -1023,17 +1025,17 @@ class TranslatorItalian : public Translator "\\code\n" "/*! Classe invisibile per troncamento */\n" "class Invisible { };\n\n" - "/*! Classe troncata, la relazione di ereditarietà e nascosta */\n" + "/*! Classe troncata, la relazione di ereditarietà e nascosta */\n" "class Truncated : public Invisible { };\n\n" "/* Classe non documentata con i commenti speciali di doxygen*/\n" "class Undocumented { };\n\n" - "/*! Classe che utilizza una ereditarietà pubblica */\n" + "/*! Classe che utilizza una ereditarietà pubblica */\n" "class PublicBase : public Truncated { };\n\n" "/*! A template class */\n" "template<class T> class Templ { };\n\n" - "/*! Classe che utilizza una ereditarietà protetta*/\n" + "/*! Classe che utilizza una ereditarietà protetta*/\n" "class ProtectedBase { };\n\n" - "/*! Classe che utilizza una ereditarietà privata*/\n" + "/*! Classe che utilizza una ereditarietà privata*/\n" "class PrivateBase { };\n\n" "/*! Classe utilizzata dalla classe Inherited */\n" "class Used { };\n\n" @@ -1049,23 +1051,23 @@ class TranslatorItalian : public Translator "};\n" "\\endcode\n" "Se il tag \\c MAX_DOT_GRAPH_HEIGHT nel file di configurazione " - "è impostato a 200 verrà prodotto il grafo seguente:" + "è impostato a 200 verrà prodotto il grafo seguente:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" "I riquadri nel grafo qui sopra hanno il seguente significato:\n" "<ul>\n" - "<li>Il riquadro nero pieno rappresenta la struct o la classe per la quale il grafo è stato generato.\n" + "<li>Il riquadro nero pieno rappresenta la struct o la classe per la quale il grafo è stato generato.\n" "<li>Un riquadro con un bordo nero denota una struct o una classe documentata.\n" "<li>Un riquadro con un bordo grigio indica una struct o una classe non documentata.\n" - "<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà/contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti)." + "<li>Un riquadro con un bordo rosso indica una struct o una classe per la quale non sono mostrate tutte le relazioni di ereditarietà /contenimento (un grafo viene troncato se non rientra nei limiti prestabiliti)." "</ul>\n" "Le frecce hanno il seguente significato:\n" "<ul>\n" - "<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.\n" - "<li>Una freccia verde indica un'ereditarietà protetta.\n" - "<li>Una freccia rossa indica un'ereditarietà privata.\n" - "<li>Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe." - " La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.\n" + "<li>Una freccia blu scuro indica una relazione di ereditarietà pubblica tra due classi.\n" + "<li>Una freccia verde indica un'ereditarietà protetta.\n" + "<li>Una freccia rossa indica un'ereditarietà privata.\n" + "<li>Una freccia viola tratteggiata indica che una classe è contenuta o usata da un'altra classe." + " La freccia viene etichettata con la o le variabili attraverso cui la struct o la classe puntata dalla freccia è accessibile.\n" "</ul>\n"; } /*! text for the link to the legend page */ @@ -1106,12 +1108,12 @@ class TranslatorItalian : public Translator /*! Used as a section header for IDL properties */ virtual QCString trProperties() { - return "Proprietà"; + return "Proprietà "; } /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "Documentazione delle proprietà"; + return "Documentazione delle proprietà "; } ////////////////////////////////////////////////////////////////////////// @@ -1362,35 +1364,35 @@ class TranslatorItalian : public Translator */ virtual QCString trPackageTypes() { - return "Tipi con visibilità di package"; + return "Tipi con visibilità di package"; } /*! Used as a heading for a list of Java class functions with package * scope. */ virtual QCString trPackageMembers() { - return "Funzioni con visibilità di package"; + return "Funzioni con visibilità di package"; } /*! Used as a heading for a list of static Java class functions with * package scope. */ virtual QCString trStaticPackageMembers() { - return "Funzioni statiche con visibilità di package"; + return "Funzioni statiche con visibilità di package"; } /*! Used as a heading for a list of Java class variables with package * scope. */ virtual QCString trPackageAttribs() { - return "Attributi con visibilità di package"; + return "Attributi con visibilità di package"; } /*! Used as a heading for a list of static Java class variables with * package scope. */ virtual QCString trStaticPackageAttribs() { - return "Attributi statici con visibilità di package"; + return "Attributi statici con visibilità di package"; } ////////////////////////////////////////////////////////////////////////// @@ -1407,7 +1409,7 @@ class TranslatorItalian : public Translator /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Questo è il grafo delle chiamate per questa funzione:"; + return "Questo è il grafo delle chiamate per questa funzione:"; } ////////////////////////////////////////////////////////////////////////// @@ -1445,11 +1447,11 @@ class TranslatorItalian : public Translator } else if (numDocuments==1) { - return "Trovato <b>1</b> documento rispondente alla tua richiesta."; + return "Trovato <b>1</b> documento che soddisfa la tua richiesta."; } else { - return "Trovati <b>$num</b> documenti rispondenti alla tua richiesta. " + return "Trovati <b>$num</b> documenti che soddisfano la tua richiesta. " "Le corrispondenze migliori sono in testa."; } } @@ -1498,8 +1500,8 @@ class TranslatorItalian : public Translator * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { return "Questa gerarchia di directory è ordinata " - "approssimativamente, ma non completamente, in ordine alfabetico:"; + { return "Questa gerarchia di directory è approssimativamente, " + "ma non completamente, ordinata in ordine alfabetico:"; } /*! This returns the title of a directory page. The name of the @@ -1526,8 +1528,8 @@ class TranslatorItalian : public Translator */ virtual QCString trOverloadText() { - return "Questa è una funzione membro sovraccaricata (overloaded), " - "fornita per comodità. Differisce dalla funzione di cui sopra" + return "Questa è una funzione membro sovraccaricata (overloaded), " + "fornita per comodità . Differisce dalla funzione di cui sopra" "unicamente per gli argomenti passati."; } @@ -1538,7 +1540,7 @@ class TranslatorItalian : public Translator /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Questo è il grafo dei chiamanti di questa funzione:"; + return "Questo è il grafo dei chiamanti di questa funzione:"; } /*! This is used in the documentation of a file/namespace before the list @@ -1547,6 +1549,207 @@ class TranslatorItalian : public Translator virtual QCString trEnumerationValueDocumentation() { return "Documentazione dei tipi enumerati"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Documentazione delle funzioni membro/subroutine"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Elenco dei tipi di dato"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Membri dei tipi di dato"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Questi sono i tipi dato con una loro breve descrizione:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Questa è una lista di tutti i membri "; + if (!extractAll) + { + result+="documentati "; + } + result+="dei tipi di dato con collegamenti "; + if (!extractAll) + { + result+="alla documentazione della struttura dati per ciascun membro:"; + } + else + { + result+="ai tipi dato a cui appartengono:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Indice dei tipi dati"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Documentazione dei tipi dato"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Funzioni/Subroutine"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Documentazione funzioni/subroutine"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Tipi di dato"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Elenco dei moduli"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Questa è una lista di tutti i moduli "; + if (!extractAll) result+="documentati "; + result+="con una loro breve descrizione:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result="Riferimenti per "; + if (isTemplate) result="Template per "; + switch(compType) + { + case ClassDef::Class: result+=" il modulo"; break; + case ClassDef::Struct: result+=" il tipo dato"; break; + case ClassDef::Union: result+=" l'union"; break; + case ClassDef::Interface: result+=" l'nterfaccia"; break; + case ClassDef::Protocol: result+=" il protocollo"; break; + case ClassDef::Category: result+=" la categoria"; break; + case ClassDef::Exception: result+=" l'eccezione"; break; + } + result+=(QCString)clName; + return result; + } + + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result="Riferimenti per il modulo "; + result+=namespaceName; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Membri del modulo"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Questo è un elenco di tutti i membri dei moduli "; + if (!extractAll) result+="documentati "; + result+="con collegamenti "; + if (extractAll) + { + result+="alla documentazione del modulo per ciascun membro:"; + } + else + { + result+="al modulo a cui appartengono:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Indice dei moduli"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Modul" : "modul")); + if (singular) result+="o"; + else result+="i"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"La documentazione per quest"; + switch(compType) + { + case ClassDef::Class: result+="o modulo"; break; + case ClassDef::Struct: result+="o tipo"; break; + case ClassDef::Union: result+="a union"; break; + case ClassDef::Interface: result+="a interfaccia"; break; + case ClassDef::Protocol: result+="o protocollo"; break; + case ClassDef::Category: result+="a categoria"; break; + case ClassDef::Exception: result+="a eccezione"; break; + } + result+=" è stata generata a partire "; + if (single) result+="dal seguente file:"; else result+="dai seguenti file:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Tip" : "tip")); + if (singular) result+="o"; + else result+="i"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Sottoprogramm" : "sottoprogramm")); + if (singular) result+="a"; + else result+="i"; + return result; + } + + /*! C# Type Contraint list */ + virtual QCString trTypeConstraints() + { + return "Vincoli dei tipi"; + } + }; #endif diff --git a/src/translator_je.h b/src/translator_je.h index 1b7f4b1..c7ee97a 100644 --- a/src/translator_je.h +++ b/src/translator_je.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_jp.h b/src/translator_jp.h index c9a5d29..31b4c1f 100644 --- a/src/translator_jp.h +++ b/src/translator_jp.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -29,7 +29,7 @@ #ifndef TRANSLATOR_JP_H #define TRANSLATOR_JP_H -class TranslatorJapanese : public Translator +class TranslatorJapanese : public TranslatorAdapter_1_5_4 { private: /*! The decode() can change euc into sjis */ diff --git a/src/translator_ke.h b/src/translator_ke.h index 027a670..3e2ebf2 100644 --- a/src/translator_ke.h +++ b/src/translator_ke.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_kr.h b/src/translator_kr.h index bd5aa26..5f059c1 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -20,8 +20,8 @@ /* Korean translators - * doxygen-cvs - * * fly1004 + * doxygen-svn + * * fly1004@gmail.com * doxygen-1.5.3 * * Astromaker(http://ngps.net/) * * gpgiki(http://www.gpgstudy.com/gpgiki/) @@ -1574,7 +1574,7 @@ class TranslatorKorean : public Translator */ virtual QCString trOverloadText() { - return "ÀÌ ÇÔ¼ö´Â ÆíÀÇ Á¦°øÇϱâ À§ÇØ ¿À¹ö·ÎµåµÈ ¸â¹ö ÇÔ¼öÀÔ´Ï´Ù. " + return "ÀÌ ÇÔ¼ö´Â ÆíÀǸ¦ Á¦°øÇϱâ À§ÇØ ¿À¹ö·ÎµåµÈ ¸â¹ö ÇÔ¼öÀÔ´Ï´Ù. " "À§ÀÇ ÇÔ¼ö¿Í Ʋ¸° Á¡Àº ´ÜÁö ¹Þ¾ÆµéÀÌ´Â ¾Æ±Ô¸ÕÆ®(argument)°¡ ´Ù¸£´Ù´Â °ÍÀÔ´Ï´Ù."; } @@ -1594,6 +1594,205 @@ class TranslatorKorean : public Translator virtual QCString trEnumerationValueDocumentation() { return "¿°ÅÇü ¹®¼È"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "¸â¹ö ÇÔ¼ö/¼ºê·çƾ ¹®¼È"; } + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "µ¥ÀÌŸ ŸÀÔ ¸ñ·Ï"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "µ¥ÀÌŸ Çʵå"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "´ë·«ÀûÀÎ ¼³¸í°ú ÇÔ²² µ¥ÀÌŸ ŸÀÔµéÀÇ ¸ñ·ÏÀÔ´Ï´Ù.:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Here is a list of all "; + if (!extractAll) + { + result+="documented "; + } + result+="data types members"; + result+=" with links to "; + if (!extractAll) + { + result+="the data structure documentation for each member"; + } + else + { + result+="the data types they belong to:"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "µ¥ÀÌŸ ŸÀÔ »öÀÎ"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "µ¥ÀÌŸ ŸÀÔ ¹®¼È"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "ÇÔ¼ö/¼ºê·çƾ"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "ÇÔ¼ö/¼ºê·çƾ ¹®¼È"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "µ¥ÀÌŸ ŸÀÔµé"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "¸ðµâ ¸ñ·Ï"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="´ÙÀ½Àº "; + if (!extractAll) result+="¹®¼ÈµÈ "; + result+="¸ðµç ¸ðµâ¿¡ ´ëÇÑ ¸ñ·ÏÀÔ´Ï´Ù. (°£·«ÇÑ ¼³¸í¸¸À» º¸¿©ÁÝ´Ï´Ù) :"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + 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+=" ÅÛÇø´"; + result+=" ÂüÁ¶"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" ¸ðµâ ÂüÁ¶"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "¸ðµâ ¸â¹öµé"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="´ÙÀ½Àº "; + if (!extractAll) result+="¹®¼ÈµÈ "; + result+="¸ðµç ¸ðµâ ¸â¹öÀÇ ¸ñ·ÏÀÔ´Ï´Ù. "; + if (extractAll) + { + result+="°¢ Ç׸ñÀº °¢ ¸â¹öÀÇ ¸ðµâ ¹®¼È ÆäÀÌÁöÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :"; + } + else + { + result+="°¢ Ç׸ñÀº ±×µéÀÌ ¼ÓÇÑ ¸ðµâÀÇ ¸µÅ©¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. :"; + } + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "¸ðµâ »öÀÎ"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "¸ðµâ" : "¸ðµâ")); + if (!singular) result+="µé"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Module", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"´ÙÀ½ ÆÄÀÏ"; + if (single) result+=""; else result+="µé"; + result+="·ÎºÎÅÍ »ý¼ºµÈ "; + 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; + } + result+="ÀÇ ¹®¼È ÆäÀÌÁö:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "ŸÀÔ" : "ŸÀÔ")); + if (!singular) result+="µé"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "¼ºêÇÁ·Î±×·¥" : "¼ºêÇÁ·Î±×·¥")); + if (!singular) result+="µé"; + return result; + } + + /*! C# Type Contraint list */ + virtual QCString trTypeConstraints() + { + return "ŸÀÔ ÇÑÁ¤ÀÚµé"; + } }; diff --git a/src/translator_lt.h b/src/translator_lt.h index 35ec74f..13a348c 100644 --- a/src/translator_lt.h +++ b/src/translator_lt.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_mk.h b/src/translator_mk.h new file mode 100644 index 0000000..0500b66 --- /dev/null +++ b/src/translator_mk.h @@ -0,0 +1,1564 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ +// Тranslated by Slave Jovanovski <slavejovanovski@yahoo.com> +// +// The cyrilic strings were entered using Macedonian language support in +// Windows. The editor used was Eclipse 3.2. The file was saved in UTF-8. +// +// Updates: +// -------- +// 2007/12/09 +// - Initial translation to Macedonian. +// +// + +#ifndef TRANSLATOR_MK_H +#define TRANSLATOR_MK_H + +class TranslatorMacedonian : public TranslatorAdapter_1_4_6 +{ + public: + + // --- Language control methods ------------------- + + /*! 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 should be equal to + * the identification used in language.cpp. + */ + virtual QCString idLanguage() + { return "macedonian"; } + + /*! Used to get the LaTeX command(s) for the language support. + * This method should return string with commands that switch + * LaTeX to the desired language. For example + * <pre>"\\usepackage[german]{babel}\n" + * </pre> + * or + * <pre>"\\usepackage{polski}\n" + * "\\usepackage[latin2]{inputenc}\n" + * "\\usepackage[T1]{fontenc}\n" + * </pre> + * + * The English LaTeX does not use such commands. Because of this + * the empty string is returned in this implementation. + */ + virtual QCString latexLanguageSupportCommand() + { + return "\\usepackage[macedonian]{babel}\n"; + } + + /*! return the language charset. This will be used for the HTML output */ + virtual QCString idLanguageCharset() + { + return "UTF-8"; + } + + // --- Language translation methods ------------------- + + /*! used in the compound documentation before a list of related functions. */ + virtual QCString trRelatedFunctions() + { return "Поврзани Функции"; } + + /*! subscript for the related functions. */ + virtual QCString trRelatedSubscript() + { return "(Овие функции не Ñе членови.)"; } + + /*! header that is put before the detailed description of files, classes and namespaces. */ + virtual QCString trDetailedDescription() + { return "Детален опиÑ"; } + + /*! header that is put before the list of typedefs. */ + virtual QCString trMemberTypedefDocumentation() + { return "Документација на членови дефиниции на тип"; } + + /*! header that is put before the list of enumerations. */ + virtual QCString trMemberEnumerationDocumentation() + { return "Документација на набројани членови"; } + + /*! header that is put before the list of member functions. */ + virtual QCString trMemberFunctionDocumentation() + { return "Документација на функции членови"; } + + /*! header that is put before the list of member attributes. */ + virtual QCString trMemberDataDocumentation() + { + //if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Документација на членови"; + } + } + + /*! this is the text of a link put after brief descriptions. */ + virtual QCString trMore() + { return "Повеќе..."; } + + /*! put in the class documentation */ + virtual QCString trListOfAllMembers() + { return "СпиÑок на Ñите членови."; } + + /*! used as the title of the "list of all members" page of a class */ + virtual QCString trMemberList() + { return "СпиÑок на членови"; } + + /*! this is the first part of a sentence that is followed by a class name */ + virtual QCString trThisIsTheListOfAllMembers() + { return "Ова е целоÑниот ÑпиÑок на членови на "; } + + /*! this is the remainder of the sentence after the class name */ + virtual QCString trIncludingInheritedMembers() + { return ", вклучувајќи ги Ñите наÑледени членови."; } + + /*! this is put at the author sections at the bottom of man pages. + * parameter s is name of the project name. + */ + virtual QCString trGeneratedAutomatically(const char *s) + { QCString result="ÐвтоматÑки Ñоздадено од Doxygen"; + if (s) result+=(QCString)" за "+s; + result+=" изворниот код."; + return result; + } + + /*! put after an enum name in the list of all members */ + virtual QCString trEnumName() + { return "име на набројан член"; } + + /*! put after an enum value in the list of all members */ + virtual QCString trEnumValue() + { return "вредноÑÑ‚ на набројан член"; } + + /*! put after an undocumented member in the list of all members */ + virtual QCString trDefinedIn() + { return "дефиниран во"; } + + // quick reference sections + + /*! This is put above each page as a link to the list of all groups of + * compounds or files (see the \\group command). + */ + virtual QCString trModules() + { return "Модули"; } + + /*! This is put above each page as a link to the class hierarchy */ + virtual QCString trClassHierarchy() + { return "Стебло на клаÑи"; } + + /*! This is put above each page as a link to the list of annotated classes */ + virtual QCString trCompoundList() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "СпиÑок на Структури"; + } + else + { + return "СпиÑок на КлаÑи"; + } + } + + /*! This is put above each page as a link to the list of documented files */ + virtual QCString trFileList() + { return "СпиÑок на Датотеки"; } + + /*! This is put above each page as a link to all members of compounds. */ + virtual QCString trCompoundMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Членови"; + } + else + { + return "Членови на КлаÑата"; + } + } + + /*! This is put above each page as a link to all members of files. */ + virtual QCString trFileMembers() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Глобални Членови"; + } + else + { + return "Членови на Датотеката"; + } + } + + /*! This is put above each page as a link to all related pages. */ + virtual QCString trRelatedPages() + { return "Страници Поврзани Ñо Оваа"; } + + /*! This is put above each page as a link to all examples. */ + virtual QCString trExamples() + { return "Примери"; } + + /*! This is put above each page as a link to the search engine. */ + virtual QCString trSearch() + { return "Пребарај"; } + + /*! This is an introduction to the class hierarchy. */ + virtual QCString trClassHierarchyDescription() + { return "Овој ÑпиÑок на наÑледување е приближно азбучно подреден:"; + } + + /*! This is an introduction to the list with all files. */ + virtual QCString trFileListDescription(bool extractAll) + { + QCString result="СпиÑок на Ñите "; + if (!extractAll) result+="документирани "; + result+="членови Ñо кратки опиÑи:"; + return result; + } + + /*! This is an introduction to the annotated compound list. */ + virtual QCString trCompoundListDescription() + { + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "СпиÑок на Ñтруктури Ñо кратки опиÑи:"; + } + else + { + return "СпиÑок на клаÑи, Ñтруктури, унии и интерфејÑи " + "Ñо кратки опиÑи:"; + } + } + + /*! This is an introduction to the page with all class members. */ + virtual QCString trCompoundMembersDescription(bool extractAll) + { + QCString result="СпиÑок на Ñите "; + if (!extractAll) + { + result+="документирани "; + } + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="Ñтруктури и унии"; + } + else + { + result+="членови на клаÑата"; + } + result+=" Ñо врÑки до "; + if (!extractAll) + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="документацијата за Ñекој член на Ñтруктурата/унијата:"; + } + else + { + result+="документацијата на Ñекој член на клаÑата:"; + } + } + else + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="Ñтруктурите/униите на кои што припаѓаат:"; + } + else + { + result+="клаÑите на кои што припаѓаат:"; + } + } + return result; + } + + /*! This is an introduction to the page with all file members. */ + virtual QCString trFileMembersDescription(bool extractAll) + { + QCString result="СпиÑок на Ñите "; + if (!extractAll) result+="документирани "; + + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + result+="функции, променливи, дефиниции, набројувања и дефиниции на тип"; + } + else + { + result+="членови на датотеки"; + } + result+=" Ñо врÑки до "; + if (extractAll) + result+="датотеките на кои што припаѓаат:"; + else + result+="документацијата:"; + return result; + } + + /*! This is an introduction to the page with the list of all examples */ + virtual QCString trExamplesDescription() + { return "СпиÑок на Ñите примери:"; } + + /*! This is an introduction to the page with the list of related pages */ + virtual QCString trRelatedPagesDescription() + { return "СпиÑок на Ñите Ñтраници поврзани Ñо оваа и нивна документација:"; } + + /*! This is an introduction to the page with the list of class/file groups */ + virtual QCString trModulesDescription() + { return "СпиÑок на Ñите модули:"; } + + // index titles (the project name is prepended for these) + + /*! This is used in HTML as the title of index.html. */ + virtual QCString trDocumentation() + { return "Документација"; } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all groups. + */ + virtual QCString trModuleIndex() + { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Модули"; } + + /*! This is used in LaTeX as the title of the chapter with the + * class hierarchy. + */ + virtual QCString trHierarchicalIndex() + { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Стебло"; } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index. + */ + virtual QCString trCompoundIndex() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Структури"; + } + else + { + return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° КлаÑи"; + } + } + + /*! This is used in LaTeX as the title of the chapter with the + * list of all files. + */ + virtual QCString trFileIndex() + { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Датотеки"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all groups. + */ + virtual QCString trModuleDocumentation() + { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Документација"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all classes, structs and unions. + */ + virtual QCString trClassDocumentation() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Документација на Структури"; + } + else + { + return "Документација на КлаÑи"; + } + } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all files. + */ + virtual QCString trFileDocumentation() + { return "Документија на Датотеки"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all examples. + */ + virtual QCString trExampleDocumentation() + { return "Документаија на Примери"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all related pages. + */ + virtual QCString trPageDocumentation() + { return "Документација на Страници"; } + + /*! This is used in LaTeX as the title of the document */ + virtual QCString trReferenceManual() + { return "Прирачник"; } + + /*! This is used in the documentation of a file as a header before the + * list of defines + */ + virtual QCString trDefines() + { return "Дефинирања"; } + + /*! This is used in the documentation of a file as a header before the + * list of function prototypes + */ + virtual QCString trFuncProtos() + { return "Прототипи на Функции"; } + + /*! This is used in the documentation of a file as a header before the + * list of typedefs + */ + virtual QCString trTypedefs() + { return "Дефиниции на Тип"; } + + /*! This is used in the documentation of a file as a header before the + * list of enumerations + */ + virtual QCString trEnumerations() + { return "Ðабројувања"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) functions + */ + virtual QCString trFunctions() + { return "Функции"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trVariables() + { return "Променливи"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) variables + */ + virtual QCString trEnumerationValues() + { return "ВредноÑти на Ðабројувањата"; } + + /*! This is used in the documentation of a file before the list of + * documentation blocks for defines + */ + virtual QCString trDefineDocumentation() + { return "Документција на Дефиниции"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for function prototypes + */ + virtual QCString trFunctionPrototypeDocumentation() + { return "Документација на Прототип на Функции"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for typedefs + */ + virtual QCString trTypedefDocumentation() + { return "Документација на Дефиниции на Тип"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration types + */ + virtual QCString trEnumerationTypeDocumentation() + { return "Документација на Ðабројувања"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for functions + */ + virtual QCString trFunctionDocumentation() + { return "Документација на Функции"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for variables + */ + virtual QCString trVariableDocumentation() + { return "Документација на Променливи"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds + */ + virtual QCString trCompounds() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Структури"; + } + else + { + return "КлаÑи"; + } + } + + /*! This is used in the standard footer of each page and indicates when + * the page was generated + */ + virtual QCString trGeneratedAt(const char *date,const char *projName) + { + QCString result=(QCString)"Создадено на "+date; + if (projName) result+=(QCString)" за "+projName; + result+=(QCString)" од"; + return result; + } + /*! This is part of the sentence used in the standard footer of each page. + */ + virtual QCString trWrittenBy() + { + return "напишано од"; + } + + /*! this text is put before a class diagram */ + virtual QCString trClassDiagram(const char *clName) + { + return (QCString)"Диаграм на наÑледување за "+clName+":"; + } + + /*! this text is generated when the \\internal command is used. */ + virtual QCString trForInternalUseOnly() + { return "Само за интерна употреба."; } + + /*! this text is generated when the \\warning command is used. */ + virtual QCString trWarning() + { return "Предупредување"; } + + /*! this text is generated when the \\version command is used. */ + virtual QCString trVersion() + { return "Верзија"; } + + /*! this text is generated when the \\date command is used. */ + virtual QCString trDate() + { return "Дата"; } + + /*! this text is generated when the \\return command is used. */ + virtual QCString trReturns() + { return "Враќа"; } + + /*! this text is generated when the \\sa command is used. */ + virtual QCString trSeeAlso() + { return "ИÑтотака погледнете"; } + + /*! this text is generated when the \\param command is used. */ + virtual QCString trParameters() + { return "Параметри"; } + + /*! this text is generated when the \\exception command is used. */ + virtual QCString trExceptions() + { return "ИÑклучоци"; } + + /*! this text is used in the title page of a LaTeX document. */ + virtual QCString trGeneratedBy() + { return "Создадено од"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990307 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of page containing all the index of all namespaces. */ + virtual QCString trNamespaceList() + { return "СпиÑок на Имиња на ПроÑтор"; } + + /*! used as an introduction to the namespace list */ + virtual QCString trNamespaceListDescription(bool extractAll) + { + QCString result="СпиÑок на Ñите "; + if (!extractAll) result+="документирани "; + result+="имиња на проÑтор Ñо кратки опиÑи:"; + return result; + } + + /*! used in the class documentation as a header before the list of all + * friends of a class + */ + virtual QCString trFriends() + { return "Пријатели"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990405 +////////////////////////////////////////////////////////////////////////// + + /*! used in the class documentation as a header before the list of all + * related classes + */ + virtual QCString trRelatedFunctionDocumentation() + { return "Документација на Пријатели и Поврзани Функции"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990425 +////////////////////////////////////////////////////////////////////////// + + /*! used as the title of the HTML page of a class/struct/union */ + virtual QCString trCompoundReference(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + 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+=" Образец"; + result+=" Повикување"; + return result; + } + + /*! used as the title of the HTML page of a file */ + virtual QCString trFileReference(const char *fileName) + { + QCString result = "ÐžÐ¿Ð¸Ñ Ð½Ð° Датотекaта "; + result += fileName; + return result; + } + + /*! used as the title of the HTML page of a namespace */ + virtual QCString trNamespaceReference(const char *namespaceName) + { + QCString result = "ÐžÐ¿Ð¸Ñ Ð½Ð° Имeто на ПроÑтор "; + result += namespaceName; + return result; + } + + virtual QCString trPublicMembers() + { return "Јавни Функции Членови"; } + virtual QCString trPublicSlots() + { return "Јавни Слотови"; } + virtual QCString trSignals() + { return "Сигнали"; } + virtual QCString trStaticPublicMembers() + { return "Статични Јавни Функции Членови"; } + virtual QCString trProtectedMembers() + { return "Заштитени Функции Членови"; } + virtual QCString trProtectedSlots() + { return "Заштитени Слотови"; } + virtual QCString trStaticProtectedMembers() + { return "Статични Заштитени Функции Членови"; } + virtual QCString trPrivateMembers() + { return "Приватни Функции Членови"; } + virtual QCString trPrivateSlots() + { return "Приватни Слотови"; } + virtual QCString trStaticPrivateMembers() + { return "Статични Приватни Функции Членови"; } + + /*! this function is used to produce a comma-separated list of items. + * use generateMarker(i) to indicate where item i should be put. + */ + virtual QCString trWriteList(int numEntries) + { + QCString result; + int i; + // the inherits list contain `numEntries' classes + for (i=0;i<numEntries;i++) + { + // use generateMarker to generate placeholders for the class links! + result+=generateMarker(i); // generate marker for entry i in the list + // (order is left to right) + + if (i!=numEntries-1) // not the last entry, so we need a separator + { + if (i<numEntries-2) // not the fore last entry + result+=", "; + else // the fore last entry + result+=" и "; + } + } + return result; + } + + /*! used in class documentation to produce a list of base classes, + * if class diagrams are disabled. + */ + virtual QCString trInheritsList(int numEntries) + { + return "ÐаÑледува "+trWriteList(numEntries)+"."; + } + + /*! used in class documentation to produce a list of super classes, + * if class diagrams are disabled. + */ + virtual QCString trInheritedByList(int numEntries) + { + return "ÐаÑледено од "+trWriteList(numEntries)+"."; + } + + /*! used in member documentation blocks to produce a list of + * members that are hidden by this one. + */ + virtual QCString trReimplementedFromList(int numEntries) + { + return "Преприменето од "+trWriteList(numEntries)+"."; + } + + /*! used in member documentation blocks to produce a list of + * all member that overwrite the implementation of this member. + */ + virtual QCString trReimplementedInList(int numEntries) + { + return "Преприменето во "+trWriteList(numEntries)+"."; + } + + /*! This is put above each page as a link to all members of namespaces. */ + virtual QCString trNamespaceMembers() + { return "Членови на Име на ПроÑтор"; } + + /*! This is an introduction to the page with all namespace members */ + virtual QCString trNamespaceMemberDescription(bool extractAll) + { + QCString result="СпиÑок на Ñите "; + if (!extractAll) result+="документирани "; + result+="членови на името на проÑтор Ñо врÑки до "; + if (extractAll) + result+="документацијата на Ñекој член:"; + else + result+="името на проÑтор на кое што му припаѓаат:"; + return result; + } + /*! This is used in LaTeX as the title of the chapter with the + * index of all namespaces. + */ + virtual QCString trNamespaceIndex() + { return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Имиња на ПроÑтор"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all namespaces. + */ + virtual QCString trNamespaceDocumentation() + { return "Документација на Имиња на ПроÑтор"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990522 +////////////////////////////////////////////////////////////////////////// + + /*! This is used in the documentation before the list of all + * namespaces in a file. + */ + virtual QCString trNamespaces() + { return "Имиња на ПроÑтор"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990728 +////////////////////////////////////////////////////////////////////////// + + /*! This is put at the bottom of a class documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Class", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"Документацијата за "; + 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+=" беше Ñоздадена од "; + if (single) result+="Ñледнава датотека:"; else result+="Ñледниве датотеки:"; + return result; + } + + /*! This is in the (quick) index as a link to the alphabetical compound + * list. + */ + virtual QCString trAlphabeticalList() + { return "Ðзбучен СпиÑок"; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-990901 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the heading text for the retval command. */ + virtual QCString trReturnValues() + { return "Вратена ВредноÑÑ‚"; } + + /*! This is in the (quick) index as a link to the main page (index.html) + */ + virtual QCString trMainPage() + { return "Главна Страна"; } + + /*! This is used in references to page that are put in the LaTeX + * documentation. It should be an abbreviation of the word page. + */ + virtual QCString trPageAbbreviation() + { return "ÑÑ‚Ñ€."; } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991003 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trDefinedAtLineInSourceFile() + { + return "Дефиницијата е на линија @0 во датотека @1."; + } + virtual QCString trDefinedInSourceFile() + { + return "Дефинијата е во датотека @0."; + } + +////////////////////////////////////////////////////////////////////////// +// new since 0.49-991205 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trDeprecated() + { + return "ЗаÑтарено"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.0.0 +////////////////////////////////////////////////////////////////////////// + + /*! this text is put before a collaboration diagram */ + virtual QCString trCollaborationDiagram(const char *clName) + { + return (QCString)"Диаграм на Ñоработка за "+clName+":"; + } + /*! this text is put before an include dependency graph */ + virtual QCString trInclDepGraph(const char *fName) + { + return (QCString)"Вклучен дијаграм на завиÑноÑÑ‚ за "+fName+":"; + } + /*! header that is put before the list of constructor/destructors. */ + virtual QCString trConstructorDocumentation() + { + return "Документација на КонÑтруктор и ДеÑтруктор"; + } + /*! Used in the file documentation to point to the corresponding sources. */ + virtual QCString trGotoSourceCode() + { + return "Оди до изворниот код на оваа датотека."; + } + /*! Used in the file sources to point to the corresponding documentation. */ + virtual QCString trGotoDocumentation() + { + return "Оди до документацијата на оваа датотека."; + } + /*! Text for the \\pre command */ + virtual QCString trPrecondition() + { + return "ПредуÑлов"; + } + /*! Text for the \\post command */ + virtual QCString trPostcondition() + { + return "ПоÑтуÑлов"; + } + /*! Text for the \\invariant command */ + virtual QCString trInvariant() + { + return "Инваријанта"; + } + /*! Text shown before a multi-line variable/enum initialization */ + virtual QCString trInitialValue() + { + return "ОÑновна вредноÑÑ‚:"; + } + /*! Text used the source code in the file index */ + virtual QCString trCode() + { + return "код"; + } + virtual QCString trGraphicalHierarchy() + { + return "Графичко Стебло на КлаÑи"; + } + virtual QCString trGotoGraphicalHierarchy() + { + return "Оди до графичкото Ñтебло на клаÑи"; + } + virtual QCString trGotoTextualHierarchy() + { + return "Оди до текÑтуалното Ñтебло на клаÑи"; + } + virtual QCString trPageIndex() + { + return "ÐŸÐ¾Ð¿Ð¸Ñ Ð½Ð° Страници"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.0 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trNote() + { + return "Забелешка"; + } + virtual QCString trPublicTypes() + { + return "Јавни Типови"; + } + virtual QCString trPublicAttribs() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Членови"; + } + else + { + return "Јавни Членови"; + } + } + virtual QCString trStaticPublicAttribs() + { + return "Статични Јавни Членови"; + } + virtual QCString trProtectedTypes() + { + return "Заштитени Типови"; + } + virtual QCString trProtectedAttribs() + { + return "Заштитени Членови"; + } + virtual QCString trStaticProtectedAttribs() + { + return "Статични Заштитени Типови"; + } + virtual QCString trPrivateTypes() + { + return "Приватни Типови"; + } + virtual QCString trPrivateAttribs() + { + return "Приватни Членови"; + } + virtual QCString trStaticPrivateAttribs() + { + return "Статични Приватни Членови"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.3 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a \\todo item */ + virtual QCString trTodo() + { + return "Ðезавршено"; + } + /*! Used as the header of the todo list */ + virtual QCString trTodoList() + { + return "СпиÑок на Ðезавршени"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.4 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trReferencedBy() + { + return "Повикано од"; + } + virtual QCString trRemarks() + { + return "Забелешки"; + } + virtual QCString trAttention() + { + return "Внимание"; + } + virtual QCString trInclByDepGraph() + { + return "Овој дијаграм покажува кои датотеки Ñе " + "директно или индеректно вклучени во оваа датотека:"; + } + virtual QCString trSince() + { + return "Од"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.1.5 +////////////////////////////////////////////////////////////////////////// + + /*! title of the graph legend page */ + virtual QCString trLegendTitle() + { + return "Легенда на Дијаграмот"; + } + /*! page explaining how the dot graph's should be interpreted + * The %A in the text below are to prevent link to classes called "A". + */ + virtual QCString trLegendDocs() + { + return + "Оваа Ñтрана објаÑнува како да ги толкувате дијаграмите Ñоздадени" + " од doxygen.<p>\n" + "Ðа пример:\n" + "\\code\n" + "/*! Ðевидлива клаÑа заради ограничувања на дијаграмот */\n" + "class Invisible { };\n\n" + "/*! ОдÑечена клаÑа, врÑката на наÑледување е Ñкриена */\n" + "class Truncated : public Invisible { };\n\n" + "/* КлаÑата не е документирана Ñо doxygen коментари */\n" + "class Undocumented { };\n\n" + "/*! КлаÑа која е наÑледена Ñо јавно наÑледување */\n" + "class PublicBase : public Truncated { };\n\n" + "/*! КлаÑа Образец */\n" + "template<class T> class Templ { };\n\n" + "/*! КлаÑа која е наÑледена Ñо заштитено наÑледување */\n" + "class ProtectedBase { };\n\n" + "/*! КлаÑа која е наÑледена Ñо приватно наÑледување */\n" + "class PrivateBase { };\n\n" + "/*! КлаÑа која е кориÑтена од Ñтрана на наÑледената клаÑа */\n" + "class Used { };\n\n" + "/*! КлаÑа која наÑледува од повеќе други клаÑи */\n" + "class Inherited : public PublicBase,\n" + " protected ProtectedBase,\n" + " private PrivateBase,\n" + " public Undocumented,\n" + " public Templ<int>\n" + "{\n" + " private:\n" + " Used *m_usedClass;\n" + "};\n" + "\\endcode\n" + "Ðко вредноÑта на \\c MAX_DOT_GRAPH_HEIGHT во конфигурациÑката датотека " + "е 240 тогаш примерот ќе го Ñоздаде Ñледниов дијаграм:" + "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" + "<p>\n" + "Правоаголниците во дијаграмот погоре го имаат Ñледново значење:\n" + "<ul>\n" + "<li>Полн Ñив правоаголник ја означува Ñтруктурата или клаÑата за " + "којадијаграмот е Ñоздаден.\n" + "<li>Правоаголник Ñо црна граница означува документирана Ñтруктура или клаÑа.\n" + "<li>Правоаголник Ñо Ñива граница означува недокументирана Ñтруктура или клаÑа.\n" + "<li>Правоаголник Ñо црвена граница означува документирана Ñтруктура или клаÑа " + "за која не Ñите врÑки на наÑледување Ñе прикажани. Дијаграмот е одÑечен доколку " + "не го Ñобира во зададените граници..\n" + "</ul>\n" + "Стрелките го имаат Ñледново значење:\n" + "<ul>\n" + "<li>Сина Ñтрелка означува врÑка на јавно наÑледување помеѓу две клаÑи.\n" + "<li>Зелена Ñтрелка означува заштитено наÑледување.\n" + "<li>Црвена Ñтрелка означува приватно наÑледување.\n" + "<li>Виолетова иÑпрекината линија означува клаÑа која е кориÑтена или вклучена " + "во друга клаÑа. Стрелаката е означена Ñо името на променливата преку " + "која клаÑата е доÑтапна.\n" + "<li>Жолта иÑпрекината линија означува врÑка меѓу примерок од образец клаÑа " + "и клаÑата образец од која е Ñоздадена. Стрелката е означена Ñо имињата на " + "параметрите на клаÑата.\n" + "</ul>\n"; + } + /*! text for the link to the legend page */ + virtual QCString trLegend() + { + return "Легенда"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.0 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a test item */ + virtual QCString trTest() + { + return "ТеÑÑ‚"; + } + /*! Used as the header of the test list */ + virtual QCString trTestList() + { + return "ЛиÑта на ТеÑтови"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for KDE-2 IDL methods */ + virtual QCString trDCOPMethods() + { + return "DCOP Функции Членови"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.2 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a section header for IDL properties */ + virtual QCString trProperties() + { + return "ОÑобини"; + } + /*! Used as a section header for IDL property documentation */ + virtual QCString trPropertyDocumentation() + { + return "Документација на ОÑобини"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.4 +////////////////////////////////////////////////////////////////////////// + + /*! Used for Java classes in the summary section of Java packages */ + virtual QCString trClasses() + { + if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) + { + return "Структури"; + } + else + { + return "КлаÑи"; + } + } + /*! Used as the title of a Java package */ + virtual QCString trPackage(const char *name) + { + return (QCString)"Пакет "+name; + } + /*! Title of the package index page */ + virtual QCString trPackageList() + { + return "СпиÑок на Пакети"; + } + /*! The description of the package index page */ + virtual QCString trPackageListDescription() + { + return "Пакети Ñо краток Ð¾Ð¿Ð¸Ñ (доколку доÑтапен):"; + } + /*! The link name in the Quick links header for each page */ + virtual QCString trPackages() + { + return "Пакети"; + } + /*! Text shown before a multi-line define */ + virtual QCString trDefineValue() + { + return "ВредноÑÑ‚:"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.5 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a marker that is put before a \\bug item */ + virtual QCString trBug() + { + return "Дефект"; + } + /*! Used as the header of the bug list */ + virtual QCString trBugList() + { + return "ЛиÑта на Дефекти"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.6 +////////////////////////////////////////////////////////////////////////// + + /*! Used as ansicpg for RTF file + * + * The following table shows the correlation of Charset name, Charset Value and + * <pre> + * Codepage number: + * Charset Name Charset Value(hex) Codepage number + * ------------------------------------------------------ + * DEFAULT_CHARSET 1 (x01) + * SYMBOL_CHARSET 2 (x02) + * OEM_CHARSET 255 (xFF) + * ANSI_CHARSET 0 (x00) 1252 + * RUSSIAN_CHARSET 204 (xCC) 1251 + * EE_CHARSET 238 (xEE) 1250 + * GREEK_CHARSET 161 (xA1) 1253 + * TURKISH_CHARSET 162 (xA2) 1254 + * BALTIC_CHARSET 186 (xBA) 1257 + * HEBREW_CHARSET 177 (xB1) 1255 + * ARABIC _CHARSET 178 (xB2) 1256 + * SHIFTJIS_CHARSET 128 (x80) 932 + * HANGEUL_CHARSET 129 (x81) 949 + * GB2313_CHARSET 134 (x86) 936 + * CHINESEBIG5_CHARSET 136 (x88) 950 + * </pre> + * + */ + virtual QCString trRTFansicp() + { + return "1252"; + } + + + /*! Used as ansicpg for RTF fcharset + * \see trRTFansicp() for a table of possible values. + */ + virtual QCString trRTFCharSet() + { + return "238"; + } + + /*! Used as header RTF general index */ + virtual QCString trRTFGeneralIndex() + { + return "ПопиÑ"; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trClass(bool first_capital, bool singular) + { + QCString result((first_capital ? "КлаÑ" : "клаÑ")); + result += (singular ? "а" : "и"); + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trFile(bool first_capital, bool singular) + { + QCString result((first_capital ? "Датотек" : "датотек")); + result += (singular ? "а" : "и"); + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trNamespace(bool first_capital, bool singular) + { + QCString result((first_capital ? "Им" : "им")); + result += (singular ? "е на проÑтор" : "иња на проÑтори"); + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trGroup(bool first_capital, bool singular) + { + QCString result((first_capital ? "Груп" : "груп")); + result += (singular ? "а" : "и"); + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trPage(bool first_capital, bool singular) + { + QCString result((first_capital ? "Стран" : "Ñтран")); + result += (singular ? "а" : "и"); + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trMember(bool first_capital, bool singular) + { + QCString result((first_capital ? "Член" : "член")); + if (!singular) result+="ови"; + return result; + } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trGlobal(bool first_capital, bool singular) + { + QCString result((first_capital ? "Глобал" : "глобал")); + result += (singular ? "ен" : "ни"); + return result; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.7 +////////////////////////////////////////////////////////////////////////// + + /*! This text is generated when the \\author command is used and + * for the author section in man pages. */ + virtual QCString trAuthor(bool first_capital, bool singular) + { + QCString result((first_capital ? "Ðвтор" : "автор")); + if (!singular) result+="и"; + return result; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.11 +////////////////////////////////////////////////////////////////////////// + + /*! This text is put before the list of members referenced by a member + */ + virtual QCString trReferences() + { + return "Повикувања"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.13 +////////////////////////////////////////////////////////////////////////// + + /*! used in member documentation blocks to produce a list of + * members that are implemented by this one. + */ + virtual QCString trImplementedFromList(int numEntries) + { + return "Применува "+trWriteList(numEntries)+"."; + } + + /*! used in member documentation blocks to produce a list of + * all members that implement this abstract member. + */ + virtual QCString trImplementedInList(int numEntries) + { + return "Применето во "+trWriteList(numEntries)+"."; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.16 +////////////////////////////////////////////////////////////////////////// + + /*! used in RTF documentation as a heading for the Table + * of Contents. + */ + virtual QCString trRTFTableOfContents() + { + return "Содржина"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.17 +////////////////////////////////////////////////////////////////////////// + + /*! Used as the header of the list of item that have been + * flagged deprecated + */ + virtual QCString trDeprecatedList() + { + return "СпиÑок на ЗаÑтарени"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.18 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a header for declaration section of the events found in + * a C# program + */ + virtual QCString trEvents() + { + return "ÐаÑтани"; + } + /*! Header used for the documentation section of a class' events. */ + virtual QCString trEventDocumentation() + { + return "Документација на ÐаÑтани"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3 +////////////////////////////////////////////////////////////////////////// + + /*! Used as a heading for a list of Java class types with package scope. + */ + virtual QCString trPackageTypes() + { + return "Типови во Пакетот"; + } + /*! Used as a heading for a list of Java class functions with package + * scope. + */ + virtual QCString trPackageMembers() + { + return "Функции во Пакетот"; + } + /*! Used as a heading for a list of static Java class functions with + * package scope. + */ + virtual QCString trStaticPackageMembers() + { + return "Статични Функции во Пакетот"; + } + /*! Used as a heading for a list of Java class variables with package + * scope. + */ + virtual QCString trPackageAttribs() + { + return "Членови во Пакетот"; + } + /*! Used as a heading for a list of static Java class variables with + * package scope. + */ + virtual QCString trStaticPackageAttribs() + { + return "Статични Членови во Пакетот"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.1 +////////////////////////////////////////////////////////////////////////// + + /*! Used in the quick index of a class/file/namespace member list page + * to link to the unfiltered list of all members. + */ + virtual QCString trAll() + { + return "Сите"; + } + /*! Put in front of the call graph for a function. */ + virtual QCString trCallGraph() + { + return "Дијаграм на повикувања за оваа функција:"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.3 +////////////////////////////////////////////////////////////////////////// + + /*! When the search engine is enabled this text is put in the header + * of each page before the field where one can enter the text to search + * for. + */ + virtual QCString trSearchForIndex() + { + return "Пребарај"; + } + /*! This string is used as the title for the page listing the search + * results. + */ + virtual QCString trSearchResultsTitle() + { + return "Резултати од Пребарувањето"; + } + /*! This string is put just before listing the search results. The + * text can be different depending on the number of documents found. + * Inside the text you can put the special marker $num to insert + * the number representing the actual number of search results. + * The @a numDocuments parameter can be either 0, 1 or 2, where the + * value 2 represents 2 or more matches. HTML markup is allowed inside + * the returned string. + */ + virtual QCString trSearchResults(int numDocuments) + { + if (numDocuments==0) + { + return "Ðема документи кои Ñе поклопуваат Ñо вашето барање."; + } + else if (numDocuments==1) + { + return "Пронајден <b>1</b> документ кој Ñе поклопува Ñо вашето барање."; + } + else + { + return "Пронајдени <b>$num</b> документи кои Ñе поклопуваат Ñо вашето барање." + "Ðајдобро поклопените документи Ñе прикажани први."; + } + } + /*! This string is put before the list of matched words, for each search + * result. What follows is the list of words that matched the query. + */ + virtual QCString trSearchMatches() + { + return "Пронајдени:"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.8 +////////////////////////////////////////////////////////////////////////// + + /*! This is used in HTML as the title of page with source code for file filename + */ + virtual QCString trSourceFile(QCString& filename) + { + return "Изворен код на датотеката " + filename; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.9 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the name of the chapter containing the directory + * hierarchy. + */ + virtual QCString trDirIndex() + { return "Стебло на Именикот"; } + + /*! This is used as the name of the chapter containing the documentation + * of the directories. + */ + virtual QCString trDirDocumentation() + { return "Документација на Именикот"; } + + /*! This is used as the title of the directory index and also in the + * Quick links of an HTML page, to link to the directory hierarchy. + */ + virtual QCString trDirectories() + { return "Именици"; } + + /*! This returns a sentences that introduces the directory hierarchy. + * and the fact that it is sorted alphabetically per level + */ + virtual QCString trDirDescription() + { return "Ова Ñтебло на именици е приближно азбучно подреден:";} + + /*! This returns the title of a directory page. The name of the + * directory is passed via \a dirName. + */ + virtual QCString trDirReference(const char *dirName) + { QCString result= "ÐžÐ¿Ð¸Ñ Ð½Ð° Именикот "; result += dirName; return result; } + + /*! This returns the word directory with or without starting capital + * (\a first_capital) and in sigular or plural form (\a singular). + */ + virtual QCString trDir(bool first_capital, bool singular) + { + QCString result((first_capital ? "Имени" : "имени")); + if (singular) result+="к"; else result+="ци"; + return result; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.4.1 +////////////////////////////////////////////////////////////////////////// + + /*! This text is added to the documentation when the \\overload command + * is used for a overloaded function. + */ + virtual QCString trOverloadText() + { + return "Оваа е преоптоварена фунција. Се разликува по " + "типот и бројот на аргументи што ги прифаќа."; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.4.6 +////////////////////////////////////////////////////////////////////////// + + /*! This is used to introduce a caller (or called-by) graph */ + virtual QCString trCallerGraph() + { + return "Ова е графот на повикување за оваа фунција:"; + } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for enumeration values + */ + virtual QCString trEnumerationValueDocumentation() + { return "Документија на Ðабројувања"; } + + +}; + +#endif diff --git a/src/translator_nl.h b/src/translator_nl.h index d27d6a1..672926a 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -409,16 +409,16 @@ class TranslatorDutch : public Translator bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"De documentatie voor deze "; + QCString result=(QCString)"De documentatie voor "; switch(compType) { - case ClassDef::Class: result+="class"; break; - case ClassDef::Struct: result+="struct"; break; - case ClassDef::Union: result+="union"; break; - case ClassDef::Interface: result+="interface"; break; - case ClassDef::Protocol: result+="protocol"; break; - case ClassDef::Category: result+="category"; break; - case ClassDef::Exception: result+="exception"; break; + case ClassDef::Class: result+="deze klasse"; break; + case ClassDef::Struct: result+="deze struct"; break; + case ClassDef::Union: result+="deze union"; break; + case ClassDef::Interface: result+="dit interface"; break; + case ClassDef::Protocol: result+="dit protocol"; break; + case ClassDef::Category: result+="deze categorie"; break; + case ClassDef::Exception: result+="deze exceptie"; break; } result+=" is gegenereerd op grond van de volgende file"; if (single) result+=":"; else result+="s:"; @@ -1190,6 +1190,189 @@ class TranslatorDutch : public Translator return "Hier is de caller graaf voor deze functie:"; } + /*! header that is put before the list of member subprograms (Fortran). */ + virtual QCString trMemberFunctionDocumentationFortran() + { return "Member Function/Subroutine Documentation"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 (mainly for Fortran) +////////////////////////////////////////////////////////////////////////// + + /*! This is put above each page as a link to the list of annotated data types (Fortran). */ + virtual QCString trCompoundListFortran() + { return "Lijst met data types"; } + + /*! This is put above each page as a link to all members of compounds (Fortran). */ + virtual QCString trCompoundMembersFortran() + { return "Data velden"; } + + /*! This is an introduction to the annotated compound list (Fortran). */ + virtual QCString trCompoundListDescriptionFortran() + { return "Hieronder volgen de data types elk een korte beschrijving:"; } + + /*! This is an introduction to the page with all data types (Fortran). */ + virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) + { + QCString result="Hieronder volgt de lijst met alle "; + if (!extractAll) result+="gedocumenteerde "; + result+="data types met links naar "; + if (!extractAll) result+="de klasse documentatie voor elke member:"; + else result+="de klassen waartoe ze behoren:"; + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * annotated compound index (Fortran). + */ + virtual QCString trCompoundIndexFortran() + { return "Data Type Index"; } + + /*! This is used in LaTeX as the title of the chapter containing + * the documentation of all data types (Fortran). + */ + virtual QCString trTypeDocumentation() + { return "Data Type Documentatie"; } + + /*! This is used in the documentation of a file as a header before the + * list of (global) subprograms (Fortran). + */ + virtual QCString trSubprograms() + { return "Functies/Subroutines"; } + + /*! This is used in the documentation of a file/namespace before the list + * of documentation blocks for subprograms (Fortran) + */ + virtual QCString trSubprogramDocumentation() + { return "Functie/Subroutine Documentatie"; } + + /*! This is used in the documentation of a file/namespace/group before + * the list of links to documented compounds (Fortran) + */ + virtual QCString trDataTypes() + { return "Data Types"; } + + /*! used as the title of page containing all the index of all modules (Fortran). */ + virtual QCString trModulesList() + { return "Module Lijst"; } + + /*! used as an introduction to the modules list (Fortran) */ + virtual QCString trModulesListDescription(bool extractAll) + { + QCString result="Hieronder volgt de lijst met alle "; + if (!extractAll) result+="gedocumenteerde "; + result+="modulen, elk met een korte beschrijving:"; + return result; + } + + /*! used as the title of the HTML page of a module/type (Fortran) */ + virtual QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { + QCString result=(QCString)clName; + switch(compType) + { + case ClassDef::Class: result+=" Module"; break; + case ClassDef::Struct: result+=" Type"; break; + case ClassDef::Union: result+=" Union"; break; + case ClassDef::Interface: result+=" Interface"; break; + case ClassDef::Protocol: result+=" Protocol"; break; + case ClassDef::Category: result+=" Category"; break; + case ClassDef::Exception: result+=" Exception"; break; + } + if (isTemplate) result+=" Template"; + result+=" Referentie"; + return result; + } + /*! used as the title of the HTML page of a module (Fortran) */ + virtual QCString trModuleReference(const char *namespaceName) + { + QCString result=namespaceName; + result+=" Module Referentie"; + return result; + } + + /*! This is put above each page as a link to all members of modules. (Fortran) */ + virtual QCString trModulesMembers() + { return "Module Members"; } + + /*! This is an introduction to the page with all modules members (Fortran) */ + virtual QCString trModulesMemberDescription(bool extractAll) + { + QCString result="Hier is een lijst van alle "; + if (!extractAll) result+="gedocumenteerde "; + result+="module members met links naar "; + if (extractAll) + result+="de module documentatie voor iedere member:"; + else + result+="de module waartoe ze behoren:"; + return result; + } + + /*! This is used in LaTeX as the title of the chapter with the + * index of all modules (Fortran). + */ + virtual QCString trModulesIndex() + { return "Module Index"; } + + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trModule(bool first_capital, bool singular) + { + QCString result((first_capital ? "Module" : "module")); + if (!singular) result+="n"; + return result; + } + /*! This is put at the bottom of a module documentation page and is + * followed by a list of files that were used to generate the page. + */ + virtual QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { // here s is one of " Class", " Struct" or " Union" + // single is true implies a single file + QCString result=(QCString)"De documentatie voor "; + switch(compType) + { + case ClassDef::Class: result+="deze module"; break; + case ClassDef::Struct: result+="dit type"; break; + case ClassDef::Union: result+="deze union"; break; + case ClassDef::Interface: result+="dit interface"; break; + case ClassDef::Protocol: result+="dit protocol"; break; + case ClassDef::Category: result+="deze category"; break; + case ClassDef::Exception: result+="deze exception"; break; + } + result+=" is gegenereerd op grond van de volgende file"; + if (single) result+=":"; else result+="s:"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trType(bool first_capital, bool singular) + { + QCString result((first_capital ? "Type" : "type")); + if (!singular) result+="s"; + return result; + } + /*! This is used for translation of the word that will possibly + * be followed by a single name or by a list of names + * of the category. + */ + virtual QCString trSubprogram(bool first_capital, bool singular) + { + QCString result((first_capital ? "Subprogramma" : "subprogramma")); + if (!singular) result+="s"; + return result; + } + + /*! C# Type Contraint list */ + virtual QCString trTypeConstraints() + { + return "Type Beperkingen"; + } }; #endif diff --git a/src/translator_no.h b/src/translator_no.h index 761afc2..2375b8a 100644 --- a/src/translator_no.h +++ b/src/translator_no.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_pl.h b/src/translator_pl.h index c911b5d..f5041c1 100644 --- a/src/translator_pl.h +++ b/src/translator_pl.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_pt.h b/src/translator_pt.h index ffd6500..e189fc5 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_ro.h b/src/translator_ro.h index 7f0bc40..7c93c87 100644 --- a/src/translator_ro.h +++ b/src/translator_ro.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_ru.h b/src/translator_ru.h index 0921549..f20856e 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -49,7 +49,7 @@ #ifndef TRANSLATOR_RU_H #define TRANSLATOR_RU_H -class TranslatorRussian : public Translator +class TranslatorRussian : public TranslatorAdapter_1_5_4 { private: /*! The decode() inline assumes the source written in the diff --git a/src/translator_se.h b/src/translator_se.h index ee50224..04b74ec 100644 --- a/src/translator_se.h +++ b/src/translator_se.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_si.h b/src/translator_si.h index e5fe55f..f330711 100644 --- a/src/translator_si.h +++ b/src/translator_si.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_sk.h b/src/translator_sk.h index f696620..484e16b 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_sr.h b/src/translator_sr.h index b951e5c..6f559dd 100644 --- a/src/translator_sr.h +++ b/src/translator_sr.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_tw.h b/src/translator_tw.h index 0ec19d2..75fed57 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_ua.h b/src/translator_ua.h index 7ba2235..e5ad575 100644 --- a/src/translator_ua.h +++ b/src/translator_ua.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_za.h b/src/translator_za.h index 3745d1a..1e45be3 100644 --- a/src/translator_za.h +++ b/src/translator_za.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translatordecoder.h b/src/translatordecoder.h index b29ced2..48cf7cd 100644 --- a/src/translatordecoder.h +++ b/src/translatordecoder.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -100,6 +100,7 @@ class TranslatorDecoder : public Translator { return toUtf8(m_translator->trMemberTypedefDocumentation()); } QCString trMemberEnumerationDocumentation() { return toUtf8(m_translator->trMemberEnumerationDocumentation()); } + QCString trMemberFunctionDocumentation() { return toUtf8(m_translator->trMemberFunctionDocumentation()); } QCString trMemberDataDocumentation() @@ -131,6 +132,7 @@ class TranslatorDecoder : public Translator { return toUtf8(m_translator->trClassHierarchy()); } QCString trCompoundList() { return toUtf8(m_translator->trCompoundList()); } + QCString trFileList() { return toUtf8(m_translator->trFileList()); } QCString trCompoundMembers() @@ -264,6 +266,7 @@ class TranslatorDecoder : public Translator bool isTemplate) { return toUtf8(m_translator->trCompoundReference(clName,compType,isTemplate)); } + QCString trFileReference(const char *fileName) { return toUtf8(m_translator->trFileReference(fromUtf8(fileName))); } QCString trNamespaceReference(const char *namespaceName) @@ -303,6 +306,7 @@ class TranslatorDecoder : public Translator { return toUtf8(m_translator->trNamespaceMembers()); } QCString trNamespaceMemberDescription(bool extractAll) { return toUtf8(m_translator->trNamespaceMemberDescription(extractAll)); } + QCString trNamespaceIndex() { return toUtf8(m_translator->trNamespaceIndex()); } QCString trNamespaceDocumentation() @@ -322,6 +326,8 @@ class TranslatorDecoder : public Translator QCString trGeneratedFromFiles(ClassDef::CompoundType compType, bool single) { return toUtf8(m_translator->trGeneratedFromFiles(compType,single)); } + + QCString trAlphabeticalList() { return toUtf8(m_translator->trAlphabeticalList()); } @@ -516,6 +522,7 @@ class TranslatorDecoder : public Translator { return toUtf8(m_translator->trFile(first_capital,singular)); } QCString trNamespace(bool first_capital, bool singular) { return toUtf8(m_translator->trNamespace(first_capital,singular)); } + QCString trGroup(bool first_capital, bool singular) { return toUtf8(m_translator->trGroup(first_capital,singular)); } QCString trPage(bool first_capital, bool singular) @@ -648,6 +655,60 @@ class TranslatorDecoder : public Translator QCString trEnumerationValueDocumentation() { return toUtf8(m_translator->trEnumerationValueDocumentation()); } +////////////////////////////////////////////////////////////////////////// +// new since 1.5.4 +////////////////////////////////////////////////////////////////////////// + + QCString trMemberFunctionDocumentationFortran() + { return toUtf8(m_translator->trMemberFunctionDocumentationFortran()); } + QCString trCompoundListFortran() + { return toUtf8(m_translator->trCompoundListFortran()); } + QCString trCompoundMembersFortran() + { return toUtf8(m_translator->trCompoundMembersFortran()); } + QCString trCompoundListDescriptionFortran() + { return toUtf8(m_translator->trCompoundListDescriptionFortran()); } + QCString trCompoundMembersDescriptionFortran(bool extractAll) + { return toUtf8(m_translator->trCompoundMembersDescriptionFortran(extractAll)); } + QCString trCompoundIndexFortran() + { return toUtf8(m_translator->trCompoundIndexFortran()); } + QCString trTypeDocumentation() + { return toUtf8(m_translator->trTypeDocumentation()); } + QCString trSubprograms() + { return toUtf8(m_translator->trSubprograms()); } + QCString trSubprogramDocumentation() + { return toUtf8(m_translator->trSubprogramDocumentation()); } + QCString trDataTypes() + { return toUtf8(m_translator->trDataTypes()); } + QCString trModulesList() + { return toUtf8(m_translator->trModulesList()); } + QCString trModulesListDescription(bool extractAll) + { return toUtf8(m_translator->trModulesListDescription(extractAll)); } + QCString trCompoundReferenceFortran(const char *clName, + ClassDef::CompoundType compType, + bool isTemplate) + { return toUtf8(m_translator->trCompoundReferenceFortran(clName,compType,isTemplate)); } + QCString trModuleReference(const char *namespaceName) + { return toUtf8(m_translator->trModuleReference(namespaceName)); } + QCString trModulesMembers() + { return toUtf8(m_translator->trModulesMembers()); } + QCString trModulesMemberDescription(bool extractAll) + { return toUtf8(m_translator->trModulesMemberDescription(extractAll)); } + QCString trModulesIndex() + { return toUtf8(m_translator->trModulesIndex()); } + QCString trModule(bool first_capital, bool singular) + { return toUtf8(m_translator->trModule(first_capital,singular)); } + QCString trGeneratedFromFilesFortran(ClassDef::CompoundType compType, + bool single) + { return toUtf8(m_translator->trGeneratedFromFilesFortran(compType,single)); } + QCString trType(bool first_capital, bool singular) + { return toUtf8(m_translator->trType(first_capital,singular)); } + QCString trSubprogram(bool first_capital, bool singular) + { return toUtf8(m_translator->trSubprogram(first_capital,singular)); } + QCString trTypeConstraints() + { return toUtf8(m_translator->trTypeConstraints()); } + + +////////////////////////////////////////////////////////////////////////// private: Translator *m_translator; void *m_toUtf8; diff --git a/src/util.cpp b/src/util.cpp index 8e6e4eb..5f52d40 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,8 +1,8 @@ /***************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -247,16 +247,22 @@ QCString generateMarker(int id) static QCString stripFromPath(const QCString &path,QStrList &l) { + // look at all the strings in the list and strip the longest match const char *s=l.first(); + QCString potential; + unsigned int length = 0; while (s) { QCString prefix = s; - if (stricmp(path.left(prefix.length()),prefix)==0) // case insensitive compare + if (prefix.length() > length && + stricmp(path.left(prefix.length()),prefix)==0) // case insensitive compare { - return path.right(path.length()-prefix.length()); + length = prefix.length(); + potential = path.right(path.length()-prefix.length()); } s = l.next(); } + if (length) return potential; return path; } @@ -313,7 +319,11 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName, //printf("<<resolveTypeDef(%s,%s)\n", // context ? context->name().data() : "<none>",qualifiedName.data()); QCString result; - if (qualifiedName.isEmpty()) return result; + if (qualifiedName.isEmpty()) + { + //printf(" qualified name empty!\n"); + return result; + } Definition *mContext=context; if (typedefContext) *typedefContext=context; @@ -327,6 +337,7 @@ QCString resolveTypeDef(Definition *context,const QCString &qualifiedName, if (resName.isEmpty()) { // qualifiedName was of form A:: ! + //printf(" qualified name of form A::!\n"); return result; } } @@ -1624,6 +1635,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, { //printf("`%s'\n",text); static QRegExp regExp("[a-z_A-Z][~!a-z_A-Z0-9.:]*"); + static QRegExp regExpSplit("(?!:),"); QCString txtStr=text; int strLen = txtStr.length(); //printf("linkifyText scope=%s fileScope=%s strtxt=%s strlen=%d\n", @@ -1656,7 +1668,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, QCString splitText = txtStr.mid(skipIndex,newIndex-skipIndex); int splitLength = splitText.length(); int offset=1; - i=splitText.find(','); + i=splitText.find(regExpSplit,0); if (i==-1) { i=splitText.find('<'); if (i!=-1) offset=0; } if (i==-1) i=splitText.find('>'); if (i==-1) i=splitText.find(' '); @@ -4433,9 +4445,11 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) FileNameIterator fni(*fn); FileDef *fd; FileDef *lastMatch=0; + QCString pathStripped = stripFromIncludePath(path); for (fni.toFirst();(fd=fni.current());++fni) { - if (path.isEmpty() || fd->getPath().right(path.length())==path) + QCString fdStripPath = stripFromIncludePath(fd->getPath()); + if (path.isEmpty() || fdStripPath==pathStripped) { count++; lastMatch=fd; @@ -4823,6 +4837,7 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te return result; } +#if 0 // original version /*! Strips the scope from a name. Examples: A::B will return A * and A<T>::B<N::C<D> > will return A<T>. */ @@ -4868,15 +4883,15 @@ QCString stripScope(const char *name) //printf("stripScope(%s)=%s\n",name,name); return name; } +#endif -#if 0 // original version // new version by Davide Cesari which also works for Fortran QCString stripScope(const char *name) { QCString result = name; int l=result.length(); int p; - bool done; + bool done = FALSE; bool skipBracket=FALSE; // if brackets do not match properly, ignore them altogether int count=0; @@ -4906,7 +4921,7 @@ QCString stripScope(const char *name) count=1; //printf("pos < = %d\n",p); p--; - while (p>=0 && !done) + while (p>=0) { c=result.at(p--); switch (c) @@ -4944,7 +4959,6 @@ QCString stripScope(const char *name) //printf("stripScope(%s)=%s\n",name,name); return name; } -#endif /*! Converts a string to an XML-encoded string */ @@ -5014,6 +5028,103 @@ QCString convertToHtml(const char *s,bool keepEntities) return result; } +QCString convertCharEntitiesToUTF8(const QCString &s) +{ + static QDict<char> entityMap(67); + static bool init=TRUE; + QCString result; + static QRegExp entityPat("&[a-zA-Z]+;"); + + if (init) + { + entityMap.insert("copy", "\xC2\xA9"); + entityMap.insert("tm", "\xE2\x84\xA2"); + entityMap.insert("trade", "\xE2\x84\xA2"); + entityMap.insert("reg", "\xC2\xAE"); + entityMap.insert("lsquo", "\xE2\x80\x98"); + entityMap.insert("rsquo", "\xE2\x80\x99"); + entityMap.insert("ldquo", "\xE2\x80\x9C"); + entityMap.insert("rdquo", "\xE2\x80\x9D"); + entityMap.insert("ndash", "\xE2\x80\x93"); + entityMap.insert("mdash", "\xE2\x80\x94"); + entityMap.insert("Auml", "\xC3\x84"); + entityMap.insert("Euml", "\xC3\x8B"); + entityMap.insert("Iuml", "\xC3\x8F"); + entityMap.insert("Ouml", "\xC3\x96"); + entityMap.insert("Uuml", "\xC3\x9C"); + entityMap.insert("Yuml", "\xC5\xB8"); + entityMap.insert("auml", "\xC3\xA4"); + entityMap.insert("euml", "\xC3\xAB"); + entityMap.insert("iuml", "\xC3\xAF"); + entityMap.insert("ouml", "\xC3\xB6"); + entityMap.insert("uuml", "\xC3\xBC"); + entityMap.insert("yuml", "\xC3\xBF"); + entityMap.insert("Aacute","\xC3\x81"); + entityMap.insert("Eacute","\xC3\x89"); + entityMap.insert("Iacute","\xC3\x8D"); + entityMap.insert("Oacute","\xC3\x93"); + entityMap.insert("Uacute","\xC3\x9A"); + entityMap.insert("aacute","\xC3\xA1"); + entityMap.insert("eacute","\xC3\xA9"); + entityMap.insert("iacute","\xC3\xAD"); + entityMap.insert("oacute","\xC3\xB3"); + entityMap.insert("uacute","\xC3\xBA"); + entityMap.insert("Agrave","\xC3\x80"); + entityMap.insert("Egrave","\xC3\x88"); + entityMap.insert("Igrave","\xC3\x8C"); + entityMap.insert("Ograve","\xC3\x92"); + entityMap.insert("Ugrave","\xC3\x99"); + entityMap.insert("agrave","\xC3\xA0"); + entityMap.insert("egrave","\xC3\xA8"); + entityMap.insert("igrave","\xC3\xAC"); + entityMap.insert("ograve","\xC3\xB2"); + entityMap.insert("ugrave","\xC3\xB9"); + entityMap.insert("Acirc", "\xC3\x82"); + entityMap.insert("Ecirc", "\xC3\x8A"); + entityMap.insert("Icirc", "\xC3\x8E"); + entityMap.insert("Ocirc", "\xC3\x94"); + entityMap.insert("Ucirc", "\xC3\x9B"); + entityMap.insert("acirc", "\xC3\xA2"); + entityMap.insert("ecirc", "\xC3\xAA"); + entityMap.insert("icirc", "\xC3\xAE"); + entityMap.insert("ocirc", "\xC3\xB4"); + entityMap.insert("ucirc", "\xC3\xBB"); + entityMap.insert("Atilde","\xC3\x83"); + entityMap.insert("Ntilde","\xC3\x91"); + entityMap.insert("Otilde","\xC3\x95"); + entityMap.insert("atilde","\xC3\xA3"); + entityMap.insert("ntilde","\xC3\xB1"); + entityMap.insert("otilde","\xC3\xB5"); + entityMap.insert("szlig", "\xC3\x9F"); + entityMap.insert("Ccedil","\xC3\x87"); + entityMap.insert("ccedil","\xC3\xA7"); + entityMap.insert("Aring", "\xC3\x85"); + entityMap.insert("aring", "\xC3\xA5"); + entityMap.insert("nbsp", "\xC2\xA0"); + init=FALSE; + } + + if (s==0) return result; + int p,i=0,l; + while ((p=entityPat.match(s,i,&l))!=-1) + { + if (p>i) result+=s.mid(i,p-i); + QCString entity = s.mid(p+1,l-2); + char *code = entityMap.find(entity); + if (code) + { + result+=code; + } + else + { + result+=s.mid(p,l); + } + i=p+l; + } + result+=s.mid(i,s.length()-i); + return result; +} + /*! Returns the standard string that is generated when the \\overload * command is used. */ @@ -6158,6 +6269,10 @@ SrcLangExt getLanguageFromFileName(const QCString fileName) extLookup.insert(".m", new int(SrcLangExt_ObjC)); extLookup.insert(".M", new int(SrcLangExt_ObjC)); extLookup.insert(".mm", new int(SrcLangExt_ObjC)); + extLookup.insert(".py", new int(SrcLangExt_Python)); + extLookup.insert(".f90", new int(SrcLangExt_F90)); + extLookup.insert(".vhd", new int(SrcLangExt_VHDL)); + extLookup.insert(".vhdl", new int(SrcLangExt_VHDL)); init=TRUE; } if (i!=-1) // name has an extension @@ -6439,7 +6554,7 @@ QCString expandAlias(const QCString &aliasName,const QCString &aliasValue) void writeTypeConstraints(OutputList &ol,Definition *d,ArgumentList *al) { if (al==0) return; - ol.startConstraintList("Type constraints"); // TODO: add to translator! + ol.startConstraintList(theTranslator->trTypeConstraints()); ArgumentListIterator ali(*al); Argument *a; for (;(a=ali.current());++ali) @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -85,14 +85,17 @@ class TextGeneratorOLImpl : public TextGeneratorIntf enum SrcLangExt { - SrcLangExt_IDL = 0x008, - SrcLangExt_Java = 0x010, - SrcLangExt_CSharp = 0x020, - SrcLangExt_D = 0x040, - SrcLangExt_PHP = 0x080, - SrcLangExt_ObjC = 0x100, - SrcLangExt_Cpp = 0x200, - SrcLangExt_JS = 0x400, + SrcLangExt_IDL = 0x0008, + SrcLangExt_Java = 0x0010, + SrcLangExt_CSharp = 0x0020, + SrcLangExt_D = 0x0040, + SrcLangExt_PHP = 0x0080, + SrcLangExt_ObjC = 0x0100, + SrcLangExt_Cpp = 0x0200, + SrcLangExt_JS = 0x0400, + SrcLangExt_Python = 0x0800, + SrcLangExt_F90 = 0x1000, + SrcLangExt_VHDL = 0x2000 }; //-------------------------------------------------------------------- @@ -346,6 +349,7 @@ QCString expandAlias(const QCString &aliasName,const QCString &aliasValue); void writeTypeConstraints(OutputList &ol,Definition *d,ArgumentList *al); +QCString convertCharEntitiesToUTF8(const QCString &s); #endif diff --git a/src/version.h b/src/version.h index 9dfec1f..e336930 100644 --- a/src/version.h +++ b/src/version.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/vhdlcode.h b/src/vhdlcode.h new file mode 100644 index 0000000..3865fc2 --- /dev/null +++ b/src/vhdlcode.h @@ -0,0 +1,18 @@ +#ifndef VHDLCODE_H +#define VHDLCODE_H + +#include "qtbc.h" +#include <stdio.h> + +class CodeOutputInterface; +class FileDef; +class MemberDef; + +void parseVhdlCode(CodeOutputInterface &,const char *,const QCString &, + bool ,const char *,FileDef *fd=0, + int startLine=-1,int endLine=-1,bool inlineFragment=FALSE, + MemberDef *memberDef=0); +void resetVhdlCodeParserState(); +void codeFreeVhdlScanner(); + +#endif diff --git a/src/vhdlcode.l b/src/vhdlcode.l new file mode 100644 index 0000000..26949b0 --- /dev/null +++ b/src/vhdlcode.l @@ -0,0 +1,1566 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ +/****************************************************************************** + * Parser for syntax hightlighting and references for vhdl subset + * written by M. Kreis + * supports VHDL-87 + * does not support all keywords of VHDL '93 (impure function/shared variables grouping ..) + * and VHDL-AMS + ******************************************************************************/ + +%{ + +/* + * includes + */ +#include <stdio.h> +#include <assert.h> +#include <ctype.h> +#include <qregexp.h> +#include <qdir.h> +#include <qstringlist.h> + +#include "qtbc.h" +#include "entry.h" +#include "doxygen.h" +#include "message.h" +#include "outputlist.h" +#include "util.h" +#include "membername.h" +#include "searchindex.h" +#include "vhdldocgen.h" + +#define YY_NEVER_INTERACTIVE 1 + +// Toggle for some debugging info +//#define DBG_CTX(x) fprintf x +#define DBG_CTX(x) do { } while(0) + + +/* ----------------------------------------------------------------- + * statics + */ + +// ----------------- <vhdl> ---------------------------------- + +//static bool isPackBody=FALSE; +static bool isFuncProto=FALSE; +static bool isComponent=FALSE; +static bool isPackageBody=FALSE; +static bool isStartMap; +static bool isProto = FALSE; +static bool isStripCode = FALSE; + +static QCString g_PrevString; +static QCString g_CurrClass; +static QDict<QCString>g_vhdlKeyDict; +static QCString g_tempClass; +static QCString g_tempComp; +static QCString g_PortMapComp; +static MemberDef *g_vhdlMember; +static QCString g_FuncProto; + +//----------------------------------------------------------- + +static CodeOutputInterface * g_code; +static QCString g_curClassName; +static QCString g_parmType; +static QCString g_parmName; +static const char * g_inputString; //!< the code fragment as text +static int g_inputPosition; //!< read offset during parsing +static int g_inputLines; //!< number of line in the code fragment +static int g_yyLineNr; //!< current line number +static bool g_needsTermination; + +static QCString g_exampleName; +static QCString g_exampleFile; + +static QCString g_type; +static QCString g_name; +static QCString g_args; +static QCString g_classScope; + +static QCString g_CurrScope; + +static FileDef * g_sourceFileDef; +static Definition * g_currentDefinition; +static MemberDef * g_currentMemberDef; +static bool g_includeCodeFragment; +static const char * g_currentFontClass; + +static bool g_lexInit = FALSE; +static int g_braceCount=0; + + +static void writeFont(const char *s,const char* text); +static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName); +static bool writeColoredWord(QCString& word ); +static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool typeOnly=FALSE); +static void endFontClass(); + +//------------------------------------------------------------------- + + +static void setCurrentDoc(const QCString &name,const QCString &base,const QCString &anchor="") +{ + static bool searchEngineEnabled=Config_getBool("SEARCHENGINE"); + if (searchEngineEnabled) + { + Doxygen::searchIndex->setCurrentDoc(name,base,anchor); + } +} + + +static void addToSearchIndex(const char *text) +{ + static bool searchEngineEnabled=Config_getBool("SEARCHENGINE"); + if (searchEngineEnabled) + { + Doxygen::searchIndex->addWord(text,FALSE); + } +} + + +/*! start a new line of code, inserting a line number if g_sourceFileDef + * is TRUE. If a definition starts at the current line, then the line + * number is linked to the documentation of that definition. + */ +static void startCodeLine() +{ + //if (g_currentFontClass) { g_code->endFontClass(); } + if (g_sourceFileDef) + { + //QCString lineNumber,lineAnchor; + //lineNumber.sprintf("%05d",g_yyLineNr); + //lineAnchor.sprintf("l%05d",g_yyLineNr); + // if ((g_yyLineNr % 500) == 0) + // fprintf(stderr,"\n starting Line %d:",g_yyLineNr); + Definition *d = g_sourceFileDef->getSourceDefinition(g_yyLineNr); + //printf("startCodeLine %d d=%s\n", g_yyLineNr,d ? d->name().data() : "<null>"); + if (!g_includeCodeFragment && d) + { + g_currentDefinition = d; + g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); + if (!g_tempComp.isEmpty() && g_currentMemberDef ) + { + //ClassDef *cf=VhdlDocGen::getClass(g_tempComp.data()); + QCString nn=g_currentMemberDef->name(); + MemberDef* mdeff=VhdlDocGen::findMember(g_tempComp,nn); + if (mdeff) + { + g_currentMemberDef=mdeff; + } + } + + g_parmType.resize(0); + g_parmName.resize(0); + QCString lineAnchor; + lineAnchor.sprintf("l%05d",g_yyLineNr); + if (g_currentMemberDef) + { + g_code->writeLineNumber(g_currentMemberDef->getReference(), + g_currentMemberDef->getOutputFileBase(), + g_currentMemberDef->anchor(),g_yyLineNr); + setCurrentDoc(g_currentMemberDef->qualifiedName(), + g_sourceFileDef->getSourceFileBase(), + lineAnchor); + } + else if (d->isLinkableInProject()) + { + g_code->writeLineNumber(d->getReference(), + d->getOutputFileBase(), + 0,g_yyLineNr); + setCurrentDoc(d->qualifiedName(), + g_sourceFileDef->getSourceFileBase(), + lineAnchor); + } + } + else + { + g_code->writeLineNumber(0,0,0,g_yyLineNr); + } + } + g_code->startCodeLine(); + if (g_currentFontClass) + { + g_code->startFontClass(g_currentFontClass); + } +} + +static void endCodeLine() +{ + if (g_currentFontClass) { g_code->endFontClass(); } + g_code->endCodeLine(); +} + +/*! writes a word to the output. + * If curr_class is defined, the word belongs to a class + * and will be linked. + */ + +static void writeWord(const char *word,const char* curr_class=0,bool classLink=FALSE) +{ + bool found=FALSE; + QCString temp; + QCString tclass(curr_class); + QCString ttt(word); + if (ttt.isEmpty()) return; + for (unsigned int j=0;j<ttt.length();j++) + { + char c=ttt.at(j); + if (c==' '|| c==',' || c==';' || c==':' || c=='(' || c==')' || c=='\r' || c=='\t') + { + if (found) + { + if (!writeColoredWord(temp)) // is it a keyword ? + { + //if (VhdlDocGen::findKeyWord(temp)) + // writeFont("vhdlkeyword",temp.data()); + //printf("writeWord: %s\n",temp.data()); + if (!tclass.isEmpty()) + { + if (!classLink) + { + generateMemLink(*g_code,tclass,temp); + } + else + { + generateClassOrGlobalLink(*g_code,temp); + } + } + else + { + g_code->codify(temp.data()); + } + } + temp.resize(0); + found=FALSE; + } + + char cc[2]; + cc[0]=c; + cc[1]=0; + g_code->codify(cc); + } + else + { + found=TRUE; + temp+=c; + } + } // for + + if (!temp.isEmpty()) + { + if (!writeColoredWord(temp)) + { + if (!tclass.isEmpty()) + { + if (!classLink) + { + generateMemLink(*g_code,tclass,temp); // generateMemLink(*g_code,g_CurrClass,left); + } + else + { + generateClassOrGlobalLink(*g_code,temp); + } + } + else + { + g_code->codify(temp.data()); + } + } + } +}// writeWord + + +/*! write a code fragment `text' that may span multiple lines, inserting + * line numbers for each line. + */ +static void codifyLines(const char *text,const char *cl=0,bool classlink=FALSE) +{ + // printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text); + const char *p=text,*sp=p; + char c; + bool done=FALSE; + while (!done) + { + sp=p; + while ((c=*p++) && c!='\n'); + if (c=='\n') + { + g_yyLineNr++; + QCString line = sp; + line = line.left(p-sp-1); + //*(p-1)='\0'; + //g_code->codify(sp); + writeWord(line,cl,classlink); + endCodeLine(); + if (g_yyLineNr<g_inputLines) + { + startCodeLine(); + } + } + else + { + //g_code->codify(sp); + writeWord(sp,cl,classlink); + done=TRUE; + } + } +} + +/*! writes a link to a fragment \a text that may span multiple lines, inserting + * line numbers for each line. If \a text contains newlines, the link will be + * split into multiple links with the same destination, one for each line. + */ +static void writeMultiLineCodeLink(CodeOutputInterface &ol, + const char *ref,const char *file, + const char *anchor,const char *text, + const char *tooltip) +{ + bool done=FALSE; + char *p=(char *)text; + while (!done) + { + char *sp=p; + char c; + while ((c=*p++) && c!='\n'); + if (c=='\n') + { + g_yyLineNr++; + *(p-1)='\0'; + // printf("writeCodeLink(%s,%s,%s,%s)\n",ref,file,anchor,sp); + ol.writeCodeLink(ref,file,anchor,sp,tooltip); + endCodeLine(); + if (g_yyLineNr<g_inputLines) + { + startCodeLine(); + } + } + else + { + ol.writeCodeLink(ref,file,anchor,sp,tooltip); + done=TRUE; + } + } +} + +static void setParameterList(MemberDef *md) +{ + g_classScope = md->getClassDef() ? md->getClassDef()->name().data() : ""; + LockingPtr<ArgumentList> al = md->argumentList(); + if (al==0) return; + Argument *a = al->first(); + while (a) + { + g_parmName = a->name.copy(); + g_parmType = a->type.copy(); + int i = g_parmType.find('*'); + if (i!=-1) g_parmType = g_parmType.left(i); + i = g_parmType.find('&'); + if (i!=-1) g_parmType = g_parmType.left(i); + g_parmType.stripPrefix("const "); + g_parmType=g_parmType.stripWhiteSpace(); + // g_theVarContext.addVariable(g_parmType,g_parmName); + a = al->next(); + } +} + + +/*! writes a link to a function or procedure + */ + +static void generateFuncLink(CodeOutputInterface &ol,MemberDef* mdef) +{ + + //printf("generateFuncLink(FuncName=%s)\n",mdef->name().data()); + QCString memberName=mdef->name(); + + if (mdef && mdef->isLinkable()) // is it a linkable class + { + writeMultiLineCodeLink(ol,mdef->getReference(), + mdef->getOutputFileBase(), + mdef->anchor(), + mdef->name(), + mdef->briefDescriptionAsTooltip()); + addToSearchIndex(memberName); + return; + } + ol.linkableSymbol(g_yyLineNr,memberName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition); + codifyLines(memberName.data()); + addToSearchIndex(memberName); +} // generateFuncLink + + +static void generateMemLink(CodeOutputInterface &ol,QCString &clName,QCString& memberName) +{ + if (clName.isEmpty() || memberName.isEmpty()) return; + QCString className=clName; + + MemberDef *md=0; + //MemberDef *comp=0; + //bool isLocal=FALSE; + + md=VhdlDocGen::findMember(className,memberName); + ClassDef *po=VhdlDocGen::getClass(className.data()); + + if (md==0 && po && (VhdlDocGen::VhdlClasses)po->protection()==VhdlDocGen::PACKBODYCLASS) + { + QCString temp=className;//.stripPrefix("_"); + temp.stripPrefix("_"); + md=VhdlDocGen::findMember(temp,memberName); + } + + if (md && md->isLinkable()) // is it a linkable class + { + writeMultiLineCodeLink(ol,md->getReference(), + md->getOutputFileBase(), + md->anchor(), + memberName, + md->briefDescriptionAsTooltip()); + addToSearchIndex(memberName); + return; + } + // nothing found, just write out the word + ol.linkableSymbol(g_yyLineNr,memberName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition); + codifyLines(memberName.data()); + addToSearchIndex(memberName); +}// generateMemLink + + +static void generateClassOrGlobalLink(CodeOutputInterface &ol,const char *clName, bool /*typeOnly*/) +{ + QCString className=clName; + + if (className.isEmpty()) return; + + ClassDef *cd=0; + //MemberDef *md=0; + //bool isLocal=FALSE; + className.stripPrefix("_"); + cd = getClass(className.data()); + while (cd) + { + //className.stripPrefix("_"); + QCString temp(clName); + temp.stripPrefix("_"); + if (cd && cd->isLinkable()) // is it a linkable class + { + //if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS) + //{ + // temp=VhdlDocGen::getClassName(cd); + //} + ol.linkableSymbol(g_yyLineNr,temp,cd, + g_currentMemberDef ? + g_currentMemberDef : + g_currentDefinition); + writeMultiLineCodeLink(ol,cd->getReference(), + cd->getOutputFileBase(), + 0, + temp, + cd->briefDescriptionAsTooltip()); + addToSearchIndex(className); + return; + } + Definition *d = cd->getOuterScope(); + if (d && d->definitionType()==Definition::TypeClass) + { + cd = (ClassDef*)d; + } + else + { + cd = 0; + } + } + + // nothing found, just write out the word + ol.linkableSymbol(g_yyLineNr,clName,0,g_currentMemberDef?g_currentMemberDef:g_currentDefinition); + codifyLines(clName); + addToSearchIndex(clName); +}// generateClasss or global link + + +/*! counts the number of lines in the input */ +static int countLines() +{ + const char *p=g_inputString; + char c; + int count=1; + while ((c=*p)) + { + p++ ; + if (c=='\n') count++; + } + if (p>g_inputString && *(p-1)!='\n') + { // last line does not end with a \n, so we add an extra + // line and explicitly terminate the line after parsing. + count++, + g_needsTermination=TRUE; + } + return count; +} + +static void endFontClass() +{ + if (g_currentFontClass) + { + g_code->endFontClass(); + g_currentFontClass=0; + } +} + +static void startFontClass(const char *s) +{ + if (s==0) return; + endFontClass(); + g_code->startFontClass(s); + g_currentFontClass=s; +} + +static void writeFont(const char *s,const char* text) +{ + if (s==0) return; + g_code->startFontClass(s); + g_code->codify(text); + g_code->endFontClass(); +} + +//---------------------------------------------------------------------------- + +static void appStringLower(QCString& qcs,const char* text) +{ + qcs.resize(0); + qcs.append(text); + //qcs=qcs.lower(); + qcs=qcs.stripWhiteSpace(); +} + +//static void appString(QCString& qcs,const char* text) +//{ +// qcs.resize(0); +// qcs.append(text); +//} + +static QCString g_temp; + +/* writes and links a port map statement */ +static void codifyMapLines(char *text) +{ + g_temp.resize(0); + bool dot=FALSE; + //printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text); + char *p=text,*sp=p; + char c; + bool done=FALSE; + while (!done) + { + sp=p; + while ((c=*p++) && c!='\n' && c!=':' && c != ' ' && c != '(') + { + g_temp+=c; + } + //printf("--> g_temp='%s'\n",g_temp.data()); + if (c=='\n') + { + g_yyLineNr++; + *(p-1)='\0'; + //if (dot==TRUE) + //{ + QCString tt=g_temp; + tt=tt.lower(); + tt=tt.stripWhiteSpace(); + QCString *ss; + if ((ss=VhdlDocGen::findKeyWord(tt))) + { + writeFont(ss->data(),g_temp); + } + else + { + generateClassOrGlobalLink(*g_code,sp); + g_PortMapComp=tt; + } + dot=FALSE; + g_temp.resize(0); + //} + //else + //{ + // g_code->codify(g_temp); + // g_temp.resize(0); + //} + endCodeLine(); + if (g_yyLineNr<g_inputLines) + { + startCodeLine(); + } + } + else + { + if (c==':') + { + dot = TRUE; + g_code->codify(g_temp); + g_code->codify(":"); + g_temp.resize(0); + } + + if (c==' ' && !g_temp.isEmpty()) + { + //if (dot==TRUE) + //{ + QCString tt=g_temp; + tt=tt.lower(); + + QCString *ss; + if ((ss=VhdlDocGen::findKeyWord(tt))) + { + writeFont(ss->data(),g_temp); + } + else + { + g_PortMapComp=tt; + generateClassOrGlobalLink(*g_code,g_temp); + } + dot=FALSE; + g_temp.resize(0); + g_temp+=c; + //} + //else + //{ + // g_temp+=c; + // g_code->codify(g_temp.data()); + // g_temp.resize(0); + //} + + } + else if (!g_temp.isEmpty()) + { + if (c!='(' && c!=' ') + { + g_temp+=c; + } + QCString *ss; + if ((ss=VhdlDocGen::findKeyWord(g_temp.lower().stripWhiteSpace()))) + { + writeFont(ss->data(),g_temp); + } + else + { + g_code->codify(g_temp); + } + g_temp.resize(0); + } + else + { + g_code->codify(" "); + } + if (c=='(') + { + g_code->codify("("); + done=TRUE; + } + } + }//while +}//codifymaplines + +/* +* writes a function|procedure prototype and links the function|procedure name +*/ + +static void writeFuncProto() +{ + QList<Argument> ql; + QCString name,ret; + VhdlDocGen::parseFuncProto(g_FuncProto.data(),ql,name,ret,FALSE); + + QStringList qlist=QStringList::split(name.data(),g_FuncProto,FALSE); + QCString temp=(QCString)qlist[0]; + codifyLines(temp.data()); + g_FuncProto.stripPrefix(temp.data()); + temp.resize(0); + temp=g_CurrClass; + if (isPackageBody) + { + temp.stripPrefix("_"); + } + MemberDef *mdef=VhdlDocGen::findFunction(ql,name,temp,FALSE); + + if (mdef) + { + generateFuncLink(*g_code,mdef); + g_FuncProto.stripPrefix(name.data()); + codifyLines(g_FuncProto.data()); + } + else + { + codifyLines(g_FuncProto.data()); + } +}// writeFuncProto + +/* writes a process prototype to the ouput */ + + static void writeProcessProto(){ + codifyLines(g_FuncProto.data(),g_CurrClass.data()); + g_vhdlKeyDict.clear(); +}// writeProcessProto + +/* writes a keyword */ + +static bool writeColoredWord(QCString& word ) +{ + QCString qcs=word.lower(); + QCString *ss=VhdlDocGen::findKeyWord(qcs); + if (ss) + { + writeFont(ss->data(),word.data()); + return TRUE; + } + return FALSE; +} + +#undef YY_INPUT +#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); + +static int yyread(char *buf,int max_size) +{ + int c=0; + while( c < max_size && g_inputString[g_inputPosition] ) + { + *buf = g_inputString[g_inputPosition++] ; + c++; buf++; + } + return c; +} + +%} + + +B [ \t] +BN [ \t\n\r] + +NAME [a-z_A-Z][ a-z_A-Z0-9]* +FUNCNAME [a-z_A-Z"][a-z_A-Z0-9+*"/=<>-]* +ID "$"?[a-z_A-Z][a-z_A-Z0-9]* +SPECSIGN [:;, "+*&\/=<>'\t]* +DIGITSS [0-9]+|[0-9]+"."[0-9]+|[0-9]+"#"[0-9_a-fA-F\+\.]+"#" +ALLTYPESMAP {B}*[_a-zA-Z0-9. ]+{B}* +ALLTYPESMAP1 {B}*[_a-zA-Z0-9.() ]+{B}* + +ARCHITECTURE ^{B}*("architecture"){BN}+{FUNCNAME}{BN}+("of"){BN}+{FUNCNAME} +PROCESS ({BN}*{FUNCNAME}{B}*[:]+{BN}*("process"){BN}*[(]*)|[^a-zA-Z]("process "|"process("){BN}*[ (]*|[^a-zA-Z]("process"){BN}+ + +END1 {B}*("end "){BN}+("if"|"case"|"loop"|"generate") +END2 [^a-zA-Z_]("end"){BN}*[;] +END3 {BN}*[^a-zA-Z]("end"){BN}+{FUNCNAME}{BN}*[;] +END4 {B}*("end"){BN}+"function"{BN}+{FUNCNAME}{BN}*[;] +ENDEFUNC {END3}|{END4}|{END2} + +KEYWORD ("new"|"event"|"break"|"case"|"end"|"loop"|"else"|"for"|"goto"|"if"|"return"|"generate"|"is"|"while"|"in") +TYPEKW ^{B}*("type"|"subtype"|"constant"|"attribute"|"signal"|"variable") +FUNC ^{B}*("function"|"procedure"){BN}*{FUNCNAME}{BN}*("(") + +ARITHOP "+"|"-"|"/"|"*"|"%"|"/="|":=" +ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|=" +LOGICOP "=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!" +BITOP "&"|"|"|"^"|"<<"|">>"|"~" +OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} + +PORT {B}*("port"){BN}*("(") +GENERIC {B}*("generic"){BN}*("(") + +BRACEOPEN [(]{1} +BRACECLOSE [)]{1} + +TEXTT {B}*"--"[^\n]* + +MAPCOMPONENT1 ({ALLTYPESMAP}[:]{ALLTYPESMAP}{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1}) +MAPCOMPONENT2 {BN}*("port"|"generic"){BN}+("map"){BN}*("("){1} +MAPCOMPONENT3 ({ALLTYPESMAP}[:]{ALLTYPESMAP1}{BN}+("port"|"generic"){BN}+("map"){BN}*("("){1}) + +MAPPORT {BN}*("port"|"generic"){BN}*("map"){BN}*("("){1} + +%option noyywrap +%option nounput + +%x Bases +%x ParseType +%x ParseFuncProto +%x ParseComponent +%x ParsePackage +%x ParseProcessProto +%x ClassName +%x PackageName +%x ClassVar +%x ClassesName +%x Map +%x Body + +%% + +. { + BEGIN(Bases); + } + +<Map>{BRACEOPEN} { + g_braceCount++; + writeFont("vhdlchar",yytext); + BEGIN(Map); + } + +<Map>[^()\n,]* { /* write and link a port map lines */ + QCString tt(yytext); + VhdlDocGen::deleteAllChars(tt,','); + QRegExp r("=>"); + QStringList ql=QStringList::split(r,tt,FALSE); + if (ql.count()>=2) + { + unsigned int index=0; + QCString t1=(QCString)ql[0]; + char cc=t1.at(index); + while (cc==' ' || cc=='\t') + { + char c2[2]; + c2[0]=cc; + c2[1]=0; + g_code->codify(c2); + index++; + if (index>=t1.size()) break; + cc=t1.at(index); + } + + QCString s1=(QCString)ql[0]; + s1=s1.stripWhiteSpace(); + + // if (!g_PortMapComp.isEmpty()) + generateMemLink(*g_code,g_PortMapComp,s1); + while (index++<t1.size()) + { + char cc=t1.at(index); + if (cc==' ' || cc=='\t') + { + char c2[2]; + c2[0]=cc; + c2[1]=0; + g_code->codify(c2); + } + } + codifyLines("=>"); + index=0; + QCString s2=(QCString)ql[1]; + t1=s2; + cc=t1.at(index); + while (cc==' ' || cc=='\t') + { + char c2[2]; + c2[0]=cc; + c2[1]=0; + g_code->codify(c2); + index++; + if (index>=t1.size()) break; + cc=t1.at(index); + } + s2=s2.stripWhiteSpace(); + generateMemLink(*g_code,g_CurrClass,s2); + while (index++<t1.size()) + { + if (t1.at(index)==' ') + { + g_code->codify(" "); + } + } + } + else + { + codifyLines(yytext,g_CurrClass.data()); + } + BEGIN(Map); + } + +<Map>"\n"|"," { + codifyLines(yytext); + BEGIN(Map); + } + +<Map>{BRACECLOSE} { + g_braceCount--; + writeFont("vhdlchar",yytext); + if (g_braceCount==0) + { + BEGIN(Bases); + } + } + +<ParseFuncProto>{NAME} { + QCString tmp(yytext); + tmp=tmp.stripWhiteSpace(); + appStringLower(g_PrevString,yytext); + g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data())); + if (!writeColoredWord(tmp)) + { + generateMemLink(*g_code,g_CurrClass,tmp); + } + BEGIN(Bases); + } + +<ParseType>"\n" { + g_FuncProto.append(yytext); + if (isProto) + { + codifyLines(yytext); + } + BEGIN(ParseType); + } + + +<ParseType>{TEXTT} { + if (!isStripCode) + { + g_FuncProto.append(yytext); + if (isProto) + { + writeFont("keyword",yytext); + } + BEGIN(ParseType); + } + } + +<ParseType>{ENDEFUNC} { + QCString tt(yytext); + codifyLines(yytext); + tt=tt.lower(); + VhdlDocGen::deleteAllChars(tt,';'); + tt.stripWhiteSpace(); + QStringList ql=QStringList::split(" ",tt,FALSE); + int index=ql.findIndex(QCString("if"))+1; + index+=ql.findIndex(QCString("case"))+1; + index+=ql.findIndex(QCString("loop"))+1; + index+=ql.findIndex(QCString("generate"))+1; + if (index==0) + { + BEGIN(Bases); + } + else + { + BEGIN(ParseType); + } + } + +<ParseType>{END1} { + codifyLines(yytext); + g_vhdlKeyDict.clear(); + } + +<ParseType>^{B}*("begin "|"begin") { + codifyLines(yytext); + isFuncProto=FALSE; + } + +<ParseType>{SPECSIGN} { + g_FuncProto.append(yytext); + if (isProto) + { + codifyLines(yytext); + } + } + +<ParseType>[_a-zA_Z"]["_a-zA-Z0-9]* { + QCString val(yytext); + g_FuncProto.append(yytext); + appStringLower(g_PrevString,yytext); + + if (isFuncProto && g_braceCount==0) + { + g_vhdlKeyDict.insert(g_PrevString,new QCString(g_PrevString.data())); + } + + if (isProto) + { + if (!writeColoredWord(val)) + { + if (!isFuncProto && !g_vhdlKeyDict.find(g_PrevString)) + { + val=val.stripWhiteSpace(); + generateMemLink(*g_code,g_CurrClass,val); + } + else + { + codifyLines(yytext); + } + } + } + BEGIN(ParseType); + } + +<ParseType>{BRACEOPEN} { + g_braceCount++; + g_FuncProto+='('; + if (isProto) + { + writeFont("vhdlchar",yytext); + } + BEGIN(ParseType); + } + +<ParseType>{BRACECLOSE} { + g_braceCount--; + g_FuncProto+=')'; + if (isProto) + { + writeFont("vhdlchar",yytext); + } + if (g_braceCount==0 && !isProto)// && !isPackageBody) + { + isProto=TRUE; + appStringLower(g_PrevString,yytext); + writeFuncProto(); + BEGIN(Bases); + } + if (isPackageBody) + { + BEGIN(ParseType); + } + } + + +<ClassesName>{FUNCNAME} { + QDict<QCString> mem; + appStringLower(g_PrevString,yytext); + g_CurrClass.resize(0); + g_CurrClass.append(yytext); + g_CurrClass=g_CurrClass.stripWhiteSpace(); + + if (!writeColoredWord(g_CurrScope)) + { + generateClassOrGlobalLink(*g_code,yytext); + } + else + { + g_code->codify(yytext); + } + BEGIN(Bases); + } + + +<ParseComponent>{BRACEOPEN} { + g_braceCount++; + g_code->codify(yytext); + } + + +<ParseComponent>{BRACECLOSE} { + g_braceCount--; + g_code->codify(yytext); + if (g_braceCount==0 && !isComponent) + { + g_tempComp.resize(0); + BEGIN(Bases); + } + else + { + BEGIN(ParseComponent); + } + } + +<ParseComponent>{B}*"-" { + if (strlen(yytext)>=2) // found text ? + { + writeFont("keyword",yytext); + } + else + { + writeFont("vhdlchar",yytext); + } + } + +<ParseComponent>{SPECSIGN} { + codifyLines(yytext); + } + +<ParseComponent>"\n"|" " { + if (!isStripCode) + { + codifyLines(yytext); + } + else + { + g_yyLineNr++; + } + } + +<ParseComponent>{TEXTT} { + QCString text(yytext); + if (!isStripCode) + { + writeFont("keyword",yytext); + } + } + +<ParseComponent>{DIGITSS} { + startFontClass("vhdllogic"); + codifyLines(yytext); + endFontClass(); + } + +<ParseComponent>{PORT} { + codifyLines(yytext); + g_braceCount=1; + isComponent=FALSE; + } + +<ParseComponent>{GENERIC} { + codifyLines(yytext); + g_braceCount=1; + } + +<ParseComponent>[_a-zA_Z][_a-zA-Z0-9]* { + QCString temp(yytext); + appStringLower(g_PrevString,yytext); + if (!writeColoredWord(g_PrevString)) + { + generateMemLink(*g_code,g_tempComp,temp); + } + } + +<ParseProcessProto>[^()]* { + g_FuncProto.append(yytext); + } + +<ParseProcessProto>{BRACEOPEN} { + g_FuncProto.append(yytext); + g_braceCount++; + } + +<ParseProcessProto>{BRACECLOSE} { + g_FuncProto.append(yytext); + g_braceCount--; + if (g_braceCount==0) + { + writeProcessProto(); + BEGIN(Bases); + } + } + +<ParsePackage>[^:;]* { //found package + QCString temp(yytext); + QStringList strl=QStringList::split(".",temp,FALSE); + + if (strl.count()>2) + { + QCString s1=(QCString)strl[0]; + QCString s2=(QCString)strl[1]; + QCString s3=(QCString)strl[2]; + s1.append("."); + s3.prepend("."); + codifyLines(s1.data()); + ClassDef *cd=VhdlDocGen::getPackageName(s2); + if (cd) + { + generateClassOrGlobalLink(*g_code,s2.data()); + } + else + { + codifyLines(s2.data()); + } + codifyLines(s3.data()); + } + else + { + writeFont("keywordflow",yytext); + } + BEGIN(Bases); + } + +<Bases>{MAPCOMPONENT1}|{MAPCOMPONENT2}|{MAPCOMPONENT3} { // found port or generic map + QCString tt(yytext); + if (tt.contains(':',FALSE)) + { + isStartMap=TRUE; + } + else + { + isStartMap=FALSE; + } + int j=tt.find('.'); + + if (j>0) + { + QCString left=tt.left(j+1); + codifyLines(left.data()); + tt=tt.right(tt.length()-j-1); + left=VhdlDocGen::getIndexWord(tt.data(),0); + if (!left.isEmpty()) + { + if (left.contains('(')) + { + j=left.find('(',FALSE); + QCString name=left.left(j); + generateClassOrGlobalLink(*g_code,name.data()); + g_PortMapComp=name; + name=tt.right(tt.length()-name.length()); + codifyLines(name.data()); + } + else + { + generateClassOrGlobalLink(*g_code,left.data()); + tt=tt.right(tt.length()-left.length()-1); + tt.prepend(" "); + g_PortMapComp=left; + codifyLines(tt.data()); + } + } + } + else + { + codifyMapLines(tt.data()); + } + g_braceCount=1; + BEGIN(Map); + } + +<Bases>^{B}*("component"){BN}+{FUNCNAME} { // found component + appStringLower(g_PrevString,yytext); + // writeFont("keywordflow",VhdlDocGen::getIndexWord(yytext,0).data()); + // writeFont("vhdlkeyword"," "); + QCString temp=VhdlDocGen::getIndexWord(yytext,1); + temp=temp.stripWhiteSpace(); + VhdlDocGen::deleteAllChars(temp,'\n'); + g_tempComp=temp; + codifyLines(yytext,temp.data(),TRUE); + g_braceCount=0; + + //if (getClass(temp.data())) + // generateClassOrGlobalLink(*g_code,temp.data()); + //else + // generateMemLink(*g_code,g_CurrClass,temp); + + isComponent=TRUE; + BEGIN(ParseComponent); + } + + + +<Bases>{ARCHITECTURE} { // found architecture + g_PortMapComp.resize(0); + // writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(yytext,0).data()); + // writeFont("vhdlkeyword"," "); + // writeFont("vhdlchar",VhdlDocGen::getIndexWord(yytext,1).data()); + // writeFont("vhdlkeyword"," "); + // writeFont("vhdlkeyword",VhdlDocGen::getIndexWord(yytext,2).data()); + // writeFont("vhdlkeyword"," "); + //QCString temp=VhdlDocGen::getIndexWord(yytext,1); + //temp=temp.stripWhiteSpace(); + //temp+=("-"); + //temp+=VhdlDocGen::getIndexWord(yytext,3); + QCString temp = VhdlDocGen::getIndexWord(yytext,3); + temp+="::"; + temp+=VhdlDocGen::getIndexWord(yytext,1); + g_CurrClass=temp; + VhdlDocGen::deleteAllChars(temp,'\n'); + codifyLines(yytext,temp.data(),TRUE); + //generateClassOrGlobalLink(*g_code,temp.data()); + isPackageBody=FALSE; + BEGIN(ClassName); + } + + +<Bases>^{B}*("package "){BN}*("body"){BN}*{FUNCNAME} { // found package body + QCString ss(yytext); + QCString temp=VhdlDocGen::getIndexWord(yytext,2); + QStringList ql=QStringList::split(temp,ss,FALSE); + QCString ll=(QCString)ql[0]; + codifyLines(ll.data()); + temp=temp.stripWhiteSpace(); + // temp.prepend("_"); + generateClassOrGlobalLink(*g_code,temp.data()); + g_CurrClass.resize(0); + g_CurrClass=temp; + isProto=FALSE; + isPackageBody=TRUE; + // BEGIN(ClassesName); + } + +<Bases>{PROCESS} { // found process + isFuncProto=TRUE; + g_FuncProto.resize(0); + g_FuncProto.append(yytext); + g_vhdlKeyDict.clear(); + appStringLower(g_PrevString,yytext); + if (g_PrevString.contains('(')) + { + g_braceCount=1; + BEGIN(ParseProcessProto); + } + else + { + writeProcessProto(); + } + } + +<Bases>("end"){BN}+("process") { // end of process + isFuncProto=FALSE; + codifyLines(yytext); + BEGIN(Bases); + } + + +<Bases>^{B}*("begin "|"begin") { + isFuncProto=FALSE; + writeFont("vhdlkeyword",yytext); + } + +<Bases>^{B}*("use"|"library"){BN}+ { //found including package or library + writeFont("vhdlkeyword",yytext); + BEGIN(ParsePackage); + } + + + +<Bases>{FUNC} { // founc function|procedure + g_vhdlKeyDict.clear(); + g_FuncProto.resize(0); + isProto=FALSE; + g_FuncProto.append(yytext); + g_braceCount=1; + BEGIN(ParseType); + } + + + +<Bases>^{B}*("entity"|"package"){BN}+ { + appStringLower(g_PrevString,yytext); + writeFont("keywordflow",yytext); + isPackageBody=FALSE; + BEGIN(ClassesName); + } + + +<Bases>{KEYWORD} { // found keyword + QCString qcs(yytext); + if (!writeColoredWord(qcs)) + { + startFontClass("vhdlchar"); + g_code->codify(yytext); + endFontClass(); + } + } + + +<Bases>{ID} { + appStringLower(g_PrevString,yytext); + QCString temp(yytext); + temp=temp.stripWhiteSpace(); + + if (!writeColoredWord(temp)) + { + startFontClass("vhdlchar"); + generateMemLink(*g_code,g_CurrClass,temp); + endFontClass(); + } + } + +<Bases,ParseComponent>{DIGITSS} { + startFontClass("vhdllogic"); + codifyLines(yytext); + endFontClass(); + } + + + +<Bases>{TYPEKW} { + codifyLines(yytext); + if (isFuncProto) + { + BEGIN(ParseFuncProto); + } + else + { + BEGIN(Bases); + } + } + +<Bases>{OPERATOR} { + startFontClass("vhdlchar"); + g_code->codify(yytext); + endFontClass(); + } + +<Bases>","|"."|":"|"'"|"("|")" { + startFontClass("vhdlchar"); + g_code->codify(yytext); + endFontClass(); + } + + + + +<*>\n { + if (!isStripCode) + { + codifyLines(yytext); + } + else + { + g_yyLineNr++; + } + BEGIN(Bases); + } + +<*>. { + g_code->codify(yytext); + } + +<*>{TEXTT} { // found text + bool stripLine=FALSE; + QCString text(yytext); + if (Config_getBool("STRIP_CODE_COMMENTS")) + { + if (text.contains("--!")) + { + stripLine=TRUE; + } + } + if (!isStripCode && !stripLine) + { + writeFont("keyword",yytext); + BEGIN(Bases); + } + } + /* +<*>{B}*"--#"[^\n]* { // found one line comment + if (!Config_getBool("STRIP_CODE_COMMENTS")) + { + startFontClass("keyword"); + codifyLines(yytext); + endFontClass(); + } + } + */ + + + +%% + +/*@ ---------------------------------------------------------------------------- + */ + +void resetVhdlCodeParserState() +{ + g_vhdlKeyDict.setAutoDelete(TRUE); + g_vhdlKeyDict.clear(); +} + +void parseVhdlCode(CodeOutputInterface &od,const char *className,const QCString &s, + bool exBlock, const char *exName,FileDef *fd, + int startLine,int endLine,bool inlineFragment, + MemberDef *memberDef) +{ + //printf("***parseCode() exBlock=%d exName=%s fd=%p\n",exBlock,exName,fd); + if (s.isEmpty()) return; + if (memberDef) + { + ClassDef *dd=memberDef->getClassDef(); + if (dd) g_CurrClass=dd->className(); + startLine--; + } + resetVhdlCodeParserState(); + g_code = &od; + g_inputString = s; + g_inputPosition = 0; + g_currentFontClass = 0; + g_needsTermination = FALSE; + + if (endLine!=-1) + g_inputLines = endLine+1; + else + g_inputLines = countLines(); + + if (startLine!=-1) + g_yyLineNr = startLine; + else + g_yyLineNr = 1; + + + // g_theCallContext.clear(); + g_classScope = className; + g_exampleName = exName; + g_sourceFileDef = fd; + if (exBlock && fd==0) + { + // create a dummy filedef for the example + g_sourceFileDef = new FileDef("",exName); + } + if (g_sourceFileDef) + { + setCurrentDoc(g_sourceFileDef->name(),g_sourceFileDef->getSourceFileBase()); + } + g_currentDefinition = 0; + g_currentMemberDef = 0; + g_vhdlMember=0; + if (!g_exampleName.isEmpty()) + { + g_exampleFile = convertNameToFile(g_exampleName+"-example"); + } + g_includeCodeFragment = inlineFragment; + if (!memberDef) + { + startCodeLine(); + } + // g_type.resize(0); + // g_name.resize(0); + // g_args.resize(0); + g_parmName.resize(0); + g_parmType.resize(0); + if (memberDef) + { + setParameterList(memberDef); + } + vhdlcodeYYrestart( vhdlcodeYYin ); + BEGIN( Bases ); + vhdlcodeYYlex(); + g_lexInit=TRUE; + if (g_needsTermination) + { + endFontClass(); + g_code->endCodeLine(); + } + if (exBlock && g_sourceFileDef) + { + // delete the temporary file definition used for this example + delete g_sourceFileDef; + g_sourceFileDef=0; + } + return; +} + +void codeFreeVhdlScanner() +{ +#if defined(YY_FLEX_SUBMINOR_VERSION) + if (g_lexInit) + { + vhdlcodeYYlex_destroy(); + } +#endif +} + +#if !defined(YY_FLEX_SUBMINOR_VERSION) +extern "C" { // some bogus code to keep the compiler happy + void vhdlcodeYYdummy() { yy_flex_realloc(0,0); } +} +#elif YY_FLEX_SUBMINOR_VERSION<33 +#error "You seem to be using a version of flex newer than 2.5.4 but older than 2.5.33. These versions do NOT work with doxygen! Please use version <=2.5.4 or >=2.5.33 or expect things to be parsed wrongly!" +#endif + + + + diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp new file mode 100644 index 0000000..60a49b1 --- /dev/null +++ b/src/vhdldocgen.cpp @@ -0,0 +1,2319 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ +/****************************************************************************** + * Parser for VHDL subset + * written by M. Kreis + * supports VHDL-87 + * does not support all keywords of VHDL '93 (impure function/shared variables ..) + * and VHDL-AMS + ******************************************************************************/ + +// global includes +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <string.h> +#include <qcstring.h> +#include <qfileinfo.h> +#include <qstringlist.h> + +/* --------------------------------------------------------------- */ + +// local includes +#include "vhdldocgen.h" +#include "message.h" +#include "config.h" +#include "doxygen.h" +#include "util.h" +#include "language.h" +#include "commentscan.h" +#include "index.h" +#include "definition.h" +#include "searchindex.h" +#include "outputlist.h" + +/* --------------------------------------------------------------- */ + +//#define theTranslator_vhdlType theTranslator->trVhdlType +#define theTranslator_vhdlType VhdlDocGen::trVhdlType + +static QDict<QCString> g_vhdlKeyDict0(17,FALSE); +static QDict<QCString> g_vhdlKeyDict1(17,FALSE); +static QDict<QCString> g_vhdlKeyDict2(17,FALSE); + +static QCString g_vhdlkeyword("vhdlkeyword"); +static QCString g_vhdltype("comment"); +static QCString g_vhdllogic("vhdllogic"); + +// keywords +static const char* g_vhdlKeyWordMap0[] = +{ + "std","ieee","work","standard","textio","std_logic_1164", + "std_logic_arith","std_logic_misc","std_logic_signed","std_logic_textio", + "std_logic_unsigned","numeric_bit","numeric_std","math_complex","math_real", + "vital_primitives","vital_timing","severity_level","time","delay_length", + "natural", "positive", "bit_vector","file_open_kind","file_open_status", + "line","text","side", "width","event","rising_edge", "falling_edge", + "access","after","alias", "all","architecture","array", "assert","attribute", + "begin","block","body", "buffer", "bus", "case", "component", "configuration", + "constant", "disconnect", "downto", "else", "elsif", "end", "entity", "exit", + "file", "for", "function", "generate", "generic", "group", "guarded", "if", + "impure", "in", "inertial", "inout", "is","label", "library", "linkage", + "literal", "loop","map", "new", "next", "null", "of", "on", "open", "others", + "out", "package", "port", "postponed", "procedure", "process", "pure", + "range", "record", "register", "reject", "report", "return","select", + "severity", "shared", "signal", "subtype", "then", "to", "transport", + "type","unaffected", "units", "until", "use","variable", "wait", "when", + "while", "with",0 +}; + +// type +static const char* g_vhdlKeyWordMap1[] = +{ + "natural","unsigned","signed","string","boolean", "bit","character", + "std_ulogic","std_ulogic_vector","sTd_logic","std_logic_vector","integer", + "real","zzz",0 +}; + +// logic +static const char* g_vhdlKeyWordMap2[] = +{ + "abs","and","or","not","mod", "xor","rem","xnor","ror","rol","sla", + "sll",0 +}; + +VhdlDocGen::VhdlDocGen() +{ +} + +VhdlDocGen::~VhdlDocGen() +{ +} + +void VhdlDocGen::init() +{ + int j=0; + g_vhdlKeyDict0.setAutoDelete(TRUE); + g_vhdlKeyDict1.setAutoDelete(TRUE); + g_vhdlKeyDict2.setAutoDelete(TRUE); + + j=0; + while (g_vhdlKeyWordMap0[j]) + { + g_vhdlKeyDict0.insert(g_vhdlKeyWordMap0[j], + new QCString(g_vhdlKeyWordMap0[j])); + j++; + } + + j=0; + while (g_vhdlKeyWordMap1[j]) + { + g_vhdlKeyDict1.insert(g_vhdlKeyWordMap1[j], + new QCString(g_vhdlKeyWordMap1[j])); + j++; + } + + j=0; + while (g_vhdlKeyWordMap2[j]) + { + g_vhdlKeyDict2.insert(g_vhdlKeyWordMap2[j], + new QCString(g_vhdlKeyWordMap2[j])); + j++; + } + +}// buildKeyMap + +/*! + * returns the color of a keyword + */ + +QCString* VhdlDocGen::findKeyWord(const QCString& word) +{ + if (word.isEmpty() || word.at(0)=='\0') return 0; + //printf("VhdlDocGen::findKeyWord(%s)\n",word.data()); + + if (g_vhdlKeyDict0.find(word)) + return &g_vhdlkeyword; + + if (g_vhdlKeyDict1.find(word)) + return &g_vhdltype; + + if (g_vhdlKeyDict2.find(word)) + return &g_vhdllogic; + + return 0; +} + +/*! + * returns the parsed entry at line xxx + */ + +Entry* VhdlDocGen::getEntryAtLine(const Entry* ce,int line) +{ + EntryListIterator eli(*ce->children()); + Entry *found=0; + Entry *rt; + for (;(rt=eli.current());++eli) + { + if (rt->bodyLine==line) + { + found=rt; + } // if + if (!found) + { + found=getEntryAtLine(rt,line); + } + } + return found; +}// getEntryAtLine + +void VhdlDocGen::debugClassName(ClassSDict* mDict) +{ + // for each class + ClassSDict::Iterator cli(*mDict); + ClassDef *cd; + for ( ; (cd=cli.current()) ; ++cli ) + { + printf("\n -------------------------class----------------------------------------\n"); + + QCString nnn=cd->className(); + QCString qref=cd->getReference(); + QCString outBase=cd->getOutputFileBase(); + QCString fileBase=cd->getFileBase(); + QCString compType=cd->compoundTypeString(); + QCString inDoc=cd->documentation();//->inbodyDocumentation(); + printf("\n refernz [%p]",cd); + printf("\n compType [%s]",compType.data()); + printf("\n Name [%s]",nnn.data()); + printf("\n TYPE[%d ",cd->definitionType()); + printf("\n Ref [%s] ",qref.data()); + printf("\n OutBase [%s] fileBase [%s]",outBase.data(),fileBase.data()); + + printf("\n -------------------------------------------------------------------\n"); + + }// for +}// Debug Class Name + + +bool found =FALSE; +static Entry eMerge; + +ClassDef *VhdlDocGen::getClass(const char *name) +{ + if (name==0 || name[0]=='\0') return 0; + + ClassDef *cd=0; + QCString temp(name); + //temp=temp.lower(); + temp=temp.stripWhiteSpace(); + cd= Doxygen::classSDict->find(temp.data()); + return cd; +} + +/*! + * adds components to their entities + */ +void VhdlDocGen::computeVhdlComponentRelations(const QDict<EntryNav>& classEntries,FileStorage* g_storage) +{ + ClassSDict::Iterator cli(*Doxygen::classSDict); + for (cli.toFirst();cli.current();++cli) cli.current()->visited=FALSE; + QDictIterator<EntryNav> edi(classEntries); + EntryNav *rootNav; + for (;(rootNav=edi.current());++edi) + { + ClassDef *cd; + rootNav->loadEntry(g_storage); + Entry *root = rootNav->entry(); + QCString bName=stripAnonymousNamespaceScope(rootNav->name()); + if ((cd=getClass(bName))) + { + QListIterator<BaseInfo> bii(*root->extends); + BaseInfo *bi=0; + for (bii.toFirst();(bi=bii.current());++bii) + { + ClassDef* baseDef=getClass(bi->name); + + if (baseDef && baseDef != cd) + { + QCString cc=VhdlDocGen::getClassName(cd); + ClassDef *ccdef=getClass(cc); + if (ccdef==0) break; + + int ii=ccdef->protection(); + int jj=baseDef->protection(); + + if (ii==VhdlDocGen::ENTITYCLASS && jj==VhdlDocGen::ENTITYCLASS && (ccdef !=baseDef)) + { + ccdef->insertBaseClass(baseDef,bi->name,Public,Normal,0); + baseDef->insertSubClass(ccdef,Public,bi->virt,0); + } + } + else + { + if (Config_getBool("WARNINGS")) + warn(rootNav->fileDef()->fileName().data(),root->startLine, "found component without entity: [%s]",bi->name.data()); + } + }//for + }//if + rootNav->releaseEntry(); + }// for +} // computeVhdlComponentRelations + + +/* + * returns a reference, if one class [package(body),entity or an architecture is found] + */ + +ClassDef* VhdlDocGen::findComponent(int type) +{ + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd=0; + + for ( ; (cd=cli.current()) ; ++cli ) + { + if (cd->protection()==type) + return cd; + } + return cd; +} + +ClassDef* VhdlDocGen::getPackageName(const QCString & name) +{ + ClassDef* cd=0; + QStringList ql=QStringList::split(".",name,FALSE); + cd=getClass(name); + + return cd; +} + +MemberDef* VhdlDocGen::findMember(const QCString& className, const QCString& memName) +{ + QDict<QCString> packages(17,FALSE); + packages.setAutoDelete(TRUE); + ClassDef* cd; + MemberDef *mdef=0; + + cd=getClass(className); + //printf("VhdlDocGen::findMember(%s,%s)=%p\n",className.data(),memName.data(),cd); + if (cd==0) return 0; + + mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::variableMembers); + if (mdef) return mdef; + mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods); + if (mdef) return mdef; + + // nothing found so far + // if we are an architecture or package body search in entitiy + + if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS || + (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS) + { + Definition *d = cd->getOuterScope(); + if (d && d->definitionType()==Definition::TypeClass) + { + ClassDef *ecd = (ClassDef*)d; + mdef=VhdlDocGen::findMemberDef(ecd,memName,MemberList::variableMembers); + if (mdef) return mdef; + } + //cd=getClass(getClassName(cd)); + //if (!cd) return 0; + } + // nothing found , so we are now searching all included packages + VhdlDocGen::findAllPackages(className,packages); + //cd=getClass(className.data()); + if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS || + (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS) + { + //QCString tempClass=getClassName(cd); + Definition *d = cd->getOuterScope(); + if (d && d->definitionType()==Definition::TypeClass) + { + ClassDef *ecd = (ClassDef*)d; + VhdlDocGen::findAllPackages(ecd->className(),packages); + } + } + + QDictIterator<QCString> packli(packages); + QCString *curString; + for (packli.toFirst();(curString=packli.current());++packli) + { + if (curString) + { + cd=VhdlDocGen::getPackageName(*curString); + } + if (cd) + { + mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::variableMembers); + if (mdef) return mdef; + mdef=VhdlDocGen::findMemberDef(cd,memName,MemberList::pubMethods); + if (mdef) return mdef; + } + } // for + return 0; +}//findMember + +/** + * This function returns the entity|package + * in which the key (type) is found + */ + +MemberDef* VhdlDocGen::findMemberDef(ClassDef* cd,const QCString& key,MemberList::ListType type) +{ + // return cd->getMemberByName(key);//does not work + MemberDef *md=0; + + MemberList *ml= cd->getMemberList(type); + if (ml==0) return 0; + + MemberListIterator fmni(*ml); + + for (fmni.toFirst();(md=fmni.current());++fmni) + { + if (stricmp(key.data(),md->name().data())==0) + return md; + } + return 0; +}//findMemberDef + +/*! + * finds all included packages of an Entity or Package + */ + +void VhdlDocGen::findAllPackages(const QCString& className,QDict<QCString>& qdict) +{ + ClassDef *cdef=getClass(className); + if (cdef) + { + MemberList *mem=cdef->getMemberList(MemberList::variableMembers); + MemberDef *md; + + if (mem) + { + MemberListIterator fmni(*mem); + for (fmni.toFirst();(md=fmni.current());++fmni) + { + if (VhdlDocGen::isPackage(md)) + { + QCString *temp1=new QCString(md->name().data()); + //*temp1=temp1->lower(); + QCString p(md->name().data()); + //p=p.lower(); + ClassDef* cd=VhdlDocGen::getPackageName(*temp1); + if (cd) + { + QCString *ss=qdict.find(*temp1); + if (ss==0) + { + qdict.insert(p,temp1); + QCString tmp=cd->className(); + VhdlDocGen::findAllPackages(tmp,qdict); + } + else delete temp1; + } + else delete temp1; + } + }//for + }//if + }//cdef +}// findAllPackages + +/*! + * returns the function with the matching argument list + * is called in vhdlcode.l + */ + +MemberDef* VhdlDocGen::findFunction(const QList<Argument> &ql, + const QCString& funcname, + const QCString& package, bool type) +{ + MemberDef* mdef=0; + int funcType; + ClassDef *cdef=getClass(package.data()); + if (cdef==0) return 0; + + if (type) + funcType=VhdlDocGen::PROCEDURE; + else + funcType=VhdlDocGen::FUNCTION; + + MemberList *mem=cdef->getMemberList(MemberList::pubMethods); + + if (mem) + { + MemberListIterator fmni(*mem); + for (fmni.toFirst();(mdef=fmni.current());++fmni) + { + QCString mname=mdef->name(); + if ((VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isVhdlFunction(mdef)) && (VhdlDocGen::compareString(funcname,mname)==0)) + { + LockingPtr<ArgumentList> alp = mdef->argumentList(); + + // ArgumentList* arg2=mdef->getArgumentList(); + if (alp==0) break; + ArgumentListIterator ali(*alp.pointer()); + ArgumentListIterator ali1(ql); + + if (ali.count() != ali1.count()) break; + + Argument *arg,*arg1; + int equ=0; + + for (;(arg=ali.current());++ali) + { + arg1=ali1.current(); ++ali1; + equ+=abs(VhdlDocGen::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)); + s1=arg->attrib; + s2=arg1->attrib; + VhdlDocGen::deleteAllChars(s1,' '); + VhdlDocGen::deleteAllChars(s2,' '); + equ+=abs(VhdlDocGen::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 + if (equ==0) return mdef; + }//if + }//for + }//if + return mdef; +} //findFunction + +/*! + * returns the function with the matching argument list + * is called in vhdscan.l + */ + +Entry* VhdlDocGen::findFunction( Entry* root, Entry* func) +{ + //bool found=FALSE; + Entry *found=0; + int functype=func->spec; + EntryListIterator eli(*root->children()); + Entry *rt; + for (;(rt=eli.current());++eli) + { + if (rt->spec==functype && VhdlDocGen::compareString(rt->name,func->name)==0 && rt!=func ) + { + if (VhdlDocGen::compareArgList(func->argList,rt->argList)) + { + found=rt; + return found; + } + }//if1 + if (!found) + { + found = VhdlDocGen::findFunction(rt,func); + } + } // for + return found; +}// findFunction + +/* + * compares two argument list of a fuction|procedure + */ + +bool VhdlDocGen::compareArgList(ArgumentList* l1,ArgumentList* l2) +{ + if (l1== 0 || l2== 0) return FALSE; + + ArgumentListIterator ali(*l1); + ArgumentListIterator ali1(*l2); + + if (ali.count() != ali1.count()) return FALSE; + + Argument *arg,*arg1; + int equ=0; + + for (;(arg=ali.current());++ali) + { + bool found = FALSE; + for (ali1.toFirst();(arg1=ali1.current());++ali1) + { + equ=0; + QCString s1=arg->type; + QCString s2=arg1->type; + VhdlDocGen::deleteAllChars(s1,' '); // remove whitespaces + VhdlDocGen::deleteAllChars(s2,' '); + equ+=abs(VhdlDocGen::compareString(s1,s2)); + s1=arg->attrib; + s2=arg1->attrib; + VhdlDocGen::deleteAllChars(s1,' '); + VhdlDocGen::deleteAllChars(s2,' '); + equ+=abs(VhdlDocGen::compareString(s1,s2)); + if (equ==0) found=TRUE; + } + if (!found) return FALSE; + } + return TRUE; +}// compareArgList + +/* + * finds a matching prototype for a function description + */ + +Entry* VhdlDocGen::findFunction(Entry* func) +{ + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd; + for (;(cd=cli.current());++cli) + { + MemberList *mf = cd->getMemberList (MemberList::pubMethods); + if (mf) + { + MemberListIterator fmni(*mf); + MemberDef *mdd; + for (fmni.toFirst();(mdd=fmni.current());++fmni) + { + int type=mdd->getMemberSpecifiers(); + if (type==VhdlDocGen::PROCEDURE || type==VhdlDocGen::FUNCTION) + { + QCString nnk=mdd->name(); + QCString ff=func->name; + + if (stricmp(mdd->name(),ff.data())==0) + { + LockingPtr< ArgumentList > lp=mdd->argumentList(); + ArgumentList *l=lp.pointer(); + if (VhdlDocGen::compareArgList(l,func->argList)) + { + mdd->setDocumentation(func->doc.data(),func->docFile.data(),func->docLine,TRUE); + mdd->setBriefDescription(func->brief,func->briefFile,func->briefLine); + addMemberToGroups(func,mdd);// do not forget grouping! + return func; + } + } + } + } + }// if + }//for + return 0; +}// findFunction + +/* + * adds the documentation for a function|procedure + */ + +void VhdlDocGen::addFuncDoc(EntryNav* rootNav) +{ + Entry *root = rootNav->entry(); + if (root && root->spec==VhdlDocGen::DOCUMENT) + { + Entry *func=VhdlDocGen::findFunction(root); + if (!func && Config_getBool("WARNINGS")) + { + warn(root->fileName,root->docLine, + "Warning: documentation for unknown function %s found.\n", + root->name.data() + ); + } + } +}// AddFuncDoc + +/*! + * returns the class title+ref + */ + +QCString VhdlDocGen::getClassTitle(const ClassDef *cd) +{ + QCString pageTitle; + if (cd==0) return ""; + pageTitle+=cd->displayName(); + pageTitle=VhdlDocGen::getClassName(cd); + int ii=cd->protection(); + pageTitle+=" "; + pageTitle+=theTranslator_vhdlType(ii+2,TRUE); + pageTitle+=" "; + return pageTitle; +} // getClassTitle + +/* returns the class name without their prefixes */ + +QCString VhdlDocGen::getClassName(const ClassDef* cd) +{ + QCString temp; + if (cd==0) return ""; + + if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS) + { + temp=cd->name(); + temp.stripPrefix("_"); + return temp; + } + //if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS) + //{ + // QStringList qlist=QStringList::split("-",cd->className(),FALSE); + // if (qlist.count()>1) + // return (QCString)qlist[1]; + // return ""; + //} + return substitute(cd->className(),"::","."); +} + +/*! + * writes an inline link form entity|package to architecture|package body and vice verca + */ + +void VhdlDocGen::writeInlineClassLink(const ClassDef* cd ,OutputList& ol) +{ + QList<QCString> ql; + ql.setAutoDelete(TRUE); + QCString nn=cd->className(); + int ii=(int)cd->protection()+2; + + QCString type; + if (ii==VhdlDocGen::ENTITY) + type+=theTranslator_vhdlType(VhdlDocGen::ARCHITECTURE,TRUE); + else if (ii==VhdlDocGen::ARCHITECTURE) + type+=theTranslator_vhdlType(VhdlDocGen::ENTITY,TRUE); + else if (ii==VhdlDocGen::PACKAGE_BODY) + type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE); + else if (ii==VhdlDocGen::PACKAGE) + type+=theTranslator_vhdlType(VhdlDocGen::PACKAGE_BODY,TRUE); + else + type+=""; + + //type=type.lower(); + type+=" >> "; + ol.disable(OutputGenerator::RTF); + ol.disable(OutputGenerator::Man); + ol.lineBreak(); + ol.lineBreak(); + + if (ii==VhdlDocGen::PACKAGE_BODY) + { + nn.stripPrefix("_"); + cd=getClass(nn.data()); + } + else if (ii==VhdlDocGen::PACKAGE) + { + nn.prepend("_"); + cd=getClass(nn.data()); + } + else if (ii==VhdlDocGen::ARCHITECTURE) + { + QStringList qlist=QStringList::split("-",nn,FALSE); + nn=qlist[1]; + cd=VhdlDocGen::getClass(nn.data()); + } + + QCString opp; + if (ii==VhdlDocGen::ENTITY) + { + VhdlDocGen::findAllArchitectures(ql,cd); + int j=ql.count(); + for (int i=0;i<j;i++) + { + QCString *temp=ql.at(i); + QStringList qlist=QStringList::split("-",*temp,FALSE); + QCString s1=(QCString)qlist[0]; + QCString s2=(QCString)qlist[1]; + s1.stripPrefix("_"); + if (j==1) s1.resize(0); + ClassDef*cc = getClass(temp->data()); + if (cc) + { + VhdlDocGen::writeVhdlLink(cc,ol,type,s2,s1); + } + } + } + else + { + VhdlDocGen::writeVhdlLink(cd,ol,type,nn,opp); + } + + ol.enable(OutputGenerator::Man); + ol.enable(OutputGenerator::RTF); + +}// write + +/* + * finds all architectures which belongs to an entiy + */ +void VhdlDocGen::findAllArchitectures(QList<QCString>& qll,const ClassDef *cd) +{ + ClassDef *citer; + ClassSDict::Iterator cli(*Doxygen::classSDict); + for ( ; (citer=cli.current()) ; ++cli ) + { + QCString jj=citer->className(); + if (cd != citer && jj.contains('-')!=-1) + { + QStringList ql=QStringList::split("-",jj,FALSE); + QCString temp=(QCString)ql[1]; + if (stricmp(cd->className().data(),temp.data())==0) + { + QCString *cl=new QCString(jj.data()); + qll.insert(0,cl); + } + } + }// for +}//findAllArchitectures + +/* + * writes the link entity >> .... or architecture >> ... + */ + +void VhdlDocGen::writeVhdlLink(const ClassDef* ccd ,OutputList& ol,QCString& type,QCString& nn,QCString& behav) +{ + if (ccd==0) return; + QCString temp=ccd->getOutputFileBase(); + ol.startBold(); + ol.docify(type.data()); + ol.endBold(); + nn.stripPrefix("_"); + ol.writeObjectLink(ccd->getReference(),ccd->getOutputFileBase(),0,nn.data()); + + if (!behav.isEmpty()) + { + behav.prepend(" "); + ol.startBold(); + ol.docify(behav.data()); + ol.endBold(); + } + /* + if (Config_getBool("SOURCE_BROWSER")) { // writes a source link for latex docu + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Latex); + ol.docify(" | "); + ol.startEmphasis(); + FileDef* fd=ccd->getFileDef(); + if (fd) + ol.writeObjectLink(0,fd->getSourceFileBase(),0,theTranslator->trGotoSourceCode().data()); + ol.endEmphasis(); + ol.popGeneratorState(); + } + */ + ol.lineBreak(); +} + +bool VhdlDocGen::compareString(const QCString& s1,const QCString& s2) +{ + QCString str1=s1.stripWhiteSpace(); + QCString str2=s2.stripWhiteSpace(); + + return stricmp(str1.data(),str2.data()); +} + +bool VhdlDocGen::getSigTypeName(QList<QCString>& ql, const char* str,QCString& buffer) +{ + QCString temp(str); + QStringList qlist=QStringList::split(" is ",temp,FALSE); + if (qlist.count()!=2) return FALSE; + temp.resize(0); + temp+=(QCString)qlist[0]+":"+(QCString)qlist[1]; + return VhdlDocGen::getSigName(ql,temp.data(),buffer); +} + +/*! + * divides a port input in its name,direction and type + * @param ql stores the input name(s) + * @param str input string + * @param buffer stores the input direction + * @returns FALSE if it is a port + */ + +bool VhdlDocGen::getSigName(QList<QCString>& ql, + const char* str,QCString& buffer) +{ + int len,j,ll,index; + char *signal = "signal "; + QCString qmem; + QCString temp(str); + QCString st(str); + + QRegExp semi(","); + QRegExp r(":"); + j = r.match(temp.data(),0,&len); + if (j < 0) return FALSE; // no input definition + st=st.left(j); + index=st.find(signal,0,FALSE); + if (index > -1) + { + qmem=st.remove(index,strlen(signal)); + temp=qmem; + st=qmem; + } + else + { + qmem=temp; + } + + ll=semi.match(st.data(),0,&len); + + if (ll>0) + { + while (TRUE) + { + st=st.left(ll); + QCString *sig =new QCString(st); + ql.insert(0,sig); + qmem=qmem.right(qmem.length()-ll-1); + st=qmem; + ll=semi.match(st.data(),0,&len); + if (ll<0) + { + ll = r.match(st.data(),0,&len); + st=st.left(ll); + ql.insert(0,new QCString(st)); + break; + } + } + } + else + { + st=st.left(j); + ql.insert(0,new QCString(st)); + } + QCString *qdir=new QCString(str); + st=qdir->mid(j+1); + //st=st.lower(); + st=st.stripWhiteSpace(); + *qdir=st; + + ql.insert(0,qdir); + if (st.stripPrefix("inout")) + { + buffer+="inout"; + return TRUE; + } + + if (st.stripPrefix("out")) + { + buffer+="out"; + return TRUE; + } + + if (st.stripPrefix("in")) + { + buffer+="in"; + return TRUE; + } + return FALSE; +} + +/*! + * divides a process string in its name and types + * @param text process text + * @param name points to the process name + * @param ql stores the process types + */ + +void VhdlDocGen::parseProcessProto(const char* text, + QCString& name,QStringList& ql) +{ + int index,end; + const char *s=":"; + QCString temp; + QCString s1(text); + index=s1.find(s,0,FALSE); + if (index >=0) + { + name=s1.left(index); + // strcpy(name,tt.data()); + } + + index=s1.find("(",0,FALSE); + end=s1.findRev(")",s1.length(),FALSE); + // end=s1.find(")",0,FALSE); + + if ((end-index)>1) + { + temp=s1.mid(index+1,(end-index-1)); + ql=QStringList::split(",",temp,FALSE); + } +}//parseProcessProto + +/*! + * strips the "--" prefixes of vhdl comments + */ +void VhdlDocGen::prepareComment(QCString& qcs) +{ + QCString temp; + const char* s="--!"; + //const char *start="--!{"; + //const char *end="--!}"; + int index=0; + +#if 0 + index=qcs.find(start,0,TRUE); + if (index>0) + temp=qcs.remove(index,strlen(start)); + qcs=temp; + + index=qcs.find(end,0,TRUE); + if (index>0) + temp=qcs.remove(index,strlen(end)); + qcs=temp; +#endif + while (TRUE) + { + index=qcs.find(s,0,TRUE); + if (index<0) break; + temp=qcs.remove(index,strlen(s)); + qcs=temp; + } + qcs=qcs.stripWhiteSpace(); +} + + +/*! + * parses a function proto + * @param text function string + * @param qlist stores the function types + * @param name points to the function name + * @param ret Stores the return type + * @param doc ??? + */ +void VhdlDocGen::parseFuncProto(const char* text,QList<Argument>& qlist, + QCString& name,QCString& ret,bool doc) +{ + int index,end; + QCString s1(text); + QCString temp; + + index=s1.find("("); + end=s1.findRev(")"); + + if ((end-index)>0) + { + QCString tt=s1.mid(index,(end-index+1)); + temp=s1.mid(index+1,(end-index-1)); + getFuncParams(qlist,temp); + } + if (doc) + { + name=s1.left(index); + name=name.stripWhiteSpace(); + if ((end-index)>0) + { + ret="function"; + } + return; + } + else + { + QCString s1(text); + s1=s1.stripWhiteSpace(); + int i=s1.find("(",0,FALSE); + int s=s1.find(" ",0,FALSE); + if (i==-1) + s1=VhdlDocGen::getIndexWord(s1.data(),1); + else + s1=s1.mid(s,(i-s)); + + name=s1.stripWhiteSpace(); + } + index=s1.findRev("return",-1,FALSE); + if (index !=-1) + { + ret=s1.mid(index+6,s1.length()); + ret=ret.stripWhiteSpace(); + VhdlDocGen::deleteCharRev(ret,';'); + } +} + +/* + * returns the n'th word of a string + */ + +QCString VhdlDocGen::getIndexWord(const char* c,int index) +{ + QStringList ql; + QCString temp(c); + QRegExp reg("[\\s]"); + + ql=QStringList::split(reg,temp,FALSE); + + if (ql.count() > (unsigned int)index) + { + return (QCString)ql[index]; + } + + return ""; +} + + +/*! + * \brief returns the arguments of a function or procedure prototype + * @param ql list ql stores the arguments + * @param str prototype + */ + +void VhdlDocGen::getFuncParams(QList<Argument>& ql, const char* str) +{ + + int len; + QCString qmem,s1,s2,ttype; + QCString temp(str); + temp=temp.stripWhiteSpace(); + if (temp.isEmpty()) return; + + QCString st(str); + QStringList strList; + + strList=QStringList::split(";",temp,FALSE); + int kk=strList.count(); + int j=kk; + while (kk>=1) + { + temp=strList[j-kk]; + QStringList tempList,tt; + tempList=QStringList::split(":",temp,FALSE); + if (tempList.count()>2) + ttype=tempList[1]; + else + ttype=tempList.last(); + + ttype=ttype.stripWhiteSpace(); + + uint zui=ttype.contains('(',FALSE); + if (zui == 0) + tt=QStringList::split(" ",ttype,FALSE); + else + { + if (ttype.stripPrefix("in")) + tt.append("in"); + else if (ttype.stripPrefix("out")) + tt.append("out"); + else if (ttype.stripPrefix("inout")) + tt.append("inout"); + if (ttype.stripPrefix("IN")) + tt.append("in"); + else if (ttype.stripPrefix("OUT")) + tt.append("out"); + else if (ttype.stripPrefix("INOUT")) + tt.append("inout"); + + ttype=ttype.stripWhiteSpace(); + tt.append(ttype); + } + + s1=tt.first(); + //s1=s1.lower(); + + if (tempList.count()>2) + s2=tt.last()+":"+tempList[2]; + else + s2=tt.last(); + + QCString first=(QCString)tempList.first(); + + tempList.clear(); + tt.clear(); + + tempList=QStringList::split(",",first,FALSE); + len=tempList.count(); + ttype.resize(0); + for (int j=0;j<len;j++) + { + Argument *arg=new Argument; + QCString name=(QCString)tempList[j]; + name=name.stripWhiteSpace(); + + tt=QStringList::split(" ",name,FALSE); + if (tt.count() > 1) + ttype=(tt.first()).stripWhiteSpace(); + + arg->defval=ttype.copy(); + arg->type=s2.stripWhiteSpace(); + arg->attrib=s1.stripWhiteSpace(); + arg->name=(tt.last()).stripWhiteSpace(); + + // printf("--proto \n [%s] [%s] [%s] [%s] [%s]",ttype.data(),arg->type.data(),arg->attrib.data(),arg->name.data(),s1.data()); + ql.append(arg); + } + kk--; + }//while +} // getFuncName + + +QCString VhdlDocGen::trTypeString(int type) +{ + switch(type) + { + case VhdlDocGen::LIBRARY: return "Library"; + case VhdlDocGen::ENTITY: return "Entity"; + case VhdlDocGen::PACKAGE_BODY: return "Package Body"; + case VhdlDocGen::ATTRIBUTE: return "Attribute"; + case VhdlDocGen::PACKAGE: return "Package"; + case VhdlDocGen::SIGNAL: return "Signal"; + case VhdlDocGen::COMPONENT: return "Component"; + case VhdlDocGen::CONSTANT: return "Constant"; + case VhdlDocGen::TYPE: return "Type"; + case VhdlDocGen::SUBTYPE: return "Subtype"; + case VhdlDocGen::FUNCTION: return "Function"; + case VhdlDocGen::RECORD: return "Record"; + case VhdlDocGen::PROCEDURE: return "Procedure"; + case VhdlDocGen::ARCHITECTURE: return "Architecture"; + case VhdlDocGen::USE: return "Package"; + case VhdlDocGen::PROCESS: return "Process"; + case VhdlDocGen::PORT: return "Port"; + case VhdlDocGen::GENERIC: return "Generic"; + case VhdlDocGen::DOCUMENT: return "Doc"; + case VhdlDocGen::UNITS: return "Units"; + case VhdlDocGen::PORTMAP: return "Port Map"; + default: return ""; + } +} // convertType + +/*! + * deletes a char backwards in a string + */ + +bool VhdlDocGen::deleteCharRev(QCString &s,char c) +{ + int index=s.findRev(c,-1,FALSE); + if (index > -1) + { + QString qcs=s.remove(index,1); + s=qcs; + return TRUE; + } + return FALSE; +} + +void VhdlDocGen::deleteAllChars(QCString &s,char c) +{ + int index=s.findRev(c,-1,FALSE); + while (index > -1) + { + QString qcs=s.remove(index,1); + s=qcs; + index=s.findRev(c,-1,FALSE); + } +} + + +static int recordCounter=0; + +/*! + * returns the next number of a record|unit member + */ + +QCString VhdlDocGen::getRecordNumber() +{ + char buf[12]; + sprintf(buf,"%d",recordCounter++); + QCString qcs(&buf[0]); + return qcs; +} + +/*! + * returns the next number of an anonymous process + */ + +QCString VhdlDocGen::getProcessNumber() +{ + static int stringCounter; + char buf[8]; + QCString qcs("PROCESS_"); + sprintf(buf,"%d",stringCounter++); + qcs.append(&buf[0]); + return qcs; +} + +/*! + * writes a colored and formatted string + */ + +void VhdlDocGen::writeFormatString(QCString& qcs,OutputList&ol,const MemberDef* mdef) +{ + QRegExp reg("[\\/\\:\\<\\>\\:\\s\\,\\;\\'\\+\\-\\*\\|\\&\\=\\(\\)\"]"); + qcs+=QCString(" ");// parsing the last sign + QCString *ss; + QCString find=qcs; + QCString temp=qcs; + char buf[2]; + buf[1]='\0'; + + int j; + int len; + j = reg.match(temp.data(),0,&len); + + ol.startBold(); + if (j>=0) + { + while (j>=0) + { + find=find.left(j); + buf[0]=temp[j]; + ss=VhdlDocGen::findKeyWord(find); + bool k=VhdlDocGen::isNumber(find); // is this a number + if (k) + { + VhdlDocGen::startFonts(find,"vhdldigit",ol); + } + else if (j != 0 && ss) + { + VhdlDocGen::startFonts(find,ss->data(),ol); + } + else + { + if (j>0) + { + VhdlDocGen::writeStringLink(mdef,find,ol); + } + } + VhdlDocGen::startFonts(&buf[0],"vhdlchar",ol); + + QCString st=temp.remove(0,j+1); + find=st; + temp=st; + j = reg.match(temp.data(),0,&len); + }//while + }//if + else + { + VhdlDocGen::startFonts(find,"vhdlchar",ol); + } + ol.endBold(); +}// writeFormatString + +/*! + * returns TRUE if this string is a number + */ + +bool VhdlDocGen::isNumber(const QCString& s) +{ + int len=s.length(); + if (len==0) return FALSE; + for (int j=0;j<len;j++) + { + if (isdigit((int)(s.at(j) & 0xff))==0) + return FALSE; + } + return TRUE; +}// isNumber + + +void VhdlDocGen::startFonts(const QCString& q, char *keyword,OutputList& ol) +{ + ol.startFontClass(keyword); + ol.docify(q.data()); + ol.endFontClass(); +} + +/*! + * inserts white spaces for better readings + * and writes a colored string to the output + */ + +void VhdlDocGen::formatString(QCString & qcs, OutputList& ol,const MemberDef* mdef) +{ + QCString temp(qcs.length()); + qcs.stripPrefix(":"); + qcs.stripPrefix("is"); + qcs.stripPrefix("IS"); + qcs.stripPrefix("of"); + qcs.stripPrefix("OF"); + + VhdlDocGen::deleteCharRev(qcs,';'); + //char white='\t'; + int len = qcs.length(); + unsigned int index=1;//temp.length(); + + for (int j=0;j<len;j++) + { + char c=qcs[j]; + char b=c; + if (j>0) b=qcs[j-1]; + if (c=='"' || c==',' || c==';' || c=='\''|| c=='(' || c==')' || c==':' ) // || (c==':' && b!='=')) // || (c=='=' && b!='>')) + { + if (temp.at(index-1) != ' ') + { + temp+=" "; + } + temp+=QCString(&c,1); + temp+=" "; + } + else if (c=='=') + { + if (b==':') // := operator + { + temp.replace(index-1,1,"="); + temp+=" "; + } + else // = operator + { + temp+=" "; + temp+=QCString(&c,1); + temp+=" "; + } + } + else + { + temp+=QCString(&c,1); + } + + index=temp.length(); + }// for + temp=temp.stripWhiteSpace(); + // printf("\n [%s]",qcs.data()); + VhdlDocGen::writeFormatString(temp,ol,mdef); +} + +/*! + * writes a procedure prototype to the output + */ + +void VhdlDocGen::writeProcedureProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef) +{ + ArgumentListIterator ali(*al); + Argument *arg; + bool sem=FALSE; + int len=al->count(); + ol.docify("( "); + if (len > 2) + { + ol.lineBreak(); + } + for (;(arg=ali.current());++ali) + { + ol.startBold(); + if (sem && len <3) + ol.writeChar(','); + + QCString nn=arg->name; + nn+=": "; + + QCString *str=VhdlDocGen::findKeyWord(arg->defval); + arg->defval+=" "; + if (str) + { + VhdlDocGen::startFonts(arg->defval,str->data(),ol); + } + else + { + VhdlDocGen::startFonts(arg->defval,"vhdlchar",ol); // write type (variable,constant etc.) + } + + VhdlDocGen::startFonts(nn,"vhdlchar",ol); // write name + if (stricmp(arg->attrib.data(),arg->type.data()) != 0) + VhdlDocGen::startFonts(arg->attrib.lower(),"stringliteral",ol); // write in|out + ol.docify(" "); + VhdlDocGen::formatString(arg->type,ol,mdef); + sem=TRUE; + ol.endBold(); + if (len > 2) + { + ol.lineBreak(); + ol.docify(" "); + } + }//for + + ol.docify(" )"); + + +}// writePorcedure + +/*! + * writes a function prototype to the output + */ + +void VhdlDocGen::writeFunctionProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef) +{ + if (al==0) return; + ArgumentListIterator ali(*al); + Argument *arg; + bool sem=FALSE; + int len=al->count(); + ol.startBold(); + ol.docify(" ( "); + ol.endBold(); + if (len>2) + { + ol.lineBreak(); + } + for (;(arg=ali.current());++ali) + { + ol.startBold(); + if (sem && len < 3) + { + ol.docify(" , "); + } + QCString att=arg->defval; + if (!att.isEmpty()) + { + QCString *str=VhdlDocGen::findKeyWord(att); + att+=" "; + if (str) + VhdlDocGen::formatString(att,ol,mdef); + else + VhdlDocGen::startFonts(att,"vhdlchar",ol); + } + + QCString nn=arg->name; + nn+=": "; + QCString ss=arg->type; //.lower(); + QCString w=ss;//.upper(); + VhdlDocGen::startFonts(nn,"vhdlchar",ol); + VhdlDocGen::startFonts("in ","stringliteral",ol); + QCString *str=VhdlDocGen::findKeyWord(ss); + if (str) + VhdlDocGen::formatString(w,ol,mdef); + else + VhdlDocGen::startFonts(w,"vhdlchar",ol); + + sem=TRUE; + ol.endBold(); + if (len > 2) + { + ol.lineBreak(); + } + } + ol.startBold(); + ol.docify(" )"); + ol.endBold(); +} + +/*! + * writes a process prototype to the output + */ + +void VhdlDocGen::writeProcessProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef) +{ + if (al==0) return; + ArgumentListIterator ali(*al); + Argument *arg; + bool sem=FALSE; + ol.startBold(); + ol.docify(" ( "); + for (;(arg=ali.current());++ali) + { + if (sem) + ol.docify(" , "); + QCString nn=arg->name; + // VhdlDocGen::startFonts(nn,"vhdlchar",ol); + VhdlDocGen::writeFormatString(nn,ol,mdef); + sem=TRUE; + } + ol.docify(" )"); + ol.endBold(); +} + + +/*! + * writes a function|procedure documentation to the output + */ + +void VhdlDocGen::writeFuncProcDocu( + const MemberDef *md, + OutputList& ol, + const ArgumentList* al, + bool /*type*/) +{ + if (al==0) return; + bool sem=FALSE; + ol.enableAll(); + + ArgumentListIterator ali(*al); + int index=ali.count(); + if (index==0){ + ol.docify(" ( ) "); + return; + } + ol.startParameterList(TRUE); + Argument *arg; + bool first=TRUE; + for (;(arg=ali.current());++ali) + { + ol.startParameterType(first,""); + if (!VhdlDocGen::isProcess(md)) + { + if (TRUE) //VhdlDocGen::isProcedure(md)) + { + startFonts(arg->defval,"keywordtype",ol); + ol.docify(" "); + } + // linkifyText(TextGeneratorOLImpl(ol),md->getClassDef(),md->getBodyDef(),md->name(),arg->type); + VhdlDocGen::writeFormatString(arg->name,ol,md); + ol.docify(" "); + + if (VhdlDocGen::isProcedure(md)) + startFonts(arg->attrib,"stringliteral",ol); + else + startFonts(QCString("in"),"stringliteral",ol); + } + ol.docify(" "); + ol.disable(OutputGenerator::Man); + ol.startEmphasis(); + ol.enable(OutputGenerator::Man); + if (!VhdlDocGen::isProcess(md)) + startFonts(arg->type,"vhdlkeyword",ol); + else + startFonts(arg->name,"vhdlkeyword",ol); + ol.disable(OutputGenerator::Man); + ol.endEmphasis(); + ol.enable(OutputGenerator::Man); + + if (--index) + ol.docify(" , "); + else + ol.docify(" ) "); + + ol.endParameterName(FALSE,FALSE,FALSE); + + sem=TRUE; + first=FALSE; + } + +} // writeDocFunProc + +/*! + * returns TRUE if this string is a function prototype or + * FALSE if this is a procedure + */ + +bool VhdlDocGen::isFunctionProto(QCString& ss) +{ + QCString name=ss; + QCString proc("procedure"); + QCString func("function"); + name=name.stripWhiteSpace(); + QStringList ql=QStringList::split(" ",name,FALSE); + int j=ql.count(); + if (j<2) return FALSE; + QCString tt=(QCString)ql[0]; + + if (VhdlDocGen::compareString(tt,proc)!=0 && VhdlDocGen::compareString(tt,func)!=0) + return FALSE; + + QCString temp=(QCString)ql[j-1]; + temp=temp.stripWhiteSpace(); + if (stricmp(temp.data(),"is")==0) + { + VhdlDocGen::deleteCharRev(name,'s'); + VhdlDocGen::deleteCharRev(name,'i'); + ss=name; + return TRUE; + } + return FALSE; +} + +QCString VhdlDocGen::convertArgumentListToString(const ArgumentList* al,bool func) +{ + QCString argString; + bool sem=FALSE; + ArgumentListIterator ali(*al); + Argument *arg; + + for (;(arg=ali.current());++ali) + { + if (sem) argString.append(", "); + if (func) + { + argString+=arg->name; + argString+=":"; + argString+=arg->type; + } + else + { + argString+=arg->defval+" "; + argString+=arg->name+" :"; + argString+=arg->attrib+" "; + argString+=arg->type; + } + sem=TRUE; + } + return argString; +} + + +void VhdlDocGen::writeVhdlDeclarations(MemberList* ml, + OutputList& ol,GroupDef* gd,ClassDef* cd) +{ + static ClassDef *cdef; + static GroupDef* gdef; + if (cd && cdef!=cd) + { // only one inline link + VhdlDocGen::writeInlineClassLink(cd,ol); + cdef=cd; + } + + if (gd && gdef==gd) return; + if (gd && gdef!=gd) + { + gdef=gd; + } + + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::LIBRARY,FALSE),0,FALSE,VhdlDocGen::LIBRARY); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::USE,FALSE),0,FALSE,VhdlDocGen::USE); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::FUNCTION,FALSE),0,FALSE,VhdlDocGen::FUNCTION); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::COMPONENT,FALSE),0,FALSE,VhdlDocGen::COMPONENT); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::CONSTANT,FALSE),0,FALSE,VhdlDocGen::CONSTANT); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::TYPE,FALSE),0,FALSE,VhdlDocGen::TYPE); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::SUBTYPE,FALSE),0,FALSE,VhdlDocGen::SUBTYPE); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::GENERIC,FALSE),0,FALSE,VhdlDocGen::GENERIC); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::PORT,FALSE),0,FALSE,VhdlDocGen::PORT); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::PROCESS,FALSE),0,FALSE,VhdlDocGen::PROCESS); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::SIGNAL,FALSE),0,FALSE,VhdlDocGen::SIGNAL); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::ATTRIBUTE,FALSE),0,FALSE,VhdlDocGen::ATTRIBUTE); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::PROCEDURE,FALSE),0,FALSE,VhdlDocGen::PROCEDURE); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::RECORD,FALSE),0,FALSE,VhdlDocGen::RECORD); + VhdlDocGen::writeVHDLDeclarations(ml,ol,cd,0,0,gd,theTranslator_vhdlType(VhdlDocGen::UNITS,FALSE),0,FALSE,VhdlDocGen::UNITS); + + +} + +/* writes a vhdl type documentation */ +void VhdlDocGen::writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition *d, OutputList &ol) +{ + ClassDef *cd=(ClassDef*)d; + if (cd==0) return; + if ((VhdlDocGen::isVhdlFunction(mdef) || VhdlDocGen::isProcedure(mdef) || VhdlDocGen::isProcess(mdef))) + { + QCString nn=mdef->typeString(); + nn=nn.stripWhiteSpace(); + QCString na=cd->name(); + MemberDef* memdef=VhdlDocGen::findMember(na,nn); + if (memdef && memdef->isLinkable()) + { + ol.startBold(); + ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,mdef->typeString()); + ol.endBold(); + ol.docify(" "); + } + else + { + QCString ttype=mdef->typeString(); + VhdlDocGen::formatString(ttype,ol,mdef); + } + ol.docify(mdef->name()); + VhdlDocGen::writeFuncProcDocu(mdef,ol, mdef->argumentList().pointer()); + } + + if (mdef->isVariable()) + { + ol.docify(mdef->name().data()); + ol.docify(" "); + QCString ttype=mdef->typeString(); + VhdlDocGen::formatString(ttype,ol,mdef); + ol.docify(" "); + if (VhdlDocGen::isPort(mdef)) + { + QCString largs=mdef->argsString(); + VhdlDocGen::formatString(largs,ol,mdef); + ol.docify(" "); + } + } +} + +/* writes a vhdl type declaration */ + +void VhdlDocGen::writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, + bool /*inGroup*/) +{ + + LockingPtr<MemberDef> lock(mdef,mdef); + + Definition *d=0; + ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something + if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; + + // write tag file information of this member + if (!Config_getString("GENERATE_TAGFILE").isEmpty()) + { + Doxygen::tagFile << " <member kind=\""; + if (VhdlDocGen::isGeneric(mdef)) Doxygen::tagFile << "generic"; + if (VhdlDocGen::isPort(mdef)) Doxygen::tagFile << "port"; + if (VhdlDocGen::isEntity(mdef)) Doxygen::tagFile << "entity"; + if (VhdlDocGen::isComponent(mdef)) Doxygen::tagFile << "component"; + if (VhdlDocGen::isVType(mdef)) Doxygen::tagFile << "type"; + if (VhdlDocGen::isConstant(mdef)) Doxygen::tagFile << "constant"; + if (VhdlDocGen::isSubType(mdef)) Doxygen::tagFile << "subtype"; + if (VhdlDocGen::isVhdlFunction(mdef)) Doxygen::tagFile << "function"; + if (VhdlDocGen::isProcedure(mdef)) Doxygen::tagFile << "procedure"; + if (VhdlDocGen::isProcess(mdef)) Doxygen::tagFile << "process"; + if (VhdlDocGen::isSignals(mdef)) Doxygen::tagFile << "signal"; + if (VhdlDocGen::isAttribute(mdef)) Doxygen::tagFile << "attribute"; + if (VhdlDocGen::isRecord(mdef)) Doxygen::tagFile << "record"; + if (VhdlDocGen::isLibrary(mdef)) Doxygen::tagFile << "library"; + if (VhdlDocGen::isPackage(mdef)) Doxygen::tagFile << "package"; + + Doxygen::tagFile << "\">" << endl; + Doxygen::tagFile << " <type>" << convertToXML(mdef->typeString()) << "</type>" << endl; + Doxygen::tagFile << " <name>" << convertToXML(mdef->name()) << "</name>" << endl; + Doxygen::tagFile << " <anchorfile>" << convertToXML(mdef->getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl; + Doxygen::tagFile << " <anchor>" << convertToXML(mdef->anchor()) << "</anchor>" << endl; + + if (VhdlDocGen::isVhdlFunction(mdef)) + Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),TRUE)) << "</arglist>" << endl; + else if (VhdlDocGen::isProcedure(mdef)) + Doxygen::tagFile << " <arglist>" << convertToXML(VhdlDocGen::convertArgumentListToString(mdef->argumentList().pointer(),FALSE)) << "</arglist>" << endl; + else + Doxygen::tagFile << " <arglist>" << convertToXML(mdef->argsString()) << "</arglist>" << endl; + + mdef->writeDocAnchorsToTagFile(); + Doxygen::tagFile << " </member>" << endl; + + } + + // write search index info + if (Config_getBool("SEARCHENGINE")) + { + Doxygen::searchIndex->setCurrentDoc(mdef->qualifiedName(),mdef->getOutputFileBase(),mdef->anchor()); + Doxygen::searchIndex->addWord(mdef->localName(),TRUE); + Doxygen::searchIndex->addWord(mdef->qualifiedName(),FALSE); + } + + QCString cname = d->name(); + QCString cfname = mdef->getOutputFileBase(); + + //HtmlHelp *htmlHelp=0; + // bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP"); + // if (hasHtmlHelp) htmlHelp = HtmlHelp::getInstance(); + + // search for the last anonymous scope in the member type + ClassDef *annoClassDef=mdef->getClassDefOfAnonymousType(); + + // start a new member declaration + bool isAnonymous = annoClassDef; // || m_impl->annMemb || m_impl->annEnumType; + ///printf("startMemberItem for %s\n",name().data()); + ol.startMemberItem( isAnonymous ); //? 1 : m_impl->tArgList ? 3 : 0); + + // If there is no detailed description we need to write the anchor here. + bool detailsVisible = mdef->isDetailedSectionLinkable(); + if (!detailsVisible) // && !m_impl->annMemb) + { + QCString doxyName=mdef->name().copy(); + if (!cname.isEmpty()) doxyName.prepend(cname+"::"); + QCString doxyArgs=mdef->argsString(); + ol.startDoxyAnchor(cfname,cname,mdef->anchor(),doxyName,doxyArgs); + + ol.pushGeneratorState(); + ol.disable(OutputGenerator::Man); + ol.disable(OutputGenerator::Latex); + ol.docify("\n"); + ol.popGeneratorState(); + + } + // *** write type + /*VHDL CHANGE */ + QCString ltype(mdef->typeString()); + QCString largs(mdef->argsString()); + int mm=mdef->getMemberSpecifiers(); + //printf(":: ltype=%s largs=%s name=%s mm=%d\n", + // ltype.data(),largs.data(),mdef->name().data(),mm); + + ClassDef *kl=0; + //FileDef *fdd=0; + LockingPtr<ArgumentList> alp = mdef->argumentList(); + QCString nn; + if (gd) gd=0; + switch(mm) + { + case VhdlDocGen::PROCEDURE: + case VhdlDocGen::FUNCTION: + ol.startBold(); + VhdlDocGen::formatString(ltype,ol,mdef); + ol.endBold(); + ol.insertMemberAlign(); + writeLink(mdef,ol); + if (alp!=0 && mm==VhdlDocGen::FUNCTION) + VhdlDocGen::writeFunctionProto(ol,alp.pointer(),mdef); + + if (alp!=0 && mm==VhdlDocGen::PROCEDURE) + VhdlDocGen::writeProcedureProto(ol,alp.pointer(),mdef); + + break; + case VhdlDocGen::GENERIC: + case VhdlDocGen::PORT: + writeLink(mdef,ol); + ol.insertMemberAlign(); + if (mm==VhdlDocGen::GENERIC) + { + ol.startBold(); + ol.docify(" "); + VhdlDocGen::formatString(ltype,ol,mdef); + ol.endBold(); + } + else + { + ol.docify(" "); + ol.startBold(); + ol.docify(mdef->typeString()); + ol.endBold(); + ol.docify(" "); + VhdlDocGen::formatString(largs,ol,mdef); + } + break; + case VhdlDocGen::PROCESS: + writeLink(mdef,ol); + ol.insertMemberAlign(); + VhdlDocGen::writeProcessProto(ol,alp.pointer(),mdef); + break; + case VhdlDocGen::PACKAGE: + case VhdlDocGen::ENTITY: + case VhdlDocGen::COMPONENT: + writeLink(mdef,ol); + ol.insertMemberAlign(); + ol.docify(ltype); + ol.docify(" "); + if (VhdlDocGen::isComponent(mdef)) + { + nn=mdef->name(); + kl=getClass(nn.data()); + if (kl) + { + nn=kl->getOutputFileBase(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.docify(" "); + QCString name=theTranslator_vhdlType(VhdlDocGen::ENTITY,TRUE); + ol.startBold(); + ol.docify(name.data()); + ol.endBold(); + ol.startEmphasis(); + name.resize(0); + name+=" <"+mdef->name()+"> "; + ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data()); + ol.endEmphasis(); + ol.popGeneratorState(); + } + } + break; + case VhdlDocGen::USE: + kl=VhdlDocGen::getClass(mdef->name()); + if (kl && ((VhdlDocGen::VhdlClasses)kl->protection()==VhdlDocGen::ENTITYCLASS)) break; + writeLink(mdef,ol); + ol.insertMemberAlign(); + ol.docify(" "); + + if (kl) + { + nn=kl->getOutputFileBase(); + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + ol.docify(" "); + QCString name=theTranslator_vhdlType(VhdlDocGen::PACKAGE,TRUE); + ol.startBold(); + ol.docify(name.data()); + name.resize(0); + ol.endBold(); + name+=" <"+mdef->name()+">"; + ol.startEmphasis(); + ol.writeObjectLink(kl->getReference(),kl->getOutputFileBase(),0,name.data()); + ol.popGeneratorState(); + } + break; + case VhdlDocGen::LIBRARY: + writeLink(mdef,ol); + ol.insertMemberAlign(); + break; + case VhdlDocGen::SIGNAL: + case VhdlDocGen::ATTRIBUTE: + case VhdlDocGen::TYPE: + case VhdlDocGen::SUBTYPE: + case VhdlDocGen::CONSTANT: + writeLink(mdef,ol); + ol.docify(" "); + ol.insertMemberAlign(); + VhdlDocGen::formatString(ltype,ol,mdef); + break; + case VhdlDocGen::RECORD: + writeLink(mdef,ol); + ol.startBold(); + if (ltype.isEmpty()) ol.docify(" : record"); + ol.insertMemberAlign(); + if (!ltype.isEmpty()) + VhdlDocGen::formatString(ltype,ol,mdef); + ol.endBold(); + break; + case VhdlDocGen::UNITS: + ol.startBold(); + writeLink(mdef,ol); + if (ltype.isEmpty()) ol.docify(" : unit"); + ol.insertMemberAlign(); + if (!ltype.isEmpty()) + VhdlDocGen::formatString(ltype,ol,mdef); + ol.endBold(); + break; + default: break; + } + + bool htmlOn = ol.isEnabled(OutputGenerator::Html); + if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty()) + { + ol.disable(OutputGenerator::Html); + } + if (!ltype.isEmpty()) ol.docify(" "); + + if (htmlOn) + { + ol.enable(OutputGenerator::Html); + } + + if (!detailsVisible)// && !m_impl->annMemb) + { + ol.endDoxyAnchor(cfname,mdef->anchor()); + } + + //printf("endMember %s annoClassDef=%p annEnumType=%p\n", + // name().data(),annoClassDef,annEnumType); + ol.endMemberItem(); + if (!mdef->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC") /* && !annMemb */) + { + ol.startMemberDescription(); + ol.parseDoc(mdef->briefFile(),mdef->briefLine(),mdef->getOuterScope()?mdef->getOuterScope():d,mdef,mdef->briefDescription(),TRUE,FALSE); + if (detailsVisible) + { + ol.pushGeneratorState(); + ol.disableAllBut(OutputGenerator::Html); + //ol.endEmphasis(); + ol.docify(" "); + if (mdef->getGroupDef()!=0 && gd==0) // forward link to the group + { + ol.startTextLink(mdef->getOutputFileBase(),mdef->anchor()); + } + else // local link + { + ol.startTextLink(0,mdef->anchor()); + } + ol.endTextLink(); + //ol.startEmphasis(); + ol.popGeneratorState(); + } + //ol.newParagraph(); + ol.endMemberDescription(); + } + mdef->warnIfUndocumented(); + +}// 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) +{ + + SDict<QCString> pack(1009); + + ol.pushGeneratorState(); + + bool first=TRUE; + MemberDef *md; + MemberListIterator mli(*mlist); + for ( ; (md=mli.current()); ++mli ) + { + int mems=md->getMemberSpecifiers(); + if (md->isBriefSectionVisible() && (mems==specifier) && (mems!=VhdlDocGen::LIBRARY) ) + { + if (first) {ol.startMemberList();first=FALSE;} + VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE); + } //if + else if (md->isBriefSectionVisible() && (mems==specifier)) + { + if (!pack.find(md->name().data())) + { + if (first) ol.startMemberList(),first=FALSE; + VhdlDocGen::writeVHDLDeclaration(md,ol,cd,nd,fd,gd,FALSE); + pack.append(md->name().data(),new QCString(md->name().data())); + } + } //if + } //for + if (!first) ol.endMemberList(); + pack.clear(); +}//plainDeclaration + +static bool membersHaveSpecificType(MemberList *ml,int type) +{ + if (ml==0) return FALSE; + MemberDef *mdd=0; + MemberListIterator mmli(*ml); + for ( ; (mdd=mmli.current()); ++mmli ) + { + if (mdd->getMemberSpecifiers()==type) //is type in class + { + return TRUE; + } + } + if (ml->getMemberGroupList()) + { + MemberGroupListIterator mgli(*ml->getMemberGroupList()); + MemberGroup *mg; + while ((mg=mgli.current())) + { + if (mg->members()) + { + if (membersHaveSpecificType(mg->members(),type)) return TRUE; + } + ++mgli; + } + } + return FALSE; +} + +void VhdlDocGen::writeVHDLDeclarations(MemberList* ml,OutputList &ol, + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, + const char *title,const char *subtitle,bool /*showEnumValues*/,int type) +{ + + if (!membersHaveSpecificType(ml,type)) return; + + if (title) + { + ol.startMemberHeader(); + ol.parseText(title); + ol.endMemberHeader(); + ol.docify(" "); + } + if (subtitle && subtitle[0]!=0) + { + ol.startMemberSubtitle(); + ol.parseDoc("[generated]",-1,0,0,subtitle,FALSE,FALSE); + ol.endMemberSubtitle(); + } //printf("memberGroupList=%p\n",memberGroupList); + + VhdlDocGen::writePlainVHDLDeclarations(ml,ol,cd,nd,fd,gd,type); + + if (ml->getMemberGroupList()) + { + MemberGroupListIterator mgli(*ml->getMemberGroupList()); + MemberGroup *mg; + while ((mg=mgli.current())) + { + if (membersHaveSpecificType(mg->members(),type)) + { + //printf("mg->header=%s\n",mg->header().data()); + bool hasHeader=mg->header()!="[NOHEADER]"; + ol.startMemberGroupHeader(hasHeader); + if (hasHeader) + { + ol.parseText(mg->header()); + } + ol.endMemberGroupHeader(); + if (!mg->documentation().isEmpty()) + { + //printf("Member group has docs!\n"); + ol.startMemberGroupDocs(); + ol.parseDoc("[generated]",-1,0,0,mg->documentation()+"\n",FALSE,FALSE); + ol.endMemberGroupDocs(); + } + ol.startMemberGroup(); + //printf("--- mg->writePlainDeclarations ---\n"); + VhdlDocGen::writePlainVHDLDeclarations(mg->members(),ol,cd,nd,fd,gd,type); + ol.endMemberGroup(hasHeader); + } + ++mgli; + } + } +}// writeVHDLDeclarations + +/* strips the prefix for record and unit members*/ +void VhdlDocGen::adjustRecordMember(MemberDef *mdef) +{ //,OutputList & ol) { + QRegExp regg("[_a-zA-Z]"); + QCString nn=mdef->name(); + int j=nn.find(regg,0); + if (j>0) + { + nn=nn.mid(j,nn.length()); + mdef->setName(nn.data()); + } +}//adjustRecordMember + +/* strips the prefix for package and package body */ + +bool VhdlDocGen::writeClassType( ClassDef *& cd, + OutputList &ol ,QCString & cname) +{ + //static ClassDef *prev = 0; + //if (prev == cd) return TRUE; + //if (cd != prev) prev=cd; + + int id=cd->protection(); + QCString qcs = VhdlDocGen::trTypeString(id+2); + cname=VhdlDocGen::getClassName(cd); + ol.startBold(); + ol.writeString(qcs.data()); + ol.writeString(" "); + ol.endBold(); + //ol.insertMemberAlign(); + return FALSE; +}// writeClassLink + +QCString VhdlDocGen::trVhdlType(int type,bool sing) +{ + switch(type) + { + case VhdlDocGen::LIBRARY: + if (sing) return "Library"; + else return "Libraries"; + case VhdlDocGen::PACKAGE: + if (sing) return "Package"; + else return "Packages"; + case VhdlDocGen::SIGNAL: + if (sing) return "Signal"; + else return "Signals"; + case VhdlDocGen::COMPONENT: + if (sing) return "Component"; + else return "Components"; + case VhdlDocGen::CONSTANT: + if (sing) return "Constant"; + else return "Constants"; + case VhdlDocGen::ENTITY: + if (sing) return "Entity"; + else return "Entities"; + case VhdlDocGen::TYPE: + if (sing) return "Type"; + else return "Types"; + case VhdlDocGen::SUBTYPE: + if (sing) return "Subtype"; + else return "Subtypes"; + case VhdlDocGen::FUNCTION: + if (sing) return "Function"; + else return "Functions"; + case VhdlDocGen::RECORD: + if (sing) return "Record"; + else return "Records"; + case VhdlDocGen::PROCEDURE: + if (sing) return "Procedure"; + else return "Procedures"; + case VhdlDocGen::ARCHITECTURE: + if (sing) return "Architecture"; + else return "Architectures"; + case VhdlDocGen::ATTRIBUTE: + if (sing) return "Attribute"; + else return "Attributes"; + case VhdlDocGen::PROCESS: + if (sing) return "Process"; + else return "Processes"; + case VhdlDocGen::PORT: + if (sing) return "Port"; + else return "Ports"; + case VhdlDocGen::USE: + if (sing) return "Package"; + else return "Packages"; + case VhdlDocGen::GENERIC: + if (sing) return "Generic"; + else return "Generics"; + case VhdlDocGen::PACKAGE_BODY: + return "Package Body"; + case VhdlDocGen::DOCUMENT: + return "Doc"; + case VhdlDocGen::UNITS: + return "Units"; + default: + return "Class"; + } +} + +QCString VhdlDocGen::trDesignUnitHierarchy() +{ + return "Design Unit Hierarchy"; +} + +QCString VhdlDocGen::trDesignUnitList() +{ + return "Design Unit List"; +} + +QCString VhdlDocGen::trDesignUnitMembers() +{ + return "Design Unit Members"; +} + +QCString VhdlDocGen::trDesignUnitListDescription() +{ + return "Here is a list of all design unit members with links to " + "the Entities and Packages they belong to:"; +} + +QCString VhdlDocGen::trDesignUnitIndex() +{ + return "Design Unit Index"; +} + +QCString VhdlDocGen::trDesignUnits() +{ + return "Design Units"; +} + +QCString VhdlDocGen::trFunctionAndProc() +{ + return "Functions/Procedures/Processes"; +} + + + +/*! adds documentation to a function/procedure */ +bool VhdlDocGen::writeDoc(EntryNav* rootNav) +{ + Entry *e=rootNav->entry(); + //if (e->section==Entry::Entry::OVERLOADDOC_SEC) + if (stricmp(e->type.data(),"function")==0) + { + VhdlDocGen::addFuncDoc(rootNav); + } + + return FALSE; +}// writeDoc + + +/* do not insert the same component twice */ + +bool VhdlDocGen::foundInsertedComponent(const QCString & name,Entry* root) +{ + QListIterator<BaseInfo> bii(*root->extends); + BaseInfo *bi=0; + for (bii.toFirst();(bi=bii.current());++bii) + { + if (bi->name==name) + { + return TRUE; // + } + } + + return FALSE; +}// found component + +/*! writes a link if the string is linkable else a formatted string */ + +void VhdlDocGen::writeStringLink(const MemberDef *mdef,QCString mem, OutputList& ol) +{ + if (mdef) + { + ClassDef *cd=mdef->getClassDef(); + if (cd) + { + QCString n=cd->name(); + MemberDef* memdef=VhdlDocGen::findMember(n,mem); + if (memdef && memdef->isLinkable()) + { + ol.startBold(); + writeLink(memdef,ol); + ol.endBold(); + ol.docify(" "); + return; + } + } + } + VhdlDocGen::startFonts(mem,"vhdlchar",ol); +}// found component + diff --git a/src/vhdldocgen.h b/src/vhdldocgen.h new file mode 100644 index 0000000..e33f01c --- /dev/null +++ b/src/vhdldocgen.h @@ -0,0 +1,256 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef VHDLDOCGEN_H +#define VHDLDOCGEN_H + +/** + * This class implements functions for parsing and generating + * vhdl documents + */ + +#include <qdict.h> +#include <qcstring.h> + +#include "memberlist.h" + +class QStringList; +class Entry; +class ClassSDict; +class FileStorage; +class EntryNav; +class ClassDef; +class MemberDef; + +class VhdlDocGen +{ + public: + + enum VhdlClasses // Overlays: Protection + { + ENTITYCLASS, // Overlays: Public + PACKBODYCLASS, // Overlays: Protected + ARCHITECTURECLASS, // Overlays: Private + PACKAGECLASS // Overlays: Package + }; + enum VhdlKeyWords + { + LIBRARY=1, + ENTITY, + PACKAGE_BODY, + ARCHITECTURE, + PACKAGE, + ATTRIBUTE, + SIGNAL, + COMPONENT, + CONSTANT, + TYPE, + SUBTYPE, + FUNCTION, + RECORD, + PROCEDURE, + USE, + PROCESS, + PORT, + DOCUMENT, //18 0x12 + UNITS, + GENERIC, + PORTMAP + }; + + VhdlDocGen(); + virtual ~VhdlDocGen(); + static void init(); + + // --- used by vhdlscanner.l ----------- + static Entry* getEntryAtLine(const Entry* e,int line); + static QCString getIndexWord(const char* ,int index); + static bool foundInsertedComponent(const QCString& name,Entry* root); + static bool deleteCharRev(QCString &s,char c); + static bool isFunctionProto(QCString& ss); + static Entry* findFunction(Entry* func); + static void deleteAllChars(QCString &s,char c); + static bool getSigName(QList<QCString>& ql, + const char* str, + QCString& buffer); + static bool getSigTypeName(QList<QCString>& ql, + const char* str, + QCString& buffer); + static void parseFuncProto(const char* text, + QList<Argument>& , + QCString& name, + QCString& ret, + bool doc=false); + // ----------------------------------- + + static void debugClassName(ClassSDict*); + //static void MergeFuncDoc(Entry* p,Entry* root); + + static void computeVhdlComponentRelations(const QDict<EntryNav>&,FileStorage*); + + //static void addVariableToComponents(EntryNav *rootNav,ClassDef *cd, MemberDef::MemberType mtype, const QCString &name, bool fromAnnScope,MemberDef *fromAnnMemb,Protection prot,bool related); + + static QCString* findKeyWord(const QCString& word); + static void addFuncDoc(EntryNav* root); + + //static void MapArchitecturesToEntity(Entry* cur_root); + + //static void MapComponentToEntity(const ClassSDict*); + + static ClassDef* findComponent(int type); + static ClassDef* getPackageName(const QCString& name); + static MemberDef* findMember(const QCString& className, + const QCString& memName); + static void findAllPackages(const QCString& className, + QDict<QCString>&); + static MemberDef* findMemberDef(ClassDef* cd, + const QCString& key, + MemberList::ListType type); + static ClassDef *getClass(const char *name); + static Entry* findFunction(Entry* root,Entry* func); + static MemberDef* findFunction(const QList<Argument> &ql, + const QCString& name, + const QCString& package, bool type); + static bool compareString(const QCString& s1, + const QCString& s2); + static QCString getClassTitle(const ClassDef*); + static void writeInlineClassLink(const ClassDef*, + OutputList &ol); + + //static void writeVhdlComponentList(OutputList &ol,int type); + + static bool isLibrary(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::LIBRARY; } + static bool isGeneric(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::GENERIC; } + static bool isPort(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::PORT; } + static bool isComponent(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::COMPONENT; } + static bool isPackage(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::USE; } + static bool isEntity(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::ENTITY; } + static bool isConstant(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::CONSTANT; } + static bool isVType(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::TYPE; } + static bool isSubType(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::SUBTYPE; } + static bool isVhdlFunction(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::FUNCTION; } + static bool isProcess(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::PROCESS; } + static bool isSignal(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; } + static bool isAttribute(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::ATTRIBUTE; } + static bool isSignals(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::SIGNAL; } + static bool isProcedure(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::PROCEDURE; } + static bool isRecord(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::RECORD; } + static bool isArchitecture(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::ARCHITECTURE; } + static bool isUnit(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::UNITS; } + static bool isPackageBody(const MemberDef *mdef) + { return mdef->getMemberSpecifiers()==VhdlDocGen::PACKAGE_BODY; } + + //----------------------------------------------------- + // translatable items + + static QCString trTypeString(int type); + static QCString trVhdlType(int type,bool sing=true); + + // trClassHierarchy. + static QCString trDesignUnitHierarchy(); + + // trCompoundList + static QCString trDesignUnitList(); + + // trCompoundMembers. + static QCString trDesignUnitMembers(); + + // trCompoundListDescription + static QCString trDesignUnitListDescription(); + + // trCompounds + static QCString trDesignUnits(); + + // trCompoundIndex + static QCString trDesignUnitIndex(); + + // trFunctions + static QCString trFunctionAndProc(); + + + //----------------------------------------------------- + + static void prepareComment(QCString&); + static QCString getpackname(const char* text, + const char* word, + const char* patter); + static void parseProcessProto(const char* text, + QCString&, + QStringList&); + static void formatString(QCString&,OutputList& ol,const MemberDef*); + + static void writeFormatString(QCString&,OutputList& ol,const MemberDef*); + static void writeFunctionProto(OutputList& ol,const ArgumentList *al,const MemberDef*); + static void writeProcessProto(OutputList& ol,const ArgumentList *al,const MemberDef*); + static void writeProcedureProto(OutputList& ol, const ArgumentList *al,const MemberDef*); + static void writeFuncProcDocu(const MemberDef *mdef, OutputList& ol,const ArgumentList* al,bool type=false); + static void writeRecordProto(const MemberDef *mdef, OutputList& ol,const ArgumentList *al); + + static QCString convertArgumentListToString(const ArgumentList* al,bool f); + static QCString getProcessNumber(); + static QCString getRecordNumber(); + + static void writeVHDLTypeDocumentation(const MemberDef* mdef, const Definition* d, OutputList &ol); + + static void writeVhdlDeclarations(MemberList*,OutputList&,GroupDef*,ClassDef*); + + static void writeVHDLDeclaration(MemberDef* mdef,OutputList &ol, + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, + bool inGroup); + + static void writePlainVHDLDeclarations(MemberList* ml,OutputList &ol, + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,int specifier); + + static void writeVHDLDeclarations(MemberList* ml,OutputList &ol, + ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, + const char *title,const char *subtitle,bool showEnumValues,int type); + + static QCString getClassName(const ClassDef*); + static bool writeClassType(ClassDef *&,OutputList &ol ,QCString & cname); + static void adjustRecordMember(MemberDef *mdef); + static bool writeDoc(EntryNav* rootNav); + + private: + static void getFuncParams(QList<Argument>&, const char* str); + static bool isNumber(const QCString& s); + static void startFonts(const QCString& q, char *keyword,OutputList& ol); + static bool compareArgList(ArgumentList*,ArgumentList*); + static void writeVhdlLink(const ClassDef* cdd ,OutputList& ol,QCString& type,QCString& name,QCString& beh); + static void findAllArchitectures(QList<QCString>& ql,const ClassDef *cd); + static void writeLink(const MemberDef* mdef,OutputList &ol); + static void writeStringLink(const MemberDef *mdef,QCString mem,OutputList& ol); +}; + +#endif diff --git a/src/vhdlscanner.h b/src/vhdlscanner.h new file mode 100644 index 0000000..ccb4bdd --- /dev/null +++ b/src/vhdlscanner.h @@ -0,0 +1,89 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef VHDLSCANNER_H +#define VHDLSCANNER_H + +#include "parserintf.h" +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <ctype.h> + +#include <qarray.h> +#include <unistd.h> +#include <qfile.h> +#include <qdict.h> + +#include "entry.h" +#include "memberlist.h" + +#if 0 +#include "qcstring.h" +#include "qlist.h" +#include "qstringlist.h" +#include "filedef.h" +#include "classlist.h" +#include "classdef.h" +#include "translator.h" +#include "qregexp.h" +#include "outputlist.h" +#include "membername.h" +#include "memberdef.h" +#include "memberlist.h" +#endif + +class Entry; +class ClassSDict; +class FileStorage; +class ClassDef; +class MemberDef; +class QStringList; + + +/** \brief VHDL parser using state-based lexical scanning. + * + * This is the VHDL language parser for doxygen. + */ +class VHDLLanguageScanner : public ParserInterface +{ + public: + virtual ~VHDLLanguageScanner() {} + void parseInput(const char * fileName, + const char *fileBuf, + Entry *root); + bool needsPreprocessing(const QCString &extension); + void parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + bool isExampleBlock, + const char *exampleName=0, + FileDef *fileDef=0, + int startLine=-1, + int endLine=-1, + bool inlineFragment=FALSE, + MemberDef *memberDef=0 + ); + void resetCodeParserState(); + void parsePrototype(const char *text); +}; + +void vhdlscanFreeScanner(); + +//--------------------------------------------------------------------------------- + +#endif diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l new file mode 100644 index 0000000..54a75a6 --- /dev/null +++ b/src/vhdlscanner.l @@ -0,0 +1,1746 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2008 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ +/****************************************************************************** + * Parser for VHDL subset + * written by M. Kreis + * supports VHDL-87 + * does not support all keywords of VHDL '93 (impure function/shared variables ..) + * and VHDL-AMS + ******************************************************************************/ +%{ + +// global includes +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <string.h> +#include <qcstring.h> +#include <qfileinfo.h> +#include <qstringlist.h> + +/* --------------------------------------------------------------- */ + +// local includes +#include "vhdlscanner.h" +#include "vhdlcode.h" +#include "vhdldocgen.h" +#include "message.h" +#include "config.h" +#include "doxygen.h" +#include "util.h" +#include "language.h" +#include "commentscan.h" +#include "index.h" +#include "definition.h" +#include "searchindex.h" +#include "outputlist.h" + +/* --------------------------------------------------------------- */ + +//#define theTranslator_vhdlType theTranslator->trVhdlType +#define theTranslator_vhdlType VhdlDocGen::getVhdlType + +static QStringList qrl; +static int openGroups; +static ParserInterface *g_thisParser; +static const char * inputString; +static int inputPosition; +static int startComment = 0; +static QFile inputFile; +static QCString inbuf; +static Entry* global_root = 0; +static Entry* current_root = 0; +static Entry* current = 0; +static Entry* previous = 0; +static Entry* functionEntry = 0; +static Entry* lastEntity = 0; +static Entry* lastCompound = 0; +static int genPort = 0; +static QCString yyFileName; +static int iFuncLine = 1; +static bool g_inputFromFile ; +static bool g_lexInit = FALSE; +static int isBody=0; +static int isFunc=0; +static int yyLineNr = 1; +static char * g_buf = 0; +static int iTextCounter = 0; +static int iCounter = 0; +static int bropen = 0; +static int scantype = 0; +static int g_lastCommentContext = 0; +static bool docBlockAutoBrief; +static char docBlockTerm; + +//#define YY_A_INTERACTIVE 1 +#define YY_NEVER_INTERACTIVE 1 +//----------------------------------------------------------------------------- + +static void parserInit(); +static void deleteSpecChars(char* str,char *buf); +static void handleCommentBlock(const QCString &doc,bool brief); +static void newEntry(); +static void initEntry(Entry *e); + +static void addSubEntry(Entry* root, Entry* e) +{ + if (e==0 || root==0) return; + //if (isPrevDoc) + //{ + // e->brief=prevDocEntry.brief; + // e->briefLine=prevDocEntry.briefLine; + // prevDocEntry.reset(); + // isPrevDoc=FALSE; + //} + root->addSubEntry(e); +} + +static void bufferClear() +{ + int j; + for (j=0;j<iCounter+1;j++) + { + g_buf[j]=0; + } + + iCounter=0; +} + +static void addText (char *word, int llen) +{ + while (llen>0) + { + g_buf[iCounter]=*word; + *word++; + iCounter++; + llen--; + } + g_buf[iCounter]='\0'; +} + +static void getBufText(QCString& qc,int start) +{ + while (start < iCounter) + { + qc+=(g_buf[start]); + start++; + } +} + +static void lineCount() +{ + for ( const char* c = vhdlscanYYtext ; *c ; ++c ) + { + yyLineNr += (*c == '\n') ; + } +} + +static void deleteSpecChars(char* str,char *buf) +{ + while (*str) + { + if ((*str == '\t') || (*str == '\n') || (*str == '\r') || (*str == ' ')) + { + *str++; + } + else + { + *buf++ = *str++; + } + } + *buf='\0'; +} + +void getType(Entry* p,char* text) +{ + QCString name(text); + name=name.stripWhiteSpace(); + if (stricmp(name.data(),"signal" )==0) + { + p->spec=VhdlDocGen::SIGNAL; + } + else if (stricmp(name.data(),"type" )==0) + { + p->spec=VhdlDocGen::TYPE; + } + else if (stricmp(name.data(),"subtype" )==0) + { + p->spec=VhdlDocGen::SUBTYPE; + } + else if (stricmp(name.data(),"constant" )==0) + { + p->spec=VhdlDocGen::CONSTANT; + } + else if (stricmp(name.data(),"attribute" )==0) + { + p->spec=VhdlDocGen::ATTRIBUTE; + } + else if (stricmp(name.data(),"function" )==0) + { + p->spec=VhdlDocGen::FUNCTION; + } + else if (stricmp(name.data(),"procedure" )==0) + { + p->spec=VhdlDocGen::PROCEDURE; + } + else if (stricmp(name.data(),"units" )==0) + { + p->spec=VhdlDocGen::UNITS; + } + else + { + err("wrong type"); + } + p->section=Entry::VARIABLE_SEC; +} + +//------------------------------------------------------------------------- + +/* + * adds signals found in entities|records|units + */ + +void addSignals(const char* str,int line, Entry *e,const char *comment=0) +{ + //printf("===> addSignals (%s) comment='%s'\n",str,comment); + QList<QCString> ql; + QCString bufio; + ql.setAutoDelete(TRUE); + + VhdlDocGen::getSigName(ql,str,bufio); + int count = ql.count(); + + QCString brief = current->brief; + QCString doc = current->doc; + Entry *tmpEntry = current; + current = new Entry; + initEntry(current); + handleCommentBlock(comment,TRUE); + if (!current->brief.isEmpty()) + { + if (doc.isEmpty()) + { + doc = brief; + } + else if (!brief.isEmpty()) + { + doc = brief + "<p>" + doc; + } + brief = current->brief; + } + delete current; + current = tmpEntry; + current->brief.resize(0); + current->doc.resize(0); + + for (int k=1;k<count;k++) + { + Entry *pTemp=new Entry; + initEntry(pTemp); + pTemp->startLine = line; + pTemp->bodyLine = line; + pTemp->name = ql.at(k)->data(); + pTemp->section = Entry::VARIABLE_SEC; + pTemp->brief = brief; + pTemp->doc = doc; + QCString stSpec = ql.at(0)->data(); + if (genPort==1) + { + pTemp->spec = VhdlDocGen::PORT; + stSpec.stripPrefix(bufio.data()); + stSpec=stSpec.stripWhiteSpace(); + pTemp->args = stSpec; + pTemp->type = bufio; + } + else if (genPort==2) // found record + { + pTemp->spec = VhdlDocGen::RECORD; + pTemp->type = stSpec; + pTemp->name.prepend(VhdlDocGen::getRecordNumber()); + } + else + { + pTemp->spec = VhdlDocGen::GENERIC; + pTemp->type = stSpec; + } + addSubEntry(e,pTemp); + }// for + + /* found a unit */ + if (genPort==3) + { + Entry *pTemp=new Entry; + initEntry(pTemp); + QCString tt(str); + QStringList ql=QStringList::split("=",tt,FALSE); + pTemp->spec=VhdlDocGen::UNITS; + pTemp->section=Entry::VARIABLE_SEC; + pTemp->startLine=line; + pTemp->bodyLine=line; + pTemp->type=(QCString)ql[1]; + pTemp->name=(QCString)ql[0].stripWhiteSpace(); + pTemp->name.prepend(VhdlDocGen::getRecordNumber()); + addSubEntry(e,pTemp); + } +} + +/* + * this function parses a process prototype + * and adds the signal to the process + */ + +static void parseProcessProto() +{ + QStringList ql; + QCString qcs; + bool sem=FALSE; + //Entry* ppEntry=new Entry; + //ppEntry->fileName=yyFileName; + //processEntry=ppEntry; + QCString name; + scantype=0; + getBufText(qcs,0); + if (qcs.contains('(') != qcs.contains(')')) return; + VhdlDocGen::deleteAllChars(qcs,'\n'); + VhdlDocGen::parseProcessProto(qcs.data(),name,ql); + current->section=Entry::FUNCTION_SEC; + current->stat=TRUE; + current->spec=VhdlDocGen::PROCESS; + current->startLine=iFuncLine; + current->bodyLine=iFuncLine; + current->fileName=yyFileName; + if (!name.isEmpty()) + { + current->name=name.stripWhiteSpace(); + } + else // found an anonymous process, so we add a generated name + { + current->name=VhdlDocGen::getProcessNumber(); + } + + current->args+=" ( "; + if (!ql.isEmpty()) + { + QValueList<QString>::Iterator iter = ql.begin(); + for ( ; iter != ql.end(); ++iter) + { + if (sem) + { + current->args+=','; + } + Argument *arg=new Argument; + arg->name=((QCString)*iter).stripWhiteSpace(); + current->argList->append(arg); + current->args+=(QCString)*iter; + sem = TRUE; + } + } + current->args+=" ) "; + bufferClear(); +}//parseProcessProto + + +/* + * parses a function|procedure protoype + */ + +static void parseFunctionProto() +{ + QCString name,ret,qcs; + bool sem=FALSE; + QList<Argument> ql; + ql.setAutoDelete(TRUE); + getBufText(qcs,0); + if (qcs.contains('(') != qcs.contains(')')) + return; // function without a prototype + if (qcs.contains("function",FALSE)==0 && qcs.contains("procedure",FALSE)==0) + return; + //Entry* ppEntry=new Entry; + + VhdlDocGen::parseFuncProto(qcs.data(),ql,name,ret); + current->name=name; + current->startLine=iFuncLine; + current->bodyLine=iFuncLine; + + int count = ql.count(); + + current->args+" ( "; + for (int k=0;k<count;k++) + { + if (sem) + { + current->args+=","; + } + Argument *arg=new Argument(); + Argument *hh=(Argument*)ql.at(k); + arg->name=hh->name; + arg->type=hh->type; + arg->defval=hh->defval; + arg->attrib=hh->attrib; + current->argList->append(arg); + current->args+=hh->name; + sem=TRUE; + } + current->args+" )"; + + if (ret.data()) + current->spec=VhdlDocGen::FUNCTION; + else + current->spec=VhdlDocGen::PROCEDURE; + + current->section=Entry::FUNCTION_SEC; + current->type=ret; + //addSubEntry(ee,ppEntry); + if (lastCompound) + { + lastCompound->addSubEntry(current); + current = new Entry; + initEntry(current); + } + else + { + newEntry(); + } + bufferClear(); +}//parseFunctionProto + + +//------------------------------------------------------------------------- + + +void parserInit() +{ + iCounter=0; + iTextCounter=0; + yyLineNr=1; + current=0; + previous=0; + isFunc=0; + isBody=0; + scantype=0; + //pEntry=0; + //pp=0; + lastCompound=0; + lastEntity=0; + bropen=0; + openGroups=0; + //isPrevDoc=FALSE; + //prevDocEntry.reset(); + qrl.clear(); + + if (!g_lexInit) + { + VhdlDocGen::init(); + } + + + uint SSIZE=inputFile.size()+1024; + if (g_buf==0) + g_buf=(char*)(calloc(SSIZE,sizeof(char))); + + if (g_buf==0) + { + fprintf(stderr,"\n no enough memory"); + return; + } + g_buf[SSIZE-1]='\0'; +} + +bool VHDLLanguageScanner::needsPreprocessing(const QCString &) +{ + return FALSE; +} + + +void VHDLLanguageScanner::resetCodeParserState() +{ + +} + +#undef YY_INPUT +#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); + +static int yyread(char *buf,int max_size) +{ + int c=0; + if (g_inputFromFile) + { + c = inputFile.readBlock(buf,max_size); + if (c==-1) yy_fatal_error("input in flex scanner failed"); + } + else + { + while ( c < max_size && inputString[inputPosition] ) + { + *buf = inputString[inputPosition++] ; + c++; buf++; + } + } + return c; +} + +#if 0 +/* + * adds a text line description [--#] to the the previous type + */ + +static void addOneTextLine(QCString& ss ) +{ + Entry* pTemp=0; + if (current && current->bodyLine==yyLineNr) + pTemp=current; + //else if (pEntry && pEntry->bodyLine==yyLineNr) + // pTemp=pEntry; + else + pTemp=VhdlDocGen::getEntryAtLine(current_root,yyLineNr) ; + + if (pTemp) + { + ss=ss.stripWhiteSpace(); + ss.stripPrefix("--!"); + pTemp->brief=ss; + pTemp->briefLine=yyLineNr; + } +} +#endif + +%} + + + /* start command character */ + /* -------------- VHDL SECTION -----------------------------------*/ + +B [ \t] +CR [\r\n] +BR [ \t\n\r] +LETTER [a-zA-Z_0-9] +NAME {LETTER}[a-zA-Z0-9_.]* +FUNCNAME [a-zA-Z"][*+\-_a-zA-Z0-9"\/]* +DIGITS [0-9]+|[0-9]+"."[0-9]+|[0-9]+"#"[0-9_a-fA-F\+\.]+"#" +COMMENT "--"[^\n]* +LABELID [a-z_A-Z][^\;]*";"({B}*{COMMENT})* +PROTO [ (]* +TEXTT "--"[^\/\@\*\#][^\n]* + +ENDE ({BR}*("end"){BR}*[;]{1}) +ENDEFF ("if"|"case"|"loop"|"generate"){BR}*[;] + +ENDE3 {BR}*[^a-zA-Z]("end"){BR}+{FUNCNAME}{BR}*[;] +ENDFUNC {B}*"end"{BR}+"function"{BR}+{FUNCNAME}{BR}*[;] + +FUNCPROC ^{B}*("function"|"procedure"){B}* +ARCHITECTURE ("architecture"){BR}+{NAME}{BR}*("of") +PROCESS ({BR}*{FUNCNAME}{B}*[:]{BR}*("process"){BR}*{PROTO})|("process"){BR}*("("){BR}*{PROTO}|[^a-zA-Z]("process"){CR}|[^a-zA-Z]("process"){BR}+("is") + +ENDPROCESS ("end"){BR}*("process") +LIBUSE ^{B}*("use"|"library"){BR}+ +ENTITY ^{B}*("component"|"entity"|"package"){BR}+ +PBODY ("package"){B}+("body"){BR}+{NAME} +SIGTYPES ^{B}*("subtype"|"type"|"constant"|"attribute"|"signal"|"units"){BR}+ + +ALLTYPESMAP {B}*[_a-zA-ZA_Z0-9. ]*{B}* + +MAPCOMPONENT ({ALLTYPESMAP}{BR}*[:]{BR}*{ALLTYPESMAP}{BR}*("port"|"generic"){BR}+("map"){BR}*("("){1}) + +BRACEOPEN [(]{1} +BRACECLOSE [)]{1} + +ALLID [^;()\t ] + +%option noyywrap + + /* language parsing states */ + +%x Start +%x Comment +%x FindTypeName +%x ParseType +%x ParseRecord +%x ParseUnits +%x ParseProcess +%x FindName +%x FindEntityName +%x FindGenPort +%x FindTypes +%x FindSigName +%x FindFuncName +%x FindBegin + +%% + +<Start>{SIGTYPES} { // found type constant|type|attribute and so on.. + bropen=0; + lineCount(); + + bufferClear(); + //pEntry=current; + getType(current,vhdlscanYYtext); + current->bodyLine=yyLineNr; + if (current->spec==VhdlDocGen::UNITS) + { + //addSubEntry(current,pEntry); + current->startLine=yyLineNr; + current->bodyLine=yyLineNr; + genPort=3; + BEGIN(ParseRecord); + } + else + { + BEGIN(FindTypeName); + } + } + +<Start>{ARCHITECTURE} { //found architecure + lineCount(); + bropen=0; + bufferClear(); + isBody=0; + lastCompound = current; + QCString curName=VhdlDocGen::getIndexWord(vhdlscanYYtext,1); + current->section=Entry::CLASS_SEC; //Entry::CLASS_SEC; + current->spec=VhdlDocGen::ARCHITECTURE; + current->protection=Private; + current->name=curName; + current->fileName=yyFileName; + current->startLine=yyLineNr; + current->bodyLine=yyLineNr; + //printf("-> Architecture at line %d\n",yyLineNr); + BEGIN(FindName); +} + + +<Start>{PROCESS} { //found process + lineCount(); + iFuncLine=yyLineNr; + bropen=0; + //printf("--> Process: line=%d\n",yyLineNr); + bufferClear(); + addText(yytext,yyleng); + QCString qcs(yytext); + if (qcs.contains('(')) + { + bropen=1; + scantype=2; + BEGIN(ParseType); + } + else + { + // iFuncLine--; + parseProcessProto(); + BEGIN(ParseProcess); + } +} + +<Start>{LIBUSE}{BR}* { // found library or package + bropen=0; + bufferClear(); + isBody=0; + QCString qcs=QCString(vhdlscanYYtext); + // lowerString(qcs); + qcs=qcs.stripWhiteSpace(); + if (stricmp(qcs.data(),"use")==0) + { + current->spec=VhdlDocGen::USE; + current->type="package"; + } + else + { + current->spec=VhdlDocGen::LIBRARY; + current->type="library"; + } + current->section=Entry::VARIABLE_SEC; + current->bodyLine=yyLineNr; + lineCount(); + BEGIN(FindName); +} + +<Start>{FUNCPROC} { // found a new function|procedure + lineCount(); + iFuncLine=yyLineNr; + bropen=0; + bufferClear(); + isFunc=1; + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(FindFuncName); +} + +<Start>{ENTITY} { // found entity|component|package + lineCount(); + //printf("--> Entity at line %d\n",yyLineNr); + + bropen=0; + bufferClear(); + QCString word(vhdlscanYYtext); + word=word.lower(); + word=word.stripWhiteSpace(); + + if (strcmp(word.data(),"entity")==0) + { + isBody=0; + scantype=0; + current->section=Entry::CLASS_SEC; + current->spec=VhdlDocGen::ENTITY; + current->protection=Public; + current->bodyLine=yyLineNr; + current->fileName=yyFileName; + lastEntity = current; + } + else if (strcmp(word.data(),"component")==0) + { + current->section=Entry::VARIABLE_SEC; + current->stat=TRUE; + current->spec=VhdlDocGen::COMPONENT; + current->bodyLine=yyLineNr; + scantype=1; + } + else if (strcmp(word,"package")==0) + { + isBody=0; + scantype=0; + lastCompound = current; + current->section=Entry::CLASS_SEC; + current->spec=VhdlDocGen::PACKAGE; + current->protection=Package; //VhdlDocGen::PACKAGE; + current->bodyLine=yyLineNr; + current->fileName=yyFileName; + } + else + err("\n found wrong component at line [%d]",yyLineNr); + + BEGIN(FindEntityName); +} + +<Start>{MAPCOMPONENT} { // found new mapped component aaa: bbb port map + + lineCount(); + QCString type; + QCString tt(vhdlscanYYtext); + tt = tt.stripWhiteSpace(); + //printf(" tt=%s\n",tt.data()); + //VhdlDocGen::deleteAllChars(tt,'\n'); + QCString name = VhdlDocGen::getIndexWord(tt,0); + int i=name.find(':'); + if (i!=-1) + { + name = name.left(i); + tt = tt.right(tt.length()-i-1); + } + int j = tt.find('.'); + if (j!=-1) + { + int k=tt.find(" ",j,FALSE); + if (k>(j+1)) + type=tt.mid(j+1,k-j-1); + } + else + { + type=VhdlDocGen::getIndexWord(tt,1); + if (type==":") type=VhdlDocGen::getIndexWord(tt,2); + if (type=="component") type=VhdlDocGen::getIndexWord(tt,3); + } + //printf("Add mapping %s->%s\n",type.data(),name.data()); + + current->spec=VhdlDocGen::PORTMAP; + current->section=Entry::VARIABLE_SEC; + current->startLine=yyLineNr; + current->bodyLine=yyLineNr; + current->type=type; + current->name=name; + if (lastCompound) + { + lastCompound->addSubEntry(current); + current = new Entry; + initEntry(current); + } + else + { + newEntry(); + } + +#if 0 + if (current && current->spec==VhdlDocGen::ARCHITECTURE) + { + if (!VhdlDocGen::foundInsertedComponent(name,current) && !name.isEmpty()) + { + BaseInfo *bb=new BaseInfo(name,Private,Normal); + current->extends->append(bb); + } + } +#endif +} + +<Start>{CR}* { + lineCount(); + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(Start); +} + +<ParseProcess>[^;()] { + // eat process body + lineCount(); + BEGIN(ParseProcess); +} + +<ParseProcess,ParseType>{ENDPROCESS} { // find end of process + lineCount(); + current->endBodyLine=yyLineNr; + //printf("Process: start=%d end=%d\n",current->bodyLine,current->endBodyLine); + if (lastCompound) + { + lastCompound->addSubEntry(current); + current = new Entry; + initEntry(current); + } + else + { + newEntry(); + } + BEGIN(Start); +} + + +<ParseUnits>{BR}* { + lineCount(); +} + +<ParseUnits>{B}*[a-z_][^\n;]* { // parse record|unit body + lineCount(); + QCString zz(vhdlscanYYtext); + addSignals(zz.data(),yyLineNr,current); + BEGIN(ParseUnits); +} + +<FindName>{NAME} { // found entity|architecture|component name + lineCount(); + + QCString qcs(vhdlscanYYtext); + QCString qreal=QCString(vhdlscanYYtext); + qcs=qcs.stripWhiteSpace(); + if (current->spec==VhdlDocGen::USE) + { + int j=qcs.length(); + int i=qcs.find("."); + if (i>0) + qcs=qcs.right(j-i-1); + j=qcs.length(); + i=qcs.find("."); + if (i>0) + qcs=qcs.left(i); + current->name=qcs; + } + else if (current->spec==VhdlDocGen::ARCHITECTURE) + { + //current->name+=qcs.lower(); + current->name.prepend(qcs+"::"); + + if (lastEntity) + { + // inherit private inheritance relation between entity and architecture + if (!VhdlDocGen::foundInsertedComponent(current->name,lastEntity)) + { + BaseInfo *bb=new BaseInfo(current->name,Private,Normal); + lastEntity->extends->append(bb); + } + } + + } + else if (current->spec==VhdlDocGen::PACKAGE_BODY) + { + current->name+=qcs; + } + else + { + current->name+=qcs; + } + newEntry(); + + BEGIN(Start); +} + +<FindFuncName>{FUNCNAME} { // found name of a process|function|procedure + lineCount(); + + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(ParseType); +} + +<FindTypeName>{NAME}{BR}* { + lineCount(); + current->name=QCString(vhdlscanYYtext); + BEGIN(ParseType); +} + +<ParseType>("is"){BR}*("record") { // find record + lineCount(); + if (isFunc) + { + BEGIN(Start); + } + + genPort=2; + current->section=Entry::VARIABLE_SEC; + current->spec=VhdlDocGen::RECORD; + addText(vhdlscanYYtext,vhdlscanYYleng); + addSubEntry(current_root,current); + current = new Entry; + initEntry(current); + BEGIN(ParseRecord); +} + +<ParseRecord>{BR}* { + lineCount(); +} + +<ParseRecord>("end"){BR}*("record"){BR}*{LETTER}*{BR}*[;]|("end"){BR}*("units"){BR}*[;] { + lineCount(); + genPort=0; + bufferClear(); + BEGIN(Start); +} + +<ParseRecord>[a-z_][^\n;]* { // parse record body + lineCount(); + QCString zz(vhdlscanYYtext); + addSignals(zz.data(),yyLineNr,current); + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(ParseRecord); +} + +<ParseType>{B}+("is"){B}*{CR}|{B}+("is"){B}*"--" { // found a new function in an architecture ? + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); + QCString ttt; + bool bb=TRUE; + getBufText(ttt,0); + if (ttt.contains("--")) + { + unput('-');unput('-'); + VhdlDocGen::deleteCharRev(ttt,'-'); + VhdlDocGen::deleteCharRev(ttt,'-'); + } + if (ttt.contains('(') != ttt.contains(')')) + { + bb=FALSE; + } + bool ss = VhdlDocGen::isFunctionProto(ttt); + if (ss && bb) + { + bufferClear(); + addText(ttt.data(),ttt.length()); + functionEntry=0; + //eFuncBody=new Entry; + ::parseFunctionProto(); +#if 0 + + EntryListIterator eli(*eFuncBody->children()); + Entry *rrt=eli.current(); + + if (current && (current->spec==VhdlDocGen::ARCHITECTURE && rrt)) + { + Entry *ep=new Entry(*rrt); + addSubEntry(current,ep); + isBody=1; + } + if (rrt) + { + Entry *ef=VhdlDocGen::findFunction(current_root,rrt); + if (ef) + { + ef->bodyLine=iFuncLine; + functionEntry=ef; + } + else if ((current->spec==VhdlDocGen::PACKAGE_BODY))//VhdlDocGen::Package_Body)) + { + Entry *ep=new Entry(*rrt); + addSubEntry(current,ep); + ep->bodyLine=iFuncLine; + functionEntry = ep; + } + } + delete eFuncBody; + eFuncBody=0; +#endif + } + bufferClear(); + BEGIN(ParseType); +} + + +<ParseType>[^;()\t ] { + lineCount(); + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(ParseType); +} + +<ParseType>{BRACEOPEN} { + lineCount(); + bropen++; + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(ParseType); +} + +<ParseType>{BRACECLOSE} { + lineCount(); + bropen--; + addText(vhdlscanYYtext,vhdlscanYYleng); + if (bropen==0 && scantype==2) // process + { + ::parseProcessProto(); + BEGIN(ParseProcess); + } // if + else + { + BEGIN(ParseType); + } +} + + +<ParseType>{ENDE}|{ENDFUNC} { // found end of function|process + lineCount(); + if (functionEntry) + { + functionEntry->endBodyLine=yyLineNr; + functionEntry=0; + } + + if (isBody==1 && isFunc==1 && bropen==0) + { + isFunc=0; + } + + bufferClear(); + BEGIN(Start); + +} + + +<ParseType>{ENDE3} { + lineCount(); + QCString tt(vhdlscanYYtext); + tt=tt.lower(); + VhdlDocGen::deleteAllChars(tt,';'); + tt.stripWhiteSpace(); + QStringList ql=QStringList::split(" ",tt,FALSE); + int index=ql.findIndex(QCString("if"))+1; + index+=ql.findIndex(QCString("case"))+1; + index+=ql.findIndex(QCString("loop"))+1; + index+=ql.findIndex(QCString("generate"))+1; + bufferClear(); + if (functionEntry && index==0) + { + functionEntry->endBodyLine=yyLineNr; + functionEntry=0; + isFunc=0; + BEGIN(Start); + } + else if (index==0) + { + BEGIN(Start); + } + else + { + BEGIN(ParseType); + } +} + +<ParseType>";" { + lineCount(); + addText(vhdlscanYYtext,vhdlscanYYleng); + if (bropen==0 && !(isFunc==1 && isBody==1) ) + { + if (isFunc) + { + parseFunctionProto(); + }//if + else + { + QCString qcs; + getBufText(qcs,0); + qcs=qcs.stripWhiteSpace(); + current->section=Entry::VARIABLE_SEC; + current->type+=qcs.data(); + + if ((current->spec==VhdlDocGen::SIGNAL || + current->spec==VhdlDocGen::CONSTANT || + current->spec==VhdlDocGen::TYPE || + current->spec==VhdlDocGen::SUBTYPE + ) && + qcs.stripPrefix(",")) + { + QList<QCString> ql; + ql.setAutoDelete(TRUE); + QCString buffer; + if (current->spec==VhdlDocGen::SUBTYPE || + current->spec==VhdlDocGen::TYPE) + { + VhdlDocGen::getSigTypeName(ql,qcs.data(),buffer); + } + else + { + VhdlDocGen::getSigName(ql,qcs.data(),buffer); + } + QCString doc = current->doc; + QCString brief = current->brief; + if (ql.count()>0) + { + for (uint j=1;j<ql.count();j++) + { + Entry *ppt = new Entry; + initEntry(ppt); + ppt->type += ql.at(0)->data(); + ppt->section = Entry::VARIABLE_SEC; + ppt->spec = current->spec; + ppt->name += ql.at(j)->data(); + ppt->bodyLine = yyLineNr; + ppt->startLine = yyLineNr; + ppt->brief = brief; + ppt->doc = doc; + if (lastCompound) + { + lastCompound->addSubEntry(ppt); + } + else + { + current->addSubEntry(ppt); + } + } + current->type=ql.at(0)->data(); + ql.clear(); + } + } + if (lastCompound) + { + lastCompound->addSubEntry(current); + current = new Entry; + initEntry(current); + } + else + { + newEntry(); + } + } + isFunc=0; + //bufferClear(); + BEGIN(Start); + } + else + { + BEGIN(ParseType); + } +} + +<ParseType>{TEXTT} { + lineCount(); + BEGIN(ParseType); +} + +<ParseType>{BR}* { + lineCount(); + addText(vhdlscanYYtext,vhdlscanYYleng); + BEGIN(ParseType); +} + +<FindEntityName>{NAME} { // found name of an entity/architecture/package + lineCount(); + QCString qcs(vhdlscanYYtext); + qcs=qcs.stripWhiteSpace(); + qcs=qcs.lower(); + if (strcmp(qcs.data(),"body")==0) // found package body + { + current->spec=VhdlDocGen::PACKAGE_BODY; + current->section=Entry::CLASS_SEC; + current->protection=Protected; + current->name+=QCString("_"); + isBody=1; + BEGIN(FindName); + } + else if (scantype==1) // found a component + { + QCString qq(vhdlscanYYtext); + qq=qq.stripWhiteSpace(); + //qq=qq.lower(); + + current->name=qq; + if (lastCompound) + { + if (lastCompound->spec==VhdlDocGen::PACKAGE) + { + if (!VhdlDocGen::foundInsertedComponent(qq,lastCompound)) + { + BaseInfo *bb=new BaseInfo(qq,Private,Normal); + lastCompound->extends->append(bb); + } + } + + lastCompound->addSubEntry(current); + current = new Entry; + initEntry(current); + } + else + { + newEntry(); + } + BEGIN(Start); + } + else + { + QCString qq(vhdlscanYYtext); + qq=qq.stripWhiteSpace(); + current->name=qq; + newEntry(); + //QCString qreal=QCString(vhdlscanYYtext); + BEGIN(Start); + } +} + +<Start>{B}*("generic"|"port"){BR}*[(]+ { // found generic|port in entity + QCString genp(vhdlscanYYleng+1); + deleteSpecChars(vhdlscanYYtext,genp.data()); + VhdlDocGen::deleteCharRev(genp,'('); + + if (stricmp(genp.data(),"port" )==0) + { + genPort=1; + } + else + { + genPort=0; + } + + bropen=1; + bufferClear(); + lineCount(); + BEGIN(FindSigName); +} + +<FindSigName>{BRACECLOSE} { + lineCount(); + bropen--; + addText(vhdlscanYYtext,vhdlscanYYleng); + if (bropen==0) + { + bufferClear(); + BEGIN(Start); + } + else + { + BEGIN(FindSigName); + } +} + +<FindSigName>{LABELID} { // found signals in entity + QCString line(vhdlscanYYtext); + + // note that line can be something like: + // "var1, var2, var3 : in std_logic_vector(8 downto 0); --! Some comment" + + // but also + // "var4 --! Some comment + // );" + // which marks the end of a port + + // and also + // "-- Some comment + // var1 : in std_logic;" + + //printf("--> labelid='%s'\n",line.data()); + QStringList ql; + QCString comment; + int openCount=line.contains('('); + int closeCount=line.contains(')'); + int semi = line.find(';'); + int pos; + //printf("=> signal: line='%s'\n",line.data()); + if (semi!=-1 && (pos=line.find("--"))!=-1) + { + int eol = line.findRev('\n'); + //printf("pos=%d eol=%d\n",pos,eol); + if (eol>=pos+2) + { + QRegExp re("\\n[ \\t]*--!"); // comment continuation + comment=line.mid(pos+2,eol-pos-2); + //printf("Comment: '%s'\n",comment.data()); + int p,l; + while ((p=re.match(comment,0,&l))!=-1) + { + comment.remove(p,l); + } + line=line.left(pos)+line.right(line.length()-eol); + } + else + { + comment=line.mid(pos+2); + line=line.left(pos); + } + comment.stripWhiteSpace(); + if (!comment.stripPrefix("!")) // not a special comment + { + comment.resize(0); + } + } + else + { + //printf("no ; or --: pos=%d semi=%d\n",pos,semi); + } + + int diff=openCount-closeCount; + if (diff<0) + { + VhdlDocGen::deleteCharRev(line,')'); + } + + if (scantype!=1) // not a component + { + addText(vhdlscanYYtext,vhdlscanYYleng); + addSignals(line,yyLineNr,lastEntity,comment); + } + + lineCount(); + + if ((bropen+openCount-closeCount)==0) + { + bufferClear(); + BEGIN(Start); + } +} + + +<FindSigName>{BRACEOPEN} { + lineCount(); + bropen++; + addText(vhdlscanYYtext,vhdlscanYYleng); +} + + +<FindSigName>{CR} { + lineCount(); + addText(vhdlscanYYtext,vhdlscanYYleng); + //BEGIN(FindSigName); +} + + +<*>^{B}*("for ")[^;]* { + //printf("\n found for[%s] [%d]",vhdlscanYYtext,yyLineNr); + lineCount(); +} + +<*>{DIGITS} { // found digit + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); +} + + /* +<*>{BR}*"--!"{B}*"@}" { // end group + if (current) + { + Entry *pg=new Entry; + addSubEntry(current,pg); + pg->startLine=yyLineNr; + pg->name="endgroup"; + } + lineCount(); +} + +<*>{BR}*"--!"{B}*"@{" { // start group + if (current) + { + Entry *pg=new Entry; + addSubEntry(current,pg); + pg->startLine=yyLineNr; + pg->name="startgroup"; + } + lineCount(); +} + */ + +<*>{BR}*"--!"[^{}\n][^\n]*\n/{B}*"--!" { // multi line comment + if (YY_START!=Comment) // Start of the comment block + { + iTextCounter=iCounter; + startComment=yyLineNr; + g_lastCommentContext=YY_START; + } + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); + BEGIN(Comment); +} + +<Comment>^{B}*"--!"[^\n]* { + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); +} + +<Comment>.|\n { + // found end of comment block + QCString qcs; + getBufText(qcs,iTextCounter); + VhdlDocGen::prepareComment(qcs); + handleCommentBlock(qcs,FALSE); + bufferClear(); + unput(*vhdlscanYYtext); + BEGIN(g_lastCommentContext); +} + +<*>^{B}*"--!"[^\n]* { // one line comment + QCString qcs(yytext); + int j=qcs.find("--!"); + qcs=qcs.right(qcs.length()-3-j); + //printf("--> handleCommentBlock line %d\n",yyLineNr); + handleCommentBlock(qcs,TRUE); + //printf("--> end: handleCommentBlock line %d\n",yyLineNr); + bufferClear(); +} + +<*>{COMMENT} { +} + +<*>\n { + lineCount(); + addText(vhdlscanYYtext,vhdlscanYYleng); + // printf("\n new-line [%d]",yyLineNr); + BEGIN(Start); +} + +<*>{NAME} { + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); +} + +<*>{B}* { + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); +} + +<*>. { + addText(vhdlscanYYtext,vhdlscanYYleng); + lineCount(); +} + + +%% + +static void initEntry(Entry *e) +{ + e->fileName = yyFileName; + initGroupInfo(e); +} + +static void newEntry() +{ + current_root->addSubEntry(current); + previous = current; + current = new Entry ; + initEntry(current); +} + +static void handleCommentBlock(const QCString &doc,bool brief) +{ + int position=0; + bool needsEntry=FALSE; + Protection protection=Public; + //printf("parseCommentBlock %p [%s]\n",current,doc.data()); + while (parseCommentBlock( + g_thisParser, + current, + doc, // text + yyFileName, // file + brief ? current->briefLine : current->docLine, // line of block start + brief, + docBlockAutoBrief, + FALSE, + protection, + position, + needsEntry + ) + ) + { + //printf("parseCommentBlock position=%d [%s]\n",position,doc.data()+position); + if (needsEntry) newEntry(); + } + if (needsEntry) + { + newEntry(); + } + + if (docBlockTerm) + { + unput(docBlockTerm); + docBlockTerm=0; + } +} + +#if 0 +/*! + * adds grouping to the entries + */ +static void mergeGrouping(const Entry* ce,int) +{ + EntryListIterator eli(*ce->children()); + Entry *rt; + for (;(rt=eli.current());++eli) + { + if (rt->section==Entry::GROUPDOC_SEC) + { + if (openGroups) + { + QCString tt=(QCString)qrl.last(); + if (!tt.isEmpty()) + { + rt->groups->append(new Grouping(tt.data(),Grouping::GROUPING_LOWEST)); + } + } + qrl.append(rt->name); + } + + if ((strcmp(rt->name.data(),"endgroup")==0) && !qrl.isEmpty()) + { + qrl.remove((QCString)qrl.last()); + openGroups--; + } + + if ((strcmp(rt->name.data(),"startgroup")==0)) + { + openGroups++; + } + + if (rt->section!=Entry::GROUPDOC_SEC && openGroups && !qrl.isEmpty()) + { + rt->groups->append(new Grouping(qrl.last().data(),Grouping::GROUPING_LOWEST)); + } + + mergeGrouping(rt,openGroups); + } +} +#endif + +/* + * adds the library|use statements to the next class (entity|package|architecture|package body + * library ieee + * entity xxx + * ..... + * library + * package + * enity zzz + * ..... + * and so on.. + */ + +void mapLibPackage(const Entry* ce) +{ + while (TRUE) + { + bool found = FALSE; + Entry *rt=0; + //const QList<Entry> *epp=ce->children(); + EntryListIterator eli(*ce->children()); + EntryListIterator eli1=eli; + for (;(rt=eli.current()),eli1=eli;++eli) + { + if (rt->spec==VhdlDocGen::LIBRARY || rt->spec==VhdlDocGen::USE) + // top level library or use statement + { + Entry *temp=0; + for (;(temp=eli1.current());++eli1) // find next entity + { + if (temp->spec==VhdlDocGen::ENTITY || temp->spec==VhdlDocGen::PACKAGE || temp->spec==VhdlDocGen::ARCHITECTURE || temp->spec==VhdlDocGen::PACKAGE_BODY) + { + Entry *ee=new Entry(*rt); //append a copy to entries sublist + temp->addSubEntry(ee); + found=TRUE; + rt->spec=-1; //nullify entry + rt->section=0; + break; + } + }//for + }//if + }//for + if (!found) // nothing left to do + { + return; + } + }//while +}//MapLib + +#if 0 +/*! + * merges a brief descriptions to the next entry + */ +void mergeBrief(const Entry* ce) +{ + EntryListIterator eli(*ce->children()); + Entry *rt; + for (;(rt=eli.current());++eli) + { + + if (found && (!eMerge.brief.isEmpty() || !eMerge.doc.isEmpty())) + { + rt->doc+=eMerge.doc.data(); + rt->docLine=eMerge.docLine; + rt->brief+=eMerge.brief.data(); + rt->briefLine=eMerge.briefLine; + found=FALSE; + } + + if ((strcmp(rt->name.data(),"string")==0)) + { + eMerge.reset(); + eMerge.doc+=rt->doc.data(); + eMerge.docLine=rt->docLine; + eMerge.brief+=rt->brief.data(); + eMerge.briefLine=rt->briefLine; + + found=TRUE; + } + MergeBrief(rt); + } +} +#endif + + + +void vhdlscanFreeScanner() +{ +#if defined(YY_FLEX_SUBMINOR_VERSION) + if (g_lexInit) + { + vhdlscanYYlex_destroy(); + } + + if (g_buf) + { + free(g_buf); + } + + g_buf=0; +#endif + +} + +void VHDLLanguageScanner::parseInput(const char *fileName,const char *fileBuf,Entry *root) +{ + inputFile.setName(fileName); + //uint jfile=inputFile.size(); + ::parserInit(); + yyFileName=QCString(fileName); + groupEnterFile(fileName,yyLineNr); + g_thisParser = this; + g_inputFromFile = FALSE; + inputPosition = 0; + assert(root!=0); + inputString=fileBuf; + current_root = root; + global_root = root; + current=new Entry; + initEntry(current); + //current_root->name=QCString("XXX"); // dummy name for root + if (!inputFile.open(IO_ReadOnly)) + { + err("\n\n could not open file: %s !!\n\n",yyFileName.data()); + return ; + } + + if (g_lexInit) + { + vhdlscanYYrestart(vhdlscanYYin); + unput(' '); + BEGIN(Start); + } + vhdlscanYYlex(); + g_lexInit=TRUE; + + free(g_buf); + g_buf=0; + + delete current; + current=0; + + groupLeaveFile(yyFileName,yyLineNr); + + //mergeBrief(current_root); + //mergeGrouping(current_root,0); + mapLibPackage(current_root); +} + + +void VHDLLanguageScanner::parsePrototype(const char *text) +{ + // will be called when a \fn command is found in a comment block + + QCString ss,ret; + bool sem=FALSE; + bool func=FALSE; + QList<Argument> qs; + qs.setAutoDelete(TRUE); + VhdlDocGen::parseFuncProto(text,qs,ss,ret,TRUE); + int count=qs.count(); + if (stricmp(ret.data(),"function")==0) + { + func=TRUE; + } + if (count<1 && !func) + { + return; + } + Entry *pp = new Entry; + initEntry(pp); + pp->name=ss.stripWhiteSpace(); + pp->args+='('; + for (int j=0;j<count;j++) + { + if (sem) + { + pp->args+=','; + } + + Argument *ars=(Argument*)(qs.at(j)); + Argument *arg=new Argument; + arg->attrib = ars->attrib; + arg->name = ars->name; + arg->type = ars->type; + pp->args+=ars->name.data(); + pp->args+=" "; + pp->args+=ars->type.data(); + pp->argList->append(arg); + sem=TRUE; + } + pp->args+=')'; + + if (!ret.isEmpty()) + pp->spec=VhdlDocGen::FUNCTION; + else + pp->spec=VhdlDocGen::PROCEDURE; + + if (pp->section == Entry::MEMBERDOC_SEC && pp->args.isEmpty()) + pp->section = Entry::VARIABLEDOC_SEC; + + pp->type=ret; + current_root->addSubEntry(pp); +} + +void VHDLLanguageScanner::parseCode(CodeOutputInterface &codeOutIntf, + const char *scopeName, + const QCString &input, + bool isExampleBlock, + const char *exampleName, + FileDef *fileDef, + int startLine, + int endLine, + bool inlineFragment, + MemberDef *memberDef + ) +{ + ::parseVhdlCode(codeOutIntf,scopeName,input,isExampleBlock,exampleName,fileDef,startLine,endLine,inlineFragment,memberDef); +} + diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 7e56b12..8c194ea 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h index 705dfc4..6a12d7b 100644 --- a/src/xmldocvisitor.h +++ b/src/xmldocvisitor.h @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 13f6408..cb32b68 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1,9 +1,9 @@ /****************************************************************************** * - * $Id$ + * * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby @@ -159,7 +159,7 @@ static void writeCombineScript() return; } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); t << "<!-- XSLT script to combine the generated output into a single file. \n" @@ -1190,7 +1190,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) return; } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" @@ -1416,7 +1416,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti) return; } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" @@ -1503,7 +1503,7 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti) return; } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" @@ -1648,7 +1648,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti) } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << gd->getOutputFileBase() << "\" kind=\"group\">" << endl; @@ -1719,7 +1719,7 @@ static void generateXMLForDir(DirDef *dd,QTextStream &ti) } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << dd->getOutputFileBase() << "\" kind=\"dir\">" << endl; @@ -1772,7 +1772,7 @@ static void generateXMLForPage(PageDef *pd,QTextStream &ti,bool isExample) } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << pageName; t << "\" kind=\"" << kindName << "\">" << endl; @@ -1880,7 +1880,7 @@ void generateXML() return; } QTextStream t(&f); - t.setEncoding(QTextStream::Latin1); + t.setEncoding(QTextStream::UnicodeUTF8); // write index header t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; diff --git a/src/xmlgen.h b/src/xmlgen.h index 49ec0ca..4a4da55 100644 --- a/src/xmlgen.h +++ b/src/xmlgen.h @@ -1,8 +1,8 @@ /****************************************************************************** * - * $Id$ + * * - * Copyright (C) 1997-2007 by Dimitri van Heesch. + * Copyright (C) 1997-2008 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby |