summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2011-08-14 13:56:38 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2011-08-14 13:56:38 (GMT)
commit9e5aed6d58f0e33ca942f67daa49971d885b0110 (patch)
tree3138a0d18d53a00498b4cad59f934a4e64762cf8 /src
parent3426c85df5daa8d679bc2ed87740ccbc34d6346b (diff)
downloadDoxygen-9e5aed6d58f0e33ca942f67daa49971d885b0110.zip
Doxygen-9e5aed6d58f0e33ca942f67daa49971d885b0110.tar.gz
Doxygen-9e5aed6d58f0e33ca942f67daa49971d885b0110.tar.bz2
Release-1.7.5
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.in2
-rw-r--r--src/cite.cpp33
-rw-r--r--src/cite.h4
-rw-r--r--src/classdef.cpp215
-rw-r--r--src/classdef.h10
-rw-r--r--src/classlist.cpp23
-rw-r--r--src/cmdmapper.cpp3
-rw-r--r--src/cmdmapper.h1
-rw-r--r--src/code.l27
-rw-r--r--src/commentcnv.l10
-rw-r--r--src/config.l2
-rw-r--r--src/definition.cpp31
-rw-r--r--src/definition.h6
-rw-r--r--src/docparser.cpp88
-rw-r--r--src/docparser.h40
-rw-r--r--src/docsets.cpp12
-rw-r--r--src/doctokenizer.h1
-rw-r--r--src/doctokenizer.l13
-rw-r--r--src/dot.cpp127
-rw-r--r--src/doxygen.cpp368
-rw-r--r--src/filedef.cpp11
-rw-r--r--src/filedef.h8
-rw-r--r--src/fortranscanner.l73
-rw-r--r--src/groupdef.cpp35
-rw-r--r--src/htmldocvisitor.cpp19
-rw-r--r--src/htmlgen.cpp11
-rw-r--r--src/index.cpp42
-rw-r--r--src/language.cpp4
-rw-r--r--src/latexdocvisitor.cpp48
-rw-r--r--src/latexdocvisitor.h3
-rw-r--r--src/latexgen.cpp162
-rw-r--r--src/layout.cpp20
-rw-r--r--src/layout.h2
-rw-r--r--src/libdoxygen.pro.in7
-rw-r--r--src/libdoxygen.t3
-rw-r--r--src/mandocvisitor.cpp17
-rw-r--r--src/mangen.cpp2
-rw-r--r--src/marshal.cpp3
-rw-r--r--src/memberdef.cpp141
-rw-r--r--src/memberdef.h4
-rw-r--r--src/memberlist.cpp1
-rw-r--r--src/namespacedef.cpp50
-rw-r--r--src/namespacedef.h1
-rw-r--r--src/outputlist.cpp4
-rw-r--r--src/outputlist.h2
-rw-r--r--src/perlmodgen.cpp1
-rw-r--r--src/printdocvisitor.h1
-rw-r--r--src/pycode.l43
-rw-r--r--src/rtfdocvisitor.cpp17
-rw-r--r--src/rtfgen.cpp47
-rw-r--r--src/scanner.l59
-rw-r--r--src/sortdict.h18
-rw-r--r--src/store.cpp61
-rw-r--r--src/store.h1
-rw-r--r--src/tclscanner.h52
-rw-r--r--src/tclscanner.l2410
-rw-r--r--src/translator_adapter.h47
-rw-r--r--src/translator_am.h3688
-rw-r--r--src/translator_br.h24
-rw-r--r--src/translator_ca.h73
-rw-r--r--src/translator_cn.h646
-rw-r--r--src/translator_cz.h19
-rw-r--r--src/translator_de.h20
-rw-r--r--src/translator_dk.h22
-rw-r--r--src/translator_gr.h32
-rw-r--r--src/translator_hr.h17
-rw-r--r--src/translator_kr.h2
-rw-r--r--src/translator_nl.h16
-rw-r--r--src/translator_pt.h808
-rw-r--r--src/translator_sk.h20
-rw-r--r--src/translator_tw.h743
-rw-r--r--src/util.cpp175
-rw-r--r--src/util.h15
-rw-r--r--src/vhdldocgen.cpp12
-rw-r--r--src/vhdlscanner.l1
-rw-r--r--src/xmldocvisitor.cpp11
-rw-r--r--src/xmlgen.cpp5
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)
diff --git a/src/cite.h b/src/cite.h
index 62524a2..d290c9c 100644
--- a/src/cite.h
+++ b/src/cite.h
@@ -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
diff --git a/src/code.l b/src/code.l
index 733be82..0f8506a 100644
--- a/src/code.l
+++ b/src/code.l
@@ -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 "::";
+ }
+}
+
diff --git a/src/util.h b/src/util.h
index a6c1d76..dc783d1 100644
--- a/src/util.h
+++ b/src/util.h
@@ -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() << "\"";