diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2011-08-21 08:11:15 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2011-08-21 08:11:15 (GMT) |
commit | 5c424c553763d3f56f56e3fa3336b0f1f4a3c44a (patch) | |
tree | 26df576f6822a144ec9e57d58a5e9cca717ebd7b /src | |
parent | 9be758009e1a4c616377dc33ccf1e55dd8b04d9b (diff) | |
download | Doxygen-5c424c553763d3f56f56e3fa3336b0f1f4a3c44a.zip Doxygen-5c424c553763d3f56f56e3fa3336b0f1f4a3c44a.tar.gz Doxygen-5c424c553763d3f56f56e3fa3336b0f1f4a3c44a.tar.bz2 |
Release-1.7.5.1
Diffstat (limited to 'src')
-rw-r--r-- | src/cite.cpp | 18 | ||||
-rw-r--r-- | src/code.l | 9 | ||||
-rw-r--r-- | src/definition.cpp | 58 | ||||
-rw-r--r-- | src/definition.h | 4 | ||||
-rw-r--r-- | src/doxygen.cpp | 60 | ||||
-rw-r--r-- | src/entry.cpp | 1 | ||||
-rw-r--r-- | src/filestorage.h | 135 | ||||
-rw-r--r-- | src/gifenc.cpp | 287 | ||||
-rw-r--r-- | src/gifenc.h | 90 | ||||
-rw-r--r-- | src/htmlgen.cpp | 24 | ||||
-rw-r--r-- | src/latexgen.cpp | 10 | ||||
-rw-r--r-- | src/layout.cpp | 12 | ||||
-rw-r--r-- | src/layout.h | 3 | ||||
-rw-r--r-- | src/marshal.cpp | 4 | ||||
-rw-r--r-- | src/marshal.h | 67 | ||||
-rw-r--r-- | src/memberdef.cpp | 186 | ||||
-rw-r--r-- | src/memberlist.cpp | 14 | ||||
-rw-r--r-- | src/store.cpp | 31 | ||||
-rw-r--r-- | src/store.h | 4 | ||||
-rw-r--r-- | src/tclscanner.h | 4 | ||||
-rw-r--r-- | src/translator_fa.h | 6 | ||||
-rw-r--r-- | src/translator_fr.h | 413 | ||||
-rw-r--r-- | src/translator_it.h | 2 | ||||
-rw-r--r-- | src/util.cpp | 9 | ||||
-rw-r--r-- | src/util.h | 3 |
25 files changed, 612 insertions, 842 deletions
diff --git a/src/cite.cpp b/src/cite.cpp index 9d67afa..018d9cf 100644 --- a/src/cite.cpp +++ b/src/cite.cpp @@ -72,14 +72,18 @@ bool CiteDict::writeAux() if (!bibFile.isEmpty() && bibFile.right(4)!=".bib") bibFile+=".bib"; if (!bibFile.isEmpty()) { - QFileInfo fi(bibFile); + QFileInfo fi(bibFile); // open file (with .bib extension) if (fi.exists()) { if (!copyFile(bibFile,m_baseFileName+"_"+bibFile)) { return FALSE; } - t << m_baseFileName+"_"+bibFile; + if (bibFile.right(4)==".bib") + { + bibFile = bibFile.left(bibFile.length()-4); + } + t << m_baseFileName+"_"+bibFile; // write name (without bib extension) bibdata = citeDataList.next(); if (bibdata) { @@ -128,6 +132,10 @@ void CiteDict::writeLatexBibliography(FTextStream &t) while (bibdata) { QCString bibFile = bibdata; + if (bibFile.right(4)==".bib") + { + bibFile = bibFile.left(bibFile.length()-4); + } if (!bibFile.isEmpty()) { t << bibFile; @@ -268,11 +276,7 @@ void CiteDict::resolve() QStrList &citeBibFiles = Config_getList("CITE_BIB_FILES"); if (citeBibFiles.count()==0 || m_entries.count()==0) return; // nothing to cite - QCString &outputDirectory = Config_getString("OUTPUT_DIRECTORY"); - if (outputDirectory.isEmpty()) - { - outputDirectory=QDir::currentDirPath(); - } + QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY"); QDir d(outputDirectory); d.mkdir("bib"); @@ -1716,12 +1716,11 @@ static int yyread(char *buf,int max_size) B [ \t] BN [ \t\n\r] ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]* -SCOPESEP ("::"|"\\"){BN}* -SCOPEPRE ({SCOPESEP}{ID}{BN}*)*{SCOPESEP} -SCOPENAME {SCOPEPRE}?(("~"{BN}*)?{ID}) +SEP ("::"|"\\") +SCOPENAME ({SEP}{BN}*)?({ID}{BN}*{SEP}{BN}*)*("~"{BN}*)?{ID} TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">" -SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?("::"|"\\"){BN}*)*)((~{BN}*)?{ID}) -SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*("::"|"\\"){BN}*)+ +SCOPETNAME (((({ID}{TEMPLIST}?){BN}*)?{SEP}{BN}*)*)((~{BN}*)?{ID}) +SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*{SEP}{BN}*)+ KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol"|"@optional"|"@required"|"@throw"|"@synthesize"|"@property") KEYWORD ("asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"function"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|{KEYWORD_OBJC}) FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while"|"@try"|"@catch"|"@finally") diff --git a/src/definition.cpp b/src/definition.cpp index a8a7300..2abd726 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -48,8 +48,7 @@ class DefinitionImpl public: DefinitionImpl(); ~DefinitionImpl(); - void init(const char *df,int dl, - const char *n); + void init(const char *df, const char *n); SectionDict *sectionDict; // dictionary of all sections, not accessible @@ -76,7 +75,6 @@ class DefinitionImpl // where the item was found QCString defFileName; - int defLine; QCString defFileExt; SrcLangExt lang; @@ -103,8 +101,7 @@ DefinitionImpl::~DefinitionImpl() delete inbodyDocs; } -void DefinitionImpl::init(const char *df,int dl, - const char *n) +void DefinitionImpl::init(const char *df, const char *n) { defFileName = df; int lastDot = defFileName.findRev('.'); @@ -112,7 +109,6 @@ void DefinitionImpl::init(const char *df,int dl, { defFileExt = defFileName.mid(lastDot); } - defLine = dl; QCString name = n; if (name!="<globalScope>") { @@ -280,8 +276,9 @@ Definition::Definition(const char *df,int dl, const char *d,bool isSymbol) { m_name = name; + m_defLine = dl; m_impl = new DefinitionImpl; - m_impl->init(df,dl,name); + m_impl->init(df,name); m_isSymbol = isSymbol; if (isSymbol) addToMap(name,this); _setBriefDescription(b,df,dl); @@ -892,12 +889,17 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) void Definition::_writeSourceRefList(OutputList &ol,const char *scopeName, const QCString &text,MemberSDict *members,bool /*funcOnly*/) { + LockingPtr<Definition> lock(this,this); // since this can be a memberDef + // accessing other memberDefs prevent + // it from being flushed to disk static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static bool refLinkSource = Config_getBool("REFERENCES_LINK_SOURCE"); ol.pushGeneratorState(); if (members) { + members->sort(); + ol.startParagraph(); ol.parseText(text); ol.docify(" "); @@ -1118,19 +1120,6 @@ QCString Definition::qualifiedName() const count--; return m_impl->qualifiedName; } -#if 0 - if (count>20) - { - printf("Definition::qualifiedName() Infinite recursion detected! Type=%d\n",definitionType()); - printf("Trace:\n"); - Definition *d = (Definition *)this; - for (int i=0;d && i<20;i++) - { - printf(" %s\n",d->name().data()); - d = d->getOuterScope(); - } - } -#endif //printf("start %s::qualifiedName() localName=%s\n",name().data(),m_impl->localName.data()); if (m_impl->outerScope==0) @@ -1400,6 +1389,9 @@ QCString Definition::briefDescription() const QCString Definition::briefDescriptionAsTooltip() const { makeResident(); + LockingPtr<Definition> lock(this,this); // since this can be a memberDef + // accessing other memberDefs prevent + // it from being flushed to disk if (m_impl->brief) { if (m_impl->brief->tooltip.isEmpty() && !m_impl->brief->doc.isEmpty()) @@ -1470,12 +1462,6 @@ QCString Definition::getDefFileExtension() const return m_impl->defFileExt; } -int Definition::getDefLine() const -{ - makeResident(); - return m_impl->defLine; -} - bool Definition::isHidden() const { makeResident(); @@ -1559,14 +1545,10 @@ void Definition::setReference(const char *r) SrcLangExt Definition::getLanguage() const { + makeResident(); return m_impl->lang; } -void Definition::_setSymbolName(const QCString &name) -{ - m_symbolName=name; -} - void Definition::setHidden(bool b) { makeResident(); @@ -1585,13 +1567,21 @@ void Definition::setLocalName(const QCString name) m_impl->localName=name; } +void Definition::setLanguage(SrcLangExt lang) +{ + makeResident(); + m_impl->lang=lang; +} + void Definition::makeResident() const { } -void Definition::setLanguage(SrcLangExt lang) +//--------------- + +void Definition::_setSymbolName(const QCString &name) { - m_impl->lang=lang; + m_symbolName=name; } void Definition::flushToDisk() const @@ -1617,7 +1607,6 @@ void Definition::flushToDisk() const marshalBool (Doxygen::symbolStorage,m_impl->isArtificial); marshalObjPointer (Doxygen::symbolStorage,m_impl->outerScope); marshalQCString (Doxygen::symbolStorage,m_impl->defFileName); - marshalInt (Doxygen::symbolStorage,m_impl->defLine); marshalQCString (Doxygen::symbolStorage,m_impl->defFileExt); marshalInt (Doxygen::symbolStorage,(int)m_impl->lang); marshalUInt(Doxygen::symbolStorage,END_MARKER); @@ -1650,7 +1639,6 @@ void Definition::loadFromDisk() const m_impl->isArtificial = unmarshalBool (Doxygen::symbolStorage); m_impl->outerScope = (Definition *)unmarshalObjPointer (Doxygen::symbolStorage); m_impl->defFileName = unmarshalQCString (Doxygen::symbolStorage); - m_impl->defLine = unmarshalInt (Doxygen::symbolStorage); m_impl->defFileExt = unmarshalQCString (Doxygen::symbolStorage); m_impl->lang = (SrcLangExt)unmarshalInt(Doxygen::symbolStorage); marker = unmarshalUInt(Doxygen::symbolStorage); diff --git a/src/definition.h b/src/definition.h index 38a11b2..bf7f38c 100644 --- a/src/definition.h +++ b/src/definition.h @@ -179,7 +179,7 @@ class Definition : public DefinitionIntf, public LockableObj QCString getDefFileExtension() const; /*! returns the line number at which the definition was found */ - int getDefLine() const; + int getDefLine() const { return m_defLine; } /*! Returns TRUE iff the definition is documented * (which could be generated documentation) @@ -348,7 +348,7 @@ class Definition : public DefinitionIntf, public LockableObj QCString m_name; bool m_isSymbol; QCString m_symbolName; - + int m_defLine; }; class DefinitionList : public QList<Definition>, public DefinitionIntf diff --git a/src/doxygen.cpp b/src/doxygen.cpp index f9918ff..240db24 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -81,6 +81,7 @@ #include "vhdldocgen.h" #include "eclipsehelp.h" #include "cite.h" +#include "filestorage.h" #include "layout.h" @@ -1175,6 +1176,29 @@ static void addClassToContext(EntryNav *rootNav) fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1); cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); + cd->setLanguage(root->lang); + cd->setHidden(root->hidden); + cd->setArtificial(root->artificial); + cd->setTypeConstraints(root->typeConstr); + //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data()); + + ArgumentList *tArgList = + getTemplateArgumentsFromName(fullName,root->tArgLists); + //printf("class %s template args=%s\n",fullName.data(), + // tArgList ? tempArgListToString(tArgList).data() : "<none>"); + cd->setTemplateArguments(tArgList); + cd->setProtection(root->protection); + cd->setIsStatic(root->stat); + + // file definition containing the class cd + cd->setBodySegment(root->bodyLine,root->endBodyLine); + cd->setBodyDef(fd); + + // see if the class is found inside a namespace + //bool found=addNamespace(root,cd); + + // the empty string test is needed for extract all case + cd->setBriefDescription(root->brief,root->briefFile,root->briefLine); cd->insertUsedFile(root->fileName); // add class to the list @@ -1415,7 +1439,7 @@ static void processTagLessClasses(ClassDef *rootCd, ClassDef *tagParentCd, const QCString &prefix,int count) { - printf("%d: processTagLessClasses %s\n",count,cd->name().data()); + //printf("%d: processTagLessClasses %s\n",count,cd->name().data()); //printf("checking members for %s\n",cd->name().data()); if (cd->getInnerClasses()) { @@ -1433,7 +1457,7 @@ static void processTagLessClasses(ClassDef *rootCd, ClassDef *icd; for (it.toFirst();(icd=it.current());++it) { - printf(" member %s: type='%s'\n",md->name().data(),type.data()); + //printf(" member %s: type='%s'\n",md->name().data(),type.data()); //printf(" comparing '%s'<->'%s'\n",type.data(),icd->name().data()); if (type.find(icd->name())!=-1) // matching tag less struct/union { @@ -8900,6 +8924,7 @@ static void parseFiles(Entry *root,EntryNav *rootNav) bool ambig; FileDef *fd=findFileDef(Doxygen::inputNameDict,fileName,ambig); ASSERT(fd!=0); + //printf("root->createNavigationIndex for %s\n",fd->name().data()); root->createNavigationIndex(rootNav,g_storage,fd); s=g_inputFiles.next(); @@ -10168,7 +10193,8 @@ void parseInput() if (cacheSize<0) cacheSize=0; if (cacheSize>9) cacheSize=9; Doxygen::symbolCache = new ObjCache(16+cacheSize); // 16 -> room for 65536 elements, - // ~2.0 MByte "overhead" + // ~2.0 MByte "overhead" + //Doxygen::symbolCache = new ObjCache(1); // only to stress test cache behaviour Doxygen::symbolStorage = new Store; #ifdef HAS_SIGNALS @@ -10331,15 +10357,6 @@ void parseInput() * Parse source files * **************************************************************************/ - parseFiles(root,rootNav); - g_storage->close(); - if (!g_storage->open(IO_ReadOnly)) - { - err("Failed to open temporary storage file %s for reading", - Doxygen::entryDBFileName.data()); - exit(1); - } - //printNavTree(rootNav,0); // we are done with input scanning now, so free up the buffers used by flex @@ -10352,6 +10369,20 @@ void parseInput() //g_storage.close(); //exit(1); + if (Config_getBool("BUILTIN_STL_SUPPORT")) + { + addSTLClasses(rootNav); + } + + parseFiles(root,rootNav); + g_storage->close(); + if (!g_storage->open(IO_ReadOnly)) + { + err("Failed to open temporary storage file %s for reading", + Doxygen::entryDBFileName.data()); + exit(1); + } + /************************************************************************** * Gather information * **************************************************************************/ @@ -10364,11 +10395,6 @@ void parseInput() buildDirectories(); findDirDocumentation(rootNav); - if (Config_getBool("BUILTIN_STL_SUPPORT")) - { - addSTLClasses(rootNav); - } - msg("Building namespace list...\n"); buildNamespaceList(rootNav); findUsingDirectives(rootNav); diff --git a/src/entry.cpp b/src/entry.cpp index be5f9e4..8741ec2 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -22,6 +22,7 @@ #include "util.h" #include "section.h" #include "doxygen.h" +#include "filestorage.h" //------------------------------------------------------------------ diff --git a/src/filestorage.h b/src/filestorage.h new file mode 100644 index 0000000..17d4498 --- /dev/null +++ b/src/filestorage.h @@ -0,0 +1,135 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2011 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#include <qfile.h> +#include <assert.h> +#include "store.h" + + +#ifndef FILESTORAGE_H +#define FILESTORAGE_H + +/** @brief Store implementation based on a file. + Writing is linear, after that the file is re-opened for reading. + Reading is random (seek+read). + */ +class FileStorage : public StorageIntf +{ + public: + FileStorage() : m_readOnly(FALSE) {} + FileStorage( const QString &name) : + m_readOnly(FALSE) { m_file.setName(name); } + int read(char *buf,uint size) { return m_file.readBlock(buf,size); } + int write(const char *buf,uint size) { assert(m_readOnly==FALSE); return m_file.writeBlock(buf,size); } + bool open( int m ) { m_readOnly = m==IO_ReadOnly; return m_file.open(m); } + bool seek(int64 pos) { return m_file.seek(pos); } + int64 pos() const { return m_file.pos(); } + void close() { m_file.close(); } + void setName( const char *name ) { m_file.setName(name); } + private: + bool m_readOnly; + QFile m_file; +}; + +#if 0 // experimental version using mmap after opening the file as read only. +#include <sys/mman.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <string.h> +#include <unistd.h> +#include <stdio.h> + +class FileStorage : public StorageIntf +{ + public: + FileStorage() : m_readOnly(FALSE), m_map(0), m_off(0), m_size(0) {} + FileStorage( const QString &name) : + m_readOnly(FALSE) { m_file.setName(name); } + void setName( const char *name ) { m_file.setName(name); } + bool open( int m ) + { + if (m==IO_ReadOnly) + { + m_readOnly=TRUE; + QString name = m_file.name(); + m_file.close(); + m_fd = ::open(name.data(),O_RDONLY); + struct stat stat; + fstat(m_fd,&stat); + m_size = stat.st_size; + m_map = mmap(NULL,m_size,PROT_READ,MAP_SHARED,m_fd,0); + if (m_map==MAP_FAILED) perror("mmap failed"); + assert(m_map!=MAP_FAILED); + m_off = 0; + return TRUE; + } + else + { + m_readOnly = FALSE; + return m_file.open(m); + } + } + int write(const char *buf,uint size) + { + assert(m_map==0); + return m_file.writeBlock(buf,size); + } + int read(char *buf,uint size) + { + assert(m_map!=0); + memcpy(buf,((char *)m_map)+m_off,size); + m_off+=size; + return size; + } + bool seek(int64 pos) + { + m_off=pos; + return TRUE; + } + int64 pos() const + { + if (m_readOnly) + { + return m_off; + } + else + { + return m_file.pos(); + } + } + void close() + { + if (m_readOnly) + { + munmap(m_map,m_size); + ::close(m_fd); + exit(1); + } + else + { + m_file.close(); + } + } + private: + bool m_readOnly; + QFile m_file; + int m_fd; + void *m_map; + off_t m_off; + off_t m_size; +}; +#endif + +#endif diff --git a/src/gifenc.cpp b/src/gifenc.cpp deleted file mode 100644 index 501e433..0000000 --- a/src/gifenc.cpp +++ /dev/null @@ -1,287 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * - * Copyright (C) 1997-2009 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. - * - * All output generated with Doxygen is not covered by this license. - * - * The GIF compression code below is based on the file ppmtogif.c of the - * netpbm package. The original copyright message follows: - * - * --------------------------------------------------------------------------- - * - * Copyright (C) 1989 by Jef Poskanzer. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. This software is provided "as is" without express or - * implied warranty. - * - * --------------------------------------------------------------------------- - * - * The Graphics Interchange Format(c) is the Copyright property of - * CompuServe Incorporated. GIF(sm) is a Service Mark property of - * CompuServe Incorporated. - */ - -#include "gifenc.h" - -static const unsigned int masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, - 0x001F, 0x003F, 0x007F, 0x00FF, - 0x01FF, 0x03FF, 0x07FF, 0x0FFF, - 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; - -GifEncoder::GifEncoder(Byte *rawBytes,Color *p,int w,int h, Byte d, - int t) - : colorResolution(8),globalPaletteFlag(0x80),bits(12), - maxMaxCode(1<<bits) -{ - width = w; - height = h; - depth = d; - transIndex = t; - palette = p; - data = rawBytes; - dataPtr = data; -} - -GifEncoder::~GifEncoder() -{ -} - -void GifEncoder::writeGIF(QFile &fp) -{ - // Write the Magic header - fp.writeBlock( transIndex < 0 ? "GIF87a" : "GIF89a", 6 ); - - // Write the logical screen descriptor - putWord( width, fp ); - putWord( height, fp ); - Byte pack = globalPaletteFlag | ((colorResolution-1)<<4) | (depth-1); - putByte( pack, fp ); - putByte( 0, fp ); // the background color - putByte( 0, fp ); // no aspect ration defined - - // Write global color table - int i; for ( i=0 ; i< (1<<depth) ; i++) - { - putByte(palette[i].red, fp); - putByte(palette[i].green,fp); - putByte(palette[i].blue, fp); - } - - if ( transIndex >= 0) - { - // Write graphic control extension (needed for GIF transparancy) - putByte( 0x21, fp); // extension introducer - putByte( 0xf9, fp); // graphic control label - putByte( 4, fp); // block size - putByte( 1, fp); // announce transparacy value - putWord( 0, fp); // zero delay time - putByte( transIndex, fp); // write transparant index - putByte( 0, fp); // end block - } - - // Write the image descriptor - putByte( 0x2c, fp); // image separator - putWord( 0, fp); // image left position - putWord( 0, fp); // image top position - putWord( width, fp); // image width - putWord( height, fp); // image height - putByte( 0, fp); // no local color table, no interlacing - - // Write table based image data - Byte initCodeSize = depth<=1 ? 2 : depth; - putByte( initCodeSize, fp); // LZW Minimum Code Size - compress( initCodeSize+1, fp); - putByte( 0, fp); // end of blocks - - // Write GIF Trailer - putByte( 0x3b, fp); -} - -void GifEncoder::compress( int ibits, QFile &outfile ) -{ - int i; - int entry; - - initBits = ibits; - numPixels = width*height; - dataPtr = data; - clearFlag = FALSE; - nBits = initBits; - maxCode = (1<<nBits) -1; - ClearCode = (1 << (initBits - 1)); - EOFCode = ClearCode + 1; - freeEntry = ClearCode + 2; - aCount = 0; - curAccum = 0; - curBits = 0; - - entry = nextPixel(); - - int hshift = 0; - int fcode; - for ( fcode = hashTableSize; fcode < 65536L; fcode *= 2L ) ++hshift; - hshift = 8 - hshift; /* set hash code range bound */ - - clearHashTable(); /* clear hash table */ - - writeCode( ClearCode,outfile ); - - int c; - while ( (c = nextPixel()) != EOF ) - { - fcode = (c << bits) + entry; - i = (c << hshift) ^ entry; /* xor hashing */ - - bool found=FALSE; - if (htab[i]==fcode) - { - entry = codetab[i]; - found=TRUE; - } - else if (htab[i]>=0) - { - int disp = hashTableSize - i; - if (i==0) disp=1; - do - { - if ((i-=disp)<0) i+=hashTableSize; - if (htab[i]==fcode) - { - entry=codetab[i]; - found=TRUE; - } - } while (htab[i]>0 && !found); - } - if (!found) - { - writeCode( entry, outfile ); - entry = c; - if ( freeEntry < maxMaxCode ) - { - codetab[i] = freeEntry++; /* code -> hashtable */ - htab[i] = fcode; - } - else - { - clearHashTable(); - freeEntry = ClearCode + 2; - clearFlag = TRUE; - writeCode( ClearCode, outfile ); - } - } - } - writeCode( entry, outfile ); - writeCode( EOFCode, outfile ); -} - -void GifEncoder::putWord( Word w, QFile &fp ) -{ - fp.putch( w & 0xff ); - fp.putch( (w>>8) & 0xff ); -} - -void GifEncoder::putByte( Byte b, QFile &fp ) -{ - fp.putch( b ); -} - -void GifEncoder::writeCode( int code, QFile &outfile ) -{ - curAccum &= masks[ curBits ]; - - if ( curBits > 0 ) - { - curAccum |= (code << curBits); - } - else - { - curAccum = code; - } - - curBits += nBits; - - while( curBits >= 8 ) - { - writeChar( (Byte)(curAccum & 0xff),outfile ); - curAccum >>= 8; - curBits -= 8; - } - - /* - * If the next entry is going to be too big for the code size, - * then increase it, if possible. - */ - if ( freeEntry > maxCode || clearFlag ) - { - if( clearFlag ) - { - nBits = initBits; - maxCode = (1<<nBits)-1; - clearFlag = FALSE; - } - else - { - ++nBits; - if ( nBits == bits ) - maxCode = maxMaxCode; - else - maxCode = (1<<nBits)-1; - } - } - - if ( code == EOFCode ) - { - /* At EOF, write the rest of the buffer. */ - while( curBits > 0 ) - { - writeChar( (Byte)(curAccum & 0xff), outfile ); - curAccum >>= 8; - curBits -= 8; - } - - writePacket(outfile); - } -} - -/* - * Add a character to the end of the current packet, and if it is 254 - * characters, flush the packet to disk. - */ -void GifEncoder::writeChar( Byte c, QFile &fp ) -{ - accum[ aCount++ ] = c; - if( aCount >= 254 ) writePacket(fp); -} - -/* - * Flush the packet to disk, and reset the accumulator - */ -void GifEncoder::writePacket(QFile &fp) -{ - if ( aCount > 0 ) - { - fp.putch( aCount ); - fp.writeBlock( (const char *)accum, aCount ); - aCount = 0; - } -} - -void GifEncoder::clearHashTable() /* reset code table */ -{ - int *htab_p = htab; - int i; for (i=0;i<hashTableSize;i++) *htab_p++ = -1; -} - diff --git a/src/gifenc.h b/src/gifenc.h deleted file mode 100644 index cca3283..0000000 --- a/src/gifenc.h +++ /dev/null @@ -1,90 +0,0 @@ -/****************************************************************************** - * - * $Id$ - * - * - * Copyright (C) 1997-2009 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. - * - * All output generated with Doxygen is not covered by this license. - * - */ - -#ifndef _GIFENC_H -#define _GIFENC_H -#include <qfile.h> - -typedef unsigned char Byte; -typedef unsigned short Word; - -struct Color -{ - Byte red; - Byte green; - Byte blue; -}; - -const int hashTableSize=5003; // size of the hash table - -class GifEncoder -{ - public: - GifEncoder(Byte *rawBytes,Color *p,int w,int h,Byte d,int t); - ~GifEncoder(); - void writeGIF(QFile &fp); - - protected: - void putWord( Word w, QFile &fp ); - void putByte( Byte b, QFile &fp ); - void compress(int csize, QFile &fp); - void writeCode(int code, QFile &fp); - void writeChar( Byte c, QFile &fp ); - void writePacket(QFile &fp); - void clearHashTable(); - int nextPixel() - { - if ( --numPixels < 0) return EOF; - return *dataPtr++; - } - - - private: - const int colorResolution; // 8 bit for Red, Green and Blue; - const int globalPaletteFlag; - const int bits; - const int maxMaxCode; - - // image variables - int width; // image width - int height; // image height - Byte depth; // bits per CLUT entry - int transIndex; // index of the transparant color; -1 = none - Color *palette; // pointer to the color palette - int numPixels; // total number of pixel (i.e. width * height) - Byte *data; // pointer to the image data (one byte per pixel) - Byte *dataPtr; // pointer located at the current pixel. - - // compression variables - bool clearFlag; // clear hash table flag - int freeEntry; // first free entry in the hash table - unsigned int curAccum; // encoded bit accumulator - int curBits; // number of bits in curAccum - Byte accum[256]; // Buffer for a packet - int aCount; // Number of characters so far in this 'packet' - int nBits; // number of bits/code - int maxCode; // maximum code, given n_bits - int initBits; // initial number of bits - int EOFCode; // code for signaling the end of the file - int ClearCode; // the clear code for the decompressor - - // tables - int htab[hashTableSize]; // the hash table - Word codetab[hashTableSize]; // the code table -}; - -#endif diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 1654733..c9ff1f0 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -1005,7 +1005,10 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title, } // first substitute generic keywords - QCString result = substituteKeywords(s,title); + QCString result = substituteKeywords(s,title, + convertToHtml(Config_getString("PROJECT_NAME")), + convertToHtml(Config_getString("PROJECT_NUMBER")), + convertToHtml(Config_getString("PROJECT_BRIEF"))); // additional HTML only keywords result = substitute(result,"$stylesheet",cssFile); @@ -2452,6 +2455,7 @@ static bool quickLinkVisible(LayoutNavEntry::Kind kind) switch (kind) { case LayoutNavEntry::MainPage: return TRUE; + case LayoutNavEntry::User: return TRUE; case LayoutNavEntry::Pages: return indexedPages>0; case LayoutNavEntry::Modules: return documentedGroups>0; case LayoutNavEntry::Namespaces: return documentedNamespaces>0; @@ -2485,8 +2489,12 @@ static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,Layout { if (entry->visible() && quickLinkVisible(entry->kind())) { - startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension, - FALSE,FALSE,relPath); + QCString url = entry->baseFile(); + if (entry->kind()!=LayoutNavEntry::User) + { + url+=Doxygen::htmlFileExtension; + } + startQuickIndexItem(t,url,FALSE,FALSE,relPath); t << fixSpaces(entry->title()); // recursive into child list renderQuickLinksAsTree(t,relPath,entry); @@ -2525,7 +2533,12 @@ static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath, { if (entry->visible() && quickLinkVisible(entry->kind())) { - startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension, + QCString url = entry->baseFile(); + if (entry->kind()!=LayoutNavEntry::User) + { + url+=Doxygen::htmlFileExtension; + } + startQuickIndexItem(t,url, entry==hlEntry && (entry->children().count()>0 || (entry->kind()==kind && !highlightParent) @@ -2694,9 +2707,6 @@ void HtmlGenerator::writeSearchPage() static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); static bool disableIndex = Config_getBool("DISABLE_INDEX"); static QCString projectName = Config_getString("PROJECT_NAME"); - static QCString projectBrief = Config_getString("PROJECT_BRIEF"); - static QCString projectNumber = Config_getString("PROJECT_NUMBER"); - static QCString projectLogo = Config_getString("PROJECT_LOGO"); // OPENSEARCH_PROVIDER { QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php"; diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 8500d10..d28f5e0 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -956,7 +956,10 @@ void LatexGenerator::startIndexSection(IndexSections is) else { QCString header = fileToString(latexHeader); - t << substituteKeywords(header,0); + t << substituteKeywords(header,0, + Config_getString("PROJECT_NAME"), + Config_getString("PROJECT_NUMBER"), + Config_getString("PROJECT_BRIEF")); } } break; @@ -1351,7 +1354,10 @@ void LatexGenerator::endIndexSection(IndexSections is) else { QCString footer = fileToString(latexFooter); - t << substituteKeywords(footer,0); + t << substituteKeywords(footer,0, + Config_getString("PROJECT_NAME"), + Config_getString("PROJECT_NUMBER"), + Config_getString("PROJECT_BRIEF")); } break; } diff --git a/src/layout.cpp b/src/layout.cpp index 0209036..011141b 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -895,6 +895,13 @@ class LayoutParser : public QXmlDefaultHandler theTranslator->trExamplesDescription(), "examples" }, + { "user", + LayoutNavEntry::User, + QCString(), + QCString(), + QCString(), + "user" + }, { 0, // end of list (LayoutNavEntry::Kind)0, QCString(), @@ -945,6 +952,11 @@ class LayoutParser : public QXmlDefaultHandler { intro = mapping[i].intro; } + QCString url = convertToQCString(attrib.value("url")); + if (mapping[i].kind==LayoutNavEntry::User && !url.isEmpty()) + { + baseFile=url; + } // create new item and make it the new root m_rootNav = new LayoutNavEntry(m_rootNav,kind,kind==LayoutNavEntry::MainPage?TRUE:isVisible,baseFile,title,intro); } diff --git a/src/layout.h b/src/layout.h index b9cf85b..47ba5f3 100644 --- a/src/layout.h +++ b/src/layout.h @@ -123,7 +123,8 @@ struct LayoutNavEntry Files, FileGlobals, Dirs, - Examples + Examples, + User }; LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QCString &bf, const QCString &tl,const QCString &intro,bool prepend=FALSE) diff --git a/src/marshal.cpp b/src/marshal.cpp index 8f2e879..0675277 100644 --- a/src/marshal.cpp +++ b/src/marshal.cpp @@ -644,9 +644,9 @@ MemberSDict *unmarshalMemberSDict(StorageIntf *s) //printf(" unmarshaling key %s\n",key.data()); MemberDef *md = (MemberDef *)unmarshalObjPointer(s); //printf(" unmarshalMemberSDict i=%d key=%s md=%p\n",i,key.data(),md); - result->append(key,md); // note: this can lead to unmarshalling another object! + result->append(key,md); } - result->sort(); + //printf("--- end unmarshalMemberSDict\n"); return result; } diff --git a/src/marshal.h b/src/marshal.h index a30c431..ad25b5d 100644 --- a/src/marshal.h +++ b/src/marshal.h @@ -1,3 +1,18 @@ +/****************************************************************************** + * + * Copyright (C) 1997-2011 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + #ifndef MARSHAL_H #define MARSHAL_H @@ -25,58 +40,6 @@ class Entry; #define NULL_LIST 0xffffffff -class FileStorage : public QFile, public StorageIntf -{ - public: - FileStorage() : QFile() {} - FileStorage( const QString &name) : QFile(name) {} - int read(char *buf,uint size) { return QFile::readBlock(buf,size); } - int write(const char *buf,uint size) { return QFile::writeBlock(buf,size); } -}; - -class StreamStorage : public StorageIntf -{ - public: - StreamStorage() - { - m_data=0; - m_offset=0; - m_len=0; - } - ~StreamStorage() - { - delete m_data; - } - StreamStorage(char *data,uint len) - { - m_data=data; - m_offset=0; - m_len=len; - } - int read(char *buf,uint size) - { - int bytesLeft = QMIN((int)size,m_len-m_offset); - if (bytesLeft>0) memcpy(buf,m_data,bytesLeft); - m_offset+=bytesLeft; - return bytesLeft; - } - int write(const char *buf,uint size) - { - m_data=(char *)realloc(m_data,m_offset+size); - memcpy(m_data+m_offset,buf,size); - m_offset+=size; - m_len+=size; - return size; - } - void rewind() { m_offset=0; } - char *data() const { return m_data; } - int size() { return m_len; } - private: - char *m_data; - int m_offset; - int m_len; -}; - //----- marshaling function: datatype -> byte stream -------------------- void marshalInt(StorageIntf *s,int v); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 9b24ed9..b61e9d9 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -49,6 +49,10 @@ #define snprintf _snprintf #endif +// Put this macro at the start of any method of MemberDef that can directly +// or indirectly access other MemberDefs. It prevents that the content +// pointed to by m_impl gets flushed to disk in the middle of the method call! +#define KEEP_RESIDENT_DURING_CALL makeResident();LockingPtr<MemberDef> lock(this,this) //----------------------------------------------------------------------------- @@ -693,6 +697,8 @@ void MemberDef::moveTo(Definition *scope) MemberDef::~MemberDef() { delete m_impl; + //printf("%p: ~MemberDef()\n",this); + m_impl=0; if (m_cacheHandle!=-1) { Doxygen::symbolCache->del(m_cacheHandle); @@ -858,7 +864,7 @@ QCString MemberDef::getReference() const QCString MemberDef::anchor() const { - makeResident(); + KEEP_RESIDENT_DURING_CALL; QCString result=m_impl->anc; if (m_impl->groupAlias) return m_impl->groupAlias->anchor(); if (m_impl->templateMaster) return m_impl->templateMaster->anchor(); @@ -882,7 +888,7 @@ QCString MemberDef::anchor() const void MemberDef::_computeLinkableInProject() { - makeResident(); + KEEP_RESIDENT_DURING_CALL; static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); static bool extractStatic = Config_getBool("EXTRACT_STATIC"); m_isLinkableCached = 2; // linkable @@ -1018,11 +1024,10 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists) void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, FileDef *fd,GroupDef *gd,bool onlyText) { + KEEP_RESIDENT_DURING_CALL; + SrcLangExt lang = getLanguage(); //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); - makeResident(); - SrcLangExt lang = getLanguage(); - LockingPtr<MemberDef> lock(this,this); QCString sep = getLanguageSpecificSeparator(lang); QCString n = name(); if (!hideScopeNames) @@ -1069,9 +1074,12 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *, */ ClassDef *MemberDef::getClassDefOfAnonymousType() { + // split KEEP_RESIDENT_DURING_CALL for performance makeResident(); if (m_impl->cachedAnonymousType) return m_impl->cachedAnonymousType; - LockingPtr<MemberDef> lock(this,this); + LockingPtr<MemberDef> lock(this,this); // since this memberDef can access + // other memberDefs prevent it from + // being flushed to disk halfway QCString cname; if (getClassDef()!=0) @@ -1139,8 +1147,8 @@ bool MemberDef::isBriefSectionVisible() const // "", //getFileDef()->name().data(), // argsString()); - makeResident(); - LockingPtr<MemberDef> lock(this,this); + KEEP_RESIDENT_DURING_CALL; + MemberGroupInfo *info = Doxygen::memGrpInfoDict[m_impl->grpId]; //printf("name=%s m_impl->grpId=%d info=%p\n",name().data(),m_impl->grpId,info); //QCString *pMemGrp = Doxygen::memberDocDict[grpId]; @@ -1232,9 +1240,8 @@ void MemberDef::writeDeclaration(OutputList &ol, // hide enum value, since they appear already as part of the enum, unless they // are explicitly grouped. - makeResident(); + KEEP_RESIDENT_DURING_CALL; if (!inGroup && m_impl->mtype==EnumValue) return; - LockingPtr<MemberDef> lock(this,this); // hide members whose brief section should not be visible //if (!isBriefSectionVisible()) return; @@ -1680,7 +1687,8 @@ bool MemberDef::isDetailedSectionLinkable() const static bool extractStatic = Config_getBool("EXTRACT_STATIC"); static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); - makeResident(); + KEEP_RESIDENT_DURING_CALL; + // the member has details documentation for any of the following reasons bool docFilter = // treat everything as documented @@ -1775,10 +1783,10 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, if ( !hasDocs ) return; if (isEnumValue() && !showEnumValues) return; - makeResident(); + KEEP_RESIDENT_DURING_CALL; + SrcLangExt lang = getLanguage(); bool optVhdl = lang==SrcLangExt_VHDL; - LockingPtr<MemberDef> lock(this,this); QCString scopeName = scName; QCString memAnchor = anchor(); @@ -2532,6 +2540,8 @@ static QCString simplifyTypeForTable(const QCString &s) void MemberDef::writeMemberDocSimple(OutputList &ol, Definition *container) { + KEEP_RESIDENT_DURING_CALL; + Definition *scope = getOuterScope(); QCString doxyName = name(); QCString doxyArgs = argsString(); @@ -2818,8 +2828,7 @@ void MemberDef::setNamespace(NamespaceDef *nd) MemberDef *MemberDef::createTemplateInstanceMember( ArgumentList *formalArgs,ArgumentList *actualArgs) { - makeResident(); - LockingPtr<MemberDef> lock(this,this); + KEEP_RESIDENT_DURING_CALL; //printf(" Member %s %s %s\n",typeString(),name().data(),argsString()); ArgumentList *actualArgList = 0; if (m_impl->defArgList) @@ -2896,7 +2905,7 @@ void MemberDef::setInitializer(const char *initializer) void MemberDef::addListReference(Definition *) { - makeResident(); + KEEP_RESIDENT_DURING_CALL; static bool optimizeOutputForC = Config_getBool("OPTIMIZE_OUTPUT_FOR_C"); //static bool hideScopeNames = Config_getBool("HIDE_SCOPE_NAMES"); //static bool optimizeOutputJava = Config_getBool("OPTIMIZE_OUTPUT_JAVA"); @@ -2978,6 +2987,7 @@ void MemberDef::setSectionList(Definition *d, MemberList *sl) Specifier MemberDef::virtualness(int count) const { + KEEP_RESIDENT_DURING_CALL; if (count>25) { warn(getDefFileName(),getDefLine(), @@ -2999,7 +3009,7 @@ Specifier MemberDef::virtualness(int count) const void MemberDef::_computeIsConstructor() { - makeResident(); + KEEP_RESIDENT_DURING_CALL; m_isConstructorCached=1; // FALSE if (m_impl->classDef) { @@ -3055,7 +3065,7 @@ bool MemberDef::isConstructor() const void MemberDef::_computeIsDestructor() { - makeResident(); + KEEP_RESIDENT_DURING_CALL; bool isDestructor; if (m_impl->isDMember) // for D { @@ -3097,8 +3107,8 @@ bool MemberDef::isDestructor() const void MemberDef::writeEnumDeclaration(OutputList &typeDecl, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd) { - makeResident(); - LockingPtr<MemberDef> lock(this,this); + KEEP_RESIDENT_DURING_CALL; + int enumMemCount=0; QList<MemberDef> *fmdl=m_impl->enumFields; @@ -3752,26 +3762,6 @@ bool MemberDef::hasDocumentedReturnType() const return m_impl->hasDocumentedReturnType; } -#if 0 -int MemberDef::inbodyLine() const -{ - makeResident(); - return m_impl->inbodyLine; -} - -QCString MemberDef::inbodyFile() const -{ - makeResident(); - return m_impl->inbodyFile; -} - -const QCString &MemberDef::inbodyDocumentation() const -{ - makeResident(); - return m_impl->inbodyDocs; -} -#endif - ClassDef *MemberDef::relatedAlso() const { makeResident(); @@ -4175,12 +4165,66 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl); } +void MemberDef::copyArgumentNames(MemberDef *bmd) +{ + makeResident(); + { + LockingPtr<ArgumentList> arguments = bmd->argumentList(); + if (m_impl->defArgList && arguments!=0) + { + ArgumentListIterator aliDst(*m_impl->defArgList); + ArgumentListIterator aliSrc(*arguments); + Argument *argDst, *argSrc; + for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc) + { + argDst->name = argSrc->name; + } + } + } + { + LockingPtr<ArgumentList> arguments = bmd->declArgumentList(); + if (m_impl->declArgList && arguments!=0) + { + ArgumentListIterator aliDst(*m_impl->declArgList); + ArgumentListIterator aliSrc(*arguments); + Argument *argDst, *argSrc; + for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc) + { + argDst->name = argSrc->name; + } + } + } +} + +static void invalidateCachedTypesInArgumentList(ArgumentList *al) +{ + if (al) + { + ArgumentListIterator ali(*al); + Argument *a; + for (ali.toFirst();(a=ali.current());++ali) + { + a->canType.resize(0); + } + } +} + +void MemberDef::invalidateCachedArgumentTypes() +{ + makeResident(); + invalidateCachedTypesInArgumentList(m_impl->defArgList); + invalidateCachedTypesInArgumentList(m_impl->declArgList); +} + + +//----------------------------------------------------------------- + void MemberDef::flushToDisk() const { if (isLocked()) return; MemberDef *that = (MemberDef*)this; that->m_storagePos = Doxygen::symbolStorage->alloc(); - //printf("%p: MemberDef::flushToDisk()\n",this); + //printf("%p: MemberDef::flushToDisk() m_impl=%p\n",this,m_impl); // write the definition base class member variables to disk Definition::flushToDisk(); @@ -4268,10 +4312,10 @@ void MemberDef::flushToDisk() const void MemberDef::loadFromDisk() const { - //printf("%p: MemberDef::loadFromDisk()\n",this); MemberDef *that = (MemberDef *)this; if (isLocked()) { + //printf("%p: loadFromDisk() locked: so still in memory\n",this); assert(m_impl!=0); return; } @@ -4283,6 +4327,7 @@ void MemberDef::loadFromDisk() const //printf("%p: loading specific part\n",this); that->m_impl = new MemberDefImpl; + //printf("%p: MemberDef::loadFromDisk(): m_impl=%p\n",this,m_impl); uint marker = unmarshalUInt(Doxygen::symbolStorage); assert(marker==START_MARKER); @@ -4358,6 +4403,8 @@ void MemberDef::loadFromDisk() const m_impl->category = (ClassDef*)unmarshalObjPointer (Doxygen::symbolStorage); marker = unmarshalUInt(Doxygen::symbolStorage); assert(marker==END_MARKER); + + //printf("%p: MemberDef::loadFromDisk(): sorting\n",this); } void MemberDef::makeResident() const @@ -4371,6 +4418,7 @@ void MemberDef::makeResident() const //printf("adding %s to cache, handle=%d\n",m_impl->name.data(),that->m_cacheHandle); if (victim) // cache was full, victim was the least recently used item and has to go { + //printf("%p: makeResident(): cache full %p::saveToDisk(): m_impl=%p\n",this,victim,victim->m_impl); victim->m_cacheHandle=-1; // invalidate cache handle victim->saveToDisk(); // store the item on disk } @@ -4404,6 +4452,7 @@ void MemberDef::saveToDisk() const { assert(m_impl!=0); MemberDef *that = (MemberDef *)this; + //printf("%p: saveToDisk(): m_impl=%p\n",this,m_impl); if (isLocked()) // cannot flush the item as it is locked { that->m_flushPending=TRUE; // flush when unlocked @@ -4433,6 +4482,7 @@ void MemberDef::unlock() const { if (m_flushPending && !isLocked()) { + //printf("%p: flush after unlock\n",this); // write a the new (possibly modified) instance to disk flushToDisk(); // end to write sequence (unless nothing was written due to the lock) @@ -4440,55 +4490,3 @@ void MemberDef::unlock() const } } -void MemberDef::copyArgumentNames(MemberDef *bmd) -{ - makeResident(); - { - LockingPtr<ArgumentList> arguments = bmd->argumentList(); - if (m_impl->defArgList && arguments!=0) - { - ArgumentListIterator aliDst(*m_impl->defArgList); - ArgumentListIterator aliSrc(*arguments); - Argument *argDst, *argSrc; - for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc) - { - argDst->name = argSrc->name; - } - } - } - { - LockingPtr<ArgumentList> arguments = bmd->declArgumentList(); - if (m_impl->declArgList && arguments!=0) - { - ArgumentListIterator aliDst(*m_impl->declArgList); - ArgumentListIterator aliSrc(*arguments); - Argument *argDst, *argSrc; - for (;(argDst=aliDst.current()) && (argSrc=aliSrc.current());++aliDst,++aliSrc) - { - argDst->name = argSrc->name; - } - } - } -} - -static void invalidateCachedTypesInArgumentList(ArgumentList *al) -{ - if (al) - { - ArgumentListIterator ali(*al); - Argument *a; - for (ali.toFirst();(a=ali.current());++ali) - { - a->canType.resize(0); - } - } -} - -void MemberDef::invalidateCachedArgumentTypes() -{ - makeResident(); - invalidateCachedTypesInArgumentList(m_impl->defArgList); - invalidateCachedTypesInArgumentList(m_impl->declArgList); -} - - diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 4949f23..3cca845 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -808,10 +808,22 @@ void MemberList::setNeedsSorting(bool b) int MemberSDict::compareItems(GCI item1, GCI item2) { + // NOTE: this function can be triggered from unmarshalMemberSDict + // so it may not result in called to MemberDef::makeResident(). + // As a result, the data returned by MemberDef::name() and + // MemberDef::getDefLine() will always be kept in memory. MemberDef *c1=(MemberDef *)item1; MemberDef *c2=(MemberDef *)item2; + //printf("MemberSDict::compareItems(%s,%s)\n",c1->name().data(),c2->name().data()); int cmp = stricmp(c1->name(),c2->name()); - return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine(); + if (cmp) + { + return cmp; + } + else + { + return c1->getDefLine()-c2->getDefLine(); + } } diff --git a/src/store.cpp b/src/store.cpp index 4b66b6b..b075218 100644 --- a/src/store.cpp +++ b/src/store.cpp @@ -25,6 +25,7 @@ #include <errno.h> #include <string.h> #include <assert.h> +#include <ctype.h> #define BLOCK_SIZE 512 // should be >8 and a power of 2 #define BLOCK_POINTER_SIZE sizeof(portable_off_t) @@ -111,7 +112,7 @@ portable_off_t Store::alloc() portable_off_t pos; if (m_head==0) // allocate new block { - //printf("alloc: new block\n"); + //printf("alloc: new block, pos=%lld\n",(long long)m_front); if (portable_fseek(m_file,0,SEEK_END)==-1) // go to end of the file { fprintf(stderr,"Store::alloc: Error seeking to end of file: %s\n",strerror(errno)); @@ -130,7 +131,7 @@ portable_off_t Store::alloc() } else // reuse freed block { - //printf("alloc: reuse block: m_head=%d\n",(int)m_head); + //printf("alloc: reuse block: pos=%lld\n",(long long)m_head->pos); Node *node = m_head; pos = node->pos; // point head to next free item @@ -268,7 +269,7 @@ void Store::end() void Store::release(portable_off_t pos) { STORE_ASSERT(m_state==Reading); - //printf("%x: Store::release\n",(int)pos); + //printf("release: block pos=%lld\n",(long long)pos); STORE_ASSERT(pos>0 && (pos & (BLOCK_SIZE-1))==0); // goto end of the block portable_off_t cur = pos, next; @@ -396,6 +397,30 @@ void Store::printStats() BLOCK_SIZE,(long)(m_front/BLOCK_SIZE),m_reads,m_writes); } +void Store::dumpBlock(portable_off_t s,portable_off_t e) +{ + portable_fseek(m_file,s,SEEK_SET); + int size = (int)(e-s); + uchar *buf = new uchar[size]; + fread(buf,size,1,m_file); + int i,j; + for (i=0;i<size;i+=16) + { + printf("%08x: ",(int)s+i); + for (j=i;j<QMIN(size,i+16);j++) + { + printf("%02x ",buf[i+j]); + } + printf(" "); + for (j=i;j<QMIN(size,i+16);j++) + { + printf("%c",(buf[i+j]>=32 && buf[i+j]<128)?buf[i+j]:'.'); + } + printf("\n"); + } + portable_fseek(m_file,m_cur,SEEK_SET); +} + #ifdef STORE_TEST int main() diff --git a/src/store.h b/src/store.h index df23e96..6d6eee8 100644 --- a/src/store.h +++ b/src/store.h @@ -94,6 +94,10 @@ class Store : public StorageIntf void printStats(); + portable_off_t pos() const { return m_cur; } + + void dumpBlock(portable_off_t start,portable_off_t end); + private: enum State { diff --git a/src/tclscanner.h b/src/tclscanner.h index e080d6c..b586450 100644 --- a/src/tclscanner.h +++ b/src/tclscanner.h @@ -2,8 +2,8 @@ * * * - * Copyright (C) 1997-2010 by Dimitri van Heesch. - * Copyright (C) 2010 by Rene Zaumseil + * Copyright (C) 1997-2011 by Dimitri van Heesch. + * Copyright (C) 2010-2011 by Rene Zaumseil * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/translator_fa.h b/src/translator_fa.h index 6459d8d..e385d79 100644 --- a/src/translator_fa.h +++ b/src/translator_fa.h @@ -50,10 +50,10 @@ class TranslatorPersian : public TranslatorAdapter_1_7_5 const char * PersianDigits[] = { "Û°", "Û±", "Û²", "Û³", "Û´", "Ûµ", "Û¶", "Û·", "Û¸", "Û¹" }; for(unsigned i=0; i<str.length(); i++) { - if (str[i] >= '0' && str[i] <= '9') - output += PersianDigits[ str[i] - '0' ]; + if (str.at(i) >= '0' && str.at(i) <= '9') + output += PersianDigits[ str.at(i) - '0' ]; else - output += str[i]; + output += str.at(i); } return output; diff --git a/src/translator_fr.h b/src/translator_fr.h index bbcca74..373c364 100644 --- a/src/translator_fr.h +++ b/src/translator_fr.h @@ -76,6 +76,7 @@ * | Corrected some misspelling thanx to Christophe C. * -------------+------------------------------------------------------------ */ + #ifndef TRANSLATOR_FR_H #define TRANSLATOR_FR_H @@ -100,7 +101,7 @@ // Translator class (by the local maintainer) when the localized // translator is made up-to-date again. -class TranslatorFrench : public TranslatorAdapter_1_6_3 +class TranslatorFrench : public Translator { public: @@ -113,8 +114,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * the identification used in language.cpp. */ virtual QCString idLanguage() - { - return "french"; } + { return "french"; } /*! Used to get the LaTeX command(s) for the language support. * This method should return string with commands that switch @@ -132,7 +132,8 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 return "\\usepackage[french]{babel}\n"; } - /*! return the language charset. This will be used for the HTML output */ + /*! return the language charset. This will be used + when transcoding the translatable strings in this file to UTF-8 */ virtual QCString idLanguageCharset() { return "iso-8859-1"; @@ -142,33 +143,27 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! used in the compound documentation before a list of related functions. */ virtual QCString trRelatedFunctions() - { - return "Fonctions associées"; } + { return "Fonctions associées"; } /*! subscript for the related functions. */ virtual QCString trRelatedSubscript() - { - return "(Noter que ce ne sont pas des fonctions membres)"; } + { return "(Notez que ce ne sont pas des fonctions membres)"; } /*! header that is put before the detailed description of files, classes and namespaces. */ virtual QCString trDetailedDescription() - { - return "Description détaillée"; } + { return "Description détaillée"; } /*! header that is put before the list of typedefs. */ virtual QCString trMemberTypedefDocumentation() - { - return "Documentation des définitions de type membres"; } + { return "Documentation des définitions de type membres"; } /*! header that is put before the list of enumerations. */ virtual QCString trMemberEnumerationDocumentation() - { - return "Documentation des énumérations membres"; } + { return "Documentation des énumérations membres"; } /*! header that is put before the list of member functions. */ virtual QCString trMemberFunctionDocumentation() - { - return "Documentation des fonctions membres"; } + { return "Documentation des fonctions membres"; } /*! header that is put before the list of member attributes. */ virtual QCString trMemberDataDocumentation() @@ -185,28 +180,23 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! this is the text of a link put after brief descriptions. */ virtual QCString trMore() - { - return "Plus de détails..."; } + { return "Plus de détails..."; } /*! put in the class documentation */ virtual QCString trListOfAllMembers() - { - return "Liste de tous les membres"; } + { return "Liste de tous les membres"; } /*! used as the title of the "list of all members" page of a class */ virtual QCString trMemberList() - { - return "Liste des membres"; } + { return "Liste des membres"; } /*! this is the first part of a sentence that is followed by a class name */ virtual QCString trThisIsTheListOfAllMembers() - { - return "Liste complète des membres de "; } + { return "Liste complète des membres de "; } /*! this is the remainder of the sentence after the class name */ virtual QCString trIncludingInheritedMembers() - { - return ", y compris les membres hérités :"; } + { return ", y compris les membres hérités :"; } /*! this is put at the author sections at the bottom of man pages. * parameter s is name of the project name. @@ -220,18 +210,15 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! put after an enum name in the list of all members */ virtual QCString trEnumName() - { - return "énumération"; } + { return "énumération"; } /*! put after an enum value in the list of all members */ virtual QCString trEnumValue() - { - return "valeur énumérée"; } + { return "valeur énumérée"; } /*! put after an undocumented member in the list of all members */ virtual QCString trDefinedIn() - { - return "défini dans"; } + { return "défini dans"; } // quick reference sections @@ -239,13 +226,11 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * compounds or files (see the \\group command). */ virtual QCString trModules() - { - return "Modules"; } + { return "Modules"; } /*! This is put above each page as a link to the class hierarchy */ virtual QCString trClassHierarchy() - { - return "Hiérarchie des classes"; } + { return "Hiérarchie des classes"; } /*! This is put above each page as a link to the list of annotated classes */ virtual QCString trCompoundList() @@ -262,8 +247,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is put above each page as a link to the list of documented files */ virtual QCString trFileList() - { - return "Liste des fichiers"; } + { return "Liste des fichiers"; } /*! This is put above each page as a link to all members of compounds. */ virtual QCString trCompoundMembers() @@ -283,7 +267,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - return "Portée globale"; + return "Variables globale"; } else { @@ -293,23 +277,19 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is put above each page as a link to all related pages. */ virtual QCString trRelatedPages() - { - return "Pages associées"; } + { return "Pages associées"; } /*! This is put above each page as a link to all examples. */ virtual QCString trExamples() - { - return "Exemples"; } + { return "Exemples"; } /*! This is put above each page as a link to the search engine. */ virtual QCString trSearch() - { - return "Recherche"; } + { return "Recherche"; } /*! This is an introduction to the class hierarchy. */ virtual QCString trClassHierarchyDescription() - { - return "Cette liste d'héritage est classée " + { return "Cette liste d'héritage est classée " "approximativement par ordre alphabétique :"; } @@ -353,7 +333,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 { result+="documentés "; } - result+="avec liens vers "; + result+="avec des liens vers "; if (!extractAll) { if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) @@ -386,14 +366,14 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) { - result+="des fonctions, variables, macros, enumérations, et définitions de type "; + result+="de toutes les fonctions, variables, macros, enumérations, et définitions de type "; } else { result+="de tous les membres de fichier "; } if (!extractAll) result+="documentés "; - result+="avec liens vers "; + result+="avec des liens vers "; if (extractAll) result+="les fichiers auxquels ils appartiennent :"; else @@ -403,37 +383,31 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is an introduction to the page with the list of all examples */ virtual QCString trExamplesDescription() - { - return "Liste de tous les exemples :"; } + { return "Liste de tous les exemples :"; } /*! This is an introduction to the page with the list of related pages */ virtual QCString trRelatedPagesDescription() - { - return "Liste de toutes les pages de documentation associées :"; } + { return "Liste de toutes les pages de documentation associées :"; } /*! This is an introduction to the page with the list of class/file groups */ virtual QCString trModulesDescription() - { - return "Liste de tous les modules :"; } + { return "Liste de tous les modules :"; } /*! This is used in HTML as the title of index.html. */ virtual QCString trDocumentation() - { - return "Documentation"; } + { return "Documentation"; } /*! This is used in LaTeX as the title of the chapter with the * index of all groups. */ virtual QCString trModuleIndex() - { - return "Index des modules"; } + { return "Index des modules"; } /*! This is used in LaTeX as the title of the chapter with the * class hierarchy. */ virtual QCString trHierarchicalIndex() - { - return "Index hiérarchique"; } + { return "Index hiérarchique"; } /*! This is used in LaTeX as the title of the chapter with the * annotated compound index. @@ -454,15 +428,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * list of all files. */ virtual QCString trFileIndex() - { - return "Index des fichiers"; } + { return "Index des fichiers"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all groups. */ virtual QCString trModuleDocumentation() - { - return "Documentation des modules"; } + { return "Documentation des modules"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all classes, structs and unions. @@ -483,97 +455,83 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * the documentation of all files. */ virtual QCString trFileDocumentation() - { - return "Documentation des fichiers"; } + { return "Documentation des fichiers"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all examples. */ virtual QCString trExampleDocumentation() - { - return "Documentation des exemples"; } + { return "Documentation des exemples"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all related pages. */ virtual QCString trPageDocumentation() - { - return "Documentation des pages associées"; } + { return "Documentation des pages associées"; } /*! This is used in LaTeX as the title of the document */ virtual QCString trReferenceManual() - { - return "Manuel de référence"; } + { return "Manuel de référence"; } /*! This is used in the documentation of a file as a header before the * list of defines */ virtual QCString trDefines() - { - return "Macros"; } + { return "Macros"; } /*! This is used in the documentation of a file as a header before the * list of function prototypes */ virtual QCString trFuncProtos() - { - return "Prototypes de fonction"; } + { return "Prototypes de fonction"; } /*! This is used in the documentation of a file as a header before the * list of typedefs */ virtual QCString trTypedefs() - { - return "Définition de type"; } + { return "Définitions de type"; } /*! This is used in the documentation of a file as a header before the * list of enumerations */ virtual QCString trEnumerations() - { - return "Énumérations"; } + { return "Énumérations"; } /*! This is used in the documentation of a file as a header before the * list of (global) functions */ virtual QCString trFunctions() - { - return "Fonctions"; } + { return "Fonctions"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trVariables() - { - return "Variables"; } + { return "Variables"; } /*! This is used in the documentation of a file as a header before the * list of (global) variables */ virtual QCString trEnumerationValues() - { - return "Valeurs énumérées"; } + { return "Valeurs énumérées"; } /*! This is used in the documentation of a file before the list of * documentation blocks for defines */ virtual QCString trDefineDocumentation() - { - return "Documentation des macros"; } + { return "Documentation des macros"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for function prototypes */ virtual QCString trFunctionPrototypeDocumentation() - { - return "Documentation des prototypes de fonction"; } + { return "Documentation des prototypes de fonction"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for typedefs */ virtual QCString trTypedefDocumentation() - { - return "Documentation des définitions de type"; } + { return "Documentation des définitions de type"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for enumeration types @@ -585,15 +543,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * of documentation blocks for functions */ virtual QCString trFunctionDocumentation() - { - return "Documentation des fonctions"; } + { return "Documentation des fonctions"; } /*! This is used in the documentation of a file/namespace before the list * of documentation blocks for variables */ virtual QCString trVariableDocumentation() - { - return "Documentation des variables"; } + { return "Documentation des variables"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds @@ -635,48 +591,39 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! this text is generated when the \\internal command is used. */ virtual QCString trForInternalUseOnly() - { - return "À usage interne uniquement."; } + { return "Pour un usage interne uniquement."; } /*! this text is generated when the \\warning command is used. */ virtual QCString trWarning() - { - return "Avertissement"; } + { return "Avertissement"; } /*! this text is generated when the \\version command is used. */ virtual QCString trVersion() - { - return "Version"; } + { return "Version"; } /*! this text is generated when the \\date command is used. */ virtual QCString trDate() - { - return "Date"; } + { return "Date"; } /*! this text is generated when the \\return command is used. */ virtual QCString trReturns() - { - return "Renvoie"; } + { return "Renvoie"; } /*! this text is generated when the \\sa command is used. */ virtual QCString trSeeAlso() - { - return "Voir également"; } + { return "Voir également"; } /*! this text is generated when the \\param command is used. */ virtual QCString trParameters() - { - return "Paramètres"; } + { return "Paramètres"; } /*! this text is generated when the \\exception command is used. */ virtual QCString trExceptions() - { - return "Exceptions"; } + { return "Exceptions"; } /*! this text is used in the title page of a LaTeX document. */ virtual QCString trGeneratedBy() - { - return "Généré par"; } + { return "Généré par"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990307 @@ -684,8 +631,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! used as the title of page containing all the index of all namespaces. */ virtual QCString trNamespaceList() - { - return "Liste des espaces de nommage"; } + { return "Liste des espaces de nommage"; } /*! used as an introduction to the namespace list */ virtual QCString trNamespaceListDescription(bool extractAll) @@ -700,8 +646,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * friends of a class */ virtual QCString trFriends() - { - return "Amis"; } + { return "Amis"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990405 @@ -711,8 +656,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * related classes */ virtual QCString trRelatedFunctionDocumentation() - { - return "Documentation des fonctions amies et associées"; } + { return "Documentation des fonctions amies et associées"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -723,26 +667,20 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 ClassDef::CompoundType compType, bool isTemplate) { - QCString result="Référence de "; + QCString result="Référence "; + if (isTemplate) result+="du modèle "; + result+="de "; switch(compType) { - case ClassDef::Class: result+="la classe "; - break; - case ClassDef::Struct: result+="la structure "; - break; - case ClassDef::Union: result+="l'union "; - break; - case ClassDef::Interface: result+="l'interface "; - break; - case ClassDef::Protocol: result+="le protocol "; - break; - case ClassDef::Category: result+="la catégorie "; - break; - case ClassDef::Exception: result+="l'exception "; - break; + case ClassDef::Class: result+="la classe "; break; + case ClassDef::Struct: result+="la structure "; break; + case ClassDef::Union: result+="l'union "; break; + case ClassDef::Interface: result+="l'interface "; break; + case ClassDef::Protocol: result+="le protocol "; break; + case ClassDef::Category: result+="la catégorie "; break; + case ClassDef::Exception: result+="l'exception "; break; } result+=(QCString)clName; - if (isTemplate) result+=" (modèle)"; return result; } @@ -763,35 +701,25 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 } virtual QCString trPublicMembers() - { - return "Fonctions membres publiques"; } + { return "Fonctions membres publiques"; } virtual QCString trPublicSlots() - { - return "Connecteurs publics"; } + { return "Connecteurs publics"; } virtual QCString trSignals() - { - return "Signaux"; } + { return "Signaux"; } virtual QCString trStaticPublicMembers() - { - return "Fonctions membres publiques statiques"; } + { return "Fonctions membres publiques statiques"; } virtual QCString trProtectedMembers() - { - return "Fonctions membres protégées"; } + { return "Fonctions membres protégées"; } virtual QCString trProtectedSlots() - { - return "Connecteurs protégés"; } + { return "Connecteurs protégés"; } virtual QCString trStaticProtectedMembers() - { - return "Fonctions membres protégées statiques"; } + { return "Fonctions membres protégées statiques"; } virtual QCString trPrivateMembers() - { - return "Fonctions membres privées"; } + { return "Fonctions membres privées"; } virtual QCString trPrivateSlots() - { - return "Connecteurs privés"; } + { return "Connecteurs privés"; } virtual QCString trStaticPrivateMembers() - { - return "Fonctions membres privées statiques"; } + { return "Fonctions membres privées statiques"; } /*! this function is used to produce a comma-separated list of items. * use generateMarker(i) to indicate where item i should be put. @@ -852,15 +780,14 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is put above each page as a link to all members of namespaces. */ virtual QCString trNamespaceMembers() - { - return "Membres de l'espace de nommage"; } + { return "Membres de l'espace de nommage"; } /*! This is an introduction to the page with all namespace members */ virtual QCString trNamespaceMemberDescription(bool extractAll) { QCString result="Liste de tous les membres des espaces de nommage "; if (!extractAll) result+="documentés "; - result+="avec liens vers "; + result+="avec des liens vers "; if (extractAll) result+="la documentation de namespace de chaque membre :"; else @@ -871,15 +798,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * index of all namespaces. */ virtual QCString trNamespaceIndex() - { - return "Index des espaces de nommage"; } + { return "Index des espaces de nommage"; } /*! This is used in LaTeX as the title of the chapter containing * the documentation of all namespaces. */ virtual QCString trNamespaceDocumentation() - { - return "Documentation des espaces de nommage"; } + { return "Documentation des espaces de nommage"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990522 @@ -889,8 +814,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * namespaces in a file. */ virtual QCString trNamespaces() - { - return "Espaces de nommage"; } + { return "Espaces de nommage"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990728 @@ -907,21 +831,13 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 QCString result=(QCString)"La documentation de "; switch(compType) { - case ClassDef::Class: result+="cette classe"; - break; - case ClassDef::Struct: result+="cette structure"; - break; - case ClassDef::Union: result+="cette union"; - break; - case ClassDef::Interface: result+="cette interface"; - break; - case ClassDef::Protocol: result+="ce protocol"; - female = false; - break; - case ClassDef::Category: result+="cette catégorie"; - break; - case ClassDef::Exception: result+="cette exception"; - break; + case ClassDef::Class: result+="cette classe"; break; + case ClassDef::Struct: result+="cette structure"; break; + case ClassDef::Union: result+="cette union"; break; + case ClassDef::Interface: result+="cette interface"; break; + case ClassDef::Protocol: result+="ce protocol"; female = false; break; + case ClassDef::Category: result+="cette catégorie"; break; + case ClassDef::Exception: result+="cette exception"; break; } if (female) result+= " a été générée à partir "; else result+=" a été généré à partir "; @@ -934,8 +850,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * list. */ virtual QCString trAlphabeticalList() - { - return "Liste alphabétique"; } + { return "Liste alphabétique"; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990901 @@ -943,21 +858,18 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is used as the heading text for the retval command. */ virtual QCString trReturnValues() - { - return "Valeurs retournées"; } + { return "Valeurs retournées"; } /*! This is in the (quick) index as a link to the main page (index.html) */ virtual QCString trMainPage() - { - return "Page principale"; } + { return "Page principale"; } /*! This is used in references to page that are put in the LaTeX * documentation. It should be an abbreviation of the word page. */ virtual QCString trPageAbbreviation() - { - return "p."; } + { return "p."; } ////////////////////////////////////////////////////////////////////////// // new since 0.49-991003 @@ -1111,7 +1023,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! Used as a marker that is put before a \\todo item */ virtual QCString trTodo() { - return "À faire"; + return "A faire"; } /*! Used as the header of the todo list */ virtual QCString trTodoList() @@ -1207,16 +1119,16 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 "</ul>\n" "Les flèches ont la signification suivante :\n" "<ul>\n" - "<li>Une flèche bleu foncé est utilisée pour visualiser une relation d'héritage public " + "<li>Une flèche bleu foncé est utilisée pour visualiser une relation d'héritage publique " "entre deux classes.\n" - "<li>Une flèche vert foncé est utilisée pour une relation d'héritage protégé.\n" - "<li>Une flèche rouge foncé est utilisée pour une relation d'héritage privé.\n" + "<li>Une flèche vert foncé est utilisée pour une relation d'héritage protégée.\n" + "<li>Une flèche rouge foncé est utilisée pour une relation d'héritage privée.\n" "<li>Une flèche violette en pointillés est utilisée si une classe est contenue ou " "utilisée par une autre classe. La flèche est étiquetée avec la ou les variable(s) " "qui permettent d'accéder à la classe ou structure pointée. \n" - "<li>Une flèche verte en pointillés indique une relation entre une classe instanciée et " - "le modèle de classe utilisé. La flèche est étiquetée avec " - "les paramètres de modèle de la classe instanciée.\n" + "<li>Une flèche jaune en pointillés indique une relation entre un modèle d'instance et " + "le modèle de classe duquel il est instancié. La flèche est étiquetée avec " + "les paramètres de modèle de l'instance.\n" "</ul>\n"; } /*! text for the link to the legend page */ @@ -1301,7 +1213,6 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 { return "Paquetages"; } - /*! Text shown before a multi-line define */ virtual QCString trDefineValue() { @@ -1445,8 +1356,8 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 */ virtual QCString trGlobal(bool first_capital, bool singular) { - QCString result((first_capital ? "Global(e)" : "global(e)")); - if (!singular) result+="s"; + QCString result((first_capital ? "Globa" : "globa")); + if (!singular) result+="ux(ales)"; else result+="l(e)"; return result; } @@ -1661,29 +1572,25 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * hierarchy. */ virtual QCString trDirIndex() - { - return "Hiérarchie de répertoires"; } + { return "Hiérarchie de répertoires"; } /*! This is used as the name of the chapter containing the documentation * of the directories. */ virtual QCString trDirDocumentation() - { - return "Documentation des répertoires"; } + { return "Documentation des répertoires"; } /*! This is used as the title of the directory index and also in the * Quick links of a HTML page, to link to the directory hierarchy. */ virtual QCString trDirectories() - { - return "Répertoires"; } + { return "Répertoires"; } /*! This returns a sentences that introduces the directory hierarchy. * and the fact that it is sorted alphabetically per level */ virtual QCString trDirDescription() - { - return "Cette hiérarchie de répertoire est triée approximativement, " + { return "Cette hiérarchie de répertoire est triée approximativement, " "mais pas complètement, par ordre alphabétique :"; } @@ -1691,10 +1598,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * directory is passed via \a dirName. */ virtual QCString trDirReference(const char *dirName) - { - QCString result="Répertoire de référence de "; result+=dirName; - return result; - } + { QCString result="Répertoire de référence de "; result+=dirName; return result; } /*! This returns the word directory with or without starting capital * (\a first_capital) and in sigular or plural form (\a singular). @@ -1702,8 +1606,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 virtual QCString trDir(bool first_capital, bool singular) { QCString result((first_capital ? "Répertoire" : "répertoire")); - if (singular) result+=""; - else result+="s"; + if (singular) result+=""; else result+="s"; return result; } @@ -1728,7 +1631,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is used to introduce a caller (or called-by) graph */ virtual QCString trCallerGraph() { - return "Voici le graphe d'appel pour cette fonction :"; + return "Voici le graphe des appelants de cette fonction :"; } /*! This is used in the documentation of a file/namespace before the list @@ -1743,7 +1646,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! header that is put before the list of member subprograms (Fortran). */ virtual QCString trMemberFunctionDocumentationFortran() - { return "Documentation des fonctions membres/subroutine"; } + { return "Documentation des fonctions/subroutines membres"; } /*! This is put above each page as a link to the list of annotated data types (Fortran). */ virtual QCString trCompoundListFortran() @@ -1760,13 +1663,12 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! This is an introduction to the page with all data types (Fortran). */ virtual QCString trCompoundMembersDescriptionFortran(bool extractAll) { - QCString result="Liste de tous les "; - result+="membres de types de données "; + QCString result="Liste de tous les membres de types de données "; if (!extractAll) { result+="documentés "; } - result+="avec liens vers "; + result+="avec des liens vers "; if (!extractAll) { result+="la documentation de la structure des données de chaque membre :"; @@ -1800,7 +1702,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 * of documentation blocks for subprograms (Fortran) */ virtual QCString trSubprogramDocumentation() - { return "Documentation de la Fonction/Subroutine"; } + { return "Documentation de la fonction/subroutine"; } /*! This is used in the documentation of a file/namespace/group before * the list of links to documented compounds (Fortran) @@ -1815,7 +1717,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! used as an introduction to the modules list (Fortran) */ virtual QCString trModulesListDescription(bool extractAll) { - QCString result="Liste de tous les modules"; + QCString result="Liste de tous les modules "; if (!extractAll) result+="documentés "; result+="avec une brève description :"; return result; @@ -1827,7 +1729,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 bool isTemplate) { QCString result="Réference "; - if (isTemplate) result+="du gabarit (template) "; + if (isTemplate) result+="du modèle "; switch(compType) { case ClassDef::Class: result+="du module "; break; @@ -1858,7 +1760,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 { QCString result="Liste de tous les membres "; if (!extractAll) result+="documentés "; - result+="du module avec lien vers "; + result+="du module avec des liens vers "; if (extractAll) { result+="la documentation du module de chaque membre :"; @@ -1935,7 +1837,7 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 /*! C# Type Constraint list */ virtual QCString trTypeConstraints() { - return "Les constraintes du type"; + return "Contraintes de type"; } ////////////////////////////////////////////////////////////////////////// @@ -1976,14 +1878,73 @@ class TranslatorFrench : public TranslatorAdapter_1_6_3 // new since 1.6.3 ////////////////////////////////////////////////////////////////////////// + /*! introduction text for the directory dependency graph */ + virtual QCString trDirDependency(const char *name) + { + return (QCString)"Graphe des dépendances de répertoire pour "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the first column mentions the + * source file that has a relation to another file. + */ + virtual QCString trFileIn(const char *name) + { + return (QCString)"Fichier dans "+name; + } + + /*! when clicking a directory dependency label, a page with a + * table is shown. The heading for the second column mentions the + * destination file that is included. + */ + virtual QCString trIncludesFileIn(const char *name) + { + return (QCString)"Inclut le fichier dans "+name; + } + + /** Compiles a date string. + * @param year Year in 4 digits + * @param month Month of the year: 1=January + * @param day Day of the Month: 1..31 + * @param dayOfWeek Day of the week: 1=Monday..7=Sunday + * @param hour Hour of the day: 0..23 + * @param minutes Minutes in the hour: 0..59 + * @param seconds Seconds within the minute: 0..59 + * @param includeTime Include time in the result string? + */ + virtual QCString trDateTime(int year,int month,int day,int dayOfWeek, + int hour,int minutes,int seconds, + bool includeTime) + { + static const char *days[] = { "Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche" }; + static const char *months[] = { "Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre" }; + QCString sdate; + sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year); + if (includeTime) + { + QCString stime; + stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds); + sdate+=stime; + } + return sdate; + } + ////////////////////////////////////////////////////////////////////////// // new since 1.7.5 ////////////////////////////////////////////////////////////////////////// + /*! Header for the page with bibliographic citations */ virtual QCString trCiteReferences() - { return "Bibliographie"; } + { return "Références bibliographiques"; } + + /*! Text for copyright paragraph */ + virtual QCString trCopyright() + { return "Copyright"; } + + /*! Header for the graph showing the directory dependencies */ + virtual QCString trDirDepGraph(const char *name) + { return QCString("Graphe des dépendances de répertoires pour ")+name+":"; } }; #endif - diff --git a/src/translator_it.h b/src/translator_it.h index cf8db94..f3f9245 100644 --- a/src/translator_it.h +++ b/src/translator_it.h @@ -2,7 +2,7 @@ * * * - * Copyright (C) 1997-2010 by Dimitri van Heesch. + * Copyright (C) 1997-2011 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby diff --git a/src/util.cpp b/src/util.cpp index 3ecdfb6..62f8443 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -4711,7 +4711,8 @@ QCString showFileDefMatches(const FileNameDict *fnDict,const char *n) //---------------------------------------------------------------------- -QCString substituteKeywords(const QCString &s,const char *title) +QCString substituteKeywords(const QCString &s,const char *title, + const char *projName,const char *projNum,const char *projBrief) { QCString result = s; if (title) result = substitute(result,"$title",title); @@ -4719,9 +4720,9 @@ QCString substituteKeywords(const QCString &s,const char *title) result = substitute(result,"$date",dateToString(FALSE)); result = substitute(result,"$year",yearToString()); result = substitute(result,"$doxygenversion",versionString); - result = substitute(result,"$projectname",Config_getString("PROJECT_NAME")); - result = substitute(result,"$projectnumber",Config_getString("PROJECT_NUMBER")); - result = substitute(result,"$projectbrief",Config_getString("PROJECT_BRIEF")); + result = substitute(result,"$projectname",projName); + result = substitute(result,"$projectnumber",projNum); + result = substitute(result,"$projectbrief",projBrief); result = substitute(result,"$projectlogo",stripPath(Config_getString("PROJECT_LOGO"))); return result; } @@ -234,7 +234,8 @@ bool rightScopeMatch(const QCString &scope, const QCString &name); bool leftScopeMatch(const QCString &scope, const QCString &name); -QCString substituteKeywords(const QCString &s,const char *title); +QCString substituteKeywords(const QCString &s,const char *title, + const char *projName,const char *projNum,const char *projBrief); int getPrefixIndex(const QCString &name); |