Commit 76e39987 authored by dimitri's avatar dimitri

Release-1.4.2-20050410

parent c8be4837
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.
......
This diff is collapsed.
......@@ -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
This diff is collapsed.
......@@ -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. */
......
This diff is collapsed.
......@@ -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";
}
//////////////////////////////////////////////////////////////////////////
......
This diff is collapsed.
This diff is collapsed.
......@@ -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