Commit 570375c3 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.4.2-20050410

parent 4fa6a604
DOXYGEN Version 1.4.2
DOXYGEN Version 1.4.2-20050410
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (28 March 2005)
Dimitri van Heesch (10 April 2005)
......@@ -46,17 +46,18 @@ distclean: clean
DATE=$(shell date "+%B %Y")
MAN1DIR = man/man1
install: doxywizard_install
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/man/man1
cat doc/doxygen.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/man/man1/doxygen.1 ; \
cat doc/doxytag.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/man/man1/doxytag.1 ; \
cat doc/doxywizard.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/man/man1/doxywizard.1 ;
$(INSTTOOL) -d $(INSTALL)/$(MAN1DIR)
cat doc/doxygen.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxygen.1 ; \
cat doc/doxytag.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxytag.1 ; \
cat doc/doxywizard.1 | sed -e "s/DATE/\$(DATE)/g" -e "s/VERSION/$(VERSION)/g" > $(INSTALL)/$(MAN1DIR)/doxywizard.1 ;
install_docs: install
install_docs:
$(INSTTOOL) -d $(DOCDIR)
cp -r doc $(DOCDIR)
cp -r examples $(DOCDIR)
......
DOXYGEN Version 1.4.2
DOXYGEN Version 1.4.2_20050410
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (28 March 2005)
Dimitri van Heesch (dimitri@stack.nl) (10 April 2005)
1.4.2
1.4.2-20050410
......@@ -31,6 +31,7 @@
#include "doxywizard.h"
#include "expert.h"
#include "config.h"
#include "version.h"
const int messageTimeout = 5000; //!< status bar message timeout in millisec.
......@@ -1310,9 +1311,9 @@ void MainWidget::about()
{
QString msg;
QTextStream t(&msg,IO_WriteOnly);
t << "<qt><center>A tool to configure and run doxygen "
"on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2004</center><p>"
t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+
" on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2005</center><p>"
"</qt>";
QMessageBox::about(this,"Doxygen GUI",msg);
}
......
......@@ -28,7 +28,7 @@ f_insttool=NO
f_english=NO
f_wizard=NO
f_thread=NO
f_langs=nl,se,cz,fr,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za
f_langs=nl,se,cz,fr,id,it,de,jp,je,es,fi,ru,hr,pl,pt,hu,kr,ke,ro,si,cn,no,br,dk,sk,ua,gr,tw,sr,ca,lt,za
while test -n "$1"; do
case $1 in
......@@ -145,12 +145,18 @@ if test -z "$f_platform"; then
;;
Darwin:*)
f_platform=macosx-c++
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
;;
FreeBSD:*)
f_platform=freebsd-g++
;;
HP-UX:*)
f_platform=hpux-g++
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
;;
IRIX64:*)
f_platform=irix-64
......@@ -181,6 +187,9 @@ if test -z "$f_platform"; then
;;
SunOS:5*)
f_platform=solaris-g++
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
;;
ULTRIX:*)
f_platform=ultrix-g++
......@@ -523,7 +532,7 @@ fi
echo -n " Generating src/lang_cfg.h..."
echo $f_langs | $f_perl -e '@l=split(/,/,<STDIN>);
chomp @l;
@allowed=(split(/,/,"NL,SE,CZ,FR,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA"));
@allowed=(split(/,/,"NL,SE,CZ,FR,ID,IT,DE,JP,JE,ES,FI,RU,HR,PL,PT,HU,KR,KE,RO,SI,CN,NO,BR,DK,SK,UA,GR,TW,SR,CA,LT,ZA"));
foreach my $elem (@l){
$elem =~ tr/a-z/A-Z/;
$r=0;
......
......@@ -72,6 +72,9 @@ doxygen -w html header.html footer.html stylesheet.css
\verbatim
doxygen -w latex header.tex doxygen.sty
\endverbatim
If you need non-default options (for instance to use pdflatex) you need
to make a config file with those options set correctly and then specify
that config file as the forth argument.
<li>For RTF output, you can generate the default style sheet file (see
\ref cfg_rtf_stylesheet_file "RTF_STYLESHEET_FILE") using:
\verbatim
......
......@@ -23,13 +23,13 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.4.1-20050315), 30 languages
Currently (version 1.4.2), 31 languages
are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En),
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian..
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian..
The table of information related to the supported languages follows.
It is sorted by language alphabetically. The <b>Status</b> column
......@@ -140,6 +140,12 @@ when the translator was updated.
<td>akiss at users dot sourceforge dot net<br>foldvari lost at cyberspace</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Indonesian</td>
<td>Hendy Irawan</td>
<td>ceefour at gauldong dot net</td>
<td>up-to-date</td>
</tr>
<tr bgcolor="#ffffff">
<td>Italian</td>
<td>Alessandro Falappa<br>Ahmed Aldo Faisal</td>
......@@ -291,6 +297,8 @@ when the translator was updated.
Hungarian & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & 1.4.1 \\
~ & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & ~ \\
\hline
Indonesian & Hendy Irawan & {\tt\tiny ceefour@gauldong.net} & up-to-date \\
\hline
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
\hline
......
......@@ -58,6 +58,9 @@ TranslatorHungarian
&Aacute;kos Kiss: akiss@users.sourceforge.net
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
TranslatorIndonesian
Hendy Irawan: ceefour@gauldong.net
TranslatorItalian
Alessandro Falappa: alessandro@falappa.net
Ahmed Aldo Faisal: aaf23@cam.ac.uk
......
(1.4.1-20050315)
(1.4.2)
Doxygen supports the following 30 languages (sorted alphabetically):
Doxygen supports the following 31 languages (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En),
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian.
German, Greek, Hungarian, Indonesian, Italian, Japanese (+En), Korean
(+En), Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 9 translators are up-to-date, 21 translators are based on
Of them, 10 translators are up-to-date, 21 translators are based on
some adapter class, and 2 are English based.
----------------------------------------------------------------------
......@@ -23,6 +23,7 @@ still may be some details listed even for them:
TranslatorDutch -- Remove the obsolete methods (never used).
TranslatorEnglish -- Remove the obsolete methods (never used).
TranslatorGerman -- Remove the obsolete methods (never used).
TranslatorIndonesian -- Remove the obsolete methods (never used).
TranslatorItalian
TranslatorRussian
TranslatorSwedish
......@@ -476,6 +477,25 @@ TranslatorHungarian (TranslatorAdapter_1_4_1) 1 method to implement
QCString trNoDescriptionAvailable()
TranslatorIndonesian (Translator)
--------------------
Implements 192 of the required methods.
Obsolete methods (should be removed, never used):
virtual QCString trHeaderFilesDescription()
virtual QCString trField(bool first_capital, bool singular)
virtual QCString trPackageDocumentation()
virtual QCString trSources()
virtual QCString trReimplementedForInternalReasons()
virtual QCString trInterfaces()
virtual QCString trHeaderFiles()
virtual QCString trBugsAndLimitations()
virtual QCString trEnumerationValueDocumentation()
virtual QCString trNoDescriptionAvailable()
TranslatorJapanese (TranslatorAdapter_1_3_9) 7 methods to implement
------------------
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.4.2
Version: 1.4.2_20050410
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -320,7 +320,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng);
BEGIN(CComment);
}
<CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code") { /* start of a verbatim block */
<CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code")/[ \r\t\n] { /* start of a verbatim block */
copyToOutput(yytext,yyleng);
g_blockName=&yytext[1];
g_lastCommentContext = YY_START;
......@@ -423,7 +423,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng);
BEGIN(g_readLineCtx);
}
<CComment,ReadLine>("\\\\"|"@@")[~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
<CComment,ReadLine>[\\@][\\@][~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
copyToOutput(yytext,yyleng);
}
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
......@@ -507,6 +507,7 @@ void replaceComment(int offset)
*/
void convertCppComments(BufStr *inBuf,BufStr *outBuf,const char *fileName)
{
//printf("convertCppComments(%s)\n",fileName);
g_inBuf = inBuf;
g_outBuf = outBuf;
g_inBufPos = 0;
......
......@@ -19,7 +19,10 @@
#include "qtbc.h"
#include "entry.h"
bool parseCommentBlock(/* in,out */ Entry *curEntry,
class ParserInterface;
bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in,out */ Entry *curEntry,
/* in */ const QCString &comment,
/* in */ const QCString &fileName,
/* in */ int lineNr,
......
......@@ -44,6 +44,7 @@
#include "reflist.h"
#include "code.h"
#include "debug.h"
#include "parserintf.h"
// forward declarations
static void handleBrief(const QCString &);
......@@ -288,6 +289,7 @@ class GuardedSection
* statics
*/
static ParserInterface *langParser; // the language parser that is calling us
static const char * inputString; // input string
static int inputPosition; // read pointer
static QCString yyFileName; // file name that is read from
......@@ -322,6 +324,7 @@ static QCString xrefListTitle;
static Protection protection;
static bool xrefAppendFlag;
static bool inGroupParamFound;
//-----------------------------------------------------------------------------
......@@ -812,10 +815,11 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN(ReadFormulaLong);
}
<Comment>{CMD}"{" { // begin of a group
handleGroupStartCommand(nameHeader);
langParser->handleGroupStartCommand(nameHeader);
}
<Comment>{CMD}"}" { // end of a group
handleGroupEndCommand();
langParser->handleGroupEndCommand();
nameHeader.resize(0);
}
<Comment>{CMD}[$@\\&~<>#%] { // escaped character
addOutput(yytext);
......@@ -1507,12 +1511,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
current->groups->append(
new Grouping(yytext, Grouping::GROUPING_INGROUP)
);
BEGIN( Comment );
inGroupParamFound=TRUE;
}
<InGroupParam>{DOCNL} { // missing argument
warn(yyFileName,yyLineNr,
"Warning: Missing group name for \\ingroup command"
);
if (!inGroupParamFound)
{
warn(yyFileName,yyLineNr,
"Warning: Missing group name for \\ingroup command"
);
}
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
BEGIN( Comment );
......@@ -1530,7 +1537,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<FnParam>{DOCNL} { // end of argument
if (*yytext=='\n') yyLineNr++;
addOutput('\n');
parsePrototype(functionProto);
langParser->parsePrototype(functionProto);
BEGIN( Comment );
}
<FnParam>{LC} { // line continuation
......@@ -1558,7 +1565,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
else // overload declaration
{
makeStructuralIndicator(Entry::OVERLOADDOC_SEC);
parsePrototype(functionProto);
langParser->parsePrototype(functionProto);
}
BEGIN( Comment );
}
......@@ -1913,6 +1920,7 @@ static void handleEndIf(const QCString &)
static void handleIngroup(const QCString &)
{
inGroupParamFound=FALSE;
BEGIN( InGroupParam );
}
......@@ -2010,7 +2018,8 @@ static void checkFormula()
//----------------------------------------------------------------------------
bool parseCommentBlock(/* in,out */ Entry *curEntry,
bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in,out */ Entry *curEntry,
/* in */ const QCString &comment,
/* in */ const QCString &fileName,
/* in */ int lineNr,
......@@ -2025,6 +2034,7 @@ bool parseCommentBlock(/* in,out */ Entry *curEntry,
initParser();
guards.setAutoDelete(TRUE);
guards.clear();
langParser = parser;
current = curEntry;
inputString = comment;
if (inputString==0) return FALSE; // avoid empty strings
......
......@@ -253,6 +253,7 @@
<xsd:complexType name="locationType">
<xsd:attribute name="file" type="xsd:string" />
<xsd:attribute name="line" type="xsd:integer" />
<xsd:attribute name="bodyfile" type="xsd:string" />
<xsd:attribute name="bodystart" type="xsd:integer" />
<xsd:attribute name="bodyend" type="xsd:integer" />
</xsd:complexType>
......
......@@ -253,6 +253,7 @@
" <xsd:complexType name=\"locationType\">\n"
" <xsd:attribute name=\"file\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"line\" type=\"xsd:integer\" />\n"
" <xsd:attribute name=\"bodyfile\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"bodystart\" type=\"xsd:integer\" />\n"
" <xsd:attribute name=\"bodyend\" type=\"xsd:integer\" />\n"
" </xsd:complexType>\n"
......
......@@ -249,7 +249,7 @@ static bool readCodeFragment(const char *fileName,
{
//printf("readCodeFragment(%s,%d,%d)\n",fileName,startLine,endLine);
if (fileName==0 || fileName[0]==0) return FALSE; // not a valid file name
QCString cmd=getFileFilter(fileName)+" \""+fileName+"\"";
QCString cmd="\"" + getFileFilter(fileName)+"\" \""+fileName+"\"";
FILE *f = Config_getBool("FILTER_SOURCE_FILES") ? popen(cmd,"r") : fopen(fileName,"r");
bool found=FALSE;
if (f)
......
......@@ -864,7 +864,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member))
{
//printf("resolveRef %s = %p (linkable?=%d)\n",g_token->name.data(),member,member ? member->isLinkable() : FALSE);
if (member) // member link
if (member && member->isLinkable()) // member link
{
children.append(new
DocLinkedWord(parent,name,
......@@ -874,7 +874,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
)
);
}
else // compound link
else if (compound->isLinkable()) // compound link
{
if (compound->definitionType()==Definition::TypeFile)
{
......@@ -892,8 +892,12 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
)
);
}
else // not linkable
{
children.append(new DocWord(parent,name));
}
}
else if (!g_insideHtmlLink && g_token->name.at(len-1)==':')
else if (!g_insideHtmlLink && len>1 && g_token->name.at(len-1)==':')
{
// special case, where matching Foo: fails to be an Obj-C reference,
// but Foo itself might be linkable.
......
......@@ -65,6 +65,7 @@
#include "commentcnv.h"
#include "cmdmapper.h"
#include "searchindex.h"
#include "parserintf.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
......@@ -214,7 +215,16 @@ static void addRelatedPage(Entry *root)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname])) break;
}
//printf("---> addRelatedPage() %s gd=%p\n",root->name.data(),gd);
PageDef *pd = addRelatedPage(root->name,root->args,root->doc,root->anchors,
QCString doc;
if (root->brief.isEmpty())
{
doc=root->doc;
}
else
{
doc=root->brief+"\n\n"+root->doc;
}
PageDef *pd = addRelatedPage(root->name,root->args,doc,root->anchors,
root->fileName,root->startLine,
root->sli,
gd,root->tagInfo
......@@ -2261,16 +2271,23 @@ static void buildFunctionList(Entry *root)
rname=rname.right(rname.length()-root->parent->name.length()-2);
}
NamespaceDef *nd = 0;
bool isMember=FALSE;
int memIndex=rname.find("::");
int memIndex=rname.findRev("::");
if (memIndex!=-1)
{
int ts=rname.find('<');
int te=rname.find('>');
if (ts==-1 || te==-1)
{
NamespaceDef *nd = Doxygen::namespaceSDict.find(rname.left(memIndex));
isMember=nd==0;
nd = Doxygen::namespaceSDict.find(rname.left(memIndex));
isMember = nd==0;
if (nd)
{
// strip namespace scope from name
scope=rname.left(memIndex);
rname=rname.right(rname.length()-memIndex-2);
}
}
else
{
......@@ -2288,7 +2305,7 @@ static void buildFunctionList(Entry *root)
)
)
{
Debug::print(Debug::Functions,0,"--> member %s of class %s!\n",
Debug::print(Debug::Functions,0," --> member %s of class %s!\n",
rname.data(),cd->name().data());
addMethodToClass(root,cd,rname,isFriend);
}
......@@ -2308,26 +2325,25 @@ static void buildFunctionList(Entry *root)
*/
bool found=FALSE;
MemberName *mn;
//MemberDef *fmd;
MemberDef *md=0;
if ((mn=Doxygen::functionNameSDict[rname]))
{
Debug::print(Debug::Functions,0,"--> function %s already found!\n",rname.data());
Debug::print(Debug::Functions,0," --> function %s already found!\n",rname.data());
MemberNameIterator mni(*mn);
MemberDef *md;
for (mni.toFirst();((md=mni.current()) && !found);++mni)
for (mni.toFirst();(!found && (md=mni.current()));++mni)
{
NamespaceDef *nd = md->getNamespaceDef();
NamespaceDef *mnd = md->getNamespaceDef();
NamespaceDef *rnd = 0;
if (!root->parent->name.isEmpty())
{
rnd = getResolvedNamespace(root->parent->name);
}
FileDef *fd = md->getFileDef();
FileDef *mfd = md->getFileDef();
QCString nsName,rnsName;
if (nd) nsName = nd->name().copy();
if (mnd) nsName = mnd->name().copy();
if (rnd) rnsName = rnd->name().copy();
NamespaceSDict *unl = fd ? fd->getUsedNamespaces() : 0;
SDict<Definition> *ucl = fd ? fd->getUsedClasses() : 0;
NamespaceSDict *unl = mfd ? mfd->getUsedNamespaces() : 0;
SDict<Definition> *ucl = mfd ? mfd->getUsedClasses() : 0;
//printf("matching arguments for %s%s %s%s\n",
// md->name().data(),md->argsString(),rname.data(),argListToString(root->argList).data());
if (
......@@ -2341,9 +2357,9 @@ 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
((nd==0 && rnd==0 && fd!=0 && // no external reference and
fd->absFilePath()==root->fileName // prototype in the same file
found=(mnd && rnd && nsName==rnsName) || // members are in the same namespace
((mnd==0 && rnd==0 && mfd!=0 && // no external reference and
mfd->absFilePath()==root->fileName // prototype in the same file
)
);
// otherwise, allow a duplicate global member with the same argument list
......@@ -2378,7 +2394,7 @@ static void buildFunctionList(Entry *root)
md->setArgumentList(argList);
}
}
else if (!md->documentation().isEmpty() && !root->doc.isEmpty() && nd==rnd)
else if (!md->documentation().isEmpty() && !root->doc.isEmpty() && mnd==rnd)
{
warn(root->docFile,root->docLine,"Warning: member %s: ignoring the detailed description found here, since another one was found at line %d of file %s!",md->name().data(),md->docLine(),md->docFile().data());
}
......@@ -2387,7 +2403,7 @@ static void buildFunctionList(Entry *root)
{
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
}
else if (!md->briefDescription().isEmpty() && !root->brief.isEmpty() && nd==rnd)
else if (!md->briefDescription().isEmpty() && !root->brief.isEmpty() && mnd==rnd)
{
warn(root->briefFile,root->briefLine,"Warning: member %s: ignoring the brief description found here, since another one was found at line %d of file %s!",md->name().data(),md->briefLine(),md->briefFile().data());
}
......@@ -2416,19 +2432,19 @@ static void buildFunctionList(Entry *root)
}
if (!found) /* global function is unique with respect to the file */
{
Debug::print(Debug::Functions,0," --> new function %s found!\n",rname.data());
//printf("New function type=`%s' name=`%s' args=`%s' bodyLine=%d\n",
// root->type.data(),rname.data(),root->args.data(),root->bodyLine);
// new global function
ArgumentList *tArgList = root->tArgLists ? root->tArgLists->last() : 0;
QCString name=removeRedundantWhiteSpace(rname);
MemberDef *md=new MemberDef(
md=new MemberDef(
root->fileName,root->startLine,
root->type,name,root->args,root->exception,
root->protection,root->virt,root->stat,FALSE,
MemberDef::Function,tArgList,root->argList);
md->setTagInfo(root->tagInfo);
//md->setDefFile(root->fileName);
//md->setDefLine(root->startLine);
......@@ -2446,27 +2462,26 @@ static void buildFunctionList(Entry *root)
md->setMemberSpecifiers(root->memSpec);
md->setMemberGroupId(root->mGrpId);
// see if the function is inside a namespace
NamespaceDef *nd = 0;
QCString scope;
if (root->parent->section == Entry::NAMESPACE_SEC )
// see if the function is inside a namespace that was not part of
// the name already (in that case nd should be non-zero already)
if (nd==0 && root->parent->section == Entry::NAMESPACE_SEC )
{
QCString nscope=removeAnonymousScopes(root->parent->name);
if (!nscope.isEmpty())
{
nd = getResolvedNamespace(nscope);
if (nd)
{
scope+=nd->name();
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
scope+=".";
}
else
{
scope+="::";
}
}
}
}
if (!scope.isEmpty())
{
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
scope = substitute(scope,"::",".")+".";
}
else
{
scope+="::";
}
}
......@@ -2518,7 +2533,6 @@ static void buildFunctionList(Entry *root)
nd->insertMember(md);
md->setNamespace(nd);
}
if (fd)
{
// add member to the file (we do this even if we have already
......@@ -2551,7 +2565,14 @@ static void buildFunctionList(Entry *root)
}
else
{
//printf("Function already found!\n");
bool ambig;
FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
if (fd)
{
// add member to the file (we do this even if we have already
// inserted it into the namespace)
fd->insertMember(md);
}
}
//printf("unrelated function %d `%s' `%s' `%s'\n",
......@@ -4215,7 +4236,7 @@ static bool findGlobalMember(Entry *root,
}
}
}
if (!found) // no match
if (!found && !root->relatesDup) // no match
{
QCString fullFuncDecl=decl;
if (root->argList) fullFuncDecl+=argListToString(root->argList);
......@@ -5297,6 +5318,15 @@ static void findMemberDocumentation(Entry *root)
root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId
);
bool isFunc=TRUE;
if (root->relatesDup && !root->relates.isEmpty())
{
QCString tmp = root->relates;
root->relates.resize(0);
findMemberDocumentation(root);
root->relates = tmp;
}
if ( // detect func variable/typedef to func ptr
(i=findFunctionPtr(root->type,&l))!=-1
)
......@@ -5669,27 +5699,30 @@ static void findEnumDocumentation(Entry *root)
&& root->name[0]!='@' // skip anonymous enums
)
{
//printf("Found docs for enum with name `%s'\n",root->name.data());
//printf("Found docs for enum with name `%s' in context %s\n",
// root->name.data(),root->parent->name.data());
int i;
ClassDef *cd=0;
QCString name;
if ((i=root->name.findRev("::"))!=-1) // scope is specified
QCString scope;
if ((i=root->name.findRev("::"))!=-1) // scope is specified as part of the name
{
QCString scope=root->name.left(i); // extract scope
name=root->name.right(root->name.length()-i-2); // extract name
cd=getClass(scope);
scope=root->name.left(i); // extract scope
//printf("Scope=`%s' Name=`%s'\n",scope.data(),name.data());
}
else // no scope, check the scope in which the docs where found
else // just the name
{
if (( root->parent->section & Entry::COMPOUND_MASK )
&& !root->parent->name.isEmpty()
) // found enum docs inside a compound
{
cd=getClass(root->parent->name);
}
name=root->name.copy();
name=root->name;
}
if (( root->parent->section & Entry::SCOPE_MASK )
&& !root->parent->name.isEmpty()
) // found enum docs inside a compound
{
if (!scope.isEmpty()) scope.prepend("::");
scope.prepend(root->parent->name);
}
ClassDef *cd=getClass(scope);
if (!name.isEmpty())
{
bool found=FALSE;
......@@ -7270,7 +7303,7 @@ static void copyAndFilterFile(const char *fileName,BufStr &dest)
}
else
{
QCString cmd=filterName+" \""+fileName+"\"";
QCString cmd="\""+filterName+"\" \""+fileName+"\"";
FILE *f=popen(cmd,"r");
if (!f)
{
......@@ -7339,8 +7372,7 @@ static void copyStyleSheet()
}
}
#ifdef USE_TMP_FILE
#if 0
static void readFiles(const QCString &tmpFile)
{
QFile outFile(tmpFile);
......@@ -7386,36 +7418,27 @@ static void readFiles(const QCString &tmpFile)
}
}
}
#endif
#else
//----------------------------------------------------------------------------
// Reads a file to a string.
// The name of the file is written in front of the file's contents and
// between 0x06 markers
static void readFiles(BufStr &output)
static void parseFiles(Entry *root)
{
ParserInterface *defaultParser = new CLanguageScanner;
ParserManager *parserManager = new ParserManager(defaultParser);
// register any additional parsers here...
QCString *s=inputFiles.first();
while (s)
{
QCString fileName=*s;
QCString extension;
int ei = fileName.findRev('.');
if (ei!=-1) extension=fileName.right(fileName.length()-ei);
int fileNameSize=fileName.length();
//bool multiLineIsBrief = Config_getBool("MULTILINE_CPP_IS_BRIEF");
BufStr tempBuf(20000);
//BufStr *bufPtr = multiLineIsBrief ? &output : &tempBuf;
BufStr *bufPtr = &tempBuf;
QFileInfo fi(fileName);
BufStr preBuf(fi.size()+4096);
BufStr *bufPtr = &preBuf;
// add begin filename marker
bufPtr->addChar(0x06);
// copy filename
bufPtr->addArray(fileName.data(),fileNameSize);
// add end filename marker
bufPtr->addChar(0x06);
bufPtr->addChar('\n');
if (Config_getBool("ENABLE_PREPROCESSING"))
{
msg("Preprocessing %s...\n",s->data());
......@@ -7429,14 +7452,18 @@ static void readFiles(BufStr &output)
bufPtr->addChar('\n'); /* to prevent problems under Windows ? */
convertCppComments(&tempBuf,&output,fileName);
BufStr convBuf(bufPtr->curPos()+1024);
convertCppComments(&preBuf,&convBuf,fileName);
convBuf.addChar('\0');
ParserInterface *parser = parserManager->getParser(extension);
parser->parse(fileName,convBuf.data(),root);
s=inputFiles.next();
//printf("-------> adding new line\n");
}
output.addChar(0);
}
#endif
//----------------------------------------------------------------------------
// Read all files matching at least one pattern in `patList' in the
......@@ -8285,14 +8312,15 @@ void parseInput()
// strip trailing slashes
if (path.at(l-1)=='\\' || path.at(l-1)=='/') path=path.left(l-1);
inputSize+=readFileOrDirectory(path,&Doxygen::inputNameList,
inputSize+=readFileOrDirectory(
path,&Doxygen::inputNameList,
Doxygen::inputNameDict,&excludeNameDict,
&Config_getList("FILE_PATTERNS"),
&Config_getList("EXCLUDE_PATTERNS"),
&inputFiles,0,
alwaysRecursive,
TRUE,
killDict);
&Config_getList("FILE_PATTERNS"),
&Config_getList("EXCLUDE_PATTERNS"),
&inputFiles,0,
alwaysRecursive,
TRUE,
killDict);
s=inputList.next();
}
delete killDict;
......@@ -8466,8 +8494,7 @@ void parseInput()
* Read Input Files *
**************************************************************************/
#ifdef USE_TMP_FILE
#if 0
QCString tmpName = Config_getString("OUTPUT_DIRECTORY")+
"/doxygen_scratchfile.tmp";
......@@ -8493,36 +8520,9 @@ void parseInput()
// remove temp file
QDir().remove(tmpName);
#else // use memory to store intermediate results
BufStr input(inputSize+1); // Add one byte extra for \0 termination
// read and preprocess all input files
readFiles(input);
if (input.isEmpty())
{
err("No input read, no output generated!\n");
delete root;
cleanUpDoxygen();
exit(1);
}
else
{
msg("Read %d bytes\n",input.curPos());
}
root->program=input;
msg("Parsing input...\n");
parseMain(root); // build a tree of entries
msg("Freeing input...\n");
input.resize(0);
#endif
parseFiles(root);
/**************************************************************************
* Gather information *
**************************************************************************/
......
......@@ -123,7 +123,4 @@ void readConfiguration(int argc, char **argv);
void parseInput();
void generateOutput();
//#undef USE_TMP_FILE
#define USE_TMP_FILE
#endif
......@@ -97,6 +97,15 @@ FileDef::FileDef(const char *p,const char *nm,
memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE);
acquireFileVersion();
// members in the detailed part of the documentation
docDefineMembers.setInFile(TRUE);
docProtoMembers.setInFile(TRUE);
docTypedefMembers.setInFile(TRUE);
docEnumMembers.setInFile(TRUE);
docFuncMembers.setInFile(TRUE);
docVarMembers.setInFile(TRUE);
}
/*! destroy the file definition */
......@@ -675,6 +684,8 @@ void FileDef::addMembersToMemberGroup()
void FileDef::insertMember(MemberDef *md)
{
//printf("%s:FileDef::insertMember(%s)\n",name().data(),md->name().data());
if (allMemberList.find(md)!=-1) return;
allMemberList.append(md);
bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS");
......@@ -1220,7 +1231,7 @@ void FileDef::acquireFileVersion()
if (!vercmd.isEmpty())
{
msg("Version of %s : ",filepath.data());
FILE *f=popen(vercmd+" "+filepath,"r");
FILE *f=popen("\""+vercmd+"\" \""+filepath+"\"","r");
if (!f)
{
err("Error: could not execute %s\n",vercmd.data());
......
......@@ -178,7 +178,7 @@ class FileDef : public Definition
MemberList decFuncMembers;
MemberList decVarMembers;
// members in the documentation part of the documentation
// members in the detailed part of the documentation
MemberList docDefineMembers;
MemberList docProtoMembers;
MemberList docTypedefMembers;
......
......@@ -327,8 +327,8 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
break;
default:
err("GroupDef::insertMembers(): "
"member `%s' with class scope `%s' inserted in group scope `%s'!\n",
md->name().data(),
"member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n",
md->name().data(),md->memberType(),
md->getClassDef() ? md->getClassDef()->name().data() : "",
name().data());
}
......
......@@ -1368,7 +1368,9 @@ void HtmlGenerator::writeLineNumber(const char *ref,const char *file,
}
else
{
startCodeAnchor(lineAnchor);
codify(lineNumber);
endCodeAnchor();
}
codify(" ");
}
......
......@@ -2704,7 +2704,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
MemberDef *md=members->first();
while (md)
{
if (md->isDetailedSectionVisible(TRUE))
if (md->isDetailedSectionVisible(TRUE,FALSE))
{
if (first)
{
......
......@@ -2,6 +2,7 @@
#define LANG_SE
#define LANG_CZ
#define LANG_FR
#define LANG_ID
#define LANG_IT
#define LANG_DE
#define LANG_JP
......
......@@ -34,6 +34,9 @@
#ifdef LANG_FR
#include "translator_fr.h"
#endif
#ifdef LANG_ID
#include "translator_id.h"
#endif
#ifdef LANG_IT
#include "translator_it.h"
#endif
......@@ -165,6 +168,12 @@ bool setTranslator(const char *langName)
theTranslator=new TranslatorFrench;
}
#endif
#ifdef LANG_ID
else if (L_EQUAL("indonesian"))
{
theTranslator=new TranslatorIndonesian;
}
#endif
#ifdef LANG_IT
else if (L_EQUAL("italian"))
{
......
......@@ -100,6 +100,7 @@ HEADERS = bufstr.h \
translator_gr.h \
translator_hr.h \
translator_hu.h \
translator_id.h \
translator_it.h \
translator_je.h \
translator_jp.h \
......
......@@ -676,13 +676,22 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
}
void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *,GroupDef *gd)
FileDef *fd,GroupDef *gd,bool onlyText)
{
QCString sep = Config_getBool("OPTIMIZE_OUTPUT_JAVA") ? "." : "::";
QCString n = name();
if (classDef && gd) n.prepend(classDef->name()+sep);
else if (nspace && gd) n.prepend(nspace->name()+sep);
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
else if (nspace && (gd || fd)) n.prepend(nspace->name()+sep);
if (!onlyText) // write link
{
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
}
else // write only text
{
ol.startBold();
ol.docify(n);
ol.endBold();
}
}
/*! If this member has an anonymous class/struct/union as its type, then
......@@ -901,10 +910,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
QCString cname = d->name();
QCString cfname = getOutputFileBase();
QCString osname = cname;
//QCString osname = cname;
// in case of class members that are put in a group the name of the outerscope
// differs from the cname.
if (getOuterScope()) osname=getOuterScope()->name();
//if (getOuterScope()) osname=getOuterScope()->name();
HtmlHelp *htmlHelp=0;
bool hasHtmlHelp = Config_getBool("GENERATE_HTML") && Config_getBool("GENERATE_HTMLHELP");
......@@ -942,6 +951,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
}
// *** write template lists
if (tArgList)
{
if (!isAnonymous) ol.startMemberTemplateParams();
......@@ -949,10 +959,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!isAnonymous) ol.endMemberTemplateParams();
}
// *** write type
QCString ltype(type);
if (mtype==Typedef) ltype.prepend("typedef ");
// strip `static' keyword from ltype
//if (ltype.left(7)=="static ") ltype=ltype.right(ltype.length()-7);
// strip `friend' keyword from ltype
if (ltype.left(7)=="friend ") ltype=ltype.right(ltype.length()-7);
static QRegExp r("@[0-9]+");
......@@ -1034,7 +1043,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.insertMemberAlign(tArgList!=0);
}
// write name
// *** write name
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());
......@@ -1074,12 +1083,13 @@ void MemberDef::writeDeclaration(OutputList &ol,
// descriptions are enabled or there is no detailed description.
{
if (annMemb) annMemb->annUsed=annUsed=TRUE;
ol.startBold();
ol.docify(name());
ol.endBold();
ClassDef *rcd = cd;
if (isReference() && classDef) rcd = classDef;
writeLink(ol,rcd,nd,fd,gd,TRUE);
}
}
// *** write arguments
if (argsString() && !isObjCMethod())
{
if (!isDefine()) ol.writeString(" ");
......@@ -1087,12 +1097,14 @@ void MemberDef::writeDeclaration(OutputList &ol,
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),argsString());
}
// *** write exceptions
if (excpString())
{
ol.writeString(" ");
ol.docify(excpString());
}
// *** write bitfields
if (!bitfields.isEmpty()) // add bitfields
{
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),bitfields.simplifyWhiteSpace());
......@@ -1113,6 +1125,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),init);
}
}
if (isObjCMethod() && isImplementation())
{
ol.startTypewriter();
......@@ -1217,11 +1230,13 @@ bool MemberDef::isDetailedSectionLinkable() const
return ((docFilter && staticFilter && privateFilter && friendCompoundFilter) /*|| inAnonymousScope*/);
}
bool MemberDef::isDetailedSectionVisible(bool inGroup) const
bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
{
bool groupFilter = getGroupDef()==0 || inGroup;
bool fileFilter = getNamespaceDef()==0 || !inFile;
bool visible = isDetailedSectionLinkable() && groupFilter && !isReference();
bool visible = isDetailedSectionLinkable() && groupFilter && fileFilter &&
!isReference();
//printf("MemberDef::isDetailedSectionVisible() %d\n",visible);
return visible;
}
......@@ -1237,7 +1252,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
// if this member is in a group find the real scope name.
bool hasParameterList = FALSE;
bool hasDocs = isDetailedSectionVisible(inGroup);
bool inFile = container->definitionType()==Definition::TypeFile;
bool hasDocs = isDetailedSectionVisible(inGroup,inFile);
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup);
if ( !hasDocs ) return;
......@@ -1287,6 +1303,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
int i=0,l;
static QRegExp r("@[0-9]+");
//----------------------------------------
ol.pushGeneratorState();
......@@ -1398,6 +1415,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
}
}
ol.startMemberDocName(isObjCMethod());
if (cd && cd->isObjectiveC())
{
......@@ -1431,7 +1449,9 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("end >%s< i=%d\n",ldef.data(),i);
if (isStatic()) ldef.prepend("+ "); else ldef.prepend("- ");
}
linkifyText(TextGeneratorOLImpl(ol),container,getBodyDef(),name(),ldef);
hasParameterList=writeDefArgumentList(ol,cd,scopeName,this);
if (hasOneLineInitializer()) // add initializer
{
......@@ -1865,6 +1885,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState();
//------------------------------------------------
if (!Config_getBool("EXTRACT_ALL") &&
Config_getBool("WARN_IF_UNDOCUMENTED") &&
Config_getBool("WARN_NO_PARAMDOC"))
......
......@@ -153,7 +153,7 @@ class MemberDef : public Definition
bool isLinkable() const;
bool hasDocumentation() const; // overrides hasDocumentation in definition.h
bool isBriefSectionVisible() const;
bool isDetailedSectionVisible(bool inGroup=FALSE) const;
bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
bool isDetailedSectionLinkable() const;
bool isDocumentedFriendClass() const;
......@@ -185,8 +185,6 @@ class MemberDef : public Definition
void setTagInfo(TagInfo *i);
// output generation
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup);
......@@ -308,6 +306,10 @@ class MemberDef : public Definition
bool visited;
private:
void writeLink(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool onlyText=FALSE);
ClassDef *classDef; // member of or related to
FileDef *fileDef; // member of file definition
MemberDef *enumScope; // the enclosing scope, if this is an enum field
......
......@@ -32,6 +32,7 @@ MemberList::MemberList() : QList<MemberDef>()
m_numDecMembers=-1; // special value indicating that computation is needed
m_numDocMembers=-1; // special value indicating that computation is needed
m_inGroup=FALSE;
m_inFile=FALSE;
}
MemberList::~MemberList()
......@@ -124,7 +125,7 @@ void MemberList::countDocMembers()
MemberDef *md;
for (mli.toFirst();(md=mli.current());++mli)
{
if (md->isDetailedSectionVisible(m_inGroup))
if (md->isDetailedSectionVisible(m_inGroup,m_inFile))
{
// do not count enum values, since they do not produce entries of their own
if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++;
......
......@@ -57,7 +57,8 @@ class MemberList : public QList<MemberDef>
void writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container);
void addMemberGroup(MemberGroup *mg);
void setInGroup(bool group) { m_inGroup=group; }
void setInGroup(bool inGroup) { m_inGroup=inGroup; }
void setInFile(bool inFile) { m_inFile=inFile; }
void addListReferences(Definition *def);
void findSectionsInDocumentation();
MemberGroupList *getMemberGroupList() const { return memberGroupList; }
......@@ -68,7 +69,8 @@ class MemberList : public QList<MemberDef>
int m_numDecMembers; // number of members in the brief part of the memberlist
int m_numDocMembers; // number of members in the detailed part of the memberlist
MemberGroupList *memberGroupList;
bool m_inGroup; // is this list part of a group
bool m_inGroup; // is this list part of a group definition
bool m_inFile; // is this list part of a file definition
};
class MemberListIterator : public QListIterator<MemberDef>
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2005 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef PARSERINTF_H
#define PARSERINTF_H
#include <qdict.h>
class Entry;
/** \brief Abstract interface for programming language parsers.
*
* By implementing the methods of this interface one can add
* a new language parser to doxygen. The parser can make use of the
* comment block parser to parse the contents of special comment blocks.
*/
class ParserInterface
{
public:
/** Parses a single file.
* @param[in] fileName The full name of the file.
* @param[in] fileBuf The contents of the file (zero terminated).
* @param[in,out] root The root of the tree of Entry *nodes
* representing the information extracted from the file.
*/
virtual void parse(const char *fileName,const char *fileBuf,Entry *root) = 0;
/** Callback function called by the comment block scanner.
* It provides a string \a text containing the prototype of a function
* or variable. The parser should parse this and store the information
* in the Entry node that corresponds with the node for which the
* comment block parser was invoked.
*/
virtual void parsePrototype(const char *text) = 0;
/** Callback function called by the comment block scanner upon encountering
* a group block start command (@@{). If the group has a header
* specified via the @@name command, this will be passed via
* the \a header parameter, if not the \a header parameter will be 0.
*/
virtual void handleGroupStartCommand(const char *header) = 0;
/** Callback function called by the comment block scanner upon encountering
* a group block end command (@@}).
*/
virtual void handleGroupEndCommand() = 0;
};
/** \brief Manages programming language parsers.
*
* This class manages the language parsers in the system. One can
* register parsers, and obtain a parser given a file extension.
*/
class ParserManager
{
public:
/** Creates the parser manager object.
* @param defaultParser The default parser that is used when
* no explicit extension has been register for
* a given input file.
*/
ParserManager(ParserInterface *defaultParser)
: m_defaultParser(defaultParser) {}
/** Registers a new parser.
* @param[in] extension The file extension that will trigger
* the use of this parser (e.g. ".py", or ".bas").
* @param[in] parser The parser that is to be used for the
* given extension.
*/
void registerParser(const char *extension,ParserInterface *parser)
{
m_parsers.insert(extension,parser);
}
/** Gets the interface to the parser associated with given \a extension,
* if there is no parser explicitly registered for the supplied extension,
* the interface to the default parser will be returned.
*/
ParserInterface *getParser(const char *extension)
{
if (extension==0) return m_defaultParser;
ParserInterface *intf = m_parsers.find(extension);
return intf ? intf : m_defaultParser;
}
private:
QDict<ParserInterface> m_parsers;
ParserInterface *m_defaultParser;
};
#endif
......@@ -195,7 +195,7 @@ static FILE *checkAndOpenFile(const QCString &absName)
QCString filterName = getFileFilter(absName);
if (!filterName.isEmpty())
{
QCString cmd = filterName+" \""+absName+"\"";
QCString cmd = "\"" + filterName+"\" \""+absName+"\"";
f=popen(cmd,"r");
if (!f) err("Error: could not execute filter %s\n",cmd.data());
}
......@@ -1779,7 +1779,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng);
g_blockName=&yytext[1];
g_blockName=QCString(&yytext[1]).stripWhiteSpace();
BEGIN(SkipVerbatim);
}
<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
......@@ -1789,7 +1789,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
BEGIN(SkipCComment);
}
}
<SkipCComment,SkipVerbatim>[^*\x06\n\/]+ {
<SkipCComment,SkipVerbatim>[^*\\@\x06\n\/]+ {
outputArray(yytext,yyleng);
}
<SkipCComment,SkipVerbatim>\n {
......@@ -2235,7 +2235,7 @@ void preprocessFile(const char *fileName,BufStr &output)
}
else
{
QCString cmd = inputFilter+" \""+fileName+"\"";
QCString cmd = "\"" + inputFilter+"\" \""+fileName+"\"";
preYYin = popen(cmd,"r");
if (!preYYin)
{
......
......@@ -18,13 +18,31 @@
#ifndef SCANNER_H
#define SCANNER_H
#include "parserintf.h"
/** \brief C-like language parser using state-based lexical scanning.
*
* This is the language parser for doxygen. It is somewhat fuzzy and
* supports C++ and various languages that are closely related to C++,
* such as C,C#,Objective-C,Java,PHP,and IDL.
*/
class CLanguageScanner : public ParserInterface
{
public:
void parse(const char *fileName,const char *fileBuf,Entry *root);
void parsePrototype(const char *text);
void handleGroupStartCommand(const char *header);
void handleGroupEndCommand();
};
#if 0
#include "qtbc.h"
class OutputList;
class Entry;
// Public interface provided by the language scanner
void parseMain(Entry *);
void parseMain(Entry *,const char *fileName);
// Internal callback interface for comment block scanner
......@@ -33,3 +51,5 @@ void handleGroupStartCommand(const char *header);
void handleGroupEndCommand();
#endif
#endif
......@@ -34,61 +34,40 @@
#include "scanner.h"
#include "entry.h"
#include "doxygen.h"
#include "message.h"
#include "config.h"
#include "doxygen.h"
#include "util.h"
#include "index.h"
#include "defargs.h"
#include "language.h"
#include "outputlist.h"
#include "membergroup.h"
#include "reflist.h"
#include "code.h"
#include "commentscan.h"
#define COMMENTSCAN
#define YY_NEVER_INTERACTIVE 1
/* -----------------------------------------------------------------
*
* statics
*/
static ParserInterface *g_thisParser;
static const char * inputString;
static int inputPosition;
static QFile inputFile;
static int lastContext;
static int lastCContext;
static int lastDocContext;
static int lastDocRelContext;
static int lastDocRelAlsoContext;
static int lastCPPContext;
static int lastSkipSharpContext;
static int lastSkipRoundContext;
static int lastBriefContext;
static int lastVerbState;
static int lastStringContext;
static int lastCurlyContext;
static int lastRoundContext;
static int lastSquareContext;
static int lastCodeState;
static int lastAfterDocContext;
static int lastGroupContext;
static int lastFormulaContext;
static int lastAnchorContext;
//static int lastAfterDocContext;
static int lastInitializerContext;
static int lastClassTemplSpecContext;
static int lastSkipHtmlCommentContext;
static int lastIfContext;
static int lastInternalDocContext;
static int lastPreLineCtrlContext;
static int lastSkipVerbStringContext;
static int lastCommentInArgContext;
static int lastFileDocContext;
static int lastSectionContext;
static int nextDefContext;
static int overloadContext;
static Protection protection;
static Protection baseProt;
static int sharpCount = 0 ;
......@@ -96,7 +75,6 @@ static int roundCount = 0 ;
static int curlyCount = 0 ;
static int squareCount = 0 ;
static int padCount = 0 ;
static int slStartContext = 0;
static QCString slString;
static Entry* current_root = 0 ;
static Entry* global_root = 0 ;
......@@ -105,7 +83,7 @@ static Entry* previous = 0 ;
static Entry* tempEntry = 0 ;
static int yyLineNr = 1 ;
static int anonCount = 0 ;
static char yyFileName[4096] ;
static QCString yyFileName;
static int lastMemberGroupLine;
static MethodTypes mtype;
static bool gstat;
......@@ -117,7 +95,7 @@ static int memberGroupId = DOX_NOGROUP;
static QCString memberGroupHeader;
static QCString memberGroupDocs;
static bool isTypedef;
static char afterDocTerminator;
//static char afterDocTerminator;
static int tmpDocType;
static QCString sectionLabel;
static QCString sectionTitle;
......@@ -154,7 +132,6 @@ static char lastCopyArgChar;
static QCString *pCopyRoundString;
static QCString *pCopyCurlyString;
static QCString *pCopyQuotedString;
static QCString *pSkipDoc;
static QCString *pSkipVerbString;
static QStack<Grouping> autoGroupStack;
static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST );
......@@ -186,6 +163,12 @@ static bool docBlockJavaStyle;
static char docBlockTerm;
//-----------------------------------------------------------------------------
// forward declarations
static void handleGroupStartCommand(const char *header);
static void handleGroupEndCommand();
//-----------------------------------------------------------------------------
static void initParser()
......@@ -218,7 +201,10 @@ static void initParser()
static void initEntry()
{
if (insideJava) protection = Package;
if (insideJava)
{
protection = current_root->section==Entry::INTERFACE_SEC ? Public : Package;
}
current->protection = protection ;
current->mtype = mtype;
current->virt = virt;
......@@ -268,9 +254,6 @@ static int newMemberGroupId()
}
// forward declarations
#ifndef COMMENTSCAN
static void startGroup();
#endif
static void startGroupInDoc();
static void endGroup();
......@@ -314,8 +297,6 @@ static QCString stripQuotes(const char *s)
return name;
}
static void newDocState();
//-----------------------------------------------------------------
static void addMemberGroupDocs()
......@@ -343,96 +324,6 @@ static void startCommentBlock(bool);
static void handleCommentBlock(const QCString &doc,bool brief);
//-----------------------------------------------------------------
static void addXRefItem(bool inBody,const char *listName,const char *itemTitle,const char *listTitle)
{
Entry *docEntry = inBody && previous ? previous : current;
//printf("docEntry=%p\n",docEntry);
if (listName==0) return;
//printf("addXRefItem(%s,%s,%s)\n",listName,itemTitle,listTitle);
ListItemInfo *lii=0;
RefList *refList = Doxygen::xrefLists->find(listName);
if (refList==0) // new list
{
refList = new RefList(listName,listTitle,itemTitle);
Doxygen::xrefLists->insert(listName,refList);
//printf("new list!\n");
}
if (docEntry->sli)
{
QListIterator<ListItemInfo> slii(*docEntry->sli);
for (slii.toFirst();(lii=slii.current());++slii)
{
if (strcmp(lii->type,listName)==0)
{
//printf("found %s lii->type=%s\n",listName,lii->type);
break;
}
}
}
#if 0 // with this code multiple @todo items can be put under the same
// heading, I removed it because it changes the text flow.
if (lii) // already found item of same type before
{
//printf("listName=%s item id = %d existing\n",listName,lii->itemId);
RefItem *item = refList->getRefItem(lii->itemId);
ASSERT(item!=0);
item->text += " <p>";
item->text += current->brief;
//printf("%s: text +=%s\n",listName,item->text.data());
}
else // new item
#endif
{
int itemId = refList->addRefItem();
//printf("listName=%s item id = %d new current=%p\n",listName,itemId,current);
// if we have already an item from the same list type (e.g. a second @todo)
// in the same Entry (i.e. lii!=0) then we reuse its link anchor.
char anchorLabel[1024];
sprintf(anchorLabel,"_%s%06d",listName,lii ? lii->itemId : itemId);
RefItem *item = refList->getRefItem(itemId);
ASSERT(item!=0);
item->text = current->brief;
item->listAnchor = anchorLabel;
docEntry->addSpecialListItem(listName,itemId);
QCString cmdString;
cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId);
docEntry->doc += cmdString;
SectionInfo *si=new SectionInfo(listName,anchorLabel,
sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si);
docEntry->anchors->append(si);
}
current->brief = slString; // restore orginial brief desc.
}
//-----------------------------------------------------------------------------
// Adds a formula text to the list/dictionary of formulas if it was
// not already added. Returns the label of the formula.
static QCString addFormula()
{
QCString formLabel;
QCString fText=formulaText.simplifyWhiteSpace();
Formula *f=0;
if ((f=Doxygen::formulaDict[fText])==0)
{
f = new Formula(fText);
Doxygen::formulaList.append(f);
Doxygen::formulaDict.insert(fText,f);
formLabel.sprintf("\\form#%d",f->getId());
Doxygen::formulaNameDict.insert(formLabel,f);
}
else
{
formLabel.sprintf("\\form#%d",f->getId());
}
return formLabel;
}
//-----------------------------------------------------------------------------
static bool nameIsOperator(QCString &name)
{
int i=name.find("operator");
......@@ -444,32 +335,6 @@ static bool nameIsOperator(QCString &name)
//-----------------------------------------------------------------------------
static void checkFormula()
{
if (insideFormula)
{
warn(yyFileName,yyLineNr,"Warning: End of comment block while inside formula.");
}
}
//-----------------------------------------------------------------------------
static void checkDocs()
{
checkFormula();
if ((current->brief.length()>2 &&
current->brief.at(0)=='<' && current->brief.at(1)==' ') ||
(current->doc.length()>2 &&
current->doc.at(0)=='<' && current->doc.at(1)==' ')
)
{
warn(yyFileName,yyLineNr,"Warning: Found lonely '<' symbol at the start of the documentation.");
}
}
//-----------------------------------------------------------------------------
static void setContext()
{
QCString fileName = yyFileName;
......@@ -486,7 +351,10 @@ static void setContext()
{
useOverrideCommands = TRUE;
}
//printf("setContext(%s) insideIDL=%d\n",yyFileName,insideIDL);
//printf("setContext(%s) insideIDL=%d insideJava=%d insideCS=%d "
// "insideD=%d insidePHP=%d insideObjC=%d\n",
// yyFileName.data(),insideIDL,insideJava,insideCS,insideD,insidePHP,insideObjC
// );
}
//-----------------------------------------------------------------------------
......@@ -663,14 +531,12 @@ static void addKnRArgInfo(const QCString &type,const QCString &name,
static int yyread(char *buf,int max_size)
{
int c=0;
#ifdef USE_TMP_FILE
if (g_inputFromFile)
{
c = inputFile.readBlock(buf,max_size);
if (c==-1) yy_fatal_error("input in flex scanner failed");
}
else
#endif
{
while( c < max_size && inputString[inputPosition] )
{
......@@ -717,6 +583,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
%option noyywrap
/* language parsing states */
%x Define
%x DefineEnd
%x CompoundName
......@@ -806,88 +673,20 @@ IDLATTR ("["[^\]]*"]"){BN}*
%x FuncFunc
%x FuncFuncEnd
%x FuncFuncType
/* comment parsing states.
* What can happen in while parsing a comment block:
* commands (e.g. @page, or \page)
* escaped commands (e.g. @@page or \\page).
* directories (e.g. \doxygen\src\)
* HTML commands (e.g. <PRE>...</PRE>)
* autolists.
* newlines.
* words and whitespace and other characters (#,?!, etc).
*/
/* start states. TODO: reduce to one state */
%x Doc
%x JavaDoc
%x LineDoc
%x AfterDoc
%x AfterDocBrief
%x AfterDocLine
/* internal states */
/* page related */
%x PageDoc
%x PageDocTitle
%x PageDocArg1
%x PageDocArg2
%x ExampleDocArg1
%x ClassDoc
%x DefLineDoc
%x SkipSection
%x IfGuard
%x IfNotGuard
%x NameSpaceDocArg1
%x PackageDocArg1
%x SkipCode
%x ClassDocArg1
%x CategoryDocArg1
%x ClassDocArg2
%x ClassDocArg3
%x ClassDocFunc
%x ClassDocFuncPtr
%x ClassDocFuncQual
%x ClassDocFuncSkipLine
%x ClassDocFuncExc
%x ClassDocDefine
%x ClassDocRelates
%x ClassDocRelatesAlso
%x ClassDocBrief
%x ClassDocOverload
%x ClassDefineArgs
%x DocInternal
%x DocInternalLine
%x DocBaseClass
%x GroupDocArg1
%x GroupDocArg2
%x GroupName
%x GroupHeader
%x StoreGroupDocs
%x FileDocArg1
%x FileDocArg2
%x EnumDocArg1
%x SkipVerbatim
%x TodoParam
%x TestParam
%x BugParam
%x DeprecatedParam
%x XRefItemParam1
%x XRefItemParam2
%x XRefItemParam3
%x XRefItemParam4
%x SectionLabel
%x SectionTitle
%x CopyArgString
%x CopyArgPHPString
%x CopyArgRound
%x CopyArgSharp
%x CopyArgComment
%x CopyArgCommentLine
%x SkipHtmlComment
%x ReadFormulaShort
%x ReadFormulaLong
%x AnchorLabel
/** Prototype scanner states */
%x Prototype
%x PrototypePtr
%x PrototypeQual
%x PrototypeExc
%x PrototypeSkipLine
/** new comment parsing states */
......@@ -897,43 +696,6 @@ IDLATTR ("["[^\]]*"]"){BN}*
%%
<*>\x06[^\x06]*\x06 { // new file
if (YY_START==Comment)
{
warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
}
if (memberGroupId!=DOX_NOGROUP)
{
warn(yyFileName,yyLineNr,"Warning: Missing //@}");
memberGroupId=DOX_NOGROUP;
}
yyLineNr= 0 ; // there is always an extra newline at the start of the file
int i;
for( i = 0 ; yytext[i+1] != 6 ; i++ )
yyFileName[i] = yytext[i+1] ;
yyFileName[i] = 0 ;
setContext();
msg("Parsing file %s...\n",yyFileName);
current_root = global_root ;
initParser();
current->reset();
int sec=guessSection(yyFileName);
if (sec)
{
current->name = yyFileName;
current->section = sec;
current_root->addSubEntry(current);
current = new Entry;
}
if ( insidePHP )
{
BEGIN( FindMembersPHP );
}
else
{
BEGIN( FindMembers );
}
}
<NextSemi>"{" {
curlyCount=0;
needsSemi = TRUE;
......@@ -1224,7 +986,8 @@ IDLATTR ("["[^\]]*"]"){BN}*
unput(';');
BEGIN( Function );
}
<ObjCMethod,ObjCParams>"{" { // start of a method body
<ObjCMethod,ObjCParams>(";"{BN}+)?"{" { // start of a method body
lineCount();
//printf("Type=%s Name=%s args=%s\n",
// current->type.data(),current->name.data(),argListToString(current->argList).data()
// );
......@@ -1618,7 +1381,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
initEntry();
BEGIN(Using);
}
<UsingDirective>{SCOPENAME} { current->name=yytext;
<UsingDirective>{SCOPENAME} { current->name=removeRedundantWhiteSpace(yytext);
current->fileName = yyFileName;
current->section=Entry::USINGDIR_SEC;
current_root->addSubEntry(current);
......@@ -1915,7 +1678,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
BEGIN( PreLineCtrl );
}
<PreLineCtrl>"\""[^\n\"]*"\"" {
strncpy(yyFileName,stripQuotes(yytext),4096);
yyFileName = stripQuotes(yytext);
}
<PreLineCtrl>. {}
<PreLineCtrl>\n {
......@@ -2018,7 +1781,6 @@ IDLATTR ("["[^\]]*"]"){BN}*
{
current->bodyLine=yyLineNr;
}
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF");
......@@ -2034,37 +1796,9 @@ IDLATTR ("["[^\]]*"]"){BN}*
startCommentBlock(FALSE);
BEGIN( DocBlock );
}
#else
lastAfterDocContext = YY_START;
afterDocTerminator = ';';
if (yytext[yyleng-3]=='/')
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocLine);
}
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyLineNr;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDocBrief);
}
else
{
current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc);
}
#endif
}
<MemberSpec,FindFields,FindMembers,NextSemi,BitFields,ReadInitializer,OldStyleArgs>","{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF");
......@@ -2080,69 +1814,31 @@ IDLATTR ("["[^\]]*"]"){BN}*
startCommentBlock(FALSE);
BEGIN( DocBlock );
}
#else
lastAfterDocContext = YY_START;
afterDocTerminator = ',';
if (yytext[yyleng-3]=='/')
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyLineNr;
BEGIN(AfterDocLine);
}
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyLineNr;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDocBrief);
}
else
{
current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc);
}
#endif
}
<DefineEnd,FindFields,FindFieldArg,ReadInitializer,OldStyleArgs>{BN}*("/**"|"//!"|"/*!"|"///")"<" {
lineCount();
lastAfterDocContext = YY_START;
if (YY_START==DefineEnd)
if (current->bodyLine==-1)
{
afterDocTerminator = '\n';
yyLineNr--;
current->bodyLine=yyLineNr;
}
else
afterDocTerminator = 0;
docBlockContext = YY_START;
docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF");
docBlock.resize(0);
docBlockTerm = 0;
if (yytext[yyleng-3]=='/')
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocLine);
}
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocBrief);
startCommentBlock(TRUE);
BEGIN( DocLine );
}
else
{
current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc);
startCommentBlock(FALSE);
BEGIN( DocBlock );
}
}
<FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") {
#ifdef COMMENTSCAN
Entry *tmp = current;
if (previous)
{
......@@ -2151,50 +1847,9 @@ IDLATTR ("["[^\]]*"]"){BN}*
handleGroupStartCommand(current->name);
current = tmp;
initEntry();
#else
startGroup();
tmpDocType=-1;
if (current_root->section & Entry::SCOPE_MASK)
{
current->inside = current_root->name+"::";
if (current->mGrpId!=DOX_NOGROUP)
{
memberGroupInside = current->inside.copy();
}
}
if (yytext[1]=='/') // C++ style comment
{
current->brief.resize(0);
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
lastDocContext = YY_START;
BEGIN( LineDoc );
}
else // C style comment
{
current->doc.resize(0);
current->docLine = yyLineNr;
current->docFile = yyFileName;
lastDocContext = YY_START;
removeSlashes=FALSE;
BEGIN( Doc );
}
#endif
}
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" {
#ifdef COMMENTSCAN
handleGroupEndCommand();
#else
if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty())
{
warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin.");
}
//printf("end of member group marker ends group %d\n",memberGroupId);
endGroup();
memberGroupHeader.resize(0);
#endif
}
<FindMembers>"=" {
current->bodyLine = yyLineNr;
......@@ -3631,31 +3286,24 @@ IDLATTR ("["[^\]]*"]"){BN}*
{
current->endBodyLine=yyLineNr;
lineCount();
tempEntry = current; // temporarily switch to the previous entry
current = previous;
current->doc.resize(0);
current->brief.resize(0);
lastAfterDocContext = SkipCurlyEndDoc;
afterDocTerminator = '}';
docBlockContext = SkipCurlyEndDoc;
docBlockInBody = FALSE;
docBlockJavaStyle = yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF");
docBlock.resize(0);
docBlockTerm = '}';
if (yytext[yyleng-3]=='/')
{
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
BEGIN(AfterDocLine);
}
else if (yytext[yyleng-2]=='*' && Config_getBool("JAVADOC_AUTOBRIEF"))
{
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDocBrief);
startCommentBlock(TRUE);
BEGIN( DocLine );
}
else
{
current->docLine = yyLineNr;
current->docFile = yyFileName;
BEGIN(AfterDoc);
startCommentBlock(FALSE);
BEGIN( DocBlock );
}
}
}
......@@ -4183,16 +3831,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
memberGroupInside = current->inside.copy();
}
}
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlock.resize(0);
startCommentBlock(FALSE);
BEGIN( DocBlock );
#else
BEGIN( Doc );
#endif
}
<FindMembers,FindFields,MemberSpec,FuncQual,SkipCurly,Operator,ClassVar,SkipInits,Bases,OldStyleArgs>("//"{B}*)?"/**"/[^/*] {
removeSlashes=(yytext[1]=='/');
......@@ -4206,7 +3850,6 @@ IDLATTR ("["[^\]]*"]"){BN}*
memberGroupInside = current->inside.copy();
}
}
#ifdef COMMENTSCAN
current->docLine = yyLineNr;
current->docFile = yyFileName;
docBlockContext = YY_START;
......@@ -4228,46 +3871,6 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
startCommentBlock(FALSE);
BEGIN( DocBlock );
#else
if (!Config_getBool("JAVADOC_AUTOBRIEF")) // use the Qt style
{
current->docLine = yyLineNr;
current->docFile = yyFileName;
tmpDocType=-1;
if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
YY_START==SkipCurly) // inside body
{
current->doc+="\n\n";
}
else
{
current->doc.resize(0);
}
BEGIN( Doc );
}
else // Use the javadoc style
{
current->docLine = yyLineNr;
current->docFile = yyFileName;
current->briefLine = yyLineNr;
current->briefFile = yyFileName;
if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
YY_START==SkipCurly) // inside body
{
tmpDocType=-1;
current->doc+="\n\n";
lastDocContext = SkipCurly;
BEGIN( Doc );
}
else
{
tmpDocType=Doc;
current->doc.resize(0);
current->brief.resize(0);
BEGIN( JavaDoc );
}
}
#endif
}
<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases,OldStyleArgs>"//!" {
if (YY_START!=SkipCurly)
......@@ -4286,16 +3889,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
memberGroupInside = current->inside.copy();
}
}
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine );
#else
BEGIN( LineDoc );
#endif
}
<FindMembers,FindFields,MemberSpec,SkipCurly,FuncQual,Operator,ClassVar,Bases,OldStyleArgs>"///"/[^/] {
if (YY_START!=SkipCurly)
......@@ -4314,16 +3913,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
memberGroupInside = current->inside.copy();
}
}
#ifdef COMMENTSCAN
docBlockContext = YY_START;
docBlockInBody = YY_START==SkipCurly;
docBlockJavaStyle = FALSE;
docBlock.resize(0);
startCommentBlock(TRUE);
BEGIN( DocLine );
#else
BEGIN( LineDoc );
#endif
}
<FindMembers>"extern"{BN}*"\"C"("++")?"\""{BN}*("{")? {
lineCount();
......@@ -4413,7 +4008,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
handleCommentBlock(docBlock,FALSE);
BEGIN(docBlockContext);
}
<DocBlock>^{B}*"*"+/[^//] { // start of a comment line
<DocBlock>^{B}*("//")?{B}*"*"+/[^//] { // start of a comment line
}
<DocBlock>^{B}*("//"){B}* { // strip embedded C++ comments if at the start of a line
}
<DocBlock>"//" { // slashes in the middle of a comment block
docBlock+=yytext;
}
<DocBlock>("@@"|"\\\\"){ID}/[^a-z_A-Z0-9] { // escaped command
docBlock+=yytext;
......@@ -4423,7 +4023,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
docBlockName=&yytext[1];
BEGIN(DocCopyBlock);
}
<DocBlock>[^@*\\\n]+ { // any character that isn't special
<DocBlock>[^@*\/\\\n]+ { // any character that isn't special
docBlock+=yytext;
}
<DocBlock>\n { // newline
......@@ -4470,1686 +4070,69 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
/* ------------- Prototype parser -------------- */
/*************************************************************************/
/*** The next part is obsolete and will be removed ***/
<JavaDoc>{CMD}("brief"|"short"){B}+ {
lastBriefContext=tmpDocType;
BEGIN( ClassDocBrief );
}
<JavaDoc>^(({B}*"*"+)?){BL} {
lineCount();
if (!current->brief.stripWhiteSpace().isEmpty())
{
BEGIN( tmpDocType );
}
}
/*
<JavaDoc>"@" {
unput(*yytext);
BEGIN(ClassDoc);
}
*/
<JavaDoc>^{B}*"*"+/[^/] {
//printf("---> removing %s\n",yytext);
<Prototype>"operator"{B}*"("{B}*")" {
current->name+=yytext;
}
/*
<JavaDoc>[^\n\@\*\.\\]+ {
current->brief+=yytext;
<Prototype>"(" {
current->args+=*yytext;
currentArgumentContext = PrototypeQual;
fullArgString = current->args.copy();
copyArgString = &current->args;
BEGIN( ReadFuncArgType ) ;
}
*/
<JavaDoc>. {
//printf("---> copy %c\n",*yytext);
current->brief+=*yytext;
<Prototype>"("({ID}"::")*({B}*"*")+ {
current->type+=current->name+yytext;
current->name.resize(0);
BEGIN( PrototypePtr );
}
<JavaDoc>\n {
current->brief+=' ';
lineCount();
<PrototypePtr>{SCOPENAME} {
current->name+=yytext;
}
<JavaDoc,AfterDocBrief>".\\"/[ \t\r\n] {
current->brief+=".";
}
<JavaDoc>"."[ \t\r\n] {
lineCount();
current->brief+=".";
BEGIN( tmpDocType );
}
<JavaDoc>{B}*/{SECTIONCMD} {
current->doc+=yytext;
BEGIN( tmpDocType );
<PrototypePtr>")" {
current->type+=')';
BEGIN( Prototype );
}
<JavaDoc>"<"({TABLE}|{UL}|{OL}|{DL}|{P}){ATTR}">" { // end brief upon encountering any of these
int i;
for (i=yyleng-1;i>=0;i--)
{
unput(yytext[i]);
}
BEGIN( tmpDocType );
<PrototypeQual>"{" {
BEGIN( PrototypeSkipLine);
}
<Doc,JavaDoc>{B}*{CMD}("fn"|"var"|"typedef"|"property"){B}+ {
current->section = Entry::MEMBERDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocFunc );
<PrototypeQual>{B}*"const"{B}* {
current->args += " const ";
current->argList->constSpecifier=TRUE;
}
<Doc,JavaDoc>{B}*{CMD}"def"{B}+ {
nextDefContext = YY_START==LineDoc ? DefLineDoc : ClassDoc;
current->section = Entry::DEFINEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocDefine );
}
<LineDoc,Doc,JavaDoc>{B}*{CMD}"overload"{B}* {
overloadContext = YY_START;
BEGIN( ClassDocOverload );
}
<ClassDocOverload>{B}*/"\n" {
QCString orgDoc = current->doc;
current->doc = getOverloadDocs();
current->doc += "\n\n";
current->doc += orgDoc;
BEGIN( overloadContext );
}
<ClassDocOverload>{B}*/"*/" {
QCString orgDoc = current->doc;
current->doc = getOverloadDocs();
current->doc += "\n\n";
current->doc += orgDoc;
BEGIN( overloadContext );
}
<ClassDocOverload>. { unput(*yytext);
current->section = Entry::OVERLOADDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocFunc );
<PrototypeQual>{B}*"volatile"{B}* {
current->args += " volatile ";
current->argList->volatileSpecifier=TRUE;
}
<Doc,JavaDoc>{B}*{CMD}"enum"{B}+ {
current->section = Entry::ENUMDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( EnumDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"defgroup"{B}+ {
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->groupDocType = Entry::GROUPDOC_NORMAL;
BEGIN( GroupDocArg1 );
<PrototypeQual>{B}*"="{B}*"0"{B}* {
current->args += " = 0";
current->virt = Pure;
current->argList->pureSpecifier=TRUE;
}
<PrototypeQual>"throw"{B}*"(" {
current->exception = "throw(";
BEGIN(PrototypeExc);
}
<Doc,PageDoc,JavaDoc>{B}*{CMD}"addtogroup"{B}+ {
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->groupDocType = Entry::GROUPDOC_ADD;
BEGIN( GroupDocArg1 );
<PrototypeExc>")" {
current->exception += ')';
BEGIN(PrototypeQual);
}
<Doc,PageDoc,JavaDoc>{B}*{CMD}"weakgroup"{B}+ {
current->section = Entry::GROUPDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->groupDocType = Entry::GROUPDOC_WEAK;
BEGIN( GroupDocArg1 );
<PrototypeExc>. {
current->exception += *yytext;
}
<Doc,JavaDoc>{B}*{CMD}"namespace"{B}+ {
current->section = Entry::NAMESPACEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( NameSpaceDocArg1 );
<Prototype,PrototypeQual>. {
current->name += *yytext;
}
<Doc,JavaDoc>{B}*{CMD}"package"{B}+ {
current->section = Entry::PACKAGEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( PackageDocArg1 );
<PrototypeSkipLine>. {
}
<Doc,JavaDoc>{B}*{CMD}"class"{B}+ {
current->section = Entry::CLASSDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"protocol"{B}+ { // ObjC protocol
current->section = Entry::PROTOCOLDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"category"{B}+ { // ObjC category
current->section = Entry::CATEGORYDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( CategoryDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"union"{B}+ {
current->section = Entry::UNIONDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"struct"{B}+ {
current->section = Entry::STRUCTDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"interface"{B}+ {
current->section = Entry::INTERFACEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"idlexcept"{B}+ {
current->section = Entry::EXCEPTIONDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"page"{B}+ {
current->section = Entry::PAGEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( PageDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"mainpage"{B}* {
current->section = Entry::MAINPAGEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
current->name = "mainpage";
BEGIN( PageDocArg2 );
}
<Doc,LineDoc,JavaDoc>{B}*{CMD}"file"{B}* {
current->section = Entry::FILEDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
lastFileDocContext = YY_START;
BEGIN( FileDocArg1 );
}
<Doc,LineDoc,JavaDoc>{B}*{CMD}"dir"{B}* {
current->section = Entry::DIRDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( FileDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"example"{B}+ {
current->section = Entry::EXAMPLE_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ExampleDocArg1 );
}
<ClassDoc,PageDoc,Doc,JavaDoc>{B}*{CMD}"details"{B}+ { /* nop */
}
<LineDoc>{CMD}"name"[^\n]*\n {
lastDefGroup.groupname.resize(0);
memberGroupHeader=&yytext[5];
memberGroupHeader=memberGroupHeader.stripWhiteSpace();
current->section = Entry::MEMBERGRP_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
yyLineNr++;
startGroupInDoc();
BEGIN( lastDocContext );
}
<Doc,JavaDoc>{CMD}"name"{B}+ {
lastDefGroup.groupname.resize(0);
current->section = Entry::MEMBERGRP_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
memberGroupHeader.resize(0);
memberGroupDocs.resize(0);
BEGIN(GroupHeader);
}
<LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>"<!--" {
lastSkipHtmlCommentContext = YY_START;
BEGIN(SkipHtmlComment);
}
<SkipHtmlComment>"--"[!]?">" { BEGIN(lastSkipHtmlCommentContext); }
<SkipHtmlComment>.
<AfterDoc,Doc,ClassDoc,PageDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated"|"xrefitem")/[^a-z_A-Z0-9] {
current->doc+=yytext;
}
<AfterDocLine,LineDoc,JavaDoc>("\\\\"|"@@")("todo"|"test"|"bug"|"deprecated"|"xrefitem")/[^a-z_A-Z0-9] {
current->brief+=yytext;
}
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"todo"/[^a-z_A-Z0-9] {
slStartContext = YY_START;
lastBriefContext = TodoParam; // this is where we will continue at the end of the argument
slString = current->brief.copy(); // these will be swapped later on.
current->brief.resize(0);
BEGIN(ClassDocBrief);
}
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"test"/[^a-z_A-Z0-9] {
slStartContext = YY_START;
lastBriefContext = TestParam; // this is where we will continue at the end of the argument
slString = current->brief.copy(); // these will be swapped later on.
current->brief.resize(0);
BEGIN(ClassDocBrief);
}
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"bug"/[^a-z_A-Z0-9] {
slStartContext = YY_START;
lastBriefContext = BugParam; // this is where we will continue at the end of the argument
slString = current->brief.copy(); // these will be swapped later on.
current->brief.resize(0);
BEGIN(ClassDocBrief);
}
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"deprecated"/[^a-z_A-Z0-9] {
slStartContext = YY_START;
lastBriefContext = DeprecatedParam; // this is where we will continue at the end of the argument
slString = current->brief.copy(); // these will be swapped later on.
current->brief.resize(0);
BEGIN(ClassDocBrief);
}
<AfterDoc,AfterDocLine,LineDoc,Doc,JavaDoc,ClassDoc,PageDoc>{CMD}"xrefitem"/[^a-z_A-Z0-9] {
slStartContext = YY_START;
lastBriefContext = XRefItemParam4; // this is where we will continue at the end of the argument
slString = current->brief.copy(); // these will be swapped later on.
current->brief.resize(0);
BEGIN(XRefItemParam1);
}
<TodoParam>\n |
<TodoParam>"//" |
<TodoParam>"/*" |
<TodoParam>. {
addXRefItem(lastDocContext==SkipCurly,
"todo",theTranslator->trTodo(),theTranslator->trTodoList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
<TestParam>\n |
<TestParam>"//" |
<TestParam>"/*" |
<TestParam>. {
addXRefItem(lastDocContext==SkipCurly,
"test",theTranslator->trTest(),theTranslator->trTestList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
<BugParam>\n |
<BugParam>"//" |
<BugParam>"/*" |
<BugParam>. {
addXRefItem(lastDocContext==SkipCurly,
"bug",theTranslator->trBug(),theTranslator->trBugList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
<DeprecatedParam>\n |
<DeprecatedParam>"//" |
<DeprecatedParam>"/*" |
<DeprecatedParam>. {
addXRefItem(lastDocContext==SkipCurly,
"deprecated",theTranslator->trDeprecated(),theTranslator->trDeprecatedList());
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
<XRefItemParam1>{ID} {
xrefItemKey=yytext;
BEGIN(XRefItemParam2);
}
<XRefItemParam1>{B}*
<XRefItemParam1>. {
warn(yyFileName,yyLineNr,"Found unexpected character %s while parsing the first argument of \\xrefitem\n",yytext);
unput(*yytext);
BEGIN(slStartContext);
}
<XRefItemParam2>"\""[^\n\"]*"\"" {
xrefItemTitle = stripQuotes(yytext);
BEGIN(XRefItemParam3);
}
<XRefItemParam2>{B}*
<XRefItemParam2>. {
warn(yyFileName,yyLineNr,"Found unexpected character %s while parsing the second argument of \\xrefitem\n",yytext);
unput(*yytext);
BEGIN(slStartContext);
}
<XRefItemParam3>{B}*
<XRefItemParam3>"\""[^\n\"]*"\"" {
xrefListTitle = stripQuotes(yytext);
BEGIN(ClassDocBrief);
}
<XRefItemParam3>. {
warn(yyFileName,yyLineNr,"Found unexpected character %s while parsing the third argument of \\xrefitem\n",yytext);
unput(*yytext);
BEGIN(slStartContext);
}
<XRefItemParam4>{B}*
<XRefItemParam4>\n |
<XRefItemParam4>"//" |
<XRefItemParam4>"/*" |
<XRefItemParam4>. {
addXRefItem(lastDocContext==SkipCurly,
xrefItemKey,xrefItemTitle,xrefListTitle);
int i;for (i=yyleng-1;i>=0;i--) unput(yytext[i]);
BEGIN(slStartContext);
}
<ExampleDocArg1>{FILE} {
current->name = stripQuotes(yytext);
BEGIN( PageDoc );
}
<ClassDoc,Doc,JavaDoc>{B}*{CMD}"relate"[sd]{B}* {
lastDocRelContext = YY_START;
BEGIN( ClassDocRelates );
}
<ClassDocRelates>({ID}"::")*{ID} {
current->relates = yytext;
if (current->mGrpId!=DOX_NOGROUP)
{
memberGroupRelates = yytext;
}
BEGIN( lastDocRelContext );
}
<ClassDoc,Doc,JavaDoc>{B}*{CMD}"relate"[sd]"also"{B}* {
lastDocRelAlsoContext = YY_START;
BEGIN( ClassDocRelatesAlso );
}
<ClassDocRelatesAlso>({ID}"::")*{ID} {
current->relatesDup = TRUE;
current->relates = yytext;
if (current->mGrpId!=DOX_NOGROUP)
{
memberGroupRelates = yytext;
}
BEGIN( lastDocRelAlsoContext );
}
<NameSpaceDocArg1>{SCOPENAME} {
current->name = yytext;
newDocState();
}
<NameSpaceDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<NameSpaceDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\namespace."
);
yyLineNr++;
}
<PackageDocArg1>{ID}("."{ID})* {
current->name = yytext;
newDocState();
}
<PackageDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<PackageDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\package."
);
yyLineNr++;
}
<CategoryDocArg1>{SCOPENAME}{B}*"("[^\)]+")" {
current->name = yytext;
prependScope();
BEGIN( ClassDocArg2 );
}
<ClassDocArg1>{SCOPENAME}/"<" {
current->name = yytext;
// prepend outer scope name
prependScope();
lastClassTemplSpecContext = ClassDocArg2;
BEGIN( ClassTemplSpec );
}
<ClassDocArg1>{SCOPENAME} {
current->name = yytext;
if (current->section==Entry::PROTOCOLDOC_SEC)
{
current->name+="-p";
}
// prepend outer scope name
prependScope();
BEGIN( ClassDocArg2 );
}
<ClassDocArg1,CategoryDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<ClassDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\class."
);
yyLineNr++;
}
<CategoryDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\category."
);
yyLineNr++;
}
<GroupDocArg1>{ID}(".html"?) {
current->name = yytext;
lastDefGroup.groupname = yytext;
lastDefGroup.pri = current->groupingPri();
// the .html stuff is for Qt compatibility
if (current->name.right(5)==".html")
current->name=current->name.left(current->name.length()-5);
BEGIN(GroupDocArg2);
}
<GroupDocArg1>"\\"{B}*"\n" { yyLineNr++;
}
<GroupDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing group name after %s",
current->groupDocCmd()
);
yyLineNr++;
BEGIN( Doc );
}
<GroupDocArg2>{B}*"*/" {
// fake input for end of title rule
yyLineNr--;
unput('/');unput('*');unput('\n');
}
<GroupDocArg2>"\\"{B}*"\n" { yyLineNr++;
}
<GroupDocArg2>[^\n\\\*]+ {
current->type += yytext;
current->type = current->type.stripWhiteSpace();
}
<GroupDocArg2>"\\_linebr"|"\n" {
if( current->groupDocType == Entry::GROUPDOC_NORMAL &&
current->type.length() == 0 )
warn(yyFileName,yyLineNr,
"Warning: missing title after "
"\\defgroup %s", current->name.data()
);
if (*yytext=='\n') yyLineNr++;
newDocState();
}
<ClassDocArg2>{FILE} {
//printf("ClassDocArg2=%s\n",yytext);
current->includeFile = stripQuotes(yytext);
BEGIN( ClassDocArg3 );
}
<ClassDocArg2>"\\"{B}*"\n" { yyLineNr++;
}
<ClassDocArg2>"\\_linebr" {
newDocState();
}
<ClassDocArg2>"\n" { yyLineNr++;
newDocState();
}
<ClassDocArg2>{B}*"*/" {
newDocState();
unput('/');unput('*');
}
<ClassDocArg3>[<]?{FILE}[>]? {
//printf("ClassDocArg3=%s\n",yytext);
current->includeName = yytext;
newDocState();
}
<ClassDocArg3>"\\"{B}*"\n" { yyLineNr++;
}
<ClassDocArg3>"\n"|"\\linebr" { yyLineNr++;
newDocState();
}
<ClassDocArg3>{B}*"*/" {
newDocState();
unput('/');unput('*');
}
<FileDocArg1>{FILE} {
current->name = stripQuotes(yytext);
newDocState();
}
<FileDocArg1>"\\"{B}*"\n" { yyLineNr++;
}
<FileDocArg1>"\n"|"\\_linebr" {
current->name = yyFileName;
if (*yytext=='\n') yyLineNr++;
newDocState();
if (lastFileDocContext==LineDoc)
{
current->doc += "\n\n";
current_root->addSubEntry(current);
current = new Entry ;
initEntry();
BEGIN( FindMembers );
}
}
<PageDocArg1>{FILE} {
current->name = stripQuotes(yytext);
BEGIN( PageDocArg2 );
}
<PageDocArg1>"\\"{B}*"\n" { yyLineNr++;
current->doc+="\n";
}
<PageDocArg1>"\n"|"\\_linebr" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\page."
);
current->doc+="\n";
if (*yytext=='\n') yyLineNr++;
BEGIN( Doc );
}
<PageDocArg2>.*"\n" {
yyLineNr++;
current->args = yytext;
current->doc+="\n";
BEGIN( PageDoc );
}
<EnumDocArg1>{SCOPEID} {
current->name = yytext;
prependScope();
newDocState();
}
<EnumDocArg1>"\\"{B}*"\n" { yyLineNr++;
current->doc+="\n";
}
<EnumDocArg1>"\n"|"\\_linebr" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after \\enum."
);
current->doc+="\n";
if (*yytext=='\n') yyLineNr++;
BEGIN( Doc );
}
<PageDoc>{CMD}"refitem".*"\n" {
current->doc+=yytext;
}
<ClassDoc,PageDoc,Doc,JavaDoc>{CMD}"section"{B}+ {
//sectionType=SectionInfo::Section;
current->doc+=yytext;
lastSectionContext=YY_START;
BEGIN(SectionLabel);
}
<ClassDoc,PageDoc,Doc,JavaDoc>{CMD}"subsection"{B}+ {
//sectionType=SectionInfo::Subsection;
current->doc+=yytext;
lastSectionContext=YY_START;
BEGIN(SectionLabel);
}
<ClassDoc,PageDoc,Doc,JavaDoc>{CMD}"subsubsection"{B}+ {
//sectionType=SectionInfo::Subsubsection;
current->doc+=yytext;
lastSectionContext=YY_START;
BEGIN(SectionLabel);
}
<ClassDoc,PageDoc,Doc,JavaDoc>{CMD}"paragraph"{B}+ {
//sectionType=SectionInfo::Paragraph;
current->doc+=yytext;
lastSectionContext=YY_START;
BEGIN(SectionLabel);
}
<GroupHeader>. { memberGroupHeader+=*yytext; }
<GroupHeader>"*/" {
unput('/');unput('*');
//printf("Found memberGroup=`%s'\n",memberGroupHeader.data());
startGroupInDoc();
newDocState();
}
<GroupHeader>\n|"\\_linebr" {
if (*yytext=='\n') yyLineNr++;
current->doc+="\n";
//printf("Found memberGroup=`%s'\n",memberGroupHeader.data());
startGroupInDoc();
newDocState();
}
<StoreGroupDocs>"$" {
//printf("StoreGroupDocs memberGroupId=%d brief=`%s' doc=`%s'!\n",memberGroupId,current->brief.data(),current->doc.data());
memberGroupDocs=current->brief.stripWhiteSpace();
current->doc = current->doc.stripWhiteSpace();
if (!memberGroupDocs.isEmpty() && !current->doc.isEmpty())
{
memberGroupDocs+="\n\n";
}
memberGroupDocs+=current->doc;
//Doxygen::memberDocDict.insert(memberGroupId,
// new QCString(memberGroupDocs)
// );
MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(memberGroupId);
if (info)
{
info->doc = memberGroupDocs;
info->docFile = yyFileName;
}
current->doc.resize(0);
current->brief.resize(0);
BEGIN(lastDocContext);
}
<Doc,PageDoc,JavaDoc,ClassDoc>{CMD}"anchor"{B}+ {
lastAnchorContext = YY_START;
//sectionType=SectionInfo::Anchor;
current->doc+=yytext;
BEGIN(AnchorLabel);
}
<Doc,PageDoc,ClassDoc>("\\\\"|"@@")("verbatim"|"latexonly"|"htmlonly"|"dot")/[^a-z_A-Z0-9] {
current->doc+=yytext;
}
<JavaDoc>("\\\\"|"@@")("verbatim"|"latexonly"|"htmlonly"|"dot")/[^a-z_A-Z0-9] {
current->brief+=yytext;
}
<Doc,PageDoc,ClassDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->doc+="\\verbatim";
g_skipBlockName="verbatim";
BEGIN(SkipVerbatim);
}
<JavaDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->brief+="\\verbatim";
g_skipBlockName="verbatim";
BEGIN(SkipVerbatim);
}
<Doc,PageDoc,ClassDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->doc+="\\latexonly";
g_skipBlockName="latexonly";
BEGIN(SkipVerbatim);
}
<JavaDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->brief+="\\latexonly";
g_skipBlockName="latexonly";
BEGIN(SkipVerbatim);
}
<Doc,PageDoc,ClassDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->doc+="\\htmlonly";
g_skipBlockName="htmlonly";
BEGIN(SkipVerbatim);
}
<JavaDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->brief+="\\htmlonly";
g_skipBlockName="htmlonly";
BEGIN(SkipVerbatim);
}
<Doc,PageDoc,ClassDoc>{CMD}"addindex"{B}+[^\n]+ {
current->doc+=yytext;
}
<JavaDoc>{CMD}"addindex"{B}+[^\n]+ {
current->brief+=yytext;
}
<Doc,PageDoc,ClassDoc>("\\\\"|"@@")"code"/[^a-z_A-Z0-9] {
current->doc+="\\\\code";
}
<JavaDoc>("\\\\"|"@@")"code"/[^a-z_A-Z0-9] {
current->brief+="\\\\code";
}
<Doc,PageDoc,ClassDoc>{CMD}"code"/[^a-z_A-Z0-9] {
lastCodeState=YY_START;
current->doc+="\\code";
pSkipDoc=&current->doc;
g_skipBlockName="code";
BEGIN(SkipCode);
}
<JavaDoc>{CMD}"code"/[^a-z_A-Z0-9] {
lastCodeState=YY_START;
current->brief+="\\code";
pSkipDoc=&current->brief;
g_skipBlockName="code";
BEGIN(SkipCode);
}
<Doc,PageDoc,ClassDoc>("\\\\"|"@@")"dot"/[^a-z_A-Z0-9] {
current->doc+="\\\\dot";
}
<JavaDoc>("\\\\"|"@@")"dot"/[^a-z_A-Z0-9] {
current->brief+="\\\\dot";
}
<Doc,PageDoc,ClassDoc>{CMD}"dot"/[^a-z_A-Z0-9] {
lastCodeState=YY_START;
current->doc+="\\dot";
pSkipDoc=&current->doc;
g_skipBlockName="dot";
BEGIN(SkipCode);
}
<JavaDoc>{CMD}"dot"/[^a-z_A-Z0-9] {
lastCodeState=YY_START;
current->brief+="\\dot";
pSkipDoc=&current->brief;
g_skipBlockName="dot";
BEGIN(SkipCode);
}
<Doc,PageDoc,ClassDoc>"<"{PRE}{ATTR}">" {
lastCodeState=YY_START;
current->doc+="<PRE>";
pSkipDoc=&current->doc;
g_skipBlockName="pre";
BEGIN(SkipCode);
}
<JavaDoc>"<"{PRE}{ATTR}">" {
lastCodeState=YY_START;
current->brief+="<PRE>";
pSkipDoc=&current->brief;
g_skipBlockName="pre";
BEGIN(SkipCode);
}
<SkipVerbatim>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot")/[^a-z_A-Z0-9] {
current->doc+=yytext;
BEGIN(lastVerbState);
}
<SkipVerbatim>[^ \t\/\@\\\n]* {
current->doc+=yytext;
}
<SkipVerbatim>^"//" {
if (!removeSlashes)
current->doc+=yytext;
}
/*
<SkipVerbatim>^"//"({B}*"*"+)? {
if (!removeSlashes)
current->doc+=yytext;
}
<SkipVerbatim>^{B}*"*"+
*/
<SkipVerbatim>"//"|"/*" {
current->doc+=yytext;
}
<SkipVerbatim>"\n" {
yyLineNr++;
current->doc+=*yytext;
}
<SkipVerbatim>. {
current->doc+=*yytext;
}
<SkipVerbatim><<EOF>> {
warn(yyFileName,yyLineNr,
"Warning: reached end of file while inside a @%s block; check for missing @end%s tag!",g_skipBlockName.data(),g_skipBlockName.data()
);
yyterminate();
}
<SkipCode>{CMD}"endcode"/[^a-z_A-Z0-9] {
*pSkipDoc+="\\endcode";
if (g_skipBlockName=="code")
{
BEGIN(lastCodeState);
}
}
<SkipCode>"</"{PRE}{ATTR}">" {
*pSkipDoc+="</PRE>";
if (g_skipBlockName=="pre")
{
BEGIN(lastCodeState);
}
}
<SkipCode>{CMD}"enddot"/[^a-z_A-Z0-9] {
*pSkipDoc+="\\enddot";
if (g_skipBlockName=="dot")
{
BEGIN(lastCodeState);
}
}
<SkipCode>^"//"({B}*"*"+)? {
if (!removeSlashes)
*pSkipDoc+=yytext;
}
<SkipCode>^{B}*"*"+/{BN}+
<SkipCode>"//" {
*pSkipDoc+=yytext;
}
<SkipCode>"/*"|"*/" {
*pSkipDoc+=yytext;
}
<SkipCode>[^ \<\*\t\/\\\n]+ {
*pSkipDoc+=yytext;
}
<SkipCode>\n {
yyLineNr++;
*pSkipDoc+=*yytext;
}
<SkipCode>. {
*pSkipDoc+=*yytext;
}
<SkipCode><<EOF>> {
warn(yyFileName,yyLineNr,
"Warning: reached end of file while inside a @%s block; check for missing @end%s tag!",
g_skipBlockName.data(),
g_skipBlockName.data()
);
yyterminate();
}
<AnchorLabel>{LABELID} {
SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor);
printf("New anchor file=%s label=%s\n",yyFileName,yytext);
Doxygen::sectionDict.insert(yytext,si);
current->anchors->append(si);
current->doc+=yytext;
BEGIN(lastAnchorContext);
}
<SectionLabel>{LABELID} {
sectionLabel=yytext;
sectionTitle.resize(0);
current->doc+=yytext;
BEGIN(SectionTitle);
}
<SectionTitle>[^\n*]*/"\n" {
sectionTitle+=yytext;
sectionTitle=sectionTitle.stripWhiteSpace();
//printf("Adding new section file=%s label=%s title=%s\n",yyFileName,sectionLabel.data(),sectionTitle.data());
SectionInfo *si = new SectionInfo(yyFileName,sectionLabel,sectionTitle,SectionInfo::Anchor);
current->anchors->append(si);
Doxygen::sectionDict.insert(yytext,si);
current->doc+=yytext;
BEGIN(lastSectionContext);
}
<SectionTitle>[^\n*]*/"\\_linebr" {
sectionTitle+=yytext;
sectionTitle=sectionTitle.stripWhiteSpace();
//printf("Adding new section file=%s label=%s title=%s\n",yyFileName,sectionLabel.data(),sectionTitle.data());
SectionInfo *si = new SectionInfo(yyFileName,sectionLabel,sectionTitle,SectionInfo::Anchor);
current->anchors->append(si);
Doxygen::sectionDict.insert(yytext,si);
current->doc+=yytext;
BEGIN(lastSectionContext);
}
<SectionTitle>[^\n*]* {
sectionTitle+=yytext;
current->doc+=yytext;
}
<SectionTitle>"*" {
sectionTitle+=yytext;
current->doc+=yytext;
}
<PageDoc,ClassDoc>"\n" { yyLineNr++ ; current->doc+=yytext; }
<PageDoc,ClassDoc>[a-z_A-Z0-9 \t]+ { current->doc += yytext; }
<PageDoc>{CMD}"ingroup"{B}+ {
lastGroupContext = YY_START;
lineCount();
BEGIN( GroupName );
}
<ClassDoc,Doc,JavaDoc>{CMD}"{" {
if (memberGroupId==DOX_NOGROUP && current->section==Entry::GROUPDOC_SEC)
{
startGroupInDoc();
}
}
<ClassDoc,Doc,JavaDoc>{CMD}"}" {
if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty())
{
warn(yyFileName,yyLineNr,
"Warning: end of group without matching begin.");
}
//printf("end of member group marker ends group %d\n",memberGroupId);
endGroup();
memberGroupHeader.resize(0);
}
<PageDoc,ClassDoc>. { current->doc += yytext; }
<Doc,JavaDoc,LineDoc,PageDoc,ClassDoc>^{B}*"//"
<Doc,PageDoc,ClassDoc>"//" { current->doc += yytext; }
<LineDoc,JavaDoc,ClassDocBrief>"//" { current->brief += yytext; }
<Doc,JavaDoc,LineDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief>("\\\\"|"@@")"f"[$\[\]] {
current->doc += yytext;
}
<Doc,JavaDoc,LineDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief,CopyArgComment,CopyArgCommentLine>{CMD}"f$" {
lastFormulaContext = YY_START;
formulaText="$";
insideFormula=TRUE;
BEGIN(ReadFormulaShort);
}
<Doc,JavaDoc,LineDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief,CopyArgComment,CopyArgCommentLine>{CMD}"f[" {
lastFormulaContext = YY_START;
formulaText="\\[";
insideFormula=TRUE;
BEGIN(ReadFormulaLong);
}
<Doc,JavaDoc,LineDoc,ClassDocBrief,PageDoc,ClassDoc,AfterDoc,AfterDocLine,AfterDocBrief,CopyArgComment,CopyArgCommentLine>{CMD}"f{"[^}\n]+"}" {
lastFormulaContext = YY_START;
formulaText="\\begin";
formulaEnd=&yytext[2];
formulaText+=formulaEnd;
insideFormula=TRUE;
BEGIN(ReadFormulaLong);
}
<ReadFormulaShort>{CMD}"f$" {
formulaText+="$";
if (lastFormulaContext==ClassDocBrief ||
lastFormulaContext==LineDoc ||
lastFormulaContext==JavaDoc ||
lastFormulaContext==AfterDocBrief ||
lastFormulaContext==AfterDocLine
)
{
current->brief += addFormula();
}
else if (lastFormulaContext==CopyArgComment ||
lastFormulaContext==CopyArgCommentLine)
{
fullArgString += addFormula();
}
else
{
current->doc += addFormula();
}
insideFormula=FALSE;
BEGIN(lastFormulaContext);
}
<ReadFormulaShort>\n {
formulaText+=" ";
yyLineNr++;
if (lastFormulaContext==LineDoc ||
lastFormulaContext==AfterDocLine
)
{
checkFormula();
insideFormula=FALSE;
BEGIN(lastFormulaContext);
}
}
<ReadFormulaLong>{CMD}"f"[\}\]] {
if (yytext[2]==']')
{
formulaText+="\\]";
}
else
{
formulaText+="\\end";
formulaText+=formulaEnd;
}
if (lastFormulaContext==ClassDocBrief ||
lastFormulaContext==LineDoc ||
lastFormulaContext==JavaDoc ||
lastFormulaContext==AfterDocBrief ||
lastFormulaContext==AfterDocLine
)
{
current->brief += addFormula();
}
else if (lastFormulaContext==CopyArgComment ||
lastFormulaContext==CopyArgCommentLine)
{
fullArgString += addFormula();
}
else
{
current->doc += addFormula();
}
insideFormula=FALSE;
BEGIN(lastFormulaContext);
}
<ReadFormulaLong>\n { formulaText+=*yytext; yyLineNr++; }
<ReadFormulaLong,ReadFormulaShort>. { formulaText+=*yytext; }
<PageDoc,ClassDocBrief,ClassDoc,ReadFormulaShort,ReadFormulaLong>{B}*"*/" {
checkDocs();
//printf("current->section=%x\n",current->section);
if (YY_START==SkipCode) // premature end of code block
{
err("Error: comment block ended inside \\code ... \\endcode block at line %d in %s!\n",
yyLineNr,yyFileName);
*pSkipDoc += "\\endcode\n\n";
BEGIN( lastDocContext );
}
else if (YY_START==ClassDocBrief &&
lastBriefContext==TodoParam)
{
unput('/');unput('*'); // make sure we have something to read
BEGIN( TodoParam );
}
else if (YY_START==ClassDocBrief &&
lastBriefContext==TestParam)
{
unput('/');unput('*'); // make sure we have something to read
BEGIN( TestParam );
}
else if (YY_START==ClassDocBrief &&
lastBriefContext==BugParam)
{
unput('/');unput('*'); // make sure we have something to read
BEGIN( BugParam );
}
else if (YY_START==ClassDocBrief &&
lastBriefContext==DeprecatedParam)
{
unput('/');unput('*'); // make sure we have something to read
BEGIN( DeprecatedParam );
}
else if (YY_START==ClassDocBrief &&
lastBriefContext==XRefItemParam4)
{
unput('/');unput('*'); // make sure we have something to read
BEGIN( XRefItemParam4 );
}
else if (YY_START==ClassDocBrief &&
lastBriefContext==Doc)
{
//printf("Add docs %s\n",current->doc.data());
current->doc += "\n\n";
BEGIN( lastDocContext );
}
else if (current->section==Entry::MEMBERGRP_SEC)
{
unput('$');
BEGIN( StoreGroupDocs );
}
else
{
current->doc += "\n\n";
//printf("Add docs for %s\n",current->name.data());
current_root->addSubEntry(current);
current = new Entry ;
initEntry();
BEGIN( lastDocContext );
}
}
<PageDoc>"<"{TITLE}">" {
current->args.resize(0);
current->argList->clear();
BEGIN( PageDocTitle);
}
<PageDocTitle>\n { yyLineNr++; current->args+=" "; }
<PageDocTitle>[^\n\<] { current->args+=yytext; }
<PageDocTitle>"</"{TITLE}">" { BEGIN( PageDoc ); }
/* escaped versions of the conditional commands (for putting them in the docs) */
<ClassDoc,Doc,AfterDoc,PageDoc>{CMD}{CMD}"if"/[^a-z_A-Z0-9] { current->doc+=yytext; }
<ClassDoc,Doc,AfterDoc,PageDoc>{CMD}{CMD}"ifnot"/[^a-z_A-Z0-9] { current->doc+=yytext; }
<ClassDoc,Doc,AfterDoc,PageDoc>{CMD}{CMD}"elseif"/[^a-z_A-Z0-9] { current->doc+=yytext; }
<ClassDoc,Doc,AfterDoc,PageDoc>{CMD}{CMD}"else"/[^a-z_A-Z0-9] { current->doc+=yytext; }
<ClassDoc,Doc,AfterDoc,PageDoc>{CMD}{CMD}"endif"/[^a-z_A-Z0-9] { current->doc+=yytext; }
<LineDoc,JavaDoc>{CMD}{CMD}"if"/[^a-z_A-Z0-9] { current->brief+=yytext; }
<LineDoc,JavaDoc>{CMD}{CMD}"ifnot"/[^a-z_A-Z0-9] { current->brief+=yytext; }
<LineDoc,JavaDoc>{CMD}{CMD}"elseif"/[^a-z_A-Z0-9] { current->brief+=yytext; }
<LineDoc,JavaDoc>{CMD}{CMD}"else"/[^a-z_A-Z0-9] { current->brief+=yytext; }
<LineDoc,JavaDoc>{CMD}{CMD}"endif"/[^a-z_A-Z0-9] { current->brief+=yytext; }
/* conditional commands */
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc>{CMD}"if"{B}+ {
lastIfContext = YY_START;
BEGIN(IfGuard);
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc>{CMD}"ifnot"{B}+ {
lastIfContext = YY_START;
BEGIN(IfNotGuard);
}
<ClassDoc,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc>{CMD}"if"(\r?)\n |
<IfGuard>\n {
warn(yyFileName,yyLineNr,"Missing guard for if statement!");
yyLineNr++;
}
<IfGuard>[^\n\t ]+ {
if (Config_getList("ENABLED_SECTIONS").find(yytext)==-1) // not enabled
{
BEGIN(SkipSection);
depthIf=1;
}
else // section enabled
{
BEGIN(lastIfContext);
}
}
<IfNotGuard>\n {
warn(yyFileName,yyLineNr,"Missing guard for ifnot statement!");
yyLineNr++;
}
<IfNotGuard>[^\n\t ]+ {
if (Config_getList("ENABLED_SECTIONS").find(yytext)==-1) // not enabled
{
BEGIN(lastIfContext);
}
else // section enabled
{
depthIf=1;
BEGIN(SkipSection);
}
}
<SkipSection>{CMD}"if"/[^a-z_A-Z0-9] {
depthIf++;
}
<SkipSection>{CMD}"endif"/[^a-z_A-Z0-9] {
if (--depthIf<=0)
{
BEGIN(lastIfContext);
}
}
<SkipSection>{CMD}"else"/[^a-z_A-Z0-9] {
if (depthIf==1)
{
depthIf=0;
BEGIN(lastIfContext);
}
}
<SkipSection>{CMD}"elseif"/[^a-z_A-Z0-9] {
if (depthIf==1)
{
BEGIN(IfGuard);
}
}
<SkipSection>"*/" {
BEGIN( SkipSection );
}
<SkipSection>"/*!" {
BEGIN( SkipSection );
}
<SkipSection>\n {
yyLineNr++;
}
<SkipSection>"//"|"*/"
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc>{CMD}"elseif"/[^a-z_A-Z0-9] {
// previous section enabled => skip now
depthIf=1;
BEGIN(SkipSection);
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc>{CMD}"else"/[^a-z_A-Z0-9] {
// section was enabled => skip now
depthIf=1;
BEGIN(SkipSection);
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc,PageDoc>{CMD}"endif"/[^a-z_A-Z0-9] {
// section enabled => absorb endif
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"ingroup"{B}+ {
lastGroupContext = YY_START;
lineCount();
BEGIN( GroupName );
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"nosubgrouping"/[^a-z_A-Z0-9] {
current->subGrouping = FALSE;
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"showinitializer"/[^a-z_A-Z0-9] {
current->initLines = 100000; // ON
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"hideinitializer"/[^a-z_A-Z0-9] {
current->initLines = 0; // OFF
}
<ClassDoc,ClassDocBrief,LineDoc,AfterDocLine,AfterDocBrief,Doc,JavaDoc,AfterDoc>{CMD}"callgraph"/[^a-z_A-Z0-9] {
current->callGraph = TRUE; // ON
}
<GroupName>{ID} {
current->groups->append(
new Grouping(yytext, Grouping::GROUPING_INGROUP)
);
}
<GroupName>"\\_linebr" {
BEGIN( lastGroupContext );
}
<GroupName>"\n" {
yyLineNr++;
BEGIN( lastGroupContext );
}
<GroupName>"*/" {
unput('/');unput('*');
BEGIN( lastGroupContext );
}
<ClassDoc,Doc>{B}*{CMD}("brief"|"short") {
lastBriefContext=YY_START;
current->briefFile = yyFileName;
current->briefLine = yyLineNr;
BEGIN( ClassDocBrief );
}
<ClassDoc>{B}*"\\inherit"{B}+ { BEGIN( DocBaseClass ); }
<DocBaseClass>{ID} {
//printf("Adding base class %s\n",yytext);
current->extends->append(
new BaseInfo(removeRedundantWhiteSpace(yytext),Public,Normal)
);
}
<DocBaseClass>\n { yyLineNr++; BEGIN( ClassDoc ); }
<ClassDocBrief>{BS}({BL}|"\\n\\n") |
<ClassDocBrief>("\\_linebr \\_linebr") {
//if (!current->doc.isEmpty()) current->doc+=" <p>";
if (lastBriefContext==TodoParam ||
lastBriefContext==TestParam ||
lastBriefContext==BugParam ||
lastBriefContext==DeprecatedParam ||
lastBriefContext==XRefItemParam4
)
{
unput('\n');
}
else
{
current->brief=current->brief.stripWhiteSpace();
if (yytext[yyleng-1]=='\n') yyLineNr++;
}
BEGIN( lastBriefContext );
}
<ClassDocBrief>"\n" {
// allow \todo in brief description
if (lastBriefContext==TodoParam &&
(slStartContext==LineDoc ||
slStartContext==AfterDocLine
)
)
{
unput('\n'); // make sure we have something to read
BEGIN( TodoParam );
}
else if
(lastBriefContext==TestParam &&
(slStartContext==LineDoc ||
slStartContext==AfterDocLine
)
)
{
unput('\n'); // make sure we have something to read
BEGIN( TestParam );
}
else if
(lastBriefContext==BugParam &&
(slStartContext==LineDoc ||
slStartContext==AfterDocLine
)
)
{
unput('\n'); // make sure we have something to read
BEGIN( BugParam );
}
else if
(lastBriefContext==DeprecatedParam &&
(slStartContext==LineDoc ||
slStartContext==AfterDocLine
)
)
{
unput('\n'); // make sure we have something to read
BEGIN( DeprecatedParam );
}
else if
(lastBriefContext==XRefItemParam4 &&
(slStartContext==LineDoc ||
slStartContext==AfterDocLine
)
)
{
unput('\n'); // make sure we have something to read
BEGIN( XRefItemParam4 );
}
else
{
current->brief += "\n";
if (!current->doc.stripWhiteSpace().isEmpty())
{
current->doc += "<p>";
}
yyLineNr++ ;
}
}
<ClassDocBrief>"<"{BR}{ATTR}">"
<ClassDocBrief>{BS}/{SECTIONCMD} |
<ClassDocBrief>{B}*/{SECTIONCMD} {
current->brief=current->brief.stripWhiteSpace();
BEGIN( lastBriefContext );
}
<ClassDocBrief>{BS}{CMD}("brief"|"short"){BN}+ {
//lastBriefContext=YY_START;
}
<ClassDocBrief>{ID} { current->brief += yytext; }
<ClassDocBrief>. { current->brief += *yytext; }
<ClassDocDefine>{ID}/"(" {
current->name = yytext;
BEGIN( ClassDefineArgs );
}
<ClassDocDefine>{ID} {
current->name = yytext;
if (nextDefContext==ClassDoc)
newDocState();
else
BEGIN( nextDefContext );
}
<ClassDefineArgs>")" {
current->args+=")";
if (nextDefContext==ClassDoc)
newDocState();
else
BEGIN( nextDefContext );
}
<ClassDefineArgs>. {
current->args+= yytext;
}
<ClassDocFunc>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocFunc>"\n" {
yyLineNr++;
current->name = current->name.stripWhiteSpace();
if (current->section == Entry::MEMBERDOC_SEC && current->args.isEmpty())
current->section = Entry::VARIABLEDOC_SEC;
newDocState();
}
<ClassDocFunc>"operator"{B}*"("{B}*")" {
current->name+=yytext;
}
<ClassDocFunc>"(" {
current->args+=*yytext;
currentArgumentContext = ClassDocFuncQual;
fullArgString = current->args.copy();
copyArgString = &current->args;
BEGIN( ReadFuncArgType ) ;
}
<ClassDocFunc>"("({ID}"::")*({B}*"*")+ {
current->type+=current->name+yytext;
current->name.resize(0);
BEGIN( ClassDocFuncPtr );
}
<ClassDocFuncPtr>{SCOPENAME} {
current->name+=yytext;
}
<ClassDocFuncPtr>")" {
current->type+=')';
BEGIN( ClassDocFunc );
}
<ClassDocFuncQual>"{" {
BEGIN( ClassDocFuncSkipLine);
}
<ClassDocFuncQual>{B}*"const"{B}* {
current->args += " const ";
current->argList->constSpecifier=TRUE;
}
<ClassDocFuncQual>{B}*"volatile"{B}* {
current->args += " volatile ";
current->argList->volatileSpecifier=TRUE;
}
<ClassDocFuncQual>{B}*"="{B}*"0"{B}* {
current->args += " = 0";
current->virt = Pure;
current->argList->pureSpecifier=TRUE;
}
<ClassDocFuncQual>"throw"{B}*"(" {
current->exception = "throw(";
BEGIN(ClassDocFuncExc);
}
<ClassDocFuncExc>")" {
current->exception += ')';
BEGIN(ClassDocFuncQual);
}
<ClassDocFuncExc>. {
current->exception += *yytext;
}
<ClassDocFunc,ClassDocFuncQual>. {
current->name += *yytext;
}
<ClassDocFuncQual,ClassDocFuncSkipLine>"\n" {
yyLineNr++;
current->name = current->name.stripWhiteSpace();
newDocState();
}
<DefLineDoc,LineDoc,AfterDocLine>{SECTIONCMD} {
warn(yyFileName,yyLineNr,"Command %s not allowed in single-line C++ comment! Ignoring.",yytext);
}
<Doc>[a-z_A-Z0-9]+ { current->doc += yytext; }
<Doc,PageDoc,AfterDoc,LineDoc,ClassDoc>("\\\\"|"@@") { current->doc += yytext; }
<Doc>. { current->doc += *yytext; }
<DefLineDoc,LineDoc>. { current->brief += *yytext; }
<Doc>\n { yyLineNr++; current->doc += *yytext; }
<LineDoc>[\n\r]+{B}*"//"[!/] { lineCount(); }
<LineDoc>\n {
yyLineNr++;
if (lastDocContext==SkipCurly) // inside body
{
if (!Config_getBool("HIDE_IN_BODY_DOCS"))
{
if (!previous->doc.isEmpty())
{
previous->doc+="<p>";
}
previous->doc += current->brief;
}
current->brief.resize(0);
}
BEGIN( lastDocContext );
}
<DefLineDoc>\n {
yyLineNr++;
unput('/');unput('*');
BEGIN( ClassDoc );
}
<AfterDocLine>"/*"|"//" { current->brief+=yytext; }
<AfterDocLine>\n {
yyLineNr++;
if (afterDocTerminator!=0)
unput(afterDocTerminator);
BEGIN(lastAfterDocContext);
}
<AfterDocLine>\n{B}*("//!<"|"///<") {
yyLineNr++;
BEGIN(AfterDocLine);
}
<AfterDocLine>\n{B}*("/*!<"|"/**<") {
yyLineNr++;
BEGIN(AfterDoc);
}
<AfterDocLine>{ID} { current->brief+=yytext; }
<AfterDocLine>. { current->brief+=yytext; }
<AfterDocBrief>{BS}({BL}|"\\n\\n") {
current->brief=current->brief.stripWhiteSpace();
yyLineNr++;
BEGIN( AfterDoc );
}
<AfterDocBrief>"/*"|"//" { current->brief+=yytext; }
<AfterDocBrief>{B}*/{SECTIONCMD} {
current->brief=current->brief.stripWhiteSpace();
BEGIN( AfterDoc );
}
<AfterDocBrief>\n { current->brief+=yytext; yyLineNr++; }
<AfterDocBrief>. { current->brief+=*yytext; }
/*
<AfterDocBrief>"<"{BR}{ATTR}">"
<AfterDocBrief>{BS}/{CMD}"ingroup" {
current->brief=current->brief.stripWhiteSpace();
BEGIN( lastBriefContext );
}
<AfterDocBrief>{BS}/{SECTIONCMD} {
BEGIN( lastBriefContext );
}
<AfterDocBrief>{BS}/[^/\n]{BL} { yyLineNr++;
if (!current->brief.stripWhiteSpace().isEmpty())
BEGIN(AfterDoc);
}
*/
<AfterDocBrief>"*/" {
if (afterDocTerminator!=0)
unput(afterDocTerminator);
BEGIN(lastAfterDocContext);
}
<AfterDocBrief>"."/{BN} { BEGIN(AfterDoc); }
<LineDoc,AfterDocLine>{CMD}"internal" {
if (!Config_getBool("INTERNAL_DOCS"))
{
lastInternalDocContext = YY_START;
BEGIN( DocInternalLine );
}
else
{
current->doc+="\\internal";
}
}
<Doc,JavaDoc,PageDoc,ClassDoc,AfterDoc>{CMD}"internal" {
if (!Config_getBool("INTERNAL_DOCS"))
{
lastInternalDocContext = YY_START;
BEGIN( DocInternal );
}
else
{
current->doc+="\\internal";
}
}
<DocInternal>.
<DocInternal>\n { yyLineNr++; }
<DocInternal>"/*"|"//"
<DocInternal>"*/" {
unput('/');
unput('*');
BEGIN( lastInternalDocContext );
}
<DocInternalLine>.
<DocInternalLine>\n {
yyLineNr++;
unput('\n');
BEGIN( lastInternalDocContext );
}
<AfterDoc>{CMD}"brief" { current->brief.resize(0); BEGIN(AfterDocBrief); }
<AfterDoc>"/*"|"//" { current->doc+=yytext; }
<AfterDoc>^{B}*"*"+/[^/]
<AfterDoc>\n { current->doc+=yytext; yyLineNr++; }
<AfterDoc>. { current->doc+=*yytext; }
<AfterDoc>"*/" {
if (afterDocTerminator!=0)
unput(afterDocTerminator);
BEGIN(lastAfterDocContext);
}
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,CategoryDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs>"*/" {
// defer "*/" to a later time
unput('/');
unput('*');
// insert \n and decrement the line number to compensate for the artifical newline
unput('\n');
yyLineNr--;
BEGIN( Doc );
}
<FileDocArg1>"*/" {
current->name = yyFileName;
current->doc += "\n\n";
current_root->addSubEntry(current);
current = new Entry ;
initEntry();
BEGIN( FindMembers );
}
<Doc>"*/" {
checkDocs();
//printf("End of docs at line %d: %s\n",yyLineNr,current->doc.data());
if (lastDocContext==SkipCurly)
{
if (!Config_getBool("HIDE_IN_BODY_DOCS"))
{
if (!previous->doc.isEmpty())
{
previous->doc+="<p>";
}
previous->doc += current->doc;
}
current->doc.resize(0);
}
else
{
current->doc += "\n\n";
}
if (current->section==Entry::GROUPDOC_SEC)
{
current_root->addSubEntry(current);
current = new Entry ;
initEntry();
}
BEGIN( lastDocContext );
}
<JavaDoc>"*/" {
unput('/');unput('*');
BEGIN( tmpDocType );
}
<Doc,JavaDoc,LineDoc,ClassDocBrief,AfterDocBrief,AfterDocLine,CopyArgCommentLine,ClassDoc,PageDoc,AfterDoc,CopyArgComment,DocInternal,DocInternalLine>"\\_linebr " {
// used to compensate for misalignments due to \n's inside ALIASES
current->doc += '\n';
}
<Doc,JavaDoc,ClassDoc,PageDoc,ReadFormulaShort,ReadFormulaLong,AfterDoc>^{B}*(("//"{B}*)?)"*"+[ \t]*"-"("#")?{B}+ {
current->doc += yytext;
}
<Doc,JavaDoc,ClassDoc,PageDoc,ReadFormulaShort,ReadFormulaLong,AfterDoc>^{B}*(("//"{B}*)?)"*"+[ \t]*"."{B}*\n {
current->doc += yytext;
yyLineNr++;
}
<ClassDocBrief,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+[ \t]*"-"("#")?{B}+ {
current->brief += "-";
}
<ClassDocBrief,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+[ \t]*"."{B}*\n {
current->brief += "."; yyLineNr++;
}
<Doc,JavaDoc,ClassDoc,PageDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+/[^/]
<Doc,JavaDoc,ClassDoc,PageDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+{B}+ {
current->doc+=' ';
}
<Doc,ClassDoc,PageDoc,AfterDoc>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
current->doc+=yytext;
}
/*
<SkipSection>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
QCString *pValue=Doxygen::aliasDict[yytext+1];
if (pValue)
{
int i,l=pValue->length();
for (i=l-1;i>=0;i--)
{
unput(pValue->at(i));
}
}
}
*/
<Doc,ClassDoc,PageDoc,AfterDoc,CopyArgComment>{CMD}{CMD}[a-z_A-Z][a-z_A-Z0-9]* { /* escaped command */
if (YY_START==CopyArgComment)
fullArgString+=yytext;
else
current->doc+=yytext;
}
<Doc,ClassDoc,PageDoc,AfterDoc,CopyArgComment>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
bool handled=FALSE;
if ( useOverrideCommands)
{
if ( strcmp(yytext+1,"static")==0 )
{
current->stat = TRUE; handled = TRUE;
}
else if ( strcmp(yytext+1,"pure")==0 )
{
current->virt = Pure; handled = TRUE;
}
else if ( strcmp(yytext+1,"private")==0 )
{
current->protection = Private; handled = TRUE;
}
else if ( strcmp(yytext+1,"privatesection")==0 )
{
current->protection = protection = Private; handled = TRUE;
}
else if ( strcmp(yytext+1,"protected")==0 )
{
current->protection = Protected; handled = TRUE;
}
else if ( strcmp(yytext+1,"protectedsection")==0 )
{
current->protection = protection = Protected ; handled = TRUE;
}
else if ( strcmp(yytext+1,"public")==0 )
{
current->protection = Public; handled = TRUE;
}
else if ( strcmp(yytext+1,"publicsection")==0 )
{
current->protection = protection = Public; handled = TRUE;
}
}
if (!handled)
{
if (YY_START==CopyArgComment)
fullArgString+=yytext;
else
current->doc+=yytext;
}
}
<JavaDoc,LineDoc,ClassDocBrief,AfterDocBrief,AfterDocLine>"\\"[a-z_A-Z][a-z_A-Z0-9]*[\\] { // directory type of text
current->brief+=yytext;
}
<LineDoc,AfterDocLine,CopyArgCommentLine>{CMD}("brief"|"short") {}
<JavaDoc,LineDoc,ClassDocBrief,AfterDocBrief,AfterDocLine,CopyArgCommentLine>{CMD}{CMD}[a-z_A-Z][a-z_A-Z0-9]* { /* escaped command */
if (YY_START==CopyArgCommentLine)
fullArgString+=yytext;
else
current->brief+=yytext;
}
<JavaDoc,LineDoc,ClassDocBrief,AfterDocBrief,AfterDocLine,CopyArgCommentLine>{CMD}[a-z_A-Z][a-z_A-Z0-9]* {
if (YY_START==CopyArgCommentLine)
fullArgString+=yytext;
else
current->brief+=yytext;
}
<DefLineDoc,LineDoc,ClassDoc,PageDoc,Doc>"/*"|"//" { current->doc += yytext; }
/*** End of obsolete part ***/
/***********************************************************************/
<SkipCxxComment>.*/\n {
BEGIN( lastCContext ) ;
/* ------------ Generic rules -------------- */
<SkipCxxComment>.*/\n {
BEGIN( lastCContext ) ;
}
<SkipComment>[^\*\n]+
<*>\n { yyLineNr++ ; }
......@@ -6207,6 +4190,8 @@ static void startCommentBlock(bool brief)
}
}
//----------------------------------------------------------------------------
static void handleCommentBlock(const QCString &doc,bool brief)
{
if (docBlockInBody)
......@@ -6222,6 +4207,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
}
}
if (parseCommentBlock(
g_thisParser,
docBlockInBody ? previous : current,
doc, // text
yyFileName, // file
......@@ -6249,44 +4235,7 @@ exit:
}
}
#ifndef COMMENTSCAN
static void startGroup()
{
if (!lastDefGroup.groupname.isEmpty())
{
setCurrentGroup( &lastDefGroup.groupname, lastDefGroup.pri );
autoGroupStack.push(new Grouping(lastDefGroup));
lastDefGroup.groupname.resize(0);
}
else
{
//if (memberGroupId!=DOX_NOGROUP)
//{
// //warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. "
// // "Previous command was found at line %d.",lastMemberGroupLine);
// printf("startGroup ends group %d\n",memberGroupId);
// endGroup();
//}
if (memberGroupHeader.isEmpty())
{
// warn( yyFileName, yyLineNr, "Warning: member group does not have a header" );
memberGroupHeader="[NOHEADER]";
}
memberGroupId = newMemberGroupId();
MemberGroupInfo *info = new MemberGroupInfo;
info->header = memberGroupHeader.stripWhiteSpace();
Doxygen::memGrpInfoDict.insert(memberGroupId,info);
//Doxygen::memberHeaderDict.insert(memberGroupId,
// new QCString(memberGroupHeader.stripWhiteSpace())
// );
memberGroupRelates = current->relates.copy();
memberGroupInside = current->inside.copy();
current->mGrpId = memberGroupId;
lastMemberGroupLine = yyLineNr;
}
}
#endif
//----------------------------------------------------------------------------
static void startGroupInDoc()
{
......@@ -6296,31 +4245,29 @@ static void startGroupInDoc()
current->groupingPri()
));
}
else if (current->section == Entry::MEMBERGRP_SEC) /* scope for a member group: @name */
else /* if (current->section == Entry::MEMBERGRP_SEC) scope for a member group: @name */
{
//if (memberGroupId!=DOX_NOGROUP)
//{
// printf("startGroupInDoc ends group %d\n",memberGroupId);
// endGroup();
//}
if (memberGroupId!=DOX_NOGROUP)
{
warn(yyFileName,yyLineNr,"Warning: member groups cannot be nested. Ending current group!\n");
endGroup();
}
memberGroupId = newMemberGroupId();
MemberGroupInfo *info = new MemberGroupInfo;
info->header = memberGroupHeader.stripWhiteSpace();
if (current->section == Entry::MEMBERGRP_SEC)
{
info->header = memberGroupHeader.stripWhiteSpace();
}
Doxygen::memGrpInfoDict.insert(memberGroupId,info);
//Doxygen::memberHeaderDict.insert(memberGroupId,
// new QCString(memberGroupHeader.stripWhiteSpace())
// );
memberGroupRelates = current->relates.copy();
memberGroupInside = current->inside.copy();
current->mGrpId = memberGroupId;
lastMemberGroupLine = yyLineNr;
}
else
{
warn(yyFileName,yyLineNr,"Warning: @{ may only be used in a group block!\n");
}
}
//----------------------------------------------------------------------------
static void endGroup()
{
if (memberGroupId!=DOX_NOGROUP) // end of member group
......@@ -6357,6 +4304,8 @@ static void endGroup()
}
}
//----------------------------------------------------------------------------
static void forceEndGroup()
{
while (memberGroupId!=DOX_NOGROUP || !autoGroupStack.isEmpty())
......@@ -6368,21 +4317,6 @@ static void forceEndGroup()
//----------------------------------------------------------------------------
static void newDocState()
{
if (tmpDocType!=-1)
{
tmpDocType=ClassDoc;
BEGIN(JavaDoc);
}
else
{
BEGIN(ClassDoc);
}
}
//----------------------------------------------------------------------------
static void parseCompounds(Entry *rt)
{
//printf("parseCompounds(%s)\n",rt->name.data());
......@@ -6407,7 +4341,7 @@ static void parseCompounds(Entry *rt)
else
BEGIN( FindMembers ) ;
current_root = ce ;
strcpy( yyFileName, ce->fileName ) ;
yyFileName = ce->fileName;
setContext();
yyLineNr = ce->startLine ;
insideObjC = ce->objc;
......@@ -6482,12 +4416,16 @@ static void parseCompounds(Entry *rt)
}
//----------------------------------------------------------------------------
#ifdef USE_TMP_FILE
void parseMain(Entry *rt,const char *fileName)
static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
{
initParser();
g_inputFromFile = TRUE;
//g_inputFromFile = TRUE;
inputString = fileBuf;
inputPosition = 0;
g_inputFromFile = FALSE;
anonCount = 0;
depthIf = 0;
protection = Public;
......@@ -6499,11 +4437,35 @@ void parseMain(Entry *rt,const char *fileName)
inputFile.setName(fileName);
if (inputFile.open(IO_ReadOnly))
{
yyLineNr= 1 ;
yyFileName = fileName;
setContext();
msg("Parsing file %s...\n",yyFileName.data());
current_root = rt ;
initParser();
current = new Entry;
inputPosition = 0;
int sec=guessSection(yyFileName);
if (sec)
{
current->name = yyFileName;
current->section = sec;
current_root->addSubEntry(current);
current = new Entry;
}
current->reset();
scanYYrestart( scanYYin );
BEGIN( FindMembers );
if ( insidePHP )
{
BEGIN( FindMembersPHP );
}
else
{
BEGIN( FindMembers );
}
scanYYlex();
if (YY_START==Comment)
{
warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
......@@ -6525,46 +4487,9 @@ void parseMain(Entry *rt,const char *fileName)
}
}
#else
void parseMain(Entry *rt)
{
initParser();
g_inputFromFile = FALSE;
anonCount = 0;
depthIf = 0;
protection = Public;
mtype = Method;
gstat = FALSE;
virt = Normal;
current_root = rt;
global_root = rt;
current = new Entry;
inputString = rt->program;
inputPosition = 0;
scanYYrestart( scanYYin );
BEGIN( FindMembers );
scanYYlex();
if (YY_START==Comment)
{
warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
}
forceEndGroup();
if (depthIf>0)
{
warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
}
rt->program.resize(0);
delete current; current=0;
parseCompounds(rt);
}
#endif
//----------------------------------------------------------------------------
void parsePrototype(const QCString &text)
static void parsePrototype(const QCString &text)
{
//printf("**** parsePrototype(%s) begin\n",text.data());
......@@ -6585,9 +4510,13 @@ void parsePrototype(const QCString &text)
inputPosition = 0;
g_inputFromFile = FALSE;
scanYYrestart( scanYYin );
BEGIN(ClassDocFunc);
BEGIN(Prototype);
scanYYlex();
current->name = current->name.stripWhiteSpace();
if (current->section == Entry::MEMBERDOC_SEC && current->args.isEmpty())
current->section = Entry::VARIABLEDOC_SEC;
// restore original scanner state
yy_switch_to_buffer(orgState);
inputString = orgInputString;
......@@ -6597,39 +4526,40 @@ void parsePrototype(const QCString &text)
//printf("**** parsePrototype end\n");
}
Entry *startNewEntry()
static void handleGroupStartCommand(const char *header)
{
// make copy of documentation up till now
QCString doc = current->doc;
QCString brief = current->brief;
current->doc.resize(0);
current->brief.resize(0);
memberGroupHeader=header;
startGroupInDoc();
}
// create new entry
current_root->addSubEntry(current);
previous = current;
current = new Entry ;
initEntry();
static void handleGroupEndCommand()
{
endGroup();
previous=0;
}
//----------------------------------------------------------------------------
// move documentation to this entry
current->doc = doc;
current->brief = brief;
return current;
void CLanguageScanner::parse(const char *fileName,const char *fileBuf,Entry *root)
{
g_thisParser = this;
::parseMain(fileName,fileBuf,root);
}
void handleGroupStartCommand(const char *header)
void CLanguageScanner::parsePrototype(const char *text)
{
memberGroupHeader=header;
startGroupInDoc();
::parsePrototype(text);
}
void handleGroupEndCommand()
void CLanguageScanner::handleGroupStartCommand(const char *header)
{
endGroup();
previous=0;
::handleGroupStartCommand(header);
}
void CLanguageScanner::handleGroupEndCommand()
{
::handleGroupEndCommand();
}
//----------------------------------------------------------------------------
......
......@@ -21,15 +21,24 @@ function readHeader($file)
function computeIndex($word)
{
if (strlen($word)<2) return -1;
$lword = strtolower($word);
$l = strlen($lword);
for ($i=0;$i<$l;$i++)
{
$c = ord($lword{$i});
$v = (($v & 0xfc00) ^ ($v << 6) ^ $c) & 0xffff;
}
return $v;
//if (strlen($word)<2) return -1;
// high char of the index
$hi = ord($word{0});
if ($hi==0) return -1;
//$hi = ord($word{0});
//if ($hi==0) return -1;
// low char of the index
$lo = ord($word{1});
if ($lo==0) return -1;
//$lo = ord($word{1});
//if ($lo==0) return -1;
// return index
return $hi*256+$lo;
//return $hi*256+$lo;
}
function search($file,$word,&$statsList)
......
......@@ -21,15 +21,24 @@
"\n"
"function computeIndex($word)\n"
"{\n"
" if (strlen($word)<2) return -1;\n"
" $lword = strtolower($word);\n"
" $l = strlen($lword);\n"
" for ($i=0;$i<$l;$i++)\n"
" {\n"
" $c = ord($lword{$i});\n"
" $v = (($v & 0xfc00) ^ ($v << 6) ^ $c) & 0xffff;\n"
" }\n"
" return $v;\n"
"\n"
" //if (strlen($word)<2) return -1;\n"
" // high char of the index\n"
" $hi = ord($word{0});\n"
" if ($hi==0) return -1;\n"
" //$hi = ord($word{0});\n"
" //if ($hi==0) return -1;\n"
" // low char of the index\n"
" $lo = ord($word{1});\n"
" if ($lo==0) return -1;\n"
" //$lo = ord($word{1});\n"
" //if ($lo==0) return -1;\n"
" // return index\n"
" return $hi*256+$lo;\n"
" //return $hi*256+$lo;\n"
"}\n"
"\n"
"function search($file,$word,&$statsList)\n"
......
......@@ -19,6 +19,7 @@
#include "searchindex.h"
#include "config.h"
#include <qfile.h>
#include <ctype.h>
// file format: (all multi-byte values are stored in big endian format)
......@@ -75,15 +76,24 @@ void SearchIndex::setCurrentDoc(const char *name,const char *baseName,const char
m_urls.insert(m_urlIndex,new URL(name,url));
}
static int charsToIndex(const char *word)
{
if (word==0) return -1;
uint c1=word[0];
if (c1==0) return -1;
uint c2=word[1];
if (c2==0) return -1;
return c1*256+c2;
register ushort h=0;
const char *k = word;
ushort mask=0xfc00;
while ( *k )
{
h = (h&mask)^(h<<6)^(*k++);
}
//uint c1=word[0];
//if (c1==0) return -1;
//uint c2=word[1];
//if (c2==0) return -1;
//return c1*256+c2;
return h;
}
void SearchIndex::addWord(const char *word,bool hiPriority)
......@@ -91,6 +101,7 @@ void SearchIndex::addWord(const char *word,bool hiPriority)
//printf("SearchIndex::addWord(%s,%d)\n",word,hiPriority);
//QString wStr=QString(word).lower();
QString wStr(word);
wStr=wStr.lower();
if (wStr.isEmpty()) return;
IndexWord *w = m_words[wStr];
if (w==0)
......
......@@ -54,47 +54,30 @@ const char Translator::ISO88592ToWin1250Tab[] = {
/*! The translation table used by Koi8RToWindows1251() method. */
Q_UINT16 Translator::Koi8RToWindows1251Tab[128] =
{ 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524,
0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590,
0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219/**/, 0x221A, 0x2248,
0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7,
0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556,
0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E,
0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565,
0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9,
0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A
const unsigned char Translator::Koi8RToWindows1251Tab[128] =
{ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
254,224,225,246,228,229,244,227,245,232,233,234,235,236,237,238,
239,255,240,241,242,243,230,226,252,251,231,248,253,249,247,250,
222,192,193,214,196,197,212,195,213,200,201,202,203,204,205,206,
207,223,208,209,210,211,198,194,220,219,199,216,221,217,215,218
};
/*! The translation table used by Windows1251ToKoi8R() method. */
Q_UINT16 Translator::Windows1251ToKoi8RTab[128] =
{ 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,
0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014,
0xFFFD, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F,
0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7,
0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407,
0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7,
0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457,
0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F,
0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F,
0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F,
0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F
const unsigned char Translator::Windows1251ToKoi8RTab[128] =
{ 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
225,226,247,231,228,229,246,250,233,234,235,236,237,238,239,240,
242,243,244,245,230,232,227,254,251,253,255,249,248,252,224,241,
193,194,215,199,196,197,214,218,201,202,203,204,205,206,207,208,
210,211,212,213,198,200,195,222,219,221,223,217,216,220,192,209
};
/*! Returns the string converted from windows-1250 to iso-8859-2. */
/* The method was designed initially for translator_cz.h.
* It is used for on-line encoding conversion related to
......@@ -155,19 +138,16 @@ QCString Translator::ISO88592ToWin1250(const QCString & sInput)
QCString Translator::Koi8RToWindows1251( const QCString & sInput )
{
QString result;
QCString result(sInput);
int len = sInput.length();
result.setUnicode(0, len);
QChar* uc = (QChar*)result.unicode(); // const_cast
const unsigned char * c = (const unsigned char *)(const char*)sInput;
unsigned char *dc = (unsigned char*)(const char*)result;
for( int i=0; i<len; i++ ) {
if ( c[i] > 127 )
uc[i] = Koi8RToWindows1251Tab[c[i]-128];
else
uc[i] = c[i];
dc[i] = Koi8RToWindows1251Tab[c[i]-128];
}
return result.local8Bit();
return result;
}
......@@ -176,19 +156,16 @@ QCString Translator::Koi8RToWindows1251( const QCString & sInput )
Encoding table got from QT:qtextcodec.cpp */
QCString Translator::Windows1251ToKoi8R( const QCString & sInput )
{
QString result;
QCString result(sInput);
int len = sInput.length();
result.setUnicode(0, len);
QChar* uc = (QChar*)result.unicode(); // const_cast
const unsigned char * c = (const unsigned char *)(const char*)sInput;
unsigned char *dc = (unsigned char*)(const char*)result;
for( int i=0; i<len; i++ ) {
if ( c[i] > 127 )
uc[i] = Windows1251ToKoi8RTab[c[i]-128];
else
uc[i] = c[i];
dc[i] = Windows1251ToKoi8RTab[c[i]-128];
}
return result.local8Bit();
return result;
}
/*! returns the caracter converted from hankaku-kana to zenkakukana.
......
......@@ -29,8 +29,8 @@ class Translator
/* Tables for encoding conversions. */
static const char Win1250ToISO88592Tab[];
static const char ISO88592ToWin1250Tab[];
static Q_UINT16 Koi8RToWindows1251Tab[128];
static Q_UINT16 Windows1251ToKoi8RTab[128];
static const unsigned char Koi8RToWindows1251Tab[128];
static const unsigned char Windows1251ToKoi8RTab[128];
protected:
/*! Returns the string converted from windows-1250 to iso-8859-2. */
......
......@@ -87,40 +87,40 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
{ return "(Remarcar que aquestes funcions no són funcions membre.)"; }
{ return "(Remarcar que aquestes funcions no són funcions membre.)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
{ return "Descripció Detallada"; }
{ return "Descripció Detallada"; }
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
{ return "Documentació de les Definicions de Tipus Membre"; }
{ return "Documentació de les Definicions de Tipus Membre"; }
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
{ return "Documentació de les Enumeracions Membre"; }
{ return "Documentació de les Enumeracions Membre"; }
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
{ return "Documentació de les Funcions Membre"; }
{ return "Documentació de les Funcions Membre"; }
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Documentació dels Camps";
return "Documentació dels Camps";
}
else
{
return "Documentació de les Dades Membre";
return "Documentació de les Dades Membre";
}
}
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
{ return "Més..."; }
{ return "Més..."; }
/*! put in the class documentation */
virtual QCString trListOfAllMembers()
......@@ -132,7 +132,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers()
{ return "Aquesta és la llista complerta dels membres de "; }
{ return "Aquesta és la llista complerta dels membres de "; }
/*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers()
......@@ -142,7 +142,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* parameter s is name of the project name.
*/
virtual QCString trGeneratedAutomatically(const char *s)
{ QCString result="Generat automàticament per Doxygen";
{ QCString result="Generat automàticament per Doxygen";
if (s) result+=(QCString)" per a "+s;
result+=" a partir del codi font.";
return result;
......@@ -166,7 +166,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* compounds or files (see the \\group command).
*/
virtual QCString trModules()
{ return "Mòduls"; }
{ return "Mòduls"; }
/*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy()
......@@ -191,7 +191,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
{ return "Fitxers d'encapçalaments"; }
{ return "Fitxers d'encapçalaments"; }
/*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
......@@ -221,7 +221,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages()
{ return "Pàgines Relacionades"; }
{ return "Pàgines Relacionades"; }
/*! This is put above each page as a link to all examples. */
virtual QCString trExamples()
......@@ -233,14 +233,14 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
{ return "Aquesta llista d'herència està ordenada toscament, "
"però no completa, de forma alfabètica:";
{ return "Aquesta llista d'herència està ordenada toscament, "
"però no completa, de forma alfabètica:";
}
/*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll)
{
QCString result="Aquesta és la llista de tots els fitxers ";
QCString result="Aquesta és la llista de tots els fitxers ";
if (!extractAll) result+="documentats ";
result+="acompanyats amb breus descripcions:";
return result;
......@@ -252,19 +252,19 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Aquestes són les estructures de dades acompanyades amb breus descripcions:";
return "Aquestes són les estructures de dades acompanyades amb breus descripcions:";
}
else
{
return "Aquestes són les classes, estructures, "
"unions i interfícies acompanyades amb breus descripcions:";
return "Aquestes són les classes, estructures, "
"unions i interfícies acompanyades amb breus descripcions:";
}
}
/*! This is an introduction to the page with all class members. */
virtual QCString trCompoundMembersDescription(bool extractAll)
{
QCString result="Aquesta és la llista de tots els ";
QCString result="Aquesta és la llista de tots els ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="camps d'estructures i unions";
......@@ -277,16 +277,16 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
{
result+=" documentats";
}
result+=" amb enllaços a ";
result+=" amb enllaços a ";
if (!extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="la documentació de l'estructura/unió per a cada camp:";
result+="la documentació de l'estructura/unió per a cada camp:";
}
else
{
result+="la documentació de la classe per a cada membre:";
result+="la documentació de la classe per a cada membre:";
}
}
else
......@@ -305,7 +305,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is an introduction to the page with all file members. */
virtual QCString trFileMembersDescription(bool extractAll)
{
QCString result="Aquesta és la llista de ";
QCString result="Aquesta és la llista de ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="totes les funcions, variables, definicions, enumeracions, i definicions de tipus";
......@@ -316,54 +316,54 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
result+="tots els membres de fitxers";
if (!extractAll) result+=" documentats";
}
result+=" amb enllaços ";
result+=" amb enllaços ";
if (extractAll)
result+="als fitxers als quals corresponen:";
else
result+="a la documentació:";
result+="a la documentació:";
return result;
}
/*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription()
{ return "Aquests són els fitxers d'encapçalament que constitueixen l'API:"; }
{ return "Aquests són els fitxers d'encapçalament que constitueixen l'API:"; }
/*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription()
{ return "Aquesta és la llista de tots els exemples:"; }
{ return "Aquesta és la llista de tots els exemples:"; }
/*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription()
{ return "Aquesta és la llista de totes les pàgines de documentació associades:"; }
{ return "Aquesta és la llista de totes les pàgines de documentació associades:"; }
/*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription()
{ return "Aquesta és la llista de mòduls:"; }
{ return "Aquesta és la llista de mòduls:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
{ return "No hi ha cap descripció disponible"; }
{ return "No hi ha cap descripció disponible"; }
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation()
{ return ": Documentació"; }
{ return ": Documentació"; }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
virtual QCString trModuleIndex()
{ return "Índex de Mòduls"; }
{ return "Índex de Mòduls"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
virtual QCString trHierarchicalIndex()
{ return "Índex Jeràrquic"; }
{ return "Índex Jeràrquic"; }
/*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
......@@ -372,11 +372,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Índex d'Estructures de Dades";
return "Índex d'Estructures de Dades";
}
else
{
return "Índex de Classes";
return "Índex de Classes";
}
}
......@@ -384,13 +384,13 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* list of all files.
*/
virtual QCString trFileIndex()
{ return "Índex de Fitxers"; }
{ return "Índex de Fitxers"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
virtual QCString trModuleDocumentation()
{ return "Documentació dels Mòduls"; }
{ return "Documentació dels Mòduls"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all classes, structs and unions.
......@@ -399,11 +399,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Documentació de les Estructures de Dades";
return "Documentació de les Estructures de Dades";
}
else
{
return "Documentació de les Classes";
return "Documentació de les Classes";
}
}
......@@ -411,23 +411,23 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* the documentation of all files.
*/
virtual QCString trFileDocumentation()
{ return "Documentació dels Fitxers"; }
{ return "Documentació dels Fitxers"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
virtual QCString trExampleDocumentation()
{ return "Documentació dels Exemples"; }
{ return "Documentació dels Exemples"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
virtual QCString trPageDocumentation()
{ return "Documentació de les Pàgines"; }
{ return "Documentació de les Pàgines"; }
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
{ return "Manual de Referència"; }
{ return "Manual de Referència"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
......@@ -475,43 +475,43 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
{ return "Documentació de les Definicions"; }
{ return "Documentació de les Definicions"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
virtual QCString trFunctionPrototypeDocumentation()
{ return "Documentació de les Funcions Prototipus"; }
{ return "Documentació de les Funcions Prototipus"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
virtual QCString trTypedefDocumentation()
{ return "Documentació de les Definicions de Tipus"; }
{ return "Documentació de les Definicions de Tipus"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
virtual QCString trEnumerationTypeDocumentation()
{ return "Documentació dels Tipus de les Enumeracions"; }
{ return "Documentació dels Tipus de les Enumeracions"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Documentació dels Valors de les Enumeracions"; }
{ return "Documentació dels Valors de les Enumeracions"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
{ return "Documentació de les Funcions"; }
{ return "Documentació de les Funcions"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
virtual QCString trVariableDocumentation()
{ return "Documentació de les Variables"; }
{ return "Documentació de les Variables"; }
/*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
......@@ -548,12 +548,12 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! this text is put before a class diagram */
virtual QCString trClassDiagram(const char *clName)
{
return (QCString)"Diagrama d'Herència per a "+clName+":";
return (QCString)"Diagrama d'Herència per a "+clName+":";
}
/*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly()
{ return "Tan sols per a ús intern."; }
{ return "Tan sols per a ús intern."; }
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
......@@ -561,7 +561,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! this text is generated when the \\warning command is used. */
virtual QCString trWarning()
{ return "Atenció"; }
{ return "Atenció"; }
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
......@@ -569,7 +569,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! this text is generated when the \\version command is used. */
virtual QCString trVersion()
{ return "Versió"; }
{ return "Versió"; }
/*! this text is generated when the \\date command is used. */
virtual QCString trDate()
......@@ -581,11 +581,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! this text is generated when the \\sa command is used. */
virtual QCString trSeeAlso()
{ return "Mireu també"; }
{ return "Mireu també"; }
/*! this text is generated when the \\param command is used. */
virtual QCString trParameters()
{ return "Paràmetres"; }
{ return "Paràmetres"; }
/*! this text is generated when the \\exception command is used. */
virtual QCString trExceptions()
......@@ -606,7 +606,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Aquests són tots els espais de noms ";
QCString result="Aquests són tots els espais de noms ";
if (!extractAll) result+="documentats ";
result+="amb breus descripcions:";
return result;
......@@ -626,7 +626,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* related classes
*/
virtual QCString trRelatedFunctionDocumentation()
{ return "Documentació de funcions amigues i relacionades"; }
{ return "Documentació de funcions amigues i relacionades"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
......@@ -637,16 +637,16 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
ClassDef::CompoundType compType,
bool isTemplate)
{
QCString result="Referència de";
QCString result="Referència de";
switch(compType)
{
case ClassDef::Class: result+=" la Classe "; break;
case ClassDef::Struct: result+=" l'Estructura "; break;
case ClassDef::Union: result+=" la Unió "; break;
case ClassDef::Interface: result+=" la Interfície "; break;
case ClassDef::Union: result+=" la Unió "; break;
case ClassDef::Interface: result+=" la Interfície "; break;
case ClassDef::Protocol: result+="l Protocol "; break;
case ClassDef::Category: result+=" la Categoria "; break;
case ClassDef::Exception: result+=" l'Excepció "; break;
case ClassDef::Exception: result+=" l'Excepció "; break;
}
if (isTemplate) result+="Template ";
result+=(QCString)clName;
......@@ -656,7 +656,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName)
{
QCString result="Referència del Fitxer ";
QCString result="Referència del Fitxer ";
result+=fileName;
return result;
}
......@@ -664,31 +664,31 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! used as the title of the HTML page of a namespace */
virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result="Referència de l'Espai de Noms ";
QCString result="Referència de l'Espai de Noms ";
result+=namespaceName;
return result;
}
virtual QCString trPublicMembers()
{ return "Mètodes públics"; }
{ return "Mètodes públics"; }
virtual QCString trPublicSlots()
{ return "Slots públics"; }
{ return "Slots públics"; }
virtual QCString trSignals()
{ return "Senyals"; }
virtual QCString trStaticPublicMembers()
{ return "Mètodes Públics Estàtics"; }
{ return "Mètodes Públics Estàtics"; }
virtual QCString trProtectedMembers()
{ return "Mètodes Protegits"; }
{ return "Mètodes Protegits"; }
virtual QCString trProtectedSlots()
{ return "Slots Protegits"; }
virtual QCString trStaticProtectedMembers()
{ return "Mètodes Protegits Estàtics"; }
{ return "Mètodes Protegits Estàtics"; }
virtual QCString trPrivateMembers()
{ return "Mètodes Privats"; }
{ return "Mètodes Privats"; }
virtual QCString trPrivateSlots()
{ return "Slots Privats"; }
virtual QCString trStaticPrivateMembers()
{ return "Mètodes Privats Estàtics"; }
{ return "Mètodes Privats Estàtics"; }
/*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put.
......@@ -754,11 +754,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Aquesta és la llista de tots els membres de l'espai de noms ";
QCString result="Aquesta és la llista de tots els membres de l'espai de noms ";
if (!extractAll) result+="documentats ";
result+="amb enllaços a ";
result+="amb enllaços a ";
if (extractAll)
result+="la documentació de l'espai de noms de cada membre:";
result+="la documentació de l'espai de noms de cada membre:";
else
result+="l'espai de noms al qual corresponen:";
return result;
......@@ -767,13 +767,13 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* index of all namespaces.
*/
virtual QCString trNamespaceIndex()
{ return "Índex d'Espais de Noms"; }
{ return "Índex d'Espais de Noms"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual QCString trNamespaceDocumentation()
{ return "Documentació de l'Espai de Noms"; }
{ return "Documentació de l'Espai de Noms"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
......@@ -796,20 +796,20 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
QCString result=(QCString)"La documentació d'aquest";
QCString result=(QCString)"La documentació d'aquest";
switch(compType)
{
case ClassDef::Class: result+="a classe"; break;
case ClassDef::Struct: result+="a estructura"; break;
case ClassDef::Union: result+="a unió"; break;
case ClassDef::Interface: result+="a interfície"; break;
case ClassDef::Union: result+="a unió"; break;
case ClassDef::Interface: result+="a interfície"; break;
case ClassDef::Protocol: result+=" protocol"; break;
case ClassDef::Category: result+="a categoria"; break;
case ClassDef::Exception: result+="a excepció"; break;
case ClassDef::Exception: result+="a excepció"; break;
}
result+=" es va generar a partir del";
if (!single) result+="s";
result+=" següent";
result+=" següent";
if (!single) result+="s";
result+=" fitxer";
if (!single) result+="s:"; else result+=":";
......@@ -820,7 +820,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* list.
*/
virtual QCString trAlphabeticalList()
{ return "Llista Alfabètica"; }
{ return "Llista Alfabètica"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
......@@ -833,7 +833,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
{ return "Pàgina principal"; }
{ return "Pàgina principal"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
......@@ -851,11 +851,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definició a la línia @0 del fitxer @1.";
return "Definició a la línia @0 del fitxer @1.";
}
virtual QCString trDefinedInSourceFile()
{
return "Definició al fitxer @0.";
return "Definició al fitxer @0.";
}
//////////////////////////////////////////////////////////////////////////
......@@ -874,17 +874,17 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! this text is put before a collaboration diagram */
virtual QCString trCollaborationDiagram(const char *clName)
{
return (QCString)"Diagrama de col·laboració per a "+clName+":";
return (QCString)"Diagrama de col·laboració per a "+clName+":";
}
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
return (QCString)"Inclou el graf de dependències per a "+fName+":";
return (QCString)"Inclou el graf de dependències per a "+fName+":";
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
return "Documentació del Constructor i el Destructor";
return "Documentació del Constructor i el Destructor";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
......@@ -894,17 +894,17 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation()
{
return "Veure la documentació d'aquest fitxer.";
return "Veure la documentació d'aquest fitxer.";
}
/*! Text for the \\pre command */
virtual QCString trPrecondition()
{
return "Precondició";
return "Precondició";
}
/*! Text for the \\post command */
virtual QCString trPostcondition()
{
return "Postcondició";
return "Postcondició";
}
/*! Text for the \\invariant command */
virtual QCString trInvariant()
......@@ -923,11 +923,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trGraphicalHierarchy()
{
return "Jerarquia Gràfica de la Classe";
return "Jerarquia Gràfica de la Classe";
}
virtual QCString trGotoGraphicalHierarchy()
{
return "Veure la jerarquia gràfica de la classe";
return "Veure la jerarquia gràfica de la classe";
}
virtual QCString trGotoTextualHierarchy()
{
......@@ -935,7 +935,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trPageIndex()
{
return "Índex de Pàgines";
return "Índex de Pàgines";
}
//////////////////////////////////////////////////////////////////////////
......@@ -948,7 +948,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trPublicTypes()
{
return "Tipus Públics";
return "Tipus Públics";
}
virtual QCString trPublicAttribs()
{
......@@ -958,12 +958,12 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
else
{
return "Atributs Públics";
return "Atributs Públics";
}
}
virtual QCString trStaticPublicAttribs()
{
return "Atributs Públics Estàtics";
return "Atributs Públics Estàtics";
}
virtual QCString trProtectedTypes()
{
......@@ -975,7 +975,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trStaticProtectedAttribs()
{
return "Atributs Protegits Estàtics";
return "Atributs Protegits Estàtics";
}
virtual QCString trPrivateTypes()
{
......@@ -987,7 +987,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trStaticPrivateAttribs()
{
return "Atributs Privats Estàtics";
return "Atributs Privats Estàtics";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1019,11 +1019,11 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
}
virtual QCString trAttention()
{
return "Atenció";
return "Atenció";
}
virtual QCString trInclByDepGraph()
{
return "Aquest gràfic mostra quins fitxers inclouen, "
return "Aquest gràfic mostra quins fitxers inclouen, "
"de forma directa o indirecta, aquest fitxer:";
}
virtual QCString trSince()
......@@ -1038,7 +1038,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! title of the graph legend page */
virtual QCString trLegendTitle()
{
return "Llegenda del Gràfic";
return "Llegenda del Gràfic";
}
/*! page explaining how the dot graph's should be interpreted
* The %A in the text below are to prevent link to classes called "A".
......@@ -1046,22 +1046,22 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
virtual QCString trLegendDocs()
{
return
"Aquesta pàgina explica com s'interpreten els gràfics generats per doxygen.<p>\n"
"Aquesta pàgina explica com s'interpreten els gràfics generats per doxygen.<p>\n"
"Considera aquest exemple:\n"
"\\code\n"
"/*! Classe invisible per culpa del retall */\n"
"class Invisible { };\n\n"
"/*! Classe truncada, l'herència està amagada */\n"
"/*! Classe truncada, l'herència està amagada */\n"
"class Truncated : public Invisible { };\n\n"
"/* Classe no documentada amb comentaris doxygen */\n"
"class Undocumented { };\n\n"
"/*! Classe heredada amb herència pública */\n"
"/*! Classe heredada amb herència pública */\n"
"class PublicBase : public Truncated { };\n\n"
"/*! Una classe Template */\n"
"template<class T> class Templ { };\n\n"
"/*! Classe heredada utilitzant herència protegida */\n"
"/*! Classe heredada utilitzant herència protegida */\n"
"class ProtectedBase { };\n\n"
"/*! Classe heredada utiltzant herència privada */\n"
"/*! Classe heredada utiltzant herència privada */\n"
"class PrivateBase { };\n\n"
"/*! Classe usada per la classe heretada */\n"
"class Used { };\n\n"
......@@ -1076,26 +1076,26 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Si l'etiqueta \\c MAX_DOT_GRAPH_HEIGHT està igualada a 24a0 al fitxer de configuració, resultarà el gràfic següent:"
"Si l'etiqueta \\c MAX_DOT_GRAPH_HEIGHT està igualada a 24a0 al fitxer de configuració, resultarà el gràfic següent:"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Les caixes del gràfic superior tenen aquesta interpretació:\n"
"Les caixes del gràfic superior tenen aquesta interpretació:\n"
"<ul>\n"
"<li>Una caixa negra plena represent l'estructura o classe per la qual el gràfic s'ha generat.\n"
"<li>Una caixa negra plena represent l'estructura o classe per la qual el gràfic s'ha generat.\n"
"<li>Una caixa de vora negra representa una estructura o classe documentada.\n"
"<li>Una caixa de vora verda representa una estructura o classe indocumentada.\n"
"<li>Una caixa de vora vermalla representa una estructura o classe documentada de la qual "
"no es mostren totes les relacions d'herència/inclusió. Un gràfic és truncat si no s'ajusta als límits.\n"
"no es mostren totes les relacions d'herència/inclusió. Un gràfic és truncat si no s'ajusta als límits.\n"
"</ul>\n"
"Les sagetes tenen aquest significat:\n"
"<ul>\n"
"<li>Una sageta blau fosc remarca una relació d'herència de tipus pública entre dues classes.\n"
"<li>Una sageta verd fosc remarca una relació d'herència de tipus protegida entre dues classes.\n"
"<li>Una sageta roig fosc remarca una relació d'herència de tipus privada entre dues classes.\n"
"<li>Una sageta puntejada de color porpra indica que una classe és continguda o usada per una altra classe."
" La sageta s'etiqueta amb la variable o variables a través de les quals la classe o estructura apuntada és accessible.\n"
"<li>Una sageta puntejada de color groc indica la relació entre una instància template i la classe template de què ha set instanciada."
" La sageta s'etiqueta amb els paràmetres template de la instància.\n"
"<li>Una sageta blau fosc remarca una relació d'herència de tipus pública entre dues classes.\n"
"<li>Una sageta verd fosc remarca una relació d'herència de tipus protegida entre dues classes.\n"
"<li>Una sageta roig fosc remarca una relació d'herència de tipus privada entre dues classes.\n"
"<li>Una sageta puntejada de color porpra indica que una classe és continguda o usada per una altra classe."
" La sageta s'etiqueta amb la variable o variables a través de les quals la classe o estructura apuntada és accessible.\n"
"<li>Una sageta puntejada de color groc indica la relació entre una instància template i la classe template de què ha set instanciada."
" La sageta s'etiqueta amb els paràmetres template de la instància.\n"
"</ul>\n";
}
/*! text for the link to the legend page */
......@@ -1126,7 +1126,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods()
{
return "Mètodes DCOP";
return "Mètodes DCOP";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1141,7 +1141,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation()
{
return "Documentació de les Propietats";
return "Documentació de les Propietats";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1151,7 +1151,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "Interfícies";
return "Interfícies";
}
/*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses()
......@@ -1178,7 +1178,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
return "Aquesta és la llista de paquets, amb una breu descripció (si se'n disposa):";
return "Aquesta és la llista de paquets, amb una breu descripció (si se'n disposa):";
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
......@@ -1188,7 +1188,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Documentació dels Paquets";
return "Documentació dels Paquets";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
......@@ -1257,7 +1257,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Used as header RTF general index */
virtual QCString trRTFGeneralIndex()
{
return "Índex";
return "Índex";
}
/*! This is used for translation of the word that will possibly
......@@ -1310,7 +1310,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
*/
virtual QCString trPage(bool first_capital, bool singular)
{
QCString result((first_capital ? "Pàgin" : "pàgin"));
QCString result((first_capital ? "Pàgin" : "pàgin"));
if (!singular) result+="es"; else result+="a";
return result;
}
......@@ -1369,7 +1369,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
*/
virtual QCString trReferences()
{
return "Referències";
return "Referències";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1430,7 +1430,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
return "Documentació dels Esdeveniments";
return "Documentació dels Esdeveniments";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1455,7 +1455,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
*/
virtual QCString trStaticPackageMembers()
{
return "Funcions Estàtiques de Paquet";
return "Funcions Estàtiques de Paquet";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
......@@ -1469,7 +1469,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
*/
virtual QCString trStaticPackageAttribs()
{
return "Atributs Estàtics de Paquet";
return "Atributs Estàtics de Paquet";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1486,7 +1486,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Gràfic de crides d'aquesta funció:";
return "Gràfic de crides d'aquesta funció:";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1506,7 +1506,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
*/
virtual QCString trSearchResultsTitle()
{
return "Resultats de la Búsqueda";
return "Resultats de la Búsqueda";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
......@@ -1565,7 +1565,7 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Documentació dels Directoris"; }
{ return "Documentació dels Directoris"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
......@@ -1577,15 +1577,15 @@ class TranslatorCatalan : public TranslatorAdapter_1_4_1
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Aquesta jerarquia de directoris està ordenada toscament, "
"però no completa, de forma alfabètica:";
{ return "Aquesta jerarquia de directoris està ordenada toscament, "
"però no completa, de forma alfabètica:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result="Referència del Directori "; result+=dirName; return result; }
{ QCString result="Referència del Directori "; result+=dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
......
......@@ -99,6 +99,10 @@
// 2005/03/20 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.4.1" version
//
// 2005/04/09 Jens Seidel (jensseidel@users.sourceforge.net)
// - Changed Todo list translation as suggested in
// http://bugzilla.gnome.org/show_bug.cgi?id=172818
//
// Todo:
// - see FIXME
......@@ -1074,7 +1078,7 @@ class TranslatorGerman : public Translator
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
return "Liste der zu erledigenden Dinge";
return "Ausstehende Aufgaben";
}
//////////////////////////////////////////////////////////////////////////
......
/******************************************************************************
*
*
*
* Copyright (C) 1997-2005 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license.
*
*/
#ifndef TRANSLATOR_ID_H
#define TRANSLATOR_ID_H
/*!
Indonesian translator based on Doxygen 1.4.2.
\version $Id$
\author Hendy Irawan <ceefour@gauldong.net>
*/
class TranslatorIndonesian : public Translator
{
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 "indonesian"; }
/*! Used to get the LaTeX command(s) for the language support.
* This method should return string with commands that switch
* LaTeX to the desired language. For example
* <pre>"\\usepackage[german]{babel}\n"
* </pre>
* or
* <pre>"\\usepackage{polski}\n"
* "\\usepackage[latin2]{inputenc}\n"
* "\\usepackage[T1]{fontenc}\n"
* </pre>
*
* The English LaTeX does not use such commands. Because of this
* the empty string is returned in this implementation.
*/
virtual QCString latexLanguageSupportCommand()
{
return "";
}
/*! return the language charset. This will be used for the HTML output */
virtual QCString idLanguageCharset()
{
return "iso-8859-1";
}
// --- Language translation methods -------------------
/*! used in the compound documentation before a list of related functions. */
virtual QCString trRelatedFunctions()
{ return "Fungsi-fungsi Terkait"; }
/*! subscript for the related functions. */
virtual QCString trRelatedSubscript()
{ return "(Catatan: Fungsi-fungsi tersebut bukan fungsi anggota.)"; }
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
{ return "Keterangan Lengkap"; }
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
{ return "Dokumentasi Anggota: Tipe"; }
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
{ return "Dokumentasi Anggota: Enumerasi"; }
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
{ return "Dokumentasi Anggota: Fungsi"; }
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Dokumentasi Variabel";
}
else
{
return "Dokumentasi Anggota: Data";
}
}
/*! this is the text of a link put after brief descriptions. */
virtual QCString trMore()
{ return "Selengkapnya..."; }
/*! put in the class documentation */
virtual QCString trListOfAllMembers()
{ return "Daftar semua anggota."; }
/*! used as the title of the "list of all members" page of a class */
virtual QCString trMemberList()
{ return "Daftar anggota"; }
/*! this is the first part of a sentence that is followed by a class name */
virtual QCString trThisIsTheListOfAllMembers()
{ return "Berikut ini daftar lengkap anggota untuk "; }
/*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers()
{ return ", termasuk semua anggota yang diwariskan."; }
/*! 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="Dihasilkan secara otomatis oleh Doxygen";
if (s) result+=(QCString)" untuk "+s;
result+=" dari kode sumber.";
return result;
}
/*! put after an enum name in the list of all members */
virtual QCString trEnumName()
{ return "nama enumerasi"; }
/*! put after an enum value in the list of all members */
virtual QCString trEnumValue()
{ return "nilai enumerasi"; }
/*! put after an undocumented member in the list of all members */
virtual QCString trDefinedIn()
{ return "didefinisikan di"; }
// 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 "Modul"; }
/*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy()
{ return "Struktur Kelas"; }
/*! 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 "Struktur Data";
}
else
{
return "Daftar Kelas";
}
}
/*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
{ return "Daftar File"; }
/*! This is put above each page as a link to the list of all verbatim headers */
virtual QCString trHeaderFiles()
{ return "File Header"; }
/*! 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 "Variabel Data";
}
else
{
return "Daftar Anggota: Kelas";
}
}
/*! 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 "Daftar Global";
}
else
{
return "Daftar File";
}
}
/*! This is put above each page as a link to all related pages. */
virtual QCString trRelatedPages()
{ return "Halaman Terkait"; }
/*! This is put above each page as a link to all examples. */
virtual QCString trExamples()
{ return "Contoh"; }
/*! This is put above each page as a link to the search engine. */
virtual QCString trSearch()
{ return "Cari"; }
/*! This is an introduction to the class hierarchy. */
virtual QCString trClassHierarchyDescription()
{ return "Struktur kelas ini diurutkan hampir sepenuhnya diurutkan berdasarkan abjad:";
}
/*! This is an introduction to the list with all files. */
virtual QCString trFileListDescription(bool extractAll)
{
QCString result="Berikut ini daftar seluruh file dengan penjelasan singkat";
if (!extractAll) result+=" yang didokumentasikan";
result += ":";
return result;
}
/*! This is an introduction to the annotated compound list. */
virtual QCString trCompoundListDescription()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Berikut ini daftar struktur data beserta penjelasan singkat:";
}
else
{
return "Berikut ini daftar kelas, struktur, gabungan, dan interface beserta penjelasan singkat:";
}
}
/*! This is an introduction to the page with all class members. */
virtual QCString trCompoundMembersDescription(bool extractAll)
{
QCString result="Berikut ini daftar seluruh ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="variabel struktur dan gabungan";
}
else
{
result+="kelas";
}
if (!extractAll)
{
result+=" yang didokumentasikan";
}
result+=" dengan link ke ";
if (!extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="dokumentasi struktur/gabungan untuk tiap variabel:";
}
else
{
result+="dokumentasi kelas untuk tiap anggota:";
}
}
else
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="struktur/gabungan induk:";
}
else
{
result+="kelas induk:";
}
}
return result;
}
/*! This is an introduction to the page with all file members. */
virtual QCString trFileMembersDescription(bool extractAll)
{
QCString result="Berikut ini daftar ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="fungsi, variabel, konstanta, enumerasi, dan tipe";
}
else
{
result+="file";
}
if (!extractAll) result+=" yang didokumentasikan";
result+=" dengan link ke ";
if (extractAll)
result+="file induk:";
else
result+="dokumentasi:";
return result;
}
/*! This is an introduction to the page with the list of all header files. */
virtual QCString trHeaderFilesDescription()
{ return "Berikut ini daftar file header yang melingkupi API (Application Programming Interface) ini:"; }
/*! This is an introduction to the page with the list of all examples */
virtual QCString trExamplesDescription()
{ return "Berikut ini daftar semua contoh:"; }
/*! This is an introduction to the page with the list of related pages */
virtual QCString trRelatedPagesDescription()
{ return "Berikut ini daftar semua halaman dokumentasi yang terkait:"; }
/*! This is an introduction to the page with the list of class/file groups */
virtual QCString trModulesDescription()
{ return "Berikut ini daftar semua modul:"; }
/*! This sentences is used in the annotated class/file lists if no brief
* description is given.
*/
virtual QCString trNoDescriptionAvailable()
{ return "Tidak ada keterangan tersedia"; }
// index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation()
{ return "Dokumentasi"; }
/*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
virtual QCString trModuleIndex()
{ return "Indeks Modul"; }
/*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
virtual QCString trHierarchicalIndex()
{ return "Indeks Struktur Kelas"; }
/*! 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 "Indeks Struktur Data";
}
else
{
return "Indeks Kelas";
}
}
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
virtual QCString trFileIndex()
{ return "Indeks File"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all groups.
*/
virtual QCString trModuleDocumentation()
{ return "Dokumentasi Modul"; }
/*! 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 "Dokumentasi Struktur Data";
}
else
{
return "Dokumentasi Kelas";
}
}
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all files.
*/
virtual QCString trFileDocumentation()
{ return "Dokumentasi File"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all examples.
*/
virtual QCString trExampleDocumentation()
{ return "Dokumentasi Contoh"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all related pages.
*/
virtual QCString trPageDocumentation()
{ return "Dokumentasi Halaman"; }
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
{ return "Dokumentasi Referensi"; }
/*! This is used in the documentation of a file as a header before the
* list of defines
*/
virtual QCString trDefines()
{ return "Konstanta"; }
/*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
virtual QCString trFuncProtos()
{ return "Prototipe Fungsi"; }
/*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
virtual QCString trTypedefs()
{ return "Definisi Tipe"; }
/*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
virtual QCString trEnumerations()
{ return "Enumerasi"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
virtual QCString trFunctions()
{ return "Fungsi"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trVariables()
{ return "Variabel"; }
/*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trEnumerationValues()
{ return "Nilai enumerasi"; }
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
{ return "Dokumentasi Konstanta"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
virtual QCString trFunctionPrototypeDocumentation()
{ return "Dokumentasi Prototipe Fungsi"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
virtual QCString trTypedefDocumentation()
{ return "Dokumentasi Definisi Tipe"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
virtual QCString trEnumerationTypeDocumentation()
{ return "Dokumentasi Tipe Enumerasi"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration values
*/
virtual QCString trEnumerationValueDocumentation()
{ return "Dokumentasi Nilai Enumerasi"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
{ return "Dokumentasi Fungsi"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
virtual QCString trVariableDocumentation()
{ return "Dokumentasi Variabel"; }
/*! 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 "Struktur Data";
}
else
{
return "Kelas";
}
}
/*! 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)"Dihasilkan pada tanggal "+date;
if (projName) result+=(QCString)" untuk "+projName;
result+=(QCString)" oleh";
return result;
}
/*! This is part of the sentence used in the standard footer of each page.
*/
virtual QCString trWrittenBy()
{
return "ditulis oleh";
}
/*! this text is put before a class diagram */
virtual QCString trClassDiagram(const char *clName)
{
return (QCString)"Diagram struktur kelas untuk "+clName+":";
}
/*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly()
{ return "Untuk kalangan sendiri."; }
/*! this text is generated when the \\reimp command is used. */
virtual QCString trReimplementedForInternalReasons()
{ return "Di-reimplementasikan karena alasan internal; API tidak berubah."; }
/*! this text is generated when the \\warning command is used. */
virtual QCString trWarning()
{ return "Peringatan"; }
/*! this text is generated when the \\bug command is used. */
virtual QCString trBugsAndLimitations()
{ return "Bug dan keterbatasan"; }
/*! this text is generated when the \\version command is used. */
virtual QCString trVersion()
{ return "Versi"; }
/*! this text is generated when the \\date command is used. */
virtual QCString trDate()
{ return "Tanggal"; }
/*! this text is generated when the \\return command is used. */
virtual QCString trReturns()
{ return "Mengembalikan"; }
/*! this text is generated when the \\sa command is used. */
virtual QCString trSeeAlso()
{ return "Lihat juga"; }
/*! this text is generated when the \\param command is used. */
virtual QCString trParameters()
{ return "Parameter"; }
/*! this text is generated when the \\exception command is used. */
virtual QCString trExceptions()
{ return "Exception"; }
/*! this text is used in the title page of a LaTeX document. */
virtual QCString trGeneratedBy()
{ return "Dihasilkan oleh"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////
/*! used as the title of page containing all the index of all namespaces. */
virtual QCString trNamespaceList()
{ return "Daftar Namespace"; }
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Berikut ini daftar namespace beserta keterangan singkat";
if (!extractAll) result+=" yang didokumentasikan";
result+=":";
return result;
}
/*! used in the class documentation as a header before the list of all
* friends of a class
*/
virtual QCString trFriends()
{ return "Friend"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
/*! used in the class documentation as a header before the list of all
* related classes
*/
virtual QCString trRelatedFunctionDocumentation()
{ return "Dokumentasi Friend Dan Fungsi Terkait"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
/*! used as the title of the HTML page of a class/struct/union */
virtual QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType,
bool isTemplate)
{
QCString result=(QCString)clName;
switch(compType)
{
case ClassDef::Class: result+=" Kelas"; break;
case ClassDef::Struct: result+=" Struktur"; break;
case ClassDef::Union: result+=" Gabungan"; break;
case ClassDef::Interface: result+=" Interface"; break;
case ClassDef::Protocol: result+=" Protokol"; break;
case ClassDef::Category: result+=" Kategori"; break;
case ClassDef::Exception: result+=" Exception"; break;
}
if (isTemplate) result+=" Template";
result+=" Referensi";
return result;
}
/*! used as the title of the HTML page of a file */
virtual QCString trFileReference(const char *fileName)
{
QCString result=fileName;
result+=" Referensi File";
return result;
}
/*! used as the title of the HTML page of a namespace */
virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result=namespaceName;
result+=" Referensi Namespace";
return result;
}
virtual QCString trPublicMembers()
{ return "Fungsi Anggota Publik"; }
virtual QCString trPublicSlots()
{ return "Slot Publik"; }
virtual QCString trSignals()
{ return "Signal"; }
virtual QCString trStaticPublicMembers()
{ return "Fungsi Anggota Publik Statis"; }
virtual QCString trProtectedMembers()
{ return "Fungsi Anggota Diproteksi"; }
virtual QCString trProtectedSlots()
{ return "Slot Diproteksi"; }
virtual QCString trStaticProtectedMembers()
{ return "Fungsi Anggota Diproteksi Statis"; }
virtual QCString trPrivateMembers()
{ return "Fungsi Anggota Privat"; }
virtual QCString trPrivateSlots()
{ return "Slot Privat"; }
virtual QCString trStaticPrivateMembers()
{ return "Fungsi Anggota Privat Statis"; }
/*! 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+=", dan ";
}
}
return result;
}
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
virtual QCString trInheritsList(int numEntries)
{
return "Mewarisi "+trWriteList(numEntries)+".";
}
/*! used in class documentation to produce a list of super classes,
* if class diagrams are disabled.
*/
virtual QCString trInheritedByList(int numEntries)
{
return "Diwariskan ke "+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 "Di-reimplementasikan dari "+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 "Di-reimplementasikan di "+trWriteList(numEntries)+".";
}
/*! This is put above each page as a link to all members of namespaces. */
virtual QCString trNamespaceMembers()
{ return "Anggota Namespace"; }
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
{
QCString result="Berikut ini daftar anggota namespace ";
if (!extractAll) result+="yang didokumentasikan ";
result+="dengan link ke ";
if (extractAll)
result+="dokumentasi namespace untuk tiap anggota:";
else
result+="namespace induk:";
return result;
}
/*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
virtual QCString trNamespaceIndex()
{ return "Indeks Namespace"; }
/*! This is used in LaTeX as the title of the chapter containing
* the documentation of all namespaces.
*/
virtual QCString trNamespaceDocumentation()
{ return "Dokumentasi Namespace"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////
/*! This is used in the documentation before the list of all
* namespaces in a file.
*/
virtual QCString trNamespaces()
{ return "Daftar Namespace"; }
//////////////////////////////////////////////////////////////////////////
// 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)"Dokumentasi untuk ";
switch(compType)
{
case ClassDef::Class: result+="kelas"; break;
case ClassDef::Struct: result+="struktur"; break;
case ClassDef::Union: result+="gabungan"; break;
case ClassDef::Interface: result+="interface"; break;
case ClassDef::Protocol: result+="protokol"; break;
case ClassDef::Category: result+="kategori"; break;
case ClassDef::Exception: result+="exception"; break;
}
result+=" ini dihasilkan dari file";
result+=single ? "" : "-file";
result+=" berikut:";
return result;
}
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual QCString trAlphabeticalList()
{ return "Daftar Berdasarkan Abjad"; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
{ return "Nilai kembali"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
{ return "Halaman Utama"; }
/*! 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 "hal."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Sumber";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definisi pada baris @0 di file @1.";
}
virtual QCString trDefinedInSourceFile()
{
return "Definisi pada baris @0.";
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991205
//////////////////////////////////////////////////////////////////////////
virtual QCString trDeprecated()
{
return "Kadaluarsa";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////
/*! this text is put before a collaboration diagram */
virtual QCString trCollaborationDiagram(const char *clName)
{
return (QCString)"Diagram kolaborasi untuk "+clName+":";
}
/*! this text is put before an include dependency graph */
virtual QCString trInclDepGraph(const char *fName)
{
return (QCString)"Diagram ketergantungan untuk "+fName+":";
}
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
return "Dokumentasi Konstruktor & Destruktor";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
{
return "Ke kode sumber file ini.";
}
/*! Used in the file sources to point to the corresponding documentation. */
virtual QCString trGotoDocumentation()
{
return "Ke dokumentasi file ini.";
}
/*! Text for the \\pre command */
virtual QCString trPrecondition()
{
return "Kondisi Awal";
}
/*! Text for the \\post command */
virtual QCString trPostcondition()
{
return "Kondisi Akhir";
}
/*! Text for the \\invariant command */
virtual QCString trInvariant()
{
return "Invariant";
}
/*! Text shown before a multi-line variable/enum initialization */
virtual QCString trInitialValue()
{
return "Nilai awal:";
}
/*! Text used the source code in the file index */
virtual QCString trCode()
{
return "kode";
}
virtual QCString trGraphicalHierarchy()
{
return "Struktur Kelas Berbasis Grafis";
}
virtual QCString trGotoGraphicalHierarchy()
{
return "Ke struktur kelas berbasis grafis";
}
virtual QCString trGotoTextualHierarchy()
{
return "Ke struktur kelas berbasis teks";
}
virtual QCString trPageIndex()
{
return "Indeks Halaman";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
virtual QCString trNote()
{
return "Catatan";
}
virtual QCString trPublicTypes()
{
return "Tipe Publik";
}
virtual QCString trPublicAttribs()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Variabel Data";
}
else
{
return "Atribut Publik";
}
}
virtual QCString trStaticPublicAttribs()
{
return "Atribut Publik Statis";
}
virtual QCString trProtectedTypes()
{
return "Tipe Diproteksi";
}
virtual QCString trProtectedAttribs()
{
return "Atribut Diproteksi";
}
virtual QCString trStaticProtectedAttribs()
{
return "Atribut Diproteksi Statis";
}
virtual QCString trPrivateTypes()
{
return "Tipe Privat";
}
virtual QCString trPrivateAttribs()
{
return "Atribut Privat";
}
virtual QCString trStaticPrivateAttribs()
{
return "Atribut Privat Statis";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a \\todo item */
virtual QCString trTodo()
{
return "Tugas";
}
/*! Used as the header of the todo list */
virtual QCString trTodoList()
{
return "Daftar Tugas";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////
virtual QCString trReferencedBy()
{
return "Direferensikan oleh";
}
virtual QCString trRemarks()
{
return "Keterangan";
}
virtual QCString trAttention()
{
return "Perhatian";
}
virtual QCString trInclByDepGraph()
{
return "Diagram ini menampilkan file-file yang membutuhkan file ini baik secara langsung maupun tidak langsung:";
}
virtual QCString trSince()
{
return "Sejak";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
/*! title of the graph legend page */
virtual QCString trLegendTitle()
{
return "Legenda Diagram";
}
/*! 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
"Halaman ini berisi keterangan cara membaca diagram yang dihasilkan "
"oleh doxygen.<p>\n"
"Contoh:\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"
"/*! A template class */\n"
"template<class T> class Templ { };\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"
" public Templ<int>\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"Apabila tag \\c MAX_DOT_GRAPH_HEIGHT di file konfigurasi "
"diset ke 240 kode di atas akan menghasilkan diagram berikut:"
"<p><center><img alt=\"\" src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"Kotak-kotak pada diagram di atas mempunyai arti sebagai berikut:\n"
"<ul>\n"
"<li>%Kotak hitam merupakan struktur atau kelas yang bersangkutan.\n"
"<li>%Kotak berbingkai hitam adalah struktur atau kelas yang mempunyai dokumentasi.\n"
"<li>%Kotak dengan bingkai abu-abu adalah struktur atau kelas tanpa dokumentasi.\n"
"<li>%Kotak dengan bingkai merah merupakan struktur atau kelas yang didokumentasikan tetapi"
"tidak semua relasinya ditampilkan. %Sebuah diagram "
"akan terpotong apabila lebih besar daripada ukuran yang ditentukan.\n"
"</ul>\n"
"Arti dari tanda-tanda panah adalah sebagai berikut:\n"
"<ul>\n"
"<li>%Panah biru tua menandakan pewarisan publik.\n"
"<li>%Panah hijau tua untuk pewarisan diproteksi.\n"
"<li>%Panah merah tua untuk pewarisan privat.\n"
"<li>%Panah ungu putus-putus menandakan kelas tersebut berhubungan dengan kelas lain. "
"Panah tersebut diberi judul sesuai dengan kelas atau struktur tujuan.\n"
"<li>%Panah kuning putus-putus menandakan hubungan antara sebuah template kelas dan "
"instance dari template tersebut. Panah tersebut diberi judul sesuai dengan "
"parameter template yang digunakan.\n"
"</ul>\n";
}
/*! text for the link to the legend page */
virtual QCString trLegend()
{
return "legenda";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a test item */
virtual QCString trTest()
{
return "Tes";
}
/*! Used as the header of the test list */
virtual QCString trTestList()
{
return "Daftar Tes";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.1
//////////////////////////////////////////////////////////////////////////
/*! Used as a section header for KDE-2 IDL methods */
virtual QCString trDCOPMethods()
{
return "Fungsi Anggota: DCOP";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.2
//////////////////////////////////////////////////////////////////////////
/*! Used as a section header for IDL properties */
virtual QCString trProperties()
{
return "Daftar Property";
}
/*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation()
{
return "Dokumentasi Property";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.4
//////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return "Daftar Interface";
}
/*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Struktur Data";
}
else
{
return "Daftar Kelas";
}
}
/*! Used as the title of a Java package */
virtual QCString trPackage(const char *name)
{
return (QCString)"Paket "+name;
}
/*! Title of the package index page */
virtual QCString trPackageList()
{
return "Daftar Paket";
}
/*! The description of the package index page */
virtual QCString trPackageListDescription()
{
return "Berikut ini daftar paket beserta keterangan singkat (apabila tersedia):";
}
/*! The link name in the Quick links header for each page */
virtual QCString trPackages()
{
return "Daftar Paket";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Dokumentasi Paket";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
return "Nilai:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.5
//////////////////////////////////////////////////////////////////////////
/*! Used as a marker that is put before a \\bug item */
virtual QCString trBug()
{
return "Bug";
}
/*! Used as the header of the bug list */
virtual QCString trBugList()
{
return "Daftar Bug";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.6
//////////////////////////////////////////////////////////////////////////
/*! Used as ansicpg for RTF file
*
* The following table shows the correlation of Charset name, Charset Value and
* <pre>
* Codepage number:
* Charset Name Charset Value(hex) Codepage number
* ------------------------------------------------------
* DEFAULT_CHARSET 1 (x01)
* SYMBOL_CHARSET 2 (x02)
* OEM_CHARSET 255 (xFF)
* ANSI_CHARSET 0 (x00) 1252
* RUSSIAN_CHARSET 204 (xCC) 1251
* EE_CHARSET 238 (xEE) 1250
* GREEK_CHARSET 161 (xA1) 1253
* TURKISH_CHARSET 162 (xA2) 1254
* BALTIC_CHARSET 186 (xBA) 1257
* HEBREW_CHARSET 177 (xB1) 1255
* ARABIC _CHARSET 178 (xB2) 1256
* SHIFTJIS_CHARSET 128 (x80) 932
* HANGEUL_CHARSET 129 (x81) 949
* GB2313_CHARSET 134 (x86) 936
* CHINESEBIG5_CHARSET 136 (x88) 950
* </pre>
*
*/
virtual QCString trRTFansicp()
{
return "1252";
}
/*! Used as ansicpg for RTF fcharset
* \see trRTFansicp() for a table of possible values.
*/
virtual QCString trRTFCharSet()
{
return "0";
}
/*! Used as header RTF general index */
virtual QCString trRTFGeneralIndex()
{
return "Indeks";
}
/*! 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 ? "Kelas" : "kelas"));
if (!singular) result+="-kelas";
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 ? "File" : "file"));
if (!singular) result+="-file";
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trNamespace(bool first_capital, bool)
{
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 ? "Kelompok" : "kelompok"));
if (!singular) result+="-kelompok";
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 )
{
QCString result((first_capital ? "Halaman" : "halaman"));
//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 trMember(bool first_capital, bool )
{
QCString result((first_capital ? "Anggota" : "anggota"));
//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 trField(bool first_capital, bool)
{
QCString result((first_capital ? "Variabel" : "variabel"));
//if (!singular) result+="s";
return result;
}
/*! This is used for translation of the word that will possibly
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trGlobal(bool first_capital, bool)
{
QCString result((first_capital ? "Global" : "global"));
//if (!singular) result+="s";
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)
{
QCString result((first_capital ? "Penulis" : "penulis"));
//if (!singular) result+="s";
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.11
//////////////////////////////////////////////////////////////////////////
/*! This text is put before the list of members referenced by a member
*/
virtual QCString trReferences()
{
return "Referensi";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.13
//////////////////////////////////////////////////////////////////////////
/*! used in member documentation blocks to produce a list of
* members that are implemented by this one.
*/
virtual QCString trImplementedFromList(int numEntries)
{
return "Mengimplementasikan "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
* all members that implement this abstract member.
*/
virtual QCString trImplementedInList(int numEntries)
{
return "Diimplementasikan di "+trWriteList(numEntries)+".";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.16
//////////////////////////////////////////////////////////////////////////
/*! used in RTF documentation as a heading for the Table
* of Contents.
*/
virtual QCString trRTFTableOfContents()
{
return "Daftar Isi";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.17
//////////////////////////////////////////////////////////////////////////
/*! Used as the header of the list of item that have been
* flagged deprecated
*/
virtual QCString trDeprecatedList()
{
return "Daftar Kadaluarsa";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.2.18
//////////////////////////////////////////////////////////////////////////
/*! Used as a header for declaration section of the events found in
* a C# program
*/
virtual QCString trEvents()
{
return "Event";
}
/*! Header used for the documentation section of a class' events. */
virtual QCString trEventDocumentation()
{
return "Dokumentasi Event";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3
//////////////////////////////////////////////////////////////////////////
/*! Used as a heading for a list of Java class types with package scope.
*/
virtual QCString trPackageTypes()
{
return "Jenis Paket";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "Daftar Fungsi Paket";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return "Daftar Fungsi Statis Paket";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "Daftar Atribut Paket";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return "Daftar Atribut Statis Paket";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////
/*! Used in the quick index of a class/file/namespace member list page
* to link to the unfiltered list of all members.
*/
virtual QCString trAll()
{
return "Semua";
}
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Berikut ini diagram pemanggilan untuk fungsi ini:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.3
//////////////////////////////////////////////////////////////////////////
/*! When the search engine is enabled this text is put in the header
* of each page before the field where one can enter the text to search
* for.
*/
virtual QCString trSearchForIndex()
{
return "Cari";
}
/*! This string is used as the title for the page listing the search
* results.
*/
virtual QCString trSearchResultsTitle()
{
return "Hasil Pencarian";
}
/*! This string is put just before listing the search results. The
* text can be different depending on the number of documents found.
* Inside the text you can put the special marker $num to insert
* the number representing the actual number of search results.
* The @a numDocuments parameter can be either 0, 1 or 2, where the
* value 2 represents 2 or more matches. HTML markup is allowed inside
* the returned string.
*/
virtual QCString trSearchResults(int numDocuments)
{
if (numDocuments==0)
{
return "Maaf, tidak ada dokumen yang cocok.";
}
else if (numDocuments==1)
{
return "Ditemukan <b>1</b> dokumen yang cocok.";
}
else
{
return "Ditemukan <b>$num</b> documents yang cocok. "
"Menampilkan hasil terbaik lebih awal.";
}
}
/*! This string is put before the list of matched words, for each search
* result. What follows is the list of words that matched the query.
*/
virtual QCString trSearchMatches()
{
return "Kecocokan:";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual QCString trSourceFile(QCString& filename)
{
return "Kode Sumber:" + filename;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Struktur Direktori"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Dokumentasi Direktori"; }
/*! This is used as the title of the directory index and also in the
* Quick links of an HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Daftar Direktori"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Struktur direktori ini diurutkan hampir berdasarkan abjad:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result="Referensi Direktori "; result+=dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool)
{
QCString result((first_capital ? "Direktori" : "direktori"));
//if (singular) result+="y"; else result+="ies";
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "Ini adalah fungsi yang di-overload. Perbedaannya dengan fungsi di atas hanya pada "
"parameter-parameter yang diterima.";
}
};
#endif
......@@ -59,10 +59,10 @@
// - 해석이 잘못된 부분이 꾀나 있어 보임..
//
// 2005.02.11 (SooYoung Jung: jung5000 at gmail.com)
// - 실수로 추가되었던 decode 함수 수정
// - 실수로 추가되었던 decode 함수 삭제
//
// 2005.03.11 (SooYoung Jung: jung5000 at gmail.com)
// - Adapting 1.4.1
// - Adapting 1.4.1 and checked using translator.py
// - 일부 번역안된 부분 수정 (Translated little bit of untranslated part)
// - Removed following
// Obsolete methods (should be removed, never used):
......@@ -76,24 +76,13 @@
// virtual QCString trBugsAndLimitations()
// virtual QCString trEnumerationValueDocumentation()
// virtual QCString trNoDescriptionAvailable()
// - Changed the base class to Translator from Translator_1_4_1
//
class TranslatorKorean : public TranslatorAdapter_1_4_1
class TranslatorKorean : public Translator
{
private:
// guess, unnecessary for Korean language
inline QCString decode(const QCString & sInput)
{
if (Config_getBool("USE_WINDOWS_ENCODING"))
{
return sInput;
}
else
{
return sInput;
}
}
public:
......@@ -232,50 +221,25 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
/*! 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"))
{
//Alternate text: "혼합 목록", "합성(집합) 명단(리스트)"
return "복합구조(클래스, 구조체, 공용체)";
}
else
{
return "복합구조(클래스, 구조체, 공용체)";
}
//Alternate text: "혼합 목록", "합성(집합) 명단(리스트)"
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
{
// Alternate text: "합성(집합) 명단(멤버들)"
return "복합구조(클래스, 구조체, 공용체) 멤버";
}
// Alternate text: "합성(집합) 명단(멤버들)"
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 "파일 멤버";
}
return "파일 멤버";
}
/*! This is put above each page as a link to all related pages. */
......@@ -306,16 +270,8 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
/*! This is an introduction to the annotated compound list. */
virtual QCString trCompoundListDescription()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "다음은 간략한 설명을 가진 클래스, "
"구조체, 공용체, 인터페이스의 목록입니다.";
}
else
{
return "다음은 간략한 설명을 가진 클래스, "
"구조체, 공용체, 인터페이스의 목록입니다.";
}
return "다음은 간략한 설명을 가진 클래스, "
"구조체, 공용체, 인터페이스의 목록입니다.";
}
/*! This is an introduction to the page with all class members. */
......@@ -326,14 +282,8 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
result+="문서화된 ";
}
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="링크 된 클래스 멤버는 ";
}
else
{
result+="링크 된 클래스 멤버는 ";
}
result+="링크 된 클래스 멤버는 ";
if (extractAll)
result+="그 멤버에 대한 클래스 문서화로 갑니다.";
......@@ -355,10 +305,6 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
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 "다음은 모든 예제의 목록입니다."; }
......@@ -371,15 +317,8 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
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 "문서화"; }
......@@ -508,12 +447,6 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
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
*/
......@@ -548,14 +481,14 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
QCString result="";
if (projName) result+=(QCString)projName+" 문서화. ";
result += "생성일시 : " +(QCString)date+" by";
result += "생성일시 : " +(QCString)date;
return result;
}
/*! This is part of the sentence used in the standard footer of each page.
*/
virtual QCString trWrittenBy()
{
return "written by";
return "작성자: ";
}
/*! this text is put before a class diagram */
......@@ -568,18 +501,10 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
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 "버전"; }
......@@ -818,8 +743,8 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
case ClassDef::Struct: result+="구조체"; break;
case ClassDef::Union: result+="공용체"; break;
case ClassDef::Interface: result+="인터페이스"; break;
case ClassDef::Protocol: result+="protocol"; break; // translate me!
case ClassDef::Category: result+="category"; break; // translate me!
case ClassDef::Protocol: result+="프로토콜"; break;
case ClassDef::Category: result+="카테고리"; break;
case ClassDef::Exception: result+="예외"; break;
}
result+="을 위한 문서화는 다음의 파일";
......@@ -857,10 +782,6 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
// virtual QCString trSources()
// {
// return "출처";
// }
virtual QCString trDefinedAtLineInSourceFile()
{
return "@1 파일의 @0 번째 라인에서 정의";
......@@ -966,7 +887,7 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Data 필드";
return "데이타 필드";
}
else
{
......@@ -1059,85 +980,85 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
// TODO: Need to be translated. -ryk11/22/01.
return
"Doxygen에 의해 생성된 도표를 보기위한 설명입니다.<p>\n"
//"This page explains how to interpret the graphs that are generated "
//"by doxygen.<p>\n"
"다음의 예제를 참고하세요.\n"
//"Consider the following example:\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"
"/*! A template class */\n"
"template<class T> class Templ { };\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"
" public Templ<int>\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"설정 파일의 MAX_DOT_GRAPH_HEIGHT 플래그가 240으로 설정되었다면 다음의 그래프가 나올 것이다."
//"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
//"is set to 240 this will result in the following graph:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"상자들은 다음을 뜻한다.\n"
//"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
"<li>%검은 상자는 그래프를 산출한 구조체나 클래스를 말한다.\n"
//"<li>%A filled black box represents the struct or class for which the "
//"graph is generated.\n"
"<li>%검은선으로된 상자는 문서화된 구조체나 클래스를 표시한다.\n"
//"<li>%A box with a black border denotes a documented struct or class.\n"
"<li>%회색선으로된 상자는 문서화되지 않은 구조체나 클래스를 표시한다.\n"
//"<li>%A box with a grey border denotes an undocumented struct or class.\n"
"<li>%빨간선으로된 상자는 모든 상속/containment 관계를 보이지 않은 문서화된 구조체나 클래스를 나타낸다. "
"지정된 경계안에 들어가지 않으면 그래프는 짤려진다.\n"
//"<li>%A box with a red border denotes a documented struct or class for"
//"which not all inheritance/containment relations are shown. %A graph is "
//"truncated if it does not fit within the specified boundaries.\n"
"</ul>\n"
"화살표는 다음을 뜻한다.\n"
//"The arrows have the following meaning:\n"
"<ul>\n"
"<li>%어두운 파란 화살표는 두 클래스간의 public 상속관계를 나타낸다.\n"
//"<li>%A dark blue arrow is used to visualize a public inheritance "
//"relation between two classes.\n"
"<li>%어두운 녹색 화살표는 protected 상속관계를 나타낸다.\n"
//"<li>%A dark green arrow is used for protected inheritance.\n"
"<li>%어두운 빨강 화살표는 private 상속관계를 나타낸다.\n"
//"<li>%A dark red arrow is used for private inheritance.\n"
"<li>%밝은 자주색 화살표는 클래스에 의해 포함되더나 사용된 클래스를 나타낸다. "
"이 화살표의 라벨은 접근 가능한 변수명을 나타낸다.\n"
//"<li>%A purple dashed arrow is used if a class is contained or used "
//"by another class. The arrow is labeled with the variable(s) "
//"through which the pointed class or struct is accessible.\n"
"<li>%밝은 노랑색 화살표는 템플릿 인스턴스와 템플릿 클래스를 나타낸다. "
"이 화살표의 라벨은 그 인스턴스의 템플릿 매개변수를 나타낸다.\n"
//"<li>%A yellow dashed arrow denotes a relation between a template instance and "
//"the template class it was instantiated from. The arrow is labeled with "
//"the template parameters of the instance.\n"
"</ul>\n";
"Doxygen에 의해 생성된 도표를 보기위한 설명입니다.<p>\n"
//"This page explains how to interpret the graphs that are generated "
//"by doxygen.<p>\n"
"다음의 예제를 참고하세요.\n"
//"Consider the following example:\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"
"/*! A template class */\n"
"template<class T> class Templ { };\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"
" public Templ<int>\n"
"{\n"
" private:\n"
" Used *m_usedClass;\n"
"};\n"
"\\endcode\n"
"설정 파일의 MAX_DOT_GRAPH_HEIGHT 플래그가 240으로 설정되었다면 다음의 그래프가 나올 것이다."
//"If the \\c MAX_DOT_GRAPH_HEIGHT tag in the configuration file "
//"is set to 240 this will result in the following graph:"
"<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
"<p>\n"
"상자들은 다음을 뜻한다.\n"
//"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
"<li>%검은 상자는 그래프를 산출한 구조체나 클래스를 말한다.\n"
//"<li>%A filled black box represents the struct or class for which the "
//"graph is generated.\n"
"<li>%검은선으로된 상자는 문서화된 구조체나 클래스를 표시한다.\n"
//"<li>%A box with a black border denotes a documented struct or class.\n"
"<li>%회색선으로된 상자는 문서화되지 않은 구조체나 클래스를 표시한다.\n"
//"<li>%A box with a grey border denotes an undocumented struct or class.\n"
"<li>%빨간선으로된 상자는 모든 상속/containment 관계를 보이지 않은 문서화된 구조체나 클래스를 나타낸다. "
"지정된 경계안에 들어가지 않으면 그래프는 짤려진다.\n"
//"<li>%A box with a red border denotes a documented struct or class for"
//"which not all inheritance/containment relations are shown. %A graph is "
//"truncated if it does not fit within the specified boundaries.\n"
"</ul>\n"
"화살표는 다음을 뜻한다.\n"
//"The arrows have the following meaning:\n"
"<ul>\n"
"<li>%어두운 파란 화살표는 두 클래스간의 public 상속관계를 나타낸다.\n"
//"<li>%A dark blue arrow is used to visualize a public inheritance "
//"relation between two classes.\n"
"<li>%어두운 녹색 화살표는 protected 상속관계를 나타낸다.\n"
//"<li>%A dark green arrow is used for protected inheritance.\n"
"<li>%어두운 빨강 화살표는 private 상속관계를 나타낸다.\n"
//"<li>%A dark red arrow is used for private inheritance.\n"
"<li>%밝은 자주색 화살표는 클래스에 의해 포함되더나 사용된 클래스를 나타낸다. "
"이 화살표의 라벨은 접근 가능한 변수명을 나타낸다.\n"
//"<li>%A purple dashed arrow is used if a class is contained or used "
//"by another class. The arrow is labeled with the variable(s) "
//"through which the pointed class or struct is accessible.\n"
"<li>%밝은 노랑색 화살표는 템플릿 인스턴스와 템플릿 클래스를 나타낸다. "
"이 화살표의 라벨은 그 인스턴스의 템플릿 매개변수를 나타낸다.\n"
//"<li>%A yellow dashed arrow denotes a relation between a template instance and "
//"the template class it was instantiated from. The arrow is labeled with "
//"the template parameters of the instance.\n"
"</ul>\n";
}
/*! text for the link to the legend page */
virtual QCString trLegend()
{
{
return "범례";
}
......@@ -1185,11 +1106,6 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
// 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()
{
......@@ -1222,11 +1138,6 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
return "패키지";
}
/*! Used as a chapter title for Latex & RTF output */
// virtual QCString trPackageDocumentation()
// {
// return "패키지 문서화";
// }
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -1294,29 +1205,29 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
/*! Used as header RTF general index */
virtual QCString trRTFGeneralIndex()
{
return "인덱스"; // TODO: Need to be translated. -ryk11/22/01.
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)
virtual QCString trClass(bool, bool singular)
{
QCString result((first_capital ? "클래스" : "클래스"));
QCString result("클래스");
if (!singular) result+="들";
return result; // TODO: Need to be translated. -ryk11/22/01.
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)
virtual QCString trFile(bool, bool singular)
{
QCString result((first_capital ? "파일" : "파일"));
QCString result("파일");
if (!singular) result+="들";
return result; // TODO: Need to be translated. -ryk11/22/01.
return result;
}
/*! This is used for translation of the word that will possibly
......@@ -1334,22 +1245,22 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
* be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trGroup(bool first_capital, bool singular)
virtual QCString trGroup(bool, bool singular)
{
QCString result((first_capital ? "그룹" : "그룹"));
QCString result("그룹");
if (!singular) result+="들";
return result; // TODO: Need to be translated. -ryk11/22/01.
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)
virtual QCString trPage(bool, bool singular)
{
QCString result((first_capital ? "페이지" : "페이지"));
QCString result("페이지");
if (!singular) result+="들";
return result; // TODO: Need to be translated. -ryk11/22/01.
return result;
}
/*! This is used for translation of the word that will possibly
......@@ -1360,20 +1271,9 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
QCString result((first_capital ? "멤버" : "멤버"));
if (!singular) result+="들";
return result; // TODO: Need to be translated. -ryk11/22/01.
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+="들";
// return result; // TODO: Need to be translated. -ryk11/22/01.
// }
/*! 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.
......@@ -1382,7 +1282,7 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
QCString result((first_capital ? "Global" : "global"));
if (!singular) result+="s";
return result; // TODO: Need to be translated. -ryk11/22/01.
return result;
}
//////////////////////////////////////////////////////////////////////////
......@@ -1391,11 +1291,11 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
/*! 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)
virtual QCString trAuthor(bool, bool singular)
{
QCString result((first_capital ? "작성자" : "작성자"));
QCString result("작성자");
if (!singular) result+="들";
return result; // TODO: Need to be translated. -ryk11/22/01.
return result;
}
//////////////////////////////////////////////////////////////////////////
......@@ -1406,7 +1306,7 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
*/
virtual QCString trReferences()
{
return "참조"; // TODO: Need to be translated. -ryk11/22/01.
return "참조";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1418,8 +1318,7 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
*/
virtual QCString trImplementedFromList(int numEntries)
{
//return "Implements "+trWriteList(numEntries)+".";
return trWriteList(numEntries)+" 구현.";
return trWriteList(numEntries)+" 구현.";
}
/*! used in member documentation blocks to produce a list of
......@@ -1427,8 +1326,7 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
*/
virtual QCString trImplementedInList(int numEntries)
{
//return "Implemented in "+trWriteList(numEntries)+".";
return trWriteList(numEntries)+"에 구현되었다.";
return trWriteList(numEntries)+"에 구현되었다.";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1480,35 +1378,35 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
*/
virtual QCString trPackageTypes()
{
return "패키지 타입들"; //"Package Types";
return "패키지 타입들";
}
/*! Used as a heading for a list of Java class functions with package
* scope.
*/
virtual QCString trPackageMembers()
{
return "패키지 함수들"; //"Package Functions";
return "패키지 함수들";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
*/
virtual QCString trStaticPackageMembers()
{
return "정적 패키지 함수들"; //"Static Package Functions";
return "정적 패키지 함수들";
}
/*! Used as a heading for a list of Java class variables with package
* scope.
*/
virtual QCString trPackageAttribs()
{
return "패키지 속성들"; //"Package Attributes";
return "패키지 속성들";
}
/*! Used as a heading for a list of static Java class variables with
* package scope.
*/
virtual QCString trStaticPackageAttribs()
{
return "정적 패키지 속성들"; //"Static Package Attributes";
return "정적 패키지 속성들";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1526,7 +1424,6 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
virtual QCString trCallGraph()
{
return "다음은 이 함수에 대한 호출 그래프입니다:";
//"Here is the call graph for this function:";
}
//////////////////////////////////////////////////////////////////////////
......@@ -1560,20 +1457,20 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
{
if (numDocuments==0)
{
//return "Sorry, no documents matching your query.";
return "죄송합니다. 질의와 일치하는 문서가 없습니다.";
//return "Sorry, no documents matching your query.";
return "죄송합니다. 질의와 일치하는 문서가 없습니다.";
}
else if (numDocuments==1)
{
//return "Found <b>1</b> document matching your query.";
return "질의와 일치하는 <b>1</b>개의 문서를 찾았습니다.";
//return "Found <b>1</b> document matching your query.";
return "질의와 일치하는 <b>1</b>개의 문서를 찾았습니다.";
}
else
{
//return "Found <b>$num</b> documents matching your query. "
// "Showing best matches first.";
return "질의와 일치하는 <b>$num</b>개의 문서들을 찾았습니다. "
"처음에 나오는 것이 가장 일치하는 문서입니다.";
//return "Found <b>$num</b> documents matching your query. "
// "Showing best matches first.";
return "질의와 일치하는 <b>$num</b>개의 문서들을 찾았습니다. "
"처음에 나오는 것이 가장 일치하는 문서입니다.";
}
}
/*! This string is put before the list of matched words, for each search
......@@ -1637,13 +1534,27 @@ class TranslatorKorean : public TranslatorAdapter_1_4_1
*/
virtual QCString trDir(bool /*first_capital*/, bool /*singular*/)
{
// QCString result((first_capital ? "Director" : "director"));
// if (singular) result+="y"; else result+="ies";
// return result;
return "디렉터";
}
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a overloaded function.
*/
virtual QCString trOverloadText()
{
return "이것은 편리를 위해 제공되는 오버로드 멤버 함수이다, "
"어떤 아규먼트(argument)가 그것을 수용할때 위 함수는 다르다.";
}
};
#endif
......@@ -141,7 +141,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile)
}
fullCmd += " ";
fullCmd += args;
Debug::print(Debug::ExtCmd,0,"Executing external command \"%s\"\n",fullCmd.data());
Debug::print(Debug::ExtCmd,0,"Executing external command `%s`\n",fullCmd.data());
#if !defined(_WIN32) || defined(__CYGWIN__)
isBatchFile=isBatchFile;
......@@ -3354,6 +3354,7 @@ bool getScopeDefs(const char *docScope,const char *scope,
static bool isLowerCase(QCString &s)
{
char *p=s.data();
if (p==0) return TRUE;
int c;
while ((c=*p++)) if (!islower(c)) return FALSE;
return TRUE;
......
......@@ -805,6 +805,11 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
<< md->getDefLine() << "\"";
if (md->getStartBodyLine()!=-1)
{
FileDef *bodyDef = md->getBodyDef();
if (bodyDef)
{
t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
}
t << " bodystart=\"" << md->getStartBodyLine() << "\" bodyend=\""
<< md->getEndBodyLine() << "\"";
}
......@@ -1220,6 +1225,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
<< cd->getDefLine() << "\"";
if (cd->getStartBodyLine()!=-1)
{
FileDef *bodyDef = cd->getBodyDef();
if (bodyDef)
{
t << " bodyfile=\"" << bodyDef->absFilePath() << "\"";
}
t << " bodystart=\"" << cd->getStartBodyLine() << "\" bodyend=\""
<< cd->getEndBodyLine() << "\"";
}
......@@ -1564,7 +1574,8 @@ static void generateXMLForPage(PageDef *pd,QTextStream &ti,bool isExample)
t << "\" kind=\"" << kindName << "\">" << endl;
t << " <compoundname>" << convertToXML(pd->name())
<< "</compoundname>" << endl;
SectionInfo *si = Doxygen::sectionDict.find(pd->name());
SectionInfo *si = Doxygen::sectionDict.find(pageName);
if (si)
{
t << " <title>" << convertToXML(si->title) << "</title>" << endl;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment