summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-12-29 18:30:48 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-12-29 18:30:48 (GMT)
commitff11b7d98ad7d24770afd151aa6b439adc7506d2 (patch)
tree048517043e4c90dcc686bc038b480825fe32886c /src
parent414d7b3bbfad8ec16237c3708af188ecaee62886 (diff)
downloadDoxygen-ff11b7d98ad7d24770afd151aa6b439adc7506d2.zip
Doxygen-ff11b7d98ad7d24770afd151aa6b439adc7506d2.tar.gz
Doxygen-ff11b7d98ad7d24770afd151aa6b439adc7506d2.tar.bz2
Release-1.2.13
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp205
-rw-r--r--src/classdef.h8
-rw-r--r--src/code.l4
-rw-r--r--src/config.l77
-rw-r--r--src/defargs.l5
-rw-r--r--src/doc.l4
-rw-r--r--src/doxygen.cpp374
-rw-r--r--src/filedef.cpp2
-rw-r--r--src/groupdef.cpp2
-rw-r--r--src/htmlgen.h5
-rw-r--r--src/lang_cfg.h1
-rw-r--r--src/language.cpp16
-rw-r--r--src/latexgen.cpp34
-rw-r--r--src/latexgen.h5
-rw-r--r--src/libdoxygen.pro.in1
-rw-r--r--src/mangen.cpp1
-rw-r--r--src/mangen.h5
-rw-r--r--src/memberdef.cpp75
-rw-r--r--src/memberdef.h2
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/memberlist.cpp50
-rw-r--r--src/namespacedef.cpp2
-rw-r--r--src/outputgen.h5
-rw-r--r--src/outputlist.h9
-rw-r--r--src/rtfgen.h5
-rw-r--r--src/scanner.l67
-rw-r--r--src/tagreader.cpp6
-rw-r--r--src/translator_adapter.h248
-rw-r--r--src/translator_fi.h101
-rw-r--r--src/translator_gr.h1334
-rw-r--r--src/translator_se.h15
-rw-r--r--src/util.cpp79
-rw-r--r--src/util.h3
-rw-r--r--src/xmlgen.cpp302
34 files changed, 2266 insertions, 788 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 4b35855..eb46b38 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -87,23 +87,24 @@ ClassDef::ClassDef(
memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE);
m_innerClasses = new ClassSDict(17);
- //int i=name().findRev("::"); // TODO: broken if A<N::C> is the class name
- //if (i==-1)
- //{
- // m_scopelessName=name();
- //}
- //else
- //{
- // m_scopelessName=name().right(name().length()-i-2);
- //}
m_subGrouping=TRUE;
- //m_isTemplBaseClass=-1;
m_templateInstances = 0;
m_templateMaster =0;
m_templBaseClassNames = 0;
m_artificial = FALSE;
m_isAbstract = FALSE;
m_isStatic = FALSE;
+ m_membersMerged = FALSE;
+
+ if (((QCString)defFileName).right(5)!=".java" &&
+ guessSection(defFileName)==Entry::SOURCE_SEC)
+ {
+ m_isLocal=TRUE;
+ }
+ else
+ {
+ m_isLocal=FALSE;
+ }
}
// destroy the class definition
@@ -181,7 +182,10 @@ void ClassDef::addMembersToMemberGroup()
}
// adds new member definition to the class
-void ClassDef::insertMember(MemberDef *md)
+void ClassDef::internalInsertMember(MemberDef *md,
+ Protection prot,
+ bool addToAllList
+ )
{
//printf("adding %s::%s\n",name().data(),md->name().data());
if (!isReference())
@@ -190,7 +194,7 @@ void ClassDef::insertMember(MemberDef *md)
/* insert member in the declaration section */
/********************************************/
if (md->isRelated() &&
- (Config_getBool("EXTRACT_PRIVATE") || md->protection()!=Private))
+ (Config_getBool("EXTRACT_PRIVATE") || prot!=Private))
{
related.append(md);
md->setSectionList(&related);
@@ -217,7 +221,7 @@ void ClassDef::insertMember(MemberDef *md)
md->setSectionList(&properties);
break;
case MemberDef::Slot: // Qt specific
- switch (md->protection())
+ switch (prot)
{
case Protected:
proSlots.append(md);
@@ -238,7 +242,7 @@ void ClassDef::insertMember(MemberDef *md)
{
if (md->isVariable())
{
- switch (md->protection())
+ switch (prot)
{
case Protected:
proStaticAttribs.append(md);
@@ -256,7 +260,7 @@ void ClassDef::insertMember(MemberDef *md)
}
else // function
{
- switch (md->protection())
+ switch (prot)
{
case Protected:
proStaticMembers.append(md);
@@ -277,7 +281,7 @@ void ClassDef::insertMember(MemberDef *md)
{
if (md->isVariable())
{
- switch (md->protection())
+ switch (prot)
{
case Protected:
proAttribs.append(md);
@@ -295,7 +299,7 @@ void ClassDef::insertMember(MemberDef *md)
}
else if (md->isTypedef() || md->isEnumerate() || md->isEnumValue())
{
- switch (md->protection())
+ switch (prot)
{
case Protected:
proTypes.append(md);
@@ -313,7 +317,7 @@ void ClassDef::insertMember(MemberDef *md)
}
else // member function
{
- switch (md->protection())
+ switch (prot)
{
case Protected:
proMembers.append(md);
@@ -338,7 +342,7 @@ void ClassDef::insertMember(MemberDef *md)
/* insert member in the detailed documentation section */
/*******************************************************/
if ((md->isRelated() &&
- (Config_getBool("EXTRACT_PRIVATE") || md->protection()!=Private)
+ (Config_getBool("EXTRACT_PRIVATE") || prot!=Private)
) || md->isFriend()
)
{
@@ -365,7 +369,7 @@ void ClassDef::insertMember(MemberDef *md)
functionMembers.append(md);
break;
case MemberDef::Slot:
- switch (md->protection())
+ switch (prot)
{
case Protected:
if (Config_getBool("SORT_MEMBER_DOCS"))
@@ -391,7 +395,7 @@ void ClassDef::insertMember(MemberDef *md)
}
break;
default: // any of the other members
- if (md->protection()!=Private || Config_getBool("EXTRACT_PRIVATE"))
+ if (prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
{
switch (md->memberType())
{
@@ -458,21 +462,28 @@ void ClassDef::insertMember(MemberDef *md)
m_isAbstract=TRUE;
}
- MemberInfo *mi = new MemberInfo((MemberDef *)md,
- md->protection(),md->virtualness(),FALSE);
- MemberNameInfo *mni=0;
- if ((mni=m_allMemberNameInfoSDict->find(md->name())))
- {
- mni->append(mi);
- }
- else
+ if (addToAllList)
{
- mni = new MemberNameInfo(md->name());
- mni->append(mi);
- m_allMemberNameInfoSDict->inSort(mni->memberName(),mni);
+ MemberInfo *mi = new MemberInfo((MemberDef *)md,
+ prot,md->virtualness(),FALSE);
+ MemberNameInfo *mni=0;
+ if ((mni=m_allMemberNameInfoSDict->find(md->name())))
+ {
+ mni->append(mi);
+ }
+ else
+ {
+ mni = new MemberNameInfo(md->name());
+ mni->append(mi);
+ m_allMemberNameInfoSDict->append(mni->memberName(),mni);
+ }
}
}
+void ClassDef::insertMember(MemberDef *md)
+{
+ internalInsertMember(md,md->protection(),TRUE);
+}
//void ClassDef::computeMemberGroups()
//{
@@ -498,29 +509,30 @@ void ClassDef::insertMember(MemberDef *md)
// compute the anchors for all members
void ClassDef::computeAnchors()
{
- setAnchors('a',&pubMembers);
- setAnchors('b',&proMembers);
- setAnchors('c',&priMembers);
- setAnchors('d',&pubStaticMembers);
- setAnchors('e',&proStaticMembers);
- setAnchors('f',&priStaticMembers);
- setAnchors('g',&pubSlots);
- setAnchors('h',&proSlots);
- setAnchors('i',&priSlots);
- setAnchors('j',&signals);
- setAnchors('k',&related);
- setAnchors('l',&friends);
- setAnchors('m',&pubAttribs);
- setAnchors('n',&proAttribs);
- setAnchors('o',&priAttribs);
- setAnchors('p',&pubStaticAttribs);
- setAnchors('q',&proStaticAttribs);
- setAnchors('r',&priStaticAttribs);
- setAnchors('s',&pubTypes);
- setAnchors('t',&proTypes);
- setAnchors('u',&priTypes);
- setAnchors('v',&dcopMethods);
- setAnchors('w',&properties);
+ ClassDef *context = Config_getBool("INLINE_INHERITED_MEMB") ? this : 0;
+ setAnchors(context,'a',&pubMembers);
+ setAnchors(context,'b',&proMembers);
+ setAnchors(context,'c',&priMembers);
+ setAnchors(context,'d',&pubStaticMembers);
+ setAnchors(context,'e',&proStaticMembers);
+ setAnchors(context,'f',&priStaticMembers);
+ setAnchors(context,'g',&pubSlots);
+ setAnchors(context,'h',&proSlots);
+ setAnchors(context,'i',&priSlots);
+ setAnchors(context,'j',&signals);
+ setAnchors(context,'k',&related);
+ setAnchors(context,'l',&friends);
+ setAnchors(context,'m',&pubAttribs);
+ setAnchors(context,'n',&proAttribs);
+ setAnchors(context,'o',&priAttribs);
+ setAnchors(context,'p',&pubStaticAttribs);
+ setAnchors(context,'q',&proStaticAttribs);
+ setAnchors(context,'r',&priStaticAttribs);
+ setAnchors(context,'s',&pubTypes);
+ setAnchors(context,'t',&proTypes);
+ setAnchors(context,'u',&priTypes);
+ setAnchors(context,'v',&dcopMethods);
+ setAnchors(context,'w',&properties);
}
void ClassDef::distributeMemberGroupDocumentation()
@@ -967,7 +979,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write link to list of all members (HTML only)
if (m_allMemberNameInfoSDict->count()>0 &&
- !Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ !Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
+ /* && !Config_getBool("INLINE_INHERITED_MEMB") */
+ )
{
ol.disableAllBut(OutputGenerator::Html);
ol.startTextLink(m_memListFileName,0);
@@ -1213,7 +1227,9 @@ void ClassDef::writeDocumentationForInnerClasses(OutputList &ol)
ClassDef *innerCd;
for (cli.toFirst();(innerCd=cli.current());++cli)
{
- if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0)
+ if (innerCd->isLinkableInProject() && innerCd->templateMaster()==0 &&
+ (innerCd->protection()!=Private || Config_getBool("EXTRACT_PRIVATE"))
+ )
{
msg("Generating docs for nested compound %s...\n",innerCd->name().data());
innerCd->writeDocumentation(ol);
@@ -1568,6 +1584,7 @@ bool ClassDef::isLinkableInProject() const
!m_artificial &&
name().find('@')==-1 && /* anonymous compound */
(m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */
+ (!m_isLocal || Config_getBool("EXTRACT_LOCAL_CLASSES")) && /* local */
hasDocumentation() && /* documented */
!isReference() && /* not an external reference */
(!m_isStatic || Config_getBool("EXTRACT_STATIC"));
@@ -1637,6 +1654,17 @@ bool ClassDef::isBaseClass(ClassDef *bcd)
}
//----------------------------------------------------------------------------
+
+static bool isStandardFunc(MemberDef *md)
+{
+ ClassDef *cd=md->getClassDef();
+ if (cd->templateMaster()) cd=cd->templateMaster();
+ return md->name()=="operator=" || // assignment operator
+ md->name()==cd->localName() || // constructor
+ (md->name().find('~')!=-1 &&
+ md->name().find("operator")==-1); // destructor
+}
+
/*!
* recusively merges the `all members' lists of a class base
* with that of this class. Must only be called for classes without
@@ -1645,19 +1673,22 @@ bool ClassDef::isBaseClass(ClassDef *bcd)
void ClassDef::mergeMembers()
{
+ if (m_membersMerged) return;
+ m_membersMerged=TRUE;
+ //printf(" mergeMembers for %s\n",name().data());
+ bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" );
BaseClassListIterator bcli(*baseClasses());
BaseClassDef *bcd;
for ( ; (bcd=bcli.current()) ; ++bcli )
{
ClassDef *bClass=bcd->classDef;
-
+
// merge the members in the base class of this inheritance branch first
bClass->mergeMembers();
- MemberNameInfoSDict *srcMnd = bClass->memberNameInfoSDict();
- MemberNameInfoSDict *dstMnd = memberNameInfoSDict();
- //MemberNameInfoList *dstMnl = memberNameInfoList();
-
+ MemberNameInfoSDict *srcMnd = bClass->m_allMemberNameInfoSDict;
+ MemberNameInfoSDict *dstMnd = m_allMemberNameInfoSDict;
+
MemberNameInfoSDict::Iterator srcMnili(*srcMnd);
MemberNameInfo *srcMni;
for ( ; (srcMni=srcMnili.current()) ; ++srcMnili)
@@ -1687,24 +1718,26 @@ void ClassDef::mergeMembers()
if (srcMd!=dstMd) // different members
{
ClassDef *dstCd = dstMd->getClassDef();
- //printf("Is %s a base class of %s?\n",srcCd->name(),dstCd->name());
+ //printf(" Is %s a base class of %s?\n",srcCd->name().data(),dstCd->name().data());
if (srcCd==dstCd || dstCd->isBaseClass(srcCd))
// member is in the same or a base class
{
found=matchArguments(srcMd->argumentList(),
- dstMd->argumentList()
- );
- //ambigue = ambigue || !found;
+ dstMd->argumentList());
+ //printf(" Yes, matching (%s<->%s): %d\n",
+ // argListToString(srcMd->argumentList()).data(),
+ // argListToString(dstMd->argumentList()).data(),
+ // found);
hidden = hidden || !found;
}
else // member is in a non base class => multiple inheritance
- // using the same base class.
+ // using the same base class.
{
//printf("$$ Existing member %s %s add scope %s\n",
// dstMi->ambiguityResolutionScope.data(),
// dstMd->name().data(),
// dstMi->scopePath.left(dstMi->scopePath.find("::")+2).data());
-
+
QCString scope=dstMi->scopePath.left(dstMi->scopePath.find("::")+2);
if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
dstMi->ambiguityResolutionScope.prepend(scope);
@@ -1722,7 +1755,7 @@ void ClassDef::mergeMembers()
found=TRUE;
}
else // member can be reached via multiple paths in the
- // inheritance tree
+ // inheritance tree
{
//printf("$$ Existing member %s %s add scope %s\n",
// dstMi->ambiguityResolutionScope.data(),
@@ -1731,7 +1764,9 @@ void ClassDef::mergeMembers()
QCString scope=dstMi->scopePath.left(dstMi->scopePath.find("::")+2);
if (scope!=dstMi->ambiguityResolutionScope.left(scope.length()))
+ {
dstMi->ambiguityResolutionScope.prepend(scope);
+ }
ambigue=TRUE;
}
}
@@ -1748,6 +1783,14 @@ void ClassDef::mergeMembers()
// this case is shown anyway.
if (!found && srcMd->protection()!=Private)
{
+ if (inlineInheritedMembers)
+ {
+ if (!isStandardFunc(srcMd))
+ {
+ //printf(" insertMember `%s'\n",srcMd->name().data());
+ internalInsertMember(srcMd,bcd->prot,FALSE);
+ }
+ }
Specifier virt=srcMi->virt;
if (srcMi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
MemberInfo *newMi = new MemberInfo(srcMd,bcd->prot,virt,TRUE);
@@ -1761,8 +1804,10 @@ void ClassDef::mergeMembers()
QCString scope=bClass->name()+"::";
if (scope!=srcMi->ambiguityResolutionScope.left(scope.length()))
+ {
newMi->ambiguityResolutionScope=
scope+srcMi->ambiguityResolutionScope.copy();
+ }
}
if (hidden)
{
@@ -1777,7 +1822,6 @@ void ClassDef::mergeMembers()
newMi->ambiguityResolutionScope=srcMi->ambigClass->name()+"::";
}
}
- //printf("Adding!\n");
dstMni->append(newMi);
}
}
@@ -1786,8 +1830,9 @@ void ClassDef::mergeMembers()
{
// create a deep copy of the list (only the MemberInfo's will be
// copied, not the actual MemberDef's)
- MemberNameInfo *newMni = new MemberNameInfo(srcMni->memberName());
-
+ MemberNameInfo *newMni = 0;
+ newMni = new MemberNameInfo(srcMni->memberName());
+
// copy the member(s) from the base to the sub class
MemberNameInfoIterator mnii(*srcMni);
MemberInfo *mi;
@@ -1805,12 +1850,20 @@ void ClassDef::mergeMembers()
//printf("%s::%s: prot=%d bcd->prot=%d result=%d\n",
// name().data(),mi->memberDef->name().data(),mi->prot,
// bcd->prot,prot);
-
+
if (mi->prot!=Private)
{
Specifier virt=mi->virt;
if (mi->virt==Normal && bcd->virt!=Normal) virt=bcd->virt;
-
+
+ if (inlineInheritedMembers)
+ {
+ if (!isStandardFunc(mi->memberDef))
+ {
+ //printf(" insertMember `%s'\n",mi->memberDef->name().data());
+ internalInsertMember(mi->memberDef,prot,FALSE);
+ }
+ }
//printf("Adding!\n");
MemberInfo *newMi=new MemberInfo(mi->memberDef,prot,virt,TRUE);
newMi->scopePath=bClass->name()+"::"+mi->scopePath;
@@ -1819,13 +1872,13 @@ void ClassDef::mergeMembers()
newMni->append(newMi);
}
}
-
+
// add it to the dictionary
- //dstMnl->append(newMni);
dstMnd->append(newMni->memberName(),newMni);
}
}
}
+ //printf(" end mergeMembers\n");
}
//----------------------------------------------------------------------------
diff --git a/src/classdef.h b/src/classdef.h
index d294601..507a915 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -311,6 +311,8 @@ class ClassDef : public Definition
/*! \} Interal API */
private:
+ void internalInsertMember(MemberDef *md,Protection prot,bool addToAllList);
+
/*! file name that forms the base for the output file containing the
* class documentation. For compatibility with Qt (e.g. links via tag
* files) this name cannot be derived from the class name directly.
@@ -408,6 +410,12 @@ class ClassDef : public Definition
/*! Is the class part of an unnamed namespace? */
bool m_isStatic;
+
+ /*! TRUE if classes members are merged with those of the base classes. */
+ bool m_membersMerged;
+
+ /*! TRUE if the class is defined in a source file rather than a header file. */
+ bool m_isLocal;
};
/*! \brief Class that contains information about a usage relation.
diff --git a/src/code.l b/src/code.l
index acd258d..23762ff 100644
--- a/src/code.l
+++ b/src/code.l
@@ -1107,14 +1107,12 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_code->codify(yytext);
}
<ClassName>{ID} {
- //g_ccd.name=yytext;
g_curClassName=yytext;
addType();
generateClassOrGlobalLink(*g_code,yytext);
BEGIN( ClassVar );
}
<ClassVar>"=" {
- g_code->codify(yytext);
unput(*yytext);
BEGIN( Body );
}
@@ -1124,7 +1122,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_theVarContext.addVariable(g_type,g_name);
generateClassOrGlobalLink(*g_code,yytext);
}
-<ClassName,ClassVar>[ \t\n]*":"[ \t\n]* {
+<ClassName,ClassVar>[ \t\n]*":"[ \t\n]* {
codifyLines(yytext);
g_curClassBases.clear();
BEGIN( Bases );
diff --git a/src/config.l b/src/config.l
index 98b61aa..3a1918d 100644
--- a/src/config.l
+++ b/src/config.l
@@ -711,7 +711,7 @@ static void substEnvVarsInStrList(QStrList &sl)
// search for a "word"
for (i=0;i<l;i++)
{
- char c;
+ char c=0;
// skip until start of new word
while (i<l && ((c=result.at(i))==' ' || c=='\t')) i++;
p=i; // p marks the start index of the word
@@ -868,6 +868,15 @@ void Config::check()
char *sfp = stripFromPath.first();
while (sfp)
{
+ register char *p = sfp;
+ if (p)
+ {
+ char c;
+ while ((c=*p++))
+ {
+ if (c=='\\') c='/';
+ }
+ }
QCString path = sfp;
if (path.at(0)!='/' && (path.length()<=2 || path.at(1)!=':'))
{
@@ -1213,34 +1222,83 @@ void Config::create()
"information to generate all constant output in the proper language. \n"
"The default language is English, other supported languages are: \n"
"Brazilian, Chinese, Croatian, Czech, Danish, Dutch, Finnish, French, \n"
- "German, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, \n"
+ "German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, \n"
"Portuguese, Romanian, Russian, Slovak, Slovene, Spanish and Swedish.\n",
"English"
);
+#ifdef LANG_BR
ce->addValue("Brazilian");
+#endif
+#ifdef LANG_CN
ce->addValue("Chinese");
+#endif
+#ifdef LANG_HR
ce->addValue("Croatian");
+#endif
+#ifdef LANG_CZ
ce->addValue("Czech");
+#endif
+#ifdef LANG_DK
ce->addValue("Danish");
+#endif
+#ifdef LANG_NL
ce->addValue("Dutch");
+#endif
ce->addValue("English");
+#ifdef LANG_FI
ce->addValue("Finnish");
+#endif
+#ifdef LANG_FR
ce->addValue("French");
+#endif
+#ifdef LANG_DE
ce->addValue("German");
+#endif
+#ifdef LANG_GR
+ ce->addValue("Greek");
+#endif
+#ifdef LANG_HU
ce->addValue("Hungarian");
+#endif
+#ifdef LANG_IT
ce->addValue("Italian");
+#endif
+#ifdef LANG_JP
ce->addValue("Japanese");
+#endif
+#ifdef LANG_KR
ce->addValue("Korean");
+#endif
+#ifdef LANG_NO
ce->addValue("Norwegian");
+#endif
+#ifdef LANG_PL
ce->addValue("Polish");
+#endif
+#ifdef LANG_PT
ce->addValue("Portuguese");
+#endif
+#ifdef LANG_RO
ce->addValue("Romanian");
+#endif
+#ifdef LANG_RU
ce->addValue("Russian");
+#endif
+#ifdef LANG_SK
ce->addValue("Slovak");
+#endif
+#ifdef LANG_SI
ce->addValue("Slovene");
+#endif
+#ifdef LANG_ES
ce->addValue("Spanish");
+#endif
+#ifdef LANG_SE
ce->addValue("Swedish");
+#endif
+#ifdef LANG_UA
ce->addValue("Ukrainian");
+#endif
cb = addBool(
"EXTRACT_ALL",
"If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n"
@@ -1262,6 +1320,13 @@ void Config::create()
FALSE
);
cb = addBool(
+ "EXTRACT_LOCAL_CLASSES",
+ "If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) \n"
+ "defined locally in source files will be included in the documentation. \n"
+ "If set to NO only classes defined in header files are included. \n",
+ TRUE
+ );
+ cb = addBool(
"HIDE_UNDOC_MEMBERS",
"If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n"
"undocumented members of documented classes, files or namespaces. \n"
@@ -1302,6 +1367,14 @@ void Config::create()
FALSE
);
cb = addBool(
+ "INLINE_INHERITED_MEMB",
+ "If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited \n"
+ "members of a class in the documentation of that class as if those members were \n"
+ "ordinary class members. Constructors, destructors and assignment operators of \n"
+ "the base classes will not be shown. \n",
+ FALSE
+ );
+ cb = addBool(
"FULL_PATH_NAMES",
"If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full \n"
"path before files name in the file list and in the header files. If set \n"
diff --git a/src/defargs.l b/src/defargs.l
index 3fa6e65..c238123 100644
--- a/src/defargs.l
+++ b/src/defargs.l
@@ -196,8 +196,8 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
g_argRoundCount++;
*g_copyArgValue += *yytext;
}
-<CopyArgRound,CopyArgRound2>")" {
- *g_copyArgValue += *yytext;
+<CopyArgRound,CopyArgRound2>")"({B}*{ID})* {
+ *g_copyArgValue += yytext;
if (g_argRoundCount>0)
{
g_argRoundCount--;
@@ -251,6 +251,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
<ReadFuncArgType,ReadFuncArgDef>[,)>] {
g_curArgTypeName=removeRedundantWhiteSpace(g_curArgTypeName);
g_curArgDefValue=g_curArgDefValue.stripWhiteSpace();
+ //printf("curArgType=`%s' curArgDefVal=`%s'\n",g_curArgTypeName.data(),g_curArgDefValue.data());
int l=g_curArgTypeName.length();
if (l>0)
{
diff --git a/src/doc.l b/src/doc.l
index e5a2453..3d7b7af 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -1002,21 +1002,25 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
outDoc->docify(getenv(envvar));
}
<DocScan>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
+ outDoc->startHtmlOnly();
outDoc->pushGeneratorState();
outDoc->disableAllBut(OutputGenerator::Html);
BEGIN(DocHtmlScan);
}
<DocHtmlScan>{CMD}"endhtmlonly"/[^a-z_A-Z0-9] {
outDoc->popGeneratorState();
+ outDoc->endHtmlOnly();
BEGIN(DocScan);
}
<DocScan>{CMD}"latexonly"/[^a-z_A-Z0-9] {
+ outDoc->startLatexOnly();
outDoc->pushGeneratorState();
outDoc->disableAllBut(OutputGenerator::Latex);
BEGIN(DocLatexScan);
}
<DocLatexScan>{CMD}"endlatexonly"/[^a-z_A-Z0-9] {
outDoc->popGeneratorState();
+ outDoc->endLatexOnly();
BEGIN(DocScan);
}
<DocHtmlScan,DocLatexScan>"//"|"/*"|"*/" {
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 83c640e..c4fb21a 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -555,215 +555,214 @@ static void buildClassList(Entry *root)
{
// this should not be called
warn(root->fileName,root->startLine,
- "Warning: invalid class name found!"
+ "Warning: invalid class name found!"
);
+ goto error;
}
- else
- {
- Debug::print(Debug::Classes,0," Found class with raw name %s\n",fullName.data());
+ Debug::print(Debug::Classes,0," Found class with raw name %s\n",fullName.data());
- fullName=stripAnonymousNamespaceScope(fullName);
- fullName=stripTemplateSpecifiersFromScope(fullName);
-
- Debug::print(Debug::Classes,0," Found class with name %s\n",fullName.data());
+ fullName=stripAnonymousNamespaceScope(fullName);
+ fullName=stripTemplateSpecifiersFromScope(fullName);
- bool ambig;
- ClassDef *cd;
- //printf("findFileDef(%s)\n",root->fileName.data());
- FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
+ Debug::print(Debug::Classes,0," Found class with name %s\n",fullName.data());
- if ((cd=getClass(fullName)))
- {
- Debug::print(Debug::Classes,0," Existing class!\n",fullName.data());
- //if (cd->templateArguments()==0)
- //{
- // //printf("existing ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
- // cd->setTemplateArguments(tArgList);
- //}
- if (!root->doc.isEmpty() || !root->brief.isEmpty() ||
- (root->bodyLine!=-1 && Config_getBool("SOURCE_BROWSER"))
- )
- // block contains something that ends up in the docs
- {
- if (!root->doc.isEmpty() && !cd->documentation().isEmpty())
- {
- warn(
- root->fileName,root->startLine,
- "Warning: class %s already has a detailed description. "
- "Skipping the one found here.",
- fullName.data()
- );
- }
- else if (!root->doc.isEmpty())
- {
- cd->setDocumentation(root->doc);
- }
- if (!root->brief.isEmpty() && !cd->briefDescription().isEmpty())
- {
- warn(
- root->fileName,root->startLine,
- "Warning: class %s already has a brief description\n"
- " skipping the one found here.",
- fullName.data()
- );
- }
- else if (!root->brief.isEmpty())
- {
- cd->setBriefDescription(root->brief);
- }
- if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1)
- {
- cd->setBodySegment(root->bodyLine,root->endBodyLine);
- cd->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
- }
- cd->addSectionsToDefinition(root->anchors);
- cd->setName(fullName); // change name to match docs
- }
- cd->setFileDef(fd);
- if (cd->hasDocumentation())
+ bool ambig;
+ ClassDef *cd;
+ //printf("findFileDef(%s)\n",root->fileName.data());
+ FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
+
+ if ((cd=getClass(fullName)))
+ {
+ Debug::print(Debug::Classes,0," Existing class!\n",fullName.data());
+ //if (cd->templateArguments()==0)
+ //{
+ // //printf("existing ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
+ // cd->setTemplateArguments(tArgList);
+ //}
+ if (!root->doc.isEmpty() || !root->brief.isEmpty() ||
+ (root->bodyLine!=-1 && Config_getBool("SOURCE_BROWSER"))
+ )
+ // block contains something that ends up in the docs
+ {
+ if (!root->doc.isEmpty() && !cd->documentation().isEmpty())
{
- addIncludeFile(cd,fd,root);
+ warn(
+ root->fileName,root->startLine,
+ "Warning: class %s already has a detailed description. "
+ "Skipping the one found here.",
+ fullName.data()
+ );
}
- addNamespace(root,cd);
- if (fd && (root->section & Entry::COMPOUND_MASK))
+ else if (!root->doc.isEmpty())
{
- //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
- // cd->name().data(),
- // fd->name().data(),
- // root->fileName.data()
- // );
- fd->insertClass(cd);
+ cd->setDocumentation(root->doc);
}
- addClassToGroups(root,cd);
- cd->setRefItems(root->todoId,root->testId,root->bugId);
- if (!root->subGrouping) cd->setSubGrouping(FALSE);
-
- if (cd->templateArguments()==0)
+ if (!root->brief.isEmpty() && !cd->briefDescription().isEmpty())
{
- // this happens if a template class declared with @class is found
- // before the actual definition.
- ArgumentList *tArgList =
- getTemplateArgumentsFromName(fullName,root->tArgLists);
- cd->setTemplateArguments(tArgList);
+ warn(
+ root->fileName,root->startLine,
+ "Warning: class %s already has a brief description\n"
+ " skipping the one found here.",
+ fullName.data()
+ );
}
- }
- else // new class
- {
-
- ClassDef::CompoundType sec=ClassDef::Class;
- switch(root->section)
+ else if (!root->brief.isEmpty())
{
- case Entry::UNION_SEC:
- case Entry::UNIONDOC_SEC:
- sec=ClassDef::Union; break;
- case Entry::STRUCT_SEC:
- case Entry::STRUCTDOC_SEC:
- sec=ClassDef::Struct; break;
- case Entry::INTERFACE_SEC:
- case Entry::INTERFACEDOC_SEC:
- sec=ClassDef::Interface; break;
- case Entry::EXCEPTION_SEC:
- case Entry::EXCEPTIONDOC_SEC:
- sec=ClassDef::Exception; break;
+ cd->setBriefDescription(root->brief);
}
- Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
- fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
- QCString className;
- QCString namespaceName;
- extractNamespaceName(fullName,className,namespaceName);
-
- //printf("New class: namespace `%s' name=`%s'\n",className.data(),namespaceName.data());
-
- QCString tagName;
- QCString refFileName;
- if (root->tagInfo)
+ if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1)
{
- tagName = root->tagInfo->tagName;
- refFileName = root->tagInfo->fileName;
+ cd->setBodySegment(root->bodyLine,root->endBodyLine);
+ cd->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
}
- ClassDef *cd=new ClassDef(root->fileName,root->startLine,fullName,sec,
- tagName,refFileName);
- cd->setDocumentation(root->doc); // copy docs to definition
- cd->setBriefDescription(root->brief);
- //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
-
+ cd->addSectionsToDefinition(root->anchors);
+ cd->setName(fullName); // change name to match docs
+ }
+ cd->setFileDef(fd);
+ if (cd->hasDocumentation())
+ {
+ addIncludeFile(cd,fd,root);
+ }
+ addNamespace(root,cd);
+ if (fd && (root->section & Entry::COMPOUND_MASK))
+ {
+ //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
+ // cd->name().data(),
+ // fd->name().data(),
+ // root->fileName.data()
+ // );
+ fd->insertClass(cd);
+ }
+ addClassToGroups(root,cd);
+ cd->setRefItems(root->todoId,root->testId,root->bugId);
+ if (!root->subGrouping) cd->setSubGrouping(FALSE);
+ if (cd->templateArguments()==0)
+ {
+ // this happens if a template class declared with @class is found
+ // before the actual definition.
ArgumentList *tArgList =
- getTemplateArgumentsFromName(fullName,root->tArgLists);
- //printf("class %s template args=%s\n",fullName.data(),
- // tArgList ? tempArgListToString(tArgList).data() : "<none>");
+ getTemplateArgumentsFromName(fullName,root->tArgLists);
cd->setTemplateArguments(tArgList);
- cd->setProtection(root->protection);
- cd->addSectionsToDefinition(root->anchors);
- cd->setIsStatic(root->stat);
+ }
+ }
+ else // new class
+ {
- // file definition containing the class cd
- cd->setBodySegment(root->bodyLine,root->endBodyLine);
- cd->setBodyDef(fd);
- if (!root->subGrouping) cd->setSubGrouping(FALSE);
+ ClassDef::CompoundType sec=ClassDef::Class;
+ switch(root->section)
+ {
+ case Entry::UNION_SEC:
+ case Entry::UNIONDOC_SEC:
+ sec=ClassDef::Union; break;
+ case Entry::STRUCT_SEC:
+ case Entry::STRUCTDOC_SEC:
+ sec=ClassDef::Struct; break;
+ case Entry::INTERFACE_SEC:
+ case Entry::INTERFACEDOC_SEC:
+ sec=ClassDef::Interface; break;
+ case Entry::EXCEPTION_SEC:
+ case Entry::EXCEPTIONDOC_SEC:
+ sec=ClassDef::Exception; break;
+ }
+ Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
+ fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
+ QCString className;
+ QCString namespaceName;
+ extractNamespaceName(fullName,className,namespaceName);
- addClassToGroups(root,cd);
- cd->setRefItems(root->todoId,root->testId,root->bugId);
+ //printf("New class: namespace `%s' name=`%s'\n",className.data(),namespaceName.data());
- // see if the class is found inside a namespace
- bool found=addNamespace(root,cd);
+ QCString tagName;
+ QCString refFileName;
+ if (root->tagInfo)
+ {
+ tagName = root->tagInfo->tagName;
+ refFileName = root->tagInfo->fileName;
+ }
+ ClassDef *cd=new ClassDef(root->fileName,root->startLine,fullName,sec,
+ tagName,refFileName);
+ cd->setDocumentation(root->doc); // copy docs to definition
+ cd->setBriefDescription(root->brief);
+ //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
- cd->setFileDef(fd);
- if (cd->hasDocumentation())
- {
- addIncludeFile(cd,fd,root);
- }
-
- // namespace is part of the class name
- if (!found && !namespaceName.isEmpty())
- {
- NamespaceDef *nd = getResolvedNamespace(namespaceName);
- if (nd)
- {
- cd->setNamespace(nd);
- nd->insertClass(cd);
- found=TRUE;
- }
- }
-
- // if the class is not in a namespace then we insert
- // it in the file definition
- if (!found && fd && (root->section & Entry::COMPOUND_MASK))
- {
- //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
- // cd->name().data(),
- // fd->name().data(),
- // root->fileName.data()
- // );
- fd->insertClass(cd);
- }
-
- // the empty string test is needed for extract all case
- cd->setBriefDescription(root->brief);
- cd->insertUsedFile(root->fileName);
- // add class to the list
- //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
- Doxygen::classSDict.append(fullName,cd);
+ 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->addSectionsToDefinition(root->anchors);
+ cd->setIsStatic(root->stat);
- // also add class to the correct structural context
- Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
- if (d==0)
- {
- //warn(root->fileName,root->startLine,
- // "Warning: Internal inconsistency: scope for class %s not "
- // "found!\n",fullName.data()
- // );
- }
- else
+ // file definition containing the class cd
+ cd->setBodySegment(root->bodyLine,root->endBodyLine);
+ cd->setBodyDef(fd);
+ if (!root->subGrouping) cd->setSubGrouping(FALSE);
+
+ addClassToGroups(root,cd);
+ cd->setRefItems(root->todoId,root->testId,root->bugId);
+
+ // see if the class is found inside a namespace
+ bool found=addNamespace(root,cd);
+
+ cd->setFileDef(fd);
+ if (cd->hasDocumentation())
+ {
+ addIncludeFile(cd,fd,root);
+ }
+
+ // namespace is part of the class name
+ if (!found && !namespaceName.isEmpty())
+ {
+ NamespaceDef *nd = getResolvedNamespace(namespaceName);
+ if (nd)
{
- //printf("****** adding %s to scope %s\n",cd->name().data(),d->name().data());
- d->addInnerCompound(cd);
- cd->setOuterScope(d);
+ cd->setNamespace(nd);
+ nd->insertClass(cd);
+ found=TRUE;
}
}
+
+ // if the class is not in a namespace then we insert
+ // it in the file definition
+ if (!found && fd && (root->section & Entry::COMPOUND_MASK))
+ {
+ //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
+ // cd->name().data(),
+ // fd->name().data(),
+ // root->fileName.data()
+ // );
+ fd->insertClass(cd);
+ }
+
+ // the empty string test is needed for extract all case
+ cd->setBriefDescription(root->brief);
+ cd->insertUsedFile(root->fileName);
+
+ // add class to the list
+ //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
+ Doxygen::classSDict.append(fullName,cd);
+
+ // also add class to the correct structural context
+ Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
+ if (d==0)
+ {
+ //warn(root->fileName,root->startLine,
+ // "Warning: Internal inconsistency: scope for class %s not "
+ // "found!\n",fullName.data()
+ // );
+ }
+ else
+ {
+ //printf("****** adding %s to scope %s\n",cd->name().data(),d->name().data());
+ d->addInnerCompound(cd);
+ cd->setOuterScope(d);
+ }
}
}
+error:
EntryListIterator eli(*root->sublist);
Entry *e;
for (;(e=eli.current());++eli)
@@ -1847,7 +1846,7 @@ static void buildFunctionList(Entry *root)
//printf("match!\n");
// see if we need to create a new member
found=(nd && rnd && nsName==rnsName) || // members are in the same namespace
- ((fd!=0 && // no external reference and
+ ((nd==0 && rnd==0 && fd!=0 && // no external reference and
fd->absFilePath()==root->fileName // prototype in the same file
)
);
@@ -2167,6 +2166,11 @@ static void transferFunctionDocumentation()
}
mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers());
mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers());
+
+ int todoId = QMAX(mdec->todoId(),mdef->todoId());
+ int testId = QMAX(mdec->testId(),mdef->testId());
+ int bugId = QMAX(mdec->bugId() ,mdef->bugId() );
+ mdec->setRefItems(todoId,testId,bugId);
}
}
}
@@ -4775,6 +4779,7 @@ static void buildCompleteMemberLists()
cd->subClasses()->count()==0 && // is a root of the hierarchy
cd->baseClasses()->count()>0) // and has at least one base class
{
+ //printf("*** merging members for %s\n",cd->name().data());
cd->mergeMembers();
}
}
@@ -6954,8 +6959,8 @@ void parseInput()
msg("Determining which enums are documented\n");
findDocumentedEnumValues();
- msg("Computing member references...\n");
- computeMemberReferences();
+ //msg("Computing member references...\n");
+ //computeMemberReferences();
msg("Computing member relations...\n");
computeMemberRelations();
@@ -6975,6 +6980,9 @@ void parseInput()
msg("Building full member lists recursively...\n");
buildCompleteMemberLists();
+ msg("Computing member references...\n");
+ computeMemberReferences();
+
if (Config_getBool("INHERIT_DOCS"))
{
msg("Inheriting documentation...\n");
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 620c8a9..144f8c6 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -84,7 +84,7 @@ FileDef::~FileDef()
/*! Compute the HTML anchor names for all members in the class */
void FileDef::computeAnchors()
{
- setAnchors('a',&allMemberList);
+ setAnchors(0,'a',&allMemberList);
}
void FileDef::distributeMemberGroupDocumentation()
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index f879d60..7e2a54f 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -343,7 +343,7 @@ int GroupDef::countMembers() const
/*! Compute the HTML anchor names for all members in the class */
void GroupDef::computeAnchors()
{
- setAnchors('a',allMemberList);
+ setAnchors(0,'a',allMemberList);
}
void GroupDef::writeDocumentation(OutputList &ol)
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 75c2a00..387065e 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -249,6 +249,11 @@ class HtmlGenerator : public OutputGenerator
void startFontClass(const char *s) { t << "<font class=\"" << s << "\">"; }
void endFontClass() { t << "</font>"; }
+ void startHtmlOnly() {}
+ void endHtmlOnly() {}
+ void startLatexOnly() {}
+ void endLatexOnly() {}
+
private:
QCString lastTitle;
QCString lastFile;
diff --git a/src/lang_cfg.h b/src/lang_cfg.h
index 581905b..4e6639b 100644
--- a/src/lang_cfg.h
+++ b/src/lang_cfg.h
@@ -21,3 +21,4 @@
#define LANG_DK
#define LANG_SK
#define LANG_UA
+#define LANG_GR
diff --git a/src/language.cpp b/src/language.cpp
index 33da153..5f27716 100644
--- a/src/language.cpp
+++ b/src/language.cpp
@@ -91,6 +91,12 @@
#ifdef LANG_UA
#include "translator_ua.h"
#endif
+#ifdef LANG_GR
+#include "translator_gr.h"
+#endif
+//#ifdef LANG_JS
+//#include "translator_js.h"
+//#endif
#endif
#define L_EQUAL(a) !stricmp(langName,a)
@@ -242,6 +248,16 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorUkrainian;
}
#endif
+#ifdef LANG_GR
+ else if (L_EQUAL("greek"))
+ {
+ theTranslator=new TranslatorGreek;
+ }
+#endif
+// else if (L_EQUAL("japanese-sjis"))
+// {
+// theTranslator=new TranslatorJapaneseSjis;
+// }
#endif
else // use the default language (i.e. english)
{
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 0f24f6e..49469de 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -272,8 +272,9 @@ static void writeDefaultHeaderPart1(QTextStream &t)
t << "\\makeindex\n"
"\\setcounter{tocdepth}{1}\n"
"\\setlength{\\footrulewidth}{0.4pt}\n"
- "\\begin{document}\n"
- "\\begin{titlepage}\n"
+ "\\begin{document}\n";
+ if (theTranslator->idLanguage()=="greek") t << "\\selectlanguage{greek}\n";
+ t << "\\begin{titlepage}\n"
"\\vspace*{7cm}\n"
"\\begin{center}\n"
"{\\Large ";
@@ -1380,13 +1381,15 @@ void LatexGenerator::latin2ToLatex(unsigned char c)
//void LatexGenerator::docifyStatic(QTextStream &t,const char *str)
void LatexGenerator::docify(const char *str)
{
- static bool isCzech = theTranslator->idLanguage()=="czech";
- static bool isJapanese = theTranslator->idLanguage()=="japanese";
- static bool isKorean = theTranslator->idLanguage()=="korean";
- static bool isRussian = theTranslator->idLanguage()=="russian";
- static bool isUkrainian = theTranslator->idLanguage()=="ukrainian";
- static bool isChinese = theTranslator->idLanguage()=="chinese";
- static bool isLatin2 = theTranslator->idLanguageCharset()=="iso-8859-2";
+ static bool isCzech = theTranslator->idLanguage()=="czech";
+ static bool isJapanese = theTranslator->idLanguage()=="japanese";
+ static bool isJapaneseSjis = theTranslator->idLanguage()=="japanese-sjis";
+ static bool isKorean = theTranslator->idLanguage()=="korean";
+ static bool isRussian = theTranslator->idLanguage()=="russian";
+ static bool isUkrainian = theTranslator->idLanguage()=="ukrainian";
+ static bool isChinese = theTranslator->idLanguage()=="chinese";
+ static bool isLatin2 = theTranslator->idLanguageCharset()=="iso-8859-2";
+ static bool isGreek = theTranslator->idLanguage()=="greek";
if (str)
{
const unsigned char *p=(const unsigned char *)str;
@@ -1452,7 +1455,7 @@ void LatexGenerator::docify(const char *str)
default:
// Some languages uses wide characters
- if (isJapanese || isKorean || isChinese)
+ if (isJapanese || isJapaneseSjis || isKorean || isChinese)
{
if (c>=128)
{
@@ -1494,6 +1497,17 @@ void LatexGenerator::docify(const char *str)
t << (char)c;
}
}
+ else if (isGreek)
+ {
+ if (c<128)
+ {
+ t << "\\textlatin{" << (char)c << "}";
+ }
+ else
+ {
+ t << (char)c;
+ }
+ }
else // language is other than Czech, Russian or Japanese
{
switch(c)
diff --git a/src/latexgen.h b/src/latexgen.h
index 51947c2..5d5eab8 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -255,6 +255,11 @@ class LatexGenerator : public OutputGenerator
void startFontClass(const char *) {}
void endFontClass() {}
+
+ void startHtmlOnly() {}
+ void endHtmlOnly() {}
+ void startLatexOnly() {}
+ void endLatexOnly() {}
private:
void latin2ToLatex(unsigned char);
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 6b73443..14914f9 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -76,6 +76,7 @@ HEADERS = bufstr.h \
translator_es.h \
translator_fi.h \
translator_fr.h \
+ translator_gr.h \
translator_hr.h \
translator_hu.h \
translator_it.h \
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 9c06dc0..3864ee7 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -143,6 +143,7 @@ void ManGenerator::startFile(const char *,const char *manName,
void ManGenerator::endFile()
{
+ t << endl;
endPlainFile();
}
diff --git a/src/mangen.h b/src/mangen.h
index ea944be..2b95de9 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -237,6 +237,11 @@ class ManGenerator : public OutputGenerator
void startFontClass(const char *) {}
void endFontClass() {}
+ void startHtmlOnly() {}
+ void endHtmlOnly() {}
+ void startLatexOnly() {}
+ void endLatexOnly() {}
+
private:
bool firstCol;
bool paragraph;
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index edcf1e7..baa1452 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -129,6 +129,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
if ((vp=a->type.find(re))!=-1) // argument type is a function pointer
{
+ //printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data());
QCString n=a->type.left(vp);
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),scopeName,md->name(),n);
@@ -367,10 +368,7 @@ void MemberDef::setReimplements(MemberDef *md)
{
m_templateMaster->setReimplements(md);
}
- else
- {
- redefines=md;
- }
+ redefines=md;
}
void MemberDef::insertReimplementedBy(MemberDef *md)
@@ -379,11 +377,8 @@ void MemberDef::insertReimplementedBy(MemberDef *md)
{
m_templateMaster->insertReimplementedBy(md);
}
- else
- {
- if (redefinedBy==0) redefinedBy = new MemberList;
- redefinedBy->inSort(md);
- }
+ if (redefinedBy==0) redefinedBy = new MemberList;
+ redefinedBy->inSort(md);
}
void MemberDef::insertEnumField(MemberDef *md)
@@ -491,6 +486,7 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7);
static QRegExp r("@[0-9]+");
int l,i=r.match(ltype,0,&l);
+ //printf("ltype=`%s' i=%d\n",ltype.data(),i);
// search for the last anonymous scope in the member type
ClassDef *annoClassDef=0;
if (i!=-1) // found anonymous scope in type
@@ -498,10 +494,9 @@ ClassDef *MemberDef::getClassDefOfAnonymousType()
int il=i-1,ir=i+l;
// extract anonymous scope
while (il>=0 && (isId(ltype.at(il)) || ltype.at(il)==':' || ltype.at(il)=='@')) il--;
- if (il>0) il++;
+ if (il>0) il++; else if (il<0) il=0;
while (ir<(int)ltype.length() && (isId(ltype.at(ir)) || ltype.at(ir)==':' || ltype.at(ir)=='@')) ir++;
- //QCString annName = ltype.mid(i,l);
QCString annName = ltype.mid(il,ir-il);
// if inside a class or namespace try to prepend the scope name
@@ -745,7 +740,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
// write name
- if (!name().isEmpty() && name().at(0)!='@')
+ if (!name().isEmpty() && name().at(0)!='@') // hide annonymous stuff
{
//printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable());
if (isLinkable())
@@ -764,7 +759,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
else
{
//printf("writeLink %s->%d\n",name.data(),hasDocumentation());
- writeLink(ol,cd,nd,fd,gd);
+ ClassDef *rcd = cd;
+ if (isReference() && classDef) rcd = classDef;
+ writeLink(ol,rcd,nd,fd,gd);
}
}
else if (isDocumentedFriendClass())
@@ -903,7 +900,7 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup) const
{
bool groupFilter = getGroupDef()==0 || inGroup;
- bool visible = isDetailedSectionLinkable() && groupFilter;
+ bool visible = isDetailedSectionLinkable() && groupFilter && !isReference();
//printf("MemberDef::isDetailedSectionVisible() %d\n",visible);
return visible;
}
@@ -1102,7 +1099,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
isFriend() || isRelated() || isExplicit() ||
isMutable() || (isInline() && Config_getBool("INLINE_INFO")) ||
isSignal() || isSlot() ||
- isStatic()
+ isStatic() || (classDef && classDef!=container)
)
{
// write the member specifier list
@@ -1126,6 +1123,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (isSignal()) sl.append("signal");
if (isSlot()) sl.append("slot");
}
+ if (classDef && classDef!=container) sl.append("inherited");
const char *s=sl.first();
while (s)
{
@@ -1165,22 +1163,29 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
parseCode(ol,scopeName,init,FALSE,0);
ol.endCodeFragment();
}
+
+ QCString brief = m_templateMaster ?
+ m_templateMaster->briefDescription() : briefDescription();
+ QCString detailed = m_templateMaster ?
+ m_templateMaster->documentation() : documentation();
+ ArgumentList *docArgList = m_templateMaster ?
+ m_templateMaster->argList : argList;
/* write brief description */
- if (!briefDescription().isEmpty() &&
+ if (!brief.isEmpty() &&
(Config_getBool("REPEAT_BRIEF")
/* || (!Config_getBool("BRIEF_MEMBER_DESC") && documentation().isEmpty())*/
) /* || !annMemb */
)
{
- parseDoc(ol,m_defFileName,m_defLine,scopeName,name(),briefDescription());
+ parseDoc(ol,m_defFileName,m_defLine,scopeName,name(),brief);
ol.newParagraph();
}
/* write detailed description */
- if (!documentation().isEmpty())
+ if (!detailed.isEmpty())
{
- parseDoc(ol,m_defFileName,m_defLine,scopeName,name(),documentation()+"\n");
+ parseDoc(ol,m_defFileName,m_defLine,scopeName,name(),detailed+"\n");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::RTF);
ol.newParagraph();
@@ -1190,7 +1195,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("***** argList=%p name=%s docs=%s hasDocs=%d\n",
// argList,
// argList?argList->hasDocumentation():-1);
- if (argList && argList->hasDocumentation())
+ if (docArgList && docArgList->hasDocumentation())
{
//printf("***** argumentList is documented\n");
ol.startParamList(BaseOutputDocInterface::Param);
@@ -1198,7 +1203,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol.endDescTitle();
ol.writeDescItem();
ol.startDescTable();
- ArgumentListIterator ali(*argList);
+ ArgumentListIterator ali(*docArgList);
Argument *a;
for (ali.toFirst();(a=ali.current());++ali)
{
@@ -1293,21 +1298,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ClassDef *bcd=0;
if (bmd && (bcd=bmd->getClassDef()))
{
-#if 0
- if (lvirt!=Normal) // search for virtual member of the deepest base class
- {
- MemberDef *lastBmd=bmd;
- while (lastBmd)
- {
- ClassDef *lastBcd = lastBmd->getClassDef();
- if (lastBmd->virtualness()!=Normal &&
- lastBmd->isLinkable() &&
- lastBcd->isLinkable()
- ) { bmd=lastBmd; bcd=lastBcd; }
- lastBmd=lastBmd->reimplements();
- }
- }
-#endif
// write class that contains a member that is reimplemented by this one
if (bcd->isLinkable())
{
@@ -1543,6 +1533,11 @@ QCString MemberDef::getScopeString() const
return result;
}
+void MemberDef::setAnchor(const char *a)
+{
+ anc=a;
+}
+
QCString MemberDef::anchor() const
{
if (m_templateMaster) return m_templateMaster->anchor();
@@ -1601,6 +1596,9 @@ MemberDef *MemberDef::createTemplateInstanceMember(
actArg->type = substituteTemplateArgumentsInString(actArg->type,formalArgs,actualArgs);
actualArgList->append(actArg);
}
+ actualArgList->constSpecifier = argList->constSpecifier;
+ actualArgList->volatileSpecifier = argList->volatileSpecifier;
+ actualArgList->pureSpecifier = argList->pureSpecifier;
}
MemberDef *imd = new MemberDef(
@@ -1613,7 +1611,11 @@ MemberDef *MemberDef::createTemplateInstanceMember(
);
imd->argList = actualArgList;
imd->def = substituteTemplateArgumentsInString(def,formalArgs,actualArgs);
+ imd->setBodyDef(getBodyDef());
+ imd->setBodySegment(getStartBodyLine(),getEndBodyLine());
+
// TODO: init other member variables (if needed).
+ // TODO: reimplemented info
return imd;
}
@@ -1663,6 +1665,7 @@ void MemberDef::addListReference(Definition *d)
memName.prepend(pd->name()+"::");
}
}
+ //printf("*** addListReference %s todo=%d test=%d bug=%d\n",name().data(),todoId(),testId(),bugId());
addRefItem(todoId(),testId(),bugId(),memLabel,
d->getOutputFileBase()+":"+anchor(),memName,argsString());
}
diff --git a/src/memberdef.h b/src/memberdef.h
index 44fac2d..df4b794 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -135,7 +135,7 @@ class MemberDef : public Definition
void setMemberType(MemberType t) { mtype=t; }
void setDefinition(const char *d) { def=d; }
void setFileDef(FileDef *fd) { fileDef=fd; }
- void setAnchor(const char *a) { anc=a; }
+ void setAnchor(const char *a);
void setProtection(Protection p) { prot=p; }
void setMemberSpecifiers(int s) { memSpec=s; }
void mergeMemberSpecifiers(int s) { memSpec|=s; }
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 1f5dffd..469ad0d 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -84,7 +84,7 @@ void MemberGroup::insertMember(MemberDef *md)
void MemberGroup::setAnchors()
{
- ::setAnchors('z',memberList,grpId);
+ ::setAnchors(0,'z',memberList,grpId);
}
void MemberGroup::writeDeclarations(OutputList &ol,
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index af318e3..fdffc33 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -373,54 +373,8 @@ void MemberList::writePlainDeclarations(OutputList &ol,
}
case MemberDef::Friend:
{
-#if 0
- //printf("Writing friend `%s'\n",md->name().data());
- QCString type=md->typeString();
- //printf("Friend: type=%s name=%s\n",type.data(),md->name().data());
- bool isFriendClass = type=="friend class";
- if (!isFriendClass)
- {
-#endif
- if (first) ol.startMemberList(),first=FALSE;
- md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
-#if 0
- }
- else // isFriendClass
- // friend is undocumented as a member but it is a class,
- // so generate a link to the class if that is documented.
- {
- ClassDef *cd=getClass(md->name());
- if (md->hasDocumentation()) // friend is documented
- {
- if (first) ol.startMemberList(),first=FALSE;
- ol.startMemberItem(0);
- ol.docify("class ");
- ol.insertMemberAlign();
- ol.writeObjectLink(0,0,md->anchor(),md->name());
- ol.endMemberItem(FALSE);
- }
- else if (cd && cd->isLinkable()) // class is documented
- {
- if (first) ol.startMemberList(),first=FALSE;
- ol.startMemberItem(0);
- ol.docify("class ");
- ol.insertMemberAlign();
- ol.writeObjectLink(cd->getReference(),cd->getOutputFileBase(),0,cd->name());
- ol.endMemberItem(FALSE);
- }
- else if (!Config_getBool("HIDE_UNDOC_MEMBERS")) // no documentation
- {
- if (first) ol.startMemberList(),first=FALSE;
- ol.startMemberItem(0);
- ol.docify("class ");
- ol.insertMemberAlign();
- ol.startBold();
- ol.docify(md->name());
- ol.endBold();
- ol.endMemberItem(FALSE);
- }
- }
-#endif
+ if (first) ol.startMemberList(),first=FALSE;
+ md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
break;
}
case MemberDef::EnumValue:
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 25b6bad..89584ba 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -167,7 +167,7 @@ void NamespaceDef::insertMember(MemberDef *md)
void NamespaceDef::computeAnchors()
{
- setAnchors('a',&allMemberList);
+ setAnchors(0,'a',&allMemberList);
}
void NamespaceDef::writeDocumentation(OutputList &ol)
diff --git a/src/outputgen.h b/src/outputgen.h
index 1e061e6..3d6bfae 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -257,6 +257,11 @@ class BaseOutputDocInterface
virtual void startFontClass(const char *) = 0;
virtual void endFontClass() = 0;
+ virtual void startHtmlOnly() = 0;
+ virtual void endHtmlOnly() = 0;
+ virtual void startLatexOnly() = 0;
+ virtual void endLatexOnly() = 0;
+
/*! Writes an ASCII string to the output. This function should keep
* spaces visible, should break lines at a newline and should convert
* tabs to the right number of spaces.
diff --git a/src/outputlist.h b/src/outputlist.h
index 8f3152a..88f3cb4 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -434,6 +434,15 @@ class OutputList : public OutputDocInterface
void endFontClass()
{ forall(&OutputGenerator::endFontClass); }
+ void startHtmlOnly()
+ { forall(&OutputGenerator::startHtmlOnly); }
+ void endHtmlOnly()
+ { forall(&OutputGenerator::endHtmlOnly); }
+ void startLatexOnly()
+ { forall(&OutputGenerator::startLatexOnly); }
+ void endLatexOnly()
+ { forall(&OutputGenerator::endLatexOnly); }
+
#if 0
void startPlainFile(const char *name)
{ forall(&OutputGenerator::startPlainFile,name); }
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 980aea6..0f967b6 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -240,6 +240,11 @@ class RTFGenerator : public OutputGenerator
void startFontClass(const char *) {}
void endFontClass() {}
+ void startHtmlOnly() {}
+ void endHtmlOnly() {}
+ void startLatexOnly() {}
+ void endLatexOnly() {}
+
static bool preProcessFileInplace(const char *path,const char *name);
private:
diff --git a/src/scanner.l b/src/scanner.l
index 5615224..6371b71 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -920,6 +920,10 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
current->name = current->name.simplifyWhiteSpace();
BEGIN( FindMembers ) ;
}
+<Operator>";" { // can occur when importing members
+ unput(';');
+ BEGIN( FindMembers ) ;
+ }
<Operator>[^(] {
lineCount();
current->name += *yytext ;
@@ -1093,6 +1097,11 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN( ReadFuncArgType ) ;
}
}
+<EndTemplate>">"{BN}*/"("({BN}*{ID}{BN}*"::")*({BN}*"*"{BN}*)+ { // function pointer returning a template instance
+ lineCount();
+ current->name+='>';
+ BEGIN(FindMembers);
+ }
<EndTemplate>">"{BN}*/"::" {
lineCount();
current->name+='>';
@@ -2033,24 +2042,58 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
/* a special comment */
<ReadFuncArgType>("/*"[*!]|"//"[/!])("<"?) {
- fullArgString+=yytext;
- lastCopyArgChar=0;
- if (yytext[1]=='/')
- BEGIN( CopyArgCommentLine );
+ if (currentArgumentContext==DefineEnd)
+ {
+ // for defines we interpret a comment
+ // as documentation for the define
+ int i;for (i=yyleng-1;i>=0;i--)
+ {
+ unput(yytext[i]);
+ }
+ stringToArgumentList(fullArgString,current->argList);
+ BEGIN( currentArgumentContext );
+ }
else
- BEGIN( CopyArgComment );
+ {
+ // for functions we interpret a comment
+ // as documentation for the argument
+ fullArgString+=yytext;
+ lastCopyArgChar=0;
+ if (yytext[1]=='/')
+ BEGIN( CopyArgCommentLine );
+ else
+ BEGIN( CopyArgComment );
+ }
}
/* `)' followed by a special comment */
<ReadFuncArgType>")"{BN}*("/*"[*!]|"//"[/!])"<" {
lineCount();
- lastCopyArgChar=*yytext;
- QCString text=&yytext[1];
- text=text.stripWhiteSpace();
- fullArgString+=text;
- if (text.find("//")!=-1)
- BEGIN( CopyArgCommentLine );
+ if (currentArgumentContext==DefineEnd)
+ {
+ // for defines we interpret a comment
+ // as documentation for the define
+ int i;for (i=yyleng-1;i>0;i--)
+ {
+ unput(yytext[i]);
+ }
+ *copyArgString+=*yytext;
+ fullArgString+=*yytext;
+ stringToArgumentList(fullArgString,current->argList);
+ BEGIN( currentArgumentContext );
+ }
else
- BEGIN( CopyArgComment );
+ {
+ // for functions we interpret a comment
+ // as documentation for the last argument
+ lastCopyArgChar=*yytext;
+ QCString text=&yytext[1];
+ text=text.stripWhiteSpace();
+ fullArgString+=text;
+ if (text.find("//")!=-1)
+ BEGIN( CopyArgCommentLine );
+ else
+ BEGIN( CopyArgComment );
+ }
}
<CopyArgComment>[^\n\*]+ { fullArgString+=yytext; }
<CopyArgComment>"*/" { fullArgString+=yytext;
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 207d977..5f35a6d 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -32,6 +32,7 @@
#include "doxygen.h"
#include "util.h"
#include "message.h"
+#include "defargs.h"
//#include "reflist.h"
/*! Container for member specific info that can be read from a tagfile */
@@ -859,6 +860,11 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
me->type = tmi->type;
me->name = tmi->name;
me->args = tmi->arglist;
+ if (!me->args.isEmpty())
+ {
+ me->argList = new ArgumentList;
+ stringToArgumentList(me->args,me->argList);
+ }
me->protection = tmi->prot;
me->virt = tmi->virt;
me->stat = tmi->isStatic;
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 136cc75..a103405 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -267,252 +267,4 @@ class TranslatorAdapter_1_2_1 : public TranslatorAdapter_1_2_2
{ return english.trDCOPMethods(); }
};
-/*! \brief Translator adapter class for release 1.2.0
- *
- * Translator adapter for dealing with translator changes since
- * release 1.2.0
- */
-class TranslatorAdapter_1_2_0 : public TranslatorAdapter_1_2_1
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.2.0"); }
-
- virtual QCString trTest()
- { return english.trTest(); }
-
- virtual QCString trTestList()
- { return english.trTestList(); }
-
-};
-
-/*! \brief Translator adapter class for release 1.1.5
- *
- * Translator adapter for dealing with translator changes since
- * release 1.1.5
- */
-class TranslatorAdapter_1_1_5 : public TranslatorAdapter_1_2_0
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.1.5"); }
-
- virtual QCString trLegendTitle()
- { return english.trLegendTitle(); }
-
- virtual QCString trLegendDocs()
- { return english.trLegendDocs(); }
-
- virtual QCString trLegend()
- { return english.trLegend(); }
-};
-
-/*! \brief Translator adapter class for release 1.1.4
- *
- * Translator adapter for dealing with translator changes since
- * release 1.1.4
- */
-class TranslatorAdapter_1_1_4 : public TranslatorAdapter_1_1_5
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.1.4"); }
-
- virtual QCString trReferencedBy()
- { return english.trReferencedBy(); }
-
- virtual QCString trRemarks()
- { return english.trRemarks(); }
-
- virtual QCString trAttention()
- { return english.trAttention(); }
-
- virtual QCString trInclByDepGraph()
- { return english.trInclByDepGraph(); }
-
- virtual QCString trSince()
- { return english.trSince(); }
-};
-
-/*! \brief Translator adapter class for release 1.1.3
- *
- * Translator adapter for dealing with translator changes since
- * release 1.1.3
- */
-class TranslatorAdapter_1_1_3 : public TranslatorAdapter_1_1_4
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.1.3"); }
-
- virtual QCString trTodo()
- { return english.trTodo(); }
-
- virtual QCString trTodoList()
- { return english.trTodoList(); }
-};
-
-/*! \brief Translator adapter class for release 1.1.0
- *
- * Translator adapter for dealing with translator changes since
- * release 1.1.0
- */
-class TranslatorAdapter_1_1_0 : public TranslatorAdapter_1_1_3
-{
- public:
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.1.0"); }
-
- virtual QCString trNote()
- { return english.trNote(); }
-
- virtual QCString trPublicTypes()
- { return english.trPublicTypes(); }
-
- virtual QCString trPublicAttribs()
- { return english.trPublicAttribs(); }
-
- virtual QCString trStaticPublicAttribs()
- { return english.trStaticPublicAttribs(); }
-
- virtual QCString trProtectedTypes()
- { return english.trProtectedTypes(); }
-
- virtual QCString trProtectedAttribs()
- { return english.trProtectedAttribs(); }
-
- virtual QCString trStaticProtectedAttribs()
- { return english.trStaticProtectedAttribs(); }
-
- virtual QCString trPrivateTypes()
- { return english.trPrivateTypes(); }
-
- virtual QCString trPrivateAttribs()
- { return english.trPrivateAttribs(); }
-
- virtual QCString trStaticPrivateAttribs()
- { return english.trStaticPrivateAttribs(); }
-
- virtual QCString trEnumerationValueDocumentation()
- { return english.trEnumerationValueDocumentation(); }
-};
-
-/*! \brief Translator adapter class for release 1.0.0
- *
- * Translator adapter for dealing with translator changes since
- * release 1.0.0
- */
-class TranslatorAdapter_1_0_0 : public TranslatorAdapter_1_1_0
-{
- virtual QCString updateNeededMessage()
- { return createUpdateNeededMessage(idLanguage(),"release 1.0.0"); }
-
- virtual QCString trIncludingInheritedMembers()
- { return english.trIncludingInheritedMembers(); }
-
- virtual QCString trFuncProtos()
- { return english.trFuncProtos(); }
-
- virtual QCString trNamespaces()
- { return english.trNamespaces(); }
-
- virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
- bool single)
- { return english.trGeneratedFromFiles(compType, single); }
-
- virtual QCString trAlphabeticalList()
- { return english.trAlphabeticalList(); }
-
- virtual QCString trReturnValues()
- { return english.trReturnValues(); }
-
- virtual QCString trMainPage()
- { return english.trMainPage(); }
-
- virtual QCString trPageAbbreviation()
- { return english.trPageAbbreviation(); }
-
- virtual QCString trSources()
- { return english.trSources(); }
-
- virtual QCString trStaticProtectedMembers()
- { return english.trStaticProtectedMembers(); }
-
- virtual QCString trDefinedAtLineInSourceFile()
- { return english.trDefinedAtLineInSourceFile(); }
-
- virtual QCString trDefinedInSourceFile()
- { return english.trDefinedInSourceFile(); }
-
- virtual QCString trDeprecated()
- { return english.trDeprecated(); }
-
- virtual QCString trCollaborationDiagram(const char *clName)
- { return english.trCollaborationDiagram(clName); }
-
- virtual QCString trInclDepGraph(const char *fName)
- { return english.trInclDepGraph(fName); }
-
- virtual QCString trConstructorDocumentation()
- { return english.trConstructorDocumentation(); }
-
- virtual QCString trGotoSourceCode()
- { return english.trGotoSourceCode(); }
-
- virtual QCString trGotoDocumentation()
- { return english.trGotoDocumentation(); }
-
- virtual QCString trPrecondition()
- { return english.trPrecondition(); }
-
- virtual QCString trPostcondition()
- { return english.trPostcondition(); }
-
- virtual QCString trInvariant()
- { return english.trInvariant(); }
-
- virtual QCString trInitialValue()
- { return english.trInitialValue(); }
-
- virtual QCString trCode()
- { return english.trCode(); }
-
- virtual QCString trGraphicalHierarchy()
- { return english.trGraphicalHierarchy(); }
-
- virtual QCString trGotoGraphicalHierarchy()
- { return english.trGotoGraphicalHierarchy(); }
-
- virtual QCString trGotoTextualHierarchy()
- { return english.trGotoTextualHierarchy(); }
-
- virtual QCString trPageIndex()
- { return english.trPageIndex(); }
-
- virtual QCString trReimplementedForInternalReasons()
- { return english.trReimplementedForInternalReasons(); }
-
- virtual QCString trClassHierarchyDescription()
- { return english.trClassHierarchyDescription(); }
-
- virtual QCString trNoDescriptionAvailable()
- { return english.trNoDescriptionAvailable(); }
-
- virtual QCString trEnumerationValues()
- { return english.trEnumerationValues(); }
-
- virtual QCString trFunctionPrototypeDocumentation()
- { return english.trFunctionPrototypeDocumentation(); }
-
- virtual QCString trEnumerationTypeDocumentation()
- { return english.trEnumerationTypeDocumentation(); }
-
- virtual QCString trFunctionDocumentation()
- { return english.trFunctionDocumentation(); }
-
- virtual QCString trRelatedFunctionDocumentation()
- { return english.trRelatedFunctionDocumentation(); }
-
-};
-
#endif
diff --git a/src/translator_fi.h b/src/translator_fi.h
index fc39795..ba836a0 100644
--- a/src/translator_fi.h
+++ b/src/translator_fi.h
@@ -27,58 +27,67 @@ Olli Korhonen <olli.korhonen@ccc.fi>
olla vakiintuneessa kδytφssδ.
* Tehtδvδδ:
- - Termien kokoaminen listaksi ja suomennosten jδrkevyyden tarkastelu. (lista on jo melko kattava)
- Author = Tekijδ
- Class = Luokka
- Compound = Kooste ?
- Data = Data
- Documentation = Dokumentaatio
- Defines = Mδδrittelyt ?
- Description = Selite
- Detailed = Yksityiskohtainen
- diagram = kaavio
- Enum = Enumeraatio ?
- Exceptions = Poikkeukset
- File = Tiedosto
- Friends = Ystδvδt ?
- Functions = Funktiot
- Hierarchical = Hierarkinen
- Index = Indeksi
- Inherits = Perii
- Member = Jδsen
- Module = Moduli
- Namespace = Nimiavaruus ?
- Parameters = Parametrit
- Private = Yksityinen
- Protected = Suojattu
- Prototypes = Prototyypit
- Public = Julkinen
- Reference Manual= Kδsikirja
- Reimplemented = Uudelleen toteutettu
- Related = Liittyvδ
- Signals = Signaali
- Slots = ?
- Static = Staattinen
- Struct = ?
- Typedef = Tyyppimδδrittely
- Union = ?
- Variables = Muuttujat
- - Taivutusmuotojen virheettφmyyden tarkastelu prepositioiden korvauskohdissa.
- - Sanasta sanaan kδδnnφskohtien mielekkyyden tarkastelu valmiista dokumentista.
- - umlaut vastineiden kδyttφ scandien kohdalla.
+ - Termien kokoaminen listaksi ja suomennosten jδrkevyyden tarkastelu. (lista on jo melko kattava)
+ Author = Tekijδ
+ Class = Luokka
+ Compound = Kooste ?
+ Data = Data
+ Documentation = Dokumentaatio
+ Defines = Mδδrittelyt ?
+ Description = Selite
+ Detailed = Yksityiskohtainen
+ diagram = kaavio
+ Enum = Enumeraatio ?
+ Exceptions = Poikkeukset
+ File = Tiedosto
+ Friends = Ystδvδt ?
+ Functions = Funktiot
+ Hierarchical = Hierarkinen
+ Index = Indeksi
+ Inherits = Perii
+ Member = Jδsen
+ Module = Moduli
+ Namespace = Nimiavaruus ?
+ Parameters = Parametrit
+ Private = Yksityinen
+ Protected = Suojattu
+ Prototypes = Prototyypit
+ Public = Julkinen
+ Reference Manual= Kδsikirja
+ Reimplemented = Uudelleen toteutettu
+ Related = Liittyvδ
+ Signals = Signaali
+ Slots = ?
+ Static = Staattinen
+ Struct = ?
+ Typedef = Tyyppimδδrittely
+ Union = ?
+ Variables = Muuttujat
+ - Taivutusmuotojen virheettφmyyden tarkastelu prepositioiden korvauskohdissa.
+ - Sanasta sanaan kδδnnφskohtien mielekkyyden tarkastelu valmiista dokumentista.
+ - umlaut vastineiden kδyttφ scandien kohdalla.
positiiviset kommentit otetaan ilolla vastaan.
===================================================================================
*/
-#ifndef TRANSLATOR_SF_H
-#define TRANSLATOR_SF_H
+#ifndef TRANSLATOR_FI_H
+#define TRANSLATOR_FI_H
-#include "translator_adapter.h"
-
-class TranslatorFinnish : public TranslatorAdapter_1_0_0
+class TranslatorFinnish : public TranslatorEnglish
{
public:
+ /*! This method is used to generate a warning message to signal
+ * the user that the translation of his/her language of choice
+ * needs updating.
+ */
+ virtual QCString updateNeededMessage()
+ {
+ return "Warning: The Finnish translator is really obsolete.\n"
+ "It was not updated since version 1.0.0. As a result,\n"
+ "some sentences may appear in English.\n\n";
+ }
+
QCString idLanguage()
{ return "finnish"; }
QCString latexBabelPackage()
@@ -119,7 +128,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_0_0
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"Tδmδn "+s+ // "The documentation for this"+s+
- " dokumentaatio on generoitu ";// " was generated from the following file";
+ " dokumentaatio on generoitu ";// " was generated from the following file";
if (single)
result+="seuraavasta tiedostosta:";
else
@@ -379,7 +388,7 @@ class TranslatorFinnish : public TranslatorAdapter_1_0_0
QCString trGeneratedAt(const char *date,const char *projName)
{
- // funktio on hiukan vaikea kδδntδδ prepositioihin sidotun rakenteen vuoksi.
+ // funktio on hiukan vaikea kδδntδδ prepositioihin sidotun rakenteen vuoksi.
QCString result=(QCString)"Generoitu "+date; // "Generated at "
if (projName) result+=(QCString)" projektille "+projName; // " for "
result+=(QCString)" tekijδ: "; // " by"
diff --git a/src/translator_gr.h b/src/translator_gr.h
new file mode 100644
index 0000000..ba07ac7
--- /dev/null
+++ b/src/translator_gr.h
@@ -0,0 +1,1334 @@
+/******************************************************************************
+ *
+ *
+ *
+ * Copyright (C) 1997-2001 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.
+ *
+ */
+
+/*
+ * 15 Dec 2001 : Translation to greek by
+ * Harry Kalogirou <harkal@rainbow.cs.unipi.gr>
+ */
+
+#ifndef TRANSLATOR_GR_H
+#define TRANSLATOR_GR_H
+
+class TranslatorGreek : public TranslatorAdapter_1_2_11
+{
+ public:
+
+ // --- Language control methods -------------------
+
+ /*! Used for identification of the language. The identification
+ * should not be translated. It should be replaced by the name
+ * of the language in English using lower-case characters only
+ * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
+ * the identification used in language.cpp.
+ */
+ virtual QCString idLanguage()
+ { return "greek"; }
+ virtual QCString latexBabelPackage()
+ {
+ return "greek";
+ }
+ virtual QCString latexLanguageSupportCommand()
+ {
+ return "\\usepackage[greek,english]{babel}\n\\usepackage[iso-8859-7]{inputenc}\n";
+ }
+
+ /*! return the language charset. This will be used for the HTML output */
+ virtual QCString idLanguageCharset()
+ {
+ return "iso-8859-7";
+ }
+
+ // --- 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 "Τεκμηρίωση Απαριθμήσεων Μελών"; }
+
+ /*! 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 */
+ virtual QCString trListOfAllMembers()
+ { return "Λίστα όλων των μελών."; }
+
+ /*! used as the title of the "list of all members" page of a class */
+ virtual QCString trMemberList()
+ { return "Λίστα μελών"; }
+
+ /*! this is the first part of a sentence that is followed by a class name */
+ virtual QCString trThisIsTheListOfAllMembers()
+ { return "Ακολουθεί η πλήρης λίστα των μελών της"; }
+
+ /*! this is the remainder of the sentence after the class name */
+ virtual QCString trIncludingInheritedMembers()
+ { return ", περιλαμβανομένων όλων των κληρονομημένων μελών."; }
+
+ /*! this is put at the author sections at the bottom of man pages.
+ * parameter s is name of the project name.
+ */
+ virtual QCString trGeneratedAutomatically(const char *s)
+ { QCString result="Δημιουργήθηκε αυτόματα από το Doxygen";
+ if (s) result+=(QCString)" για "+s;
+ result+=" από τον πηγαίο κώδικα.";
+ return result;
+ }
+
+ /*! put after an enum name in the list of all members */
+ virtual QCString trEnumName()
+ { return "όνομα απαρύθμισης"; }
+
+ /*! put after an enum value in the list of all members */
+ virtual QCString trEnumValue()
+ { return "τιμή απαρύθμισης"; }
+
+ /*! put after an undocumented member in the list of all members */
+ virtual QCString trDefinedIn()
+ { return "ορισμένο στο "; }
+
+ // quick reference sections
+
+ /*! This is put above each page as a link to the list of all groups of
+ * compounds or files (see the \\group command).
+ */
+ virtual QCString trModules()
+ { return "Κομμάτια"; }
+
+ /*! This is put above each page as a link to the class hierarchy */
+ virtual QCString trClassHierarchy()
+ { return "Ιεραρχία Κλάσεων"; }
+
+ /*! This is put above each page as a link to the list of annotated classes */
+ virtual QCString trCompoundList()
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Δομές Δεδομένων";
+ }
+ else
+ {
+ return "Λίστα Συσσωματωμάτων";
+ }
+ }
+
+ /*! This is put above each page as a link to the list of documented files */
+ virtual QCString trFileList()
+ { return "Λίστα Αρχείων"; }
+
+ /*! This is put above each page as a link to the list of all verbatim headers */
+ virtual QCString trHeaderFiles()
+ { return "Αρχεία Κεφαλίδας"; }
+
+ /*! This is put above each page as a link to all members of compounds. */
+ virtual QCString trCompoundMembers()
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Πεδία Δεδομένων";
+ }
+ else
+ {
+ return "Μέλη Συσσωματώματα";
+ }
+ }
+
+ /*! This is put above each page as a link to all members of files. */
+ virtual QCString trFileMembers()
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Καθολικοί ορισμοί";
+ }
+ else
+ {
+ return "Μέλη Αρχείων";
+ }
+ }
+
+ /*! This is put above each page as a link to all related pages. */
+ virtual QCString trRelatedPages()
+ { return "Σχετικές Σελίδες"; }
+
+ /*! This is put above each page as a link to all examples. */
+ virtual QCString trExamples()
+ { return "Παραδείγματα"; }
+
+ /*! This is put above each page as a link to the search engine. */
+ virtual QCString trSearch()
+ { return "Αναζήτηση"; }
+
+ /*! This is an introduction to the class hierarchy. */
+ virtual QCString trClassHierarchyDescription()
+ { return "Αυτή η λίστα κληρονομηκότητας είναι μερικώς ταξινομημένη, "
+ "αλλά όχι πλήρως, αλφαβητικά:";
+ }
+
+ /*! This is an introduction to the list with all files. */
+ virtual QCString trFileListDescription(bool extractAll)
+ {
+ QCString result="Ακολουθεί μια λίστα όλων των ";
+ if (!extractAll) result+="τεκμηριωμένων ";
+ result+="αρχείων με σύντομες περιγραφές:";
+ return result;
+ }
+
+ /*! This is an introduction to the annotated compound list. */
+ virtual QCString trCompoundListDescription()
+ {
+
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Ακολουθούνε οι δομές δεδομένων με σύντομες περιγραφές:";
+ }
+ else
+ {
+ return "Ακολουθούνε οι κλάσεις, οι δομές, "
+ "τα σώματα και οι διαπροσωπίες με σύντομες περιγραφές:";
+ }
+ }
+
+ /*! This is an introduction to the page with all class members. */
+ virtual QCString trCompoundMembersDescription(bool extractAll)
+ {
+ QCString result="Ακολουθεί η λίστα όλων των ";
+ if (!extractAll)
+ {
+ result+="τεκμηριωμένων ";
+ }
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ result+="πεδίων δομών και σωμάτων ";
+ }
+ else
+ {
+ result+="κλάσεων";
+ }
+ result+=" με συνδέσμους ";
+ if (extractAll)
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ result+="στην τεκμηρίωση των δομών/ενώσεων για κάθε πεδίο:";
+ }
+ else
+ {
+ result+="στην τεκμηρίωση των κλάσεων για κάθε πεδίο:";
+ }
+ }
+ else
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ result+="στις δομές/ενώσεις που ανήκουν:";
+ }
+ else
+ {
+ result+="στις κλάσεις που ανήκουν:";
+ }
+ }
+ return result;
+ }
+
+ /*! This is an introduction to the page with all file members. */
+ virtual QCString trFileMembersDescription(bool extractAll)
+ {
+ QCString result="Ακολουθεί η λίστα όλων των ";
+ if (!extractAll) result+="τεκμηριωμένων ";
+
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ result+="συναρτήσεων, μεταβλητών, ορισμών, απαριθμήσεων, και ορισμών τύπων";
+ }
+ else
+ {
+ result+="μελών αρχείων";
+ }
+ result+=" με συνδέσμους ";
+ if (extractAll)
+ result+="στα αρχεία που ανήκουν:";
+ else
+ result+="στην τεκμηρίωση:";
+ return result;
+ }
+
+ /*! This is an introduction to the page with the list of all header files. */
+ virtual QCString trHeaderFilesDescription()
+ { return "Ακολουθούνε τα αρχεία κεφαλίδας που απαρτίζουν το API:"; }
+
+ /*! 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 "Ακολουθεί η λίστα όλων των μονάδων:"; }
+
+ /*! This sentences is used in the annotated class/file lists if no brief
+ * description is given.
+ */
+ virtual QCString trNoDescriptionAvailable()
+ { return "Δεν υπάρχει περιγραφή διαθέσιμη"; }
+
+ // index titles (the project name is prepended for these)
+
+
+ /*! This is used in HTML as the title of index.html. */
+ virtual QCString trDocumentation()
+ { return "Τεκμηρίωση"; }
+
+ /*! This is used in LaTeX as the title of the chapter with the
+ * index of all groups.
+ */
+ virtual QCString trModuleIndex()
+ { return "Ευρετήριο μονάδων"; }
+
+ /*! This is used in LaTeX as the title of the chapter with the
+ * class hierarchy.
+ */
+ virtual QCString trHierarchicalIndex()
+ { return "Ιεραρχικό Ευρετήριο"; }
+
+ /*! This is used in LaTeX as the title of the chapter with the
+ * annotated compound index.
+ */
+ virtual QCString trCompoundIndex()
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Ευρετήριο δομών δεδομένων";
+ }
+ else
+ {
+ return "Συμπαγές Ευρετήριο";
+ }
+ }
+
+ /*! This is used in LaTeX as the title of the chapter with the
+ * list of all files.
+ */
+ virtual QCString trFileIndex()
+ { return "Ευρετήτιο Αρχείων"; }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all groups.
+ */
+ virtual QCString trModuleDocumentation()
+ { return "Τεκμηρίωση Μονάδων"; }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all classes, structs and unions.
+ */
+ virtual QCString trClassDocumentation()
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Τεκμηρίωση Δομών Δεδομένων";
+ }
+ else
+ {
+ return "Τεκμηρίωση Κλάσεων";
+ }
+ }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all files.
+ */
+ virtual QCString trFileDocumentation()
+ { return "Τεκμηρίωση Αρχείων"; }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all examples.
+ */
+ virtual QCString trExampleDocumentation()
+ { return "Τεκμηρίωση Παραδειγμάτων"; }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all related pages.
+ */
+ virtual QCString trPageDocumentation()
+ { return "Τεκμηρίωση Σελίδων"; }
+
+ /*! This is used in LaTeX as the title of the document */
+ virtual QCString trReferenceManual()
+ { return "Ενχειρίδιο Αναφοράς"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of defines
+ */
+ virtual QCString trDefines()
+ { return "Ορισμοί"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of function prototypes
+ */
+ virtual QCString trFuncProtos()
+ { return "Πρωτοτυπήσεις Συναρτήσεων"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of typedefs
+ */
+ virtual QCString trTypedefs()
+ { return "Ορισμοί Τύπων"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of enumerations
+ */
+ virtual QCString trEnumerations()
+ { return "Απαριθμήσεις"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of (global) functions
+ */
+ virtual QCString trFunctions()
+ { return "Συναρτήσεις"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of (global) variables
+ */
+ virtual QCString trVariables()
+ { return "Μεταβλητές"; }
+
+ /*! This is used in the documentation of a file as a header before the
+ * list of (global) variables
+ */
+ virtual QCString trEnumerationValues()
+ { return "Τιμές Απαριθμήσεων"; }
+
+ /*! This is used in the documentation of a file before the list of
+ * documentation blocks for defines
+ */
+ virtual QCString trDefineDocumentation()
+ { return "Τεκμηρίωση Ορισμών"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for function prototypes
+ */
+ virtual QCString trFunctionPrototypeDocumentation()
+ { return "Τεκμηρίωση Πρωτοτυπήσεων των Συναρτήσεων"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for typedefs
+ */
+ virtual QCString trTypedefDocumentation()
+ { return "Τεκμηρίωση Ορισμών Τύπων"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for enumeration types
+ */
+ virtual QCString trEnumerationTypeDocumentation()
+ { return "Τεκμηρίωση Απαριθμήσεων"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for enumeration values
+ */
+ virtual QCString trEnumerationValueDocumentation()
+ { return "Τεκμηρίωση Τιμών των Απαριθμήσεων"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for functions
+ */
+ virtual QCString trFunctionDocumentation()
+ { return "Τεκμηρίωση Συναρτήσεων"; }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for variables
+ */
+ virtual QCString trVariableDocumentation()
+ { return "Τεκμηρίωση Μεταβλητών"; }
+
+ /*! This is used in the documentation of a file/namespace/group before
+ * the list of links to documented compounds
+ */
+ virtual QCString trCompounds()
+ {
+ if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
+ {
+ return "Δομές Δεδομένων";
+ }
+ else
+ {
+ return "Συσσωματώματα";
+ }
+ }
+
+ /*! This is used in the standard footer of each page and indicates when
+ * the page was generated
+ */
+ virtual QCString trGeneratedAt(const char *date,const char *projName)
+ {
+ QCString result=(QCString)"Δημιουργήθηκε στις "+date;
+ if (projName) result+=(QCString)" για "+projName;
+ result+=(QCString)" από";
+ return result;
+ }
+ /*! This is part of the sentence used in the standard footer of each page.
+ */
+ virtual QCString trWrittenBy()
+ {
+ return "γραμμένο από τον ";
+ }
+
+ /*! this text is put before a class diagram */
+ virtual QCString trClassDiagram(const char *clName)
+ {
+ return (QCString)"Διάγραμμα κληρονομικότητας για την "+clName+":";
+ }
+
+ /*! this text is generated when the \\internal command is used. */
+ virtual QCString trForInternalUseOnly()
+ { return "Μόνο για εσωτερική χρήση."; }
+
+ /*! this text is generated when the \\reimp command is used. */
+ virtual QCString trReimplementedForInternalReasons()
+ { return "Επαναυλοποιημένη για εσωτερικούς λόγους, το API δεν επιρεάζεται."; }
+
+ /*! this text is generated when the \\warning command is used. */
+ virtual QCString trWarning()
+ { return "Προειδοποίηση"; }
+
+ /*! this text is generated when the \\bug command is used. */
+ virtual QCString trBugsAndLimitations()
+ { 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+" ";
+ result+=" Αναφορά";
+ switch(compType)
+ {
+ case ClassDef::Class: result+=" Κλάσης"; break;
+ case ClassDef::Struct: result+=" Δομής"; break;
+ case ClassDef::Union: result+=" Ένωσης"; break;
+ case ClassDef::Interface: result+=" Διαπροσωπίας"; break;
+ case ClassDef::Exception: result+=" Εξαίρεσης"; break;
+ }
+ if (isTemplate) result+=" Template";
+
+ return result;
+ }
+
+ /*! used as the title of the HTML page of a file */
+ virtual QCString trFileReference(const char *fileName)
+ {
+ QCString result=fileName;
+ result+=" Αναφορά Αρχείου";
+ return result;
+ }
+
+ /*! 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 "Δημόσια Slots"; }
+ virtual QCString trSignals()
+ { return "Σήματα"; }
+ virtual QCString trStaticPublicMembers()
+ { return "Στατικές Δημόσιες Μέδοδοι"; }
+ virtual QCString trProtectedMembers()
+ { return "Προστατευμένες Μέδοδοι"; }
+ virtual QCString trProtectedSlots()
+ { return "Προστατευμένα Slots"; }
+ virtual QCString trStaticProtectedMembers()
+ { return "Στατικές Προστατευμένες Μέδοδοι"; }
+ virtual QCString trPrivateMembers()
+ { return "Ιδιοτικές Μέδοδοι"; }
+ virtual QCString trPrivateSlots()
+ { return "Ιδιοτικά Slots"; }
+ 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 "Μέλη Namespace"; }
+
+ /*! This is an introduction to the page with all namespace members */
+ virtual QCString trNamespaceMemberDescription(bool extractAll)
+ {
+ QCString result="Ακολουθεί η λίστα όλων των ";
+ if (!extractAll) result+="τεκμηριωμένων ";
+ result+="μελών χώρων ονομάτων με συνδέσμους ";
+ if (extractAll)
+ result+="στην τεκμηρίωση του χώρου ονομάτων για κάθε μέλος:";
+ else
+ result+="στους χώρους ονομάτων που ανήκουν:";
+ return result;
+ }
+ /*! This is used in LaTeX as the title of the chapter with the
+ * index of all namespaces.
+ */
+ virtual QCString trNamespaceIndex()
+ { return "Ευρετήριο Χώρων Ονομάτων"; }
+
+ /*! This is used in LaTeX as the title of the chapter containing
+ * the documentation of all namespaces.
+ */
+ virtual QCString trNamespaceDocumentation()
+ { return "Τεκμηρίωση Χώρων Ονομάτων"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990522
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used in the documentation before the list of all
+ * namespaces in a file.
+ */
+ virtual QCString trNamespaces()
+ { return "Χώροι Ονομάτων"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990728
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is put at the bottom of a class documentation page and is
+ * followed by a list of files that were used to generate the page.
+ */
+ virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
+ bool single)
+ { // here s is one of " Class", " Struct" or " Union"
+ // single is true implies a single file
+ QCString result=(QCString)"Η τεκμηρίωση για ";
+ switch(compType)
+ {
+ case ClassDef::Class: result+="αυτή την κλάση"; break;
+ case ClassDef::Struct: result+="αυτή η δομή"; break;
+ case ClassDef::Union: result+="αυτή η ένωση"; break;
+ case ClassDef::Interface: result+="αυτή η διαπροσωπία"; break;
+ case ClassDef::Exception: result+="αυτή η εξαίρεση"; break;
+ }
+ result+=" δημιουργήθηκε απο τ";
+ if (single) result+="ο ακόλουθο αρχείο:"; else result+="α ακόλουθα αρχεία:";
+ return result;
+ }
+
+ /*! This is in the (quick) index as a link to the alphabetical compound
+ * list.
+ */
+ virtual QCString trAlphabeticalList()
+ { return "Αλφαβητική Λίστα"; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-990901
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used as the heading text for the retval command. */
+ virtual QCString trReturnValues()
+ { return "Τιμές Επιστροφής"; }
+
+ /*! This is in the (quick) index as a link to the main page (index.html)
+ */
+ virtual QCString trMainPage()
+ { return "Κύρια Σελίδα"; }
+
+ /*! This is used in references to page that are put in the LaTeX
+ * documentation. It should be an abbreviation of the word page.
+ */
+ virtual QCString trPageAbbreviation()
+ { return "σελ."; }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991003
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trSources()
+ {
+ return "Πηγαίος";
+ }
+ virtual QCString trDefinedAtLineInSourceFile()
+ {
+ return "Ορισμός στη γραμμή @0 του αρχείου @1.";
+ }
+ virtual QCString trDefinedInSourceFile()
+ {
+ return "Ορισμός στο αρχείο @0.";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 0.49-991205
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trDeprecated()
+ {
+ return "Αποσυρμένο";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.0.0
+//////////////////////////////////////////////////////////////////////////
+
+ /*! this text is put before a collaboration diagram */
+ virtual QCString trCollaborationDiagram(const char *clName)
+ {
+ return (QCString)"Δίαγραμμα Συνεργασίας για την κλάση "+clName+":";
+ }
+ /*! this text is put before an include dependency graph */
+ virtual QCString trInclDepGraph(const char *fName)
+ {
+ return (QCString)"Διάγραμμα εξάρτησης Include για το αρχείο "+fName+":";
+ }
+ /*! header that is put before the list of constructor/destructors. */
+ virtual QCString trConstructorDocumentation()
+ {
+ return "Τεκμηρίωση Constructor & Destructor";
+ }
+ /*! 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"
+ "Θεωρείστε το παρακάτω παράδειγμα:"
+ "\\code\n"
+ "/*! Invisible class because of truncation */\n"
+ "class Invisible { };\n\n"
+ "/*! Truncated class, inheritance relation is hidden */\n"
+ "class Truncated : public Invisible { };\n\n"
+ "/* Class not documented with doxygen comments */\n"
+ "class Undocumented { };\n\n"
+ "/*! Class that is inherited using public inheritance */\n"
+ "class PublicBase : public Truncated { };\n\n"
+ "/*! Class that is inherited using protected inheritance */\n"
+ "class ProtectedBase { };\n\n"
+ "/*! Class that is inherited using private inheritance */\n"
+ "class PrivateBase { };\n\n"
+ "/*! Class that is used by the Inherited class */\n"
+ "class Used { };\n\n"
+ "/*! Super class that inherits a number of other classes */\n"
+ "class Inherited : public PublicBase,\n"
+ " protected ProtectedBase,\n"
+ " private PrivateBase,\n"
+ " public Undocumented\n"
+ "{\n"
+ " private:\n"
+ " Used *m_usedClass;\n"
+ "};\n"
+ "\\endcode\n"
+ "Αν η ετικέτα \\c MAX_DOT_GRAPH_HEIGHT στο αρχείο ρυθμίσεων "
+ "τεθεί στο 200 θα έχουμε σαν αποτέλεσμα το ακόλουθο διάγραμμα:"
+ "<p><center><img src=\"graph_legend.gif\"></center>\n"
+ "<p>\n"
+ "Τα κουτιά στο παραπάνω διάγραμμα έχουν την ακόλουθη σημασία:\n"
+ "<ul>\n"
+ "<li>Ένα γεμισμένο μαύρο κουτί αναπαριστά τη δομή ή την κλάση για την οποία"
+ "αφορά το διάγραμμα.\n"
+ "<li>Ένα κουτί με μαύρο περίγραμμα αναπαριστά μία τεκμηριωμένη δομή ή κλάση.\n"
+ "<li>Ένα κουτί με γκρίζο περίγραμμα αναπαριστά μία μη τεκμηριωμένη δομή ή κλάση.\n"
+ "<li>Ένα κουτί με κόκκινο περίγραμμα αναπαριστά μία τεκμηριωμένη δομή ή κλάση για "
+ "την οποία δεν παρουσιάζονται όλες οι σχέσεις κληρονομικότητας και περιεχομένου. %Ένα "
+ "διάγραμμα μειώνεται αν δεν χωράει στις ορισμένες διαστάσεις."
+ "</ul>\n"
+ "Τα βέλη έχουν τις ακόλουθες σημασίες:\n"
+ "<ul>\n"
+ "<li>Ένα βαθύ μπλε βέλος χρησιμοποιείται για να παρουσιάσει μία δημόσια σχέση κληρονομικότητας "
+ "μεταξύ δύο κλάσεων.\n"
+ "<li>Ένα βαθύ πράσινο βέλος χρησιμοποιείται για προστατευμένη κληρονομικότητα.\n"
+ "<li>Ένα βαθύ κόκκινο βέλος χρησιμοποιείται για ιδιωτική κληρονομικότητα.\n"
+ "<li>Ένα μωβ διακεκομένο βέλος χρησιμοποιείται αν μία κλάση περιέχεται ή χρησιμοποιείται "
+ "από μία άλλη κλάση. Το βέλος ονομάζεται από το όνομα της μεταβλητής(ων) "
+ "μέσω της οποίας η κλάση ή δομή είναι προσβάσιμη. \n"
+ "</ul>\n";
+ }
+ /*! text for the link to the legend page */
+ virtual QCString trLegend()
+ {
+ return "υπόμνημα";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.0
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a marker that is put before a test item */
+ virtual QCString trTest()
+ {
+ return "Δοκιμαστικό";
+ }
+ /*! Used as the header of the test list */
+ virtual QCString trTestList()
+ {
+ return "Λίστα Δοκιμαστικών";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.1
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a section header for KDE-2 IDL methods */
+ virtual QCString trDCOPMethods()
+ {
+ return "Μέδοδοι DCOP";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.2
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a section header for IDL properties */
+ virtual QCString trProperties()
+ {
+ return "Ιδιότητες";
+ }
+ /*! Used as a section header for IDL property documentation */
+ virtual QCString trPropertyDocumentation()
+ {
+ return "Τεκμηρίωση Ιδιοτήτων";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.4
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used for Java interfaces in the summary section of Java packages */
+ virtual QCString trInterfaces()
+ {
+ return "Διαπροσωπίες";
+ }
+ /*! 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 "Πακέτα";
+ }
+ /*! Used as a chapter title for Latex & RTF output */
+ virtual QCString trPackageDocumentation()
+ {
+ return "Τεκμηρίωση Πακέτων";
+ }
+ /*! Text shown before a multi-line define */
+ virtual QCString trDefineValue()
+ {
+ return "Τιμή:";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.5
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a marker that is put before a \\bug item */
+ virtual QCString trBug()
+ {
+ return "Πρόβλημα";
+ }
+ /*! Used as the header of the bug list */
+ virtual QCString trBugList()
+ {
+ return "Λίστα Προβλημάτων";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.6
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as ansicpg for RTF file
+ *
+ * The following table shows the correlation of Charset name, Charset Value and
+ * <pre>
+ * Codepage number:
+ * Charset Name Charset Value(hex) Codepage number
+ * ------------------------------------------------------
+ * DEFAULT_CHARSET 1 (x01)
+ * SYMBOL_CHARSET 2 (x02)
+ * OEM_CHARSET 255 (xFF)
+ * ANSI_CHARSET 0 (x00) 1252
+ * RUSSIAN_CHARSET 204 (xCC) 1251
+ * EE_CHARSET 238 (xEE) 1250
+ * GREEK_CHARSET 161 (xA1) 1253
+ * TURKISH_CHARSET 162 (xA2) 1254
+ * BALTIC_CHARSET 186 (xBA) 1257
+ * HEBREW_CHARSET 177 (xB1) 1255
+ * ARABIC _CHARSET 178 (xB2) 1256
+ * SHIFTJIS_CHARSET 128 (x80) 932
+ * HANGEUL_CHARSET 129 (x81) 949
+ * GB2313_CHARSET 134 (x86) 936
+ * CHINESEBIG5_CHARSET 136 (x88) 950
+ * </pre>
+ *
+ */
+ virtual QCString trRTFansicp()
+ {
+ return "1253";
+ }
+
+
+ /*! Used as ansicpg for RTF fcharset
+ * \see trRTFansicp() for a table of possible values.
+ */
+ 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)
+ {
+ 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+="α"; 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 trNamespace(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Namespace" : "namespace"));
+ 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 trGroup(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Ομάδ" : "ομάδ"));
+ if (!singular) 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 trPage(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Σελίδ" : "σελίδ"));
+ if (!singular) 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 trMember(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Μέλ" : "μέλ"));
+ if (!singular) 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 trField(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Πεδί" : "πεδί"));
+ if (!singular) 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 trGlobal(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Καθολικ" : "καθολικ"));
+ if (!singular) result+="ές"; else 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+=""; else result+="έας";
+ return result;
+ }
+
+};
+
+#endif
diff --git a/src/translator_se.h b/src/translator_se.h
index 79ec0e2..741b817 100644
--- a/src/translator_se.h
+++ b/src/translator_se.h
@@ -62,11 +62,20 @@ Problem!
#ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H
-#include "translator_adapter.h"
-
-class TranslatorSwedish : public TranslatorAdapter_1_0_0
+class TranslatorSwedish : public TranslatorEnglish
{
public:
+ /*! This method is used to generate a warning message to signal
+ * the user that the translation of his/her language of choice
+ * needs updating.
+ */
+ virtual QCString updateNeededMessage()
+ {
+ return "Warning: The Swedish translator is really obsolete.\n"
+ "It was not updated since version 1.0.0. As a result,\n"
+ "some sentences may appear in English.\n\n";
+ }
+
QCString idLanguage()
{ return "swedish"; }
QCString latexBabelPackage()
diff --git a/src/util.cpp b/src/util.cpp
index 4381c54..e73b45b 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -869,7 +869,7 @@ QCString tempArgListToString(ArgumentList *al)
// compute the HTML anchors for a list of members
-void setAnchors(char id,MemberList *ml,int groupId)
+void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId)
{
int count=0;
MemberListIterator mli(*ml);
@@ -883,7 +883,8 @@ void setAnchors(char id,MemberList *ml,int groupId)
anchor.sprintf("%c%d",id,count++);
else
anchor.sprintf("%c%d_%d",id,groupId,count++);
- //printf("Member %s anchor %s\n",md->name(),anchor.data());
+ if (cd) anchor.prepend(escapeCharsInString(cd->name(),FALSE));
+ //printf("Member %s anchor %s\n",md->name().data(),anchor.data());
md->setAnchor(anchor);
}
}
@@ -2878,6 +2879,44 @@ bool hasVisibleRoot(BaseClassList *bcl)
//----------------------------------------------------------------------
+QCString escapeCharsInString(const char *name,bool allowDots)
+{
+ QCString result;
+ char c;
+ const char *p=name;
+ while ((c=*p++)!=0)
+ {
+ switch(c)
+ {
+ case '_': result+="__"; break;
+ case '-': result+="-"; break;
+ case ':': result+="_1"; break;
+ case '/': result+="_2"; break;
+ case '<': result+="_3"; break;
+ case '>': result+="_4"; break;
+ case '*': result+="_5"; break;
+ case '&': result+="_6"; break;
+ case '|': result+="_7"; break;
+ case '.': if (allowDots) result+="."; else result+="_8"; break;
+ case '!': result+="_9"; break;
+ case ',': result+="_00"; break;
+ case ' ': result+="_01"; break;
+ default:
+ if (Config_getBool("CASE_SENSE_NAMES") || !isupper(c))
+ {
+ result+=c;
+ }
+ else
+ {
+ result+="_";
+ result+=tolower(c);
+ }
+ break;
+ }
+ }
+ return result;
+}
+
/*! This function determines the file name on disk of an item
* given its name, which could be a class name with templete
* arguments, so special characters need to be escaped.
@@ -2906,41 +2945,7 @@ QCString convertNameToFile(const char *name,bool allowDots)
}
else // long names
{
-
- QCString result;
- char c;
- const char *p=name;
- while ((c=*p++)!=0)
- {
- switch(c)
- {
- case '_': result+="__"; break;
- case '-': result+="-"; break;
- case ':': result+="_1"; break;
- case '/': result+="_2"; break;
- case '<': result+="_3"; break;
- case '>': result+="_4"; break;
- case '*': result+="_5"; break;
- case '&': result+="_6"; break;
- case '|': result+="_7"; break;
- case '.': if (allowDots) result+="."; else result+="_8"; break;
- case '!': result+="_9"; break;
- case ',': result+="_00"; break;
- case ' ': result+="_01"; break;
- default:
- if (Config_getBool("CASE_SENSE_NAMES") || !isupper(c))
- {
- result+=c;
- }
- else
- {
- result+="_";
- result+=tolower(c);
- }
- break;
- }
- }
- return result;
+ return escapeCharsInString(name,allowDots);
}
}
diff --git a/src/util.h b/src/util.h
index 5ba2ad8..2bf9de7 100644
--- a/src/util.h
+++ b/src/util.h
@@ -73,7 +73,7 @@ class TextGeneratorOLImpl : public TextGeneratorIntf
extern void linkifyText(const TextGeneratorIntf &ol,const char *clName,const char *name,
const char *text,bool autoBreak=FALSE,bool external=TRUE);
-extern void setAnchors(char id,MemberList *ml,int groupId=-1);
+extern void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId=-1);
extern QCString fileToString(const char *name,bool filter=FALSE);
extern QCString dateToString(bool);
extern bool getDefs(const QCString &scopeName,
@@ -172,6 +172,7 @@ void addRelatedPage(const char *name,const QCString &ptitle,
int todoId,int testId,int bugId,GroupDef *gd=0,
TagInfo *tagInfo=0
);
+QCString escapeCharsInString(const char *name,bool allowDots);
#endif
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 9ab3e33..2c4087a 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -37,7 +37,14 @@
#include <qfile.h>
#include <qtextstream.h>
-#define XML_DB(x)
+// no debug info
+#define XML_DB(x) do {} while(0)
+
+// debug to stdout
+//#define XML_DB(x) printf x
+
+// debug inside output
+//#define XML_DB(x) QCString __t;__t.sprintf x;m_t << __t
QCString sectionTypeToString(BaseOutputDocInterface::SectionTypes t)
{
@@ -76,14 +83,15 @@ inline void writeXMLString(QTextStream &t,const char *s)
void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId,
const char *anchorId,const char *text)
{
- t << "<ref idref=\"" << compoundId << "\"";
- if (extRef)
+ t << "<ref idref=\"" << compoundId;
+ if (anchorId)
{
- t << " external=\"" << extRef << "\"";
+ t << "_1" << anchorId;
}
- if (anchorId)
+ t << "\"";
+ if (extRef)
{
- t << " anchor=\"" << anchorId << "\"";
+ t << " external=\"" << extRef << "\"";
}
t << ">";
writeXMLString(t,text);
@@ -166,7 +174,6 @@ template<class T> class ValStack
* Its methods are called when some XML text or markup
* needs to be written.
*/
-// TODO: htmlonly, latexonly
class XMLGenerator : public OutputDocInterface
{
public:
@@ -179,13 +186,13 @@ class XMLGenerator : public OutputDocInterface
{
m_inParStack.top() = TRUE;
m_t << "<para>" << endl;
- XML_DB(("start par at level=%d\n",m_inParStack.count());)
+ XML_DB(("start par at level=%d\n",m_inParStack.count()));
}
else if (m_inParStack.isEmpty())
{
m_inParStack.push(TRUE);
m_t << "<para>" << endl;
- XML_DB(("start par at level=%d\n",m_inParStack.count());)
+ XML_DB(("start par at level=%d\n",m_inParStack.count()));
}
}
void endParMode()
@@ -194,24 +201,24 @@ class XMLGenerator : public OutputDocInterface
{
m_inParStack.top() = FALSE;
m_t << "</para>" << endl;
- XML_DB(("end par at level=%d\n",m_inParStack.count());)
+ XML_DB(("end par at level=%d\n",m_inParStack.count()));
}
}
void startNestedPar()
{
m_inParStack.push(FALSE);
- XML_DB(("enter par level=%d\n",m_inParStack.count());)
+ XML_DB(("enter par level=%d\n",m_inParStack.count()));
}
void endNestedPar()
{
- XML_DB(("leave par level=%d\n",m_inParStack.count());)
+ XML_DB(("leave par level=%d\n",m_inParStack.count()));
if (m_inParStack.pop())
{
m_t << "</para>" << endl;
}
else
{
- XML_DB(("ILLEGAL par level!\n");)
+ //XML_DB(("ILLEGAL par level!\n"));
}
}
@@ -219,35 +226,37 @@ class XMLGenerator : public OutputDocInterface
void docify(const char *s)
{
+ XML_DB(("(docify \"%s\")\n",s));
startParMode();
writeXMLString(m_t,s);
}
void writeChar(char c)
{
- startParMode();
char s[2];s[0]=c;s[1]=0;
docify(s);
}
void writeString(const char *text)
{
- startParMode();
//m_t << text;
docify(text);
}
void startItemList()
{
+ XML_DB(("(startItemList)\n"));
startParMode();
m_t << "<itemizedlist>" << endl;;
m_inListStack.push(TRUE);
}
void startEnumList()
{
+ XML_DB(("(startEnumList)\n"));
startParMode();
m_t << "<orderedlist>";
m_inListStack.push(TRUE);
}
void writeListItem()
{
+ XML_DB(("(writeListItem)\n"));
if (!m_inListStack.isEmpty() && m_inListStack.top()) // first element
{
m_inListStack.top()=FALSE;
@@ -263,6 +272,7 @@ class XMLGenerator : public OutputDocInterface
}
void endItemList()
{
+ XML_DB(("(endItemList)\n"));
if (!m_inListStack.isEmpty() && !m_inListStack.pop()) // first element
{
endParMode();
@@ -273,6 +283,7 @@ class XMLGenerator : public OutputDocInterface
}
void endEnumList()
{
+ XML_DB(("(endEnumList)\n"));
if (!m_inListStack.isEmpty() && !m_inListStack.pop()) // first element
{
endParMode();
@@ -283,65 +294,81 @@ class XMLGenerator : public OutputDocInterface
}
void newParagraph()
{
+ XML_DB(("(newParagraph)\n"));
endParMode();
startParMode();
}
void startBold()
{
+ XML_DB(("(startBold)\n"));
startParMode();
m_t << "<bold>"; // non DocBook
}
void endBold()
{
+ XML_DB(("(endBold)\n"));
m_t << "</bold>"; // non DocBook
}
void startTypewriter()
{
+ XML_DB(("(startTypewriter)\n"));
startParMode();
m_t << "<computeroutput>";
}
void endTypewriter()
{
+ XML_DB(("(endTypewriter)\n"));
m_t << "</computeroutput>";
}
void startEmphasis()
{
+ XML_DB(("(startEmphasis)\n"));
startParMode();
m_t << "<emphasis>";
}
void endEmphasis()
{
+ XML_DB(("(endEmphasis)\n"));
m_t << "</emphasis>";
}
void startCodeFragment()
{
+ XML_DB(("(startCodeFragment)\n"));
+ startParMode();
m_t << "<programlisting>";
}
void endCodeFragment()
{
+ XML_DB(("(endCodeFragment)\n"));
m_t << "</programlisting>";
}
void startPreFragment()
{
+ XML_DB(("(startPreFragment)\n"));
+ startParMode();
m_t << "<programlisting>";
}
void endPreFragment()
{
+ XML_DB(("(endPreFragment)\n"));
m_t << "</programlisting>";
}
void writeRuler()
{
+ XML_DB(("(startParMode)\n"));
startParMode();
m_t << "<hruler/>";
}
void startDescription()
{
+ XML_DB(("(startDescription)\n"));
startParMode();
m_t << "<variablelist>";
m_inListStack.push(TRUE);
}
void endDescription()
{
+ XML_DB(("(endDescription)\n"));
if (!m_inListStack.isEmpty() && !m_inListStack.pop()) // first element
{
endNestedPar();
@@ -352,6 +379,7 @@ class XMLGenerator : public OutputDocInterface
}
void startDescItem()
{
+ XML_DB(("(startDescItem)\n"));
if (!m_inListStack.isEmpty() && m_inListStack.top()) // first element
{
m_inListStack.top()=FALSE;
@@ -365,22 +393,28 @@ class XMLGenerator : public OutputDocInterface
}
void endDescItem()
{
+ XML_DB(("(endDescItem)\n"));
m_t << "</term></varlistentry><listitem>";
startNestedPar();
}
void startDescList(SectionTypes st)
{
- startParMode();
+ XML_DB(("(startDescList)\n"));
+ endParMode();
m_t << "<simplesect kind=\"" << sectionTypeToString(st);
m_t << "\"><title>";
+ startNestedPar();
+ m_inParStack.top() = TRUE;
}
void endDescList()
{
+ XML_DB(("(endDescList)\n"));
endNestedPar();
m_t << "</simplesect>";
}
void startParamList(ParamListTypes t)
{
+ XML_DB(("(startParamList)\n"));
startParMode();
QCString kind;
switch(t)
@@ -390,150 +424,209 @@ class XMLGenerator : public OutputDocInterface
case Exception: kind="exception"; break;
}
m_t << "<parameterlist kind=\"" << kind << "\"><title>"; // non DocBook
+ startNestedPar();
+ m_inParStack.top() = TRUE;
m_inParamList = TRUE;
}
void endParamList()
{
+ XML_DB(("(endParamList)\n"));
m_inParamList = FALSE;
m_t << "</parameterlist>";
}
void endDescTitle()
{
+ m_inParStack.top() = FALSE;
+ endNestedPar();
+ XML_DB(("(endDescTitle)\n"));
m_t << "</title>";
if (!m_inParamList) startNestedPar();
}
- void writeDescItem() { }
- void startDescTable() { }
- void endDescTable() { }
+ void writeDescItem()
+ {
+ XML_DB(("(writeDescItem)\n"));
+ }
+ void startDescTable()
+ {
+ XML_DB(("(startDescTable)\n"));
+ }
+ void endDescTable()
+ {
+ XML_DB(("(endDescTable)\n"));
+ }
void startDescTableTitle()
{
+ XML_DB(("(startDescTableTitle)\n"));
m_t << "<parametername>"; // non docbook
}
void endDescTableTitle()
{
+ XML_DB(("(endDescTableTitle)\n"));
m_t << "</parametername>"; // non docbook
}
void startDescTableData()
{
+ XML_DB(("(startDescTableData)\n"));
m_t << "<parameterdescription>"; // non docbook
startNestedPar();
}
void endDescTableData()
{
+ XML_DB(("(endDescTableData)\n"));
endNestedPar();
m_t << "</parameterdescription>"; // non docbook
}
void lineBreak()
{
+ XML_DB(("(lineBreak)\n"));
startParMode();
m_t << "<linebreak/>"; // non docbook
}
void writeNonBreakableSpace(int num)
{
+ XML_DB(("(writeNonBreakableSpace)\n"));
int i;for (i=0;i<num;i++) m_t << "&nbsp;";
}
void writeObjectLink(const char *ref,const char *file,
const char *anchor, const char *text)
{
+ XML_DB(("(writeObjectLink)\n"));
startParMode();
writeXMLLink(m_t,ref,file,anchor,text);
}
void writeCodeLink(const char *ref,const char *file,
const char *anchor,const char *text)
{
+ XML_DB(("(writeCodeLink)\n"));
writeXMLLink(m_t,ref,file,anchor,text);
}
void startHtmlLink(const char *url)
{
+ XML_DB(("(startHtmlLink)\n"));
startParMode();
m_t << "<ulink url=\"" << url << "\">";
}
void endHtmlLink()
{
+ XML_DB(("(endHtmlLink)\n"));
m_t << "</ulink>";
}
void writeMailLink(const char *url)
{
+ XML_DB(("(writeMailLink)\n"));
startParMode();
m_t << "<email>";
docify(url);
m_t << "</email>";
}
- void startSection(const char *id,const char *,bool)
+ void startSection(const char *id,const char *,bool subsection)
{
- m_t << "<sect1 id=\"" << id << "\">";
+ XML_DB(("(startSection)\n"));
+ endParMode();
+ m_t << "<sect";
+ if (subsection) m_t << "2"; else m_t << "1";
+ m_t << " id=\"" << id << "\">";
+ startNestedPar();
+ m_inParStack.top() = TRUE;
}
- void endSection(const char *,bool)
+ void endSection(const char *,bool subsection)
{
- m_t << "</sect1>";
+ XML_DB(("(endSection)\n"));
+ m_t << "</sect";
+ if (subsection) m_t << "2"; else m_t << "1";
+ m_t << ">";
+ m_inParStack.top() = FALSE;
+ endNestedPar();
}
void startSubsection()
{
+ XML_DB(("(startSubsection)\n"));
+ endParMode();
m_t << "<sect2>";
+ startNestedPar();
+ m_inParStack.top() = TRUE;
}
void endSubsection()
{
+ XML_DB(("(endSubsection)\n"));
m_t << "</sect2>";
+ m_inParStack.top() = FALSE;
+ endNestedPar();
}
void startSubsubsection()
{
+ XML_DB(("(startSubsubsection)\n"));
+ endParMode();
m_t << "<sect3>";
+ startNestedPar();
+ m_inParStack.top() = TRUE;
}
void endSubsubsection()
{
+ XML_DB(("(endSubsubsection)\n"));
m_t << "</sect3>";
+ m_inParStack.top() = FALSE;
+ endNestedPar();
}
void startCenter()
{
+ XML_DB(("(startCenter)\n"));
startParMode();
m_t << "<center>"; // non docbook
}
void endCenter()
{
+ XML_DB(("(endCenter)\n"));
m_t << "</center>"; // non docbook
}
void startSmall()
{
+ XML_DB(("(startSmall)\n"));
startParMode();
m_t << "<small>"; // non docbook
}
void endSmall()
{
+ XML_DB(("(endSmall)\n"));
m_t << "</small>"; // non docbook
}
void startSubscript()
{
+ XML_DB(("(startSubscript)\n"));
startParMode();
m_t << "<subscript>";
}
void endSubscript()
{
+ XML_DB(("(endSubscript)\n"));
m_t << "</subscript>";
}
void startSuperscript()
{
+ XML_DB(("(startSuperscript)\n"));
startParMode();
m_t << "<superscript>";
}
void endSuperscript()
{
+ XML_DB(("(endSuperscript)\n"));
m_t << "</superscript>";
}
void startTable(int cols)
{
- XML_DB(("startTable\n");)
+ XML_DB(("startTable\n"));
startParMode();
m_t << "<table cols=\"" << cols << "\">\n";
}
void endTable()
{
- XML_DB(("endTable\n");)
+ XML_DB(("endTable\n"));
m_t << "</row>\n</table>";
}
void nextTableRow()
{
- XML_DB(("nextTableRow\n");)
+ XML_DB(("(nextTableRow)\n"));
m_t << "<row><entry>";
// we need manually add a para here because cells are
@@ -543,12 +636,12 @@ class XMLGenerator : public OutputDocInterface
}
void endTableRow()
{
- XML_DB(("endTableRow\n");)
+ XML_DB(("(endTableRow)\n"));
m_t << "</row>" << endl;
}
void nextTableColumn()
{
- XML_DB(("nextTableColumn\n");)
+ XML_DB(("(nextTableColumn)\n"));
m_t << "<entry>";
// we need manually add a para here because cells are
@@ -558,7 +651,7 @@ class XMLGenerator : public OutputDocInterface
}
void endTableColumn()
{
- XML_DB(("endTableColumn\n");)
+ XML_DB(("(endTableColumn)\n"));
// we need manually add a para here because cells are
// parsed before the table is generated, and thus
// are already parsed as if they are inside a paragraph.
@@ -579,20 +672,28 @@ class XMLGenerator : public OutputDocInterface
void startTitle()
{
+ XML_DB(("(startTitle)\n"));
m_t << "<title>";
+ startNestedPar();
+ m_inParStack.top() = TRUE;
}
void endTitle()
{
+ m_inParStack.top() = FALSE;
+ endNestedPar();
+ XML_DB(("(endTitle)\n"));
m_t << "</title>" << endl;
}
void writeAnchor(const char *id,const char *name)
{
+ XML_DB(("(writeAnchor)\n"));
startParMode();
m_t << "<anchor id=\"" << id << "_" << name << "\"/>";
}
void writeSectionRef(const char *,const char *id,
const char *name,const char *text)
{
+ XML_DB(("(writeSectionRef)\n"));
startParMode();
m_t << "<link linkend=\"" << id << "_" << name << "\">";
docify(text);
@@ -604,6 +705,7 @@ class XMLGenerator : public OutputDocInterface
}
void addIndexItem(const char *primaryie,const char *secondaryie)
{
+ XML_DB(("(addIndexItem)\n"));
startParMode();
m_t << "<indexentry><primaryie>";
docify(primaryie);
@@ -613,6 +715,7 @@ class XMLGenerator : public OutputDocInterface
}
void writeFormula(const char *id,const char *text)
{
+ XML_DB(("(writeFormula)\n"));
startParMode();
m_t << "<formula id=\"" << id << "\">"; // non Docbook
docify(text);
@@ -620,6 +723,7 @@ class XMLGenerator : public OutputDocInterface
}
void startImage(const char *name,const char *size,bool /*caption*/)
{
+ XML_DB(("(startImage)\n"));
startParMode();
m_t << "<image name=\"" << name << "\"";
if (size) m_t << " size=\"" << size << "\"";
@@ -627,35 +731,43 @@ class XMLGenerator : public OutputDocInterface
}
void endImage(bool)
{
+ XML_DB(("(endImage)\n"));
m_t << "</image>";
}
void startDotFile(const char *name,bool /*caption*/)
{
+ XML_DB(("(startDotFile)\n"));
startParMode();
m_t << "<dotfile name=\"" << name << "\">"; // non docbook
}
void endDotFile(bool)
{
+ XML_DB(("(endDotFile)\n"));
m_t << "</dotfile>";
}
void startTextLink(const char *name,const char *anchor)
{
+ XML_DB(("(startTextLink)\n"));
startParMode();
m_t << "<ulink url=\"" << name << "#" << anchor << "\">";
}
void endTextLink()
{
+ XML_DB(("(endTextLink)\n"));
m_t << "<ulink>";
}
void startPageRef()
{
+ XML_DB(("(startPageRef)\n"));
}
void endPageRef(const char *,const char *)
{
+ XML_DB(("(endPageRef)\n"));
}
void writeLineNumber(const char *,const char *file, // TODO: support external references
const char *anchor,int l)
{
+ XML_DB(("(writeLineNumber)\n"));
m_t << "<linenumber";
m_t << " line=\"" << l << "\"";
if (file)
@@ -666,34 +778,61 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeLine()
{
+ XML_DB(("(startCodeLine)\n"));
startParMode();
m_t << "<codeline>"; // non DocBook
}
void endCodeLine()
{
+ XML_DB(("(endCodeLine)\n"));
m_t << "</codeline>" << endl; // non DocBook
}
void startCodeAnchor(const char *id)
{
+ XML_DB(("(startCodeAnchor)\n"));
startParMode();
m_t << "<anchor id=\"" << id << "\">";
}
void endCodeAnchor()
{
+ XML_DB(("(endCodeAnchor)\n"));
m_t << "</anchor>";
}
void startFontClass(const char *colorClass)
{
+ XML_DB(("(startFontClass)\n"));
m_t << "<highlight class=\"" << colorClass << "\">"; // non DocBook
}
void endFontClass()
{
+ XML_DB(("(endFontClass)\n"));
m_t << "</highlight>"; // non DocBook
}
void codify(const char *text)
{
+ XML_DB(("(codify \"%s\")\n",text));
docify(text);
}
+ void startHtmlOnly()
+ {
+ XML_DB(("(startHtmlOnly)\n"));
+ m_t << "<htmlonly>" << endl;
+ }
+ void endHtmlOnly()
+ {
+ XML_DB(("(endHtmlOnly)\n"));
+ m_t << "</htmlonly>" << endl;
+ }
+ void startLatexOnly()
+ {
+ XML_DB(("(startLatexOnly)\n"));
+ m_t << "<latexonly>" << endl;
+ }
+ void endLatexOnly()
+ {
+ XML_DB(("(endLatexOnly)\n"));
+ m_t << "</latexonly>" << endl;
+ }
// Generator specific functions
@@ -782,15 +921,16 @@ static void writeXMLDocBlock(QTextStream &t,
const QCString &name,
const QCString &text)
{
- if (text.stripWhiteSpace().isEmpty()) return;
+ QCString stext = text.stripWhiteSpace();
+ if (text.isEmpty()) return;
XMLGenerator *xmlGen = new XMLGenerator;
- xmlGen->startParMode();
+ //xmlGen->startParMode();
parseDoc(*xmlGen,
fileName, // input definition file
lineNr, // input definition line
scope, // scope (which should not be linked to)
name, // member (which should not be linked to)
- text+"\n" // actual text
+ stext+"\n" // actual text
);
xmlGen->endParMode();
t << xmlGen->getContents();
@@ -812,7 +952,39 @@ void writeXMLCodeBlock(QTextStream &t,FileDef *fd)
delete xmlGen;
}
-
+static void writeMemberReference(QTextStream &t,Definition *def,MemberDef *rmd,const char *tagName)
+{
+ QCString scope = rmd->getScopeString();
+ QCString name = rmd->name();
+ if (!scope.isEmpty() && scope!=def->name())
+ {
+ name.prepend(scope+"::");
+ }
+ Definition *d = rmd->getOuterScope();
+ if (d==Doxygen::globalScope) d=rmd->getBodyDef();
+ if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
+ // link to definition in code
+ {
+ t << " <" << tagName << " id=\"";
+ t << rmd->getBodyDef()->getOutputFileBase()
+ << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
+ << rmd->anchor()
+ << "\">";
+ writeXMLString(t,name);
+ t << "</" << tagName << ">" << endl;
+ }
+ else if (rmd->isLinkable() && d && d->isLinkable())
+ // link to declaration in documentation (in absense of a definition)
+ {
+ t << " <" << tagName << " id=\"";
+ t << d->getOutputFileBase()
+ << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
+ << rmd->anchor()
+ << "\">";
+ writeXMLString(t,name);
+ t << "</" << tagName << ">" << endl;
+ }
+}
static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
{
@@ -894,7 +1066,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
md->memberType()!=MemberDef::Enumeration
)
{
- QCString typeStr = replaceAnonymousScopes(md->typeString());
+ QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString());
t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),scopeName,md->name(),typeStr);
t << "</type>" << endl;
@@ -1035,7 +1207,13 @@ static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
{
t << " <location file=\""
<< md->getDefFileName() << "\" line=\""
- << md->getDefLine() << "\"/>" << endl;
+ << md->getDefLine() << "\"";
+ if (md->getStartBodyLine()!=-1)
+ {
+ t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
+ << md->getEndBodyLine() << "\"";
+ }
+ t << "/>" << endl;
}
//printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers());
@@ -1045,24 +1223,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
MemberDef *rmd;
for (mdi.toFirst();(rmd=mdi.current());++mdi)
{
- if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
- {
- t << " <references id=\"";
- t << rmd->getBodyDef()->getOutputFileBase()
- << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
- << rmd->anchor()
- << "\" line=\""
- << rmd->getStartBodyLine()
- << "\">";
- QCString scope = rmd->getScopeString();
- QCString name = rmd->name();
- if (!scope.isEmpty() && scope!=def->name())
- {
- name.prepend(scope+"::");
- }
- writeXMLString(t,name);
- t << "</references>" << endl;
- }
+ writeMemberReference(t,def,rmd,"references");
}
}
if (md->getReferencedByMembers())
@@ -1071,24 +1232,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &t,Definition *def)
MemberDef *rmd;
for (mdi.toFirst();(rmd=mdi.current());++mdi)
{
- if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef())
- {
- t << " <referencedby id=\"";
- t << rmd->getBodyDef()->getOutputFileBase()
- << "_1" // encoded `:' character (see util.cpp:convertNameToFile)
- << rmd->anchor()
- << "\" line=\""
- << rmd->getStartBodyLine()
- << "\">";
- QCString scope = rmd->getScopeString();
- QCString name = rmd->name();
- if (!scope.isEmpty() && scope!=def->name())
- {
- name.prepend(scope+"::");
- }
- writeXMLString(t,name);
- t << "</referencedby>" << endl;
- }
+ writeMemberReference(t,def,rmd,"referencedby");
}
}
@@ -1256,9 +1400,15 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &t)
collaborationGraph.writeXML(t);
t << " </collaborationgraph>" << endl;
}
- t << " <location file=\""
+ t << " <location file=\""
<< cd->getDefFileName() << "\" line=\""
- << cd->getDefLine() << "\"/>" << endl;
+ << cd->getDefLine() << "\"";
+ if (cd->getStartBodyLine()!=-1)
+ {
+ t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
+ << cd->getEndBodyLine() << "\"";
+ }
+ t << "/>" << endl;
t << " </compounddef>" << endl;
}
@@ -1461,7 +1611,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &t)
t << " <compounddef id=\""
<< gd->getOutputFileBase() << "\" kind=\"group\">" << endl;
- t << " <name>" << convertToXML(gd->name()) << "</name>" << endl;
+ t << " <compoundname>" << convertToXML(gd->name()) << "</compoundname>" << endl;
t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
FileList *fl = gd->getFiles();
@@ -1540,8 +1690,8 @@ static void generateXMLForPage(PageInfo *pi,QTextStream &t)
t << " <compounddef id=\"";
if (Config_getBool("CASE_SENSE_NAMES")) t << pi->name; else t << pi->name.lower();
- t << "\">" << endl;
- t << " <name>" << pi->name << "</name>" << endl;
+ t << "\" kind=\"page\">" << endl;
+ t << " <compoundname>" << pi->name << "</compoundname>" << endl;
SectionInfo *si = Doxygen::sectionDict.find(pi->name);
if (si)
{