diff options
author | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2011-08-14 13:56:38 (GMT) |
---|---|---|
committer | dimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7> | 2011-08-14 13:56:38 (GMT) |
commit | 9e5aed6d58f0e33ca942f67daa49971d885b0110 (patch) | |
tree | 3138a0d18d53a00498b4cad59f934a4e64762cf8 /src | |
parent | 3426c85df5daa8d679bc2ed87740ccbc34d6346b (diff) | |
download | Doxygen-9e5aed6d58f0e33ca942f67daa49971d885b0110.zip Doxygen-9e5aed6d58f0e33ca942f67daa49971d885b0110.tar.gz Doxygen-9e5aed6d58f0e33ca942f67daa49971d885b0110.tar.bz2 |
Release-1.7.5
Diffstat (limited to 'src')
77 files changed, 7404 insertions, 3391 deletions
diff --git a/src/Makefile.in b/src/Makefile.in index 2defba8..6be0bff 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -49,6 +49,6 @@ distclean: clean 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 \ - vhdlscanner.cpp vhdlcode.cpp + vhdlscanner.cpp vhdlcode.cpp tclscanner.cpp FORCE: diff --git a/src/cite.cpp b/src/cite.cpp index f460149..9d67afa 100644 --- a/src/cite.cpp +++ b/src/cite.cpp @@ -36,21 +36,6 @@ const QCString CiteConsts::anchorPrefix("CITEREF_"); //-------------------------------------------------------------------------- -static bool writeBstFile(const QString &fileName) -{ - QCString bstData = doxygen_bst; - QFile f(fileName); - if (!f.open(IO_WriteOnly)) - { - err("error: could not open file %s for writing\n",fileName.data()); - return FALSE; - } - f.writeBlock(bstData, strlen(bstData)); - return TRUE; -} - -//-------------------------------------------------------------------------- - CiteDict::CiteDict(int size) : m_entries(size, FALSE) { m_ordering.setAutoDelete(TRUE); @@ -119,14 +104,16 @@ bool CiteDict::writeAux() bool CiteDict::writeBst() { //msg("..writing bst file\n"); - QCString bstFileName = m_baseFileName + ".bst"; - return writeBstFile(bstFileName); -} - -void CiteDict::writeDefaultBibStyle() -{ - writeBstFile("doxygen.bst"); - msg("wrote doxygen.bst\n"); + QCString fileName = m_baseFileName + ".bst"; + QCString bstData = doxygen_bst; + QFile f(fileName); + if (!f.open(IO_WriteOnly)) + { + err("error: could not open file %s for writing\n",fileName.data()); + return FALSE; + } + f.writeBlock(bstData, bstData.length()); + return TRUE; } void CiteDict::writeLatexBibliography(FTextStream &t) @@ -86,10 +86,6 @@ class CiteDict */ void writeLatexBibliography(FTextStream &t); - /** writes the default bibliography style to the output */ - static void writeDefaultBibStyle(); - - private: bool writeAux(); bool writeBst(); diff --git a/src/classdef.cpp b/src/classdef.cpp index c9cb837..c69c300 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -152,9 +152,6 @@ class ClassDefImpl /*! Is the class part of an unnamed namespace? */ bool isStatic; - /*! Language used for this class */ - SrcLangExt lang; - /*! TRUE if classes members are merged with those of the base classes. */ bool membersMerged; @@ -177,6 +174,9 @@ class ClassDefImpl /** Is this a simple (non-nested) C structure? */ bool isSimple; + + ClassList *taggedInnerClasses; + ClassDef *tagLessRef; }; void ClassDefImpl::init(const char *defFileName, const char *name, @@ -217,11 +217,15 @@ void ClassDefImpl::init(const char *defFileName, const char *name, categoryOf = 0; usedOnly = FALSE; isSimple = Config_getBool("INLINE_SIMPLE_STRUCTS"); + taggedInnerClasses = 0; + tagLessRef = 0; //QCString ns; //extractNamespaceName(name,className,ns); //printf("m_name=%s m_className=%s ns=%s\n",m_name.data(),m_className.data(),ns.data()); - if (getLanguageFromFileName(defFileName)!=SrcLangExt_Java && + // we cannot use getLanguage at this point, as setLanguage has not been called. + SrcLangExt lang = getLanguageFromFileName(defFileName); + if ((lang==SrcLangExt_Cpp || lang==SrcLangExt_ObjC) && guessSection(defFileName)==Entry::SOURCE_SEC) { isLocal=TRUE; @@ -254,6 +258,7 @@ ClassDefImpl::~ClassDefImpl() delete templBaseClassNames; delete tempArgs; delete typeConstraints; + delete taggedInnerClasses; } // constructs a new class definition @@ -268,7 +273,6 @@ ClassDef::ClassDef( setReference(lref); m_impl = new ClassDefImpl; m_impl->compType = ct; - m_impl->lang = SrcLangExt_Unknown; m_impl->init(defFileName,name(),compoundTypeString(),fName); } @@ -285,10 +289,11 @@ QCString ClassDef::getMemberListFileName() const QCString ClassDef::displayName() const { - static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + SrcLangExt lang = getLanguage(); + //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString n; - if (vhdlOpt) + if (lang==SrcLangExt_VHDL) { n = VhdlDocGen::getClassName(this); } @@ -296,9 +301,10 @@ QCString ClassDef::displayName() const { n=qualifiedNameWithTemplateParameters(); } - if (optimizeOutputForJava) + QCString sep=getLanguageSpecificSeparator(lang); + if (sep!="::") { - n=substitute(n,"::","."); + n=substitute(n,"::",sep); } if (m_impl->compType==ClassDef::Protocol && n.right(2)=="-p") { @@ -378,8 +384,7 @@ void ClassDef::internalInsertMember(MemberDef *md, //printf("insertInternalMember(%s) isHidden()=%d\n",md->name().data(),md->isHidden()); if (md->isHidden()) return; - static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - if (optVhdl) + if (getLanguage()==SrcLangExt_VHDL) { QCString title=VhdlDocGen::trVhdlType(md->getMemberSpecifiers(),FALSE); if (!m_impl->vhdlSummaryTitles.find(title)) @@ -491,7 +496,7 @@ void ClassDef::internalInsertMember(MemberDef *md, break; case Public: addMemberToList(MemberList::pubAttribs,md,TRUE); - isSimple=TRUE; + isSimple=!md->isFunctionPtr(); break; case Private: addMemberToList(MemberList::priAttribs,md,TRUE); @@ -542,6 +547,7 @@ void ClassDef::internalInsertMember(MemberDef *md, { m_impl->isSimple = FALSE; } + //printf("adding %s simple=%d total_simple=%d\n",name().data(),isSimple,m_impl->isSimple); /*******************************************************/ /* insert member in the detailed documentation section */ @@ -991,19 +997,19 @@ void ClassDef::showUsedFiles(OutputList &ol) { ol.pushGeneratorState(); ol.disable(OutputGenerator::Man); - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + SrcLangExt lang = getLanguage(); ol.writeRuler(); - if (fortranOpt) + if (lang==SrcLangExt_Fortran) { ol.parseText(theTranslator->trGeneratedFromFilesFortran( - m_impl->lang==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType, + getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType, m_impl->files.count()==1)); } else { ol.parseText(theTranslator->trGeneratedFromFiles( - m_impl->lang==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType, + getLanguage()==SrcLangExt_ObjC && m_impl->compType==Interface ? Class : m_impl->compType, m_impl->files.count()==1)); } @@ -1272,7 +1278,7 @@ void ClassDef::writeIncludeFiles(OutputList &ol) { ol.startParagraph(); ol.startTypewriter(); - SrcLangExt lang = getLanguageFromFileName(nm); + SrcLangExt lang = getLanguage(); bool isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java; if (isIDLorJava) { @@ -1422,7 +1428,6 @@ void ClassDef::writeAuthorSection(OutputList &ol) void ClassDef::writeSummaryLinks(OutputList &ol) { - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); QListIterator<LayoutDocEntry> eli( @@ -1430,7 +1435,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol) LayoutDocEntry *lde; bool first=TRUE; - if (!vhdlOpt) + if (getLanguage()!=SrcLangExt_VHDL) { for (eli.toFirst();(lde=eli.current());++eli) { @@ -1681,11 +1686,12 @@ void ClassDef::writeMoreLink(OutputList &ol,const QCString &anchor) void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *header,bool localNames) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES"); static bool extractLocalClasses = Config_getBool("EXTRACT_LOCAL_CLASSES"); bool isLink = isLinkable(); + SrcLangExt lang = getLanguage(); if (isLink || (!hideUndocClasses && (!isLocal() || extractLocalClasses) @@ -1699,13 +1705,14 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade { ol.parseText(header); } - else if (vhdlOpt) + else if (lang==SrcLangExt_VHDL) { ol.parseText(VhdlDocGen::trVhdlType(VhdlDocGen::ARCHITECTURE,FALSE)); } else { - ol.parseText(fortranOpt ? theTranslator->trDataTypes() : + ol.parseText(lang==SrcLangExt_Fortran ? + theTranslator->trDataTypes() : theTranslator->trCompounds()); } ol.endMemberHeader(); @@ -1734,7 +1741,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade cname = displayName(); } - if (!vhdlOpt) // for VHDL we swap the name and the type + if (lang!=SrcLangExt_VHDL) // for VHDL we swap the name and the type { ol.writeString(ctype); ol.writeString(" "); @@ -1754,7 +1761,7 @@ void ClassDef::writeDeclarationLink(OutputList &ol,bool &found,const char *heade ol.docify(cname); ol.endBold(); } - if (vhdlOpt) // now write the type + if (lang==SrcLangExt_VHDL) // now write the type { ol.writeString(" "); ol.insertMemberAlign(); @@ -1907,25 +1914,26 @@ void ClassDef::writeDocumentationContents(OutputList &ol,const QCString &pageTit void ClassDef::writeDocumentation(OutputList &ol) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); QCString pageTitle; + SrcLangExt lang = getLanguage(); - if (fortranOpt) + if (lang==SrcLangExt_Fortran) { pageTitle = theTranslator->trCompoundReferenceFortran(displayName(), m_impl->compType, m_impl->tempArgs != 0); } - else if (vhdlOpt) + else if (lang==SrcLangExt_VHDL) { - // TODO: translate + // TODO: TRANSLATE ME pageTitle = VhdlDocGen::getClassTitle(this)+" Reference"; } else { pageTitle = theTranslator->trCompoundReference(displayName(), - m_impl->compType == Interface && m_impl->lang==SrcLangExt_ObjC ? Class : m_impl->compType, + m_impl->compType == Interface && getLanguage()==SrcLangExt_ObjC ? Class : m_impl->compType, m_impl->tempArgs != 0); } @@ -1940,7 +1948,7 @@ void ClassDef::writeDocumentation(OutputList &ol) } startTitle(ol,getOutputFileBase(),this); - ol.parseText(pageTitle,TRUE); + ol.parseText(pageTitle); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),displayName()); writeDocumentationContents(ol,pageTitle); @@ -2058,7 +2066,7 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol) void ClassDef::writeMemberList(OutputList &ol) { static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); if (m_impl->allMemberNameInfoSDict==0 || cOpt) return; // only for HTML @@ -2077,7 +2085,7 @@ void ClassDef::writeMemberList(OutputList &ol) ol.endQuickIndices(); } startTitle(ol,0); - ol.parseText(displayName()+" "+theTranslator->trMemberList(),TRUE); + ol.parseText(displayName()+" "+theTranslator->trMemberList()); endTitle(ol,0,0); ol.startContents(); ol.parseText(theTranslator->trThisIsTheListOfAllMembers()); @@ -2220,20 +2228,23 @@ void ClassDef::writeMemberList(OutputList &ol) ol.writeString("</td>"); ol.writeString("<td>"); } + SrcLangExt lang = md->getLanguage(); if ( - (prot!=Public || (virt!=Normal && m_impl->lang!=SrcLangExt_ObjC) || + (prot!=Public || (virt!=Normal && getLanguage()!=SrcLangExt_ObjC) || md->isFriend() || md->isRelated() || md->isExplicit() || md->isMutable() || (md->isInline() && Config_getBool("INLINE_INFO")) || md->isSignal() || md->isSlot() || - md->isStatic() || vhdlOpt + md->isStatic() || lang==SrcLangExt_VHDL ) && memberWritten) { ol.startTypewriter(); ol.docify(" ["); QStrList sl; - if (vhdlOpt) sl.append(VhdlDocGen::trVhdlType( - md->getMemberSpecifiers())); //append vhdl type + if (lang==SrcLangExt_VHDL) + { + sl.append(VhdlDocGen::trVhdlType(md->getMemberSpecifiers())); //append vhdl type + } else if (md->isFriend()) sl.append("friend"); else if (md->isRelated()) sl.append("related"); else @@ -2245,8 +2256,8 @@ void ClassDef::writeMemberList(OutputList &ol) if (prot==Protected) sl.append("protected"); else if (prot==Private) sl.append("private"); else if (prot==Package) sl.append("package"); - if (virt==Virtual && - m_impl->lang!=SrcLangExt_ObjC) sl.append("virtual"); + if (virt==Virtual && getLanguage()!=SrcLangExt_ObjC) + sl.append("virtual"); else if (virt==Pure) sl.append("pure virtual"); if (md->isStatic()) sl.append("static"); if (md->isSignal()) sl.append("signal"); @@ -2575,10 +2586,10 @@ 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="."; + //static bool optimizeOutputForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + SrcLangExt lang = getLanguage(); + QCString sep=getLanguageSpecificSeparator(lang); int sepLen = sep.length(); m_impl->membersMerged=TRUE; @@ -2821,8 +2832,16 @@ void ClassDef::mergeMembers() */ void ClassDef::mergeCategory(ClassDef *category) { + static bool extractLocalMethods = Config_getBool("EXTRACT_LOCAL_METHODS"); + bool makePrivate = category->isLocal(); + // in case extract local methods is not enabled we don't add the methods + // of the category in case it is defined in the .m file. + if (makePrivate && !extractLocalMethods) return; + category->setCategoryOf(this); category->setArtificial(TRUE); + // make methods private for categories defined in the .m file + //printf("%s::mergeCategory makePrivate=%d\n",name().data(),makePrivate); MemberNameInfoSDict *srcMnd = category->memberNameInfoSDict(); MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict; @@ -2836,10 +2855,20 @@ void ClassDef::mergeCategory(ClassDef *category) MemberNameInfo *dstMni=dstMnd->find(srcMni->memberName()); if (dstMni) // method is already defined in the class { + //printf("Existing member %s\n",srcMni->memberName()); // TODO: we should remove the other member and insert this one. + MemberInfo *mi = dstMni->getFirst(); + if (mi) + { + Protection prot = mi->prot; + if (makePrivate) prot = Private; + removeMemberFromLists(mi->memberDef); + internalInsertMember(mi->memberDef,prot,FALSE); + } } else // new method name { + //printf("New member %s\n",srcMni->memberName()); // create a deep copy of the list MemberNameInfo *newMni = 0; newMni = new MemberNameInfo(srcMni->memberName()); @@ -2850,14 +2879,16 @@ void ClassDef::mergeCategory(ClassDef *category) for (;(mi=mnii.current());++mnii) { //printf("Adding '%s'\n",mi->memberDef->name().data()); - MemberInfo *newMi=new MemberInfo(mi->memberDef,mi->prot,mi->virt,mi->inherited); + Protection prot = mi->prot; + if (makePrivate) prot = Private; + MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,mi->virt,mi->inherited); newMi->scopePath=mi->scopePath; newMi->ambigClass=mi->ambigClass; newMi->ambiguityResolutionScope=mi->ambiguityResolutionScope; newMni->append(newMi); mi->memberDef->moveTo(this); mi->memberDef->setCategory(category); - internalInsertMember(mi->memberDef,mi->prot,FALSE); + internalInsertMember(mi->memberDef,prot,FALSE); } // add it to the dictionary @@ -3113,8 +3144,8 @@ void ClassDef::determineIntfUsageRelation() QCString ClassDef::compoundTypeString() const { - if (m_impl->compType==Interface && m_impl->lang==SrcLangExt_ObjC) return "class"; - if (Config_getBool("OPTIMIZE_FOR_FORTRAN")) + if (m_impl->compType==Interface && getLanguage()==SrcLangExt_ObjC) return "class"; + if (getLanguage()==SrcLangExt_Fortran) { switch (m_impl->compType) { @@ -3180,8 +3211,8 @@ QCString ClassDef::getOutputFileBase() const } else if (inlineSimpleClasses && m_impl->isSimple && (scope=getOuterScope()) && ( - (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkable()) || - scope->isLinkable() + (scope==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || + scope->isLinkableInProject() ) ) { @@ -3269,7 +3300,6 @@ void ClassDef::addInnerCompound(Definition *d) m_impl->innerClasses = new ClassSDict(17); } m_impl->innerClasses->inSort(d->localName(),(ClassDef *)d); - m_impl->isSimple = FALSE; } } @@ -3478,7 +3508,7 @@ void ClassDef::getTemplateParameterLists(QList<ArgumentList> &lists) const QCString ClassDef::qualifiedNameWithTemplateParameters( QList<ArgumentList> *actualParams) const { - static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); //printf("qualifiedNameWithTemplateParameters() localName=%s\n",localName().data()); QCString scName; @@ -3496,16 +3526,12 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( } } - QCString scopeSeparator; - if (optimizeOutputJava) - scopeSeparator="."; - else - scopeSeparator="::"; - + SrcLangExt lang = getLanguage(); + QCString scopeSeparator = getLanguageSpecificSeparator(lang); if (!scName.isEmpty()) scName+=scopeSeparator; bool isSpecialization = localName().find('<')!=-1; - bool isGeneric = m_impl->lang==SrcLangExt_CSharp; + bool isGeneric = getLanguage()==SrcLangExt_CSharp; QCString clName = className(); if (isGeneric && clName.right(2)=="-g") @@ -3556,15 +3582,15 @@ void ClassDef::setClassName(const char *name) void ClassDef::addListReferences() { - bool fortranOpt=Config_getBool("OPTIMIZE_FOR_FORTRAN"); + SrcLangExt lang = getLanguage(); if (!isLinkableInProject()) return; //printf("ClassDef(%s)::addListReferences()\n",name().data()); { LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems(); addRefItem(xrefItems.pointer(), qualifiedName(), - fortranOpt?theTranslator->trType(TRUE,TRUE): - theTranslator->trClass(TRUE,TRUE), + lang==SrcLangExt_Fortran ? theTranslator->trType(TRUE,TRUE) + : theTranslator->trClass(TRUE,TRUE), getOutputFileBase(), displayName(), 0 @@ -3683,11 +3709,11 @@ void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,co const char *subTitle,bool showInline) { //printf("%s: ClassDef::writeMemberDeclarations\n",name().data()); - static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); + //static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); MemberList * ml = getMemberList(lt); if (ml) { - if (optimizeVhdl) // use specific declarations function + if (getLanguage()==SrcLangExt_VHDL) // use specific declarations function { VhdlDocGen::writeVhdlDeclarations(ml,ol,0,this,0); } @@ -3820,12 +3846,12 @@ bool ClassDef::isAbstract() const bool ClassDef::isObjectiveC() const { - return m_impl->lang==SrcLangExt_ObjC; + return getLanguage()==SrcLangExt_ObjC; } bool ClassDef::isCSharp() const { - return m_impl->lang==SrcLangExt_CSharp; + return getLanguage()==SrcLangExt_CSharp; } ClassDef *ClassDef::categoryOf() const @@ -3868,11 +3894,6 @@ void ClassDef::setIsStatic(bool b) m_impl->isStatic=b; } -void ClassDef::setLanguage(SrcLangExt lang) -{ - m_impl->lang=lang; -} - void ClassDef::setCompoundType(CompoundType t) { m_impl->compType = t; @@ -3898,11 +3919,6 @@ void ClassDef::setUsedOnly(bool b) m_impl->usedOnly = b; } -SrcLangExt ClassDef::getLanguage() const -{ - return m_impl->lang; -} - bool ClassDef::isUsedOnly() const { return m_impl->usedOnly; @@ -3956,13 +3972,19 @@ bool ClassDef::isEmbeddedInOuterScope() const Definition *container = getOuterScope(); + bool containerLinkable = + container && + ( + (container==Doxygen::globalScope && getFileDef() && getFileDef()->isLinkableInProject()) || // global class in documented file + container->isLinkableInProject() // class in documented scope + ); + // inline because of INLINE_GROUPED_CLASSES=YES ? bool b1 = (inlineGroupedClasses && partOfGroups()!=0); // a grouped class // inline because of INLINE_SIMPLE_STRUCTS=YES ? bool b2 = (inlineSimpleClasses && m_impl->isSimple && // a simple class - ((container && - (container==Doxygen::globalScope || container->isLinkableInProject())) || // with a documented scope - partOfGroups()!=0 // or part of a group + (containerLinkable || // in a documented container + partOfGroups()!=0 // or part of a group ) ); //printf("%s::isEmbeddedInOuterScope(): inlineGroupedClasses=%d " @@ -3973,4 +3995,37 @@ bool ClassDef::isEmbeddedInOuterScope() const return b1 || b2; // either reason will do } +const ClassList *ClassDef::taggedInnerClasses() const +{ + return m_impl->taggedInnerClasses; +} + +void ClassDef::addTaggedInnerClass(ClassDef *cd) +{ + if (m_impl->taggedInnerClasses==0) + { + m_impl->taggedInnerClasses = new ClassList; + } + m_impl->taggedInnerClasses->append(cd); +} + +ClassDef *ClassDef::tagLessReference() const +{ + return m_impl->tagLessRef; +} + +void ClassDef::setTagLessReference(ClassDef *cd) +{ + m_impl->tagLessRef = cd; +} + +void ClassDef::removeMemberFromLists(MemberDef *md) +{ + MemberList *ml = m_impl->memberLists.first(); + while (ml) + { + ml->remove(md); + ml = m_impl->memberLists.next(); + } +} diff --git a/src/classdef.h b/src/classdef.h index a3f4ad1..9673ec9 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -267,10 +267,11 @@ class ClassDef : public Definition QCString anchor() const; bool isEmbeddedInOuterScope() const; - SrcLangExt getLanguage() const; - bool isSimple() const; + const ClassList *taggedInnerClasses() const; + ClassDef *tagLessReference() const; + //----------------------------------------------------------------------------------- // --- setters ---- //----------------------------------------------------------------------------------- @@ -293,7 +294,6 @@ class ClassDef : public Definition void addUsedClass(ClassDef *cd,const char *accessName,Protection prot); void addUsedByClass(ClassDef *cd,const char *accessName,Protection prot); void setIsStatic(bool b); - void setLanguage(SrcLangExt lang); void setCompoundType(CompoundType t); void setClassName(const char *name); @@ -306,6 +306,9 @@ class ClassDef : public Definition void setCategoryOf(ClassDef *cd); void setUsedOnly(bool b); + void addTaggedInnerClass(ClassDef *cd); + void setTagLessReference(ClassDef *cd); + //----------------------------------------------------------------------------------- // --- actions ---- //----------------------------------------------------------------------------------- @@ -328,6 +331,7 @@ class ClassDef : public Definition void writeInlineDocumentation(OutputList &ol); void writeDeclarationLink(OutputList &ol,bool &found, const char *header,bool localNames); + void removeMemberFromLists(MemberDef *md); bool visited; diff --git a/src/classlist.cpp b/src/classlist.cpp index bb6ab73..cb52541 100644 --- a/src/classlist.cpp +++ b/src/classlist.cpp @@ -36,7 +36,7 @@ static int compItems(void *item1,void *item2) ClassDef *c1=(ClassDef *)item1; ClassDef *c2=(ClassDef *)item2; static bool b = Config_getBool("SORT_BY_SCOPE_NAME"); - //printf("compItems: %d %s<->%s\n",b,c1->qualifiedName().data(),c2->qualifiedName().data()); + //printf("compItems: %d %s<->%s\n",b,c1->name().data(),c2->name().data()); if (b) { return stricmp(c1->name(), @@ -115,7 +115,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f } } -void ClassSDict::writeDocumentation(OutputList &ol,Definition *container) +void ClassSDict::writeDocumentation(OutputList &ol,Definition * container) { static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); @@ -131,14 +131,19 @@ void ClassSDict::writeDocumentation(OutputList &ol,Definition *container) ClassDef *cd=0; for (sdi.toFirst();(cd=sdi.current());++sdi) { - //printf("%s:writeDocumentation() %p=%p embedded=%d\n", - // cd->name().data(),container,cd->getOuterScope(),cd->isEmbeddedInOuterScope()); + //printf("%s:writeDocumentation() %p embedded=%d container=%p\n", + // cd->name().data(),cd->getOuterScope(),cd->isEmbeddedInOuterScope(), + // container); - if (cd->name().find('@')==-1 && cd->isEmbeddedInOuterScope() && - (container==0 || // no container -> used for groups - cd->getOuterScope()==container || // correct container -> used for namespaces and classes - (container->definitionType()==Definition::TypeFile && cd->getOuterScope()==Doxygen::globalScope && cd->partOfGroups()==0) // non grouped class with file scope -> used for files - ) + if (cd->name().find('@')==-1 && + cd->isLinkableInProject() && + cd->isEmbeddedInOuterScope() && + (container==0 || cd->partOfGroups()==0) // if container==0 -> show as part of the group docs, otherwise only show if not part of a group + //&& + //(container==0 || // no container -> used for groups + // cd->getOuterScope()==container || // correct container -> used for namespaces and classes + // (container->definitionType()==Definition::TypeFile && cd->getOuterScope()==Doxygen::globalScope && cd->partOfGroups()==0) // non grouped class with file scope -> used for files + //) ) { if (!found) diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index eac4657..3c21a75 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -34,6 +34,7 @@ CommandMap cmdMap[] = { "copydoc", CMD_COPYDOC }, { "copybrief", CMD_COPYBRIEF }, { "copydetails", CMD_COPYDETAILS }, + { "copyright", CMD_COPYRIGHT }, { "date", CMD_DATE }, { "dontinclude", CMD_DONTINCLUDE }, { "dotfile", CMD_DOTFILE }, @@ -66,7 +67,6 @@ CommandMap cmdMap[] = { "param", CMD_PARAM }, { "post", CMD_POST }, { "pre", CMD_PRE }, - { "copyright", CMD_COPYRIGHT }, { "ref", CMD_REF }, { "refitem", CMD_SECREFITEM }, { "remark", CMD_REMARK }, @@ -78,6 +78,7 @@ CommandMap cmdMap[] = { "sa", CMD_SA }, { "secreflist", CMD_SECREFLIST }, { "section", CMD_SECTION }, + { "snippet", CMD_SNIPPET }, { "subpage", CMD_SUBPAGE }, { "subsection", CMD_SUBSECTION }, { "subsubsection", CMD_SUBSUBSECTION }, diff --git a/src/cmdmapper.h b/src/cmdmapper.h index 75227ab..6a62546 100644 --- a/src/cmdmapper.h +++ b/src/cmdmapper.h @@ -118,6 +118,7 @@ enum CommandType CMD_DCOLON = 84, CMD_COPYRIGHT = 85 | SIMPLESECT_BIT, CMD_CITE = 86, + CMD_SNIPPET = 87 }; enum HtmlTagType @@ -1264,6 +1264,7 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName) int len=2; int i=locFunc.findRev("::"); if (i==-1) i=locFunc.findRev("."),len=1; + if (i==-1) i=locFunc.findRev("\\"),len=1; // for PHP if (i>0) { if (locScope.isEmpty()) @@ -1715,12 +1716,14 @@ static int yyread(char *buf,int max_size) B [ \t] BN [ \t\n\r] ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* -SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) +SCOPESEP ("::"|"\\"){BN}* +SCOPEPRE ({SCOPESEP}{ID}{BN}*)*{SCOPESEP} +SCOPENAME {SCOPEPRE}?(("~"{BN}*)?{ID}) TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">" -SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID}) -SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+ +SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?("::"|"\\"){BN}*)*)((~{BN}*)?{ID}) +SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*("::"|"\\"){BN}*)+ KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property") -KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC}) +KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC}) FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally") TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string") CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast") @@ -2062,9 +2065,14 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} generateClassOrGlobalLink(*g_code,yytext); BEGIN( ClassVar ); } +<ClassName>{ID}("\\"{ID})* { // PHP namespace + g_curClassName=substitute(yytext,"\\","::"); + addType(); + generateClassOrGlobalLink(*g_code,yytext); + BEGIN( ClassVar ); + } <PackageName>{ID}("."{ID})* { - g_curClassName=yytext; - g_curClassName=substitute(g_curClassName,".","::"); + g_curClassName=substitute(yytext,".","::"); //printf("found package: %s\n",g_curClassName.data()); addType(); codifyLines(yytext); @@ -2124,7 +2132,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} //fprintf(stderr,"***** g_curClassName=%s\n",g_curClassName.data()); if (getResolvedClass(g_currentDefinition,g_sourceFileDef,g_curClassName)==0) { - //printf("Adding new class %s\n",g_curClassName.data()); + //fprintf(stderr,"Adding new class %s\n",g_curClassName.data()); ClassDef *ncd=new ClassDef("<code>",1, g_curClassName,ClassDef::Class,0,0,FALSE); g_codeClassSDict->append(g_curClassName,ncd); @@ -2406,11 +2414,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} addType(); g_name=varname; } -<Body>{SCOPETNAME}/{BN}*"(" { // a() or c::a() or t<A,B>::a() +<Body>{SCOPETNAME}/{BN}*"(" { // a() or c::a() or t<A,B>::a() or A\B\foo() addType(); generateFunctionLink(*g_code,yytext); - //printf("---> g_classScope=%s\n",g_classScope.data()); - //g_theVarContext.addVariable(g_type,yytext); g_bracketCount=0; g_args.resize(0); g_name+=yytext; @@ -2850,6 +2856,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} //g_theCallContext.popScope(); g_parmType.resize(0);g_parmName.resize(0); int index = g_name.findRev("::"); + //fprintf(stderr,"g_name=%s\n",g_name.data()); if (index!=-1) { QCString scope = g_name.left(index); diff --git a/src/commentcnv.l b/src/commentcnv.l index ac72394..5408f68 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -300,7 +300,7 @@ void replaceComment(int offset); } } <Scan>"!>" { - if (g_lang!=SrcLangExt_F90) + if (g_lang!=SrcLangExt_Fortran) { REJECT; } @@ -384,7 +384,7 @@ void replaceComment(int offset); } } <Scan>"!>" { - if (g_lang!=SrcLangExt_F90) + if (g_lang!=SrcLangExt_Fortran) { REJECT; } @@ -587,7 +587,7 @@ void replaceComment(int offset); } } <CComment>"\n"/[ \t]*[^!] { /* end of Fortran comment */ - if (g_lang!=SrcLangExt_F90) + if (g_lang!=SrcLangExt_Fortran) { REJECT; } @@ -690,7 +690,7 @@ void replaceComment(int offset); //printf("** Adding start of comment!\n"); if (g_lang!=SrcLangExt_Python && g_lang!=SrcLangExt_VHDL && - g_lang!=SrcLangExt_F90) + g_lang!=SrcLangExt_Fortran) { ADDCHAR('/'); ADDCHAR('*'); @@ -709,7 +709,7 @@ void replaceComment(int offset); //printf("** Adding terminator for comment!\n"); if (g_lang!=SrcLangExt_Python && g_lang!=SrcLangExt_VHDL && - g_lang!=SrcLangExt_F90) + g_lang!=SrcLangExt_Fortran) { ADDCHAR('*'); ADDCHAR('/'); diff --git a/src/config.l b/src/config.l index f5e9ee0..7d3f633 100644 --- a/src/config.l +++ b/src/config.l @@ -1325,6 +1325,7 @@ void Config::check() filePatternList.append("*.for"); filePatternList.append("*.vhd"); filePatternList.append("*.vhdl"); + filePatternList.append("*.tcl"); if (portable_fileSystemIsCaseSensitive()) { // unix => case sensitive match => also include useful uppercase versions @@ -1346,6 +1347,7 @@ void Config::check() filePatternList.append("*.F"); filePatternList.append("*.VHD"); filePatternList.append("*.VHDL"); + filePatternList.append("*.TCL"); } } diff --git a/src/definition.cpp b/src/definition.cpp index 0851c9b..a8a7300 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -78,6 +78,8 @@ class DefinitionImpl QCString defFileName; int defLine; QCString defFileExt; + + SrcLangExt lang; }; DefinitionImpl::DefinitionImpl() @@ -135,6 +137,7 @@ void DefinitionImpl::init(const char *df,int dl, xrefListItems = 0; hidden = FALSE; isArtificial = FALSE; + lang = SrcLangExt_Unknown; } //----------------------------------------------------------------------------------------- @@ -540,13 +543,13 @@ void Definition::setInbodyDocumentation(const char *d,const char *inbodyFile,int static bool readCodeFragment(const char *fileName, int &startLine,int &endLine,QCString &result) { - static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES"); //printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine); if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name QCString filter = getFileFilter(fileName,TRUE); FILE *f=0; bool usePipe = !filter.isEmpty() && filterSourceFiles; + SrcLangExt lang = getLanguageFromFileName(fileName); if (!usePipe) // no filter given or wanted { f = portable_fopen(fileName,"r"); @@ -557,7 +560,11 @@ static bool readCodeFragment(const char *fileName, Debug::print(Debug::ExtCmd,0,"Executing popen(`%s`)\n",cmd.data()); f = portable_popen(cmd,"r"); } - bool found=vhdlOpt; // for VHDL no bracket search is possible + bool found = lang==SrcLangExt_VHDL || + lang==SrcLangExt_Tcl || + lang==SrcLangExt_Python || + lang==SrcLangExt_Fortran; + // for VHDL, TCL, Python, and Fortran no bracket search is possible if (f) { int c=0; @@ -913,14 +920,7 @@ void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, //printf("class=%p scope=%s scopeName=%s\n",md->getClassDef(),scope.data(),scopeName); if (!scope.isEmpty() && scope!=scopeName) { - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) - { - name.prepend(scope+"."); - } - else - { - name.prepend(scope+"::"); - } + name.prepend(scope+getLanguageSpecificSeparator(m_impl->lang)); } if (!md->isObjCMethod() && (md->isFunction() || md->isSlot() || @@ -1557,6 +1557,11 @@ void Definition::setReference(const char *r) m_impl->ref=r; } +SrcLangExt Definition::getLanguage() const +{ + return m_impl->lang; +} + void Definition::_setSymbolName(const QCString &name) { m_symbolName=name; @@ -1584,6 +1589,10 @@ void Definition::makeResident() const { } +void Definition::setLanguage(SrcLangExt lang) +{ + m_impl->lang=lang; +} void Definition::flushToDisk() const { @@ -1610,6 +1619,7 @@ void Definition::flushToDisk() const marshalQCString (Doxygen::symbolStorage,m_impl->defFileName); marshalInt (Doxygen::symbolStorage,m_impl->defLine); marshalQCString (Doxygen::symbolStorage,m_impl->defFileExt); + marshalInt (Doxygen::symbolStorage,(int)m_impl->lang); marshalUInt(Doxygen::symbolStorage,END_MARKER); delete that->m_impl; that->m_impl = 0; @@ -1642,6 +1652,7 @@ void Definition::loadFromDisk() const m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage); m_impl->defLine = unmarshalInt (Doxygen::symbolStorage); m_impl->defFileExt = unmarshalQCString (Doxygen::symbolStorage); + m_impl->lang = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage); marker = unmarshalUInt(Doxygen::symbolStorage); assert(marker==END_MARKER); } diff --git a/src/definition.h b/src/definition.h index 46b81a0..38a11b2 100644 --- a/src/definition.h +++ b/src/definition.h @@ -24,6 +24,7 @@ #include <sys/types.h> #include "lockingptr.h" +#include "util.h" class FileDef; class OutputList; @@ -240,6 +241,9 @@ class Definition : public DefinitionIntf, public LockableObj */ FileDef *getBodyDef(); + /** Returns the programming language this definition was written in. */ + SrcLangExt getLanguage() const; + LockingPtr<GroupList> partOfGroups() const; LockingPtr< QList<ListItemInfo> > xrefListItems() const; @@ -250,6 +254,7 @@ class Definition : public DefinitionIntf, public LockableObj LockingPtr<MemberSDict> getReferencesMembers() const; LockingPtr<MemberSDict> getReferencedByMembers() const; + //----------------------------------------------------------------------------------- // ---- setters ----- //----------------------------------------------------------------------------------- @@ -293,6 +298,7 @@ class Definition : public DefinitionIntf, public LockableObj virtual void setHidden(bool b); void setArtificial(bool b); + void setLanguage(SrcLangExt lang); //----------------------------------------------------------------------------------- // --- actions ---- diff --git a/src/docparser.cpp b/src/docparser.cpp index ee2a1c0..a1ad75c 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -332,6 +332,7 @@ static void checkArgumentName(const QCString &name,bool isParam) LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ? g_memberDef->argumentList() : g_memberDef->declArgumentList(); + SrcLangExt lang = g_memberDef->getLanguage(); //printf("isDocsForDefinition()=%d\n",g_memberDef->isDocsForDefinition()); if (al==0) return; // no argument list @@ -340,6 +341,7 @@ static void checkArgumentName(const QCString &name,bool isParam) while ((i=re.match(name,p,&l))!=-1) // to handle @param x,y { QCString aName=name.mid(i,l); + if (lang==SrcLangExt_Fortran) aName=aName.lower(); //printf("aName=`%s'\n",aName.data()); ArgumentListIterator ali(*al); Argument *a; @@ -347,6 +349,7 @@ static void checkArgumentName(const QCString &name,bool isParam) for (ali.toFirst();(a=ali.current());++ali) { QCString argName = g_memberDef->isDefine() ? a->type : a->name; + if (lang==SrcLangExt_Fortran) argName=argName.lower(); argName=argName.stripWhiteSpace(); //printf("argName=`%s'\n",argName.data()); if (argName.right(3)=="...") argName=argName.left(argName.length()-3); @@ -399,6 +402,7 @@ static void checkUndocumentedParams() LockingPtr<ArgumentList> al=g_memberDef->isDocsForDefinition() ? g_memberDef->argumentList() : g_memberDef->declArgumentList(); + SrcLangExt lang = g_memberDef->getLanguage(); if (al!=0) { ArgumentListIterator ali(*al); @@ -407,9 +411,10 @@ static void checkUndocumentedParams() for (ali.toFirst();(a=ali.current());++ali) { QCString argName = g_memberDef->isDefine() ? a->type : a->name; + if (lang==SrcLangExt_Fortran) argName = argName.lower(); argName=argName.stripWhiteSpace(); if (argName.right(3)=="...") argName=argName.left(argName.length()-3); - if (getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python && argName=="self") + if (g_memberDef->getLanguage()==SrcLangExt_Python && argName=="self") { // allow undocumented self parameter for Python } @@ -430,8 +435,9 @@ static void checkUndocumentedParams() for (ali.toFirst();(a=ali.current());++ali) { QCString argName = g_memberDef->isDefine() ? a->type : a->name; + if (lang==SrcLangExt_Fortran) argName = argName.lower(); argName=argName.stripWhiteSpace(); - if (getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python && argName=="self") + if (g_memberDef->getLanguage()==SrcLangExt_Python && argName=="self") { // allow undocumented self parameter for Python } @@ -477,7 +483,7 @@ static void detectNoDocumentedParams() LockingPtr<ArgumentList> al = g_memberDef->argumentList(); LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList(); QCString returnType = g_memberDef->typeString(); - bool isPython = getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python; + bool isPython = g_memberDef->getLanguage()==SrcLangExt_Python; if (!g_memberDef->hasDocumentedParams() && g_hasParamCommand) @@ -1005,7 +1011,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) { Definition *compound=0; MemberDef *member=0; - QCString name = linkToText(g_token->name,TRUE); + QCString name = linkToText(SrcLangExt_Unknown,g_token->name,TRUE); int len = g_token->name.length(); ClassDef *cd=0; bool ambig; @@ -1762,6 +1768,17 @@ void DocInclude::parse() case HtmlInclude: readTextFileByName(m_file,m_text); break; + case Snippet: + readTextFileByName(m_file,m_text); + // check here for the existance of the blockId inside the file, so we + // only generate the warning once. + int count; + if (!m_blockId.isEmpty() && (count=m_text.contains(m_blockId.data()))!=2) + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: block marked with %s for \\snippet should appear twice in file %s, found it %d times\n", + m_blockId.data(),m_file.data(),count); + } + break; } } @@ -2285,7 +2302,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) : bool isFile = compound ? (compound->definitionType()==Definition::TypeFile ? TRUE : FALSE) : FALSE; - m_text = linkToText(target,isFile); + m_text = linkToText(compound?compound->getLanguage():SrcLangExt_Unknown,target,isFile); m_anchor = anchor; if (compound && compound->isLinkable()) // ref to compound { @@ -2318,7 +2335,7 @@ DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) : return; } } - m_text = linkToText(target,FALSE); + m_text = linkToText(SrcLangExt_Unknown,target,FALSE); warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\ref command", qPrint(target)); } @@ -2420,7 +2437,7 @@ DocCite::DocCite(DocNode *parent,const QCString &target,const QCString &) //cont // m_text.data(),m_ref.data(),m_file.data(),m_anchor.data()); return; } - m_text = linkToText(target,FALSE); + m_text = linkToText(SrcLangExt_Unknown,target,FALSE); warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: unable to resolve reference to `%s' for \\cite command", qPrint(target)); } @@ -3851,10 +3868,21 @@ int DocHtmlList::parse() { // ok, we can go on. } + else if (((m_type==Unordered && tagId==HTML_UL) || + (m_type==Ordered && tagId==HTML_OL) + ) && g_token->endTag + ) // found empty list + { + // add dummy item to obtain valid HTML + m_children.append(new DocHtmlListItem(this,HtmlAttribList(),1)); + warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: empty list!"); + retval = RetVal_EndList; + goto endlist; + } else // found some other tag { warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected <li> tag but " - "found <%s> instead!",qPrint(g_token->name)); + "found <%s%s> instead!",g_token->endTag?"/":"",qPrint(g_token->name)); doctokenizerYYpushBackHtmlTag(g_token->name); goto endlist; } @@ -4744,7 +4772,22 @@ void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) tokToString(tok),qPrint(cmdName)); return; } - DocInclude *inc = new DocInclude(this,g_token->name,g_context,t,g_isExample,g_exampleName); + QCString fileName = g_token->name; + QCString blockId; + if (t==DocInclude::Snippet) + { + doctokenizerYYsetStateSnippet(); + tok=doctokenizerYYlex(); + doctokenizerYYsetStatePara(); + if (tok!=TK_WORD) + { + warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: expected block identifier, but found token %s instead while parsing the %s command", + tokToString(tok),qPrint(cmdName)); + return; + } + blockId = "["+g_token->name+"]"; + } + DocInclude *inc = new DocInclude(this,fileName,g_context,t,g_isExample,g_exampleName,blockId); m_children.append(inc); inc->parse(); } @@ -5150,6 +5193,9 @@ int DocPara::handleCommand(const QCString &cmdName) case CMD_VERBINCLUDE: handleInclude(cmdName,DocInclude::VerbInclude); break; + case CMD_SNIPPET: + handleInclude(cmdName,DocInclude::Snippet); + break; case CMD_SKIP: handleIncludeOperator(cmdName,DocIncOperator::Skip); break; @@ -6440,7 +6486,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"); + //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); docParserPushContext(); if (ctx && ctx!=Doxygen::globalScope && @@ -6471,7 +6517,9 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, { g_searchUrl=md->getOutputFileBase(); Doxygen::searchIndex->setCurrentDoc( - (fortranOpt?theTranslator->trSubprogram(TRUE,TRUE):theTranslator->trMember(TRUE,TRUE))+" "+md->qualifiedName(), + (md->getLanguage()==SrcLangExt_Fortran ? + theTranslator->trSubprogram(TRUE,TRUE): + theTranslator->trMember(TRUE,TRUE))+" "+md->qualifiedName(), g_searchUrl, md->anchor()); } @@ -6479,10 +6527,14 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, { g_searchUrl=ctx->getOutputFileBase(); QCString name = ctx->qualifiedName(); - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + + SrcLangExt lang = ctx->getLanguage(); + QCString sep = getLanguageSpecificSeparator(lang); + if (sep!="::") { - name = substitute(name,"::","."); + name = substitute(name,"::",sep); } + switch (ctx->definitionType()) { case Definition::TypePage: @@ -6506,15 +6558,15 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, break; case Definition::TypeNamespace: { - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp) { name = theTranslator->trPackage(name); } - else if(fortranOpt) + else if (lang==SrcLangExt_Fortran) { name.prepend(theTranslator->trModule(TRUE,TRUE)+" "); } - else + else { name.prepend(theTranslator->trNamespace(TRUE,TRUE)+" "); } @@ -6601,7 +6653,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, return root; } -DocNode *validatingParseText(const char *input,bool forceBreaks) +DocNode *validatingParseText(const char *input) { // store parser state so we can re-enter this function if needed docParserPushContext(); @@ -6629,7 +6681,7 @@ DocNode *validatingParseText(const char *input,bool forceBreaks) g_paramsFound.clear(); g_searchUrl=""; - DocText *txt = new DocText(forceBreaks); + DocText *txt = new DocText; if (input) { diff --git a/src/docparser.h b/src/docparser.h index bdd40b0..f679bfb 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -69,7 +69,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, /*! Main entry point for parsing simple text fragments. These * fragments are limited to words, whitespace and symbols. */ -DocNode *validatingParseText(const char *input,bool forceBreaks=FALSE); +DocNode *validatingParseText(const char *input); /*! Searches for section and anchor commands in the input */ void docFindSections(const char *input, @@ -396,35 +396,39 @@ class DocVerbatim : public DocNode class DocInclude : public DocNode { public: - enum Type { Include, DontInclude, VerbInclude, HtmlInclude, IncWithLines }; + enum Type { Include, DontInclude, VerbInclude, HtmlInclude, IncWithLines, Snippet }; DocInclude(DocNode *parent,const QCString &file, const QCString context, Type t, - bool isExample,const QCString exampleFile) : + bool isExample,const QCString exampleFile, + const QCString blockId) : m_file(file), m_context(context), m_type(t), - m_isExample(isExample), m_exampleFile(exampleFile) { m_parent = parent; } - Kind kind() const { return Kind_Include; } + m_isExample(isExample), m_exampleFile(exampleFile), + m_blockId(blockId) { m_parent = parent; } + Kind kind() const { return Kind_Include; } QCString file() const { return m_file; } QCString extension() const { int i=m_file.findRev('.'); - if (i!=-1) - return m_file.right(m_file.length()-i); - else - return ""; - } - Type type() const { return m_type; } + if (i!=-1) + return m_file.right(m_file.length()-i); + else + return ""; + } + Type type() const { return m_type; } QCString text() const { return m_text; } QCString context() const { return m_context; } - bool isExample() const { return m_isExample; } + QCString blockId() const { return m_blockId; } + bool isExample() const { return m_isExample; } QCString exampleFile() const { return m_exampleFile; } - void accept(DocVisitor *v) { v->visit(this); } + void accept(DocVisitor *v) { v->visit(this); } void parse(); private: QCString m_file; QCString m_context; QCString m_text; - Type m_type; - bool m_isExample; + Type m_type; + bool m_isExample; QCString m_exampleFile; + QCString m_blockId; }; /*! @brief Node representing a include/dontinclude operator block */ @@ -1218,14 +1222,10 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode class DocText : public CompAccept<DocText>, public DocNode { public: - DocText(bool forceBreaks) : m_forceBreaks(forceBreaks) {} + DocText() {} Kind kind() const { return Kind_Text; } void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); } void parse(); - bool forceBreaks() const { return m_forceBreaks; } - - private: - bool m_forceBreaks; }; /*! @brief Root node of documentation tree */ diff --git a/src/docsets.cpp b/src/docsets.cpp index 17f8ca8..7d7dd2e 100644 --- a/src/docsets.cpp +++ b/src/docsets.cpp @@ -254,7 +254,14 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md,const char *) // determine language QCString lang; SrcLangExt langExt = SrcLangExt_Cpp; - if (fd) langExt = getLanguageFromFileName(fd->name()); + if (md) + { + langExt = md->getLanguage(); + } + else if (context) + { + langExt = context->getLanguage(); + } switch (langExt) { case SrcLangExt_Cpp: @@ -277,9 +284,10 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md,const char *) 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_Fortran: lang="fortran"; break; // Fortran case SrcLangExt_VHDL: lang="vhdl"; break; // VHDL case SrcLangExt_XML: lang="xml"; break; // DBUS XML + case SrcLangExt_Tcl: lang="tcl"; break; // Tcl case SrcLangExt_Unknown: lang="unknown"; break; // should not happen! } diff --git a/src/doctokenizer.h b/src/doctokenizer.h index 1ea6570..5c352ca 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -149,5 +149,6 @@ void doctokenizerYYsetStateSkipTitle(); void doctokenizerYYsetStateAnchor(); void doctokenizerYYsetInsidePre(bool b); void doctokenizerYYpushBackHtmlTag(const char *tag); +void doctokenizerYYsetStateSnippet(); #endif diff --git a/src/doctokenizer.l b/src/doctokenizer.l index 104b75b..f68fd40 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -379,6 +379,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3} %x St_Text %x St_SkipTitle %x St_Anchor +%x St_Snippet %x St_Sections %s St_SecLabel1 @@ -961,6 +962,13 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3} <St_SecTitle,St_SecLabel1,St_SecLabel2>. { warn(g_fileName,yylineno,"warning: Unexpected character `%s' while looking for section label or title",yytext); } + +<St_Snippet>[^\n]+ | +<St_Snippet>[^\n]*\n { + g_token->name = yytext; + g_token->name = g_token->name.stripWhiteSpace(); + return TK_WORD; + } /* Generic rules that work for all states */ <*>\n { @@ -1126,6 +1134,11 @@ void doctokenizerYYsetStateAnchor() BEGIN(St_Anchor); } +void doctokenizerYYsetStateSnippet() +{ + BEGIN(St_Snippet); +} + void doctokenizerYYcleanup() { yy_delete_buffer( YY_CURRENT_BUFFER ); diff --git a/src/dot.cpp b/src/dot.cpp index 8609efa..27e559f 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -609,11 +609,14 @@ static void checkDotResult(const QCString &imgName) { if (Config_getEnum("DOT_IMAGE_FORMAT")=="png") { - QFile f(imgName); - if (f.open(IO_ReadOnly)) + //QFile f(imgName); + FILE *f = fopen(imgName,"rb"); + //if (f.open(IO_ReadOnly)) + if (f) { char data[4]; - if (f.readBlock(data,4)==4) + if (fread(data,1,4,f)==4) + //if (f.readBlock(data,4)==4) { if (!(data[1]=='P' && data[2]=='N' && data[3]=='G')) { @@ -628,6 +631,7 @@ static void checkDotResult(const QCString &imgName) { err("error: Could not read image `%s' generated by dot!\n",imgName.data()); } + fclose(f); } else { @@ -757,8 +761,8 @@ void DotRunner::addPostProcessing(const char *cmd,const char *args) bool DotRunner::run() { int exitCode=0; - static QCString dotExe = Config_getString("DOT_PATH")+"dot"; - static bool multiTargets = Config_getBool("DOT_MULTI_TARGETS"); + QCString dotExe = Config_getString("DOT_PATH")+"dot"; + bool multiTargets = Config_getBool("DOT_MULTI_TARGETS"); QCString dotArgs; QListIterator<QCString> li(m_jobs); QCString *s; @@ -1139,21 +1143,24 @@ DotManager::DotManager() : m_dotMaps(1007) m_queue = new DotRunnerQueue; int i; int numThreads = QMIN(32,Config_getInt("DOT_NUM_THREADS")); - if (numThreads==0) numThreads = QMAX(1,QThread::idealThreadCount()+1); - for (i=0;i<numThreads;i++) + if (numThreads!=1) { - DotWorkerThread *thread = new DotWorkerThread(i,m_queue); - thread->start(); - if (thread->isRunning()) + if (numThreads==0) numThreads = QMAX(2,QThread::idealThreadCount()+1); + for (i=0;i<numThreads;i++) { - m_workers.append(thread); - } - else // no more threads available! - { - delete thread; + DotWorkerThread *thread = new DotWorkerThread(i,m_queue); + thread->start(); + if (thread->isRunning()) + { + m_workers.append(thread); + } + else // no more threads available! + { + delete thread; + } } + ASSERT(m_workers.count()>0); } - ASSERT(m_workers.count()>0); } DotManager::~DotManager() @@ -1222,7 +1229,14 @@ bool DotManager::run() uint numDotMaps = m_dotMaps.count(); if (numDotRuns+numDotMaps>1) { - msg("Generating dot graphs using %d parallel threads...\n",QMIN(numDotRuns+numDotMaps,m_workers.count())); + if (m_workers.count()==0) + { + msg("Generating dot graphs in single threaded mode...\n"); + } + else + { + msg("Generating dot graphs using %d parallel threads...\n",QMIN(numDotRuns+numDotMaps,m_workers.count())); + } } int i=1; QListIterator<DotRunner> li(m_dotRuns); @@ -1246,41 +1260,53 @@ bool DotManager::run() portable_sysTimerStart(); // fill work queue with dot operations DotRunner *dr; - for (li.toFirst();(dr=li.current());++li) - { - m_queue->enqueue(dr); - } int prev=1; - // wait for the queue to become empty - while ((i=m_queue->count())>0) + if (m_workers.count()==0) // no threads to work with { - i = numDotRuns - i; - while (i>=prev) + for (li.toFirst();(dr=li.current());++li) { msg("Running dot for graph %d/%d\n",prev,numDotRuns); + dr->run(); prev++; } - portable_sleep(100); } - while ((int)numDotRuns>=prev) + else // use multiple threads to run instances of dot in parallel { - msg("Running dot for graph %d/%d\n",prev,numDotRuns); - prev++; - } - // signal the workers we are done - for (i=0;i<(int)m_workers.count();i++) - { - m_queue->enqueue(0); // add terminator for each worker - } - // wait for the workers to finish - for (i=0;i<(int)m_workers.count();i++) - { - m_workers.at(i)->wait(); - } - // clean up dot files from main thread - for (i=0;i<(int)m_workers.count();i++) - { - m_workers.at(i)->cleanup(); + for (li.toFirst();(dr=li.current());++li) + { + m_queue->enqueue(dr); + } + // wait for the queue to become empty + while ((i=m_queue->count())>0) + { + i = numDotRuns - i; + while (i>=prev) + { + msg("Running dot for graph %d/%d\n",prev,numDotRuns); + prev++; + } + portable_sleep(100); + } + while ((int)numDotRuns>=prev) + { + msg("Running dot for graph %d/%d\n",prev,numDotRuns); + prev++; + } + // signal the workers we are done + for (i=0;i<(int)m_workers.count();i++) + { + m_queue->enqueue(0); // add terminator for each worker + } + // wait for the workers to finish + for (i=0;i<(int)m_workers.count();i++) + { + m_workers.at(i)->wait(); + } + // clean up dot files from main thread + for (i=0;i<(int)m_workers.count();i++) + { + m_workers.at(i)->cleanup(); + } } portable_sysTimerStop(); if (setPath) @@ -1572,7 +1598,7 @@ void DotNode::writeBox(FTextStream &t, writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priStaticMethods),m_classDef,TRUE); writeBoxMemberList(t,'-',m_classDef->getMemberList(MemberList::priSlots),m_classDef); } - if (m_classDef->getLanguage()!=SrcLangExt_F90 && + if (m_classDef->getLanguage()!=SrcLangExt_Fortran && m_classDef->getMemberGroupSDict()) { MemberGroupSDict::Iterator mgdi(*m_classDef->getMemberGroupSDict()); @@ -3301,7 +3327,7 @@ void DotCallGraph::buildGraph(DotNode *n,MemberDef *md,int distance) QCString tooltip = rmd->briefDescriptionAsTooltip(); bn = new DotNode( m_curNodeNumber++, - linkToText(name,FALSE), + linkToText(rmd->getLanguage(),name,FALSE), tooltip, uniqueId, 0 //distance @@ -3388,7 +3414,7 @@ DotCallGraph::DotCallGraph(MemberDef *md,bool inverse) name = md->qualifiedName(); } m_startNode = new DotNode(m_curNodeNumber++, - linkToText(name,FALSE), + linkToText(md->getLanguage(),name,FALSE), "", uniqueId.data(), TRUE // root node @@ -3837,8 +3863,11 @@ void writeDotImageMapFromFile(FTextStream &t, if (imgExt=="svg") // vector graphics { - writeSVGFigureLink(t,relPath,inFile,inFile+".svg"); - DotFilePatcher patcher(inFile+".svg"); + //writeSVGFigureLink(t,relPath,inFile,inFile+".svg"); + //DotFilePatcher patcher(inFile+".svg"); + QCString svgName=outDir+"/"+baseName+".svg"; + writeSVGFigureLink(t,relPath,baseName,svgName); + DotFilePatcher patcher(svgName); patcher.addSVGConversion(relPath,TRUE,context,TRUE,graphId); patcher.run(); } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 9d4b870..f9918ff 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -26,6 +26,7 @@ #include <qtextcodec.h> #include <unistd.h> #include <errno.h> +#include <qptrdict.h> #include "version.h" #include "doxygen.h" @@ -70,6 +71,7 @@ #include "pyscanner.h" #include "fortranscanner.h" #include "dbusxmlscanner.h" +#include "tclscanner.h" #include "code.h" #include "objcache.h" #include "store.h" @@ -522,6 +524,7 @@ static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool inclu gd->setInbodyDocumentation( root->inbodyDocs, root->inbodyFile, root->inbodyLine ); gd->addSectionsToDefinition(root->anchors); gd->setRefItems(root->sli); + gd->setLanguage(root->lang); } else { @@ -540,6 +543,7 @@ static void buildGroupListFiltered(EntryNav *rootNav,bool additional, bool inclu gd->addSectionsToDefinition(root->anchors); Doxygen::groupSDict->append(root->name,gd); gd->setRefItems(root->sli); + gd->setLanguage(root->lang); } } @@ -693,11 +697,10 @@ static void buildFileList(EntryNav *rootNav) else { const char *fn = root->fileName.data(); - QCString text; + QCString text(4096); text.sprintf("warning: the name `%s' supplied as " "the second argument in the \\file statement ", - qPrint(root->name) - ); + qPrint(root->name)); if (ambig) // name is ambiguous { text+="matches the following input files:\n"; @@ -1172,30 +1175,6 @@ static void addClassToContext(EntryNav *rootNav) fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1); cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); - cd->setLanguage(root->lang); - 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()); - - ArgumentList *tArgList = - getTemplateArgumentsFromName(fullName,root->tArgLists); - //printf("class %s template args=%s\n",fullName.data(), - // tArgList ? tempArgListToString(tArgList).data() : "<none>"); - cd->setTemplateArguments(tArgList); - cd->setProtection(root->protection); - cd->setIsStatic(root->stat); - - // file definition containing the class cd - cd->setBodySegment(root->bodyLine,root->endBodyLine); - cd->setBodyDef(fd); - - // see if the class is found inside a namespace - //bool found=addNamespace(root,cd); - - - // the empty string test is needed for extract all case - cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); cd->insertUsedFile(root->fileName); // add class to the list @@ -1351,6 +1330,184 @@ void distributeClassGroupRelations() } } +//---------------------------- + +static ClassDef *createTagLessInstance(ClassDef *rootCd,ClassDef *templ,const QCString &fieldName) +{ + QCString fullName = removeAnonymousScopes(templ->name()); + if (fullName.right(2)=="::") fullName=fullName.left(fullName.length()-2); + fullName+="."+fieldName; + ClassDef *cd = new ClassDef(templ->getDefFileName(), + templ->getDefLine(), + fullName, + templ->compoundType()); + cd->setDocumentation(templ->documentation(),templ->docFile(),templ->docLine()); // copy docs to definition + cd->setBriefDescription(templ->briefDescription(),templ->briefFile(),templ->briefLine()); + cd->setLanguage(templ->getLanguage()); + cd->setBodySegment(templ->getStartBodyLine(),templ->getEndBodyLine()); + cd->setBodyDef(templ->getBodyDef()); + cd->setOuterScope(rootCd->getOuterScope()); + if (rootCd->getOuterScope()!=Doxygen::globalScope) + { + rootCd->getOuterScope()->addInnerCompound(cd); + } + FileDef *fd = templ->getFileDef(); + if (fd) + { + cd->setFileDef(fd); + fd->insertClass(cd); + } + LockingPtr<GroupList> groups = rootCd->partOfGroups(); + if ( groups!=0 ) + { + GroupListIterator gli(*groups); + GroupDef *gd; + for (gli.toFirst();(gd=gli.current());++gli) + { + cd->makePartOfGroup(gd); + gd->addClass(cd); + } + } + //cd->insertUsedFile(root->fileName); + //printf("** adding class %s based on %s\n",fullName.data(),templ->name().data()); + Doxygen::classSDict->append(fullName,cd); + + MemberList *ml = templ->getMemberList(MemberList::pubAttribs); + if (ml) + { + MemberListIterator li(*ml); + MemberDef *md; + for (li.toFirst();(md=li.current());++li) + { + //printf(" Member %s type=%s\n",md->name().data(),md->typeString()); + MemberDef *imd = new MemberDef(md->getDefFileName(),md->getDefLine(), + md->typeString(),md->name(),md->argsString(),md->excpString(), + md->protection(),md->virtualness(),md->isStatic(),Member, + md->memberType(), + 0,0); + imd->setMemberClass(cd); + imd->setDocumentation(md->documentation(),md->docFile(),md->docLine()); + imd->setBriefDescription(md->briefDescription(),md->briefFile(),md->briefLine()); + imd->setInbodyDocumentation(md->inbodyDocumentation(),md->inbodyFile(),md->inbodyLine()); + imd->setMemberSpecifiers(md->getMemberSpecifiers()); + imd->setMemberGroupId(md->getMemberGroupId()); + imd->setInitializer(md->initializer()); + imd->setMaxInitLines(md->initializerLines()); + imd->setBitfields(md->bitfieldString()); + imd->setLanguage(md->getLanguage()); + cd->insertMember(imd); + } + } + return cd; +} + +/** Look through the members of class \a cd and its public members. + * If there is a member m of a tag less struct/union, + * then we create a duplicate of the struct/union with the name of the + * member to identify it. + * So if cd has name S, then the tag less struct/union will get name S.m + * Since tag less structs can be nested we need to call this function + * recursively. Later on we need to patch the member types so we keep + * track of the hierarchy of classes we create. + */ +static void processTagLessClasses(ClassDef *rootCd, + ClassDef *cd, + ClassDef *tagParentCd, + const QCString &prefix,int count) +{ + printf("%d: processTagLessClasses %s\n",count,cd->name().data()); + //printf("checking members for %s\n",cd->name().data()); + if (cd->getInnerClasses()) + { + MemberList *ml = cd->getMemberList(MemberList::pubAttribs); + if (ml) + { + MemberListIterator li(*ml); + MemberDef *md; + for (li.toFirst();(md=li.current());++li) + { + QCString type = md->typeString(); + if (type.find("::@")!=-1) // member of tag less struct/union + { + ClassSDict::Iterator it(*cd->getInnerClasses()); + ClassDef *icd; + for (it.toFirst();(icd=it.current());++it) + { + printf(" member %s: type='%s'\n",md->name().data(),type.data()); + //printf(" comparing '%s'<->'%s'\n",type.data(),icd->name().data()); + if (type.find(icd->name())!=-1) // matching tag less struct/union + { + QCString name = md->name(); + if (name.at(0)=='@') name = "__unnamed__"; + if (!prefix.isEmpty()) name.prepend(prefix+"."); + //printf(" found %s for class %s\n",name.data(),cd->name().data()); + ClassDef *ncd = createTagLessInstance(rootCd,icd,name); + processTagLessClasses(rootCd,icd,ncd,name,count+1); + //printf(" addTagged %s to %s\n",ncd->name().data(),cd->name().data()); + tagParentCd->addTaggedInnerClass(ncd); + ncd->setTagLessReference(icd); + + // replace tag-less type for generated/original member + // by newly created class name. + // note the difference between changing cd and tagParentCd. + // for the initial call this is the same pointer, but for + // recursive calls cd is the original tag-less struct (of which + // there is only one instance) and tagParentCd is the newly + // generated tagged struct of which there can be multiple instances! + MemberList *pml = tagParentCd->getMemberList(MemberList::pubAttribs); + if (pml) + { + MemberListIterator pli(*pml); + MemberDef *pmd; + for (pli.toFirst();(pmd=pli.current());++pli) + { + if (pmd->name()==md->name()) + { + pmd->setType(substitute(pmd->typeString(),icd->name(),ncd->name())); + } + } + } + } + } + } + } + } + } +} + +static void findTagLessClasses(ClassDef *cd) +{ + if (cd->getInnerClasses()) + { + ClassSDict::Iterator it(*cd->getInnerClasses()); + ClassDef *icd; + for (it.toFirst();(icd=it.current());++it) + { + if (icd->name().find("@")==-1) // process all non-anonymous inner classes + { + findTagLessClasses(icd); + } + } + } + + processTagLessClasses(cd,cd,cd,"",0); // process tag less inner struct/classes (if any) +} + +static void findTagLessClasses() +{ + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd; + for (cli.toFirst();(cd=cli.current());++cli) // for each class + { + Definition *scope = cd->getOuterScope(); + if (scope && scope->definitionType()!=Definition::TypeClass) // that is not nested + { + findTagLessClasses(cd); + } + } +} + + //---------------------------------------------------------------------- // build a list of all namespaces mentioned in the documentation // and all namespaces that have a documentation block before their definition. @@ -1383,42 +1540,14 @@ static void buildNamespaceList(EntryNav *rootNav) NamespaceDef *nd; if ((nd=Doxygen::namespaceSDict->find(fullName))) // existing namespace { -#if 0 - if (!root->doc.isEmpty() || !root->brief.isEmpty()) // block contains docs - { - if (nd->documentation().isEmpty() && !root->doc.isEmpty()) - { -#endif - nd->setDocumentation(root->doc,root->docFile,root->docLine); - nd->setName(fullName); // change name to match docs - nd->addSectionsToDefinition(root->anchors); -#if 0 - } - else if (!nd->documentation().isEmpty() && !root->doc.isEmpty()) - { - warn( - root->fileName,root->startLine, - "warning: namespace %s already has a detailed description found in file %s at line %d. " - "Skipping the documentation found here.", - fullName.data(),nd->docFile().data(),nd->docLine()); - } - if (nd->briefDescription().isEmpty() && !root->brief.isEmpty()) - { -#endif - nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); -#if 0 - nd->setName(fullName); // change name to match docs - } - else if (!nd->briefDescription().isEmpty() && !root->brief.isEmpty()) - { - warn(root->fileName,root->startLine, - "warning: namespace %s already has a brief description found in file %s at line %d. " - "Skipping the documentation found here.", - fullName.data(),nd->docFile().data(),nd->docLine() - ); - } + nd->setDocumentation(root->doc,root->docFile,root->docLine); + nd->setName(fullName); // change name to match docs + nd->addSectionsToDefinition(root->anchors); + nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); + if (nd->getLanguage()==SrcLangExt_Unknown) + { + nd->setLanguage(root->lang); } -#endif // file definition containing the namespace nd FileDef *fd=rootNav->fileDef(); @@ -1436,13 +1565,14 @@ static void buildNamespaceList(EntryNav *rootNav) tagName=rootNav->tagInfo()->tagName; tagFileName=rootNav->tagInfo()->fileName; } - //printf("++ new namespace %s\n",fullName.data()); + //printf("++ new namespace %s lang=%s\n",fullName.data(),langToString(root->lang).data()); NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,fullName,tagName,tagFileName); nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); nd->addSectionsToDefinition(root->anchors); nd->setHidden(root->hidden); nd->setArtificial(root->artificial); + nd->setLanguage(root->lang); //printf("Adding namespace to group\n"); addNamespaceToGroups(root,nd); @@ -1527,7 +1657,7 @@ static void findUsingDirectives(EntryNav *rootNav) // see if the using statement was found inside a namespace or inside // the global file scope. if (rootNav->parent() && rootNav->parent()->section()==Entry::NAMESPACE_SEC && - (fd==0 || !fd->isJava()) // not a .java file + (fd==0 || fd->getLanguage()!=SrcLangExt_Java) // not a .java file ) { nsName=stripAnonymousNamespaceScope(rootNav->parent()->name()); @@ -1604,7 +1734,7 @@ static void findUsingDirectives(EntryNav *rootNav) } else // unknown namespace, but add it anyway. { - //printf("++ new unknown namespace %s\n",name.data()); + //printf("++ new unknown namespace %s lang=%s\n",name.data(),langToString(root->lang).data()); NamespaceDef *nd=new NamespaceDef(root->fileName,root->startLine,name); nd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition nd->setBriefDescription(root->brief,root->briefFile,root->briefLine); @@ -1612,6 +1742,7 @@ static void findUsingDirectives(EntryNav *rootNav) //printf("** Adding namespace %s hidden=%d\n",name.data(),root->hidden); nd->setHidden(root->hidden); nd->setArtificial(TRUE); + nd->setLanguage(root->lang); QListIterator<Grouping> gli(*root->groups); Grouping *g; @@ -1723,6 +1854,7 @@ static void findUsingDeclarations(EntryNav *rootNav) name,ClassDef::Class); Doxygen::hiddenClasses->append(root->name,usingCd); usingCd->setArtificial(TRUE); + usingCd->setLanguage(root->lang); } else { @@ -1832,6 +1964,7 @@ static void findUsingDeclImports(EntryNav *rootNav) newMd->setMaxInitLines(md->initializerLines()); newMd->setMemberGroupId(root->mGrpId); newMd->setMemberSpecifiers(md->getMemberSpecifiers()); + newMd->setLanguage(root->lang); rootNav->releaseEntry(); } @@ -1895,7 +2028,8 @@ static MemberDef *addVariableToClass( QCString qualScope = cd->qualifiedNameWithTemplateParameters(); QCString scopeSeparator="::"; - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + SrcLangExt lang = cd->getLanguage(); + if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp) { qualScope = substitute(qualScope,"::","."); scopeSeparator="."; @@ -1999,6 +2133,7 @@ static MemberDef *addVariableToClass( md->enableCallerGraph(root->callerGraph); md->setHidden(root->hidden); md->setArtificial(root->artificial); + md->setLanguage(root->lang); addMemberToGroups(root,md); //if (root->mGrpId!=-1) //{ @@ -2107,9 +2242,8 @@ static MemberDef *addVariableToFile( ) // variable is inside a namespace, so put the scope before the name { - static bool optimizeForJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - QCString sep="::"; - if (optimizeForJava) sep="."; + SrcLangExt lang = nd->getLanguage(); + QCString sep=getLanguageSpecificSeparator(lang); if (!root->type.isEmpty()) { @@ -2164,7 +2298,7 @@ static MemberDef *addVariableToFile( if (md->getFileDef() && ! // not a php array ( - (getLanguageFromFileName(md->getFileDef()->name())==SrcLangExt_PHP) && + (md->getLanguage()==SrcLangExt_PHP) && (md->argsString()!=root->args && root->args.find('[')!=-1) ) ) @@ -2199,6 +2333,7 @@ static MemberDef *addVariableToFile( md->setMaxInitLines(root->initLines); md->setMemberGroupId(root->mGrpId); md->setDefinition(def); + md->setLanguage(root->lang); md->enableCallGraph(root->callGraph); md->enableCallerGraph(root->callerGraph); md->setExplicitExternal(root->explicitExternal); @@ -2246,7 +2381,7 @@ static MemberDef *addVariableToFile( */ static int findFunctionPtr(const QCString &type,int lang, int *pLength=0) { - if (lang == SrcLangExt_F90) return -1; // Fortran does not have function pointers + if (lang == SrcLangExt_Fortran) return -1; // Fortran does not have function pointers static const QRegExp re("([^)]*[\\*\\^][^)]*)"); int i=-1,l; if (!type.isEmpty() && // return type is non-empty @@ -2535,8 +2670,8 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) { MemberDef *md=0; - // if cd is an anonymous scope we insert the member - // into a non-anonymous scope as well. This is needed to + // if cd is an anonymous (=tag less) scope we insert the member + // into a non-anonymous parent scope as well. This is needed to // be able to refer to it using \var or \fn //int indentDepth=0; @@ -2544,11 +2679,12 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) //int anonyScopes = 0; bool added=FALSE; - if (si!=-1) // anonymous scope + static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS"); + if (si!=-1 && !inlineSimpleStructs) // anonymous scope or type { QCString pScope; ClassDef *pcd=0; - pScope = scope.left(QMAX(si-2,0)); + pScope = scope.left(QMAX(si-2,0)); // scope without tag less parts if (!pScope.isEmpty()) pScope.prepend(annScopePrefix); else if (annScopePrefix.length()>2) @@ -2679,7 +2815,8 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, int l,i=-1; static QRegExp re("([a-z_A-Z0-9: ]*[ &*]+[ ]*"); - if (!root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable + if (cd->getLanguage()==SrcLangExt_Cpp && // only C has pointers + !root->type.isEmpty() && (i=re.match(root->type,0,&l))!=-1) // function variable { root->args+=root->type.right(root->type.length()-i-l); root->type=root->type.left(i+l); @@ -2696,7 +2833,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, else mtype=MemberDef::Function; // strip redundant template specifier for constructors - if ((fd==0 || getLanguageFromFileName(fd->name())==SrcLangExt_Cpp) && + if ((fd==0 || fd->getLanguage()==SrcLangExt_Cpp) && name.left(9)!="operator " && (i=name.find('<'))!=-1 && name.find('>')!=-1) { name=name.left(i); @@ -2725,17 +2862,23 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd, md->setMemberSpecifiers(root->spec); md->setMemberGroupId(root->mGrpId); md->setTypeConstraints(root->typeConstr); + md->setLanguage(root->lang); md->setBodyDef(fd); md->setFileDef(fd); //md->setScopeTemplateArguments(root->tArgList); md->addSectionsToDefinition(root->anchors); QCString def; QCString qualScope = cd->qualifiedNameWithTemplateParameters(); - QCString scopeSeparator="::"; - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + SrcLangExt lang = cd->getLanguage(); + QCString scopeSeparator=getLanguageSpecificSeparator(lang); + if (scopeSeparator!="::") { - qualScope = substitute(qualScope,"::","."); - scopeSeparator="."; + qualScope = substitute(qualScope,"::",scopeSeparator); + } + if (lang==SrcLangExt_PHP) + { + // for PHP we use Class::method and Namespace\method + scopeSeparator="::"; } if (!root->relates.isEmpty() || isFriend || Config_getBool("HIDE_SCOPE_NAMES")) { @@ -2910,8 +3053,9 @@ static void buildFunctionList(EntryNav *rootNav) cd && // do some fuzzy things to exclude function pointers (root->type.isEmpty() || - (root->type.find(re,0)==-1 || root->args.find(")[")!=-1) || // type contains ..(..* and args not )[.. -> function pointer - root->type.find(")(")!=-1 || root->type.find("operator")!=-1 // type contains ..)(.. and not "operator" + (root->type.find(re,0)==-1 || root->args.find(")[")!=-1) || // type contains ..(..* and args not )[.. -> function pointer + root->type.find(")(")!=-1 || root->type.find("operator")!=-1 || // type contains ..)(.. and not "operator" + cd->getLanguage()!=SrcLangExt_Cpp // language other than C ) ) { @@ -3083,6 +3227,7 @@ static void buildFunctionList(EntryNav *rootNav) MemberDef::Function,tArgList,root->argList); md->setTagInfo(rootNav->tagInfo()); + md->setLanguage(root->lang); //md->setDefFile(root->fileName); //md->setDefLine(root->startLine); md->setDocumentation(root->doc,root->docFile,root->docLine); @@ -3113,14 +3258,12 @@ static void buildFunctionList(EntryNav *rootNav) if (!scope.isEmpty()) { - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + QCString sep = getLanguageSpecificSeparator(root->lang); + if (sep!="::") { - scope = substitute(scope,"::",".")+"."; - } - else - { - scope+="::"; + scope = substitute(scope,"::",sep); } + scope+=sep; } QCString def; @@ -3825,6 +3968,7 @@ static void findUsedClassesForClass(EntryNav *rootNav, //printf("making %s a template argument!!!\n",usedCd->name().data()); usedCd->makeTemplateArgument(); usedCd->setUsedOnly(TRUE); + usedCd->setLanguage(masterCd->getLanguage()); Doxygen::hiddenClasses->append(usedName,usedCd); } if (usedCd) @@ -3872,6 +4016,7 @@ static void findUsedClassesForClass(EntryNav *rootNav, masterCd->getDefFileName(),masterCd->getDefLine(), type,ClassDef::Class); usedCd->setUsedOnly(TRUE); + usedCd->setLanguage(masterCd->getLanguage()); Doxygen::hiddenClasses->append(type,usedCd); } if (usedCd) @@ -4372,6 +4517,7 @@ static bool findClassRelation( baseClassName,ClassDef::Class); Doxygen::hiddenClasses->append(baseClassName,baseClass); if (isArtificial) baseClass->setArtificial(TRUE); + baseClass->setLanguage(root->lang); } } else @@ -4385,6 +4531,7 @@ static bool findClassRelation( baseClassName,ClassDef::Class); Doxygen::classSDict->append(baseClassName,baseClass); if (isArtificial) baseClass->setArtificial(TRUE); + baseClass->setLanguage(root->lang); } } // add base class to this class @@ -5048,14 +5195,14 @@ static bool findGlobalMember(EntryNav *rootNav, QCString fullFuncDecl=decl; if (root->argList) fullFuncDecl+=argListToString(root->argList,TRUE); QCString warnMsg = - QCString("warning: no matching file member found for \n")+fullFuncDecl; + QCString("warning: no matching file member found for \n")+substitute(fullFuncDecl,"%","%%"); if (mn->count()>0) { warnMsg+="Possible candidates:\n"; for (mni.toFirst();(md=mni.current());++mni) { warnMsg+=" "; - warnMsg+=md->declaration(); + warnMsg+=substitute(md->declaration(),"%","%%"); warnMsg+='\n'; } } @@ -5834,6 +5981,7 @@ static void findMember(EntryNav *rootNav, mtype,tArgList,root->argList); //printf("new specialized member %s args=`%s'\n",md->name().data(),funcArgs.data()); md->setTagInfo(rootNav->tagInfo()); + md->setLanguage(root->lang); md->setMemberClass(cd); md->setTemplateSpecialization(TRUE); md->setTypeConstraints(root->typeConstr); @@ -5897,6 +6045,7 @@ static void findMember(EntryNav *rootNav, root->protection,root->virt,root->stat,Related, mtype,tArgList,root->argList); md->setTagInfo(rootNav->tagInfo()); + md->setLanguage(root->lang); md->setTypeConstraints(root->typeConstr); md->setMemberClass(cd); md->setDefinition(funcDecl); @@ -6109,6 +6258,7 @@ static void findMember(EntryNav *rootNav, md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->addSectionsToDefinition(root->anchors); md->setMemberGroupId(root->mGrpId); + md->setLanguage(root->lang); //md->setMemberDefTemplateArguments(root->mtArgList); mn->append(md); cd->insertMember(md); @@ -6156,6 +6306,8 @@ localObjCMethod: //printf("scopeName=`%s' className=`%s'\n",scopeName.data(),className.data()); if (Config_getBool("EXTRACT_LOCAL_METHODS") && (cd=getClass(scopeName))) { + Debug::print(Debug::FindMembers,0,"4. Local objective C method %s\n" + " scopeName=%s className=%s\n",root->name.data(),scopeName.data(),className.data()); //printf("Local objective C method `%s' of class `%s' found\n",root->name.data(),cd->name().data()); MemberDef *md=new MemberDef( root->fileName,root->startLine, @@ -6163,6 +6315,7 @@ localObjCMethod: root->protection,root->virt,root->stat,Member, MemberDef::Function,0,root->argList); md->setTagInfo(rootNav->tagInfo()); + md->setLanguage(root->lang); md->makeImplementationDetail(); md->setMemberClass(cd); md->setDefinition(funcDecl); @@ -6491,6 +6644,7 @@ static void findEnums(EntryNav *rootNav) MemberDef::Enumeration, 0,0); md->setTagInfo(rootNav->tagInfo()); + md->setLanguage(root->lang); if (!isGlobal) md->setMemberClass(cd); else md->setFileDef(fd); md->setBodySegment(root->bodyLine,root->endBodyLine); md->setBodyDef(rootNav->fileDef()); @@ -6756,6 +6910,7 @@ static void addEnumValuesToEnums(EntryNav *rootNav) else if (md->getFileDef()) fmd->setFileDef(md->getFileDef()); fmd->setOuterScope(md->getOuterScope()); fmd->setTagInfo(e->tagInfo()); + fmd->setLanguage(root->lang); fmd->setDocumentation(root->doc,root->docFile,root->docLine); fmd->setBriefDescription(root->brief,root->briefFile,root->briefLine); fmd->addSectionsToDefinition(root->anchors); @@ -7178,13 +7333,11 @@ static void createTemplateInstanceMembers() //---------------------------------------------------------------------------- -// builds the list of all members for each class - -static void buildCompleteMemberLists() +static void mergeCategories() { ClassDef *cd; - // merge members of categories into the class they extend ClassSDict::Iterator cli(*Doxygen::classSDict); + // merge members of categories into the class they extend for (cli.toFirst();(cd=cli.current());++cli) { int i=cd->name().find('('); @@ -7200,6 +7353,14 @@ static void buildCompleteMemberLists() } } } +} + +// builds the list of all members for each class + +static void buildCompleteMemberLists() +{ + ClassDef *cd; + ClassSDict::Iterator cli(*Doxygen::classSDict); // merge the member list of base classes into the inherited classes. for (cli.toFirst();(cd=cli.current());++cli) { @@ -7783,6 +7944,7 @@ static void findDefineDocumentation(EntryNav *rootNav) "#define",root->name,root->args,0, Public,Normal,FALSE,Member,MemberDef::Define,0,0); md->setTagInfo(rootNav->tagInfo()); + md->setLanguage(root->lang); //printf("Searching for `%s' fd=%p\n",filePathName.data(),fd); md->setFileDef(rootNav->parent()->fileDef()); //printf("Adding member=%s\n",md->name().data()); @@ -7872,6 +8034,7 @@ static void findDefineDocumentation(EntryNav *rootNav) md->setBodyDef(rootNav->fileDef()); md->addSectionsToDefinition(root->anchors); md->setRefItems(root->sli); + md->setLanguage(root->lang); if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId); addMemberToGroups(root,md); } @@ -9255,6 +9418,7 @@ void initDoxygen() Doxygen::parserManager->registerParser("fortran", new FortranLanguageScanner); Doxygen::parserManager->registerParser("vhdl", new VHDLLanguageScanner); Doxygen::parserManager->registerParser("dbusxml", new DBusXMLScanner); + Doxygen::parserManager->registerParser("tcl", new TclLanguageScanner); // register any additional parsers here... @@ -10108,7 +10272,7 @@ void parseInput() msg("Parsing layout file %s...\n",layoutFileName.data()); QTextStream t(&layoutFile); t.setEncoding(QTextStream::Latin1); - LayoutDocManager::instance().parse(t); + LayoutDocManager::instance().parse(t,layoutFileName); } else if (!defaultLayoutUsed) { @@ -10272,6 +10436,11 @@ void parseInput() findInheritedTemplateInstances(); msg("Computing class usage relations...\n"); findUsedTemplateInstances(); + if (Config_getBool("INLINE_SIMPLE_STRUCTS")) + { + msg("Searching for tag less structs...\n"); + findTagLessClasses(); + } msg("Flushing cached template relations that have become invalid...\n"); flushCachedTemplateRelations(); @@ -10282,12 +10451,8 @@ void parseInput() msg("Computing class relations...\n"); computeTemplateClassRelations(); flushUnresolvedRelations(); - computeClassRelations(); - - if (Config_getBool("OPTIMIZE_OUTPUT_VHDL")) - VhdlDocGen::computeVhdlComponentRelations(); - + VhdlDocGen::computeVhdlComponentRelations(); g_classEntries.clear(); msg("Add enum values to enums...\n"); @@ -10336,6 +10501,7 @@ void parseInput() computeMemberRelations(); msg("Building full member lists recursively...\n"); + mergeCategories(); buildCompleteMemberLists(); msg("Adding members to member groups.\n"); diff --git a/src/filedef.cpp b/src/filedef.cpp index d33de00..0c482d8 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -92,9 +92,10 @@ FileDef::FileDef(const char *p,const char *nm, { docname.prepend(stripFromPath(path.copy())); } - SrcLangExt lang = getLanguageFromFileName(name()); - m_isJava = lang==SrcLangExt_Java; - m_isCSharp = lang==SrcLangExt_CSharp; + SrcLangExt lang = getLanguageFromFileName(name()); + setLanguage(lang); + //m_isJava = lang==SrcLangExt_Java; + //m_isCSharp = lang==SrcLangExt_CSharp; memberGroupSDict = 0; acquireFileVersion(); m_subGrouping=Config_getBool("SUBGROUPING"); @@ -264,7 +265,7 @@ void FileDef::writeIncludeFiles(OutputList &ol) bool isIDLorJava = FALSE; if (fd) { - SrcLangExt lang = getLanguageFromFileName(fd->name()); + SrcLangExt lang = fd->getLanguage(); isIDLorJava = lang==SrcLangExt_IDL || lang==SrcLangExt_Java; } ol.startTypewriter(); @@ -536,7 +537,7 @@ void FileDef::writeDocumentation(OutputList &ol) ol.parseText(pageTitleShort); // Html only ol.enableAll(); ol.disable(OutputGenerator::Html); - ol.parseText(pageTitle,TRUE); // other output formats + ol.parseText(pageTitle); // other output formats ol.popGeneratorState(); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),title); diff --git a/src/filedef.h b/src/filedef.h index 8708794..502a957 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -124,8 +124,8 @@ class FileDef : public Definition } bool isIncluded(const QCString &name) const; - bool isJava() const { return m_isJava; } - bool isCSharp() const { return m_isCSharp; } + //bool isJava() const { return m_isJava; } + //bool isCSharp() const { return m_isCSharp; } void writeDocumentation(OutputList &ol); void writeMemberPages(OutputList &ol); @@ -220,8 +220,8 @@ class FileDef : public Definition QIntDict<Definition> *srcDefDict; QIntDict<MemberDef> *srcMemberDict; bool isSource; - bool m_isJava; - bool m_isCSharp; + //bool m_isJava; + //bool m_isCSharp; QCString fileVersion; PackageDef *package; DirDef *dir; diff --git a/src/fortranscanner.l b/src/fortranscanner.l index 0ea16dc..d83fe85 100644 --- a/src/fortranscanner.l +++ b/src/fortranscanner.l @@ -111,6 +111,10 @@ static const char *directionStrs[] = { "", "intent(in)", "intent(out)", "intent(inout)" }; +static const char *directionParam[] = +{ + "", "[in]", "[out]", "[in,out]" +}; // }}} @@ -127,6 +131,8 @@ static QCString inputStringSemi; ///< Input string after command separet static unsigned int inputPositionPrepass; static int lineCountPrepass = 0; +static QList<Entry> subrCurrent; + struct CommentInPrepass { int column; QCString str; @@ -185,6 +191,7 @@ static QMap<Entry*,QMap<QCString,SymbolModifiers> > modifiers; static int yyread(char *buf,int max_size); static void startCommentBlock(bool); static void handleCommentBlock(const QCString &doc,bool brief); +static void subrHandleCommentBlock(const QCString &doc,bool brief); static void addCurrentEntry(); static void addModule(const char *name, bool isModule=FALSE); static void addSubprogram(const char *text); @@ -405,7 +412,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA current->section=Entry::USINGDIR_SEC; current_root->addSubEntry(current); current = new Entry; - current->lang = SrcLangExt_F90; + current->lang = SrcLangExt_Fortran; yy_pop_state(); } <Use>{ID}/, { @@ -420,7 +427,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA current->section=Entry::USINGDECL_SEC; current_root->addSubEntry(current); current = new Entry ; - current->lang = SrcLangExt_F90; + current->lang = SrcLangExt_Fortran; } <Use,UseOnly>"\n" { yyColNr -= 1; @@ -430,6 +437,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA /* INTERFACE definitions */ <Start,ModuleBody,SubprogBody>{ +^{BS}interface{IDSYM}+ { /* variable with interface prefix */ } ^{BS}interface { ifType = IF_SPECIFIC; yy_push_state(InterfaceBody); // do not start a scope here, every @@ -647,6 +655,7 @@ private { if (!endScope(current_root)) yyterminate(); + subrCurrent.remove(0u); yy_pop_state() ; } <Start,ModuleBody,TypedefBody,SubprogBody>{ @@ -757,8 +766,7 @@ private { if (!argType.isNull()) parameter->type=argType.stripWhiteSpace(); if (!docBlock.isNull()) { - parameter->docs += "\n"; - parameter->docs += docBlock; + subrHandleCommentBlock(docBlock,TRUE); } } // save, it may be function return type @@ -769,7 +777,7 @@ private { else { if ((current_root->name.lower() == argName.lower()) || - (modifiers[current_root->parent()][current_root->name.lower()].returnName == argName.lower())) + (modifiers[current_root->parent()][current_root->name.lower()].returnName.lower() == argName.lower())) { int strt = current_root->type.find("function"); QString lft; @@ -981,7 +989,7 @@ private { /*---- documentation comments --------------------------------------------------------------------*/ -<Variable,SubprogBody,ModuleBody,TypedefBody>"!<" { /* backward docu comment (only one line) */ +<Variable,SubprogBody,ModuleBody,TypedefBody>"!<" { /* backward docu comment */ if (v_type != V_IGNORE) { current->docLine = yyLineNr; docBlockJavaStyle = FALSE; @@ -992,7 +1000,16 @@ private { } } <DocBackLine>.* { // contents of current comment line - docBlock=yytext; + docBlock+=yytext; + } +<DocBackLine>"\n"{BS}"!"("<"|"!"+) { // comment block (next line is also comment line) + docBlock+="\n"; // \n is necessary for lists + newLine(); + } +<DocBackLine>"\n" { // comment block ends at the end of this line + //cout <<"3=========> comment block : "<< docBlock << endl; + yyColNr -= 1; + unput(*yytext); if (v_type == V_VARIABLE) { Entry *tmp_entry = current; @@ -1002,11 +1019,12 @@ private { } else if (v_type == V_PARAMETER) { - parameter->docs+=docBlock; + subrHandleCommentBlock(docBlock,TRUE); } - yy_pop_state(); - } - + yy_pop_state(); + docBlock.resize(0); + } + <Start,SubprogBody,ModuleBody,TypedefBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains,TypedefBodyContains>"!>" { yy_push_state(YY_START); current->docLine = yyLineNr; @@ -1831,7 +1849,7 @@ static void initEntry() current->mtype = mtype; current->virt = virt; current->stat = gstat; - current->lang = SrcLangExt_F90; + current->lang = SrcLangExt_Fortran; initGroupInfo(current); } @@ -1882,6 +1900,7 @@ static void addModule(const char *name, bool isModule) static void addSubprogram(const char *text) { //fprintf(stderr,"1=========> got subprog, type: %s\n",text); + subrCurrent.prepend(current); current->section = Entry::FUNCTION_SEC ; QCString subtype = text; subtype=subtype.lower().stripWhiteSpace(); current->type += " " + subtype; @@ -1978,7 +1997,8 @@ static void startCommentBlock(bool brief) } } - //---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + static void handleCommentBlock(const QCString &doc,bool brief) { docBlockInBody = FALSE; @@ -2011,6 +2031,29 @@ static void handleCommentBlock(const QCString &doc,bool brief) } //---------------------------------------------------------------------------- + +static void subrHandleCommentBlock(const QCString &doc,bool brief) +{ + Entry *tmp_entry = current; + current = subrCurrent.first(); // temporarily switch to the entry of the subroutine / function + if (docBlock.stripWhiteSpace().find("\\param") == 0) + { + handleCommentBlock(doc,brief); + } + else if (docBlock.stripWhiteSpace().find("@param") == 0) + { + handleCommentBlock(doc,brief); + } + else + { + int dir1 = modifiers[current_root][argName.lower()].direction; + handleCommentBlock(QCString("@param ") + directionParam[dir1] + " " + + argName + " " + doc,brief); + } + current=tmp_entry; +} + +//---------------------------------------------------------------------------- static int level=0; static void debugCompounds(Entry *rt) // print Entry structure (for debugging) { @@ -2067,13 +2110,13 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) groupEnterFile(yyFileName,yyLineNr); current = new Entry; - current->lang = SrcLangExt_F90; + current->lang = SrcLangExt_Fortran; current->name = yyFileName; current->section = Entry::SOURCE_SEC; current_root->addSubEntry(current); file_root = current; current = new Entry; - current->lang = SrcLangExt_F90; + current->lang = SrcLangExt_Fortran; fscanYYrestart( fscanYYin ); { diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 8ecc784..12de564 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -145,11 +145,42 @@ bool GroupDef::addClass(const ClassDef *cd) if (cd->isHidden()) return FALSE; if (classSDict->find(cd->qualifiedName())==0) { - //printf("addClass %s sort=%d\n",cd->qualifiedName().data(),sortBriefDocs); + QCString qn = cd->qualifiedName(); + //printf("--- addClass %s sort=%d\n",qn.data(),sortBriefDocs); if (sortBriefDocs) + { classSDict->inSort(cd->qualifiedName(),cd); + } else - classSDict->append(cd->qualifiedName(),cd); + { + int i=qn.findRev("::"); + if (i==-1) i=qn.find('.'); + bool found=FALSE; + //printf("i=%d\n",i); + if (i!=-1) + { + // add nested classes (e.g. A::B, A::C) after their parent (A) in + // order of insertion + QCString scope = qn.left(i); + int j=classSDict->findAt(scope); + if (j!=-1) + { + while (j<(int)classSDict->count() && + classSDict->at(j)->qualifiedName().left(i)==scope) + { + //printf("skipping over %s\n",classSDict->at(j)->qualifiedName().data()); + j++; + } + //printf("Found scope at index %d\n",j); + classSDict->insertAt(j,cd->qualifiedName(),cd); + found=TRUE; + } + } + if (!found) // no insertion point found -> just append + { + classSDict->append(cd->qualifiedName(),cd); + } + } return TRUE; } return FALSE; diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 410542b..2c5ffb7 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -446,6 +446,25 @@ void HtmlDocVisitor::visit(DocInclude *inc) m_t << PREFRAG_END; forceStartParagraph(inc); break; + case DocInclude::Snippet: + { + forceEndParagraph(inc); + m_t << PREFRAG_START; + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + inc->isExample(), + inc->exampleFile(), + 0, + -1, // startLine + -1, // endLine + TRUE // inlineFragment + ); + m_t << PREFRAG_END; + forceStartParagraph(inc); + } + break; } } diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 7865fd6..1654733 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -979,7 +979,16 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title, if (mathJax) { - mathJaxJs = "<script src=\"$relpath$MathJax.js\">\n" + QCString path = Config_getString("MATHJAX_RELPATH"); + if (!path.isEmpty() && path.at(path.length()-1)!='/') + { + path+="/"; + } + if (path.isEmpty() || path.left(2)=="..") // relative path + { + path.prepend(relPath); + } + mathJaxJs = "<script src=\"" + path + "MathJax.js\">\n" " MathJax.Hub.Config({\n" " extensions: [\"tex2jax.js\""; QStrList &mathJaxExtensions = Config_getList("MATHJAX_EXTENSIONS"); diff --git a/src/index.cpp b/src/index.cpp index 49cdd8e..a72a0c6 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -338,11 +338,9 @@ void endFile(OutputList &ol,bool skipNavIndex) static bool classHasVisibleChildren(ClassDef *cd) { - bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - BaseClassList *bcl; - if (vhdl) // reverse baseClass/subClass relation + if (cd->getLanguage()==SrcLangExt_VHDL) // reverse baseClass/subClass relation { if (cd->baseClasses()==0) return FALSE; bcl=cd->baseClasses(); @@ -366,8 +364,6 @@ static bool classHasVisibleChildren(ClassDef *cd) void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,FTVHelp* ftv) { - static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - if (bcl==0) return; BaseClassListIterator bcli(*bcl); bool started=FALSE; @@ -375,7 +371,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,F { ClassDef *cd=bcli.current()->classDef; bool b; - if (vhdl) + if (cd->getLanguage()==SrcLangExt_VHDL) { b=hasVisibleRoot(cd->subClasses()); } @@ -428,7 +424,7 @@ void writeClassTree(OutputList &ol,BaseClassList *bcl,bool hideSuper,int level,F //printf("Class %s at %p visited=%d\n",cd->name().data(),cd,cd->visited); bool wasVisited=cd->visited; cd->visited=TRUE; - if (vhdl) + if (cd->getLanguage()==SrcLangExt_VHDL) { writeClassTree(ol,cd->baseClasses(),wasVisited,level+1,ftv); } @@ -494,8 +490,6 @@ void writeClassTree(BaseClassList *cl,int level) void writeClassTreeNode(ClassDef *cd,bool &started,int level) { //printf("writeClassTreeNode(%s) visited=%d\n",cd->name().data(),cd->visited); - static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - if (cd->isVisibleInHierarchy() && !cd->visited) { if (!started) @@ -510,7 +504,7 @@ void writeClassTreeNode(ClassDef *cd,bool &started,int level) } if (hasChildren) { - if (vhdl) + if (cd->getLanguage()==SrcLangExt_VHDL) { writeClassTree(cd->baseClasses(),level+1); } @@ -557,7 +551,6 @@ void writeClassTree(ClassSDict *d,int level) static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FTVHelp* ftv) { - static bool vhdl=Config_getBool("OPTIMIZE_OUTPUT_VHDL"); ClassSDict::Iterator cli(*cl); for (;cli.current(); ++cli) { @@ -568,7 +561,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT // cd->isVisibleInHierarchy() // ); bool b; - if (vhdl) + if (cd->getLanguage()==SrcLangExt_VHDL) { if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKAGECLASS || (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS) @@ -621,7 +614,7 @@ static void writeClassTreeForList(OutputList &ol,ClassSDict *cl,bool &started,FT if (ftv) ftv->addContentsItem(hasChildren,cd->displayName(),0,0,0); } - if (vhdl && hasChildren) + if (cd->getLanguage()==SrcLangExt_VHDL && hasChildren) { writeClassTree(ol,cd->baseClasses(),cd->visited,1,ftv); cd->visited=TRUE; @@ -1142,8 +1135,7 @@ void writeAnnotatedClassList(OutputList &ol) { QCString type=cd->compoundTypeString(); ol.startIndexKey(); - static bool vhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); - if (vhdl) + if (cd->getLanguage()==SrcLangExt_VHDL) { QCString prot= VhdlDocGen::getProtectionName((VhdlDocGen::VhdlClasses)cd->protection()); ol.docify(prot.data()); @@ -1422,13 +1414,15 @@ void writeAlphabeticalClassList(OutputList &ol) //QCString cname=cd->className(); extractNamespaceName(cd->name(),cname,namesp); QCString nsDispName; - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + SrcLangExt lang = cd->getLanguage(); + QCString sep = getLanguageSpecificSeparator(lang); + if (sep!="::") { - nsDispName=substitute(namesp,"::","."); + nsDispName=substitute(namesp,"::",sep); } else { - nsDispName=namesp.copy(); + nsDispName=namesp; } if (cname.right(2)=="-g" || cname.right(2)=="-p") { @@ -1701,10 +1695,10 @@ 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 (vhdlOpt && (VhdlDocGen::isRecord(md) || VhdlDocGen::isUnit(md))) + if (md->getLanguage()==SrcLangExt_VHDL && + (VhdlDocGen::isRecord(md) || VhdlDocGen::isUnit(md))) { VhdlDocGen::adjustRecordMember(md); } @@ -2068,7 +2062,6 @@ 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); @@ -2120,7 +2113,6 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl) if (documentedFileMembers[hl]==0) return; static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); static bool disableIndex = Config_getBool("DISABLE_INDEX"); bool multiPageIndex=FALSE; @@ -2898,9 +2890,9 @@ void writeJavascriptSearchIndex() else if (md && (md->getClassDef() || md->getNamespaceDef())) // member in class or namespace scope { - static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - t << convertToXML(d->getOuterScope()->qualifiedName()) << (optimizeOutputJava ? "." : "::"); - t << prefix; + SrcLangExt lang = md->getLanguage(); + t << convertToXML(d->getOuterScope()->qualifiedName()) + << getLanguageSpecificSeparator(lang) << prefix; found = TRUE; } else if (scope) // some thing else? -> show scope diff --git a/src/language.cpp b/src/language.cpp index 582e1f0..e893c3f 100644 --- a/src/language.cpp +++ b/src/language.cpp @@ -262,7 +262,7 @@ bool setTranslator(const char *langName) #ifdef LANG_PT else if (L_EQUAL("portuguese")) { - theTranslator=new TranslatorDecoder(new TranslatorPortuguese); + theTranslator=new TranslatorPortuguese; } #endif #ifdef LANG_HU @@ -298,7 +298,7 @@ bool setTranslator(const char *langName) #ifdef LANG_CN else if (L_EQUAL("chinese")) { - theTranslator=new TranslatorDecoder(new TranslatorChinese); + theTranslator=new TranslatorChinese; } #endif #ifdef LANG_TW diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index bc4caed..c7ca6d1 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -47,28 +47,6 @@ static QCString escapeLabelName(const char *s) return result; } -static bool isSymbol(const char *s) -{ - int l=0; // word length - int nCaps=0; // number of captials - int nCamels=0; // number of lowerCase+upperCase combos - int nUnscore=0; // number of underscores - const char *p=s; - char c; - bool plo=FALSE; - while ((c=*p++)) - { - bool lo=c>='a' && c<='z'; - bool up=c>='A' && c<='Z'; - if (c=='_') nUnscore++; - if (up) nCaps++; - if (up && plo) nCamels++; - plo=lo; - l++; - } - return l>=20 || nCaps>=4 || nCamels>=2 || nUnscore>0; -} - const int maxLevels=5; static const char *secLabels[maxLevels] = { "section","subsection","subsubsection","paragraph","subparagraph" }; @@ -123,7 +101,7 @@ LatexDocVisitor::LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt,bool insideTabbing) : DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE), m_insideTabbing(insideTabbing), - m_forceBreaks(FALSE), m_langExt(langExt), m_currentColumn(0), + m_langExt(langExt), m_currentColumn(0), m_inRowspan(FALSE) { } @@ -135,14 +113,14 @@ LatexDocVisitor::LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci, void LatexDocVisitor::visit(DocWord *w) { if (m_hide) return; - filter(w->word(),isSymbol(w->word())); + filter(w->word()); } void LatexDocVisitor::visit(DocLinkedWord *w) { if (m_hide) return; startLink(w->ref(),w->file(),w->anchor()); - filter(w->word(),isSymbol(w->word())); + filter(w->word()); endLink(w->ref(),w->file(),w->anchor()); } @@ -437,6 +415,19 @@ void LatexDocVisitor::visit(DocInclude *inc) m_t << inc->text(); m_t << "\\end{DoxyVerbInclude}\n"; break; + case DocInclude::Snippet: + { + m_t << "\n\\begin{DoxyCodeInclude}\n"; + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + inc->isExample(), + inc->exampleFile() + ); + m_t << "\\end{DoxyCodeInclude}" << endl; + } + break; } } @@ -1368,18 +1359,17 @@ void LatexDocVisitor::visitPost(DocCopy *) { } -void LatexDocVisitor::visitPre(DocText *t) +void LatexDocVisitor::visitPre(DocText *) { - m_forceBreaks = t->forceBreaks(); } void LatexDocVisitor::visitPost(DocText *) { } -void LatexDocVisitor::filter(const char *str,bool forceBreaks) +void LatexDocVisitor::filter(const char *str) { - filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem,m_forceBreaks || forceBreaks); + filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem); } void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index 33d832a..359b9f7 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -138,7 +138,7 @@ class LatexDocVisitor : public DocVisitor // helper functions //-------------------------------------- - void filter(const char *str,bool forceBreaks=FALSE); + void filter(const char *str); void startLink(const QCString &ref,const QCString &file, const QCString &anchor); void endLink(const QCString &ref,const QCString &file, @@ -166,7 +166,6 @@ class LatexDocVisitor : public DocVisitor bool m_insideItem; bool m_hide; bool m_insideTabbing; - bool m_forceBreaks; QStack<bool> m_enabled; QCString m_langExt; QMap<int, int> m_rowspanIndices; diff --git a/src/latexgen.cpp b/src/latexgen.cpp index c9da3fa..8500d10 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -158,7 +158,7 @@ void LatexGenerator::init() << "pdf: refman.pdf" << endl << endl; t << "refman.pdf: clean refman.tex" << endl; t << "\tpdflatex refman" << endl; - t << "\tmakeindex refman" << endl; + t << "\t" << mkidx_command << " refman.tex" << endl; if (generateBib) { t << "\tbibtex refman" << endl; @@ -281,7 +281,10 @@ static void writeDefaultHeaderPart1(FTextStream &t) "\\setcounter{tocdepth}{3}\n" "\\renewcommand{\\footrulewidth}{0.4pt}\n" "\\renewcommand{\\familydefault}{\\sfdefault}\n" - "\\hfuzz=10pt\n" // allow a bit of overflow to go unnoticed + "\\hfuzz=15pt\n" // allow a bit of overflow to go unnoticed + "\\setlength{\\emergencystretch}{15pt}\n" + "\\hbadness=750\n" + "\\tolerance=750\n" "\\begin{document}\n"; static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS"); static bool usePDFLatex = Config_getBool("USE_PDFLATEX"); @@ -486,7 +489,7 @@ static void writeDefaultStyleSheetPart3(FTextStream &t) "\\newenvironment{DoxyCode}{%\n"; if (latexSourceCode) { - t << "\n\n\\begin{footnotesize}\\begin{alltt}%" << endl; + t << "\n\n\\begin{scriptsize}\\begin{alltt}%" << endl; } else { @@ -496,7 +499,7 @@ static void writeDefaultStyleSheetPart3(FTextStream &t) t << "}{%\n"; if (latexSourceCode) { - t << "\\end{alltt}\\end{footnotesize}%" << endl; + t << "\\end{alltt}\\end{scriptsize}%" << endl; } else { @@ -1873,7 +1876,7 @@ void LatexGenerator::endSection(const char *lab,SectionInfo::SectionType) void LatexGenerator::docify(const char *str) { - filterLatexString(t,str,insideTabbing,FALSE,FALSE,TRUE); + filterLatexString(t,str,insideTabbing,FALSE,FALSE); } void LatexGenerator::codify(const char *str) @@ -1882,62 +1885,82 @@ void LatexGenerator::codify(const char *str) { const char *p=str; char c; - char cs[5]; + //char cs[5]; int spacesToNextTabStop; static int tabSize = Config_getInt("TAB_SIZE"); - while (*p) + const int maxLineLen = 80; + QCString result(4*maxLineLen+1); // worst case for 1 line of 4-byte chars + int i; + while ((c=*p)) { - //static bool MultiByte = FALSE; - c=*p++; - switch(c) { - case 0x0c: break; // remove ^L + case 0x0c: p++; // remove ^L + break; case '\t': spacesToNextTabStop = tabSize - (col%tabSize); t << Doxygen::spaces.left(spacesToNextTabStop); col+=spacesToNextTabStop; + p++; break; - case '\n': t << '\n'; col=0; break; - default: cs[0]=c; - cs[1]=0; - int bytes=1; - if (c<0) // multibyte utf-8 character + case '\n': t << '\n'; col=0; p++; + break; + default: + i=0; + +#undef COPYCHAR +// helper macro to copy a single utf8 character, dealing with multibyte chars. +#define COPYCHAR() do { \ + result[i++]=c; p++; \ + if (c<0) /* multibyte utf-8 character */ \ + { \ + /* 1xxx.xxxx: >=2 byte character */ \ + result[i++]=*p++; \ + if (((uchar)c&0xE0)==0xE0) \ + { \ + /* 111x.xxxx: >=3 byte character */ \ + result[i++]=*p++; \ + } \ + if (((uchar)c&0xF0)==0xF0) \ + { \ + /* 1111.xxxx: 4 byte character */ \ + result[i++]=*p++; \ + } \ + } \ + col++; \ + } while(0) + + // gather characters until we find whitespace or are at + // the end of a line + COPYCHAR(); + if (col>=maxLineLen) // force line break + { + t << "\n "; + col=0; + } + else // copy more characters { - bytes++; // 1xxx.xxxx: >=2 byte character - cs[1]=*p; - cs[2]=0; - if (((uchar)c&0xE0)==0xE0) + while (col<maxLineLen && (c=*p) && + c!=0x0c && c!='\t' && c!='\n' && c!=' ' + ) { - bytes++; // 111x.xxxx: >=3 byte character - cs[2]=*(p+1); - cs[3]=0; + COPYCHAR(); } - if (((uchar)c&0xF0)==0xF0) + if (col>=maxLineLen) // force line break { - bytes++; // 1111.xxxx: 4 byte character - cs[2]=*(p+2); - cs[4]=0; + t << "\n "; + col=0; } } + result[i]=0; // add terminator if (m_prettyCode) { - filterLatexString(t,cs,insideTabbing,TRUE); - } - else - { - t << cs; - } - if (col>=80) - { - t << "\n "; - col=0; + filterLatexString(t,result,insideTabbing,TRUE); } else { - col++; + t << result; } - p+=(bytes-1); // skip to next character break; } } @@ -2320,66 +2343,73 @@ void LatexGenerator::endConstraintList() void LatexGenerator::escapeLabelName(const char *s) { + if (s==0) return; const char *p=s; - char str[2]; - str[1]=0; char c; + QCString result(strlen(s)+1); // worst case allocation + int i; while ((c=*p++)) { switch (c) { case '%': t << "\\%"; break; - //case '|': t << "\\tt{\"|}"; break; - //case '!': t << "\"!"; break; - default: str[0]=c; docify(str); break; + // NOTE: adding a case here, means adding it to while below as well! + default: + i=0; + // collect as long string as possible, before handing it to docify + result[i++]=c; + while ((c=*p) && c!='%') + { + result[i++]=c; + p++; + } + result[i]=0; + docify(result); + break; } } } void LatexGenerator::escapeMakeIndexChars(const char *s) { + if (s==0) return; const char *p=s; - char str[2]; - str[1]=0; char c; + QCString result(strlen(s)+1); // worst case allocation + int i; while ((c=*p++)) { switch (c) { - //case '!': t << "\"!"; break; case '"': t << "\"\""; break; case '@': t << "\"@"; break; - //case '|': t << "\\tt{\"|}"; break; case '[': t << "["; break; case ']': t << "]"; break; - default: str[0]=c; docify(str); break; + // NOTE: adding a case here, means adding it to while below as well! + default: + i=0; + // collect as long string as possible, before handing it to docify + result[i++]=c; + while ((c=*p) && c!='"' && c!='@' && c!='[' && c!=']') + { + result[i++]=c; + p++; + } + result[i]=0; + docify(result); + break; } } } void LatexGenerator::startCodeFragment() { - //if (m_prettyCode) - //{ - // t << endl << endl; - // t << "\\begin{footnotesize}\\begin{alltt}\n"; - //} - //else - //{ - t << "\n\\begin{DoxyCode}\n"; - //} + t << "\n\\begin{DoxyCode}\n"; } void LatexGenerator::endCodeFragment() { - //if (m_prettyCode) - //{ - // t << "\\end{alltt}\\end{footnotesize}" << endl; - //} - //else - //{ - t << "\\end{DoxyCode}\n"; - //} + t << "\\end{DoxyCode}\n"; } void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const char *anchor,int l) diff --git a/src/layout.cpp b/src/layout.cpp index c212907..0209036 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -1123,24 +1123,25 @@ class LayoutParser : public QXmlDefaultHandler class LayoutErrorHandler : public QXmlErrorHandler { public: + LayoutErrorHandler(const char *fn) : fileName(fn) {} bool warning( const QXmlParseException &exception ) { - err("error: at line %d column %d: %s\n", - exception.lineNumber(),exception.columnNumber(), + err("warning: at line %d column %d of %s: %s\n", + exception.lineNumber(),exception.columnNumber(),fileName.data(), exception.message().data()); return FALSE; } bool error( const QXmlParseException &exception ) { - err("error: at line %d column %d: %s\n", - exception.lineNumber(),exception.columnNumber(), + err("error: at line %d column %d of %s: %s\n", + exception.lineNumber(),exception.columnNumber(),fileName.data(), exception.message().data()); return FALSE; } bool fatalError( const QXmlParseException &exception ) { - err("error: at line %d column %d: %s\n", - exception.lineNumber(),exception.columnNumber(), + err("fatal error: at line %d column %d of %s: %s\n", + exception.lineNumber(),exception.columnNumber(),fileName.data(), exception.message().data()); return FALSE; } @@ -1148,6 +1149,7 @@ class LayoutErrorHandler : public QXmlErrorHandler private: QString errorMsg; + QString fileName; }; //--------------------------------------------------------------------------------- @@ -1175,7 +1177,7 @@ LayoutDocManager::LayoutDocManager() void LayoutDocManager::init() { // parse the default layout - LayoutErrorHandler errorHandler; + LayoutErrorHandler errorHandler( "layout_default.xml" ); QXmlInputSource source; source.setData( layout_default ); QXmlSimpleReader reader; @@ -1216,9 +1218,9 @@ void LayoutDocManager::clear(LayoutDocManager::LayoutPart p) d->docEntries[(int)p].clear(); } -void LayoutDocManager::parse(QTextStream &t) +void LayoutDocManager::parse(QTextStream &t,const char *fileName) { - LayoutErrorHandler errorHandler; + LayoutErrorHandler errorHandler(fileName); QXmlInputSource source( t ); QXmlSimpleReader reader; reader.setContentHandler( &LayoutParser::instance() ); diff --git a/src/layout.h b/src/layout.h index d371e6d..b9cf85b 100644 --- a/src/layout.h +++ b/src/layout.h @@ -175,7 +175,7 @@ class LayoutDocManager LayoutNavEntry *rootNavEntry() const; /** Parses a user provided layout */ - void parse(QTextStream &t); + void parse(QTextStream &t,const char *fileName); void init(); private: void addEntry(LayoutPart p,LayoutDocEntry*e); diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index aff7e9a..811b3a7 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -119,6 +119,7 @@ HEADERS = bufstr.h \ sortdict.h \ store.h \ tagreader.h \ + tclscanner.h \ textdocvisitor.h \ translator.h \ translator_adapter.h \ @@ -176,6 +177,7 @@ SOURCES = ce_lex.cpp \ commentcnv.cpp \ commentscan.cpp \ cppvalue.cpp \ + dbusxmlscanner.cpp \ debug.cpp \ defgen.cpp \ declinfo.cpp \ @@ -241,6 +243,7 @@ SOURCES = ce_lex.cpp \ searchindex.cpp \ store.cpp \ tagreader.cpp \ + tclscanner.cpp \ textdocvisitor.cpp \ translator.cpp \ util.cpp \ @@ -249,13 +252,13 @@ SOURCES = ce_lex.cpp \ vhdldocgen.cpp \ vhdlscanner.cpp \ xmldocvisitor.cpp \ - xmlgen.cpp \ - dbusxmlscanner.cpp \ + xmlgen.cpp win32:TMAKE_CXXFLAGS += -DQT_NODLL win32-msvc:TMAKE_CXXFLAGS += -Zm200 win32-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti linux-g++:TMAKE_CXXFLAGS += -fno-exceptions -fno-rtti +TMAKE_CXXFLAGS += -DYY_TYPEDEF_YY_SIZE_T -Dyy_size_t=int INCLUDEPATH += ../qtools #INCLUDEPATH += ../libpng INCLUDEPATH += ../libmd5 diff --git a/src/libdoxygen.t b/src/libdoxygen.t index 0a6f4e3..cc69203 100644 --- a/src/libdoxygen.t +++ b/src/libdoxygen.t @@ -69,6 +69,9 @@ sub GenerateDep { #$ GenerateDep("vhdlcode.cpp","vhdlcode.l"); $(LEX) -i -PvhdlcodeYY -t vhdlcode.l | $(INCBUFSIZE) >vhdlcode.cpp +#$ GenerateDep("tclscanner.cpp","tclscanner.l"); + $(LEX) -i -PtclscanYY -t tclscanner.l | $(INCBUFSIZE) >tclscanner.cpp + #$ GenerateDep("pre.cpp","pre.l"); $(LEX) -PpreYY -t pre.l | $(INCBUFSIZE) >pre.cpp diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index e9ebe66..ff56f2c 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -281,6 +281,22 @@ void ManDocVisitor::visit(DocInclude *inc) m_t << ".PP" << endl; m_firstCol=TRUE; break; + case DocInclude::Snippet: + if (!m_firstCol) m_t << endl; + m_t << ".PP" << endl; + m_t << ".nf" << endl; + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + inc->isExample(), + inc->exampleFile() + ); + if (!m_firstCol) m_t << endl; + m_t << ".fi" << endl; + m_t << ".PP" << endl; + m_firstCol=TRUE; + break; } } @@ -949,6 +965,7 @@ void ManDocVisitor::filter(const char *str) { switch(c) { + case '.': m_t << "'\\&."; break; // see bug652277 case '\\': m_t << "\\\\"; break; case '"': c = '\''; // fall through default: m_t << c; break; diff --git a/src/mangen.cpp b/src/mangen.cpp index 87ddde6..88bfba3 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -279,6 +279,7 @@ void ManGenerator::docify(const char *str) { switch(c) { + case '.': t << "\\&."; break; // see bug652277 case '\\': t << "\\\\"; col++; break; case '\n': t << "\n"; col=0; break; case '\"': c = '\''; // no break! @@ -304,6 +305,7 @@ void ManGenerator::codify(const char *str) c=*p++; switch(c) { + case '.': t << "\\&."; break; // see bug652277 case '\t': spacesToNextTabStop = Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE")); t << Doxygen::spaces.left(spacesToNextTabStop); diff --git a/src/marshal.cpp b/src/marshal.cpp index 4f01aa4..8f2e879 100644 --- a/src/marshal.cpp +++ b/src/marshal.cpp @@ -644,8 +644,9 @@ MemberSDict *unmarshalMemberSDict(StorageIntf *s) //printf(" unmarshaling key %s\n",key.data()); MemberDef *md = (MemberDef *)unmarshalObjPointer(s); //printf(" unmarshalMemberSDict i=%d key=%s md=%p\n",i,key.data(),md); - result->inSort(key,md); // note: this can lead to unmarshalling another object! + result->append(key,md); // note: this can lead to unmarshalling another object! } + result->sort(); //printf("--- end unmarshalMemberSDict\n"); return result; } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 7330b00..9b24ed9 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -102,6 +102,28 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, } if (!md->isDefine()) ol.docify(" "); + // simple argument list for tcl + if (md->getLanguage()==SrcLangExt_Tcl) + { + Argument *a=defArgList->first(); + ol.startParameterName(FALSE); + while (a) + { + if (a->defval.isEmpty()) + { + ol.docify(a->name+" "); + } + else + { + ol.docify("?"+a->name+"? "); + } + a=defArgList->next(); + } + ol.endParameterName(FALSE,FALSE,FALSE); + ol.endMemberDocName(); + return TRUE; + } + //printf("writeDefArgList(%d)\n",defArgList->count()); ol.pushGeneratorState(); //ol.disableAllBut(OutputGenerator::Html); @@ -111,6 +133,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, // html and latex if (htmlOn) ol.enable(OutputGenerator::Html); if (latexOn) ol.enable(OutputGenerator::Latex); + ol.endMemberDocName(); ol.startParameterList(!md->isObjCMethod()); } @@ -995,21 +1018,22 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, FileDef *fd,GroupDef *gd,bool onlyText) { - static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); makeResident(); + SrcLangExt lang = getLanguage(); LockingPtr<MemberDef> lock(this,this); - QCString sep = optimizeOutputJava ? "." : "::"; + QCString sep = getLanguageSpecificSeparator(lang); QCString n = name(); if (!hideScopeNames) { if (m_impl->classDef && gd && !isRelated()) { - n.prepend(m_impl->classDef->name()+sep); + n.prepend(m_impl->classDef->displayName()+sep); } else if (m_impl->nspace && (gd || fd)) { - n.prepend(m_impl->nspace->name()+sep); + n.prepend(m_impl->nspace->displayName()+sep); } } @@ -1716,13 +1740,17 @@ bool MemberDef::isDetailedSectionLinkable() const bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const { static bool separateMemPages = Config_getBool("SEPARATE_MEMBER_PAGES"); + static bool inlineSimpleStructs = Config_getBool("INLINE_SIMPLE_STRUCTS"); + static bool hideUndocMembers = Config_getBool("HIDE_UNDOC_MEMBERS"); bool groupFilter = getGroupDef()==0 || inGroup || separateMemPages; bool fileFilter = getNamespaceDef()==0 || !inFile; + bool simpleFilter = !hideUndocMembers && inlineSimpleStructs && + getClassDef()!=0 && getClassDef()->isSimple(); bool visible = isDetailedSectionLinkable() && groupFilter && fileFilter && !isReference(); //printf("MemberDef::isDetailedSectionVisible() %d\n",visible); - return visible; + return visible || simpleFilter; } /*! Writes the "detailed documentation" section of this member to @@ -1740,7 +1768,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, bool hasParameterList = FALSE; bool inFile = container->definitionType()==Definition::TypeFile; bool hasDocs = isDetailedSectionVisible(inGroup,inFile); - 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); @@ -1748,6 +1776,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if (isEnumValue() && !showEnumValues) return; makeResident(); + SrcLangExt lang = getLanguage(); + bool optVhdl = lang==SrcLangExt_VHDL; LockingPtr<MemberDef> lock(this,this); QCString scopeName = scName; @@ -1777,12 +1807,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, QCString doxyArgs=argsString(); QCString ldef = definition(); + QCString title = name(); //printf("member `%s' def=`%s'\n",name().data(),ldef.data()); if (isEnumerate()) { - if (name().at(0)=='@') + if (title.at(0)=='@') { - ldef = "anonymous enum"; + ldef = title = "anonymous enum"; } else { @@ -1828,10 +1859,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, //printf("Anonymous compound `%s'\n",cname.data()); ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline); - // strip anonymous compound names from definition + // search for the last anonymous compound name in the definition int si=ldef.find(' '),pi,ei=i+l; if (si==-1) si=0; - while ((pi=r.match(ldef,i+l,&l))!=-1) ei=i=pi+l; + while ((pi=r.match(ldef,i+l,&l))!=-1) + { + i=pi; + ei=i+l; + } // first si characters of ldef contain compound type name ol.startMemberDocName(isObjCMethod()); ol.docify(ldef.left(si)); @@ -1845,7 +1880,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, else // not an enum value { ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); - ol.startMemberDoc(ciname,name(),memAnchor,name(),showInline); + ol.startMemberDoc(ciname,name(),memAnchor,title,showInline); ClassDef *cd=getClassDef(); if (!Config_getBool("HIDE_SCOPE_NAMES")) @@ -2478,6 +2513,23 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, } } +// strip scope and field name from the type +// example: "struct N::S.v.c" will become "struct S.v" +static QCString simplifyTypeForTable(const QCString &s) +{ + QCString ts=removeAnonymousScopes(s); + if (ts.right(2)=="::") ts = ts.left(ts.length()-2); + static QRegExp re("[A-Z_a-z0-9]+::"); + int i,l; + while ((i=re.match(ts,0,&l))!=-1) + { + ts=ts.left(i)+ts.mid(i+l); + } + i=ts.findRev('.'); + if (i!=-1) ts = ts.left(i); + return ts; +} + void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container) { Definition *scope = getOuterScope(); @@ -2487,14 +2539,21 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container) QCString cfname = getOutputFileBase(); QCString cname; if (scope) cname = scope->name(); + if (doxyName.at(0)=='@') + { + doxyName="__unnamed__"; + } ol.startInlineMemberType(); ol.startDoxyAnchor(cfname,cname,memAnchor,doxyName,doxyArgs); + + QCString ts = simplifyTypeForTable(m_impl->type); + linkifyText(TextGeneratorOLImpl(ol), // out scope, // scope getBodyDef(), // fileScope doxyName, // - m_impl->type, // text + ts, // text TRUE // autoBreak ); ol.endDoxyAnchor(cfname,memAnchor); @@ -2502,6 +2561,10 @@ void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container) ol.startInlineMemberName(); ol.docify(doxyName); + if (!m_impl->bitfields.isEmpty()) // add bitfields + { + linkifyText(TextGeneratorOLImpl(ol),getOuterScope(),getBodyDef(),name(),m_impl->bitfields.simplifyWhiteSpace()); + } ol.endInlineMemberName(); ol.startInlineMemberDoc(); @@ -2836,8 +2899,9 @@ void MemberDef::addListReference(Definition *) makeResident(); 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"); + //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + SrcLangExt lang = getLanguage(); visited=TRUE; if (!isLinkableInProject()) return; QCString memLabel; @@ -2845,7 +2909,7 @@ void MemberDef::addListReference(Definition *) { memLabel=theTranslator->trGlobal(TRUE,TRUE); } - else if (fortranOpt) + else if (lang==SrcLangExt_Fortran) { memLabel=theTranslator->trSubprogram(TRUE,TRUE); } @@ -2857,7 +2921,7 @@ void MemberDef::addListReference(Definition *) Definition *pd=getOuterScope(); QCString pdName = pd->definitionType()==Definition::TypeClass ? ((ClassDef*)pd)->displayName() : pd->name(); - QCString sep = optimizeOutputJava ? "." : "::"; + QCString sep = getLanguageSpecificSeparator(lang); QCString memArgs; if (!isRelated() /* && commented out as a result of bug 597016 @@ -2944,17 +3008,20 @@ void MemberDef::_computeIsConstructor() m_isConstructorCached = name()=="this" ? 2 : 1; return; } - else if (m_impl->fileDef && - getLanguageFromFileName(m_impl->fileDef->name())==SrcLangExt_PHP) - { // for PHP + else if (getLanguage()==SrcLangExt_PHP) // for PHP + { m_isConstructorCached = name()=="__construct" ? 2 : 1; return; } - else if (name()=="__init__" && m_impl->fileDef && - getLanguageFromFileName(m_impl->fileDef->name())==SrcLangExt_Python) - // for Python + else if (name()=="__init__" && + getLanguage()==SrcLangExt_Python) // for Python { - m_isConstructorCached=2; // TRUE + m_isConstructorCached = 2; // TRUE + return; + } + else if (getLanguage()==SrcLangExt_Tcl) // for Tcl + { + m_isConstructorCached = name()=="constructor" ? 2 : 1; return; } else // for other languages @@ -2994,14 +3061,16 @@ void MemberDef::_computeIsDestructor() { isDestructor = name()=="~this"; } - else if (m_impl->fileDef && - getLanguageFromFileName(m_impl->fileDef->name())==SrcLangExt_PHP) - { // for PHP + else if (getLanguage()==SrcLangExt_PHP) // for PHP + { isDestructor = name()=="__destruct"; } - else if (name()=="__del__" && m_impl->fileDef && - getLanguageFromFileName(m_impl->fileDef->name())==SrcLangExt_Python) - // for Python + else if (getLanguage()==SrcLangExt_Tcl) // for Tcl + { + isDestructor = name()=="destructor"; + } + else if (name()=="__del__" && + getLanguage()==SrcLangExt_Python) // for Python { isDestructor=TRUE; } @@ -3023,7 +3092,6 @@ bool MemberDef::isDestructor() const } ASSERT(m_isDestructorCached>0); return m_isDestructorCached==2; - } void MemberDef::writeEnumDeclaration(OutputList &typeDecl, @@ -3183,6 +3251,12 @@ void MemberDef::setTypeConstraints(ArgumentList *al) } } +void MemberDef::setType(const char *t) +{ + makeResident(); + m_impl->type = t; +} + void MemberDef::findSectionsInDocumentation() { makeResident(); @@ -3461,6 +3535,12 @@ bool MemberDef::isFunction() const return m_impl->mtype==Function; } +bool MemberDef::isFunctionPtr() const +{ + makeResident(); + return m_impl->mtype==Variable && QCString(argsString()).find(")(")!=-1; +} + bool MemberDef::isDefine() const { makeResident(); @@ -4411,3 +4491,4 @@ void MemberDef::invalidateCachedArgumentTypes() invalidateCachedTypesInArgumentList(m_impl->declArgList); } + diff --git a/src/memberdef.h b/src/memberdef.h index 9311f2c..548410e 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -128,6 +128,7 @@ class MemberDef : public Definition bool isEnumValue() const; bool isTypedef() const; bool isFunction() const; + bool isFunctionPtr() const; bool isDefine() const; bool isFriend() const; bool isDCOP() const; @@ -296,6 +297,7 @@ class MemberDef : public Definition void setDeclArgumentList(ArgumentList *al); void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists); void setTypeConstraints(ArgumentList *al); + void setType(const char *t); // namespace related members void setNamespace(NamespaceDef *nd); @@ -336,7 +338,7 @@ class MemberDef : public Definition void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine); void setHidden(bool b); - + //----------------------------------------------------------------------------------- // --- actions ---- //----------------------------------------------------------------------------------- diff --git a/src/memberlist.cpp b/src/memberlist.cpp index dc26691..4949f23 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -546,6 +546,7 @@ void MemberList::writeSimpleDocumentation(OutputList &ol, Definition *container) { countDocMembers(FALSE); + //printf("MemberList count=%d\n",numDocMembers()); if (numDocMembers()==0) return; ol.startMemberDocSimple(); diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index cc2d57b..69e016e 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -57,7 +57,6 @@ NamespaceDef::NamespaceDef(const char *df,int dl, memberGroupSDict->setAutoDelete(TRUE); visited=FALSE; m_subGrouping=Config_getBool("SUBGROUPING"); - m_isCSharp = df && getLanguageFromFileName(df)==SrcLangExt_CSharp; } NamespaceDef::~NamespaceDef() @@ -416,16 +415,17 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol) void NamespaceDef::writeDocumentation(OutputList &ol) { - static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); - static bool outputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool outputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + SrcLangExt lang = getLanguage(); QCString pageTitle; - if (outputJava) + if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp) { pageTitle = theTranslator->trPackage(displayName()); } - else if (fortranOpt) + else if (lang==SrcLangExt_Fortran) { pageTitle = theTranslator->trModuleReference(displayName()); } @@ -445,7 +445,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol) } startTitle(ol,getOutputFileBase(),this); - ol.parseText(pageTitle,TRUE); + ol.parseText(pageTitle); addGroupListToTitle(ol,this); endTitle(ol,getOutputFileBase(),displayName()); ol.startContents(); @@ -715,12 +715,14 @@ Definition *NamespaceDef::findInnerCompound(const char *n) void NamespaceDef::addListReferences() { - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); + //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); { LockingPtr< QList<ListItemInfo> > xrefItems = xrefListItems(); addRefItem(xrefItems.pointer(), qualifiedName(), - fortranOpt?theTranslator->trModule(TRUE,TRUE):theTranslator->trNamespace(TRUE,TRUE), + getLanguage()==SrcLangExt_Fortran ? + theTranslator->trModule(TRUE,TRUE) : + theTranslator->trNamespace(TRUE,TRUE), getOutputFileBase(),displayName(), 0 ); @@ -745,10 +747,13 @@ void NamespaceDef::addListReferences() QCString NamespaceDef::displayName() const { QCString result=name(); - if (Config_getBool("OPTIMIZE_OUTPUT_JAVA")) + SrcLangExt lang = getLanguage(); + QCString sep = getLanguageSpecificSeparator(lang); + if (sep!="::") { - result = substitute(result,"::","."); + result = substitute(result,"::",sep); } + //printf("NamespaceDef::displayName() %s->%s lang=%d\n",name().data(),result.data(),lang); return result; } @@ -821,22 +826,8 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca // write list of namespaces ol.startMemberHeader("namespaces"); - bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); - bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); -#if 0 - if (javaOpt) - { - ol.parseText(theTranslator->trPackages()); - } - else if (fortranOpt) - { - ol.parseText(theTranslator->trModules()); - } - else - { - ol.parseText(theTranslator->trNamespaces()); - } -#endif + //bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN"); ol.parseText(title); ol.endMemberHeader(); ol.startMemberList(); @@ -844,12 +835,13 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca { if (nd->isLinkable()) { + SrcLangExt lang = nd->getLanguage(); ol.startMemberItem(0); - if (javaOpt) + if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp) { ol.docify("package "); } - else if (fortranOpt) + else if (lang==SrcLangExt_Fortran) { ol.docify("module "); } @@ -975,7 +967,7 @@ bool NamespaceDef::isLinkableInProject() const return TRUE; } return !name().isEmpty() && name().at(i)!='@' && // not anonymous - (hasDocumentation() || m_isCSharp) && // documented + (hasDocumentation() || getLanguage()==SrcLangExt_CSharp) && // documented !isReference() && // not an external reference !isHidden() && // not hidden !isArtificial() && // or artificial diff --git a/src/namespacedef.h b/src/namespacedef.h index 06029e4..4360fed 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -119,7 +119,6 @@ class NamespaceDef : public Definition ClassSDict *classSDict; NamespaceSDict *namespaceSDict; bool m_subGrouping; - bool m_isCSharp; }; class NamespaceList : public QList<NamespaceDef> diff --git a/src/outputlist.cpp b/src/outputlist.cpp index e50b259..57f4f67 100644 --- a/src/outputlist.cpp +++ b/src/outputlist.cpp @@ -173,7 +173,7 @@ void OutputList::parseDoc(const char *fileName,int startLine, delete root; } -void OutputList::parseText(const QCString &textStr,bool forceBreaks) +void OutputList::parseText(const QCString &textStr) { int count=0; OutputGenerator *og=outputs->first(); @@ -184,7 +184,7 @@ void OutputList::parseText(const QCString &textStr,bool forceBreaks) } if (count==0) return; // no output formats enabled. - DocNode *root = validatingParseText(textStr,forceBreaks); + DocNode *root = validatingParseText(textStr); og=outputs->first(); while (og) diff --git a/src/outputlist.h b/src/outputlist.h index 298f57e..debea2e 100644 --- a/src/outputlist.h +++ b/src/outputlist.h @@ -68,7 +68,7 @@ class OutputList : public OutputDocInterface Definition *ctx,MemberDef *md,const QCString &docStr, bool indexWords,bool isExample,const char *exampleName=0, bool singleLine=FALSE,bool linkFromIndex=FALSE); - void parseText(const QCString &textStr,bool forceBreaks=FALSE); + void parseText(const QCString &textStr); void startIndexSection(IndexSections is) diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 78451cd..443e24b 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -683,6 +683,7 @@ void PerlModDocVisitor::visit(DocInclude *inc) case DocInclude::DontInclude: return; case DocInclude::HtmlInclude: type = "htmlonly"; break; case DocInclude::VerbInclude: type = "preformatted"; break; + case DocInclude::Snippet: return; } openItem(type); m_output.addFieldQuotedString("content", inc->text()); diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index 7fdc159..4cfc06a 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -184,6 +184,7 @@ class PrintDocVisitor : public DocVisitor case DocInclude::DontInclude: printf("dontinclude"); break; case DocInclude::HtmlInclude: printf("htmlinclude"); break; case DocInclude::VerbInclude: printf("verbinclude"); break; + case DocInclude::Snippet: printf("snippet"); break; } printf("\"/>"); } diff --git a/src/pycode.l b/src/pycode.l index 88f3b38..852d424 100644 --- a/src/pycode.l +++ b/src/pycode.l @@ -57,7 +57,7 @@ static Definition * g_currentDefinition; static MemberDef * g_currentMemberDef; static bool g_includeCodeFragment; static QCString g_realScope; -static bool g_insideBody; +//static bool g_insideBody; static int g_bodyCurlyCount; static bool g_searchingForBody; static QCString g_classScope; @@ -346,7 +346,7 @@ static void startCodeLine() { g_currentDefinition = d; g_currentMemberDef = g_sourceFileDef->getSourceMember(g_yyLineNr); - g_insideBody = FALSE; + //g_insideBody = FALSE; g_searchingForBody = TRUE; g_realScope = d->name().copy(); g_classScope = d->name().copy(); @@ -473,21 +473,20 @@ static void codifyLines(char *text) static void addDocCrossReference(MemberDef *src,MemberDef *dst) { + static bool referencedByRelation = Config_getBool("REFERENCED_BY_RELATION"); + static bool callerGraph = Config_getBool("CALLER_GRAPH"); + static bool referencesRelation = Config_getBool("REFERENCES_RELATION"); + static bool callGraph = Config_getBool("CALL_GRAPH"); if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types //printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data()); - if ((Config_getBool("REFERENCED_BY_RELATION") || Config_getBool("CALLER_GRAPH")) && - (src->isFunction() || src->isSlot()) - ) + if ((referencedByRelation || callerGraph) && (src->isFunction() || src->isSlot())) { dst->addSourceReferencedBy(src); } - if ((Config_getBool("REFERENCES_RELATION") || Config_getBool("CALL_GRAPH")) && - (src->isFunction() || src->isSlot()) - ) + if ((referencesRelation || callGraph) && (src->isFunction() || src->isSlot())) { src->addSourceReferences(dst); } - } @@ -508,21 +507,21 @@ static bool getLinkInScope(const QCString &c, // scope if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) && md->isLinkable()) { - //printf("Found!\n"); //Definition *d=0; //if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd; Definition *d = md->getOuterScope()==Doxygen::globalScope ? md->getBodyDef() : md->getOuterScope(); + //printf("Found! d=%s\n",d?d->name().data():"<none>"); if (md->getGroupDef()) d = md->getGroupDef(); if (d && d->isLinkable()) { g_theCallContext.setClass(stripClassName(md->typeString())); - //printf("g_currentDefinition=%p g_currentMemberDef=%p g_insideBody=%d\n", - // g_currentDefinition,g_currentMemberDef,g_insideBody); + //printf("g_currentDefinition=%p g_currentMemberDef=%p\n", + // g_currentDefinition,g_currentMemberDef); if (g_currentDefinition && g_currentMemberDef && - md!=g_currentMemberDef && g_insideBody) + md!=g_currentMemberDef) { addDocCrossReference(g_currentMemberDef,md); } @@ -575,12 +574,12 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, // Don't do anything for empty text if (className.isEmpty()) return; + //printf("generateClassOrGlobalLink(className=%s)\n",className.data()); + ClassDef *cd=0,*lcd=0; /** Class def that we may find */ MemberDef *md=0; /** Member def that we may find */ bool isLocal=FALSE; - // printf("generateClassOrGlobalLink(className=%s)\n",className.data()); - if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable { Definition *d = g_currentDefinition; @@ -625,6 +624,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, } else // not a class, maybe a global member { + //printf("Checking if '%s' is a global function\n",clName); /* This code requires a going-over in order to @@ -734,6 +734,10 @@ static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s if (sym->definitionType()==Definition::TypeMember) { anchor=((MemberDef *)sym)->anchor(); + if (g_currentMemberDef) + { + addDocCrossReference(g_currentMemberDef,(MemberDef*)sym); + } } // TODO: find the nearest base class in case cd is a base class of @@ -967,6 +971,10 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codify(yytext); endFontClass(); } + "self."{IDENTIFIER}/"(" { + codify("self."); + findMemberLink(*g_code,&yytext[5]); + } "self."{IDENTIFIER} { codify("self."); findMemberLink(*g_code,&yytext[5]); @@ -1104,9 +1112,12 @@ TARGET ({IDENTIFIER}|"("{TARGET_LIST}")"|"["{TARGET_LIST}"]"|{ATTRIBUT codify(yytext); endFontClass(); } - + ({IDENTIFIER}".")*{IDENTIFIER}/"(" { + generateClassOrGlobalLink(*g_code,yytext); + } {IDENTIFIER} { codify(yytext); + //generateClassOrGlobalLink(*g_code,yytext); } } diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 1eca048..455611d 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -434,7 +434,7 @@ void RTFDocVisitor::visit(DocInclude *inc) DBG_RTF("{\\comment RTFDocVisitor::visit(DocInclude)}\n"); switch(inc->type()) { - case DocInclude::IncWithLines: + case DocInclude::IncWithLines: { m_t << "{" << endl; m_t << "\\par" << endl; @@ -450,7 +450,7 @@ void RTFDocVisitor::visit(DocInclude *inc) m_t << "}" << endl; } break; - case DocInclude::Include: + case DocInclude::Include: m_t << "{" << endl; m_t << "\\par" << endl; m_t << rtf_Style_Reset << getStyle("CodeExample"); @@ -473,6 +473,19 @@ void RTFDocVisitor::visit(DocInclude *inc) m_t << "\\par"; m_t << "}" << endl; break; + case DocInclude::Snippet: + m_t << "{" << endl; + if (!m_lastIsPara) m_t << "\\par" << endl; + m_t << rtf_Style_Reset << getStyle("CodeExample"); + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + inc->isExample(), + inc->exampleFile() + ); + m_t << "}"; + break; } m_lastIsPara=TRUE; } diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 1b4a18c..578cda5 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -2243,6 +2243,37 @@ void RTFGenerator::endMemberSubtitle() //} // +bool isLeadBytes(int c) +{ + bool result; + + QCString codePage = theTranslator->trRTFansicp(); + + if (codePage == "932") // cp932 (Japanese Shift-JIS) + { + result = (0x81<=c && c<=0x9f) || (0xe0<=c && c<=0xfc); + } + else if (codePage == "936") // cp936 (Simplified Chinese GBK) + { + result = 0x81<=c && c<=0xFE; + } + else if (codePage == "949") // cp949 (Korean) + { + result = 0x81<=c && c<=0xFE; + } + else if (codePage == "950") // cp950 (Traditional Chinese Big5) + { + result = 0x81<=c && c<=0xFE; + } + else // for SBCS Codepages (cp1252,1251 etc...) + { + result = false; + } + + return result; +} + + // note: function is not reentrant! static void encodeForOutput(FTextStream &t,const QCString &s) { @@ -2276,14 +2307,26 @@ static void encodeForOutput(FTextStream &t,const QCString &s) enc.resize(l); } uint i; + bool multiByte = FALSE; + for (i=0;i<enc.size();i++) { uchar c = (uchar)enc.at(i); - if (c>=0x80) + + if (c>=0x80 || multiByte) { char esc[10]; - sprintf(esc,"\\'%X",c); + sprintf(esc,"\\'%X",c); // escape sequence for SBCS and DBCS(1st&2nd bytes). t << esc; + + if (!multiByte) + { + multiByte = isLeadBytes(c); // It may be DBCS Codepages. + } + else + { + multiByte = FALSE; // end of Double Bytes Character. + } } else { diff --git a/src/scanner.l b/src/scanner.l index 78a9eaf..cf07d47 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -977,6 +977,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <CliPropertyIndex>. { current->name+=yytext; } + /* <FindMembers>{B}*"property"{BN}+ { if (!current->type.isEmpty()) { @@ -988,6 +989,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) lineCount(); } } + */ <FindMembers>{B}*"@private"{BN}+ { current->protection = protection = Private ; current->mtype = mtype = Method; @@ -1211,6 +1213,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <PackageName>{ID}(("."|"\\"){ID})* { isTypedef=FALSE; + //printf("Found namespace %s lang=%d\n",yytext,current->lang); current->name = yytext; current->name = substitute(current->name,".","::"); current->name = substitute(current->name,"\\","::"); @@ -1663,40 +1666,56 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <NSAliasArg>";" { BEGIN( FindMembers ); } -<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID} { +<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID}/{BN}+"as" { lineCount(); aliasName=yytext; - //current->fileName = yyFileName; - //current->section=Entry::USINGDIR_SEC; - //current_root->addSubEntry(current); - //current = new Entry; - //initEntry(); BEGIN(PHPUseAs); } +<PHPUse>({ID}{BN}*"\\"{BN}*)*{ID} { + lineCount(); + current->name=removeRedundantWhiteSpace(substitute(yytext,"\\","::")); + //printf("PHP: adding use relation: %s\n",current->name.data()); + current->fileName = yyFileName; + current->section=Entry::USINGDIR_SEC; + current_root->addSubEntry(current); + current = new Entry; + initEntry(); + aliasName.resize(0); + } <PHPUseAs>{BN}+"as"{BN}+ { lineCount(); } <PHPUseAs>{ID} { + //printf("PHP: adding use as relation: %s->%s\n",yytext,aliasName.data()); Doxygen::namespaceAliasDict.insert(yytext, new QCString(removeRedundantWhiteSpace( substitute(aliasName,"\\","::")))); aliasName.resize(0); } -<PHPUseAs>[,;] { +<PHPUse,PHPUseAs>[,;] { + /* if (!aliasName.isEmpty()) { int i=aliasName.findRev('\\'); - QCString an = removeRedundantWhiteSpace( + if (i!=-1) + { + QCString an = removeRedundantWhiteSpace( substitute(aliasName,"\\","::")); - Doxygen::namespaceAliasDict.insert(aliasName.mid(i+1), - new QCString(an)); - current->name = an; - current->fileName = yyFileName; - current->section=Entry::USINGDECL_SEC; - current_root->addSubEntry(current); - current = new Entry ; - initEntry(); + printf("PHP: adding use relation: %s->%s\n",aliasName.mid(i+1).data(),an.data()); + Doxygen::namespaceAliasDict.insert(aliasName.mid(i+1), + new QCString(an)); + current->name = an; + current->fileName = yyFileName; + current->section=Entry::USINGDECL_SEC; + current_root->addSubEntry(current); + current = new Entry ; + initEntry(); + } + else if (i==0) + { + } } + */ if (*yytext==',') { BEGIN(PHPUse); @@ -3050,6 +3069,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) else // probably a redundant , { current->reset(); + initEntry(); } } <FindFields>"[" { // attribute list in IDL @@ -3287,7 +3307,6 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) BEGIN(FindMembers); } <MemberSpec>[,;] { - //printf("current->name=`%s' msName=`%s'\n",current->name.data(),msName.data()); if (msName.isEmpty() && !current->name.isEmpty()) { // see if the compound does not have a name or is inside another @@ -3417,6 +3436,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) current->doc.resize(0); current->brief.resize(0); } + } <MemberSpec>"=" { lastInitializerContext=YY_START; @@ -4557,6 +4577,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <CompoundName>{SCOPENAME}{BN}*";" { // forward declaration unput(';'); current->reset(); + initEntry(); if (isTypedef) // typedef of a class, put typedef keyword back { current->type.prepend("typedef"); @@ -4575,6 +4596,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) <CompoundName>{SCOPENAME}/{BN}*"," { // multiple forward declarations on one line // e.g. @protocol A,B; current->reset(); + initEntry(); } <CompoundName>{SCOPENAME} { current->name = yytext ; @@ -5729,7 +5751,7 @@ static void parseCompounds(Entry *rt) //current->reset(); if (current) delete current; current = new Entry; - current->lang = language; + initEntry(); gstat = FALSE; int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2; // set default protection based on the compound type @@ -5846,6 +5868,7 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt) current = new Entry; } current->reset(); + initEntry(); scanYYrestart( scanYYin ); if ( insidePHP ) { diff --git a/src/sortdict.h b/src/sortdict.h index 366e1ac..c2afa39 100644 --- a/src/sortdict.h +++ b/src/sortdict.h @@ -207,6 +207,18 @@ class SDict #endif } + void insertAt(int i,const char *key,const T *d) + { + m_list->insert(i,d); + m_dict->insert(key,d); +#if AUTORESIZE + if (m_dict->size()>SDict_primes[m_sizeIndex]) + { + m_dict->resize(SDict_primes[++m_sizeIndex]); + } +#endif + } + /*! Indicates whether or not the dictionary owns its elements */ void setAutoDelete(bool val) { @@ -230,6 +242,12 @@ class SDict { return m_dict->find(key); } + int findAt(const QCString &key) + { + T *item = find(key); + if (item==0) return -1; + return m_list->find(item); + } /*! Equavalent to find(). */ T *operator[](const char *key) const diff --git a/src/store.cpp b/src/store.cpp index aafb4a4..4b66b6b 100644 --- a/src/store.cpp +++ b/src/store.cpp @@ -26,7 +26,7 @@ #include <string.h> #include <assert.h> -#define BLOCK_SIZE 512 // should be >8 and a multiple of 8 +#define BLOCK_SIZE 512 // should be >8 and a power of 2 #define BLOCK_POINTER_SIZE sizeof(portable_off_t) @@ -38,12 +38,19 @@ #define STORE_ASSERT(x) #endif +// Decide to use ftell or keep track of the current file pointer ourselves. +// Since valgrind shows that calling ftell has the unwanted side-effect of +// writing some uninitialized bytes (!) it might be better (and faster) to keep track +// of the current pointer ourselves. +#define USE_FTELL 0 + //------------------------------------------------------------------------------------ Store::Store() { m_file = 0; m_front = 0; + m_cur = 0; m_head = 0; m_state = Init; m_reads = 0; @@ -84,6 +91,7 @@ int Store::open(const char *name) fputc(0,m_file); } m_front = BLOCK_SIZE; + m_cur = BLOCK_SIZE; m_head = 0; m_state = Reading; return 0; @@ -109,9 +117,16 @@ portable_off_t Store::alloc() fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno)); exit(1); } +#if USE_FTELL pos = portable_ftell(m_file); STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 ); m_front = pos + BLOCK_SIZE; // move front to end of this block +#else + m_cur = m_front; + pos = m_cur; + STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 ); + m_front = pos + BLOCK_SIZE; +#endif } else // reuse freed block { @@ -128,6 +143,7 @@ portable_off_t Store::alloc() (int)pos,strerror(errno)); exit(1); } + m_cur = pos; STORE_ASSERT( (pos & (BLOCK_SIZE-1))==0 ); } //printf("%x: Store::alloc\n",(int)pos); @@ -140,7 +156,11 @@ int Store::write(const char *buf,uint size) //printf("%x: Store::write\n",(int)portable_ftell(m_file)); do { - portable_off_t curPos = portable_ftell(m_file); +#if USE_FTELL + portable_off_t curPos = portable_ftell(m_file); +#else + portable_off_t curPos = m_cur; +#endif int bytesInBlock = BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1)); int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0; int numBytes = size - bytesLeft; @@ -153,11 +173,16 @@ int Store::write(const char *buf,uint size) fprintf(stderr,"Error writing: %s\n",strerror(errno)); exit(1); } + m_cur+=numBytes; m_writes++; } if (bytesLeft>0) // still more bytes to write { +#if USE_FTELL STORE_ASSERT(((portable_ftell(m_file)+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0); +#else + STORE_ASSERT(((m_cur+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0); +#endif // allocate new block if (m_head==0) // no free blocks to reuse { @@ -168,15 +193,24 @@ int Store::write(const char *buf,uint size) fprintf(stderr,"Error writing to store: %s\n",strerror(errno)); exit(1); } + m_cur+=BLOCK_POINTER_SIZE; +#if USE_FTELL STORE_ASSERT(portable_ftell(m_file)==(curPos&~(BLOCK_SIZE-1))+BLOCK_SIZE); - +#else + STORE_ASSERT(m_cur==(curPos&~(BLOCK_SIZE-1))+BLOCK_SIZE); +#endif // move to next block if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file { fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno)); exit(1); } + m_cur=m_front; +#if USE_FTELL STORE_ASSERT(portable_ftell(m_file)==m_front); +#else + STORE_ASSERT(m_cur==m_front); +#endif // move front to the next of the block m_front+=BLOCK_SIZE; } @@ -200,6 +234,7 @@ int Store::write(const char *buf,uint size) (int)pos,strerror(errno)); exit(1); } + m_cur = pos; //printf("%x: Store::write: reuse\n",(int)pos); } } @@ -213,7 +248,11 @@ int Store::write(const char *buf,uint size) void Store::end() { STORE_ASSERT(m_state==Writing); - portable_off_t curPos = portable_ftell(m_file); +#if USE_FTELL + portable_off_t curPos = portable_ftell(m_file); +#else + portable_off_t curPos = m_cur; +#endif int bytesInBlock = BLOCK_SIZE - (curPos & (BLOCK_SIZE-1)); //printf("%x: Store::end erasing %x bytes\n",(int)curPos&~(BLOCK_SIZE-1),bytesInBlock); //printf("end: bytesInBlock=%x\n",bytesInBlock); @@ -254,6 +293,7 @@ void Store::release(portable_off_t pos) fprintf(stderr,"Store::release: Error reading from store: %s\n",strerror(errno)); exit(1); } + m_cur = cur+BLOCK_SIZE; if (next==0) break; // found end of list -> cur is last element STORE_ASSERT((next & (BLOCK_SIZE-1))==0); cur = next; @@ -271,6 +311,7 @@ void Store::seek(portable_off_t pos) (int)pos,strerror(errno)); exit(1); } + m_cur = pos; STORE_ASSERT((pos&(BLOCK_SIZE-1))==0); } @@ -280,7 +321,11 @@ int Store::read(char *buf,uint size) //printf("%x: Store::read total=%d\n",(int)portable_ftell(m_file),size); do { - portable_off_t curPos = portable_ftell(m_file); +#if USE_FTELL + portable_off_t curPos = portable_ftell(m_file); +#else + portable_off_t curPos = m_cur; +#endif int bytesInBlock = BLOCK_SIZE - BLOCK_POINTER_SIZE - (curPos & (BLOCK_SIZE-1)); int bytesLeft = bytesInBlock<(int)size ? (int)size-bytesInBlock : 0; int numBytes = size - bytesLeft; @@ -294,13 +339,18 @@ int Store::read(char *buf,uint size) fprintf(stderr,"Error reading from store: %s\n",strerror(errno)); exit(1); } + m_cur+=numBytes; m_reads++; } if (bytesLeft>0) { portable_off_t newPos; // read offset of the next block +#if USE_FTELL STORE_ASSERT(((portable_ftell(m_file)+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0); +#else + STORE_ASSERT(((m_cur+BLOCK_POINTER_SIZE)&(BLOCK_SIZE-1))==0); +#endif if (fread((char *)&newPos,BLOCK_POINTER_SIZE,1,m_file)!=1) { fprintf(stderr,"Error reading from store: %s\n",strerror(errno)); @@ -318,6 +368,7 @@ int Store::read(char *buf,uint size) (int)curPos,strerror(errno)); exit(1); } + m_cur = curPos; } size-=numBytes; diff --git a/src/store.h b/src/store.h index 10216a6..df23e96 100644 --- a/src/store.h +++ b/src/store.h @@ -109,6 +109,7 @@ class Store : public StorageIntf void printFreeList(); FILE *m_file; portable_off_t m_front; + portable_off_t m_cur; Node *m_head; State m_state; int m_reads; diff --git a/src/tclscanner.h b/src/tclscanner.h new file mode 100644 index 0000000..e080d6c --- /dev/null +++ b/src/tclscanner.h @@ -0,0 +1,52 @@ +/****************************************************************************** + * + * + * + * Copyright (C) 1997-2010 by Dimitri van Heesch. + * Copyright (C) 2010 by Rene Zaumseil + * + * 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 SCANNER_TCL_H +#define SCANNER_TCL_H + +#include "parserintf.h" + +/** \brief Tcl language parser using state-based lexical scanning. + * + * This is the Tcl language parser for doxygen. + */ +class TclLanguageScanner : public ParserInterface +{ + public: + virtual ~TclLanguageScanner() {} + 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, + bool showLineNumbers=TRUE + ); + void resetCodeParserState(); + void parsePrototype(const char *text); +}; + +#endif diff --git a/src/tclscanner.l b/src/tclscanner.l new file mode 100644 index 0000000..65e2793 --- /dev/null +++ b/src/tclscanner.l @@ -0,0 +1,2410 @@ +/***************************************************************************** + * Parser for Tcl subset + * + * Copyright (C) 2010 by Rene Zaumseil + * based on the work of 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 <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <ctype.h> + +#include "qtbc.h" +#include <qarray.h> +#include <qstack.h> +#include <qregexp.h> +#include <unistd.h> +#include <qfile.h> +#include <qdict.h> + +#include "entry.h" +#include "message.h" +#include "config.h" +#include "doxygen.h" +#include "util.h" +#include "defargs.h" +#include "language.h" +#include "commentscan.h" +#include "pre.h" +#include "tclscanner.h" +#include "outputlist.h" +#include "membername.h" +#include "searchindex.h" +#include "commentcnv.h" +#include "bufstr.h" +#include "portable.h" + +#include <stdarg.h> +#include <qstring.h> +#include <qstringlist.h> +#include <qlist.h> +//#include <qmap.h> + +#define HAS_TCL_SUBST 0 + +#define YY_NEVER_INTERACTIVE 1 + +#define MAX_INCLUDE_DEPTH 10 + +#define tcl_abort \ + fprintf(stderr,"%s#%d %s()",__FILE__,__LINE__,__FUNCTION__); \ + yy_push_state(ERROR); \ + yyless(0); \ + tcl_Abort +//#define TCL_DEBUG_FD NULL +#define TCL_WARN_FD stdout +#define tcl_warn \ + tcl_Warn("%.6d--(%s) %d# ",__LINE__,__FUNCTION__,yylineno); \ + tcl_Warn +#define TCL_DEBUG_FD NULL +//#define TCL_DEBUG_FD stdout +#define tcl_debug \ + tcl_Debug("%.6d--(%s) %d#%d ",__LINE__,__FUNCTION__,yylineno,yy_start_stack_ptr); \ + tcl_Debug + +//#define D printf("%.6d---(%s)%s\n",__LINE__,__FUNCTION__,yytext); +#define D + +// BEGIN of copy from tclUtil.c +// - Tcl_Interp removed +// - changes are marked with RZ +// #define's to adapt the code: +#define CONST const +#define UCHAR (unsigned char) +#define TCL_ERROR 1 +#define TCL_OK 0 +#define ckalloc malloc +#define ckfree free +#define TclCopyAndCollapse(size,src,dest) memcpy(dest,src,size); *(dest+size)=0 +int TclFindElement( + CONST char *list, /* Points to the first byte of a string + * containing a Tcl list with zero or more + * elements (possibly in braces). */ + int listLength, /* Number of bytes in the list's string. */ + CONST char **elementPtr, /* Where to put address of first significant + * character in first element of list. */ + CONST char **nextPtr, /* Fill in with location of character just + * after all white space following end of + * argument (next arg or end of list). */ + int *sizePtr, /* If non-zero, fill in with size of + * element. */ + int *bracePtr) /* If non-zero, fill in with non-zero/zero to + * indicate that arg was/wasn't in braces. */ +{ + CONST char *p = list; + CONST char *elemStart; /* Points to first byte of first element. */ + CONST char *limit; /* Points just after list's last byte. */ + int openBraces = 0; /* Brace nesting level during parse. */ + int inQuotes = 0; + int size = 0; /* lint. */ + //RZ int numChars; + + /* + * Skim off leading white space and check for an opening brace or quote. + * We treat embedded NULLs in the list as bytes belonging to a list + * element. + */ + + limit = (list + listLength); + while ((p < limit) && (isspace(UCHAR(*p)))) + { /* INTL: ISO space. */ + p++; + } + if (p == limit) + { /* no element found */ + elemStart = limit; + goto done; + } + + if (*p == '{') + { + openBraces = 1; + p++; + } + else if (*p == '"') + { + inQuotes = 1; + p++; + } + elemStart = p; + if (bracePtr != 0) + { + *bracePtr = openBraces; + } + + /* + * Find element's end (a space, close brace, or the end of the string). + */ + + while (p < limit) + { + switch (*p) + { + /* + * Open brace: don't treat specially unless the element is in + * braces. In this case, keep a nesting count. + */ + + case '{': + if (openBraces != 0) + { + openBraces++; + } + break; + + /* + * Close brace: if element is in braces, keep nesting count and + * quit when the last close brace is seen. + */ + + case '}': + if (openBraces > 1) + { + openBraces--; + } + else if (openBraces == 1) + { + size = (p - elemStart); + p++; + if ((p >= limit) || isspace(UCHAR(*p))) + { /* INTL: ISO space. */ + goto done; + } + + /* + * Garbage after the closing brace; return an error. + */ + + return TCL_ERROR; + } + break; + + /* + * Backslash: skip over everything up to the end of the backslash + * sequence. + */ + + case '\\': + //RZ Tcl_UtfBackslash(p, &numChars, NULL); + //RZ p += (numChars - 1); + p++; //RZ + break; + + /* + * Space: ignore if element is in braces or quotes; otherwise + * terminate element. + */ + + case ' ': + case '\f': + case '\n': + case '\r': + case '\t': + case '\v': + if ((openBraces == 0) && !inQuotes) { + size = (p - elemStart); + goto done; + } + break; + + /* + * Double-quote: if element is in quotes then terminate it. + */ + + case '"': + if (inQuotes) + { + size = (p - elemStart); + p++; + if ((p >= limit) || isspace(UCHAR(*p))) + { /* INTL: ISO space */ + goto done; + } + + /* + * Garbage after the closing quote; return an error. + */ + return TCL_ERROR; + } + break; + } + p++; + } + + /* + * End of list: terminate element. + */ + + if (p == limit) + { + if (openBraces != 0) + { + return TCL_ERROR; + } + else if (inQuotes) + { + return TCL_ERROR; + } + size = (p - elemStart); + } + +done: + while ((p < limit) && (isspace(UCHAR(*p)))) + { /* INTL: ISO space. */ + p++; + } + *elementPtr = elemStart; + *nextPtr = p; + if (sizePtr != 0) + { + *sizePtr = size; + } + return TCL_OK; +} + +int Tcl_SplitList( + CONST char *list, /* Pointer to string with list structure. */ + int *argcPtr, /* Pointer to location to fill in with the + * number of elements in the list. */ + CONST char ***argvPtr) /* Pointer to place to store pointer to array + * of pointers to list elements. */ +{ + CONST char **argv, *l, *element; + char *p; + int length, size, i, result, elSize, brace; + + /* + * Figure out how much space to allocate. There must be enough space for + * both the array of pointers and also for a copy of the list. To estimate + * the number of pointers needed, count the number of space characters in + * the list. + */ + + for (size = 2, l = list; *l != 0; l++) + { + if (isspace(UCHAR(*l))) + { /* INTL: ISO space. */ + size++; + + /* + * Consecutive space can only count as a single list delimiter. + */ + + while (1) + { + char next = *(l + 1); + + if (next == '\0') + { + break; + } + ++l; + if (isspace(UCHAR(next))) + { /* INTL: ISO space. */ + continue; + } + break; + } + } + } + length = l - list; + argv = (CONST char **) ckalloc((unsigned) + ((size * sizeof(char *)) + length + 1)); + for (i = 0, p = ((char *) argv) + size*sizeof(char *); + *list != 0; i++) + { + CONST char *prevList = list; + + result = TclFindElement(list, length, &element, &list, + &elSize, &brace); + length -= (list - prevList); + if (result != TCL_OK) + { + ckfree((char *) argv); + return result; + } + if (*element == 0) + { + break; + } + if (i >= size) + { + ckfree((char *) argv); + return TCL_ERROR; + } + argv[i] = p; + if (brace) + { + memcpy(p, element, (size_t) elSize); + p += elSize; + *p = 0; + p++; + } + else + { + TclCopyAndCollapse(elSize, element, p); + p += elSize+1; + } + } + + argv[i] = NULL; + *argvPtr = argv; + *argcPtr = i; + return TCL_OK; +} +// END of tclUtil.c + +void tcl_split_list(QString &str, QStringList &list) +{ + int argc; + const char **argv; + + list.clear(); + if (str.left(1)=="{" && str.right(1)=="}") + { + str=str.mid(1,str.length()-2); + } + else if (str.left(1)=="\"" && str.right(1)=="\"") + { + str=str.mid(1,str.length()-2); + } + if (Tcl_SplitList(str.ascii(),&argc,&argv) != TCL_OK) + { + list.append(str); + } + else + { + for (int i = 0; i < argc; i++) + { + list.append(argv[i]); + } + ckfree((char *) argv); + } +} + +//! Structure containing information about current scan context. +typedef struct +{ + int type; + QCString string_after; + int line0; // start line of scan context + int line1; // end line of scan context + int start_stack_ptr; // value of scan context + YY_BUFFER_STATE buffer_state; // value of scan context + Entry *entry_ns; // current namespace + Entry *entry_fn; // if set contains the current proc/method/constructor/destructor + Entry *entry_cl; // if set contain the current class + Entry *entry_scan; // current scan entry + Protection protection; // current protections state +} tcl_scan; + +//* Structure containing all internal global variables. +static struct +{ + CodeOutputInterface * code; // if set then we are codifying the file + int code_line; // current line of code + int code_linenumbers; // if true create line numbers in code + const char *code_font; // used font to codify + bool config_autobrief; // value of configuration option +#if HAS_TCL_SUBST + QMap<QString,QString> config_subst; // map of configuration option values +#endif + const char * input_string; // file contents + int input_position; // position in file + QCString file_name; // name of used file + ParserInterface *this_parser; // myself + int command; // true if command was found + int comment; // set true if comment was scaned + int brace_level; // bookkeeping of braces + int bracket_level; // bookkeeping of brackets + int bracket_quote; // bookkeeping of quotes (toggles) + int word_is; // type of current word + int line_comment; // line number of comment + int line_commentline; // line number of comment after command + int line_command; // line number of command + int line_body0; // start line of body + int line_body1; // end line of body + QString string_command; // contain current command + QString string_commentline; // contain current comment after command + QString string_commentcodify; // current comment string used in codifying + QString string_comment; // contain current comment + QString string_last; // contain last read word or part of word + QString string; // temporary string value + Entry* entry_main; // top level entry + Entry* entry_file; // entry of current file + Entry* entry_current; // currently used entry + Entry* entry_inside; // contain entry of current scan context + QStringList list_command; // list of command words + QList<tcl_scan> scan; // stack of scan contexts + QDict<Entry> ns; // all read namespace entries + QDict<Entry> cl; // all read class entries + QDict<Entry> fn; // all read function entries + QList<Entry> entry; // list of all created entries, will be deleted after codifying + Protection protection; // current protections state +} tcl; + +// scanner functions +static int yyread(char *buf,int max_size); +tcl_scan *tcl_scan_start(int type, QString content); +static void tcl_scan_end(); +static void tcl_comment(int what,const char *text); +static void tcl_word(int what,const char *text); +static void tcl_command(int what,const char *text); + +// helper functions + +//! Create new entry. +// @return new initialised entry +Entry* tcl_entry_new() +{ + Entry *myEntry = new Entry; + myEntry->section = Entry::EMPTY_SEC; + myEntry->name = ""; +// myEntry->type = ""; + myEntry->brief = ""; +// myEntry->doc = ""; + myEntry->protection = Package; +// myEntry->mtype = Method; +// myEntry->virt = Normal; +// myEntry->stat = FALSE; + myEntry->fileName = tcl.file_name; + myEntry->lang = SrcLangExt_Tcl; + initGroupInfo(myEntry); + // collect entries + if (tcl.code==NULL) + { + tcl.entry.insert(0,myEntry); + } + return myEntry; +} + +//! Set protection level. +void tcl_protection(Entry *entry) { + if (entry->protection!=Public&&entry->protection!=Protected&&entry->protection!=Private) + { + entry->protection = tcl.protection; + } + if (entry->protection!=Protected&&entry->protection!=Private) + { + entry->protection = Public; + } +} + +//! Check name. +// @return 'ns' and 'name' of given current 'ns0' and 'name0' +static void tcl_name(const QString ns0, const QString name0, QString &ns, QString &name) +{ + QString myNm; + int myStart; + + if (strncmp(name0.ascii(),"::",2)==0) + { + myNm = name0.mid(2); + } + else if (ns0.length()) + { + myNm = ns0 + "::" + name0; + } + else + { + myNm = name0; + } + myStart = myNm.findRev("::"); + if (myStart == -1) + { + ns = ""; + name = myNm; + } + else + { + ns = myNm.mid(0,myStart); + name = myNm.mid(myStart+2); + } +} + +// Check and return namespace entry. +// @return namespace entry +Entry* tcl_entry_namespace(const QString ns) +{ + Entry *myEntry; + QString myNs = " "; + if (strlen(ns.ascii())) {myNs = ns;} + + myEntry = tcl.ns.find(myNs); + if (myEntry == NULL) + { + myEntry = tcl_entry_new(); + myEntry->section = Entry::NAMESPACE_SEC; + myEntry->name = ns.ascii(); + tcl.entry_main->addSubEntry(myEntry); + tcl.ns.insert(ns,myEntry); + } + return myEntry; +} + +// Check and return class entry. +// @return class entry +Entry* tcl_entry_class(const QString cl) +{ + Entry *myEntry; + QString myCl = " "; + if (strlen(cl.ascii())) {myCl = cl;} + + myEntry = tcl.cl.find(myCl); + if (myEntry == NULL) + { + myEntry = tcl_entry_new(); + myEntry->section = Entry::CLASS_SEC; + myEntry->name = cl.ascii(); + tcl.entry_main->addSubEntry(myEntry); + tcl.cl.insert(cl,myEntry); + } + return myEntry; +} + +//! Check for keywords. +// @return 1 if keyword and 0 otherwise +static int tcl_keyword(QString str) +{ + static QStringList myList; + static int myInit=1; + if (myInit) + { +// tcl keywords + myList <<"append"<<"apply"<<"array"<<"auto_execok"<<"auto_import"<<"auto_load"<<"auto_mkindex"<<"auto_qualify"<<"auto_reset"<<"catch"<<"cd"<<"close"<<"concat"<<"eof"<<"exec"<<"exit"<<"fblocked"<<"fconfigure"<<"file"<<"flush"<<"foreach"<<"format"<<"gets"<<"global"<<"http"<<"if"<<"incr"<<"info"<<"join"<<"lappend"<<"lassign"<<"lindex"<<"linsert"<<"llength"<<"load"<<"lrange"<<"lrepeat"<<"lreplace"<<"lreverse"<<"lset"<<"namespace"<<"parray"<<"pid"<<"pkg_mkIndex"<<"proc"<<"puts"<<"pwd"<<"registry"<<"rename"<<"return"<<"scan"<<"set"<<"split"<<"tclLog"<<"tcl_endOfWord"<<"tcl_findLibrary"<<"tcl_startOfNextWord"<<"tcl_startOfPreviousWord"<<"tcl_wordBreakAfter"<<"tcl_wordBreakBefore"<<"tell"<<"time"<<"unknown"<<"upvar"<<"variable"<<"vwait"; +// tk keywords + myList <<"bell"<<"bind"<<"clipboard"<<"console"<<"consoleinterp"<<"event"<<"focus"<<"grid"<<"pack"<<"place"<<"tkwait"<<"winfo"<<"wm"<<"bindtags"<<"destroy"<<"lower"<<"option"<<"raise"<<"send"<<"tkerror"<<"tkwait"<<"tk_bisque"<<"tk_focusNext"<<"tk_focusPrev"<<"tk_focusFollowsMouse"<<"tk_popup"<<"tk_setPalette"<<"tk_textCut"<<"tk_TextCopy"<<"tk_textPaste"<<"chooseColor"<<"tk_chooseColor"<<"tk_chooseDirectory"<<"tk_dialog"<<"tk_getOpenFile"<<"tkDialog"<<"tk_getSaveFile"<<"tk_messageBox"<<"button"<<"canvas"<<"checkbutton"<<"entry"<<"frame"<<"image"<<"label"<<"labelframe"<<"listbox"<<"menu"<<"menubutton"<<"message"<<"panedwindow"<<"radiobutton"<<"scale"<<"scrollbar"<<"spinbox"<<"toplevel"; + myList.sort(); + myInit=0; + } + str=str.stripWhiteSpace(); + if (str.left(2)=="::") {str=str.mid(2);} + if (myList.findIndex(str) != -1) return(1); + return 0; +} + +//! End codifying with special font class. +static void tcl_font_end() +{ + if (tcl.code==NULL) return; + if (tcl.code_font) + { + tcl.code->endFontClass(); + tcl.code_font=NULL; + } +} + +//! Codify 'str' with special font class 's'. +static void tcl_codify(const char *s,char *str) +{ + if (tcl.code==NULL||str==NULL) return; + if (s) + { + tcl_font_end(); + tcl.code->startFontClass(s); + tcl.code_font=s; + } + char *p=str,*sp=p; + char c; + bool done=FALSE; + while (!done) + { + sp=p; + while ((c=*p++) && c!='\n') {} + if (c=='\n') + { + tcl.code_line++; + *(p-1)='\0'; + tcl.code->codify(sp); + //tcl_font_end(); + tcl.code->endCodeLine(); + if (tcl.code_linenumbers) + { + tcl.code->writeLineNumber(0,0,0,tcl.code_line); + } + } + else + { + tcl.code->codify(sp); + done=TRUE; + } + } + tcl_font_end(); +} + +//! Codify 'str' with special font class 's'. +static void tcl_codify(const char *s,const char *str) +{ + if (tcl.code==NULL) return; + char *tmp= (char *) malloc(strlen(str)+1); + strcpy(tmp, str); + tcl_codify(s,tmp); + free(tmp); +} + +//! Codify 'str' with special font class 's'. +static void tcl_codify(const char *s,QString str) +{ + if (tcl.code==NULL) return; + char *tmp= (char *) malloc(str.length()+1); + strcpy(tmp, str.data()); + tcl_codify(s,tmp); + free(tmp); +} + +//! Codify 'str' with special font class 's'. +static void tcl_codify(const char *s,QCString str) +{ + if (tcl.code==NULL) return; + char *tmp= (char *) malloc(str.length()+1); + strcpy(tmp, str); + tcl_codify(s,tmp); + free(tmp); +} + +//! Print abort message. +static void tcl_Abort(const char *format, ...) +{ + va_list myList; + + fprintf(stderr,"=== Error in file %s line: %d, state: %d ===\n",tcl.file_name.data(),yylineno,YY_START); + va_start(myList, format); + vfprintf(stderr,format, myList); + va_end(myList); + fprintf(stderr,"\n===\n"); + + EntryListIterator eli(*tcl.entry_main->children()); + Entry *ce; + bool start=FALSE; + + for (;(ce=eli.current());++eli) + { + if (ce == tcl.entry_file) start=TRUE; + if (start) ce->reset(); + } +} + +//! Print warning message. +static void tcl_Warn(const char *format, ...) +{ + va_list myList; + FILE *fd=TCL_WARN_FD; + + if (fd==NULL) return; + va_start(myList, format); + vfprintf(fd, format, myList); + fputc('\n',fd); + va_end(myList); +} + +//! Print debug message. +static void tcl_Debug(const char *format, ...) +{ + va_list myList; + FILE *fd=TCL_DEBUG_FD; + + if (fd==NULL) return; + va_start(myList, format); + vfprintf(fd, format, myList); + fputc('\n',fd); + va_end(myList); +} +/* +//! Print debug message. +static void tcl_Debug(const tcl_scan *s,const char *format, ...) +{ + va_list myList; + FILE *fd=TCL_DEBUG_FD; + + if (fd==NULL) return; + va_start(myList, format); + vfprintf(fd, format, myList); + va_end(myList); + fprintf(fd, ": tcl_scan[%d,%d] stack=%d type=%d name='%s'\n", + s->line0,s->line1,s->start_stack_ptr,s->type,s->entry_ns->name.data()); +} + +//! Print debug message. +static void tcl_Debug(const Entry *e,const char *format, ...) +{ + va_list myList; + FILE *fd=TCL_DEBUG_FD; + + if (fd==NULL) return; + va_start(myList, format); + vfprintf(fd, format, myList); + va_end(myList); + fprintf(fd,": Entry '%s' type=%s, section=0x%x file=%s (%d children)\n", + (const char*)e->name, (const char*)e->type, e->section, + (const char*)e->fileName, e->children()->count()); +} +*/ +//----------------------------------------------------------------------------- +#undef YY_INPUT +#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size); +//----------------------------------------------------------------------------- +%} +ws ([ \t]|\\\n) + +%option yylineno +%option noyywrap +%option stack + +%x ERROR +%x TOP +%x COMMAND +%x WORD +%x COMMENT +%x COMMENT_NL +%x COMMENT_CODE +%x COMMENT_VERB +%x COMMENTLINE +%x COMMENTLINE_NL +%x STRING +%x QUOTE +%x BRACE +%x BRACKET +%% +<ERROR>. { +D + yyterminate(); +} +<<EOF>> { +D + if (tcl.scan.count()<1) + {// error +D + tcl_abort("stack empty"); + yyterminate(); + } + else if (tcl.scan.count()==1) + {// exit, check on input? +D + yyterminate(); + } + else + {// continue +D + tcl_command(-1,""); + tcl_scan_end(); + } +} +<TOP>"#" { +D + yyless(0); + tcl.line_comment=yylineno; + tcl_comment(0,""); +} +<TOP>({ws}|[\;\n])+ { +D + tcl_codify(NULL,yytext); +} +<TOP>. { +D + yyless(0); + tcl.line_command=yylineno; + tcl_command(0,""); +} + +<COMMENT>[ \t]* { +D + tcl_codify("comment",yytext); +} +<COMMENT>"##".*\\\n { +D + tcl_codify("comment",yytext); + QString t=yytext; + t = t.mid(2,t.length()-3); + t.append('\n'); + tcl_comment(1,t.ascii()); + yy_push_state(COMMENT_NL); +} +<COMMENT>"##".*\n { +D + tcl_codify("comment",yytext); + tcl_comment(1,yytext+2); +} +<COMMENT>"#"[@\\]"code"\n[ \t]*[^#] { +D + QString t=yytext; + tcl_codify("comment",t.left(7)); + tcl_comment(2,"\n@code\n"); + yyless(7); + yy_push_state(COMMENT_CODE); +} +<COMMENT_CODE>"#"[@\\]"endcode"\n { +D + QString t=yytext; + t = t.left(t.length()-10); + tcl_comment(2,t.ascii()); + tcl_comment(2,"\n@endcode\n"); + yy_pop_state(); + yyless(0); +} +<COMMENT_CODE>.*\n { +D + yymore(); +} +<COMMENT>"#"[@\\]"verbatim"\n[ \t]*[^#] { +D + QString t=yytext; + tcl_codify("comment",t.left(11)); + tcl_comment(2,"\n@verbatim\n"); + yyless(11); + yy_push_state(COMMENT_VERB); +} +<COMMENT_VERB>"#"[@\\]"endverbatim"\n { +D + QString t=yytext; + t = t.left(t.length()-14); + tcl_comment(2,t.ascii()); + tcl_comment(2,"\n@endverbatim\n"); + yy_pop_state(); + yyless(0); +} +<COMMENT_VERB>.*\n { +D + yymore(); +} +<COMMENT>"#".*\\\n { +D + tcl_codify("comment",yytext); + QString t=yytext; + t = t.mid(1,t.length()-3); + t.append('\n'); + tcl_comment(2,t.ascii()); + yy_push_state(COMMENT_NL); +} +<COMMENT_NL>.*\\\n { +D + tcl_codify("comment",yytext); + tcl_comment(2,yytext); +} +<COMMENT_NL>.*\n { +D + tcl_codify("comment",yytext); + tcl_comment(2,yytext); + yy_pop_state(); +} +<COMMENT>"#".*\x1A { +D + QString t=yytext; + t = t.mid(0,t.length()-1); + tcl_codify("comment",t.ascii()); + t = t.mid(1,t.length()); + tcl_comment(-2,t.ascii()); + unput(0x1A); +} +<COMMENT>"#".*\n { +D + tcl_codify("comment",yytext); + tcl_comment(2,yytext+1); +} +<COMMENT>\x1A { +D + tcl_comment(-2,yytext); +} +<COMMENT>.|\n { +D + yyless(0); + tcl_comment(-2,yytext); +} + +<COMMENTLINE>[ \t]* { +D + tcl.string_commentcodify += yytext; +} +<COMMENTLINE>"#<".*\\\n { +D + tcl.string_commentcodify += yytext; + QString t=yytext; + t = t.mid(2,t.length()-4); + t.append('\n'); + tcl.string_commentline += t; + yy_push_state(COMMENTLINE_NL); +} +<COMMENTLINE>"#<".*\n { +D + tcl.string_commentcodify += yytext; + tcl.string_commentline += (yytext+2); +} +<COMMENTLINE_NL>.*\\\n { +D + tcl.string_commentcodify += yytext; + QString t=yytext; + t = t.left(t.length()-3); + t.append('\n'); + tcl.string_commentline += t; +} +<COMMENTLINE_NL>.*\n { +D + tcl.string_commentcodify += yytext; + tcl.string_commentline += yytext; + yy_pop_state(); +} +<COMMENTLINE_NL>.*\x1A { +D + QString t=yytext; + t = t.left(t.length()-1); + tcl.string_commentcodify += t; + tcl.string_commentline += t; + yy_pop_state(); + unput(0x1A); +} +<COMMENTLINE>.|\n { +D + yy_pop_state(); + if (tcl.string_commentline.length()) + { + tcl.entry_current->brief = tcl.string_commentline; + tcl.entry_current->briefLine = tcl.line_commentline; + tcl.entry_current->briefFile = tcl.file_name; + } + yyless(0); + tcl_command(-1,tcl.string_commentcodify.ascii()); + tcl.string_commentline=""; + tcl.string_commentcodify=""; +} + +<COMMAND>{ws}*[\;]{ws}*"#<" { +D + tcl.string_commentcodify = yytext; + tcl.string_commentcodify = tcl.string_commentcodify.left(tcl.string_commentcodify.length()-2); + tcl.string_commentline = ""; + tcl.line_commentline = yylineno; + tcl.line_body1=yylineno; + unput('<'); + unput('#'); + yy_push_state(COMMENTLINE); +} +<COMMAND>\x1A { +D + tcl.string_commentcodify = ""; + tcl.string_commentline = ""; + tcl.line_body1=yylineno-1; + tcl_command(-1,""); +} +<COMMAND>{ws}*[;\n] { +D + tcl.string_commentcodify = ""; + tcl.string_commentline = ""; + tcl.line_body1=yylineno-1; + tcl_command(-1,yytext); +} +<COMMAND>{ws}+ { +D + tcl_command(1,yytext); +} +<COMMAND>"{*}". { +D + tcl.word_is = WORD; + tcl.string_last = "{*}"; + tcl_word(0,&yytext[3]); +} +<COMMAND>. { +D + switch (yytext[0]) + { + case '{': tcl.word_is = BRACE; break; + case '[': tcl.word_is = BRACKET; break; + case '"': tcl.word_is = QUOTE; break; + default: tcl.word_is = WORD; + } + tcl.string_last = ""; + tcl_word(0,yytext); +} + +<WORD>"\\\\" | +<WORD>"\\"[\{\}\[\]\;\" \t] { + tcl_word(1,yytext); +} +<WORD>"\\\n" { + tcl_word(2,yytext); +} +<WORD>"{" { + tcl_word(3,yytext); +} +<WORD>"}" { + tcl_word(4,yytext); +} +<WORD>"[" { + tcl_word(5,yytext); +} +<WORD>"]" { + tcl_word(6,yytext); +} +<WORD>"\"" { + tcl_word(7,yytext); +} +<WORD>" " { + tcl_word(8,yytext); +} +<WORD>"\t" { + tcl_word(9,yytext); +} +<WORD>";" { + tcl_word(10,yytext); +} +<WORD>"\n" { + tcl_word(11,yytext); +} +<WORD>\x1A { + tcl_word(12,yytext); +} +<WORD>. { + tcl_word(1,yytext); +} +%% + +//! Start new scan context for given 'content'. +// @return created new scan context. +tcl_scan *tcl_scan_start(int type, QString content, const char *after) +{ + tcl_scan *myScan; + QString myName; + char c[2]=" "; + + myScan=tcl.scan.at(0); + myScan->line1=yylineno; + myScan->start_stack_ptr=yy_start_stack_ptr; + yy_push_state(TOP); + + myScan=new tcl_scan; + myScan->type = type; + myScan->string_after=after; + + switch (myScan->type) + { + case QUOTE: c[0]='"'; +tcl_debug("+++\" %d\n?%s?",tcl.line_body0,content.ascii()); + break; + case BRACE: c[0]='{'; +tcl_debug("+++{ %d\n?%s?",tcl.line_body0,content.ascii()); + break; + case BRACKET: c[0]='['; +tcl_debug("+++[ %d\n?%s?",tcl.line_body0,content.ascii()); + break; + default: +tcl_debug("+++. %d\n?%s?",tcl.line_body0,content.ascii()); + break; + } + if (c[0]!=' ') + { + tcl_codify(NULL,c); + content = content.mid(1,content.length()-2); + content += (char)0x1A;// for detection end of scan context +tcl_debug("???%s?",content.ascii()); + } + myScan->entry_ns = tcl.scan.at(0)->entry_ns; + myScan->entry_cl = tcl.scan.at(0)->entry_cl; + myScan->entry_fn = tcl.scan.at(0)->entry_fn; + myScan->entry_scan = tcl.entry_current; + myScan->buffer_state=yy_scan_string(content.ascii()); + myScan->line0=tcl.line_body0; + myScan->line1=tcl.line_body1; + yylineno=myScan->line0; + myScan->start_stack_ptr=yy_start_stack_ptr; + myScan->protection = tcl.protection; + + tcl.entry_inside = myScan->entry_scan; + tcl.entry_current = tcl_entry_new(); + tcl.scan.insert(0,myScan); + yy_switch_to_buffer(myScan->buffer_state); + return (myScan); +} + +//! Close current scan context. +static void tcl_scan_end() +{ + tcl_scan *myScan; + char c[2]=" "; + + myScan=tcl.scan.at(0); + switch (myScan->type) + { + case QUOTE: c[0]='"'; break; + case BRACE: c[0]='}'; break; + case BRACKET: c[0]=']'; break; + } + if (c[0]!=' ') {tcl_codify(NULL,c);} + if (myScan->string_after.length()) {tcl_codify("comment",myScan->string_after);} + yy_delete_buffer(myScan->buffer_state); + tcl.scan.removeFirst(); + yy_pop_state(); + myScan=tcl.scan.at(0); + tcl.entry_inside = myScan->entry_scan; +tcl_debug("---%d",myScan->line1); + yy_switch_to_buffer(myScan->buffer_state); + yylineno=myScan->line1; + tcl.protection = myScan->protection; +} + +//! Handling of word parsing. +static void tcl_word(int what,const char *text) +{ + static char myList[1024]="";// nesting level list + static int myLevel=0;// number of current nesting level + static int myWhite=0;// set true when next char should be whitespace + static char myWord;// internal state + + switch (what) + { + case 0:// start + yy_push_state(WORD); + switch (text[0]) + { + case '{': + case '[': + case '"': myWord = text[0]; break; + default: myWord = '.'; + } + myList[0]=myWord; + myLevel=1; + myWhite=0; + break; + case 1:// all other chars + if (myWhite) + {// {x}y "x"y + tcl_abort("expected word separator: %s",text); + return; + } + if (myLevel==0) + { + myWord='.'; + myList[0]=myWord; + myLevel=1; + } + break; + case 2:// \\\n + if (myLevel==0) + { + myWord=' '; + yy_pop_state(); + yyless(0); +tcl_debug("(\\\n) ?%s?",tcl.string_last.ascii()); + return; + } + switch (myList[myLevel-1]) + { + case '{': + case '[': + case '"': + break; + case '.': + if (myLevel==1) + { + myWord=' '; + yy_pop_state(); + yyless(0); +tcl_debug("(\\\n) ?%s?",tcl.string_last.ascii()); + return; + } + break; + } + myWhite=0; + break; + case 3:// { + if (myWhite) + {// {x}{ "x"{ + tcl_abort("expected word separator: %s",text); + return; + } + switch (myList[myLevel-1]) + { + case '{': + case '[': + myList[myLevel++]='{'; + break; + case '"': + case '.': + break; + } + myWhite=0; + break; + case 4:// } + if (myWhite) + {// {x}{ "x"{ + tcl_abort("expected word separator: %s",text); + return; + } + switch (myList[myLevel-1]) + { + case '{':// {{x}} + myLevel--; + if (myLevel==0) {myWhite=1;} + break; + case '[': + case '"': + case '.': + break; + } + break; + case 5:// [ + if (myWhite) + {// {x}[ + tcl_abort("expected word separator: %s",text); + return; + } + switch (myList[myLevel-1]) + { + case '{': + break; + case '[': + case '"': + case '.': + myList[myLevel++]='['; + break; + } + myWhite=0; + break; + case 6:// ] + if (myWhite) + {// {x}] + tcl_abort("expected word separator: %s",text); + return; + } + switch (myList[myLevel-1]) + { + case '{': + break; + case '[': + myLevel--; + break; + case '"': + case '.': + break; + } + myWhite=0; + break; + case 7:// " + if (myWhite) + {// {x}" + tcl_abort("expected word separator: %s",text); + return; + } + switch (myList[myLevel-1]) + { + case '{': + break; + case '[': + myList[myLevel++]='"'; + break; + case '"': + myLevel--; + case '.': + break; + } + break; + case 8:// ' ' + case 9:// \t + case 10:// ; + case 11:// \n + case 12:// \x1A + if (myLevel==0) + { + myWord=' '; + yy_pop_state(); + yyless(0); +tcl_debug("(%d) ?%s?",what,tcl.string_last.ascii()); + return; + } + switch (myList[myLevel-1]) + { + case '{': + case '[': + case '"': + break; + case '.': + if (myLevel==1) + { + myWord=' '; + yy_pop_state(); + yyless(0); +tcl_debug("(.%d) ?%s?",what,tcl.string_last.ascii()); + return; + } + else + { + myLevel--; + } + break; + } + myWhite=0; + break; + default: + tcl_abort("wrong state: %d",what); + return; + } + tcl.string_last += text; +} + +//! Handling of comment parsing. +static void tcl_comment(int what,const char *text) +{ + if (what==0) + { // begin of comment + if (tcl.comment) + { + tcl_abort("comment in comment"); + return; + } + yy_push_state(COMMENT); +tcl_debug("+++%s",text); + tcl.string_comment=""; + tcl.comment=0; + } + else if (what==1) + { // start new comment + if (tcl.comment) + { + tcl_comment(99,""); // inbody + } + tcl.string_comment=text; + tcl.comment=1; + } + else if (what==2) + { // add to comment + if (tcl.comment) + { + tcl.string_comment+=text; + } + } + else if (what==-1 || what == -2) + { // end of comment without/with command + if (tcl.comment) + { + tcl.string_last=tcl.string_comment; + tcl_comment(100+what,""); + } + else + { + tcl.string_last = ""; +tcl_debug("---%s",(const char *)tcl.string_comment); + } + yy_pop_state(); + tcl.string_comment=""; + tcl.comment=0; + } + else if (what==98 || what==99) + { // 98=new 99=inbody + if (tcl.this_parser && tcl.string_comment.length()) + { +tcl_debug("---%s",(const char *)tcl.string_comment); + int myPos=0; + bool myNew=0; + int myLine=tcl.line_comment; + BufStr myI(1024); + BufStr myO(1024); + Protection myProt=tcl.protection; + + // resolve ALIASES + myI.addArray("/*!",3); + myI.addArray(tcl.string_comment.ascii(),tcl.string_comment.length()); + myI.addArray("*/",2); + convertCppComments(&myI,&myO,tcl.file_name); + myO.dropFromStart(3); + myO.shrink(myO.curPos()-2); + myO.addChar('\0'); + QCString myDoc = myO.data(); + if (what==99) + { // inbody comment file or namespace or class or proc/metho + int myPos0; + int myLine0; + Entry myEntry0; // used to test parsing + Entry *myEntry; + + Entry *myEntry1=tcl.scan.at(0)->entry_ns; + if (tcl.scan.at(0)->entry_fn) + { + myEntry1=tcl.scan.at(0)->entry_fn; + } + else if (tcl.scan.at(0)->entry_cl) + { + myEntry1=tcl.scan.at(0)->entry_cl; + } + + myPos0=myPos; + myLine0=myLine; + while (parseCommentBlock(tcl.this_parser, &myEntry0, myDoc, tcl.file_name, + myLine, FALSE, tcl.config_autobrief, FALSE, myProt, myPos, myNew)) + { + if (myNew) + { // we need a new entry in this case + myNew=0; + myEntry = tcl_entry_new(); + parseCommentBlock(tcl.this_parser, myEntry, myDoc, tcl.file_name, + myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew); + tcl.entry_inside->addSubEntry(myEntry); + } + else + { // we can add to current entry in this case + parseCommentBlock(tcl.this_parser, myEntry1, myDoc, tcl.file_name, + myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew); + } + myPos0=myPos; + myLine0=myLine; + } + if (myNew) + { // we need a new entry + myNew=0; + myEntry = tcl_entry_new(); + parseCommentBlock(tcl.this_parser, myEntry, myDoc, tcl.file_name, + myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew); + tcl.entry_inside->addSubEntry(myEntry); + } + else + { // we can add to current entry + parseCommentBlock(tcl.this_parser, myEntry1, myDoc, tcl.file_name, + myLine0, FALSE, tcl.config_autobrief, FALSE, myProt, myPos0, myNew); + } + } + else + { // new entry + tcl.entry_current = tcl_entry_new(); + while (parseCommentBlock(tcl.this_parser, tcl.entry_current, myDoc, + tcl.file_name, myLine, FALSE, tcl.config_autobrief, FALSE, + myProt, myPos, myNew)) + { + if (myNew) + { + tcl.entry_inside->addSubEntry(tcl.entry_current); + tcl.entry_current = tcl_entry_new(); + } + else + { + tcl.entry_current->section = tcl.entry_inside->section; + tcl.entry_current->name = tcl.entry_inside->name; + } + } + if (myNew) + { + tcl.entry_inside->addSubEntry(tcl.entry_current); + tcl.entry_current = tcl_entry_new(); + } + else + { + tcl.entry_current->section = tcl.entry_inside->section; + tcl.entry_current->name = tcl.entry_inside->name; + } + } + if (tcl.protection != myProt) + { + tcl.scan.at(0)->protection = tcl.protection = myProt; + } + } + } + else + { + tcl_abort("what %d",what); + return; + } +} + +//! Parse given \c arglist . +static void tcl_command_ARGLIST(QString &arglist) +{ + Argument *myArg; + QStringList myArgs; + QString myArglist=""; + + if (tcl.entry_current->argList==NULL) + { + tcl.entry_current->argList=new ArgumentList; + } + tcl_split_list(arglist,myArgs); + for (uint i=0;i<myArgs.count();i++) + { + QStringList myArgs1; + myArg=new Argument; + + tcl_split_list(*myArgs.at(i),myArgs1); + if (myArgs1.count()==2) + { + myArg->name= *myArgs1.at(0); + myArg->defval= *myArgs1.at(1); + if (myArg->defval.isEmpty()) + { + myArg->defval = " "; + } + myArglist = myArglist + "?" + myArg->name.data() + "? "; + } + else + { + myArg->name= *myArgs.at(i); + myArglist = myArglist + myArg->name.data() + " "; + } + tcl.entry_current->argList->append(myArg); + } + arglist = myArglist; + tcl.entry_current->args = arglist; +} + +//! Handle all other commands. +static void tcl_command_OTHER(const char *text) +{ + for (unsigned int i=0; i< tcl.list_command.count(); i++) + { + if (i==0 && tcl_keyword(*tcl.list_command.at(i))) + { + tcl_codify("keyword",*tcl.list_command.at(i)); + } + else + { + tcl_codify(NULL,*tcl.list_command.at(i)); + } + } + tcl_codify(NULL,text); +} + +//! Handle \c proc statements. +static void tcl_command_PROC(const char *text) +{ + QString myNs, myName; + Entry *myEntryNs, *myEntry; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify(NULL,*tcl.list_command.at(2)); + tcl_codify(NULL,*tcl.list_command.at(3)); + tcl_codify(NULL,*tcl.list_command.at(4)); + tcl_codify(NULL,*tcl.list_command.at(5)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(2),myNs,myName); + if (myNs.length()) + { + myEntryNs = tcl_entry_namespace(myNs); + } + else + { + myEntryNs = myScan->entry_ns; + } + tcl.entry_current->section = Entry::FUNCTION_SEC; + tcl.entry_current->mtype = Method; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl_protection(tcl.entry_current); + tcl_command_ARGLIST(*tcl.list_command.at(4)); + myEntryNs->addSubEntry(tcl.entry_current); + myEntry = tcl.entry_current; + tcl.fn.insert(myName,myEntry); + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(6),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = NULL; + myScan->entry_fn = myEntry; +} + +//! Handle \c itcl::body statements. +static void tcl_command_ITCL_BODY(const char *text) +{ + QString myNs, myName; + Entry *myEntryNs, *myEntryCl, *myEntry; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify(NULL,*tcl.list_command.at(2)); + tcl_codify(NULL,*tcl.list_command.at(3)); + tcl_codify(NULL,*tcl.list_command.at(4)); + tcl_codify(NULL,*tcl.list_command.at(5)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(2),myNs,myName); + if (myNs.length()) + { + myEntryNs = tcl_entry_namespace(myNs); + myEntryCl = tcl_entry_class(myNs); + } + else + { + myEntryNs = myScan->entry_ns; + myEntryCl = myScan->entry_cl; + } + tcl_command_ARGLIST(*tcl.list_command.at(4)); + myEntry = tcl.fn.find(myName); + if (myEntry != NULL) + { + tcl.entry_current->section = Entry::EMPTY_SEC; + if (myEntry->args.isEmpty()) + { + myEntry->args = tcl.entry_current->args; + myEntry->argList = tcl.entry_current->argList; + } + if (myEntry->brief.isEmpty()) + { + myEntry->brief = tcl.entry_current->brief; + myEntry->briefFile = tcl.entry_current->briefFile; + myEntry->briefLine = tcl.entry_current->briefLine; + } + else if (!tcl.entry_current->brief.isEmpty()) + { + myEntry->doc.append("\n<p>\n"); + myEntry->doc.append(tcl.entry_current->brief); + } + if (myEntry->doc.isEmpty()) + { + myEntry->doc = tcl.entry_current->doc; + myEntry->docFile = tcl.entry_current->docFile; + myEntry->docLine = tcl.entry_current->docLine; + } + else if (!tcl.entry_current->doc.isEmpty()) + { + myEntry->doc.append("\n<p>\n"); + myEntry->doc.append(tcl.entry_current->doc); + } + myEntry->bodyLine = tcl.line_body0; + myEntry->endBodyLine = tcl.line_body1; + } else {// should not happen, may be ignore? + tcl.entry_current->section = Entry::FUNCTION_SEC; + tcl.entry_current->mtype = Method; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl_protection(tcl.entry_current); + tcl.fn.insert(myName,tcl.entry_current); + myEntryCl->addSubEntry(tcl.entry_current); + myEntry = tcl.entry_current; + } + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(6),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = myEntry; +} + +//! Handle \c oo::define method and method inside \c itcl::class statements. +static void tcl_command_METHOD(const char *text) +{ + QString myNs, myName; + Entry *myEntryNs, *myEntryCl, *myEntry; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify(NULL,*tcl.list_command.at(2)); + tcl_codify(NULL,*tcl.list_command.at(3)); + tcl_codify(NULL,*tcl.list_command.at(4)); + tcl_codify(NULL,*tcl.list_command.at(5)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(2),myNs,myName); + if (myNs.length()) + { + myEntryNs = tcl_entry_namespace(myNs); + myEntryCl = tcl_entry_class(myNs); + } + else + { + myEntryNs = myScan->entry_ns; + myEntryCl = myScan->entry_cl; + } + tcl.entry_current->section = Entry::FUNCTION_SEC; + tcl.entry_current->mtype = Method; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl_protection(tcl.entry_current); + tcl_command_ARGLIST(*tcl.list_command.at(4)); + myEntryCl->addSubEntry(tcl.entry_current); + tcl.fn.insert(myName,tcl.entry_current); + myEntry = tcl.entry_current; + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(6),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = myEntry; +} + +//! Handle \c constructor statements inside class definitions. +static void tcl_command_CONSTRUCTOR(const char *text) +{ + QString myNs, myName; + Entry *myEntryNs, *myEntryCl, *myEntry; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify(NULL,*tcl.list_command.at(2)); + tcl_codify(NULL,*tcl.list_command.at(3)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(0),myNs,myName); + if (myNs.length()) + { + myEntryNs = tcl_entry_namespace(myNs); + myEntryCl = tcl_entry_class(myNs); + } + else + { + myEntryNs = myScan->entry_ns; + myEntryCl = myScan->entry_cl; + } + tcl.entry_current->section = Entry::FUNCTION_SEC; + tcl.entry_current->mtype = Method; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl_protection(tcl.entry_current); + tcl_command_ARGLIST(*tcl.list_command.at(2)); + myEntryCl->addSubEntry(tcl.entry_current); + myEntry = tcl.entry_current; + tcl.fn.insert(myName,myEntry); + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(4),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = myEntry; +} + +//! Handle \c destructor statements inside class definitions. +static void tcl_command_DESTRUCTOR(const char *text) +{ + QString myNs, myName; + Entry *myEntryNs, *myEntryCl, *myEntry; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(0),myNs,myName); + if (myNs.length()) + { + myEntryNs = tcl_entry_namespace(myNs); + myEntryCl = tcl_entry_class(myNs); + } + else + { + myEntryNs = myScan->entry_ns; + myEntryCl = myScan->entry_cl; + } + tcl.entry_current->section = Entry::FUNCTION_SEC; + tcl.entry_current->mtype = Method; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl_protection(tcl.entry_current); + myEntryCl->addSubEntry(tcl.entry_current); + myEntry = tcl.entry_current; + tcl.fn.insert(myName,myEntry); + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(2),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = myEntry; +} + +//! Handle \c namespace statements. +static void tcl_command_NAMESPACE(const char *text) +{ + QString myNs, myName, myStr; + Entry *myEntryNs=NULL; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify("keyword",*tcl.list_command.at(2)); + tcl_codify(NULL,*tcl.list_command.at(3)); + tcl_codify(NULL,*tcl.list_command.at(4)); + tcl_codify(NULL,*tcl.list_command.at(5)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(4),myNs,myName); + if (myNs.length()) + { + myName = myNs+"::"+myName; + } + tcl.entry_current->section = Entry::NAMESPACE_SEC; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl.entry_main->addSubEntry(tcl.entry_current); + tcl.ns.insert(myName,tcl.entry_current); + myEntryNs = tcl.entry_current; + myStr = *tcl.list_command.at(6); + if (tcl.list_command.count() > 7) + { + for (uint i=7;i<tcl.list_command.count();i++) + { + myStr.append(*tcl.list_command.at(i)); + } + tcl.word_is=STRING; + } + myScan = tcl_scan_start(tcl.word_is,myStr,text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = NULL; + myScan->entry_fn = NULL; +} + +//! Handle \c itcl::class statements. +static void tcl_command_ITCL_CLASS(const char *text) +{ + QString myNs, myName, myStr; + Entry *myEntryNs, *myEntryCl; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify("NULL",*tcl.list_command.at(2)); + tcl_codify("NULL",*tcl.list_command.at(3)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(2),myNs,myName); + if (myNs.length()) + { + myName = myNs+"::"+myName; + } + tcl.entry_current->section = Entry::CLASS_SEC; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl.entry_main->addSubEntry(tcl.entry_current); + myEntryNs = tcl_entry_namespace(myName); + tcl.cl.insert(myName,tcl.entry_current); + myEntryCl = tcl.entry_current; + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(4),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = NULL; +} + +//! Handle \c oo::class statements. +static void tcl_command_OO_CLASS(const char *text) +{ + QString myNs, myName, myStr; + Entry *myEntryNs, *myEntryCl; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify("NULL",*tcl.list_command.at(2)); + tcl_codify("NULL",*tcl.list_command.at(3)); + tcl_codify("NULL",*tcl.list_command.at(4)); + tcl_codify("NULL",*tcl.list_command.at(5)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(4),myNs,myName); + if (myNs.length()) + { + myName = myNs+"::"+myName; + } + tcl.entry_current->section = Entry::CLASS_SEC; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl.entry_main->addSubEntry(tcl.entry_current); + myEntryNs = tcl_entry_namespace(myName); + tcl.cl.insert(myName,tcl.entry_current); + myEntryCl = tcl.entry_current; + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(6),text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = NULL; +} + +//! Handle \c oo::define statements. +static void tcl_command_OO_DEFINE(const char *text) +{ + QString myNs, myName, myStr; + Entry *myEntryNs, *myEntryCl; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl_codify("NULL",*tcl.list_command.at(2)); + tcl_codify("NULL",*tcl.list_command.at(3)); + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(2),myNs,myName); + if (myNs.length()) + { + myName = myNs+"::"+myName; + } + myEntryNs = tcl_entry_namespace(myName); + myEntryCl = tcl_entry_class(myName); + myStr = *tcl.list_command.at(4); + if (tcl.list_command.count() > 5) + { + for (uint i=5;i<tcl.list_command.count();i++) + { + myStr.append(*tcl.list_command.at(i)); + } + tcl.word_is=STRING; + } + myScan = tcl_scan_start(tcl.word_is,myStr,text); + myScan->entry_ns = myEntryNs; + myScan->entry_cl = myEntryCl; + myScan->entry_fn = NULL; +} + +//! Handle \c variable statements. +static void tcl_command_VARIABLE(const char *text, int inclass) +{ + QString myNs, myName; + Entry *myEntry; + tcl_scan *myScan = tcl.scan.at(0); + + tcl_codify("keyword",*tcl.list_command.at(0)); + for (unsigned int i=1; i< tcl.list_command.count(); i++) + { + tcl_codify(NULL,*tcl.list_command.at(i)); + } + tcl_name(myScan->entry_ns->name,*tcl.list_command.at(2),myNs,myName); + if (myNs.length()) + {// qualified variables go into namespace + myEntry = tcl_entry_namespace(myNs); + tcl.entry_current->stat = true; + } + else + { + if (inclass) + { + myEntry = myScan->entry_cl; + tcl.entry_current->stat = false; + } + else + { + myEntry = myScan->entry_ns; + tcl.entry_current->stat = true; + } + } + tcl.entry_current->section = Entry::VARIABLE_SEC; + tcl.entry_current->name = myName; + tcl.entry_current->startLine = tcl.line_command; + tcl.entry_current->bodyLine = tcl.line_body0; + tcl.entry_current->endBodyLine = tcl.line_body1; + tcl_protection(tcl.entry_current); + myEntry->addSubEntry(tcl.entry_current); + tcl.entry_current = tcl_entry_new(); + tcl_codify("comment",text); +} + +//! Handling of command parsing. +static void tcl_command(int what,const char *text) +{ + if (what==0) + { + tcl.scan.at(0)->line1=yylineno;// current line in scan context + tcl.line_body0=yylineno;// start line of command +tcl_debug("+++%s",text); + yy_push_state(COMMAND); + tcl.list_command.clear(); + tcl.string_command=""; + tcl.string_last=""; + tcl.command=1; + return; + } + if (what==1) + { + if (tcl.string_last.length()) + { + tcl.list_command.append(tcl.string_last); + tcl.string_last=""; + } + if (text) { + tcl.list_command.append(text); + } + return; + } + if (what!=-1) + {// should not happen + tcl_abort("what %d",what); + return; + } + tcl_debug("---"); + if (tcl.command==0) + { + return;//TODO check on inside comment + } + if (tcl.string_last != "") + {// get last word + tcl.list_command.append(tcl.string_last); + tcl.string_last=""; + } + yy_pop_state(); + + // check command + QString myStr = *tcl.list_command.at(0); + int myLevel = 0; + Protection myProt = tcl.protection; + + if (tcl.list_command.count() < 3) + { + tcl_command_OTHER(text); + goto command_end; + } + // remove leading "::" and apply TCL_SUBST + if (myStr.left(2)=="::") myStr = myStr.mid(2); +#if HAS_TCL_SUBST + if (tcl.config_subst.contains(myStr)) {myStr=tcl.config_subst[myStr];} +#endif + if (strcmp("private",myStr)==0) + { + tcl.protection = Private; + myLevel = 1; + } + else if (strcmp("protected",myStr)==0) + { + tcl.protection = Protected; + myLevel = 1; + } + else if (strcmp("public",myStr)==0) + { + tcl.protection = Public; + myLevel = 1; + } + if (myLevel) + { + tcl_codify("keyword",*tcl.list_command.at(0)); + tcl_codify(NULL,*tcl.list_command.at(1)); + tcl.list_command.remove(tcl.list_command.at(1)); + tcl.list_command.remove(tcl.list_command.at(0)); + if (tcl.list_command.count()==1) + { + tcl_scan *myScan = tcl.scan.at(0); + myScan = tcl_scan_start(tcl.word_is,*tcl.list_command.at(0),text); + myProt = tcl.protection; + goto command_end; + } + myStr = *tcl.list_command.at(0); + // remove leading "::" and apply TCL_SUBST + if (myStr.left(2)=="::") myStr = myStr.mid(2); +#if HAS_TCL_SUBST + if (tcl.config_subst.contains(myStr)) {myStr=tcl.config_subst[myStr];} +#endif + } + if (strcmp("proc",myStr)==0) + { + if (tcl.list_command.count() == 5) + {// itcl::proc + tcl.list_command.append(""); + tcl.list_command.append(""); + } + if (tcl.list_command.count() != 7) {goto command_warn;} + tcl_command_PROC(text); + goto command_end; + } + if (strcmp("method",myStr)==0) + { + if (tcl.list_command.count() == 5) + {// itcl::method + tcl.list_command.append(""); + tcl.list_command.append(""); + } + if (tcl.list_command.count() != 7) {goto command_warn;} + tcl_command_METHOD(text); + goto command_end; + } + if (strcmp("constructor",myStr)==0) + { + if (tcl.list_command.count() != 5) {goto command_warn;} + tcl_command_CONSTRUCTOR(text); + goto command_end; + } + if (strcmp("destructor",myStr)==0) + { + if (tcl.list_command.count() != 3) {goto command_warn;} + tcl_command_DESTRUCTOR(text); + goto command_end; + } + if (strcmp("namespace",myStr)==0) + { + if (strcmp("eval",*tcl.list_command.at(2))==0) + { + if (tcl.list_command.count() < 7) {goto command_warn;} + tcl_command_NAMESPACE(text); + goto command_end; + } + tcl_command_OTHER(text); + goto command_end; + } + if (strcmp("itcl::class",myStr)==0) + { + if (tcl.list_command.count() != 5) {goto command_warn;} + tcl_command_ITCL_CLASS(text); + goto command_end; + } + if (strcmp("itcl::body",myStr)==0) + { + if (tcl.list_command.count() != 7) {goto command_warn;} + tcl_command_ITCL_BODY(text); + goto command_end; + } + if (strcmp("oo::class",myStr)==0) + { + if (strcmp("create",*tcl.list_command.at(2))==0) + { + if (tcl.list_command.count() != 7) {goto command_warn;} + tcl_command_OO_CLASS(text); + goto command_end; + } + tcl_command_OTHER(text); + goto command_end; + } + if (strcmp("oo::define",myStr)==0) + { + if (tcl.list_command.count() < 5) {goto command_warn;} + tcl_command_OO_DEFINE(text); + goto command_end; + } + if (strcmp("variable",myStr)==0) + { + if (tcl.list_command.count() < 3) {goto command_warn;} + if (tcl.scan.at(0)->entry_fn == NULL) + {// only parsed outside functions + tcl_command_VARIABLE(text,tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!=""); + goto command_end; + } + } + if (strcmp("common",myStr)==0) + { + if (tcl.list_command.count() < 3) {goto command_warn;} + if (tcl.scan.at(0)->entry_fn == NULL) + {// only parsed outside functions + tcl_command_VARIABLE(text,0); + goto command_end; + } + } + if (strcmp("inherit",myStr)==0 || strcmp("superclass",myStr)==0) + { + if (tcl.list_command.count() < 3) {goto command_warn;} + if (tcl.scan.at(0)->entry_cl!=NULL&&tcl.scan.at(0)->entry_cl->name!="") + { + for (unsigned int i = 2; i < tcl.list_command.count(); i++) + { + tcl.scan.at(0)->entry_cl->extends->append(new BaseInfo(*tcl.list_command.at(i),Public,Normal)); + } + } + } + tcl_command_OTHER(text); + goto command_end; + command_warn: + tcl_warn("count=%d: %s",tcl.list_command.count(),tcl.list_command.join(" ").ascii()); + tcl_command_OTHER(text); + command_end: + tcl.list_command.clear(); + tcl.command = 0; + tcl.protection = myProt; +} + +//---------------------------------------------------------------------------- +//! Common initializations. +static void tcl_init() +{ +#if HAS_TCL_SUBST + // Get values from option TCL_SUBST + QStrList myStrLst = Config_getList("TCL_SUBST"); + if (myStrLst.count()%2 != 0) + { + tcl.config_subst.clear(); + } + else + { + for (unsigned int i=0; i < myStrLst.count(); i=i+2) + { + tcl.config_subst[myStrLst.at(i)] = myStrLst.at(i+1); + } + } +#endif + + tcl.code = NULL; + tcl.code_font=NULL; + tcl.code_line=1; + tcl.code_linenumbers=1; + tcl.config_autobrief = Config_getBool("JAVADOC_AUTOBRIEF"); + tcl.input_string = NULL; + tcl.input_position = 0; + tcl.file_name = NULL; + tcl.this_parser = NULL; + tcl.command=0; + tcl.comment=0; + tcl.brace_level=0; + tcl.bracket_level=0; + tcl.bracket_quote=0; + tcl.word_is=WORD; + tcl.string_command=""; + tcl.string_commentline=""; + tcl.string_commentcodify=""; + tcl.string_comment = ""; + tcl.string_last = ""; + tcl.entry_main = NULL; + tcl.entry_file = NULL; + tcl.entry_current = NULL; + tcl.entry_inside = NULL; + tcl.list_command.clear(); + tcl.scan.clear(); + tcl.ns.clear(); + tcl.cl.clear(); + tcl.fn.clear(); + yylineno = 1; + tcl.protection = Public; +} + +//! Start parsing. +static void tcl_parse() +{ + tcl_scan *myScan; + + tcl.entry_file = tcl_entry_new(); + tcl.entry_file->name = tcl.file_name; + tcl.entry_file->section = Entry::SOURCE_SEC; + tcl.entry_file->protection = Public; + tcl.entry_main->addSubEntry(tcl.entry_file); + tcl.entry_current = tcl_entry_new(); + + tclscanYYrestart( tclscanYYin ); + BEGIN( TOP ); + yylineno=1; + myScan = new tcl_scan; + myScan->type=STRING; + myScan->string_after=""; + myScan->line0=yylineno; + myScan->line1=yylineno; + myScan->start_stack_ptr=yy_start_stack_ptr; + myScan->buffer_state=YY_CURRENT_BUFFER; + myScan->entry_ns=tcl_entry_namespace(""); + myScan->entry_cl=tcl_entry_class(""); + myScan->entry_fn=NULL; + tcl.entry_inside = myScan->entry_ns; + tcl.entry_inside = tcl.entry_file; + myScan->entry_scan = myScan->entry_ns; + tcl.scan.insert(0,myScan); + + tclscanYYlex(); + tcl.scan.clear(); + tcl.ns.clear(); + tcl.cl.clear(); + tcl.fn.clear(); + tcl.entry.clear(); +} + +//! Parse text file and build up entry tree. +void TclLanguageScanner::parseInput(const char *fileName,const char *input,Entry *root) +{ + QFile myFile; + + myFile.setName(fileName); + if (!myFile.open(IO_ReadOnly)) return; + + msg("Parsing '%s'...\n",fileName); + groupEnterFile(fileName,yylineno); + + tcl_init(); + tcl.code = NULL; + tcl.input_string = input; + tcl.file_name = fileName; + tcl.this_parser = this; + tcl.entry_main = root; /* toplevel entry */ + tcl_parse(); + + groupLeaveFile(tcl.file_name,yylineno); + root->program.resize(0); + myFile.close(); +} + +//! Parse file and codify. +void TclLanguageScanner::parseCode(CodeOutputInterface & codeOutIntf, + const char * scopeName, + const QCString & input, + bool isExampleBlock, + const char * exampleName, + FileDef * fileDef, + int startLine, + int endLine, + bool inlineFragment, + MemberDef *memberDef, + bool showLineNumbers + ) +{ + (void)scopeName; + (void)exampleName; + (void)fileDef; + (void)endLine; + (void)inlineFragment; + (void)memberDef; + + if (input.isEmpty()) return; +/* + QString myStr="Codifying.."; + if (scopeName) {myStr+=" scope=";myStr+=scopeName;} + if (exampleName) {myStr+=" example=";myStr+=exampleName;} + if (memberDef) {myStr+=" member=";myStr+=memberDef->memberTypeName(); + myStr+=" ";myStr+=memberDef->qualifiedName();} + if (fileDef) {myStr+=" file=";myStr+=fileDef->fileName();} + +printf("%s (%d,%d) %d %d\n====%s\n====\n",myStr.ascii(),startLine,endLine,isExampleBlock,inlineFragment,input.data()); +*/ + QCString myInput = input; + if (input.at(input.length()-1) != '\n') + { + myInput += "\n"; + } + if (isExampleBlock) {tcl_codify(NULL,input);return;} + tcl_init(); + tcl.code = &codeOutIntf; + if (startLine<0) + { + startLine=1; + } + yylineno=startLine; + tcl.code_linenumbers = showLineNumbers; + tcl.code_line=yylineno; + if (tcl.code_linenumbers) + { + tcl.code->writeLineNumber(0,0,0,tcl.code_line); + } + tcl.input_string = myInput.data(); + tcl.file_name = ""; + tcl.this_parser = NULL; + tcl.entry_main = tcl_entry_new(); + tcl_parse(); + tcl.scan.clear(); + tcl.ns.clear(); + tcl.cl.clear(); + tcl.fn.clear(); + tcl.entry.clear(); +} + +bool TclLanguageScanner::needsPreprocessing(const QCString &extension) +{ + (void)extension; + return FALSE; +} + +void TclLanguageScanner::resetCodeParserState() +{ +} + +void TclLanguageScanner::parsePrototype(const char *text) +{ + (void)text; +} + +static int yyread(char *buf,int max_size) +{ + int c=0; + + *buf = '\0'; + while ( c < max_size && tcl.input_string[tcl.input_position] ) + { + *buf = tcl.input_string[tcl.input_position++] ; + c++; buf++; + } + //printf("Read from=%d size=%d max=%d c=%d\n",tcl.input_position,strlen(&tcl.input_string[tcl.input_position]),max_size,c); + return c; +} + +//---------------------------------------------------------------------------- + +// to avoid a warning +void tclDummy() +{ + yy_top_state(); +} + +#if !defined(YY_FLEX_SUBMINOR_VERSION) +//---------------------------------------------------------------------------- +extern "C" { // some bogus code to keep the compiler happy + void tclscannerYYdummy() { yy_flex_realloc(0,0); } +} +#endif + diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 82e795f..9d2b6b9 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -198,52 +198,5 @@ class TranslatorAdapter_1_4_1 : public TranslatorAdapter_1_4_6 { return english.trOverloadText(); } }; -class TranslatorAdapter_1_3_9 : public TranslatorAdapter_1_4_1 -{ - public: - virtual QCString updateNeededMessage() - { return createUpdateNeededMessage(idLanguage(),"release 1.3.9"); } - - virtual QCString trDirIndex() - { return english.trDirIndex(); } - virtual QCString trDirDocumentation() - { return english.trDirDocumentation(); } - virtual QCString trDirectories() - { return english.trDirectories(); } - virtual QCString trDirDescription() - { return english.trDirDescription(); } - virtual QCString trDirReference(const char *dirName) - { return english.trDirReference(dirName); } - virtual QCString trDir(bool first_capital, bool singular) - { return english.trDir(first_capital,singular); } -}; - -class TranslatorAdapter_1_3_8 : public TranslatorAdapter_1_3_9 -{ - public: - virtual QCString updateNeededMessage() - { return createUpdateNeededMessage(idLanguage(),"release 1.3.8"); } - - virtual QCString trSourceFile(QCString& filename) - { return english.trSourceFile(filename); } -}; - -class TranslatorAdapter_1_3_3 : public TranslatorAdapter_1_3_8 -{ - public: - virtual QCString updateNeededMessage() - { return createUpdateNeededMessage(idLanguage(),"release 1.3.3"); } - - virtual QCString trSearchForIndex() - { return english.trSearchForIndex(); } - virtual QCString trSearchResultsTitle() - { return english.trSearchResultsTitle(); } - virtual QCString trSearchResults(int numDocuments) - { return english.trSearchResults(numDocuments); } - virtual QCString trSearchMatches() - { return english.trSearchMatches(); } - -}; - #endif diff --git a/src/translator_am.h b/src/translator_am.h index 15b1502..08217ba 100644 --- a/src/translator_am.h +++ b/src/translator_am.h @@ -1,1835 +1,1853 @@ -/****************************************************************************** - * - * - * - * Copyright (C) 1997-2011 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. - */ - -/* - * Translation by - * Armen Tangamyan <armen.tangamyan@anu.edu.au> - */ - -#ifndef TRANSLATOR_AM_H -#define TRANSLATOR_AM_H - -class TranslatorArmenian : public TranslatorAdapter_1_7_5 -{ - public: - /*! Used for identification of the language. */ - virtual QCString idLanguage() - { return "armenian"; } - - /* Used to get the command(s) for the language support. */ - virtual QCString latexLanguageSupportCommand() - { - return "<pre>\\usepackage[latin]{armtex}\n" - "\\usepackage[armscii8]{inputenc}\n</pre>"; - } - - /*! 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 "Անդամ տիպի սահմանումներ (typedef)"; } - - /*! header that is put before the list of enumerations. */ - virtual QCString trMemberEnumerationDocumentation() - { return "Անդամ hամարակալումներ"; } - - /*! 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 "Դաշտեր"; - } - else - { - return "Անդամ տվյալներ"; - } - } - - /*! this is the text of a link put after brief descriptions. */ - virtual QCString trMore() - { return "Մանրամասն..."; } - - /*! put in the class documentation */ - /* Dosn't use when optimization for C is on. */ - virtual QCString trListOfAllMembers() - { - return "Բոլոր անդամների ցուցակը"; - } - - /*! used as the title of the "list of all members" page of a class */ - /* Dosn't use when optimization for C is on. */ - virtual QCString trMemberList() - { - return "Անդամների ցուցակ"; - } - - /*! this is the first part of a sentence that is followed by a class name */ - /* Dosn't use when optimization for C is on. */ - virtual QCString trThisIsTheListOfAllMembers() - { return "Սա դասի անդամների ամբողջական ցուցակն է "; } - - /*! this is the remainder of the sentence after the class name */ - /* Dosn't use when optimization for C is on. */ - 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+=s+(QCString)" համար:"; - 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+="ցուցակը`"; - 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+="ֆունկցիաների, փոփոխականների, մակրո-հայտարարությունների, " - "համարակալումների և տիպի սահմանումների (typedef)"; - } - else - { - result+="ֆայլի անդամների "; - } - 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 "Տիպի սահմանումներ (typedef)"; } - - /*! 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 "Տիպի սահմանումներ (typedef)"; } - - /*! 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 documentation of a group before the list of - * links to documented files - */ - /*! 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+=projName+QCString(" -ի համար,"); - 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 clName+QCString(" -ի ժառանգման գծագիրը."); - } - - /*! 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; - if (isTemplate) - { - switch(compType) - { - case ClassDef::Class: result+=" Դասի"; break; - case ClassDef::Struct: result+=" Կառուցվածքի"; break; - case ClassDef::Union: result+=" Միավորման"; break; - case ClassDef::Interface: result+=" Ինտերֆեյսի"; break; - case ClassDef::Protocol: result+=" Արձանագրության"; break; - case ClassDef::Category: result+=" Դասակարգման"; break; - case ClassDef::Exception: result+=" Բացառության"; break; - } - result+=" Ձևանմուշներ"; - } - else - { - switch(compType) - { - case ClassDef::Class: result+=" Դաս"; break; - case ClassDef::Struct: result+=" Կառուցվածք"; break; - case ClassDef::Union: result+=" Միավորում"; break; - case ClassDef::Interface: result+=" Ինտերֆեյս"; break; - case ClassDef::Protocol: result+=" Արձանագրություն"; break; - case ClassDef::Category: result+=" Դասակարգում"; break; - case ClassDef::Exception: result+=" Բացառություն"; break; - } - } - return result; - } - - /*! used as the title of the HTML page of a file */ - virtual QCString trFileReference(const char *fileName) - { - return fileName+QCString(" ֆայլեր"); - } - - /*! used as the title of the HTML page of a namespace */ - virtual QCString trNamespaceReference(const char *namespaceName) - { - QCString result=namespaceName; - result+=" անունների տարածություններ"; - 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) - { - 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-991106 -////////////////////////////////////////////////////////////////////////// - - virtual QCString trDefinedAtLineInSourceFile() - { - return "Սահմանումը @1 ֆայլի @0 տողում է:"; - } - 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 */ - virtual QCString trLegendDocs() - { - return - "Այս էջը նկարագրում է, թե ինչպես մեկնաբանել doxygen-ի ստեղծած գրաֆները:<p>\n" - "Դիտարկենք հետևյալ օրինակը.\n" - "\\code\n" - "/*! Կրճատման հետևանքով անտեսանելի դաս */\n" - "class Invisible { };\n\n" - "/*! Կրճատված դաս, ժառանգությունների հարաբերությունը փակ է */\n" - "class Truncated : public Invisible { };\n\n" - "/* Չփաստագրված դաս */\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" - "/*! Դաս, որը օգտագործվում է Inherited դասի կողմից */\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 src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" - "<p>\n" - "Այս գրաֆի ուղղանկյունները ունեն հետևյալ իմաստը.\n" - "<ul>\n" - "<li>Լցոնվաց մոխրագույն ուղղանկյունը ներկայացնում է այն դասը կամ կառուցվածքը, " - "որի համար ստեղծվել է տվյալ գրաֆը:</li>\n" - "<li>Սև եզրերով ուղղանկյունը նշանակում է փաստագրված դաս կամ կարուցվածք:</li>\n" - "<li>Մոխրագույն եզրերով ուղղանկյունը նշանակում է չփաստագրված դաս կամ կառուցվածք:</li>\n" - "<li>Կարմիր եզրերով ուղղանկյունը նշանակում է դաս կամ կառուցվածք, որի համար\n" - " ոչ բոլոր ժառանգում/պարունակում կապերն են ցուցադրված: Գրաֆը կրճատված է, " - "եթե այն չի տեղավորվում նշված սահմաններում:</li>\n" - "</ul>\n" - "Սլաքները ունեն հետևյալ իմաստը.\n" - "<ul>\n" - "<li>Մուգ կապույտ սլաքը օգտագործվում է երկու դասերի միջև բաց ժառանգում " - "կապը ցուցադրելու համար:</li>\n" - "<li>Մուգ կանաչ սլաքը օգտագործվում է պաշտպանված ժառանգման համար:</li>\n" - "<li>Մուգ կարմիր սլաքը օգտագործվում է փակ ժառանգման համար:</li>\n" - "<li>Մանուշակագույն կետագիծ սլաքը օգտագորշվում է, եթե դասը պարունակվում է" - "այլ դասում կամ օգտագորշվում է այլ դասի կողմից: Սլաքը պիտակավորվաշ է" - "փոփոխական(ներ)ով, որի միջոցով մատնանշված դասը կամ կառուցվածքը հասանելի է:</li>\n" - "<li>Դեզին կետագիծ սլաքը ցույց է տալիս ձևանմուշի օրինակի կապը այն ձևանմուշի հետ, " - "որից այն իրականցվել է. Սլաքը պիտակավորված է օրինակի ձևանմուշային պարամետրերով:</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 */ - virtual QCString trRTFansicp() - { - return "armscii-8"; - } - /*! Used as ansicpg for RTF fcharset */ - virtual QCString trRTFCharSet() - { - return "0"; - } - /*! 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) - { - if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) - { - QCString result((first_capital ? "Տվյալների կառուցվածք" : "տվյալների կառուցվածք")); - return result; - } - else - { - 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 trFile(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 trNamespace(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 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 ? "Էջ" : "էջ")); - 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 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 ? "Գլոբալ" : "գլոբալ")); - if (!singular) result+="ներ"; - 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 implementation this 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 "Հայտնաբերվել է 1 փաստաթուղթ:"; - } - 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 a 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=dirName; result+=" Ֆայլադարան"; 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+="ներ"; - 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 "Համարակալումներ"; } - - -////////////////////////////////////////////////////////////////////////// -// 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="Բոլոր "; - if (!extractAll) - { - result+="փաստագրված "; - } - result+="տվյալների տիպերի անդամների ցուցակը` հղումներով դեպի "; - if (!extractAll) - { - result+="բոլոր անդամների տվյալների կառուցվածքի փաստագրությունը"; - } - else - { - result+="տվյալների տիպերը, որոնց նրանք պատկանում են"; - } - 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; - if (!isTemplate) - { - switch(compType) - { - case ClassDef::Class: result+=" Մոդուլ"; break; - case ClassDef::Struct: result+=" Տիպ"; break; - case ClassDef::Union: result+=" Միավորում"; break; - case ClassDef::Interface: result+=" Ինտերֆեյս"; break; - case ClassDef::Protocol: result+=" Արձանագրություն"; break; - case ClassDef::Category: result+=" Դասակարգում"; break; - case ClassDef::Exception: result+=" Բացառություն"; break; - } - } - else - { - switch(compType) - { - case ClassDef::Class: result+=" Մոդուլի"; break; - case ClassDef::Struct: result+=" Տիպի"; break; - case ClassDef::Union: result+=" Միավորման"; break; - case ClassDef::Interface: result+=" Ինտերֆեյսի"; break; - case ClassDef::Protocol: result+=" Արձանագրության"; break; - case ClassDef::Category: result+=" Դասակարգման"; break; - case ClassDef::Exception: result+=" Բացառության"; break; - } - result+=" Ձևանմուշ"; - } - return result; - } - /*! used as the title of the HTML page of a module (Fortran) */ - virtual QCString trModuleReference(const char *namespaceName) - { - return QCString("Մոդուլ ") + namespaceName; - } - - /*! 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)"Այս "; - 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 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+="նթածրագիր"; else result+="նթածրագրեր"; - return result; - } - - /*! C# Type Constraint list */ - virtual QCString trTypeConstraints() - { - return "Տիպերի Սահմանափակումներ"; - } -////////////////////////////////////////////////////////////////////////// -// new since 1.6.0 (mainly for the new search engine) -////////////////////////////////////////////////////////////////////////// - - /*! directory relation for \a name */ - virtual QCString trDirRelation(const char *name) - { - return QCString(name)+" Կապ"; - } - - /*! Loading message shown when loading search results */ - virtual QCString trLoading() - { - return "Բեռնում..."; - } - - /*! Label used for search results in the global namespace */ - virtual QCString trGlobalNamespace() - { - return "Գլոբալ անունների տարածություն"; - } - - /*! Message shown while searching */ - virtual QCString trSearching() - { - return "Որոնում..."; - } - - /*! Text shown when no search results are found */ - virtual QCString trNoMatches() - { - return "Անարդյունք"; - } - -////////////////////////////////////////////////////////////////////////// -// new since 1.6.3 (missing items for the directory pages) -////////////////////////////////////////////////////////////////////////// - - /*! introduction text for the directory dependency graph */ - virtual QCString trDirDependency(const char *name) - { - return (QCString)name + " -ի կախվածությունների գծագիր"; - } - - /*! when clicking a directory dependency label, a page with a - * table is shown. The heading for the first column mentions the - * source file that has a relation to another file. - */ - virtual QCString trFileIn(const char *name) - { - return (QCString)"Ֆայլը " + name + " ում"; - } - - /*! when clicking a directory dependency label, a page with a - * table is shown. The heading for the second column mentions the - * destination file that is included. - */ - virtual QCString trIncludesFileIn(const char *name) - { - return (QCString)"Ներառում է ֆայլը " + name + " ում"; - } - - /** Compiles a date string. - * @param year Year in 4 digits - * @param month Month of the year: 1=January - * @param day Day of the Month: 1..31 - * @param dayOfWeek Day of the week: 1=Monday..7=Sunday - * @param hour Hour of the day: 0..23 - * @param minutes Minutes in the hour: 0..59 - * @param seconds Seconds within the minute: 0..59 - * @param includeTime Include time in the result string? - */ - virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, - int hour,int minutes,int seconds, - bool includeTime) - { - static const char *days[] = { "Երկուշաբթի,","Երեքշաբթի,","Չորեքշաբթի,","Հինգշաբթի,", - "Ուրբաթ,","Շաբաթ,","Կիրակի," }; - static const char *months[] = { "Հունիսի","Փետրվարի","Մարտի","Ապրրիլի","Մայիսի","Հունիսի", - "Հուլիսի","Օգոստոսի","Սեպտեմբերի","Հոկտեբմերի","Նոյեմբերի","Դեկտեմբերի" }; - QCString sdate; - sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year); - if (includeTime) - { - QCString stime; - stime.sprintf(" %.2d:%.2d:%.2d ",hour,minutes,seconds); - sdate+=stime; - } - return sdate; - } -}; - -#endif +/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2011 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.
+ */
+
+/*
+ * Translation by
+ * Armen Tangamyan <armen.tangamyan@anu.edu.au>
+ */
+
+#ifndef TRANSLATOR_AM_H
+#define TRANSLATOR_AM_H
+
+class TranslatorArmenian : public TranslatorAdapter_1_7_5
+{
+ public:
+ /*! Used for identification of the language. */
+ virtual QCString idLanguage()
+ { return "armenian"; }
+
+ /* Used to get the command(s) for the language support. */
+ virtual QCString latexLanguageSupportCommand()
+ {
+ return "<pre>\\usepackage[latin]{armtex}\n"
+ "\\usepackage[armscii8]{inputenc}\n</pre>";
+ }
+
+ /*! 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 "Անդամ տիպի սահմանումներ (typedef)"; }
+
+ /*! header that is put before the list of enumerations. */
+ virtual QCString trMemberEnumerationDocumentation()
+ { return "Անդամ hամարակալումներ"; }
+
+ /*! 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 "Դաշտեր";
+ }
+ else
+ {
+ return "Անդամ տվյալներ";
+ }
+ }
+
+ /*! this is the text of a link put after brief descriptions. */
+ virtual QCString trMore()
+ { return "Մանրամասն..."; }
+
+ /*! put in the class documentation */
+ /* Dosn't use when optimization for C is on. */
+ virtual QCString trListOfAllMembers()
+ {
+ return "Բոլոր անդամների ցուցակը";
+ }
+
+ /*! used as the title of the "list of all members" page of a class */
+ /* Dosn't use when optimization for C is on. */
+ virtual QCString trMemberList()
+ {
+ return "Անդամների ցուցակ";
+ }
+
+ /*! this is the first part of a sentence that is followed by a class name */
+ /* Dosn't use when optimization for C is on. */
+ virtual QCString trThisIsTheListOfAllMembers()
+ { return "Սա դասի անդամների ամբողջական ցուցակն է "; }
+
+ /*! this is the remainder of the sentence after the class name */
+ /* Dosn't use when optimization for C is on. */
+ 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+=s+(QCString)" համար:";
+ 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+="ցուցակը`";
+ 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+="ֆունկցիաների, փոփոխականների, մակրո-հայտարարությունների, "
+ "համարակալումների և տիպի սահմանումների (typedef)";
+ }
+ else
+ {
+ result+="ֆայլի անդամների ";
+ }
+ 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 "Տիպի սահմանումներ (typedef)"; }
+
+ /*! 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 "Տիպի սահմանումներ (typedef)"; }
+
+ /*! 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 documentation of a group before the list of
+ * links to documented files
+ */
+ /*! 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+=projName+QCString(" -ի համար,");
+ 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 clName+QCString(" -ի ժառանգման գծագիրը.");
+ }
+
+ /*! 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;
+ if (isTemplate)
+ {
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Դասի"; break;
+ case ClassDef::Struct: result+=" Կառուցվածքի"; break;
+ case ClassDef::Union: result+=" Միավորման"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյսի"; break;
+ case ClassDef::Protocol: result+=" Արձանագրության"; break;
+ case ClassDef::Category: result+=" Դասակարգման"; break;
+ case ClassDef::Exception: result+=" Բացառության"; break;
+ }
+ result+=" Ձևանմուշներ";
+ }
+ else
+ {
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Դաս"; break;
+ case ClassDef::Struct: result+=" Կառուցվածք"; break;
+ case ClassDef::Union: result+=" Միավորում"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյս"; break;
+ case ClassDef::Protocol: result+=" Արձանագրություն"; break;
+ case ClassDef::Category: result+=" Դասակարգում"; break;
+ case ClassDef::Exception: result+=" Բացառություն"; break;
+ }
+ }
+ return result;
+ }
+
+ /*! used as the title of the HTML page of a file */
+ virtual QCString trFileReference(const char *fileName)
+ {
+ return fileName+QCString(" ֆայլեր");
+ }
+
+ /*! used as the title of the HTML page of a namespace */
+ virtual QCString trNamespaceReference(const char *namespaceName)
+ {
+ QCString result=namespaceName;
+ result+=" անունների տարածություններ";
+ 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)
+ {
+ 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-991106
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trDefinedAtLineInSourceFile()
+ {
+ return "Սահմանումը @1 ֆայլի @0 տողում է:";
+ }
+ 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"
+ "/* Չփաստագրված դաս */\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"
+ "/*! Դաս, որը օգտագործվում է Inherited դասի կողմից */\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"
+ "Սրանով կստանանք հետևյալ գրաֆը."
+ "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
+ "<p>\n"
+ "Այս գրաֆի ուղղանկյունները ունեն հետևյալ իմաստը.\n"
+ "<ul>\n"
+ "<li>%A լցոնվաց մոխրագույն ուղղանկյունը ներկայացնում է այն դասը կամ կառուցվածքը, "
+ "որի համար ստեղծվել է տվյալ գրաֆը:</li>\n"
+ "<li>%A սև եզրերով ուղղանկյունը նշանակում է փաստագրված դաս կամ կարուցվածք:</li>\n"
+ "<li>%A մոխրագույն եզրերով ուղղանկյունը նշանակում է չփաստագրված դաս կամ կառուցվածք:</li>\n"
+ "<li>%A կարմիր եզրերով ուղղանկյունը նշանակում է դաս կամ կառուցվածք, որի համար\n"
+ " ոչ բոլոր ժառանգում/պարունակում կապերն են ցուցադրված: Գրաֆը կրճատված է, "
+ "եթե այն չի տեղավորվում նշված սահմաններում:</li>\n"
+ "</ul>\n"
+ "Սլաքները ունեն հետևյալ իմաստը.\n"
+ "<ul>\n"
+ "<li>%A մուգ կապույտ սլաքը օգտագործվում է երկու դասերի միջև բաց ժառանգում "
+ "կապը ցուցադրելու համար:</li>\n"
+ "<li>%A մուգ կանաչ սլաքը օգտագործվում է պաշտպանված ժառանգման համար:</li>\n"
+ "<li>%A մուգ կարմիր սլաքը օգտագործվում է փակ ժառանգման համար:</li>\n"
+ "<li>%A մանուշակագույն կետագիծ սլաքը օգտագորշվում է, եթե դասը պարունակվում է"
+ "այլ դասում կամ օգտագորշվում է այլ դասի կողմից: Սլաքը պիտակավորվաշ է"
+ "փոփոխական(ներ)ով, որի միջոցով մատնանշված դասը կամ կառուցվածքը հասանելի է:</li>\n"
+ "<li>Դեզին կետագիծ սլաքը ցույց է տալիս ձևանմուշի օրինակի կապը այն ձևանմուշի հետ, "
+ "որից այն իրականցվել է. Սլաքը պիտակավորված է օրինակի ձևանմուշային պարամետրերով:</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 */
+ virtual QCString trRTFansicp()
+ {
+ return "armscii-8";
+ }
+ /*! Used as ansicpg for RTF fcharset */
+ virtual QCString trRTFCharSet()
+ {
+ return "0";
+ }
+ /*! 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)
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ QCString result((first_capital ? "Տվյալների կառուցվածք" : "տվյալների կառուցվածք"));
+ return result;
+ }
+ else
+ {
+ 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 trFile(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 trNamespace(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 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 ? "Էջ" : "էջ"));
+ 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 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 ? "Գլոբալ" : "գլոբալ"));
+ if (!singular) result+="ներ";
+ 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 implementation this 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 "Հայտնաբերվել է 1 փաստաթուղթ:";
+ }
+ 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 a 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=dirName; result+=" Ֆայլադարան"; 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+="ներ";
+ 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 "Համարակալումներ"; }
+
+
+//////////////////////////////////////////////////////////////////////////
+// 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="Բոլոր ";
+ if (!extractAll)
+ {
+ result+="փաստագրված ";
+ }
+ result+="տվյալների տիպերի անդամների ցուցակը` հղումներով դեպի ";
+ if (!extractAll)
+ {
+ result+="բոլոր անդամների տվյալների կառուցվածքի փաստագրությունը";
+ }
+ else
+ {
+ result+="տվյալների տիպերը, որոնց նրանք պատկանում են";
+ }
+ 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;
+ if (!isTemplate)
+ {
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Մոդուլ"; break;
+ case ClassDef::Struct: result+=" Տիպ"; break;
+ case ClassDef::Union: result+=" Միավորում"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյս"; break;
+ case ClassDef::Protocol: result+=" Արձանագրություն"; break;
+ case ClassDef::Category: result+=" Դասակարգում"; break;
+ case ClassDef::Exception: result+=" Բացառություն"; break;
+ }
+ }
+ else
+ {
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Մոդուլի"; break;
+ case ClassDef::Struct: result+=" Տիպի"; break;
+ case ClassDef::Union: result+=" Միավորման"; break;
+ case ClassDef::Interface: result+=" Ինտերֆեյսի"; break;
+ case ClassDef::Protocol: result+=" Արձանագրության"; break;
+ case ClassDef::Category: result+=" Դասակարգման"; break;
+ case ClassDef::Exception: result+=" Բացառության"; break;
+ }
+ result+=" Ձևանմուշ";
+ }
+ return result;
+ }
+ /*! used as the title of the HTML page of a module (Fortran) */
+ virtual QCString trModuleReference(const char *namespaceName)
+ {
+ return QCString("Մոդուլ ") + namespaceName;
+ }
+
+ /*! 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)"Այս ";
+ 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 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+="նթածրագիր"; else result+="նթածրագրեր";
+ return result;
+ }
+
+ /*! C# Type Constraint list */
+ virtual QCString trTypeConstraints()
+ {
+ return "Տիպերի Սահմանափակումներ";
+ }
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.0 (mainly for the new search engine)
+//////////////////////////////////////////////////////////////////////////
+
+ /*! directory relation for \a name */
+ virtual QCString trDirRelation(const char *name)
+ {
+ return QCString(name)+" Կապ";
+ }
+
+ /*! Loading message shown when loading search results */
+ virtual QCString trLoading()
+ {
+ return "Բեռնում...";
+ }
+
+ /*! Label used for search results in the global namespace */
+ virtual QCString trGlobalNamespace()
+ {
+ return "Գլոբալ անունների տարածություն";
+ }
+
+ /*! Message shown while searching */
+ virtual QCString trSearching()
+ {
+ return "Որոնում...";
+ }
+
+ /*! Text shown when no search results are found */
+ virtual QCString trNoMatches()
+ {
+ return "Անարդյունք";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+ /*! introduction text for the directory dependency graph */
+ virtual QCString trDirDependency(const char *name)
+ {
+ return (QCString)name + " -ի կախվածությունների գծագիր";
+ }
+
+ /*! when clicking a directory dependency label, a page with a
+ * table is shown. The heading for the first column mentions the
+ * source file that has a relation to another file.
+ */
+ virtual QCString trFileIn(const char *name)
+ {
+ return (QCString)"Ֆայլը " + name + " ում";
+ }
+
+ /*! when clicking a directory dependency label, a page with a
+ * table is shown. The heading for the second column mentions the
+ * destination file that is included.
+ */
+ virtual QCString trIncludesFileIn(const char *name)
+ {
+ return (QCString)"Ներառում է ֆայլը " + name + " ում";
+ }
+
+ /** Compiles a date string.
+ * @param year Year in 4 digits
+ * @param month Month of the year: 1=January
+ * @param day Day of the Month: 1..31
+ * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+ * @param hour Hour of the day: 0..23
+ * @param minutes Minutes in the hour: 0..59
+ * @param seconds Seconds within the minute: 0..59
+ * @param includeTime Include time in the result string?
+ */
+ virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+ int hour,int minutes,int seconds,
+ bool includeTime)
+ {
+ static const char *days[] = { "Երկուշաբթի,","Երեքշաբթի,","Չորեքշաբթի,","Հինգշաբթի,",
+ "Ուրբաթ,","Շաբաթ,","Կիրակի," };
+ static const char *months[] = { "Հունիսի","Փետրվարի","Մարտի","Ապրրիլի","Մայիսի","Հունիսի",
+ "Հուլիսի","Օգոստոսի","Սեպտեմբերի","Հոկտեբմերի","Նոյեմբերի","Դեկտեմբերի" };
+ QCString sdate;
+ sdate.sprintf("%s %d %s %d",days[dayOfWeek-1],day,months[month-1],year);
+ if (includeTime)
+ {
+ QCString stime;
+ stime.sprintf(" %.2d:%.2d:%.2d ",hour,minutes,seconds);
+ sdate+=stime;
+ }
+ return sdate;
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.7.5
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Header for the page with bibliographic citations */
+ virtual QCString trCiteReferences()
+ { return "Գրականություն"; }
+
+ /*! Text for copyright paragraph */
+ virtual QCString trCopyright()
+ { return "Հեղինակային իրավունք"; }
+
+ /*! Header for the graph showing the directory dependencies */
+ virtual QCString trDirDepGraph(const char *name)
+ { return name + QCString("-ի ֆայլադարանների կախվածությունների գծագիր:"); }
+
+};
+
+#endif
diff --git a/src/translator_br.h b/src/translator_br.h index 5fa1565..39dc859 100644 --- a/src/translator_br.h +++ b/src/translator_br.h @@ -15,6 +15,8 @@ * Thanks to Jorge Ramos, Fernando Carijo and others for their contributions. * * History: + * 20110628: + * - Updated to 1.7.5; * 20100531: * - Updated to 1.6.3; * 20091218: @@ -32,7 +34,7 @@ #ifndef TRANSLATOR_BR_H #define TRANSLATOR_BR_H -class TranslatorBrazilian : public TranslatorAdapter_1_7_5 +class TranslatorBrazilian : public Translator { public: @@ -1862,5 +1864,25 @@ class TranslatorBrazilian : public TranslatorAdapter_1_7_5 } return sdate; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Referências Bibliográficas"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { + // Note: I will left it as is because "Direitos autorais" may not fit + // in the text. + return "Copyright"; + } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Grafo de dependências do diretório ")+name+":"; } }; #endif diff --git a/src/translator_ca.h b/src/translator_ca.h index 8f72351..4104e34 100644 --- a/src/translator_ca.h +++ b/src/translator_ca.h @@ -40,7 +40,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorCatalan : public TranslatorAdapter_1_6_3 +class TranslatorCatalan : public Translator { public: @@ -1817,6 +1817,77 @@ class TranslatorCatalan : public TranslatorAdapter_1_6_3 return "Cap coincidència"; } +////////////////////////////////////////////////////////////////////////// +// new since 1.6.3 (missing items for the directory pages) +////////////////////////////////////////////////////////////////////////// + + /*! introduction text for the directory dependency graph */ + virtual QCString trDirDependency(const char *name) + { + return (QCString)"Graf de dependència de directoris per a "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the first column mentions the + * source file that has a relation to another file. + */ + virtual QCString trFileIn(const char *name) + { + return (QCString)"Fitxer a "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the second column mentions the + * destination file that is included. + */ + virtual QCString trIncludesFileIn(const char *name) + { + return (QCString)"Inclou fitxer a "+name; + } + + /** Compiles a date string. + * @param year Year in 4 digits + * @param month Month of the year: 1=January + * @param day Day of the Month: 1..31 + * @param dayOfWeek Day of the week: 1=Monday..7=Sunday + * @param hour Hour of the day: 0..23 + * @param minutes Minutes in the hour: 0..59 + * @param seconds Seconds within the minute: 0..59 + * @param includeTime Include time in the result string? + */ + virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, + int hour,int minutes,int seconds, + bool includeTime) + { + static const char *days[] = { "Dl","Dt","Dc","Dj","Dv","Ds","Dg" }; + static const char *months[] = { "Gen","Feb","Mar","Abr","Mai","Jun","Jul","Ago","Sep","Oct","Nov","Dec" }; + QCString sdate; + sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year); + if (includeTime) + { + QCString stime; + stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds); + sdate+=stime; + } + return sdate; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Referències Bibliogràfiques"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Graf de dependència de directoris per a ")+name+":"; } + }; #endif diff --git a/src/translator_cn.h b/src/translator_cn.h index 10d0e6a..54bbcf4 100644 --- a/src/translator_cn.h +++ b/src/translator_cn.h @@ -24,7 +24,7 @@ */ #define CN_SPC -class TranslatorChinese : public TranslatorAdapter_1_7_5 +class TranslatorChinese : public Translator { public: /*! Used for identification of the language. The identification @@ -59,66 +59,66 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! return the language charset. This will be used for the HTML output */ virtual QCString idLanguageCharset() - { return "gb2312"; } + { return "UTF-8"; } /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() - { return "غ"; } + { return "相关函数"; } /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { return "ע⣺ЩdzԱ"; } + { return "(注意:这些不是成员函数。)"; } /*! header that is put before the detailed description of files, * classes and namespaces. */ virtual QCString trDetailedDescription() - { return "ϸ"; } + { return "详细描述"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return "ԱͶĵ"; } + { return "成员类型定义文档"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return "Աöĵ"; } + { return "成员枚举类型文档"; } /*! header that is put before the list of member function. */ virtual QCString trMemberFunctionDocumentation() - { return "Աĵ"; } + { return "成员函数文档"; } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ֶĵ"; + return "字段文档"; } else { - return "Աĵ"; + return "成员数据文档"; } } /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() - { return "..."; } + { return "更多..."; } /*! put in the class documention */ virtual QCString trListOfAllMembers() - { return "гԱб"; } + { return "所有成员的列表。"; } /*! used as the title of the "list of all members" page of a class */ virtual QCString trMemberList() - { return "Աб"; } + { return "成员列表"; } /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "ԱбЩԱ"CN_SPC; } + { return "成员的完整列表,这些成员属于"CN_SPC; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() - { return "м̳жijԱ"; } + { return ",包括所有继承而来的成员"; } /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. @@ -126,22 +126,22 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trGeneratedAutomatically(const char *s) { QCString result; - if (s) result=(QCString)"Ϊ"CN_SPC+s+""; - result+=""CN_SPC"Doyxgen"CN_SPC"ͨԴԶɡ"; + if (s) result=(QCString)"为"CN_SPC+s+","; + result+="由"CN_SPC"Doyxgen"CN_SPC"通过分析源代码自动生成。"; return result; } /*! put after an enum name in the list of all members */ virtual QCString trEnumName() - { return "ö"; } + { return "枚举名称"; } /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "öֵ"; } + { return "枚举值"; } /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() - { return ""CN_SPC; } + { return "定义于"CN_SPC; } // quick reference sections @@ -150,35 +150,35 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 * compounds or files (see the \\group command). */ virtual QCString trModules() - { return "ģ"; } + { return "模块"; } /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() - { return "̳йϵ"; } + { return "类继承关系"; } /*! This is put above each page as a link to the list of annotated class */ virtual QCString trCompoundList() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ݽṹ"; + return "数据结构"; } else { - return "б"; + return "组合类型列表"; } } /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() - { return "ļб"; } + { 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 "ֶ"; + return "数据字段"; } else { - return "ͳԱ"; + return "组合类型成员"; } } @@ -186,31 +186,31 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trFileMembers() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ȫֶ"; + return "全局定义"; } else { - return "ļԱ"; + return "文件成员"; } } /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return "ҳ"; } + { return "相关页面"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() - { return "ʾ"; } + { return "示例"; } virtual QCString trSearch() - { return ""; } + { return "搜索"; } virtual QCString trClassHierarchyDescription() - { return "бֵ˳"; } + { return "此列表基本按字典顺序排序:"; } virtual QCString trFileListDescription(bool extractAll) { - QCString result="г"; - if (!extractAll) result+="ĵ"; - result+="ļҪ˵"; + QCString result="这里列出所有"; + if (!extractAll) result+="文档化的"; + result+="文件,附带简要说明:"; return result; } @@ -219,41 +219,41 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "гݽṹҪ˵"; + return "这里列出所有数据结构,附带简要说明:"; } else { - return "гࡢṹԼӿڶ壬Ҫ˵"; + return "这里列出所有类、结构、联合以及接口定义,附带简要说明:"; } } virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="г"; + QCString result="这里列出所有"; if (!extractAll) { - result+="ĵ"; + result+="文档化的"; } if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="ṹϵijԱ"; + result+="结构和联合的成员,附带"; } else { - result+="Ա"; + result+="类成员,附带"; } if (extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="ڽṹϵĵӣ"; + result+="所在结构/联合的文档的链接:"; } else { - result+="ĵӣ"; + result+="所在类的文档的链接:"; } } else { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="ṹϵӣ"; + result+="所属结构/联合的链接:"; } else { - result+="ӣ"; + result+="所属类的链接:"; } } return result; @@ -261,130 +261,130 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="г"; + QCString result="这里列出所有"; if (!extractAll) - result +="ĵ"; + result +="文档化的"; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result +="꣬öٺͶ壬"; + result +="函数,变量,宏,枚举和类型定义,附带"; } else { - result +="ļԱ"; + result +="文件成员,附带"; } if (extractAll) - result+="ļĵӣ"; + result+="所在文件的文档的链接:"; else - result+="ļӣ"; + result+="所在文件的链接:"; return result; } virtual QCString trExamplesDescription() - { return "гʾ"; } + { return "这里列出所有示例:"; } virtual QCString trRelatedPagesDescription() - { return "гصҳ棺"; } + { return "这里列出所有相关的页面:"; } virtual QCString trModulesDescription() - { return "гģ"; } + { return "这里列出所有模块"; } virtual QCString trDocumentation() - { return "ĵ"; } + { return "文档"; } virtual QCString trModuleIndex() - { return "ģ"; } + { return "模块索引"; } virtual QCString trHierarchicalIndex() - { return "̳йϵ"; } + { return "继承关系索引"; } virtual QCString trCompoundIndex() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ݽṹ"; + return "数据结构索引"; } else { - return ""; + return "组合类型索引"; } } virtual QCString trFileIndex() - { return "ļ"; } + { return "文件索引"; } virtual QCString trModuleDocumentation() - { return "ģĵ"; } + { return "模块文档"; } virtual QCString trClassDocumentation() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ݽṹĵ"; + return "数据结构文档"; } else { - return "ĵ"; + return "类文档"; } } virtual QCString trFileDocumentation() - { return "ļĵ"; } + { return "文件文档"; } virtual QCString trExampleDocumentation() - { return "ʾĵ"; } + { return "示例文档"; } virtual QCString trPageDocumentation() - { return "ҳĵ"; } + { return "页面文档"; } virtual QCString trReferenceManual() - { return "οֲ"; } + { return "参考手册"; } virtual QCString trDefines() - { return "궨"; } + { return "宏定义"; } virtual QCString trFuncProtos() - { return "ԭ"; } + { return "函数原型"; } virtual QCString trTypedefs() - { return "Ͷ"; } + { return "类型定义"; } virtual QCString trEnumerations() - { return "ö"; } + { return "枚举"; } virtual QCString trFunctions() - { return ""; } + { return "函数"; } virtual QCString trVariables() - { return ""; } + { return "变量"; } virtual QCString trEnumerationValues() - { return "öֵ"; } + { return "枚举值"; } virtual QCString trDefineDocumentation() - { return "궨ĵ"; } + { return "宏定义文档"; } virtual QCString trFunctionPrototypeDocumentation() - { return "ԭĵ"; } + { return "函数原型文档"; } virtual QCString trTypedefDocumentation() - { return "Ͷĵ"; } + { return "类型定义文档"; } virtual QCString trEnumerationTypeDocumentation() - { return "öĵ"; } + { return "枚举类型文档"; } virtual QCString trFunctionDocumentation() - { return "ĵ"; } + { return "函数文档"; } virtual QCString trVariableDocumentation() - { return "ĵ"; } + { return "变量文档"; } virtual QCString trCompounds() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ݽṹ"; + return "数据结构"; } else { - return ""; + return "组合类型"; } } @@ -403,60 +403,60 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trClassDiagram(const char *clName) { - return (QCString)"̳ͼ"CN_SPC+clName; + return (QCString)"类"CN_SPC+clName+CN_SPC"继承关系图:"; } virtual QCString trForInternalUseOnly() - { return "ڲʹá"; } + { return "仅限内部使用。"; } virtual QCString trWarning() - { return ""; } + { return "警告"; } virtual QCString trVersion() - { return "汾"; } + { return "版本"; } virtual QCString trDate() - { return ""; } + { return "日期"; } virtual QCString trReturns() - { return ""; } + { return "返回"; } virtual QCString trSeeAlso() - { return "μ"; } + { return "参见"; } virtual QCString trParameters() - { return ""; } + { return "参数"; } virtual QCString trExceptions() - { return "쳣"; } + { return "异常"; } virtual QCString trGeneratedBy() - { return ""; } + { return "制作者"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 ////////////////////////////////////////////////////////////////////////// virtual QCString trNamespaceList() - { return "ֿռб"; } + { return "命名空间列表"; } virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="г"; - if (!extractAll) result+="ĵ"; - result+="ֿռ䶨壬Ҫ˵"; + QCString result="这里列出所有"; + if (!extractAll) result+="文档化的"; + result+="命名空间定义,附带简要说明:"; return result; } virtual QCString trFriends() - { return "Ԫ"; } + { return "友元"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 ////////////////////////////////////////////////////////////////////////// virtual QCString trRelatedFunctionDocumentation() - { return "Ԫغĵ"; } + { return "友元及相关函数文档"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -468,18 +468,18 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // used as the title of the HTML page of a class/struct/union { QCString result=(QCString)clName; - if (isTemplate) result+=CN_SPC"ģ"; + if (isTemplate) result+=CN_SPC"模板"; 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; + 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+="ο"; + result+="参考"; return result; } @@ -487,7 +487,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // used as the title of the HTML page of a file { QCString result=fileName; - result+=CN_SPC"ļο"; + result+=CN_SPC"文件参考"; return result; } @@ -495,40 +495,40 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // used as the title of the HTML page of a namespace { QCString result=namespaceName; - result+=CN_SPC"ֿռο"; + result+=CN_SPC"命名空间参考"; return result; } // these are for the member sections of a class, struct or union virtual QCString trPublicMembers() - { return "гԱ"; } + { return "公有成员"; } virtual QCString trPublicSlots() - { return "в"; } + { return "公有槽"; } virtual QCString trSignals() - { return "ź"; } + { return "信号"; } virtual QCString trStaticPublicMembers() - { return "̬гԱ"; } + { return "静态公有成员"; } virtual QCString trProtectedMembers() - { return "Ա"; } + { return "保护成员"; } virtual QCString trProtectedSlots() - { return ""; } + { return "保护槽"; } virtual QCString trStaticProtectedMembers() - { return "̬Ա"; } + { return "静态保护成员"; } virtual QCString trPrivateMembers() - { return "˽гԱ"; } + { return "私有成员"; } virtual QCString trPrivateSlots() - { return "˽в"; } + { return "私有槽"; } virtual QCString trStaticPrivateMembers() - { return "̬˽гԱ"; } + { return "静态私有成员"; } // end of member sections @@ -548,9 +548,9 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (i!=numEntries-1) // not the last entry, so we need a separator { if (i<numEntries-2) // not the fore last entry - result+=""; + result+="、"; else // the fore last entry - result+=CN_SPC""CN_SPC; + result+=CN_SPC"及"CN_SPC; } } return result; @@ -560,56 +560,56 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // used in class documentation to produce a list of base classes, // if class diagrams are disabled. { - return "̳"CN_SPC+trWriteList(numEntries)+""; + return "继承自"CN_SPC+trWriteList(numEntries)+"。"; } virtual QCString trInheritedByList(int numEntries) // used in class documentation to produce a list of super classes, // if class diagrams are disabled. { - return ""CN_SPC+trWriteList(numEntries)+CN_SPC"̳."; + return "被"CN_SPC+trWriteList(numEntries)+CN_SPC"继承."; } virtual QCString trReimplementedFromList(int numEntries) // used in member documentation blocks to produce a list of // members that are hidden by this one. { - return ""CN_SPC+trWriteList(numEntries)+""; + return "重载"CN_SPC+trWriteList(numEntries)+"。"; } virtual QCString trReimplementedInList(int numEntries) { // used in member documentation blocks to produce a list of // all member that overwrite the implementation of this member. - return ""CN_SPC+trWriteList(numEntries)+CN_SPC"ء"; + return "被"CN_SPC+trWriteList(numEntries)+CN_SPC"重载。"; } virtual QCString trNamespaceMembers() // This is put above each page as a link to all members of namespaces. - { return "ֿռԱ"; } + { return "命名空间成员"; } virtual QCString trNamespaceMemberDescription(bool extractAll) // This is an introduction to the page with all namespace members { - QCString result="г"; - if (!extractAll) result+="ĵ"; - result+="ֿռԱ"; + QCString result="这里列出了所有"; + if (!extractAll) result+="文档化的"; + result+="命名空间成员,附带"; if (extractAll) - result+="ĵӣ"; + result+="所在类的文档的链接:"; else - result+="ӣ"; + result+="所在类的链接:"; return result; } virtual QCString trNamespaceIndex() // This is used in LaTeX as the title of the chapter with the // index of all namespaces. - { return "ֿռ"; } + { return "命名空间索引"; } virtual QCString trNamespaceDocumentation() // This is used in LaTeX as the title of the chapter containing // the documentation of all namespaces. - { return "ֿռĵ"; } + { return "命名空间文档"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -621,7 +621,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trNamespaces() { // return "Namespaces"; - return "ֿռ"; + return "命名空间"; } ////////////////////////////////////////////////////////////////////////// @@ -635,18 +635,18 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 bool) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)""; + 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; + 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+="ĵļɣ"; + result+="的文档由以下文件生成:"; return result; } @@ -654,7 +654,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 * list. */ virtual QCString trAlphabeticalList() - { return "ֵ˳б"; } + { return "按字典顺序排序的列表"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -662,12 +662,12 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! This is used as the heading text for the retval command. */ virtual QCString trReturnValues() - { return "ֵ"; } + { return "返回值"; } /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "ҳ"; } + { return "首页"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. @@ -681,12 +681,12 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trDefinedAtLineInSourceFile() { - return "ļ"CN_SPC"@1"CN_SPC""CN_SPC"@0"CN_SPC"ж塣"; + return "在文件"CN_SPC"@1"CN_SPC"第"CN_SPC"@0"CN_SPC"行定义。"; } virtual QCString trDefinedInSourceFile() { - return "ļ"CN_SPC"@0"CN_SPC"ж塣"; + return "在文件"CN_SPC"@0"CN_SPC"中定义。"; } ////////////////////////////////////////////////////////////////////////// @@ -705,81 +705,81 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)clName+CN_SPC"ͼ"; + return (QCString)clName+CN_SPC"合作图:"; } /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)fName+CN_SPC"/ϵͼ"; + return (QCString)fName+CN_SPC"包含/依赖关系图:"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "켰ĵ"; + return "构造及析构函数文档"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "ļԴ롣"; + return "浏览该文件的源代码。"; } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "ļĵ"; + return "浏览该文件的文档。"; } /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "ǰ"; + return "前置条件"; } /*! Text for the \\post command */ virtual QCString trPostcondition() { - return ""; + return "后置条件"; } /*! Text for the \\invariant command */ virtual QCString trInvariant() { - return ""; + return "不变性"; } /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() { - return "ʼУ"; + return "初始化序列:"; } /*! Text used the source code in the file index */ virtual QCString trCode() { - return ""; + return "代码"; } virtual QCString trGraphicalHierarchy() { - return "̳йϵͼ"; + return "类继承关系图"; } virtual QCString trGotoGraphicalHierarchy() { - return "̳йϵͼ"; + return "浏览类继承关系图"; } virtual QCString trGotoTextualHierarchy() { - return "̳йϵ"; + return "浏览类继承关系表"; } virtual QCString trPageIndex() { - return "ҳ"; + return "页面索引"; } ////////////////////////////////////////////////////////////////////////// @@ -788,58 +788,58 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trNote() { - return "ע"; + return "注解"; } virtual QCString trPublicTypes() { - return ""; + return "公有类型"; } virtual QCString trPublicAttribs() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ݳԱ"; + return "数据成员"; } else { - return ""; + return "公有属性"; } } virtual QCString trStaticPublicAttribs() { - return "̬"; + return "静态公有属性"; } virtual QCString trProtectedTypes() { - return ""; + return "保护类型"; } virtual QCString trProtectedAttribs() { - return ""; + return "保护属性"; } virtual QCString trStaticProtectedAttribs() { - return "̬"; + return "静态保护属性"; } virtual QCString trPrivateTypes() { - return "˽"; + return "私有类型"; } virtual QCString trPrivateAttribs() { - return "˽"; + return "私有属性"; } virtual QCString trStaticPrivateAttribs() { - return "̬˽"; + return "静态私有属性"; } @@ -856,7 +856,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "TODO"CN_SPC"б"; + return "TODO"CN_SPC"列表"; } ////////////////////////////////////////////////////////////////////////// @@ -865,27 +865,27 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trReferencedBy() { - return "ο"; + return "参考自"; } virtual QCString trRemarks() { - return ""; + return "评论"; } virtual QCString trAttention() { - return "ע"; + return "注意"; } virtual QCString trInclByDepGraph() { - return "ͼչʾֱӻӰļļ"; + return "此图展示直接或间接包含该文件的文件:"; } virtual QCString trSince() { - return "Դ"; + return "自从"; } ////////////////////////////////////////////////////////////////////////// @@ -895,33 +895,33 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! title of the graph legend page */ virtual QCString trLegendTitle() { - return "ͼ"; + return "图例"; } /*! page explaining how the dot graph's should be interpreted */ virtual QCString trLegendDocs() { return - "ҳչʾ"CN_SPC"Doxygen"CN_SPC"ɵͼΡ<p>\n" - "뿼ʾ\n" + "本页向您展示如何理解由"CN_SPC"Doxygen"CN_SPC"生成的图形。<p>\n" + "请考虑如下示例:\n" "\\code\n" - "/*! ڽȡʹɼ */\n" + "/*! 由于截取而使该类不可见 */\n" "class Invisible { };\n\n" - "/*! ȡ̳࣬йϵ */\n" + "/*! 被截取的类,继承关系被隐藏起来了 */\n" "class Truncated : public Invisible { };\n\n" - "/* ûб"CN_SPC"doxygen"CN_SPC"עĵ */\n" + "/* 没有被"CN_SPC"doxygen"CN_SPC"的注释文档化的类 */\n" "class Undocumented { };\n\n" - "/*! м̳е */\n" + "/*! 被公有继承的类 */\n" "class PublicBase : public Truncated { };\n\n" "/*! A template class */\n" "template<class T> class Templ { };\n\n" - "/*! ̳е */\n" + "/*! 被保护继承的类 */\n" "class ProtectedBase { };\n\n" - "/*! ˽м̳е */\n" + "/*! 被私有继承的类 */\n" "class PrivateBase { };\n\n" - "/*! ʹõ */\n" + "/*! 被使用的类 */\n" "class Used { };\n\n" - "/*! ̳ */\n" + "/*! 继承了若干其它类的类 */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -932,31 +932,30 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "ļָ"CN_SPC"MAX_DOT_GRAPH_HEIGHT"CN_SPC"ֵΪ200" - "DoxygenµͼΣ" + "Doxygen将生成如下的图形:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" - "ͼеľµĺ壺\n" + "以上图形中的矩形有如下的含义:\n" "<ul>\n" - "<li>ɫľδǰṹ\n" - "<li>ɫ߿ľδ<i>ĵ</i>ṹ\n" - "<li>ɫ߿ľδû<i>ĵ</i>ṹ\n" - "<li>ɫ߿ľδ̳/ϵûбʾṹһͼij" - "ָߴ磬ȡ" + "<li>被黑色填充的矩形代表当前的类或结构。\n" + "<li>黑色边框的矩形代表<i>文档化</i>的类或结构。\n" + "<li>灰色边框的矩形代表没有<i>文档化</i>的类或结构。\n" + "<li>红色边框的矩形代表继承/包含关系没有被完整显示出的类或结构。如果一幅图像的尺" + "寸大于指定尺寸,它将被截取。" "</ul>\n" - "ͷµĺ壺\n" + "各个箭头有如下的含义:\n" "<ul>\n" - "<li>ɫļͷʾ֮Ĺм̳йϵ\n" - "<li>ɫļͷʾ̳йϵ\n" - "<li>ɫļͷʾ˽м̳йϵ\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 "ͼ"; + return "图例"; } ////////////////////////////////////////////////////////////////////////// @@ -966,13 +965,13 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! Used as a marker that is put before a test item */ virtual QCString trTest() { - return ""; + return "测试"; } /*! Used as the header of the test list */ virtual QCString trTestList() { - return "б"; + return "测试列表"; } ////////////////////////////////////////////////////////////////////////// @@ -981,7 +980,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "DCOP"CN_SPC""; + return "DCOP"CN_SPC"方法"; } ////////////////////////////////////////////////////////////////////////// @@ -991,13 +990,13 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! Used as a section header for IDL properties */ virtual QCString trProperties() { - return ""; + return "属性"; } /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "ĵ"; + return "属性文档"; } ////////////////////////////////////////////////////////////////////////// @@ -1009,42 +1008,42 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "ݽṹ"; + return "数据结构"; } else { - return ""; + return "类"; } } /*! Used as the title of a Java package */ virtual QCString trPackage(const char *name) { - return (QCString)" "+name; + return (QCString)"包 "+name; } /*! Title of the package index page */ virtual QCString trPackageList() { - return "б"; + return "包列表"; } /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "геİҪ˵(еĻ)"; + return "这里列出所有的包,附带简要说明(如果有的话):"; } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() { - return ""; + return "包"; } /*! Text shown before a multi-line define */ virtual QCString trDefineValue() { - return "ֵ:"; + return "值:"; } //////////////////////////////////////////////////////////////////////////// @@ -1052,12 +1051,12 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 //////////////////////////////////////////////////////////////////////////// virtual QCString trBug () { - return "ȱ"; + return "缺陷"; } virtual QCString trBugList () { - return "ȱб"; + return "缺陷列表"; } ////////////////////////////////////////////////////////////////////////// @@ -1106,7 +1105,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return ""; + return "索引"; } @@ -1121,7 +1120,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="es"; return result; */ - return ""; + return "类"; } /*! This is used for translation of the word that will possibly @@ -1135,7 +1134,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return "ļ"; + return "文件"; } @@ -1150,7 +1149,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return "ֿռ"; + return "命名空间"; } /*! This is used for translation of the word that will possibly @@ -1164,7 +1163,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return ""; + return "组"; } /*! This is used for translation of the word that will possibly @@ -1178,7 +1177,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return "ҳ"; + return "页"; } /*! This is used for translation of the word that will possibly @@ -1192,7 +1191,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return "Ա"; + return "成员"; } /*! This is used for translation of the word that will possibly @@ -1206,7 +1205,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return "ȫֶ"; + return "全局定义"; } ////////////////////////////////////////////////////////////////////////// @@ -1222,7 +1221,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (!singular) result+="s"; return result; */ - return ""; + return "作者"; } ////////////////////////////////////////////////////////////////////////// @@ -1233,7 +1232,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trReferences() { - return "ο"; + return "参考"; } ////////////////////////////////////////////////////////////////////////// @@ -1246,7 +1245,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trImplementedFromList(int numEntries) { /* return "Implements "+trWriteList(numEntries)+"."; */ - return "ʵ"CN_SPC+trWriteList(numEntries)+""; + return "实现了"CN_SPC+trWriteList(numEntries)+"。"; } /*! used in member documentation blocks to produce a list of @@ -1255,7 +1254,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trImplementedInList(int numEntries) { /* return "Implemented in "+trWriteList(numEntries)+"."; */ - return ""CN_SPC+trWriteList(numEntries)+CN_SPC"ڱʵ֡"; + return "在"CN_SPC+trWriteList(numEntries)+CN_SPC"内被实现。"; } ////////////////////////////////////////////////////////////////////////// @@ -1268,7 +1267,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trRTFTableOfContents() { /* return "Table of Contents"; */ - return "Ŀ¼"; + return "目录"; } ////////////////////////////////////////////////////////////////////////// @@ -1281,7 +1280,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trDeprecatedList() { /* return "Deprecated List"; */ - return "ʱб"; + return "过时列表"; } ////////////////////////////////////////////////////////////////////////// @@ -1294,13 +1293,13 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trEvents() { /* return "Events"; */ - return "¼"; + return "事件"; } /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { /* return "Event Documentation"; */ - return "¼ĵ"; + return "事件文档"; } ////////////////////////////////////////////////////////////////////////// @@ -1312,7 +1311,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trPackageTypes() { /* return "Package Types"; */ - return "ģ"; + return "模块类型"; } /*! Used as a heading for a list of Java class functions with package * scope. @@ -1320,7 +1319,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trPackageMembers() { /* return "Package Functions"; */ - return "ģ麯"; + return "模块函数"; } /*! Used as a heading for a list of static Java class functions with * package scope. @@ -1328,7 +1327,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trStaticPackageMembers() { /* return "Static Package Functions"; */ - return "̬ģ麯"; + return "静态模块函数"; } /*! Used as a heading for a list of Java class variables with package * scope. @@ -1336,7 +1335,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trPackageAttribs() { /* return "Package Attributes"; */ - return "ģ"; + return "模块属性"; } /*! Used as a heading for a list of static Java class variables with * package scope. @@ -1344,7 +1343,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trStaticPackageAttribs() { /* return "Static Package Attributes"; */ - return "̬ģ"; + return "静态模块属性"; } ////////////////////////////////////////////////////////////////////////// @@ -1357,13 +1356,13 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trAll() { /* return "All"; */ - return "ȫ"; + return "全部"; } /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { /* return "Here is the call graph for this function:"; */ - return "ͼ:"; + return "函数调用图:"; } ////////////////////////////////////////////////////////////////////////// @@ -1377,7 +1376,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trSearchForIndex() { /* return "Search for"; */ - return ""; + return "搜索"; } /*! This string is used as the title for the page listing the search * results. @@ -1385,7 +1384,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trSearchResultsTitle() { /* return "Search Results"; */ - return ""; + return "搜索结果"; } /*! This string is put just before listing the search results. The * text can be different depending on the number of documents found. @@ -1400,19 +1399,19 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 if (numDocuments==0) { /* return "Sorry, no documents matching your query."; */ - return "ԲҲIJѯĵ"; + return "对不起,找不到与你的查询相符的文档。"; } else if (numDocuments==1) { /* return "Found <b>1</b> document matching your query."; */ - return "ҵ<b>1</b>ƪIJѯĵ"; + return "找到<b>1</b>篇与你的查询相符的文档。"; } else { /* return "Found <b>$num</b> documents matching your query. " "Showing best matches first."; */ - return "ҵ<b>$num</b>ƪIJѯĵ" - "ʾǺϵĵ"; + return "找到<b>$num</b>篇与你的查询相符的文档。" + "先显示最吻合的文档。"; } } /*! This string is put before the list of matched words, for each search @@ -1421,7 +1420,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trSearchMatches() { /* return "Matches:"; */ - return "ϵĽ:"; + return "符合的结果:"; } ////////////////////////////////////////////////////////////////////////// @@ -1433,7 +1432,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trSourceFile(QCString& filename) { /* return filename + " Source File"; */ - return filename + CN_SPC"Դļ"; + return filename + CN_SPC"源文件"; } ////////////////////////////////////////////////////////////////////////// // new since 1.3.9 @@ -1445,7 +1444,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trDirIndex() /* { return "Directory Hierarchy"; } */ { - return "Ŀ¼ṹ"; + return "目录结构"; } /*! This is used as the name of the chapter containing the documentation @@ -1454,7 +1453,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trDirDocumentation() /* { return "Directory Documentation"; } */ { - return "Ŀ¼ĵ"; + return "目录文档"; } /*! This is used as the title of the directory index and also in the @@ -1463,7 +1462,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trDirectories() /* { return "Directories"; } */ { - return "Ŀ¼"; + return "目录"; } /*! This returns a sentences that introduces the directory hierarchy. @@ -1474,7 +1473,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /* "but not completely, alphabetically:"; */ /* } */ { - return "Ŀ¼ṹԵ"; + return "目录结构仅经过粗略的排序"; } /*! This returns the title of a directory page. The name of the @@ -1484,7 +1483,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /* { QCString result=dirName; result+=" Directory Reference"; return result; } */ { QCString result=dirName; - result+=CN_SPC"Ŀ¼ο"; + result+=CN_SPC"目录参考"; return result; } @@ -1496,7 +1495,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /* QCString result((first_capital ? "Director" : "director")); */ /* if (singular) result+="y"; else result+="ies"; */ /* return result; */ - return "Ŀ¼"; + return "目录"; } ////////////////////////////////////////////////////////////////////////// @@ -1511,8 +1510,8 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /* return "This is an overloaded member function, " "provided for convenience. It differs from the above " "function only in what argument(s) it accepts."; */ - return "ΪʹöṩһسԱ" - "ĺȣܲͬ͵IJ"; + return "这是为便于使用而提供的一个重载成员函数。" + "与上面的函数相比,它接受不同类型的参数。"; } ////////////////////////////////////////////////////////////////////////// @@ -1523,7 +1522,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trCallerGraph() { /* return "Here is the caller graph for this function:"; */ - return "ĵͼ"; + return "这是这个函数的调用图:"; } /*! This is used in the documentation of a file/namespace before the list @@ -1532,7 +1531,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 virtual QCString trEnumerationValueDocumentation() { /* return "Enumerator Documentation"; */ - return "öٱĵ"; + return "枚举变量文档"; } ////////////////////////////////////////////////////////////////////////// @@ -1542,22 +1541,22 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 /*! header that is put before the list of member subprograms (Fortran). */ virtual QCString trMemberFunctionDocumentationFortran() // { return "Member Function/Subroutine Documentation"; } - { return "Աĵ"; } + { return "成员函数及过程文档"; } /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() // { return "Data Types List"; } - { return "б"; } + { return "数据类型列表"; } /*! This is put above each page as a link to all members of compounds (Fortran). */ virtual QCString trCompoundMembersFortran() // { return "Data Fields"; } - { return ""; } + { return "数据项"; } /*! This is an introduction to the annotated compound list (Fortran). */ virtual QCString trCompoundListDescriptionFortran() // { return "Here are the data types with brief descriptions:"; } - { return "Ҫб:"; } + { return "带简要描述的数据类型列表:"; } /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) @@ -1579,9 +1578,9 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // } // return result; if(!extractAll) { - return "ĵͳԱбеÿԱݽṹĵ"; + return "这里是有文档的数据类型成员列表,含有到每个成员的数据结构文档的链接"; } else { - return "ͳԱбеԱ͵:"; + return "这里是数据类型成员列表,含有到成员所属的数据类型的链接:"; } } @@ -1591,7 +1590,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trCompoundIndexFortran() // { return "Data Type Index"; } - { return ""; } + { return "数据类型索引"; } /*! This is used in LaTeX as the title of the chapter containing @@ -1599,21 +1598,21 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trTypeDocumentation() // { return "Data Type Documentation"; } - { return "ĵ"; } + { return "数据类型文档"; } /*! 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"; } - { return "/"; } + { return "函数/过程"; } /*! 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"; } - { return "/ĵ"; } + { return "函数/过程文档"; } /*! This is used in the documentation of a file/namespace/group before @@ -1621,12 +1620,12 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trDataTypes() // { return "Data Types"; } - { return ""; } + { return "数据类型"; } /*! used as the title of page containing all the index of all modules (Fortran). */ virtual QCString trModulesList() // { return "Modules List"; } - { return "ģб"; } + { return "模块列表"; } /*! used as an introduction to the modules list (Fortran) */ virtual QCString trModulesListDescription(bool extractAll) @@ -1636,9 +1635,9 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // result+="modules with brief descriptions:"; // return result; if(!extractAll) { - return "Ҫĵģб:"; + return "带简要描述的有文档的模块列表:"; } else { - return "Ҫģб:"; + return "带简要描述的模块列表:"; } } @@ -1664,16 +1663,16 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 QCString result=(QCString)clName; switch(compType) { - case ClassDef::Class: result+=CN_SPC"ģ"; break; - case ClassDef::Struct: result+=CN_SPC""; break; - case ClassDef::Union: result+=CN_SPC""; break; - case ClassDef::Interface: result+=CN_SPC""; break; - case ClassDef::Protocol: result+=CN_SPC"ӿ"; break; - case ClassDef::Category: result+=CN_SPC"Ŀ¼"; break; - case ClassDef::Exception: result+=CN_SPC"쳣"; break; + case ClassDef::Class: result+=CN_SPC"模块"; break; + case ClassDef::Struct: result+=CN_SPC"类型"; break; + case ClassDef::Union: result+=CN_SPC"联合"; break; + case ClassDef::Interface: result+=CN_SPC"界面"; break; + case ClassDef::Protocol: result+=CN_SPC"接口"; break; + case ClassDef::Category: result+=CN_SPC"目录"; break; + case ClassDef::Exception: result+=CN_SPC"异常"; break; } - if (isTemplate) result+="ģ"; - result+="οֲ"; + if (isTemplate) result+="模板"; + result+="参考手册"; return result; } /*! used as the title of the HTML page of a module (Fortran) */ @@ -1681,14 +1680,14 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 { QCString result=namespaceName; // result+=" Module Reference"; - result += CN_SPC"ģοֲ"; + result += CN_SPC"模块参考手册"; return result; } /*! This is put above each page as a link to all members of modules. (Fortran) */ virtual QCString trModulesMembers() // { return "Module Members"; } - { return "ģԱ"; } + { return "模块成员"; } /*! This is an introduction to the page with all modules members (Fortran) */ virtual QCString trModulesMemberDescription(bool extractAll) @@ -1706,9 +1705,9 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // } // return result; if(!extractAll) { - return "ĵģԱбеÿԱģĵ"; + return "这里是有文档的模块成员列表,含有到每个成员所在模块的文档的链接"; } else { - return "ģԱбеԱģ:"; + return "这里是模块成员列表,含有到成员所属的模块的链接:"; } } @@ -1717,7 +1716,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trModulesIndex() // { return "Modules Index"; } - { return "ģ"; } + { return "模块索引"; } /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names @@ -1728,7 +1727,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // QCString result((first_capital ? "Module" : "module")); // if (!singular) result+="s"; // return result; - return "ģ"; + return "模块"; } /*! 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. @@ -1751,18 +1750,18 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 // result+=" was generated from the following file"; // if (single) result+=":"; else result+="s:"; // return result; - QCString result=""; + QCString result="该"; switch(compType) { - case ClassDef::Class: result+=CN_SPC"ģ"; break; - case ClassDef::Struct: result+=CN_SPC""; break; - case ClassDef::Union: result+=CN_SPC""; break; - case ClassDef::Interface: result+=CN_SPC""; break; - case ClassDef::Protocol: result+=CN_SPC"ӿ"; break; - case ClassDef::Category: result+=CN_SPC"Ŀ¼"; break; - case ClassDef::Exception: result+=CN_SPC"쳣"; break; + case ClassDef::Class: result+=CN_SPC"模块"; break; + case ClassDef::Struct: result+=CN_SPC"类型"; break; + case ClassDef::Union: result+=CN_SPC"联合"; break; + case ClassDef::Interface: result+=CN_SPC"界面"; break; + case ClassDef::Protocol: result+=CN_SPC"接口"; break; + case ClassDef::Category: result+=CN_SPC"目录"; break; + case ClassDef::Exception: result+=CN_SPC"异常"; break; } - result+="ĵļ:"; + result+="的文档由以下文件生成:"; return result; } /*! This is used for translation of the word that will possibly @@ -1771,7 +1770,7 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trType(bool, bool) { - return ""; + return "类型"; } /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names @@ -1779,13 +1778,13 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 */ virtual QCString trSubprogram(bool, bool) { - return "ӳ"; + return "子程序"; } /*! C# Type Constraint list */ virtual QCString trTypeConstraints() { - return ""; + return "类型限制"; } ////////////////////////////////////////////////////////////////////////// @@ -1795,27 +1794,27 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 { // return QCString(name)+" Relation"; // unsure - return QCString(name)+CN_SPC"ϵ"; + return QCString(name)+CN_SPC"关系"; } virtual QCString trLoading() { - return "..."; + return "载入中..."; } virtual QCString trGlobalNamespace() { - return "ȫռ"; + return "全局命名空间"; } virtual QCString trSearching() { - return "..."; + return "搜索中..."; } virtual QCString trNoMatches() { - return "δҵ"; + return "未找到"; } ////////////////////////////////////////////////////////////////////////// @@ -1826,33 +1825,33 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 { // return (QCString)"Directory dependency graph for "+name; // unsure - return QCString(name)+CN_SPC"Ŀ¼ϵͼ"; + return QCString(name)+CN_SPC"的目录依赖关系图"; } virtual QCString trFileIn(const char *name) { // return (QCString)"File in "+name; // unsure - return (QCString)"ļ"+CN_SPC+name; + return (QCString)"文件在"+CN_SPC+name; } virtual QCString trIncludesFileIn(const char *name) { // return (QCString)"Includes file in "+name; // unsure - return (QCString)""CN_SPC+name+CN_SPC""; + return (QCString)"在"CN_SPC+name+CN_SPC"中引用"; } virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, int hour,int minutes,int seconds, bool includeTime) { - static const char *days[] = { "һ","","","","","","" }; - static const char *months[] = { "һ","","","","","","","","","ʮ","ʮһ","ʮ" }; + static const char *days[] = { "一","二","三","四","五","六","日" }; + static const char *months[] = { "一","二","三","四","五","六","七","八","九","十","十一","十二" }; QCString sdate; - sdate.sprintf("%d%s%d %s",year, months[month-1], day, days[dayOfWeek-1]); + sdate.sprintf("%d年%s月%d日 星期%s",year, months[month-1], day, days[dayOfWeek-1]); if (includeTime) { @@ -1861,7 +1860,26 @@ class TranslatorChinese : public TranslatorAdapter_1_7_5 sdate+=stime; } return sdate; - } + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "参考书目"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "版权所有"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { + //unsure + return QCString(name)+CN_SPC"的目录依赖关系图"; + } }; #endif diff --git a/src/translator_cz.h b/src/translator_cz.h index 5c37fab..63ab495 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -20,6 +20,7 @@ // Updates: // -------- +// 2011/07/28 - Updates for "new since 1.7.5". // 2010/06/01 - typo // 2010/04/28 - Updates for "new since 1.6.3". // 2009/09/02 - Updates for "new since 1.6.0 (mainly for the new search engine)". @@ -81,7 +82,7 @@ // something else. It is difficult to find the general translation // for all kinds in the Czech language. -class TranslatorCzech : public TranslatorAdapter_1_7_5 +class TranslatorCzech : public Translator { public: // --- Language control methods ------------------- @@ -1905,5 +1906,21 @@ class TranslatorCzech : public TranslatorAdapter_1_7_5 return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Odkazy na literaturu"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Graf závislosti na adresářích pro ")+name+":"; } }; + #endif // TRANSLATOR_CZ_H diff --git a/src/translator_de.h b/src/translator_de.h index be08109..d825cc2 100644 --- a/src/translator_de.h +++ b/src/translator_de.h @@ -129,7 +129,7 @@ #ifndef TRANSLATOR_DE_H #define TRANSLATOR_DE_H -class TranslatorGerman : public TranslatorAdapter_1_7_5 +class TranslatorGerman : public Translator { public: @@ -1917,7 +1917,7 @@ class TranslatorGerman : public TranslatorAdapter_1_7_5 /*! introduction text for the directory dependency graph */ virtual QCString trDirDependency(const char *name) { - return (QCString)"Verzeichnis-Abhängigkeitsgraph für "+name; + return (QCString)"Diagramm der Verzeichnisabhängigkeiten für "+name; } /*! when clicking a directory dependency label, a page with a @@ -1965,6 +1965,22 @@ class TranslatorGerman : public TranslatorAdapter_1_7_5 return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Literaturverzeichnis"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Diagramm der Verzeichnisabhängigkeiten für ")+name+":"; } + }; #endif diff --git a/src/translator_dk.h b/src/translator_dk.h index d43fea5..bca066f 100644 --- a/src/translator_dk.h +++ b/src/translator_dk.h @@ -87,8 +87,7 @@ #ifndef TRANSLATOR_DK_H #define TRANSLATOR_DK_H -// class TranslatorDanish : public TranslatorAdapter_1_5_4 -class TranslatorDanish : public TranslatorAdapter_1_7_5 +class TranslatorDanish : public Translator { public: @@ -1797,6 +1796,25 @@ class TranslatorDanish : public TranslatorAdapter_1_7_5 return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + virtual QCString trCiteReferences() + { + return "Bibliografiske referencer"; + } + + virtual QCString trCopyright() + { + return "Copyright"; + } + + virtual QCString trDirDepGraph(const char *name) + { + return QCString("Afhngighedsgraf for katalog ")+name+":"; + } + /*---------- For internal use: ----------------------------------------*/ protected: diff --git a/src/translator_gr.h b/src/translator_gr.h index 63ee61d..8d38cf3 100644 --- a/src/translator_gr.h +++ b/src/translator_gr.h @@ -26,7 +26,7 @@ #ifndef TRANSLATOR_GR_H #define TRANSLATOR_GR_H -class TranslatorGreek : public TranslatorAdapter_1_7_5 +class TranslatorGreek : public Translator { protected: friend class TranslatorAdapterBase; @@ -819,7 +819,7 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)"Διάγραμμα εξάρτησης Include για το αρχείο "+fName+":"; + return (QCString)"Διάγραμμα εξάρτησης αρχείου συμπερίληψης για το "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() @@ -963,8 +963,8 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 } virtual QCString trInclByDepGraph() { - return "Το γράφημα αυτό παρουσιάζει ποιά αρχεία άμεσα ή " - "έμεσα περιλαμβάνουν αυτό το αρχείο:"; + return "Το διάγραμμα αυτό παρουσιάζει ποιά αρχεία άμεσα ή " + "έμμεσα περιλαμβάνουν αυτό το αρχείο:"; } virtual QCString trSince() { @@ -1017,7 +1017,7 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Αυτό οδηγεί στο επόμενο γράφημα:" + "Αυτό οδηγεί στο επόμενο διάγραμμα:" "<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center></p>\n" "<p>\n" "Τα κουτιά στο παραπάνω διάγραμμα έχουν την ακόλουθη σημασία:\n" @@ -1414,7 +1414,7 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Το γράφημα δείχνει ποιές συναρτήσεις καλούνται από αυτή:"; + return "Το διάγραμμα δείχνει ποιές συναρτήσεις καλούνται από αυτή:"; } ////////////////////////////////////////////////////////////////////////// @@ -1546,7 +1546,7 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Το γράφημα δείχνει από ποιές συναρτήσεις καλείται αυτή η συνάρτηση:"; + return "Το διάγραμμα δείχνει από ποιές συναρτήσεις καλείται αυτή η συνάρτηση:"; } /*! This is used in the documentation of a file/namespace before the list @@ -1795,7 +1795,7 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 /*! introduction text for the directory dependency graph */ virtual QCString trDirDependency(const char *name) { - return (QCString)"Γράφημα εξάρτησης φακέλου για το "+name; + return (QCString)"Διάγραμμα εξάρτησης φακέλου για το "+name; } /*! when clicking a directory dependency label, a page with a @@ -1843,6 +1843,22 @@ class TranslatorGreek : public TranslatorAdapter_1_7_5 return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Αναφορές Βιβλιογραφίας"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Διάγραμμα εξάρτησης φακέλων για ")+name+":"; } + }; #endif diff --git a/src/translator_hr.h b/src/translator_hr.h index 47e0e08..e175aa5 100644 --- a/src/translator_hr.h +++ b/src/translator_hr.h @@ -81,7 +81,7 @@ #ifndef TRANSLATOR_HR_H #define TRANSLATOR_HR_H -class TranslatorCroatian : public TranslatorAdapter_1_7_5 +class TranslatorCroatian : public Translator { private: @@ -1549,6 +1549,21 @@ class TranslatorCroatian : public TranslatorAdapter_1_7_5 } return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Bibliografija"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Direktoriji o kojima ovisi ")+name+":"; } }; diff --git a/src/translator_kr.h b/src/translator_kr.h index 3064758..752d980 100644 --- a/src/translator_kr.h +++ b/src/translator_kr.h @@ -50,7 +50,7 @@ Translator class (by the local maintainer) when the localized translator is made up-to-date again. */ -class TranslatorKorean : public TranslatorAdapter_1_6_3 +class TranslatorKorean : public TranslatorAdapter_1_7_5 { protected: friend class TranslatorAdapterBase; diff --git a/src/translator_nl.h b/src/translator_nl.h index 3b8ea72..402112e 100644 --- a/src/translator_nl.h +++ b/src/translator_nl.h @@ -18,7 +18,7 @@ #ifndef TRANSLATOR_NL_H #define TRANSLATOR_NL_H -class TranslatorDutch : public TranslatorAdapter_1_7_5 +class TranslatorDutch : public Translator { public: QCString idLanguage() @@ -1448,7 +1448,21 @@ class TranslatorDutch : public TranslatorAdapter_1_7_5 return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Bibliografie"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Folder afhankelijkheidsgraaf voor ")+name+":"; } }; diff --git a/src/translator_pt.h b/src/translator_pt.h index de8d160..c3fd310 100644 --- a/src/translator_pt.h +++ b/src/translator_pt.h @@ -1,7 +1,4 @@ /****************************************************************************** - * - * - * * Copyright (C) 1997-2011 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its @@ -13,12 +10,26 @@ * Documents produced by Doxygen are derivative works derived from the * input used in their production; they are not affected by this license. * - * The translation into Portuguese was provided by - * Rui Godinho Lopes <rui@ruilopes.com> - * http://www.ruilopes.com + * Portuguese translation version 20110428 + * Maintainer (from 04/28/2011): + * Fabio "FJTC" Jun Takada Chino <jun-chino at uol.com.br> + * Maintainer (until 04/28/2011): + * Rui Godinho Lopes <rui at ruilopes.com> + * + * Notes about this translation: + * Since I'm Brazilian, this translation may be odd or even incorect for + * Portuguese (from Portugal) speakers. If you find any errors, feel free + * to contact me. * * VERSION HISTORY * --------------- + * History: + * 20110628: + * - Updated to 1.7.5; + * - All obsolete methods have been removed; + * 20110428 + * - Updated to doxygen 1.6.3 using the Brazilian Portuguese as the base. + * Requires revision by a Portuguese (Portugal native speaker); * 007 09 june 2003 * ! Updated for doxygen v1.3.1 * 006 30 july 2002 @@ -40,7 +51,8 @@ #ifndef TRANSLATOR_PT_H #define TRANSLATOR_PT_H -class TranslatorPortuguese : public TranslatorAdapter_1_3_3 + +class TranslatorPortuguese : public Translator { public: @@ -74,44 +86,44 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! 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. */ QCString trRelatedFunctions() - { return "Funes associadas"; } + { return "Funções associadas"; } /*! subscript for the related functions. */ QCString trRelatedSubscript() - { return "(Note que no so funes membro)"; } + { return "(Note que não são funções membro)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ QCString trDetailedDescription() - { return "Descrio detalhada"; } + { return "Descrição detalhada"; } /*! header that is put before the list of typedefs. */ QCString trMemberTypedefDocumentation() - { return "Documentao das definies de tipo"; } + { return "Documentação das definições de tipo"; } /*! header that is put before the list of enumerations. */ QCString trMemberEnumerationDocumentation() - { return "Documentao das enumeraes"; } + { return "Documentação das enumerações"; } /*! header that is put before the list of member functions. */ QCString trMemberFunctionDocumentation() - { return "Documentao dos mtodos"; } + { return "Documentação dos métodos"; } /*! header that is put before the list of member attributes. */ QCString trMemberDataDocumentation() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Documentao dos campos e atributos"; + return "Documentação dos campos e atributos"; } else { - return "Documentao dos dados membro"; + return "Documentação dos dados membro"; } } @@ -141,13 +153,13 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 QCString trGeneratedAutomatically(const char *s) { QCString result="Gerado automaticamente por Doxygen"; if (s) result+=(QCString)" para "+s; - result+=" a partir do cdigo fonte."; + result+=" a partir do código fonte."; return result; } /*! put after an enum name in the list of all members */ QCString trEnumName() - { return "enumerao"; } + { return "enumeração"; } /*! put after an enum value in the list of all members */ QCString trEnumValue() @@ -163,7 +175,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 * compounds or files (see the \\group command). */ QCString trModules() - { return "Mdulos"; } + { return "Módulos"; } /*! This is put above each page as a link to the class hierarchy */ QCString trClassHierarchy() @@ -186,10 +198,6 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 QCString trFileList() { return "Lista de ficheiros"; } - /*! This is put above each page as a link to the list of all verbatim headers */ - QCString trHeaderFiles() - { return "Ficheiros includos"; } - /*! This is put above each page as a link to all members of compounds. */ QCString trCompoundMembers() { @@ -218,7 +226,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! This is put above each page as a link to all related pages. */ QCString trRelatedPages() - { return "Pginas relacionadas"; } + { return "Páginas relacionadas"; } /*! This is put above each page as a link to all examples. */ QCString trExamples() @@ -230,14 +238,14 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! This is an introduction to the class hierarchy. */ QCString trClassHierarchyDescription() - { return "Esta lista de heranas est organizada, dentro do possvel, por ordem alfabtica:"; } + { return "Esta lista de heranças está organizada, dentro do possível, por ordem alfabética:"; } /*! This is an introduction to the list with all files. */ QCString trFileListDescription(bool extractAll) { QCString result="Lista de todos os ficheiros "; if (!extractAll) result+="documentados "; - result+="com uma breve descrio:"; + result+="com uma breve descrição:"; return result; } @@ -246,11 +254,11 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Lista das estruturas de dados com uma breve descrio:"; + return "Lista das estruturas de dados com uma breve descrição:"; } else { - return "Lista de classes, estruturas, unies e interfaces com uma breve descrio:"; + return "Lista de classes, estruturas, uniões e interfaces com uma breve descrição:"; } } @@ -260,7 +268,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 QCString result="Lista de todas as"; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+=" estruturas e campos de unies"; + result+=" estruturas e campos de uniões"; } else { @@ -270,23 +278,23 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 { result+=" documentadas"; } - result+=" com referncia para "; + result+=" com referência para "; if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="a respectiva documentao:"; + result+="a respectiva documentação:"; } else { - result+="a documentao de cada membro:"; + result+="a documentação de cada membro:"; } } else { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="as estruturas/unies a que pertencem:"; + result+="as estruturas/uniões a que pertencem:"; } else { @@ -302,7 +310,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 QCString result="Lista de "; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="todas as funes, variveis, definies, enumeraes e definies de tipo "; + result+="todas as funções, variáveis, definições, enumerações e definições de tipo "; if (!extractAll) result+="documentadas "; } else @@ -310,54 +318,44 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 result+="todos os ficheiros membro "; if (!extractAll) result+="documentados "; } - result+="com referncia para "; + result+="com referência para "; if (extractAll) result+="o ficheiro a que pertecem:"; else - result+="a respectiva documentao:"; + result+="a respectiva documentação:"; return result; } - /*! This is an introduction to the page with the list of all header files. */ - QCString trHeaderFilesDescription() - { return "Lista de todos os ficheiros cabealho que constituem a API:"; } - /*! This is an introduction to the page with the list of all examples */ QCString trExamplesDescription() { return "Lista de todos os exemplos:"; } /*! This is an introduction to the page with the list of related pages */ QCString trRelatedPagesDescription() - { return "Lista de documentao relacionada:"; } + { return "Lista de documentação relacionada:"; } /*! This is an introduction to the page with the list of class/file groups */ QCString trModulesDescription() - { return "Lista de todos os mdulos:"; } - - /*! This sentences is used in the annotated class/file lists if no brief - * description is given. - */ - QCString trNoDescriptionAvailable() - { return "Nenhuma descrio disponvel"; } + { return "Lista de todos os módulos:"; } // index titles (the project name is prepended for these) /*! This is used in HTML as the title of index.html. */ QCString trDocumentation() - { return "Documentao"; } + { return "Documentação"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ QCString trModuleIndex() - { return "ndice dos mdulos"; } + { return "Índice dos módulos"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ QCString trHierarchicalIndex() - { return "ndice da hierarquia"; } + { return "Índice da hierarquia"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. @@ -366,11 +364,11 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 { 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"; } } @@ -378,41 +376,41 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 * list of all files. */ QCString trFileIndex() - { return "ndice dos ficheiros"; } + { return "Índice dos ficheiros"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ QCString trModuleDocumentation() - { return "Documentao do mdulo"; } + { return "Documentação do módulo"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. */ QCString trClassDocumentation() - { return "Documentao da classe"; } + { return "Documentação da classe"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all files. */ QCString trFileDocumentation() - { return "Documentao do ficheiro"; } + { return "Documentação do ficheiro"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ QCString trExampleDocumentation() - { return "Documentao do exemplo"; } + { return "Documentação do exemplo"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ QCString trPageDocumentation() - { return "Documentao da pgina"; } + { return "Documentação da página"; } /*! This is used in LaTeX as the title of the document */ QCString trReferenceManual() - { return "Manual de referncia"; } + { return "Manual de referência"; } /*! This is used in the documentation of a file as a header before the * list of defines @@ -424,79 +422,73 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 * list of function prototypes */ QCString trFuncProtos() - { return "Prottipos de funes"; } + { return "Protótipos de funções"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ QCString trTypedefs() - { return "Definies de tipos"; } + { return "Definições de tipos"; } /*! This is used in the documentation of a file as a header before the * list of enumerations */ QCString trEnumerations() - { return "Enumeraes"; } + { return "Enumerações"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ QCString trFunctions() - { return "Funes"; } + { return "Funções"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ QCString trVariables() - { return "Variveis"; } + { return "Variáveis"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ QCString trEnumerationValues() - { return "Valores da enumerao"; } + { return "Valores da enumeração"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ QCString trDefineDocumentation() - { return "Documentao das macros"; } + { return "Documentação das macros"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ QCString trFunctionPrototypeDocumentation() - { return "Documentao dos prottipos de funes"; } + { return "Documentação dos protótipos de funções"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ QCString trTypedefDocumentation() - { return "Documentao dos tipos"; } + { return "Documentação dos tipos"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ QCString trEnumerationTypeDocumentation() - { return "Documentao dos valores da enumerao"; } - - /*! This is used in the documentation of a file/namespace before the list - * of documentation blocks for enumeration values - */ - QCString trEnumerationValueDocumentation() - { return "Documentao dos elementos da enumerao"; } + { return "Documentação dos valores da enumeração"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ QCString trFunctionDocumentation() - { return "Documentao das funes"; } + { return "Documentação das funções"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ QCString trVariableDocumentation() - { return "Documentao das variveis"; } + { return "Documentação das variáveis"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds @@ -533,29 +525,20 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! this text is put before a class diagram */ QCString trClassDiagram(const char *clName) { - return (QCString)"Diagrama de heranas da classe "+clName; + return (QCString)"Diagrama de heranças da classe "+clName; } /*! this text is generated when the \\internal command is used. */ QCString trForInternalUseOnly() { return "Apenas para uso interno."; } - /*! this text is generated when the \\reimp command is used. */ - QCString trReimplementedForInternalReasons() - { return "Redefinido por razes internas; A interface no foi afectada."; - } - /*! this text is generated when the \\warning command is used. */ QCString trWarning() { return "Aviso"; } - /*! this text is generated when the \\bug command is used. */ - QCString trBugsAndLimitations() - { return "Bugs e limitaes"; } - /*! this text is generated when the \\version command is used. */ QCString trVersion() - { return "Verso"; } + { return "Versão"; } /*! this text is generated when the \\date command is used. */ QCString trDate() @@ -567,15 +550,15 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! this text is generated when the \\sa command is used. */ QCString trSeeAlso() - { return "Veja tambm"; } + { return "Veja também"; } /*! this text is generated when the \\param command is used. */ QCString trParameters() - { return "Parmetros"; } + { return "Parâmetros"; } /*! this text is generated when the \\exception command is used. */ QCString trExceptions() - { return "Excepes"; } + { return "Excepções"; } /*! this text is used in the title page of a LaTeX document. */ QCString trGeneratedBy() @@ -593,8 +576,8 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 virtual QCString trNamespaceListDescription(bool extractAll) { QCString result="Lista "; - if (!extractAll) result+="de toda a documentao "; - result+="dos namespaces com uma breve descrio:"; + if (!extractAll) result+="de toda a documentação "; + result+="dos namespaces com uma breve descrição:"; return result; } @@ -612,7 +595,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "Documentao das classes amigas e funes relacionadas"; } + { return "Documentação das classes amigas e funções relacionadas"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -623,16 +606,16 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 ClassDef::CompoundType compType, bool isTemplate) { - QCString result="Referncia "; + QCString result="Referência "; switch(compType) { - case ClassDef::Class: result+=" classe "; break; - case ClassDef::Struct: result+=" estrutura "; break; - case ClassDef::Union: result+=" unio "; break; + case ClassDef::Class: result+="à classe "; break; + case ClassDef::Struct: result+="à estrutura "; break; + case ClassDef::Union: result+="à união "; break; case ClassDef::Interface: result+="ao interface "; break; - case ClassDef::Protocol: result+="protocol "; break; // translate me! - case ClassDef::Category: result+="category "; break; // translate me! - case ClassDef::Exception: result+=" excepo "; break; + case ClassDef::Protocol: result+="ao protocolo "; break; + case ClassDef::Category: result+="à categoria "; break; + case ClassDef::Exception: result+="à excepção "; break; } if (isTemplate) result+="Template "; result+=(QCString)clName; @@ -642,7 +625,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! used as the title of the HTML page of a file */ virtual QCString trFileReference(const char *fileName) { - QCString result= "Referncia ao ficheiro "; + QCString result= "Referência ao ficheiro "; result += fileName; return result; } @@ -650,32 +633,32 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! used as the title of the HTML page of a namespace */ virtual QCString trNamespaceReference(const char *namespaceName) { - QCString result= "Referncia ao namespace "; + QCString result= "Referência ao namespace "; result += namespaceName; return result; } /* these are for the member sections of a class, struct or union */ virtual QCString trPublicMembers() - { return "Membros pblicos"; } + { return "Membros públicos"; } virtual QCString trPublicSlots() - { return "Slots pblicos"; } + { return "Slots públicos"; } virtual QCString trSignals() { return "Sinais"; } virtual QCString trStaticPublicMembers() - { return "Membros pblicos estticos"; } + { return "Membros públicos estáticos"; } virtual QCString trProtectedMembers() { return "Membros protegidos"; } virtual QCString trProtectedSlots() { return "Slots protegidos"; } virtual QCString trStaticProtectedMembers() - { return "Membros protegidos estticos"; } + { return "Membros protegidos estáticos"; } virtual QCString trPrivateMembers() { return "Membros privados"; } virtual QCString trPrivateSlots() { return "Slots privados"; } virtual QCString trStaticPrivateMembers() - { return "Membros privados estticos"; } + { return "Membros 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. @@ -743,10 +726,10 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 { QCString result="Lista "; if (extractAll) result+="de todos os "; - else result+="de toda a documentao dos "; - result+="membros do namespace com referncia para "; + else result+="de toda a documentação dos "; + result+="membros do namespace com referência para "; if (extractAll) - result+="a documentao de cada membro:"; + result+="a documentação de cada membro:"; else result+="o namespace correspondente:"; return result; @@ -756,13 +739,13 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 * index of all namespaces. */ virtual QCString trNamespaceIndex() - { return "ndice dos namespaces"; } + { return "Índice dos namespaces"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ virtual QCString trNamespaceDocumentation() - { return "Documentao dos namespaces"; } + { return "Documentação dos namespaces"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -785,16 +768,16 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"A documentao para "; + QCString result=(QCString)"A documentação para "; switch(compType) { case ClassDef::Class: result+="esta classe"; break; case ClassDef::Struct: result+="esta estrutura"; break; - case ClassDef::Union: result+="esta unio"; break; + case ClassDef::Union: result+="esta união"; break; case ClassDef::Interface: result+="este interface"; break; - case ClassDef::Protocol: result+="protocol"; break; // translate me! - case ClassDef::Category: result+="category"; break; // translate me! - case ClassDef::Exception: result+="esta excepo"; break; + case ClassDef::Protocol: result+="este protocolo"; break; + case ClassDef::Category: result+="esta categoria"; break; + case ClassDef::Exception: result+="esta excepção"; break; } result+=" foi gerada a partir "; if (single) result+=" do seguinte ficheiro:"; @@ -807,7 +790,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 */ virtual QCString trAlphabeticalList() { - return "Lista alfabtica"; + return "Lista alfabética"; } @@ -822,7 +805,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "Pgina 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. @@ -834,10 +817,6 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 // new since 0.49-991003 ////////////////////////////////////////////////////////////////////////// - virtual QCString trSources() - { - return "Fontes"; - } virtual QCString trDefinedAtLineInSourceFile() { return "Definido na linha @0 do ficheiro @1."; @@ -863,37 +842,37 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)"Diagrama de colaborao 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)"Diagrama de dependncias de incluso para "+fName+":"; + return (QCString)"Diagrama de dependências de inclusão para "+fName+":"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "Documentao dos Construtores & Destrutor"; + return "Documentação dos Construtores & Destrutor"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "Ir para o cdigo fonte deste ficheiro."; + return "Ir para o código fonte deste ficheiro."; } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "Ir para a documentao deste ficheiro."; + return "Ir para a documentação deste ficheiro."; } /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "Precondio"; + return "Precondição"; } /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "Poscondio"; + return "Poscondição"; } /*! Text for the \\invariant command */ virtual QCString trInvariant() @@ -908,23 +887,23 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! Text used the source code in the file index */ virtual QCString trCode() { - return "cdigo"; + return "código"; } virtual QCString trGraphicalHierarchy() { - return "Representao grfica da hiearquia da classe"; + return "Representação gráfica da hiearquia da classe"; } virtual QCString trGotoGraphicalHierarchy() { - return "Ir para a representao grfica da hierarquia da classe"; + return "Ir para a representação gráfica da hierarquia da classe"; } virtual QCString trGotoTextualHierarchy() { - return "Ir para a representao textual da hierarquia da classe"; + return "Ir para a representação textual da hierarquia da classe"; } virtual QCString trPageIndex() { - return "ndice da pgina"; + return "Índice da página"; } ////////////////////////////////////////////////////////////////////////// @@ -937,7 +916,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 } virtual QCString trPublicTypes() { - return "Tipos Pblicos"; + return "Tipos Públicos"; } virtual QCString trPublicAttribs() { @@ -947,12 +926,12 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 } else { - return "Atributos Pblicos"; + return "Atributos Públicos"; } } virtual QCString trStaticPublicAttribs() { - return "Atributos Pblicos Estticos"; + return "Atributos Públicos Estáticos"; } virtual QCString trProtectedTypes() { @@ -964,7 +943,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 } virtual QCString trStaticProtectedAttribs() { - return "Atributos Protegidos Estticos"; + return "Atributos Protegidos Estáticos"; } virtual QCString trPrivateTypes() { @@ -976,7 +955,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 } virtual QCString trStaticPrivateAttribs() { - return "Atributos Privados Estticos"; + return "Atributos Privados Estáticos"; } ////////////////////////////////////////////////////////////////////////// @@ -1004,15 +983,15 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 } virtual QCString trRemarks() { - return "Observaes"; + return "Observações"; } virtual QCString trAttention() { - return "Ateno"; + return "Atenção"; } virtual QCString trInclByDepGraph() { - return "Este grafo mostra quais so os ficheiros que incluem directamente ou indirectamente este ficheiro:"; + return "Este grafo mostra quais são os ficheiros que incluem directamente ou indirectamente este ficheiro:"; } virtual QCString trSince() { @@ -1032,26 +1011,26 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 virtual QCString trLegendDocs() { return - "Esta pgina 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" - "/*! Esta classe vai estar escondida devido truncao */\n" + "/*! Esta classe vai estar escondida devido à truncação */\n" "class Invisible { };\n\n" - "/*! Esta classe tem a relao de herana escondida */\n" + "/*! Esta classe tem a relação de herança escondida */\n" "class Truncated : public Invisible { };\n\n" - "/* Classe no documentada por comentrios doxygen */\n" + "/* Classe não documentada por comentários doxygen */\n" "class Undocumented { };\n\n" - "/*! Classe derivada usando derivao pblica */\n" + "/*! Classe derivada usando derivação pública */\n" "class PublicBase : public Truncated { };\n\n" "/*! A template class */\n" "template<class T> class Templ { };\n\n" - "/*! Classe derivada usando derivao protegida */\n" + "/*! Classe derivada usando derivação protegida */\n" "class ProtectedBase { };\n\n" - "/*! Classe derivada usando derivao privada */\n" + "/*! Classe derivada usando derivação privada */\n" "class PrivateBase { };\n\n" "/*! Classe usada pela classe Inherited */\n" "class Used { };\n\n" - "/*! Super classe que deriva de vrias classes */\n" + "/*! Super classe que deriva de várias classes */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -1062,29 +1041,28 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "Se no ficheiro de configurao estiver a tag \\c MAX_DOT_GRAPH_HEIGHT " - "com o valor de 200 ento o seguinte grafo ser gerado:" + "Isto irá gerar o seguinte gráfo:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" - "As caixas no grafo anterior tm as seguintes interpretaes:\n" + "As caixas no grafo anterior têm as seguintes interpretações:\n" "<ul>\n" "<li>Uma caixa inteiramente preta representa a estrutura ou a classe para " "a qual o grafo foi gerado.\n" "<li>Uma caixa com borda preta representa uma estrutura ou classe documentada.\n" - "<li>Uma caixa com borda cinzenta representa uma estrutura ou classe no documentada.\n" + "<li>Uma caixa com borda cinzenta representa uma estrutura ou classe não documentada.\n" "<li>Uma caixa com borda vermelha representa uma estrutura ou classe documentada onde " - "nem todas as relaes de herana/encapsulamento so exibidas. Um grafo truncado " - "quando no cabe na sua rea predefinida.\n" + "nem todas as relações de herança/encapsulamento são exibidas. Um grafo é truncado " + "quando não cabe na sua área predefinida.\n" "</ul>\n" - "As setas tm a seguinte interpretao:\n" + "As setas têm a seguinte interpretação:\n" "<ul>\n" - "<li>Uma seta azul escura representa uma relao de herana pblica entre duas classes.\n" - "<li>Uma seta verde escura representa uma relao de herana protegida.\n" - "<li>Uma seta vermelha escura representa uma relao de herana privada.\n" - "<li>Uma seta rocha em tracejado representa uma relao de encapsulamento ou uso por " - "parte de outra classe. A legenda da seta contm o nome da varivel ou variveis da " - "relao. A seta aponta da classe que estabelece a relao para a classe ou estrutura que " - " acessvel.\n" + "<li>Uma seta azul escura representa uma relação de herança pública entre duas classes.\n" + "<li>Uma seta verde escura representa uma relação de herança protegida.\n" + "<li>Uma seta vermelha escura representa uma relação de herança privada.\n" + "<li>Uma seta rocha em tracejado representa uma relação de encapsulamento ou uso por " + "parte de outra classe. A legenda da seta contém o nome da variável ou variáveis da " + "relação. A seta aponta da classe que estabelece a relação para a classe ou estrutura que " + "é acessível.\n" "</ul>\n"; } /*! text for the link to the legend page */ @@ -1115,7 +1093,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "Mtodos DCOP"; + return "Métodos DCOP"; } ////////////////////////////////////////////////////////////////////////// @@ -1130,18 +1108,13 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "Documentao das propriedades"; + return "Documentação das propriedades"; } ////////////////////////////////////////////////////////////////////////// // new since 1.2.4 ////////////////////////////////////////////////////////////////////////// - /*! Used for Java interfaces in the summary section of Java packages */ - virtual QCString trInterfaces() - { - return "Interfaces"; - } /*! Used for Java classes in the summary section of Java packages */ virtual QCString trClasses() { @@ -1167,18 +1140,13 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "Lista de pacotes com uma breve descrio (se disponvel):"; + return "Lista de pacotes com uma breve descrição (se disponível):"; } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() { return "Pacotes"; } - /*! Used as a chapter title for Latex & RTF output */ - virtual QCString trPackageDocumentation() - { - return "Documentao do pacote"; - } /*! Text shown before a multi-line define */ virtual QCString trDefineValue() { @@ -1246,7 +1214,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return "ndice"; + return "Índice"; } /*! This is used for translation of the word that will possibly @@ -1299,7 +1267,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 */ virtual QCString trPage(bool first_capital, bool singular) { - QCString result((first_capital ? "Pgina" : "pgina")); + QCString result((first_capital ? "Página" : "página")); if (!singular) result+="s"; return result; } @@ -1319,17 +1287,6 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 * be followed by a single name or by a list of names * of the category. */ - virtual QCString trField(bool first_capital, bool singular) - { - QCString result((first_capital ? "Campo" : "campo")); - 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 trGlobal(bool first_capital, bool singular) { QCString result((first_capital ? "Globa" : "globa")); @@ -1358,7 +1315,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 */ virtual QCString trReferences() { - return "Referncias"; + return "Referências"; } ////////////////////////////////////////////////////////////////////////// @@ -1390,7 +1347,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 */ virtual QCString trRTFTableOfContents() { - return "ndice"; + return "Índice"; } ////////////////////////////////////////////////////////////////////////// @@ -1419,7 +1376,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { - return "Documentao dos eventos"; + return "Documentação dos eventos"; } ////////////////////////////////////////////////////////////////////////// @@ -1437,14 +1394,14 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 */ virtual QCString trPackageMembers() { - return "Funes do Pacote"; + return "Funções do Pacote"; } /*! Used as a heading for a list of static Java class functions with * package scope. */ virtual QCString trStaticPackageMembers() { - return "Funes Estticas do Pacote"; + return "Funções Estáticas do Pacote"; } /*! Used as a heading for a list of Java class variables with package * scope. @@ -1458,7 +1415,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 */ virtual QCString trStaticPackageAttribs() { - return "Atributos Estticos do Pacote"; + return "Atributos Estáticos do Pacote"; } ////////////////////////////////////////////////////////////////////////// @@ -1475,9 +1432,460 @@ class TranslatorPortuguese : public TranslatorAdapter_1_3_3 /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "Grafo de chamadas desta funo:"; + return "Grafo de chamadas desta função:"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.3 - Based on the Brazilian Portuguese Translation +////////////////////////////////////////////////////////////////////////// + + /*! 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 "Procurar por"; + } + /*! This string is used as the title for the page listing the search + * results. + */ + virtual QCString trSearchResultsTitle() + { + return "Resultado da Busca"; + } + /*! 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 "Nenhum documento foi encontrado."; + } + else if (numDocuments==1) + { + return "Apenas <b>1</b> documento foi encontrado."; + } + else + { + return "<b>$num</b> documentos encontrados. " + "Os melhores resultados vem primeiro."; + } + } + /*! 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 "Resultados:"; + } + +////////////////////////////////////////////////////////////////////////// +// 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 "Código-Fonte de " + filename; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.3.9 +////////////////////////////////////////////////////////////////////////// + + /*! This is used as the name of the chapter containing the directory + * hierarchy. + */ + virtual QCString trDirIndex() + { 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"; } + + /*! 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"; } + + /*! 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)"; } + + /*! 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 "; + 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 ? "Diretório" : "diretório")); + if (!singular) result+="s"; + 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 "Este é um método provido por conveniência. " + "Ele difere do método acima apenas na lista de " + "argumentos que devem ser utilizados."; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.4.6 +////////////////////////////////////////////////////////////////////////// + + /*! This is used to introduce a caller (or called-by) graph */ + virtual QCString trCallerGraph() + { + return "Este é o diagrama das funções que utilizam 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"; } + + +////////////////////////////////////////////////////////////////////////// +// 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 ficheiro:"; + else + result+="s seguintes ficheiros:"; + + 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 trTypeConstraints() + { + return "Restrições do Tipo"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name + */ + virtual QCString trDirRelation(const char *name) + { + return "Relação " + QCString(name); + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "Carregando..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "Namespace global"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "Procurando..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "Nenhuma entrada encontrada"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.6.3 (missing items for the directory pages) +////////////////////////////////////////////////////////////////////////// + + /*! introduction text for the directory dependency graph */ + virtual QCString trDirDependency(const char *name) + { + return (QCString)"Grafo de dependência de diretórios para " + name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the first column mentions the + * source file that has a relation to another file. + */ + virtual QCString trFileIn(const char *name) + { + return (QCString)"Ficheiro em "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the second column mentions the + * destination file that is included. + */ + virtual QCString trIncludesFileIn(const char *name) + { + return (QCString)"Inclui ficheiro em "+name; + } + + /** Compiles a date string. + * @param year Year in 4 digits + * @param month Month of the year: 1=January + * @param day Day of the Month: 1..31 + * @param dayOfWeek Day of the week: 1=Monday..7=Sunday + * @param hour Hour of the day: 0..23 + * @param minutes Minutes in the hour: 0..59 + * @param seconds Seconds within the minute: 0..59 + * @param includeTime Include time in the result string? + */ + virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, + int hour,int minutes,int seconds, + bool includeTime) + { + static const char *days[] = { "Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo" }; + static const char *months[] = { "Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro" }; + QCString sdate; + sdate.sprintf("%s, %d de %s de %d",days[dayOfWeek-1],day,months[month-1],year); + if (includeTime) + { + QCString stime; + stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds); + sdate+=stime; + } + return sdate; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Referências Bibliográficas"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { + // Note: I will left it as is because "Direitos de autor" may not fit + // in the text. + return "Copyright"; } + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Grafo de dependências do directório ")+name+":"; } }; #endif diff --git a/src/translator_sk.h b/src/translator_sk.h index 675963e..1f29b2c 100644 --- a/src/translator_sk.h +++ b/src/translator_sk.h @@ -17,6 +17,7 @@ // Updates: // -------- +// 2011/07/28 - Updates for "new since 1.7.5". // 2010/06/04 - big leap from 1.2.18 to 1.6.3+ // // Slovak translation started by Stanislav Kudlac (skudlac at pobox dot sk). @@ -28,7 +29,7 @@ #ifndef TRANSLATOR_SK_H #define TRANSLATOR_SK_H -class TranslatorSlovak : public TranslatorAdapter_1_7_5 +class TranslatorSlovak : public Translator { public: // --- Language control methods ------------------- @@ -1831,6 +1832,23 @@ class TranslatorSlovak : public TranslatorAdapter_1_7_5 return sdate; } +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "Odkazy na literatúru"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Graf závislosti na priečinkoch pre ")+name+":"; } + + }; #endif // TRANSLATOR_SK_H diff --git a/src/translator_tw.h b/src/translator_tw.h index 8f8c973..19a873f 100644 --- a/src/translator_tw.h +++ b/src/translator_tw.h @@ -41,7 +41,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 +class TranslatorChinesetraditional : public Translator { public: @@ -85,82 +85,82 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() - { return "禡"; } + { return "相關函式"; } /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { return "(GoǤO禡)"; } + { return "(註:這些不是成員函式)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { return "ԲӴyz"; } + { return "詳細描述"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { return "Awq"; } + { return "型態定義成員說明文件"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { return "C|A"; } + { return "列舉型態成員說明文件"; } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { return "禡"; } + { return "函式成員說明文件"; } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "컡"; + return "欄位說明文件"; } else { - return "Ʀ"; + return "資料成員說明文件"; } } /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() - { return "h..."; } + { return "更多..."; } /*! put in the class documentation */ virtual QCString trListOfAllMembers() - { return "C"; } + { return "全部成員列表"; } /*! used as the title of the "list of all members" page of a class */ virtual QCString trMemberList() - { return "C"; } + { return "成員列表"; } /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { return "㦨CAO"; } + { return "完整成員列表,類別為"; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() - { return ", ]tҦ~Ӫ"; } + { 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+=" lX۰ʲ."; + { 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 "C|AW"; } + { return "列舉型態名稱"; } /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { return "C|"; } + { return "列舉值"; } /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() - { return "Qwq"; } + { return "被定義於"; } // quick reference sections @@ -168,39 +168,39 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * compounds or files (see the \\group command). */ virtual QCString trModules() - { return "Ҳ"; } + { return "模組"; } /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() - { return "Oh"; } + { 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 "Ƶc"; + return "資料結構"; } else { - return "ƦXC"; + return "複合列表"; } } /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() - { return "ɮצC"; } + { 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 ""; + return "資料欄位"; } else { - return "ƦX"; + return "複合成員"; } } @@ -209,37 +209,37 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return ""; + return "全域資料"; } else { - return "ɮצ"; + return "檔案成員"; } } /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { return ""; } + { return "相關頁面"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() - { return "d"; } + { return "範例"; } /*! This is put above each page as a link to the search engine. */ virtual QCString trSearch() - { return "jM"; } + { return "搜尋"; } /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { return "o~ӦCgL²rƧ: "; + { return "這個繼承列表經過簡略的字母排序: "; } /*! This is an introduction to the list with all files. */ virtual QCString trFileListDescription(bool extractAll) { - QCString result="oOa²"; - if (!extractAll) result+="BgL"; - result+="ɮצC:"; + QCString result="這是附帶簡略說明"; + if (!extractAll) result+="且經過文件化"; + result+="的檔案列表:"; return result; } @@ -249,52 +249,52 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "oOa²Ƶc:"; + return "這是附帶簡略說明的資料結構:"; } else { - return "oOa²OAcA" - "pXA(unions)Τ(interfaces):"; + return "這是附帶簡略說明的類別,結構," + "聯合型態(unions)及介面(interfaces):"; } } /*! This is an introduction to the page with all class members. */ virtual QCString trCompoundMembersDescription(bool extractAll) { - QCString result="oO"; + QCString result="這是全部"; if (!extractAll) { - result+="ƹL"; + result+="文件化過"; } if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="cpXA"; + result+="結構及聯合型態欄位"; } else { - result+="O"; + result+="類別成員"; } - result+=", åBas"; + result+=", 並且帶有連結至"; if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="C쪺c/pXA:"; + result+="每個欄位的結構/聯合型態說明文件:"; } else { - result+="CӦO:"; + result+="每個成員的類別說明文件:"; } } else { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="oǵc/pXA:"; + result+="這些結構/聯合型態所屬:"; } else { - result+="oO:"; + result+="這些類別所屬:"; } } return result; @@ -303,55 +303,55 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! This is an introduction to the page with all file members. */ virtual QCString trFileMembersDescription(bool extractAll) { - QCString result="oO"; - if (!extractAll) result+="ƪ"; + QCString result="這是全部"; + if (!extractAll) result+="文件化的"; if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="禡AܼơAwqAC|AΫAwq"; + result+="函式,變數,定義,列舉,及型態定義"; } else { - result+="ɮצ"; + result+="檔案成員"; } - result+="AåBas"; + result+=",並且帶有連結至"; if (extractAll) - result+="oɮש:"; + result+="這些檔案所屬:"; else - result+=":"; + result+="說明文件:"; return result; } /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() - { return "ҦdҦC:"; } + { return "所有範例列表:"; } /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { return "ҦC:"; } + { return "所有相關文件頁面列表:"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { return "ҦҲզC:"; } + { 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 ""; } + { return "說明文件"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ virtual QCString trModuleIndex() - { return "Ҳկ"; } + { return "模組索引"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ virtual QCString trHierarchicalIndex() - { return "h"; } + { return "階層索引"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. @@ -360,11 +360,11 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Ƶc"; + return "資料結構索引"; } else { - return "ƦX"; + return "複合索引"; } } @@ -372,13 +372,13 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * list of all files. */ virtual QCString trFileIndex() - { return "ɮׯ"; } + { return "檔案索引"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ virtual QCString trModuleDocumentation() - { return "Ҳջ"; } + { return "模組說明文件"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. @@ -387,11 +387,11 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Ƶc"; + return "資料結構說明文件"; } else { - return "O"; + return "類別說明文件"; } } @@ -399,107 +399,107 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * the documentation of all files. */ virtual QCString trFileDocumentation() - { return "ɮ"; } + { return "檔案說明文件"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ virtual QCString trExampleDocumentation() - { return "dһ"; } + { return "範例說明文件"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ virtual QCString trPageDocumentation() - { return ""; } + { return "頁面說明文件"; } /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() - { return "ѦҤU"; } + { return "參考手冊"; } /*! This is used in the documentation of a file as a header before the * list of defines */ virtual QCString trDefines() - { return "wq"; } + { return "定義"; } /*! This is used in the documentation of a file as a header before the * list of function prototypes */ virtual QCString trFuncProtos() - { return "禡쫬"; } + { return "函式原型"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() - { return "Awq"; } + { return "型態定義"; } /*! This is used in the documentation of a file as a header before the * list of enumerations */ virtual QCString trEnumerations() - { return "C|A"; } + { return "列舉型態"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ virtual QCString trFunctions() - { return "禡"; } + { return "函式"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trVariables() - { return "ܼ"; } + { return "變數"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trEnumerationValues() - { return "C|"; } + { return "列舉值"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { return "wq"; } + { return "定義巨集說明文件"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ virtual QCString trFunctionPrototypeDocumentation() - { return "禡쫬"; } + { return "函式原型說明文件"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { return "Awq"; } + { return "型態定義說明文件"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types */ virtual QCString trEnumerationTypeDocumentation() - { return "C|A"; } + { return "列舉型態說明文件"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration values */ virtual QCString trEnumerationValueDocumentation() - { return "C|Ȼ"; } + { return "列舉值說明文件"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() - { return "禡"; } + { return "函式說明文件"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ virtual QCString trVariableDocumentation() - { return "ܼƻ"; } + { return "變數說明文件"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds @@ -508,11 +508,11 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Ƶc"; + return "資料結構"; } else { - return "ƦX"; + return "複合項目"; } } @@ -521,59 +521,59 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trGeneratedAt(const char *date,const char *projName) { - QCString result=(QCString)"ͤ:"+date; - if (projName) result+=(QCString)", M:"+projName; - result+=(QCString)", ;:"; + 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 "gH:"; + return "撰寫人:"; } /*! this text is put before a class diagram */ virtual QCString trClassDiagram(const char *clName) { - return (QCString)"O"+clName+"~ӹ:"; + return (QCString)"類別"+clName+"的繼承圖:"; } /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() - { return "ȨѤϥ."; } + { return "僅供內部使用."; } /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() - { return "ĵi"; } + { return "警告"; } /*! this text is generated when the \\version command is used. */ virtual QCString trVersion() - { return ""; } + { return "版本"; } /*! this text is generated when the \\date command is used. */ virtual QCString trDate() - { return ""; } + { return "日期"; } /*! this text is generated when the \\return command is used. */ virtual QCString trReturns() - { return "Ǧ^"; } + { return "傳回值"; } /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() - { return "Ѿ\\"; } + { return "參閱"; } /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() - { return "Ѽ"; } + { return "參數"; } /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() - { return "ҥ~"; } + { return "例外"; } /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() - { return "ͪ:"; } + { return "產生者:"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 @@ -581,14 +581,14 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() - { return "RWŶ(name space)C"; } + { return "命名空間(name space)列表"; } /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) { - QCString result="oOҦa²"; - if (!extractAll) result+="ƪ"; - result+="RWŶ(namespaces):"; + QCString result="這是所有附帶簡略說明的"; + if (!extractAll) result+="文件化的"; + result+="命名空間(namespaces):"; return result; } @@ -596,7 +596,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * friends of a class */ virtual QCString trFriends() - { return "OB(Friends)"; } + { return "類別朋友(Friends)"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 @@ -606,7 +606,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * related classes */ virtual QCString trRelatedFunctionDocumentation() - { return "OBͤά禡"; } + { return "類別朋友及相關函式說明文件"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -620,16 +620,16 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 QCString result=(QCString)clName+" "; switch(compType) { - case ClassDef::Class: result+=" O"; break; - case ClassDef::Struct: result+=" c"; break; - case ClassDef::Union: result+=" pX"; break; - case ClassDef::Interface: result+=" "; break; - case ClassDef::Protocol: result+=" w"; break; - case ClassDef::Category: result+=" "; break; - case ClassDef::Exception: result+=" ҥ~"; break; + 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+=" ѦҤ"; + if (isTemplate) result+=" 樣版"; + result+=" 參考文件"; return result; } @@ -637,7 +637,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trFileReference(const char *fileName) { QCString result=fileName; - result+=" ɮװѦҤ"; + result+=" 檔案參考文件"; return result; } @@ -645,30 +645,30 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trNamespaceReference(const char *namespaceName) { QCString result=namespaceName; - result+=" RWŶ(Namespace)ѦҤ"; + result+=" 命名空間(Namespace)參考文件"; return result; } virtual QCString trPublicMembers() - { return "}k(Public Methods)"; } + { return "公開方法(Public Methods)"; } virtual QCString trPublicSlots() - { return "}(Public Slots)"; } + { return "公開插槽(Public Slots)"; } virtual QCString trSignals() - { return "T(Signals)"; } + { return "訊號(Signals)"; } virtual QCString trStaticPublicMembers() - { return "RA}k(Static Public Methods)"; } + { return "靜態公開方法(Static Public Methods)"; } virtual QCString trProtectedMembers() - { return "O@k(Protected Methods)"; } + { return "保護方法(Protected Methods)"; } virtual QCString trProtectedSlots() - { return "O@(Protected Slots)"; } + { return "保護插槽(Protected Slots)"; } virtual QCString trStaticProtectedMembers() - { return "RAO@k(Static Protected Methods)"; } + { return "靜態保護方法(Static Protected Methods)"; } virtual QCString trPrivateMembers() - { return "pk(Private Methods)"; } + { return "私有方法(Private Methods)"; } virtual QCString trPrivateSlots() - { return "p(Private Slots)"; } + { return "私有插槽(Private Slots)"; } virtual QCString trStaticPrivateMembers() - { return "RApk(Static Private Methods)"; } + { return "靜態私有方法(Static Private Methods)"; } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -689,7 +689,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 if (i<numEntries-2) // not the fore last entry result+=", "; else // the fore last entry - result+=", "; + result+=", 及 "; } } return result; @@ -700,7 +700,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trInheritsList(int numEntries) { - return "~Ӧ "+trWriteList(numEntries)+"."; + return "繼承自 "+trWriteList(numEntries)+"."; } /*! used in class documentation to produce a list of super classes, @@ -708,7 +708,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trInheritedByList(int numEntries) { - return "Q "+trWriteList(numEntries)+"~."; + return "被 "+trWriteList(numEntries)+"繼承."; } /*! used in member documentation blocks to produce a list of @@ -716,7 +716,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trReimplementedFromList(int numEntries) { - return "̾"+trWriteList(numEntries)+"s@."; + return "依據"+trWriteList(numEntries)+"重新實作."; } /*! used in member documentation blocks to produce a list of @@ -724,36 +724,36 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trReimplementedInList(int numEntries) { - return "b"+trWriteList(numEntries)+"s@."; + return "在"+trWriteList(numEntries)+"重新實作."; } /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() - { return "RWŶ(Namespace)"; } + { return "命名空間(Namespace)成員"; } /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { - QCString result="BCҦ "; - if (!extractAll) result+="ƪ "; - result+="RWŶ(namespace)AåBas "; + QCString result="此處列表為所有 "; + if (!extractAll) result+="文件化的 "; + result+="命名空間(namespace)成員,並且附帶連結至 "; if (extractAll) - result+="CӦ:"; + result+="每個成員的說明文件:"; else - result+="өRWŶݤB:"; + result+="該命名空間所屬之處:"; return result; } /*! This is used in LaTeX as the title of the chapter with the * index of all namespaces. */ virtual QCString trNamespaceIndex() - { return "RWŶ(Namespace)"; } + { return "命名空間(Namespace)索引"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ virtual QCString trNamespaceDocumentation() - { return "RWŶ(Namespace)"; } + { return "命名空間(Namespace)說明文件"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -763,7 +763,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * namespaces in a file. */ virtual QCString trNamespaces() - { return "RWŶ(Namespaces)"; } + { return "命名空間(Namespaces)"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990728 @@ -776,18 +776,18 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 bool single) { // here s is one of " Class", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)""; + QCString result=(QCString)"此"; switch(compType) { - case ClassDef::Class: result+="O(class)"; break; - case ClassDef::Struct: result+="c(structure)"; break; - case ClassDef::Union: result+="pX(union)"; break; - case ClassDef::Interface: result+="(interface)"; break; - case ClassDef::Protocol: result+="w(protocol)"; break; - case ClassDef::Category: result+="(category)"; break; - case ClassDef::Exception: result+="ҥ~(exception)"; break; + case ClassDef::Class: result+="類別(class)"; break; + case ClassDef::Struct: result+="結構(structure)"; break; + case ClassDef::Union: result+="聯合(union)"; break; + case ClassDef::Interface: result+="介面(interface)"; break; + case ClassDef::Protocol: result+="協定(protocol)"; break; + case ClassDef::Category: result+="分類(category)"; break; + case ClassDef::Exception: result+="例外(exception)"; break; } - result+=" OѤUCɮפ"; + result+=" 文件是由下列檔案中產生"; if (single) result+=":"; else result+=":"; return result; } @@ -796,7 +796,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * list. */ virtual QCString trAlphabeticalList() - { return "rǦC"; } + { return "字母順序列表"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -804,12 +804,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! This is used as the heading text for the retval command. */ virtual QCString trReturnValues() - { return "Ǧ^"; } + { return "傳回值"; } /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { return "D"; } + { return "主頁面"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. @@ -823,11 +823,11 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trDefinedAtLineInSourceFile() { - return "wqb @1 ɮפ @0 ."; + return "定義在 @1 檔案之第 @0 行."; } virtual QCString trDefinedInSourceFile() { - return "wqb @0 ."; + return "定義在 @0 檔."; } ////////////////////////////////////////////////////////////////////////// @@ -836,7 +836,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trDeprecated() { - return "L"; + return "過時"; } ////////////////////////////////////////////////////////////////////////// @@ -846,68 +846,68 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! this text is put before a collaboration diagram */ virtual QCString trCollaborationDiagram(const char *clName) { - return (QCString)""+clName+"X@:"; + return (QCString)""+clName+"的合作圖:"; } /*! this text is put before an include dependency graph */ virtual QCString trInclDepGraph(const char *fName) { - return (QCString)""+fName+"]t̹ۨ:"; + return (QCString)""+fName+"的包含相依圖:"; } /*! header that is put before the list of constructor/destructors. */ virtual QCString trConstructorDocumentation() { - return "غclPѺcl"; + return "建構子與解構子說明文件"; } /*! Used in the file documentation to point to the corresponding sources. */ virtual QCString trGotoSourceCode() { - return "dݥɮתlX."; + return "查看本檔案的原始碼."; } /*! Used in the file sources to point to the corresponding documentation. */ virtual QCString trGotoDocumentation() { - return "dݥɮ."; + return "查看本檔案說明文件."; } /*! Text for the \\pre command */ virtual QCString trPrecondition() { - return "em"; + return "前置條件"; } /*! Text for the \\post command */ virtual QCString trPostcondition() { - return "m"; + return "後置條件"; } /*! Text for the \\invariant command */ virtual QCString trInvariant() { - return "`"; + return "常數"; } /*! Text shown before a multi-line variable/enum initialization */ virtual QCString trInitialValue() { - return ":"; + return "初值:"; } /*! Text used the source code in the file index */ virtual QCString trCode() { - return "{X"; + return "程式碼"; } virtual QCString trGraphicalHierarchy() { - return "ϧΤƤOh"; + return "圖形化之類別階層"; } virtual QCString trGotoGraphicalHierarchy() { - return "dݹϧΤƤOh"; + return "查看圖形化之類別階層"; } virtual QCString trGotoTextualHierarchy() { - return "dݤrƤOh"; + return "查看文字化之類別階層"; } virtual QCString trPageIndex() { - return ""; + return "頁面索引"; } ////////////////////////////////////////////////////////////////////////// @@ -916,50 +916,50 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trNote() { - return ""; + return "註"; } virtual QCString trPublicTypes() { - return "}A"; + return "公開型態"; } virtual QCString trPublicAttribs() { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return ""; + return "資料欄位"; } else { - return "}ݩ"; + return "公開屬性"; } } virtual QCString trStaticPublicAttribs() { - return "RA}ݩ"; + return "靜態公開屬性"; } virtual QCString trProtectedTypes() { - return "O@A"; + return "保護型態"; } virtual QCString trProtectedAttribs() { - return "O@ݩ"; + return "保護屬性"; } virtual QCString trStaticProtectedAttribs() { - return "RAO@ݩ"; + return "靜態保護屬性"; } virtual QCString trPrivateTypes() { - return "pA"; + return "私有型態"; } virtual QCString trPrivateAttribs() { - return "pݩ"; + return "私有屬性"; } virtual QCString trStaticPrivateAttribs() { - return "RApݩ"; + return "靜態私有屬性"; } ////////////////////////////////////////////////////////////////////////// @@ -969,12 +969,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Used as a marker that is put before a \\todo item */ virtual QCString trTodo() { - return "ݿƶ"; + return "待辦事項"; } /*! Used as the header of the todo list */ virtual QCString trTodoList() { - return "ݿƶC"; + return "待辦事項列表"; } ////////////////////////////////////////////////////////////////////////// @@ -983,24 +983,24 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trReferencedBy() { - return "QѦҩ"; + return "被參考於"; } virtual QCString trRemarks() { - return "Ƶ"; + return "備註"; } virtual QCString trAttention() { - return "`N"; + return "注意"; } virtual QCString trInclByDepGraph() { - return "ܥXɮתζinclude " + return "本圖顯示出哪些檔案直接或間接include本檔 " ":"; } virtual QCString trSince() { - return ""; + return "自"; } ////////////////////////////////////////////////////////////////////////// @@ -1010,7 +1010,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! title of the graph legend page */ virtual QCString trLegendTitle() { - return "ϥ"; + 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". @@ -1018,27 +1018,27 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 virtual QCString trLegendDocs() { return - "pĶoǥdoxygenҲͪϥ " + "本頁解釋如何解譯這些由doxygen所產生的圖示 " ".<p>\n" - "ЬݤUd:\n" + "請看下面範例:\n" "\\code\n" - "/*! ]I_iO */\n" + "/*! 因為截斷的不可見類別 */\n" "class Invisible { };\n\n" - "/*! I_O, ~YQ */\n" + "/*! 截斷的類別, 繼承關係被隱藏 */\n" "class Truncated : public Invisible { };\n\n" - "/* gLdoxygenѳBzLO */\n" + "/* 未經過doxygen註解處理過的類別 */\n" "class Undocumented { };\n\n" - "/*! gL}(Public)~ӪO */\n" + "/*! 經過公開(Public)繼承的類別 */\n" "class PublicBase : public Truncated { };\n\n" - "/*! @Ӽ˪O */\n" + "/*! 一個樣版類別 */\n" "template<class T> class Templ { };\n\n" - "/*! ϥΫO@(Protected)~ӪO */\n" + "/*! 使用保護(Protected)繼承的類別 */\n" "class ProtectedBase { };\n\n" - "/*! ϥΨp(Private)~ӪO */\n" + "/*! 使用私有(Private)繼承的類別 */\n" "class PrivateBase { };\n\n" - "/*! ѳQ~OҨϥΪO */\n" + "/*! 由被繼承類別所使用的類別 */\n" "class Used { };\n\n" - "/*! ѼƭӨLO~ӨӪWO(Super Class) */\n" + "/*! 由數個其他類別所繼承來的超類別(Super Class) */\n" "class Inherited : public PublicBase,\n" " protected ProtectedBase,\n" " private PrivateBase,\n" @@ -1049,38 +1049,38 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 " Used *m_usedClass;\n" "};\n" "\\endcode\n" - "YbպAɤ \\c MAX_DOT_GRAPH_HEIGHT tag " - "] 240AN|ͤUCϥ:" + "若在組態檔中的 \\c MAX_DOT_GRAPH_HEIGHT tag " + "設為 240,將會產生下列的圖示:" "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n" "<p>\n" - "WϤU϶NqpU:\n" + "上圖中的各區塊意義如下:\n" "<ul>\n" - "<li>%A ¦⪺϶NͳoӹϥܪOεc " + "<li>%A 填滿黑色的區塊代表產生這個圖示的類別或結構 " ".\n" - "<li>%A 䪺϶NƹLcO.\n" - "<li>%A 䪺϶NgƪcάOO.\n" - "<li>%A 䪺϶NƪcάOOA" - "oǵcO~өΥ]tY|. %A ϥ " - "YLkJwɤN|QI_.\n" + "<li>%A 黑邊的區塊代表文件化過的結構或類別.\n" + "<li>%A 灰邊的區塊代表未經文件化的結構或是類別.\n" + "<li>%A 紅邊的區塊代表文件化的結構或是類別," + "這些結構或類別的繼承或包含關係不會全部顯示. %A 圖示 " + "若無法塞入指定的邊界中將會被截斷.\n" "</ul>\n" - "bY㦳UNq:\n" + "箭頭具有下面的意義:\n" "<ul>\n" - "<li>%A `ŦbYΨӥNO}~ " - "Y.\n" - "<li>%A `bYNO@~.\n" - "<li>%A `bYNp~.\n" - "<li>%A bYΨӪOQt@ӥ]tάOϥ." - "bYWХܵۥisOάOcܼ" + "<li>%A 深藍色箭頭用來代表兩個類別間的公開繼承 " + "關係.\n" + "<li>%A 深綠色箭頭代表保護繼承.\n" + "<li>%A 深紅色箭頭代表私有繼承.\n" + "<li>%A 紫色箭頭用來表示類別被另一個包含或是使用." + "箭頭上標示著可存取該類別或是結構的對應變數" ".\n" - "<li>%A bYN˪P˪OYC" - "bYWаOۼ˪WѼ" + "<li>%A 黃色箭頭代表樣版實體與樣版類別之間的關係。" + "箭頭上標記著樣版實體上的參數" ".\n" "</ul>\n"; } /*! text for the link to the legend page */ virtual QCString trLegend() { - return "ϥ"; + return "圖示"; } ////////////////////////////////////////////////////////////////////////// @@ -1090,12 +1090,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Used as a marker that is put before a test item */ virtual QCString trTest() { - return "ն"; + return "測試項目"; } /*! Used as the header of the test list */ virtual QCString trTestList() { - return "նئC"; + return "測試項目列表"; } ////////////////////////////////////////////////////////////////////////// @@ -1105,7 +1105,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Used as a section header for KDE-2 IDL methods */ virtual QCString trDCOPMethods() { - return "DCOPk"; + return "DCOP方法"; } ////////////////////////////////////////////////////////////////////////// @@ -1115,12 +1115,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Used as a section header for IDL properties */ virtual QCString trProperties() { - return "ݩ(properties)"; + return "屬性(properties)"; } /*! Used as a section header for IDL property documentation */ virtual QCString trPropertyDocumentation() { - return "ݩ(property)"; + return "屬性(property)說明文件"; } ////////////////////////////////////////////////////////////////////////// @@ -1132,11 +1132,11 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Ƶc"; + return "資料結構"; } else { - return "O"; + return "類別"; } } /*! Used as the title of a Java package */ @@ -1147,12 +1147,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Title of the package index page */ virtual QCString trPackageList() { - return "PackageC"; + return "Package列表"; } /*! The description of the package index page */ virtual QCString trPackageListDescription() { - return "BPackage(pG):"; + return "此處為Package的概略說明(如果有的話):"; } /*! The link name in the Quick links header for each page */ virtual QCString trPackages() @@ -1163,7 +1163,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Text shown before a multi-line define */ virtual QCString trDefineValue() { - return "e:"; + return "巨集內容:"; } ////////////////////////////////////////////////////////////////////////// @@ -1173,12 +1173,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Used as a marker that is put before a \\bug item */ virtual QCString trBug() { - return ""; + return "臭蟲"; } /*! Used as the header of the bug list */ virtual QCString trBugList() { - return "ΦC"; + return "臭蟲列表"; } ////////////////////////////////////////////////////////////////////////// @@ -1227,7 +1227,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Used as header RTF general index */ virtual QCString trRTFGeneralIndex() { - return ""; + return "索引"; } /*! This is used for translation of the word that will possibly @@ -1236,7 +1236,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trClass(bool /*first_capital*/, bool /*singular*/) { - return QCString("O"); + return QCString("類別"); } /*! This is used for translation of the word that will possibly @@ -1245,7 +1245,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trFile(bool /*first_capital*/, bool /*singular*/) { - return QCString("ɮ"); + return QCString("檔案"); } /*! This is used for translation of the word that will possibly @@ -1254,7 +1254,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trNamespace(bool /*first_capital*/, bool /*singular*/) { - return QCString("RWŶ"); + return QCString("命名空間"); } /*! This is used for translation of the word that will possibly @@ -1263,7 +1263,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trGroup(bool /*first_capital*/, bool /*singular*/) { - return QCString("s"); + return QCString("群組"); } /*! This is used for translation of the word that will possibly @@ -1272,7 +1272,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trPage(bool /*first_capital*/, bool /*singular*/) { - return QCString(""); + return QCString("頁面"); } /*! This is used for translation of the word that will possibly @@ -1281,7 +1281,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trMember(bool /*first_capital*/, bool /*singular*/) { - return QCString(""); + return QCString("成員"); } /*! This is used for translation of the word that will possibly @@ -1290,7 +1290,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trGlobal(bool /*first_capital*/, bool /*singular*/) { - return QCString(""); + return QCString("全域"); } ////////////////////////////////////////////////////////////////////////// @@ -1301,7 +1301,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * for the author section in man pages. */ virtual QCString trAuthor(bool /*first_capital*/, bool /*singular*/) { - return QCString("@"); + return QCString("作者"); } ////////////////////////////////////////////////////////////////////////// @@ -1312,7 +1312,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trReferences() { - return "Ѧ"; + return "參考"; } ////////////////////////////////////////////////////////////////////////// @@ -1324,7 +1324,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trImplementedFromList(int numEntries) { - return "@ "+trWriteList(numEntries)+"."; + return "實作 "+trWriteList(numEntries)+"."; } /*! used in member documentation blocks to produce a list of @@ -1332,7 +1332,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trImplementedInList(int numEntries) { - return "@ "+trWriteList(numEntries)+"."; + return "實作於 "+trWriteList(numEntries)+"."; } ////////////////////////////////////////////////////////////////////////// @@ -1344,7 +1344,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trRTFTableOfContents() { - return "ؿ"; + return "目錄"; } ////////////////////////////////////////////////////////////////////////// @@ -1356,7 +1356,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trDeprecatedList() { - return "Lɶ(Deprecated) C"; + return "過時項目(Deprecated) 列表"; } ////////////////////////////////////////////////////////////////////////// @@ -1373,7 +1373,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! Header used for the documentation section of a class' events. */ virtual QCString trEventDocumentation() { - return "Event "; + return "Event 文件"; } ////////////////////////////////////////////////////////////////////////// @@ -1384,35 +1384,35 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trPackageTypes() { - return "Package O"; + return "Package 型別"; } /*! Used as a heading for a list of Java class functions with package * scope. */ virtual QCString trPackageMembers() { - return "Package ƦC"; + return "Package 函數列表"; } /*! Used as a heading for a list of static Java class functions with * package scope. */ virtual QCString trStaticPackageMembers() { - return "RA Package ƦC"; + return "靜態 Package 函數列表"; } /*! Used as a heading for a list of Java class variables with package * scope. */ virtual QCString trPackageAttribs() { - return "Package ݩ"; + return "Package 屬性"; } /*! Used as a heading for a list of static Java class variables with * package scope. */ virtual QCString trStaticPackageAttribs() { - return "RA Package ݩ"; + return "靜態 Package 屬性"; } ////////////////////////////////////////////////////////////////////////// @@ -1424,12 +1424,12 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trAll() { - return ""; + return "全部"; } /*! Put in front of the call graph for a function. */ virtual QCString trCallGraph() { - return "oOƪޥΨƹ:"; + return "這是此函數的引用函數圖:"; } ////////////////////////////////////////////////////////////////////////// @@ -1442,14 +1442,14 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trSearchForIndex() { - return "jM"; + return "搜尋索引"; } /*! This string is used as the title for the page listing the search * results. */ virtual QCString trSearchResultsTitle() { - return "jMG"; + return "搜尋結果"; } /*! This string is put just before listing the search results. The * text can be different depending on the number of documents found. @@ -1463,16 +1463,16 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 { if (numDocuments==0) { - return "䤣ŦX."; + return "找不到符合的資料."; } else if (numDocuments==1) { - return " <b>1</b> ŦX."; + return "找到 <b>1</b> 筆符合的資料."; } else { - return " <b>$num</b> ŦX. " - "VŦXGܦbVe."; + return "找到 <b>$num</b> 筆符合的資料. " + "越符合的結果顯示在越前面."; } } /*! This string is put before the list of matched words, for each search @@ -1480,7 +1480,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trSearchMatches() { - return "ŦX:"; + return "符合:"; } ////////////////////////////////////////////////////////////////////////// @@ -1491,7 +1491,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trSourceFile(QCString& filename) { - return filename + " l{"; + return filename + " 原始程式檔"; } ////////////////////////////////////////////////////////////////////////// @@ -1502,39 +1502,39 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * hierarchy. */ virtual QCString trDirIndex() - { return "ؿh"; } + { return "目錄階層"; } /*! This is used as the name of the chapter containing the documentation * of the directories. */ virtual QCString trDirDocumentation() - { return "ؿ"; } + { return "目錄說明文件"; } /*! 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 "ؿ"; } + { return "目錄"; } /*! This returns a sentences that introduces the directory hierarchy. * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { return "oӥؿhgL²rƧ: "; + { 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=dirName; result+=" ؿѦҤ"; return result; } + { QCString result=dirName; result+=" 目錄參考文件"; 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*/) { - return QCString("ؿ"); + return QCString("目錄"); } ////////////////////////////////////////////////////////////////////////// @@ -1546,8 +1546,8 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trOverloadText() { - return "oO@ӬFKQʩҴ overload ơA" - "ubѼƤWAPe@ӨƤP."; + return "這是一個為了便利性所提供 overload 成員函數," + "只有在接受的參數上,與前一個函數不同."; } ////////////////////////////////////////////////////////////////////////// // new since 1.4.6 @@ -1556,7 +1556,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "IsƪƦC:"; + return "呼叫此函數的函數列表:"; } @@ -1566,37 +1566,37 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 /*! header that is put before the list of member subprograms (Fortran). */ virtual QCString trMemberFunctionDocumentationFortran() - { return "/l{ "; } + { return "成員函數/子程序 文件"; } /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() - { return "ƫAC"; } + { return "資料型態列表"; } /*! This is put above each page as a link to all members of compounds (Fortran). */ virtual QCString trCompoundMembersFortran() - { return ""; } + { return "資料欄位"; } /*! This is an introduction to the annotated compound list (Fortran). */ virtual QCString trCompoundListDescriptionFortran() - { return "ƫA²uC:"; } + { return "資料型態簡短說明列表:"; } /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) { - QCString result="BCXҦ"; + QCString result="此處列出所有"; if (!extractAll) { - result+=""; + result+="有文件的"; } - result+="ƫO"; - result+=" as "; + result+="資料型別成員函數"; + result+=" 附帶連結到 "; if (!extractAll) { - result+="CӦƪƵc"; + result+="每個成員函數的資料結構文件"; } else { - result+="LݩƫO"; + result+="他們屬於的資料型別"; } return result; } @@ -1605,42 +1605,42 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * annotated compound index (Fortran). */ virtual QCString trCompoundIndexFortran() - { return "ƫO"; } + { return "資料型別索引"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all data types (Fortran). */ virtual QCString trTypeDocumentation() - { return "ƫO"; } + { return "資料型別文件"; } /*! This is used in the documentation of a file as a header before the * list of (global) subprograms (Fortran). */ virtual QCString trSubprograms() - { return "/l{"; } + { return "函數/子程序"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for subprograms (Fortran) */ virtual QCString trSubprogramDocumentation() - { return "/l{ "; } + { 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 "ƫO"; } + { return "資料型別"; } /*! used as the title of page containing all the index of all modules (Fortran). */ virtual QCString trModulesList() - { return "ҲզC"; } + { return "模組列表"; } /*! used as an introduction to the modules list (Fortran) */ virtual QCString trModulesListDescription(bool extractAll) { - QCString result="BCXҦ"; - if (!extractAll) result+=""; - result+="Ҳժa²u:"; + QCString result="此處列出所有"; + if (!extractAll) result+="有文件的"; + result+="模組附帶簡短說明:"; return result; } @@ -1652,43 +1652,43 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 QCString result=(QCString)clName; switch(compType) { - case ClassDef::Class: result+="Ҳ"; break; - case ClassDef::Struct: result+="A"; break; - case ClassDef::Union: result+="pX"; break; - case ClassDef::Interface: result+=""; break; - case ClassDef::Protocol: result+="ij"; break; - case ClassDef::Category: result+=""; break; - case ClassDef::Exception: result+="ҥ~"; break; + 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+=" Template"; - 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+="ҲհѦҤ"; + result+="模組參考文件"; return result; } /*! This is put above each page as a link to all members of modules. (Fortran) */ virtual QCString trModulesMembers() - { return "Ҳզ"; } + { return "模組成員"; } /*! This is an introduction to the page with all modules members (Fortran) */ virtual QCString trModulesMemberDescription(bool extractAll) { - QCString result="BCXҦ"; - if (!extractAll) result+=""; - result+="Ҳզas"; + QCString result="此處列出所有"; + if (!extractAll) result+="有文件的"; + result+="模組成員附帶連結到"; if (extractAll) { - result+="CӨƪҲդ:"; + result+="每個函數的模組文件:"; } else { - result+="L̩ݪҲ:"; + result+="他們所屬的模組:"; } return result; } @@ -1697,7 +1697,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 * index of all modules (Fortran). */ virtual QCString trModulesIndex() - { return "Ҳկ"; } + { return "模組索引"; } /*! This is used for translation of the word that will possibly * be followed by a single name or by a list of names @@ -1705,7 +1705,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trModule(bool /* first_capital */, bool /* singular */) { - QCString result("Ҳ"); + QCString result("模組"); return result; } /*! This is put at the bottom of a module documentation page and is @@ -1715,18 +1715,18 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 bool /* single */) { // here s is one of " Module", " Struct" or " Union" // single is true implies a single file - QCString result=(QCString)"o"; + QCString result=(QCString)"這個"; switch(compType) { - case ClassDef::Class: result+="Ҳ"; break; - case ClassDef::Struct: result+="A"; break; - case ClassDef::Union: result+="pX"; break; - case ClassDef::Interface: result+=""; break; - case ClassDef::Protocol: result+="ij"; break; - case ClassDef::Category: result+=""; break; - case ClassDef::Exception: result+="ҥ~"; break; + 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+="ѤUCɮײ"; + result+="文件由下列檔案產生"; return result; } /*! This is used for translation of the word that will possibly @@ -1735,7 +1735,7 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trType(bool /* first_capital */, bool /* singular */) { - QCString result("O"); + QCString result("型別"); return result; } /*! This is used for translation of the word that will possibly @@ -1744,15 +1744,120 @@ class TranslatorChinesetraditional : public TranslatorAdapter_1_6_0 */ virtual QCString trSubprogram(bool /* first_capital */, bool /* singular */) { - QCString result("l{"); + QCString result("子程式"); return result; } /*! C# Type Constraint list */ virtual QCString trTypeConstraints() { - return "O"; + return "型別限制條件"; } + +////////////////////////////////////////////////////////////////////////// +// new since 1.6.0 (mainly for the new search engine) +////////////////////////////////////////////////////////////////////////// + + /*! directory relation for \a name */ + virtual QCString trDirRelation(const char *name) + { + return QCString(name)+" 關連"; + } + + /*! Loading message shown when loading search results */ + virtual QCString trLoading() + { + return "載入中..."; + } + + /*! Label used for search results in the global namespace */ + virtual QCString trGlobalNamespace() + { + return "全域命名空間"; + } + + /*! Message shown while searching */ + virtual QCString trSearching() + { + return "搜尋中..."; + } + + /*! Text shown when no search results are found */ + virtual QCString trNoMatches() + { + return "無符合項目"; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.6.3 (missing items for the directory pages) +////////////////////////////////////////////////////////////////////////// + + /*! introduction text for the directory dependency graph */ + virtual QCString trDirDependency(const char *name) + { + return (QCString)name+"的目錄關連圖"; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the first column mentions the + * source file that has a relation to another file. + */ + virtual QCString trFileIn(const char *name) + { + return (QCString)"檔案在"+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the second column mentions the + * destination file that is included. + */ + virtual QCString trIncludesFileIn(const char *name) + { + return (QCString)"含入檔案在"+name; + } + + /** Compiles a date string. + * @param year Year in 4 digits + * @param month Month of the year: 1=January + * @param day Day of the Month: 1..31 + * @param dayOfWeek Day of the week: 1=Monday..7=Sunday + * @param hour Hour of the day: 0..23 + * @param minutes Minutes in the hour: 0..59 + * @param seconds Seconds within the minute: 0..59 + * @param includeTime Include time in the result string? + */ + virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, + int hour,int minutes,int seconds, + bool includeTime) + { + static const char *days[] = { "星期一","星期二","星期三","星期四","星期五","星期六","星期日" }; + static const char *months[] = { "1","2","3","4","5","6","7","8","9","10","11","12" }; + QCString sdate; + sdate.sprintf("%d年%s月%d日 %s",year,months[month-1],day,days[dayOfWeek-1]); + if (includeTime) + { + QCString stime; + stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds); + sdate+=stime; + } + return sdate; + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.7.5 +////////////////////////////////////////////////////////////////////////// + + /*! Header for the page with bibliographic citations */ + virtual QCString trCiteReferences() + { return "參考文獻資料"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "版權聲明"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString(name)+"的目錄關連圖"+":"; } }; diff --git a/src/util.cpp b/src/util.cpp index 12399cc..3ecdfb6 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -309,12 +309,15 @@ int guessSection(const char *name) n.right(4)==".cpp" || n.right(4)==".c++" || n.right(5)==".java" || + n.right(2)==".m" || + n.right(2)==".M" || + n.right(3)==".mm" || n.right(3)==".ii" || // inline n.right(4)==".ixx" || n.right(4)==".ipp" || n.right(4)==".i++" || n.right(4)==".inl" || - n.right(4)==".xml" + n.right(4)==".xml" ) return Entry::SOURCE_SEC; if (n.right(2)==".h" || // header n.right(3)==".hh" || @@ -1475,7 +1478,7 @@ ClassDef *getResolvedClass(Definition *scope, (scope->definitionType()!=Definition::TypeClass && scope->definitionType()!=Definition::TypeNamespace ) || - (fileScope && fileScope->isJava() && QCString(n).find("::")!=-1) + (scope->getLanguage()==SrcLangExt_Java && QCString(n).find("::")!=-1) ) { scope=Doxygen::globalScope; @@ -3716,15 +3719,16 @@ bool getDefs(const QCString &scName,const QCString &memberName, if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */ QCString scopeName=scName; + scopeName = substitute(scopeName,"\\","::"); // for PHP //printf("Search for name=%s args=%s in scope=%s forceEmpty=%d\n", // memberName.data(),args,scopeName.data(),forceEmptyScope); int is,im=0,pm=0; // strip common part of the scope from the scopeName while ((is=scopeName.findRev("::"))!=-1 && - (im=memberName.find("::",pm))!=-1 && - (scopeName.right(scopeName.length()-is-2)==memberName.mid(pm,im-pm)) - ) + (im=memberName.find("::",pm))!=-1 && + (scopeName.right(scopeName.length()-is-2)==memberName.mid(pm,im-pm)) + ) { scopeName=scopeName.left(is); pm=im+2; @@ -4300,9 +4304,9 @@ bool resolveRef(/* in */ const char *scName, return FALSE; } -QCString linkToText(const char *link,bool isFileName) +QCString linkToText(SrcLangExt lang,const char *link,bool isFileName) { - static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); + //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); QCString result=link; if (!result.isEmpty()) { @@ -4315,9 +4319,10 @@ QCString linkToText(const char *link,bool isFileName) { result=result.right(result.length()-2); } - if (optimizeOutputJava) + QCString sep = getLanguageSpecificSeparator(lang); + if (sep!="::") { - result=substitute(result,"::","."); + result=substitute(result,"::",sep); } } return result; @@ -4499,7 +4504,7 @@ bool generateLink(OutputDocInterface &od,const char *clName, //printf("generateLink(clName=%s,lr=%s,lr=%s)\n",clName,lr,lt); Definition *compound; //PageDef *pageDef=0; - QCString anchor,linkText=linkToText(lt,FALSE); + QCString anchor,linkText=linkToText(SrcLangExt_Unknown,lt,FALSE); //printf("generateLink linkText=%s\n",linkText.data()); if (resolveLink(clName,lr,inSeeBlock,&compound,anchor)) { @@ -4513,7 +4518,7 @@ bool generateLink(OutputDocInterface &od,const char *clName, } else if (compound->definitionType()==Definition::TypeFile) { - linkText=linkToText(lt,TRUE); + linkText=linkToText(compound->getLanguage(),lt,TRUE); } od.writeObjectLink(compound->getReference(), compound->getOutputFileBase(),anchor,linkText); @@ -4830,6 +4835,7 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor case ')': strBuf.addStr("_08"); break; case '+': strBuf.addStr("_09"); break; case '=': strBuf.addStr("_0A"); break; + case '$': strBuf.addStr("_0B"); break; default: if (c<0) { @@ -5273,6 +5279,7 @@ QCString convertToJSString(const char *s) switch (c) { case '"': strBuf.addStr("\\\""); break; + case '\\': strBuf.addStr("\\\\"); break; default: strBuf.addChar(c); break; } } @@ -5489,7 +5496,7 @@ int extractClassNameFromType(const QCString &type,int &pos,QCString &name,QCStri static const QRegExp re_ftn("[a-z_A-Z\\x80-\\xFF][()=_a-z_A-Z0-9:\\x80-\\xFF]*"); QRegExp re; - if (lang == SrcLangExt_F90) + if (lang == SrcLangExt_Fortran) { if (type.at(pos)==',') return -1; if (type.left(4).lower()=="type") @@ -5981,9 +5988,11 @@ void addGroupListToTitle(OutputList &ol,Definition *d) } void filterLatexString(FTextStream &t,const char *str, - bool insideTabbing,bool insidePre,bool insideItem,bool forceBreaks) + bool insideTabbing,bool insidePre,bool insideItem) { if (str==0) return; + //printf("filterLatexString(%s)\n",str); + //if (strlen(str)<2) stackTrace(); const unsigned char *p=(const unsigned char *)str; unsigned char c; unsigned char pc='\0'; @@ -6013,7 +6022,8 @@ void filterLatexString(FTextStream &t,const char *str, case '^': t << "$^\\wedge$"; break; case '&': t << "\\&"; break; case '*': t << "$\\ast$"; break; - case '_': t << "\\_"; + case '_': if (!insideTabbing) t << "\\-"; + t << "\\_"; if (!insideTabbing) t << "\\-"; break; case '{': t << "\\{"; break; @@ -6046,7 +6056,10 @@ void filterLatexString(FTextStream &t,const char *str, break; default: - if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ') + //if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ') + if (!insideTabbing && + ((c>='A' && c<='Z' && pc!=' ') || (c==':' && pc!=':') || (pc=='.' && isId(c))) + ) { t << "\\-"; } @@ -6239,25 +6252,25 @@ static struct Lang2ExtMap g_lang2extMap[] = { // language parser parser option - { "idl", "c", SrcLangExt_IDL }, - { "java", "c", SrcLangExt_Java }, - { "javascript", "c", SrcLangExt_JS }, - { "csharp", "c", SrcLangExt_CSharp }, - { "d", "c", SrcLangExt_D }, - { "php", "c", SrcLangExt_PHP }, - { "objective-c", "c", SrcLangExt_ObjC }, - { "c", "c", SrcLangExt_Cpp }, - { "c++", "c", SrcLangExt_Cpp }, - { "python", "python", SrcLangExt_Python }, - { "fortran", "fortran", SrcLangExt_F90 }, - { "vhdl", "vhdl", SrcLangExt_VHDL }, - { "dbusxml", "dbusxml", SrcLangExt_XML }, - { 0, 0, (SrcLangExt)0 } + { "idl", "c", SrcLangExt_IDL }, + { "java", "c", SrcLangExt_Java }, + { "javascript", "c", SrcLangExt_JS }, + { "csharp", "c", SrcLangExt_CSharp }, + { "d", "c", SrcLangExt_D }, + { "php", "c", SrcLangExt_PHP }, + { "objective-c", "c", SrcLangExt_ObjC }, + { "c", "c", SrcLangExt_Cpp }, + { "c++", "c", SrcLangExt_Cpp }, + { "python", "python", SrcLangExt_Python }, + { "fortran", "fortran", SrcLangExt_Fortran }, + { "vhdl", "vhdl", SrcLangExt_VHDL }, + { "dbusxml", "dbusxml", SrcLangExt_XML }, + { "tcl", "tcl", SrcLangExt_Tcl }, + { 0, 0, (SrcLangExt)0 } }; bool updateLanguageMapping(const QCString &extension,const QCString &language) { - //getLanguageFromFileName("dummy"); // force initialization of the g_extLookup map const Lang2ExtMap *p = g_lang2extMap; QCString langName = language.lower(); while (p->langName) @@ -6316,6 +6329,7 @@ void initDefaultExtensionMapping() updateLanguageMapping(".f90", "fortran"); updateLanguageMapping(".vhd", "vhdl"); updateLanguageMapping(".vhdl", "vhdl"); + updateLanguageMapping(".tcl", "tcl"); //updateLanguageMapping(".xml", "dbusxml"); } @@ -6609,8 +6623,8 @@ static QCString replaceAliasArgument(const QCString &aliasValue,int paramNum, result = substitute(result,"\\{","{"); result = substitute(result,"\\}","}"); result = expandAliasRec(substitute(result,"\\,",",")); - printf("replaceAliasArgument('%s',%d,'%s')->%s\n", - aliasValue.data(),paramNum,paramValue.data(),result.data()); + //printf("replaceAliasArgument('%s',%d,'%s')->%s\n", + // aliasValue.data(),paramNum,paramValue.data(),result.data()); return result; } @@ -6820,7 +6834,7 @@ bool readInputFile(const char *fileName,BufStr &inBuf) } int start=0; - if (inBuf.size()>=2 && + if (size>=2 && ((inBuf.at(0)==-1 && inBuf.at(1)==-2) || // Litte endian BOM (inBuf.at(0)==-2 && inBuf.at(1)==-1) // big endian BOM ) @@ -6829,13 +6843,12 @@ bool readInputFile(const char *fileName,BufStr &inBuf) transcodeCharacterBuffer(fileName,inBuf,inBuf.curPos(), "UCS-2","UTF-8"); } - else if (inBuf.size()>=3 && + else if (size>=3 && (uchar)inBuf.at(0)==0xEF && (uchar)inBuf.at(1)==0xBB && (uchar)inBuf.at(2)==0xBF - ) + ) // UTF-8 encoded file { - // UTF-8 encoded file inBuf.dropFromStart(3); // remove UTF-8 BOM: no translation needed } else // transcode according to the INPUT_ENCODING setting @@ -6961,6 +6974,9 @@ QCString externalRef(const QCString &relPath,const QCString &ref,bool href) return result; } +/** Writes the intensity only bitmap representated by \a data as an image to + * directory \a dir using the colors defined by HTML_COLORSTYLE_*. + */ void writeColoredImgData(const char *dir,ColoredImgDataItem data[]) { static int hue = Config_getInt("HTML_COLORSTYLE_HUE"); @@ -6986,6 +7002,11 @@ void writeColoredImgData(const char *dir,ColoredImgDataItem data[]) } } +/** Replaces any markers of the form \#\#AA in input string \a str + * by new markers of the form \#AABBCC, where \#AABBCC represents a + * valid color, based on the intensity represented by hex number AA + * and the current HTML_COLORSTYLE_* settings. + */ QCString replaceColorMarkers(const char *str) { QCString result; @@ -7030,6 +7051,9 @@ QCString replaceColorMarkers(const char *str) return result; } +/** Copies the contents of file with name \a src to the newly created + * file with name \a dest. Returns TRUE if successful. + */ bool copyFile(const QCString &src,const QCString &dest) { QFile sf(src); @@ -7059,3 +7083,82 @@ bool copyFile(const QCString &src,const QCString &dest) return TRUE; } +/** Returns the section of text, in between a pair of markers. + * Full lines are returned, excluding the lines on which the markers appear. + */ +QCString extractBlock(const QCString text,const QCString marker) +{ + QCString result; + int p=0,i; + bool found=FALSE; + + // find the character positions of the markers + int m1 = text.find(marker); + if (m1==-1) return result; + int m2 = text.find(marker,m1+marker.length()); + if (m2==-1) return result; + + // find start and end line positions for the markers + int l1=-1,l2=-1; + while (!found && (i=text.find('\n',p))!=-1) + { + found = (p<=m1 && m1<i); // found the line with the start marker + p=i+1; + } + l1=p; + if (found) + { + while ((i=text.find('\n',p))!=-1) + { + if (p<=m2 && m2<i) // found the line with the end marker + { + l2=p; + break; + } + p=i+1; + } + } + //printf("text=[%s]\n",text.mid(l1,l2-l1).data()); + return text.mid(l1,l2-l1); +} + +/** Returns a string representation of \a lang. */ +QCString langToString(SrcLangExt lang) +{ + switch(lang) + { + case SrcLangExt_Unknown: return "Unknown"; + case SrcLangExt_IDL: return "IDL"; + case SrcLangExt_Java: return "Java"; + case SrcLangExt_CSharp: return "C#"; + case SrcLangExt_D: return "D"; + case SrcLangExt_PHP: return "PHP"; + case SrcLangExt_ObjC: return "Objective-C"; + case SrcLangExt_Cpp: return "C++"; + case SrcLangExt_JS: return "Javascript"; + case SrcLangExt_Python: return "Python"; + case SrcLangExt_Fortran: return "Fortran"; + case SrcLangExt_VHDL: return "VHDL"; + case SrcLangExt_XML: return "XML"; + case SrcLangExt_Tcl: return "Tcl"; + } + return "Unknown"; +} + +/** Returns the scope separator to use given the programming language \a lang */ +QCString getLanguageSpecificSeparator(SrcLangExt lang) +{ + if (lang==SrcLangExt_Java || lang==SrcLangExt_CSharp || lang==SrcLangExt_VHDL) + { + return "."; + } + else if (lang==SrcLangExt_PHP) + { + return "\\"; + } + else + { + return "::"; + } +} + @@ -99,11 +99,15 @@ enum SrcLangExt SrcLangExt_Cpp = 0x0200, SrcLangExt_JS = 0x0400, SrcLangExt_Python = 0x0800, - SrcLangExt_F90 = 0x1000, + SrcLangExt_Fortran = 0x1000, SrcLangExt_VHDL = 0x2000, - SrcLangExt_XML = 0x4000 + SrcLangExt_XML = 0x4000, + SrcLangExt_Tcl = 0x8000 }; +QCString langToString(SrcLangExt lang); +QCString getLanguageSpecificSeparator(SrcLangExt lang); + //-------------------------------------------------------------------- void linkifyText(const TextGeneratorIntf &ol, @@ -310,12 +314,11 @@ void addGroupListToTitle(OutputList &ol,Definition *d); void filterLatexString(FTextStream &t,const char *str, bool insideTabbing=FALSE, bool insidePre=FALSE, - bool insideItem=FALSE, - bool forceBreaks=FALSE); + bool insideItem=FALSE); QCString rtfFormatBmkStr(const char *name); -QCString linkToText(const char *link,bool isFileName); +QCString linkToText(SrcLangExt lang,const char *link,bool isFileName); QCString stripExtension(const char *fName); @@ -402,7 +405,9 @@ struct ColoredImgDataItem void writeColoredImgData(const char *dir,ColoredImgDataItem data[]); QCString replaceColorMarkers(const char *str); + bool copyFile(const QCString &src,const QCString &dest); +QCString extractBlock(const QCString text,const QCString marker); #endif diff --git a/src/vhdldocgen.cpp b/src/vhdldocgen.cpp index a87d53e..9646c42 100644 --- a/src/vhdldocgen.cpp +++ b/src/vhdldocgen.cpp @@ -209,12 +209,14 @@ ClassDef *VhdlDocGen::getClass(const char *name) void VhdlDocGen::computeVhdlComponentRelations() { ClassSDict::Iterator cli(*Doxygen::classSDict); - for (cli.toFirst();cli.current();++cli) + ClassDef *cd; + for (cli.toFirst();(cd=cli.current());++cli) { - cli.current()->visited=FALSE; - ClassDef * cd = cli.current(); - if ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS || - (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS) + if (cd->getLanguage()==SrcLangExt_VHDL && + ((VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::ARCHITECTURECLASS || + (VhdlDocGen::VhdlClasses)cd->protection()==VhdlDocGen::PACKBODYCLASS + ) + ) { QCString bName=cd->name(); int i=bName.find("::"); diff --git a/src/vhdlscanner.l b/src/vhdlscanner.l index a6966cd..5db595b 100644 --- a/src/vhdlscanner.l +++ b/src/vhdlscanner.l @@ -1672,6 +1672,7 @@ ENDPROTECEDBODY "end"{BR}+"protected"{BR}+"body"{BR}+{NAME} static void initEntry(Entry *e) { e->fileName = yyFileName; + e->lang = SrcLangExt_VHDL; initGroupInfo(e); } diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index cd6eba0..856d3d2 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -265,6 +265,17 @@ void XmlDocVisitor::visit(DocInclude *inc) filter(inc->text()); m_t << "</verbatim>"; break; + case DocInclude::Snippet: + m_t << "<programlisting>"; + Doxygen::parserManager->getParser(inc->extension()) + ->parseCode(m_ci, + inc->context(), + extractBlock(inc->text(),inc->blockId()), + inc->isExample(), + inc->exampleFile() + ); + m_t << "</programlisting>"; + break; } } diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index dd793f6..d4e8fef 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -1,8 +1,5 @@ /****************************************************************************** * - * - * - * * Copyright (C) 1997-2011 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its @@ -514,7 +511,7 @@ static void writeMemberReference(FTextStream &t,Definition *def,MemberDef *rmd,c QCString name = rmd->name(); if (!scope.isEmpty() && scope!=def->name()) { - name.prepend(scope+"::"); + name.prepend(scope+getLanguageSpecificSeparator(rmd->getLanguage())); } t << " <" << tagName << " refid=\""; t << rmd->getOutputFileBase() << "_1" << rmd->anchor() << "\""; |