Commit 5a640083 authored by dimitri's avatar dimitri

Release-1.4.1-20050307

parent d745dd37
DOXYGEN Version 1.4.1-20050227
DOXYGEN Version 1.4.1-20050307
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (27 February 2005)
Dimitri van Heesch (07 March 2005)
DOXYGEN Version 1.4.1_20050227
DOXYGEN Version 1.4.1_20050307
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) (27 February 2005)
Dimitri van Heesch (dimitri@stack.nl) (07 March 2005)
1.4.1-20050227
1.4.1-20050307
......@@ -823,12 +823,12 @@ MainWidget::MainWidget(QWidget *parent)
// load default settings
m_settings.setPath("www.doxygen.org","Doxygen GUI");
bool ok;
QString config = m_settings.readEntry("/config/default",QString::null,&ok);
QString config = m_settings.readEntry("/doxywizard/config/default",QString::null,&ok);
if (ok && !config.isEmpty())
{
Config::instance()->parseString("default settings",config);
}
QString workingDir = m_settings.readEntry("/config/workingdir",QString::null,&ok);
QString workingDir = m_settings.readEntry("/doxywizard/config/workingdir",QString::null,&ok);
if (ok && !workingDir.isEmpty())
{
m_workingDir->setText(workingDir);
......@@ -836,7 +836,7 @@ MainWidget::MainWidget(QWidget *parent)
setConfigSaved(FALSE);
for (int i=0;i<10;i++)
{
QString entry = m_settings.readEntry(QString().sprintf("/recent/config%d",i));
QString entry = m_settings.readEntry(QString().sprintf("/doxywizard/recent/config%d",i));
if (!entry.isEmpty())
{
addRecentFile(entry);
......@@ -1178,8 +1178,8 @@ void MainWidget::saveDefaults()
QString newConfig;
QTextStream t(&newConfig,IO_WriteOnly);
Config::instance()->writeTemplate(t,TRUE,FALSE);
m_settings.writeEntry("/config/default",newConfig);
m_settings.writeEntry("/config/workingdir",m_workingDir->text());
m_settings.writeEntry("/doxywizard/config/default",newConfig);
m_settings.writeEntry("/doxywizard/config/workingdir",m_workingDir->text());
statusBar()->message("Current configuration saved as default",messageTimeout);
}
}
......@@ -1361,7 +1361,7 @@ void MainWidget::addRecentFile(const QString &file)
for ( it = m_recentFiles.begin(); it != m_recentFiles.end(); ++it, ++i )
{
m_recentMenu->insertItem(*it);
m_settings.writeEntry(QString().sprintf("/recent/config%d",i),*it);
m_settings.writeEntry(QString().sprintf("/doxywizard/recent/config%d",i),*it);
}
}
......
......@@ -60,7 +60,7 @@ when the translator was updated.
<td>Brazilian Portuguese</td>
<td>Fabio "FJTC" Jun Takada Chino</td>
<td>jun-chino at uol dot com dot br</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Catalan</td>
......@@ -72,7 +72,7 @@ when the translator was updated.
<td>Chinese</td>
<td>Li Daobing<br>Wei Liu</td>
<td>lidaobing at gmail dot com<br>liuwei at asiainfo dot com</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Chinese Traditional</td>
......@@ -84,13 +84,13 @@ when the translator was updated.
<td>Croatian</td>
<td>Boris Bralo</td>
<td>boris.bralo at zg dot htnet dot hr</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Czech</td>
<td>Petr P&#x0159;ikryl</td>
<td>prikrylp at skil dot cz</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Danish</td>
......@@ -120,13 +120,13 @@ when the translator was updated.
<td>French</td>
<td>Xavier Outhier</td>
<td>xouthier at yahoo dot fr</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>German</td>
<td>Jens Seidel</td>
<td>jensseidel at users dot sf dot net</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Greek</td>
......@@ -136,15 +136,15 @@ when the translator was updated.
</tr>
<tr bgcolor="#ffffff">
<td>Hungarian</td>
<td>F&ouml;ldv&aacute;ri Gy&ouml;rgy<br>&Aacute;kos Kiss</td>
<td>foldvari lost at cyberspace<br>akiss at users dot sourceforge dot net</td>
<td>up-to-date</td>
<td>&Aacute;kos Kiss<br>F&ouml;ldv&aacute;ri Gy&ouml;rgy</td>
<td>akiss at users dot sourceforge dot net<br>foldvari lost at cyberspace</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Italian</td>
<td>Alessandro Falappa<br>Ahmed Aldo Faisal</td>
<td>alessandro at falappa dot net<br>aaf23 at cam dot ac dot uk</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Japanese</td>
......@@ -162,7 +162,7 @@ when the translator was updated.
<td>Korean</td>
<td>SooYoung Jung<br>Richard Kim</td>
<td>jung5000 at gmail dot com<br>ryk at dspwiz dot com</td>
<td>up-to-date</td>
<td>1.4.01</td>
</tr>
<tr bgcolor="#ffffff">
<td>KoreanEn</td>
......@@ -186,7 +186,7 @@ when the translator was updated.
<td>Polish</td>
<td>Piotr Kaminski<br>Grzegorz Kowal</td>
<td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Portuguese</td>
......@@ -198,19 +198,19 @@ when the translator was updated.
<td>Romanian</td>
<td>Alexandru Iosup</td>
<td>aiosup at yahoo dot com</td>
<td>1.2.16</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Russian</td>
<td>Alexandr Chelpanov</td>
<td>cav at cryptopro dot ru</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Serbian</td>
<td>Dejan Milosavljevic</td>
<td>dmilos at email dot com</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Slovak</td>
......@@ -234,13 +234,13 @@ when the translator was updated.
<td>Swedish</td>
<td>Mikael Hallin</td>
<td>mikaelhallin at yahoo dot se</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<tr bgcolor="#ffffff">
<td>Ukrainian</td>
<td>Olexij Tkatchenko</td>
<td>olexij.tkatchenko at parcs dot de</td>
<td>up-to-date</td>
<td>1.4.1</td>
</tr>
<!-- table content end -->
</table>
......@@ -259,19 +259,19 @@ when the translator was updated.
\hline
Afrikaans & Johan Prinsloo & {\tt\tiny johan@zippysnoek.com} & 1.3.9 \\
\hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & up-to-date \\
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt\tiny jun-chino@uol.com.br} & 1.4.1 \\
\hline
Catalan & Albert Mora & {\tt\tiny amora@iua.upf.es} & 1.2.17 \\
\hline
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & up-to-date \\
Chinese & Li Daobing & {\tt\tiny lidaobing@gmail.com} & 1.4.1 \\
~ & Wei Liu & {\tt\tiny liuwei@asiainfo.com} & ~ \\
\hline
Chinese Traditional & Daniel YC Lin & {\tt\tiny daniel@twpda.com} & 1.3.8 \\
~ & Gary Lee & {\tt\tiny garylee@ecosine.com.tw} & ~ \\
\hline
Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & up-to-date \\
Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & 1.4.1 \\
\hline
Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & up-to-date \\
Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & 1.4.1 \\
\hline
Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\
\hline
......@@ -281,16 +281,16 @@ when the translator was updated.
\hline
Finnish & Olli Korhonen & {\tt\tiny olli.korhonen lost@cyberspace} & obsolete \\
\hline
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & up-to-date \\
French & Xavier Outhier & {\tt\tiny xouthier@yahoo.fr} & 1.4.1 \\
\hline
German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & up-to-date \\
German & Jens Seidel & {\tt\tiny jensseidel@users.sf.net} & 1.4.1 \\
\hline
Greek & Harry Kalogirou & {\tt\tiny harkal@rainbow.cs.unipi.gr} & 1.2.11 \\
\hline
Hungarian & F\"{o}ldv\'{a}ri Gy\"{o}rgy & {\tt\tiny foldvari lost@cyberspace} & up-to-date \\
~ & \'{A}kos Kiss & {\tt\tiny akiss@users.sourceforge.net} & ~ \\
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
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & up-to-date \\
Italian & Alessandro Falappa & {\tt\tiny alessandro@falappa.net} & 1.4.1 \\
~ & Ahmed Aldo Faisal & {\tt\tiny aaf23@cam.ac.uk} & ~ \\
\hline
Japanese & Ryunosuke Satoh & {\tt\tiny sun594@hotmail.com} & 1.3.9 \\
......@@ -299,7 +299,7 @@ when the translator was updated.
\hline
JapaneseEn & see the Japanese language & {\tt\tiny ~} & English based \\
\hline
Korean & SooYoung Jung & {\tt\tiny jung5000@gmail.com} & up-to-date \\
Korean & SooYoung Jung & {\tt\tiny jung5000@gmail.com} & 1.4.01 \\
~ & Richard Kim & {\tt\tiny ryk@dspwiz.com} & ~ \\
\hline
KoreanEn & see the Korean language & {\tt\tiny ~} & English based \\
......@@ -310,16 +310,16 @@ when the translator was updated.
\hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\
\hline
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & 1.4.1 \\
~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\
\hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
\hline
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.2.16 \\
Romanian & Alexandru Iosup & {\tt\tiny aiosup@yahoo.com} & 1.4.1 \\
\hline
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & up-to-date \\
Russian & Alexandr Chelpanov & {\tt\tiny cav@cryptopro.ru} & 1.4.1 \\
\hline
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & up-to-date \\
Serbian & Dejan Milosavljevic & {\tt\tiny dmilos@email.com} & 1.4.1 \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt\tiny skudlac@pobox.sk} & 1.2.18 \\
\hline
......@@ -327,9 +327,9 @@ when the translator was updated.
\hline
Spanish & Francisco Oltra Thennet & {\tt\tiny foltra@puc.cl} & 1.3.8 \\
\hline
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & up-to-date \\
Swedish & Mikael Hallin & {\tt\tiny mikaelhallin@yahoo.se} & 1.4.1 \\
\hline
Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & up-to-date \\
Ukrainian & Olexij Tkatchenko & {\tt\tiny olexij.tkatchenko@parcs.de} & 1.4.1 \\
\hline
\end{tabular}
\endlatexonly
......
......@@ -54,8 +54,8 @@ TranslatorGreek
Harry Kalogirou: harkal@rainbow.cs.unipi.gr
TranslatorHungarian
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
&Aacute;kos Kiss: akiss@users.sourceforge.net
F&ouml;ldv&aacute;ri Gy&ouml;rgy: foldvari lost@cyberspace
TranslatorItalian
Alessandro Falappa: alessandro@falappa.net
......
......@@ -45,6 +45,7 @@
2004/07/26 - Better reporting of not-needed adapters.
2004/10/04 - Reporting of not called translator methods added.
2004/10/05 - Modified to check only doxygen/src sources for the previous report.
2005/02/28 - Slight modification to generate "mailto.txt" auxiliary file.
"""
from __future__ import generators
......@@ -1435,6 +1436,13 @@ class TrManager:
return trdic
def __email(self, classId):
"""Returns the first maintainer for the translator class"""
return self.__maintainersDic[classId][0][1]
def generateTranslatorReport(self):
"""Generates the translator report."""
......@@ -1466,7 +1474,12 @@ class TrManager:
s += 'and %d are English based.' % len(self.EnBasedIdLst)
f.write(fill(s) + '\n\n')
# Write the list of up-to-date translator classes.
# The e-mail addresses of the maintainers will be collected to
# the auxiliary file in the order of translator classes listed
# in the translator report.
fmail = file('mailto.txt', 'w')
# Write the list of up-to-date translator classes.
if self.upToDateIdLst:
s = '''The following translator classes are up-to-date (sorted
alphabetically). This means that they derive from the
......@@ -1476,12 +1489,18 @@ class TrManager:
s = s % len(self.requiredMethodsDic)
f.write('-' * 70 + '\n')
f.write(fill(s) + '\n\n')
mailtoLst = []
for x in self.upToDateIdLst:
obj = self.__translDic[x]
f.write(' ' + obj.classId)
if obj.note:
f.write(' -- ' + obj.note)
f.write('\n')
mailtoLst.append(self.__email(obj.classId))
fmail.write('up-to-date\n')
fmail.write('; '.join(mailtoLst))
# Write the list of the adapter based classes. The very obsolete
# translators that derive from TranslatorEnglish are included.
......@@ -1497,6 +1516,7 @@ class TrManager:
# Find also whether some adapter classes may be removed.
adaptMinVersion = '9.9.99'
mailtoLst = []
for x in self.adaptIdLst:
obj = self.__translDic[x]
f.write(' %-30s' % obj.classId)
......@@ -1508,10 +1528,14 @@ class TrManager:
if obj.note:
f.write('\n\tNote: ' + obj.note + '\n')
f.write('\n')
mailtoLst.append(self.__email(obj.classId)) # to maintainer
# Check the level of required adapter classes.
if obj.status != '0.0.00' and obj.status < adaptMinVersion:
adaptMinVersion = obj.status
fmail.write('\n\ntranslator based\n')
fmail.write('; '.join(mailtoLst))
# Set the note if some old translator adapters are not needed
# any more. Do it only when the script is called without arguments,
......@@ -1588,8 +1612,9 @@ class TrManager:
assert(obj.classId != 'Translator')
obj.report(f)
# Close the report file.
# Close the report file and the auxiliary file with e-mails.
f.close()
fmail.close()
def __loadMaintainers(self):
......@@ -1599,7 +1624,7 @@ class TrManager:
fname = os.path.join(self.script_path, self.maintainersFileName)
# Include the maintainers file to the checked group of files with
# Include the maintainers file to the group of files checked with
# respect to the modification time.
tim = os.path.getmtime(fname)
if tim > self.lastModificationTime:
......@@ -1625,7 +1650,7 @@ class TrManager:
classId = line
maintainersLst = []
inside = True
# Otherwise skip empty line that do not act as separators.
# Otherwise skip empty line that do not act as separator.
else: # if inside the record
if line == '': # separator found
......@@ -1642,8 +1667,8 @@ class TrManager:
t = (lst[0].strip(), lst[1].strip())
self.__maintainersDic[classId].append(t)
f.close()
def generateLanguageDoc(self):
"""Checks the modtime of files and generates language.doc."""
self.__loadMaintainers()
......
This diff is collapsed.
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.4.1_20050227
Version: 1.4.1_20050307
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -133,6 +133,8 @@ static int g_braceCount=0;
static void saveObjCContext();
static void restoreObjCContext();
//-------------------------------------------------------------------
/*! Represents a stack of variable to class mappings as found in the
......@@ -252,10 +254,15 @@ void VariableContext::addVariable(const QCString &type,const QCString &name)
addVariable(typeName,name);
}
}
else // add a dummy entry so the name is hidden to avoid false links
else
{
DBG_CTX((stderr,"** addVariable: dummy context\n"));
scope->append(lname,dummyContext);
if (m_scopes.count()>0) // for local variables add a dummy entry so the name
// is hidden to avoid false links to global variables with the same name
// TODO: make this work for namespaces as well!
{
DBG_CTX((stderr,"** addVariable: dummy context\n"));
scope->append(lname,dummyContext);
}
}
}
......@@ -281,9 +288,8 @@ ClassDef *VariableContext::findVariable(const QCString &name)
return result;
}
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
static VariableContext g_theVarContext;
const ClassDef *VariableContext::dummyContext = (ClassDef*)0x8;
//-------------------------------------------------------------------
......@@ -848,6 +854,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
}
ClassDef *cd=0,*lcd=0;
MemberDef *md=0;
bool isLocal=FALSE;
//fprintf(stderr,"generateClassOrGlobalLink(className=%s)\n",className.data());
if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
......@@ -859,7 +866,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{
cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md);
}
//print("is found as a type %s\n",cd?cd->name().data():"<null>");
//printf("is found as a type %s\n",cd?cd->name().data():"<null>");
if (cd==0 && md==0) // also see if it is variable or enum or enum value
{
if (getLink(g_classScope,clName,ol,clName))
......@@ -874,7 +881,8 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{
g_theCallContext.setClass(lcd);
}
//fprintf(stderr,"is a local variable!\n");
isLocal=TRUE;
//fprintf(stderr,"is a local variable cd=%p!\n",cd);
}
if (cd && cd->isLinkable()) // is it a linkable class
{
......@@ -907,7 +915,7 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
else // not a class, maybe a global member
{
//printf("class %s not linkable! cd=%p md=%p typeOnly=%d\n",clName,cd,md,typeOnly);
if (md!=0 || (cd==0 && !typeOnly)) // not a class, see if it is a global enum/variable/typedef.
if (!isLocal && (md!=0 || (cd==0 && !typeOnly))) // not a class, see if it is a global enum/variable/typedef.
{
if (md==0) // not found as a typedef
{
......
......@@ -57,6 +57,8 @@ static QCString g_fileName;
static int g_lineNr;
static int g_condCtx;
static QStack<CondCtx> g_condStack;
static QCString g_blockName;
static int g_lastCommentContext;
static void replaceCommentMarker(const char *s,int len)
{
......@@ -217,6 +219,32 @@ static QCString handleCondCmdInAliases(const QCString &s)
return result;
}
/** copies string \a s with length \a len to the output, while
* replacing any alias commands found in the string.
*/
static void replaceAliases(const char *s,int len)
{
static QRegExp cmd("[@\\\\][a-z_A-Z][a-z_A-Z0-9]*");
QCString in=s;
int p=0,i,l;
while ((i=cmd.match(in,p,&l))!=-1)
{
copyToOutput(s+p,i-p);
QCString *pValue=Doxygen::aliasDict[in.mid(i+1,l-1)];
if (pValue)
{
QCString val = handleCondCmdInAliases(*pValue);
copyToOutput(val.data(),val.length());
}
else
{
copyToOutput(s+i,l);
}
p=i+l;
}
copyToOutput(s+p,len-p);
}
#undef YY_INPUT
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
......@@ -245,7 +273,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
%x Verbatim
%x ReadLine
%x CondLine
%x SkipLang
%%
......@@ -271,7 +298,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
}
g_blockHeadCol=g_col;
copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i);
//copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment);
}
<Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */
......@@ -279,7 +307,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
int i=17; //=strlen("//##Documentation");
g_blockHeadCol=g_col;
copyToOutput("/**",3);
copyToOutput(yytext+i,yyleng-i);
//copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment);
}
<Scan>"//"/.*\n { /* one line C++ comment */
......@@ -291,16 +320,21 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng);
BEGIN(CComment);
}
<Scan>[\\@]"verbatim" { /* start of a verbatim block */
<CComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code") { /* start of a verbatim block */
copyToOutput(yytext,yyleng);
g_blockName=&yytext[1];
g_lastCommentContext = YY_START;
BEGIN(Verbatim);
}
<Scan>. { /* any other character */
copyToOutput(yytext,yyleng);
}
<Verbatim>[\\@]"endverbatim" { /* end of verbatim block */
<Verbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
copyToOutput(yytext,yyleng);
BEGIN(Scan);
if (&yytext[4]==g_blockName)
{
BEGIN(g_lastCommentContext);
}
}
<Verbatim>[^@\\\n]* { /* any character not a backslash or new line */
copyToOutput(yytext,yyleng);
......@@ -311,25 +345,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<Verbatim>. { /* any other character */
copyToOutput(yytext,yyleng);
}
<SkipLang>[\\@]"~"[a-zA-Z]* { /* end of verbatim block */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
{ // enable language specific section
BEGIN(CComment);
}
}
<SkipLang>[^*@\\\n]* { /* any character not a *, @, backslash or new line */
}
<SkipLang>\n { /* new line in verbatim block */
copyToOutput(yytext,yyleng);
}
<SkipLang>"*/" { /* end of comment block */
copyToOutput(yytext,yyleng);
BEGIN(Scan);
}
<SkipLang>. { /* any other character */
}
<SkipString>\\. { /* escaped character in string */
copyToOutput(yytext,yyleng);
}
......@@ -411,14 +426,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<CComment,ReadLine>("\\\\"|"@@")[~a-z_A-Z][a-z_A-Z0-9]*[ \t]* { // escaped command
copyToOutput(yytext,yyleng);
}
<CComment>[@\\]"~"[a-zA-Z]* { // language switch
QCString langId = &yytext[2];
if (!langId.isEmpty() &&
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
{
BEGIN(SkipLang);
}
}
<CComment,ReadLine>[\\@]"cond"[ \t]+ { // conditional section
g_condCtx = YY_START;
BEGIN(CondLine);
......@@ -492,7 +499,7 @@ void replaceComment(int offset)
}
}
/*! This function does two things:
/*! This function does three things:
* -# It converts multi-line C++ style comment blocks (that are aligned)
* to C style comment blocks (if MULTILINE_CPP_IS_BRIEF is set to NO).
* -# It replaces aliases with their definition (see ALIASES)
......
......@@ -161,7 +161,9 @@ static DocCmdMap docCmdMap[] =
{ "verbatim", &handleFormatBlock },
{ "latexonly", &handleFormatBlock },
{ "htmlonly", &handleFormatBlock },
{ "xmlonly", &handleFormatBlock },
{ "rtfonly", &handleFormatBlock },
{ "manonly", &handleFormatBlock },
{ "dot", &handleFormatBlock },
{ "code", &handleFormatBlock },
{ "addindex", &handleAddIndex },
......@@ -316,7 +318,6 @@ static QCString xrefItemTitle;
static QCString xrefListTitle;
static Protection protection;
static bool xrefAppendToPrev;
static bool xrefAppendFlag;
//-----------------------------------------------------------------------------
......@@ -405,8 +406,8 @@ static void addXRefItem(const char *listName,const char *itemTitle,
{
Entry *docEntry = current; // inBody && previous ? previous : current;
if (listName==0) return;
//printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);
ListItemInfo *lii=0;
RefList *refList = Doxygen::xrefLists->find(listName);
if (refList==0) // new list
......@@ -539,17 +540,20 @@ static void addSection()
// selects the output to write to
static inline void setOutput(OutputContext ctx)
{
bool xrefAppendToPrev = xrefAppendFlag;
// determine append flag for the next item (i.e. the end of this item)
xrefAppendFlag = ctx==OutputXRef && newXRefKind==xrefKind &&
(xrefKind!=XRef_Item || newXRefItemKey==xrefItemKey);
//printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
// xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);
xrefItemKey = newXRefItemKey;
//printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx);
if (inContext==OutputXRef) // end of XRef section => add the item
{
// See if we can append this new xref item to the previous one.
// We know this at the start of the next item of the same
// type and need to remember this until the end of that item.
xrefAppendToPrev = xrefAppendFlag;
xrefAppendFlag = ctx==OutputXRef && newXRefKind==xrefKind &&
(xrefKind!=XRef_Item || newXRefItemKey==xrefItemKey);
//printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
// xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);
switch(xrefKind)
{
case XRef_Todo:
......@@ -604,7 +608,7 @@ static inline void setOutput(OutputContext ctx)
case OutputXRef:
pOutputString = &outputXRef;
// first item found, so can't append to previous
xrefAppendFlag = FALSE;
//xrefAppendFlag = FALSE;
break;
}
}
......@@ -641,8 +645,7 @@ static int yyread(char *buf,int max_size)
/* start command character */
CMD ("\\"|"@")
DETAILEDCMD {CMD}("arg"|"attention"|"author"|"bug"|"code"|"date"|"deprecated"|"dot"|"dotfile"|"example"|"htmlinclude"|"htmlonly"|"image"|"include"|"includelineno"|"internal"|"invariant"|"latexonly"|"li"|"line"|manonly"|"name"|"note"|"par"|"paragraph"|"param"|"post"|"pre"|"remarks"|"relate"[sd]"("also")?|"remarks"|"return"[s]?|"retval"|"sa"|"section"|"see"|"since"|"subsection"|"subsubsection"|"test"|"throw"|"todo"|"until"|"verbatim"|"verbinclude"|"version"|"warning"|"xmlonly"|"xrefitem")
/* ("image"|"author"|"internal"|"version"|"date"|"deprecated"|"param"|"exception"|"return"[s]?|"retval"|"bug"|"warning"|"par"|"sa"|"see"|"pre"|"post"|"invariant"|"note"|"remark"[s]?|"todo"|"test"|"xrefitem"|"ingroup"|"callgraph"|"latexonly"|"htmlonly"|"xmlonly"|"{"|"verbatim"|"dotfile"|"dot"|"defgroup"|"addtogroup"|"weakgroup"|"class"|"namespace"|"union"|"struct"|"fn"|"var"|"details"|"typedef"|"def"|"overload")|("<"{PRE}">") */
DETAILEDCMD {CMD}("arg"|"attention"|"author"|"bug"|"code"|"date"|"deprecated"|"dot"|"dotfile"|"example"|"htmlinclude"|"htmlonly"|"image"|"include"|"includelineno"|"internal"|"invariant"|"latexonly"|"li"|"line"|manonly"|"name"|"note"|"par"|"paragraph"|"param"|"post"|"pre"|"remarks"|"relate"[sd]"("also")?|"remarks"|"return"[s]?|"retval"|"sa"|"section"|"see"|"since"|"subsection"|"subsubsection"|"test"|"throw"|"todo"|"until"|"verbatim"|"verbinclude"|"version"|"warning"|"xrefitem")
PRE [pP][rR][eE]
TABLE [tT][aA][bB][lL][eE]
P [pP]
......@@ -706,6 +709,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
%x ReadFormulaLong
%x AnchorLabel
%x HtmlComment
%x SkipLang
%%
......@@ -720,11 +724,15 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
* end of brief description due to some command (@command, or <command>).
* words and whitespace and other characters (#,?!, etc).
* grouping commands (e.g. @{ and @})
* language switch (e.g. \~english or \~).
*/
<Comment>{CMD}{CMD}[a-z_A-Z]+{B}* { // escaped command
addOutput(yytext);
}
<Comment>{CMD}{CMD}"~"[a-z_A-Z]* { // escaped command
addOutput(yytext);
}
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
addOutput(yytext);
}
......@@ -757,6 +765,14 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<Comment>("\\\\"|"@@")"f"[$\[{] { // escaped formula command
addOutput(yytext);
}
<Comment>{CMD}"~"[a-z_A-Z]* { // language switch command
QCString langId = &yytext[2];
if (!langId.isEmpty() &&
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
{ // enable language specific section
BEGIN(SkipLang);
}
}
<Comment>{CMD}"f{"[^}\n]+"}" { // start of a formula with custom environment
formulaText="\\begin";
formulaEnv=&yytext[2];
......@@ -793,7 +809,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
addOutput(yytext[0]);
addOutput(yytext[2]);
}
<Comment>\n({B}*\n)+ { // at least one blank line
<Comment>(\n|\\_linebr)({B}*(\n|\\_linebr))+ { // at least one blank line (or blank line command)
if (inContext)
{
setOutput(OutputDoc);
......@@ -1091,7 +1107,6 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<XRefItemParam1>{ID} { // first argument
newXRefItemKey=yytext;
setOutput(OutputXRef);
xrefItemKey==yytext;
BEGIN(XRefItemParam2);
}
<XRefItemParam1>{LC} { // line continuation
......@@ -1274,7 +1289,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
/* ----- handle arguments of the preformatted block commands ------- */
<FormatBlock>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode")/{NW} { // possible ends
<FormatBlock>{CMD}("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode")/{NW} { // possible ends
addOutput(yytext);
if (&yytext[4]==blockName) // found end of the block
{
......@@ -1429,6 +1444,7 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
}
<NameParam>. { // ignore other stuff
nameHeader+=*yytext;
current->name+=*yytext;
}
/* ----- handle argument of ingroup command ------- */
......@@ -1523,6 +1539,25 @@ SCOPENAME "$"?(({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
BEGIN(Comment);
}
/* ----- handle language specific sections ------- */
<SkipLang>[\\@]"~"[a-zA-Z]* { /* language switch */
QCString langId = &yytext[2];
if (langId.isEmpty() ||
stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
{ // enable language specific section
BEGIN(Comment);
}
}
<SkipLang>[^*@\\\n]* { /* any character not a *, @, backslash or new line */
}
<SkipLang>{DOCNL} { /* new line in verbatim block */
if (*yytext=='\n') yyLineNr++;
}
<SkipLang>. { /* any other character */
}
%%
//----------------------------------------------------------------------------
......
This diff is collapsed.
......@@ -125,7 +125,8 @@ static const char *defaultStyleSheet =
"A:hover { text-decoration: none; background-color: #f2f2ff }\n"
"DL.el { margin-left: -1cm }\n"
".fragment {\n"
" font-family: monospace\n"
" font-family: Fixed, monospace;\n"
" font-size: 90%;\n"
"}\n"
"PRE.fragment {\n"
" border: 1px solid #CCCCCC;\n"
......@@ -843,8 +844,10 @@ void HtmlGenerator::codify(const char *str)
t << spaces.left(spacesToNextTabStop);
col+=spacesToNextTabStop;
break;
case '\n': t << '\n'; col=0;
case '\n': t << "\n"; col=0;
break;
//case '\n': t << "<br>"; col=0;
// break;
case '\r': break;
case '<': t << "&lt;"; col++;
break;
......@@ -852,6 +855,8 @@ void HtmlGenerator::codify(const char *str)
break;
case '&': t << "&amp;"; col++;
break;
//case ' ': t << "&nbsp;"; col++;
// break;
case '\\':
if (*p=='<')
{ t << "&lt;"; p++; }
......
......@@ -1707,34 +1707,24 @@ static void writeMemberIndexFiltered(OutputList &ol, ClassMemberHighlight hl)
numPages=127;
}
struct
struct CmhlInfo
{
CmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname;
QCString title;
} cmhlInfo[] =
{
{ "functions", 0 },
{ "functions_func",0 },
{ "functions_vars",0 },
{ "functions_type",0 },
{ "functions_enum",0 },
{ "functions_eval",0 },
{ "functions_rela",0 },
{ "functions_prop",0 },
{ "functions_evnt",0 },
{ "functions_rela",0 },
CmhlInfo("functions", theTranslator->trAll()),
CmhlInfo("functions_func",theTranslator->trFunctions()),
CmhlInfo("functions_vars",theTranslator->trVariables()),
CmhlInfo("functions_type",theTranslator->trTypedefs()),
CmhlInfo("functions_enum",theTranslator->trEnumerations()),
CmhlInfo("functions_eval",theTranslator->trEnumerationValues()),
CmhlInfo("functions_prop",theTranslator->trProperties()),
CmhlInfo("functions_evnt",theTranslator->trEvents()),
CmhlInfo("functions_rela",theTranslator->trRelatedFunctions())
};
cmhlInfo[0].title=theTranslator->trAll();
cmhlInfo[1].title=theTranslator->trFunctions();
cmhlInfo[2].title=theTranslator->trVariables();
cmhlInfo[3].title=theTranslator->trTypedefs();
cmhlInfo[4].title=theTranslator->trEnumerations();
cmhlInfo[5].title=theTranslator->trEnumerationValues();
cmhlInfo[6].title=theTranslator->trProperties();
cmhlInfo[7].title=theTranslator->trEvents();
cmhlInfo[8].title=theTranslator->trRelatedFunctions();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......@@ -2114,27 +2104,21 @@ static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
numPages=127;
}
struct
struct FmhlInfo
{
FmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname;
QCString title;
} fmhlInfo[] =
{
{ "globals", 0 },
{ "globals_func",0 },
{ "globals_vars",0 },
{ "globals_type",0 },
{ "globals_enum",0 },
{ "globals_eval",0 },
{ "globals_defs",0 }
FmhlInfo("globals", theTranslator->trAll()),
FmhlInfo("globals_func",theTranslator->trFunctions()),
FmhlInfo("globals_vars",theTranslator->trVariables()),
FmhlInfo("globals_type",theTranslator->trTypedefs()),
FmhlInfo("globals_enum",theTranslator->trEnumerations()),
FmhlInfo("globals_eval",theTranslator->trEnumerationValues()),
FmhlInfo("globals_defs",theTranslator->trDefines())
};
fmhlInfo[0].title=theTranslator->trAll();
fmhlInfo[1].title=theTranslator->trFunctions();
fmhlInfo[2].title=theTranslator->trVariables();
fmhlInfo[3].title=theTranslator->trTypedefs();
fmhlInfo[4].title=theTranslator->trEnumerations();
fmhlInfo[5].title=theTranslator->trEnumerationValues();
fmhlInfo[6].title=theTranslator->trDefines();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......@@ -2241,25 +2225,20 @@ static void writeNamespaceMemberIndexFiltered(OutputList &ol,
numPages=127;
}
struct
struct NmhlInfo
{
NmhlInfo(const char *fn,const char *t) : fname(fn), title(t) {}
const char *fname;
QCString title;
} nmhlInfo[] =
{
{ "namespacemembers", 0 },
{ "namespacemembers_func",0 },
{ "namespacemembers_vars",0 },
{ "namespacemembers_type",0 },
{ "namespacemembers_enum",0 },
{ "namespacemembers_eval",0 }
NmhlInfo("namespacemembers", theTranslator->trAll()),
NmhlInfo("namespacemembers_func",theTranslator->trFunctions()),
NmhlInfo("namespacemembers_vars",theTranslator->trVariables()),
NmhlInfo("namespacemembers_type",theTranslator->trTypedefs()),
NmhlInfo("namespacemembers_enum",theTranslator->trEnumerations()),
NmhlInfo("namespacemembers_eval",theTranslator->trEnumerationValues())
};
nmhlInfo[0].title=theTranslator->trAll();
nmhlInfo[1].title=theTranslator->trFunctions();
nmhlInfo[2].title=theTranslator->trVariables();
nmhlInfo[3].title=theTranslator->trTypedefs();
nmhlInfo[4].title=theTranslator->trEnumerations();
nmhlInfo[5].title=theTranslator->trEnumerationValues();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......
......@@ -509,7 +509,11 @@ bool MemberDef::hasExamples()
QCString MemberDef::getOutputFileBase() const
{
QCString baseName;
if (m_templateMaster)
if (explicitOutputFileBase)
{
return explicitOutputFileBase;
}
else if (m_templateMaster)
{
return m_templateMaster->getOutputFileBase();
}
......@@ -835,6 +839,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
// hide members whose brief section should not be visible
//if (!isBriefSectionVisible()) return;
Definition *d=0;
ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
// write tag file information of this member
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
......@@ -875,6 +883,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
Doxygen::tagFile << "\">" << endl;
Doxygen::tagFile << " <type>" << convertToXML(typeString()) << "</type>" << endl;
Doxygen::tagFile << " <name>" << convertToXML(name()) << "</name>" << endl;
Doxygen::tagFile << " <anchorfile>" << convertToXML(getOutputFileBase()+Doxygen::htmlFileExtension) << "</anchorfile>" << endl;
Doxygen::tagFile << " <anchor>" << convertToXML(anchor()) << "</anchor>" << endl;
Doxygen::tagFile << " <arglist>" << convertToXML(argsString()) << "</arglist>" << endl;
writeDocAnchorsToTagFile();
......@@ -889,9 +898,6 @@ void MemberDef::writeDeclaration(OutputList &ol,
Doxygen::searchIndex->addWord(qualifiedName(),FALSE);
}
Definition *d=0;
ASSERT (cd!=0 || nd!=0 || fd!=0 || gd!=0); // member should belong to something
if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else d=gd;
QCString cname = d->name();
QCString cfname = getOutputFileBase();
QCString osname = cname;
......@@ -2080,11 +2086,14 @@ void MemberDef::addListReference(Definition *)
}
QCString memName = name();
Definition *pd=getOuterScope();
if ((!Config_getBool("HIDE_SCOPE_NAMES") && // there is a scope
if (!isRelated() &&
(
(!Config_getBool("HIDE_SCOPE_NAMES") && // there is a scope
pd && pd!=Doxygen::globalScope) // and we can show it
||
((pd=getClassDef()) && !isRelated()) // it's a class so we
||
(pd=getClassDef()) // it's a class so we
// show the scope anyway
)
)
{
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
......@@ -2328,3 +2337,13 @@ QCString MemberDef::qualifiedName()
}
}
void MemberDef::setTagInfo(TagInfo *ti)
{
if (ti)
{
setAnchor(ti->anchor);
setReference(ti->tagName);
explicitOutputFileBase = stripExtension(ti->fileName);
}
}
......@@ -182,6 +182,7 @@ class MemberDef : public Definition
void setHasDocumentedParams(bool b) { m_hasDocumentedParams = b; }
void setHasDocumentedReturnType(bool b) { m_hasDocumentedReturnType = b; }
void setInheritsDocsFrom(MemberDef *md) { m_docProvider = md; }
void setTagInfo(TagInfo *i);
// output generation
void writeLink(OutputList &ol,
......@@ -400,6 +401,9 @@ class MemberDef : public Definition
// documentation inheritance
MemberDef *m_docProvider;
// to store the output file base from tag files
QCString explicitOutputFileBase;
};
#endif
......@@ -100,6 +100,7 @@ static bool g_expandOnlyPredef; // from the configuration
static int g_commentCount;
static bool g_insideComment;
static bool g_isImported;
static QCString g_blockName;
static void setFileName(const char *name)
......@@ -1776,13 +1777,17 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputChar('/');outputChar('*');
//g_commentCount++;
}
<SkipCComment>[\\@]"verbatim"{BN}+ {
<SkipCComment>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"){BN}+ {
outputArray(yytext,yyleng);
g_blockName=&yytext[1];
BEGIN(SkipVerbatim);
}
<SkipVerbatim>[\\@]"endverbatim" {
<SkipVerbatim>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"endrtfonly"|"endmanonly"|"enddot"|"endcode") { /* end of verbatim block */
outputArray(yytext,yyleng);
BEGIN(SkipCComment);
if (&yytext[4]==g_blockName)
{
BEGIN(SkipCComment);
}
}
<SkipCComment,SkipVerbatim>[^*\x06\n\/]+ {
outputArray(yytext,yyleng);
......
......@@ -2121,7 +2121,12 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers,FindFields>("//"([!/]?){B}*{CMD}"{")|("/*"([!*]?){B}*{CMD}"{") {
#ifdef COMMENTSCAN
REJECT;
Entry *tmp = current;
current = previous;
handleGroupStartCommand(current->name);
current = tmp;
initEntry();
#else
startGroup();
tmpDocType=-1;
......@@ -2154,7 +2159,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
}
<FindMembers,FindFields,ReadInitializer>"//"([!/]?){B}*{CMD}"}".*|"/*"([!*]?){B}*{CMD}"}".*"*/" {
#ifdef COMMENTSCAN
REJECT;
handleGroupEndCommand();
#else
if (memberGroupId==DOX_NOGROUP && autoGroupStack.isEmpty())
{
......@@ -3266,7 +3271,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FuncQual>[{:;,] {
if ( strcmp(yytext,";")==0 &&
insidePHP &&
current->type.left(8) != "function" )
!containsWord(current->type,"function") )
{
current->reset();
initEntry();
......@@ -3497,26 +3502,24 @@ IDLATTR ("["[^\]]*"]"){BN}*
//printf("Adding entry `%s'\n",current->name.data());
if ( insidePHP)
{
if (current->type.left(6) == "final " )
if (findAndRemoveWord(current->type,"final"))
{
current->type = current->type.mid(6);
current->memSpec |= Entry::Final;
}
if (current->type.left(9) == "abstract " )
if (findAndRemoveWord(current->type,"abstract"))
{
current->type = current->type.mid(9);
current->memSpec |= Entry::Abstract;
}
}
if ( insidePHP && current->type.left(8) != "function" )
if ( insidePHP && !containsWord(current->type,"function"))
{
initEntry();
}
else
{
if ( insidePHP && current->type.left(8) == "function" )
if ( insidePHP)
{
current->type = current->type.mid(8);
findAndRemoveWord(current->type,"function");
}
previous = current;
current_root->addSubEntry(current);
......@@ -4303,7 +4306,7 @@ IDLATTR ("["[^\]]*"]"){BN}*
<FindMembers>"{" {
if (insideCS && !current->name.isEmpty() && !current->type.isEmpty())
{
if (current->type.left(6)=="event " || current->type.find("event")!=-1) // event
if (containsWord(current->type,"event")) // event
{
current->mtype = mtype = Event;
}
......
This diff is collapsed.
......@@ -433,6 +433,12 @@ class Translator
virtual QCString trDirReference(const char *dirName) = 0;
virtual QCString trDir(bool first_capital, bool singular) = 0;
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
virtual QCString trOverloadText() = 0;
};
#endif
......@@ -40,7 +40,17 @@ class TranslatorAdapterBase : public Translator
};
class TranslatorAdapter_1_3_9 : public TranslatorAdapterBase
class TranslatorAdapter_1_4_1 : public TranslatorAdapterBase
{
public:
virtual QCString updateNeededMessage()
{ return createUpdateNeededMessage(idLanguage(),"release 1.4.1"); }
virtual QCString trOverloadText()
{ return english.trOverloadText(); }
};
class TranslatorAdapter_1_3_9 : public TranslatorAdapter_1_4_1
{
public:
virtual QCString updateNeededMessage()
......
......@@ -34,7 +34,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
class TranslatorBrazilian : public Translator
class TranslatorBrazilian : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -24,7 +24,7 @@
*/
#define CN_SPC
class TranslatorChinese : public Translator
class TranslatorChinese : public TranslatorAdapter_1_4_1
{
public:
/*! Used for identification of the language. The identification
......@@ -83,9 +83,6 @@ class TranslatorChinese : public Translator
virtual QCString trMemberEnumerationDocumentation()
{ return "成员枚举类型文档"; }
virtual QCString trEnumerationValueDocumentation()
{ return "成员枚举值文档"; }
/*! header that is put before the list of member function. */
virtual QCString trMemberFunctionDocumentation()
{ return "成员函数文档"; }
......@@ -173,11 +170,6 @@ class TranslatorChinese : public Translator
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()
{
......@@ -286,9 +278,6 @@ class TranslatorChinese : public Translator
return result;
}
virtual QCString trHeaderFilesDescription()
{ return "这里列出组成API的头文件:"; }
virtual QCString trExamplesDescription()
{ return "这里列出所有示例:"; }
......@@ -298,9 +287,6 @@ class TranslatorChinese : public Translator
virtual QCString trModulesDescription()
{ return "这里列出所有模块"; }
virtual QCString trNoDescriptionAvailable()
{ return "无可用文档"; }
virtual QCString trDocumentation()
{ return "文档"; }
......@@ -422,16 +408,9 @@ class TranslatorChinese : public Translator
virtual QCString trForInternalUseOnly()
{ return "仅限内部使用。"; }
virtual QCString trReimplementedForInternalReasons()
{ return "由于内部原因被重载;但不影响API";
}
virtual QCString trWarning()
{ return "警告"; }
virtual QCString trBugsAndLimitations()
{ return "BUG"CN_SPC"与局限"; }
virtual QCString trVersion()
{ return "版本"; }
......@@ -698,12 +677,7 @@ class TranslatorChinese : public Translator
// new since 0.49-991106
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "源代码";
}
virtual QCString trDefinedAtLineInSourceFile()
virtual QCString trDefinedAtLineInSourceFile()
{
return "在文件"CN_SPC"@1"CN_SPC"第"CN_SPC"@0"CN_SPC"行定义。";
}
......@@ -1025,12 +999,6 @@ class TranslatorChinese : public Translator
// 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()
{
......@@ -1068,12 +1036,6 @@ class TranslatorChinese : public Translator
return "包";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "包的文档";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -1228,20 +1190,6 @@ class TranslatorChinese : public Translator
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 trField(bool /*first_capital*/, bool /*singular*/)
{
/*
QCString result((first_capital ? "Field" : "field"));
if (!singular) result+="s";
return result;
*/
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.
......@@ -1492,7 +1440,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirIndex()
/* { return "Directory Hierarchy"; } */
{
return "$(BL\\录结$(DC((B";
return "目录结构";
}
/*! This is used as the name of the chapter containing the documentation
......@@ -1501,7 +1449,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirDocumentation()
/* { return "Directory Documentation"; } */
{
return "$(BL\\录J8[c(B";
return "目录文档";
}
/*! This is used as the title of the directory index and also in the
......@@ -1510,7 +1458,7 @@ class TranslatorChinese : public Translator
virtual QCString trDirectories()
/* { return "Directories"; } */
{
return "$(BL\\录(B";
return "目录";
}
/*! This returns a sentences that introduces the directory hierarchy.
......@@ -1521,7 +1469,7 @@ class TranslatorChinese : public Translator
/* "but not completely, alphabetically:"; */
/* } */
{
return "$(BL\\录结$(DC(仅经过$(BBgCWE*GSNs!$VuL$40A40D;zJl顺=x(B";
return "目录结构仅经过粗略的排序";
}
/*! This returns the title of a directory page. The name of the
......@@ -1531,7 +1479,7 @@ class TranslatorChinese : public Translator
/* { QCString result=dirName; result+=" Directory Reference"; return result; } */
{
QCString result=dirName;
result+=CN_SPC"$(BL\\录;29M(B";
result+=CN_SPC"目录参考";
return result;
}
......@@ -1543,9 +1491,10 @@ class TranslatorChinese : public Translator
/* QCString result((first_capital ? "Director" : "director")); */
/* if (singular) result+="y"; else result+="ies"; */
/* return result; */
return "$(BL\\录(B";
return "目录";
}
};
#endif
......@@ -151,7 +151,7 @@
// Windows version. The version which does not call the function is
// probably slightly faster.
class TranslatorCzech : public Translator
class TranslatorCzech : public TranslatorAdapter_1_4_1
{
private:
/*! The decode() inline assumes the source written in the
......
......@@ -102,7 +102,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
class TranslatorGerman : public Translator
class TranslatorGerman : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -1602,6 +1602,19 @@ class TranslatorEnglish : public Translator
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 "This is an overloaded member function, "
"provided for convenience. It differs from the above "
"function only in what argument(s) it accepts.";
}
};
#endif
......@@ -85,7 +85,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
class TranslatorFrench : public Translator
class TranslatorFrench : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -58,11 +58,15 @@
//
// 2004/09/15
// - Added strings for 1.3.9
//
// 2005/02/28
// - Removed obsolete (unused) methods
//
#ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H
class TranslatorCroatian : public Translator
class TranslatorCroatian : public TranslatorAdapter_1_4_1
{
private:
/*! to avoid macro redefinition from translator_cz.h */
......@@ -104,10 +108,8 @@ class TranslatorCroatian : public Translator
{ return decode("Dokumentacija typedef lanova"); }
QCString trMemberEnumerationDocumentation()
{ return decode("Dokumentacija enumeracijskih lanova"); }
QCString trEnumerationValueDocumentation()
{ return "Dokumentacija enumeracijskih vrijednosti"; }
QCString trMemberFunctionDocumentation()
{ return "Dokumentacija funkcija"; }
{ return "Dokumentacija funkcija"; }
QCString trMemberDataDocumentation()
{ return "Documentacija varijabli"; }
QCString trMore()
......@@ -149,8 +151,6 @@ class TranslatorCroatian : public Translator
}
QCString trFileList()
{ return "Popis datoteka"; }
QCString trHeaderFiles()
{ return "Header datoteke"; }
QCString trCompoundMembers()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
......@@ -217,16 +217,12 @@ class TranslatorCroatian : public Translator
result+="datoteke u kojima se nalaze:";
return decode(result);
}
QCString trHeaderFilesDescription()
{ return decode("Popis header datoteka koje ine API :"); }
QCString trExamplesDescription()
{ return "Popis primjera :"; }
QCString trRelatedPagesDescription()
{ return "Popis povezanih stranica:"; }
QCString trModulesDescription()
{ return "Popis svih modula:"; }
QCString trNoDescriptionAvailable()
{ return "Opis nije dostupan"; }
QCString trDocumentation()
{ return "Dokumentacija"; }
......@@ -314,14 +310,8 @@ class TranslatorCroatian : public Translator
}
QCString trForInternalUseOnly()
{ return decode("Iskljuivo za internu uporabu."); }
QCString trReimplementedForInternalReasons()
{ return decode("Reimplementirano zbog internih razloga; "
"Nema utjecaja na API.");
}
QCString trWarning()
{ return "Upozorenje"; }
QCString trBugsAndLimitations()
{ return decode("Greke i ogranienja"); }
QCString trVersion()
{ return "Verzija"; }
QCString trDate()
......@@ -563,10 +553,6 @@ class TranslatorCroatian : public Translator
// new since 0.49-991106
//////////////////////////////////////////////////////////////////////////
QCString trSources()
{
return "Izvorne datoteke";
}
QCString trDefinedAtLineInSourceFile()
{
return "Definirano u liniji @0 datoteke @1.";
......@@ -852,11 +838,6 @@ class TranslatorCroatian : public Translator
// new since 1.2.4
//////////////////////////////////////////////////////////////////////////
/*! Used for Java interfaces in the summary section of Java packages */
virtual QCString trInterfaces()
{
return decode("Suelja (interfaces)");
}
/*! Used for Java classes in the summary section of Java packages */
virtual QCString trClasses()
{
......@@ -882,11 +863,6 @@ class TranslatorCroatian : public Translator
{
return "Paketi";
}
/*! Used as a chapter title for Latex & RTF output */
virtual QCString trPackageDocumentation()
{
return "Dokumentacija paketa";
}
/*! Text shown before a multi-line define */
virtual QCString trDefineValue()
{
......@@ -996,17 +972,6 @@ class TranslatorCroatian : public Translator
return decode(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 ? "Polj" : "polj"));
result+= (singular ? "e" : "a");
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.
......
......@@ -29,7 +29,7 @@
#ifndef TRANSLATOR_HU_H
#define TRANSLATOR_HU_H
class TranslatorHungarian : public Translator
class TranslatorHungarian : public TranslatorAdapter_1_4_1
{
private:
const char * zed(char c)
......
......@@ -72,7 +72,7 @@
#ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H
class TranslatorItalian : public Translator
class TranslatorItalian : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -1200,6 +1200,19 @@ class TranslatorDutch : public Translator
return result;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.4.1
//////////////////////////////////////////////////////////////////////////
/*! This text is added to the documentation when the \\overload command
* is used for a function.
*/
virtual QCString trOverloadText()
{
return "Deze functie is overloaded en is beschikbaar gemaakt om het "
"gebruik te vergemakkelijken. Ze verschilt alleen van de "
"bovenstaande functie wat betreft de parameterlijst.";
}
};
......
......@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H
class TranslatorPolish : public Translator
class TranslatorPolish : public TranslatorAdapter_1_4_1
{
private:
/*! to avoid macro redefinition from translator_pl.h */
......
This diff is collapsed.
......@@ -49,7 +49,7 @@
#ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H
class TranslatorRussian : public Translator
class TranslatorRussian : public TranslatorAdapter_1_4_1
{
private:
/*! The Decode() inline assumes the source written in the
......
......@@ -69,7 +69,7 @@ Problem!
#ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H
class TranslatorSwedish : public Translator
class TranslatorSwedish : public TranslatorAdapter_1_4_1
{
public:
......
......@@ -21,7 +21,7 @@
// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>;<office@ddmrm.com>
// // 10x 2 Ivana Miletic for gramatical consutation.
class TranslatorSerbian : public Translator
class TranslatorSerbian : public TranslatorAdapter_1_4_1
{
private:
QCString decode(const QCString& sInput)
......
......@@ -20,7 +20,7 @@
#ifndef TRANSLATOR_UA_H
#define TRANSLATOR_UA_H
class TranslatorUkrainian : public Translator
class TranslatorUkrainian : public TranslatorAdapter_1_4_1
{
private:
/*! The Decode() inline assumes the source written in the
......
This diff is collapsed.
......@@ -228,6 +228,8 @@ QCString relativePathToRoot(const char *name);
#define REL_PATH_TO_ROOT "../../"
void createSubDirs(QDir &d);
QCString stripPath(const char *s);
bool containsWord(const QCString &s,const QCString &word);
bool findAndRemoveWord(QCString &s,const QCString &word);
#endif
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