diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2010-05-07 19:37:33 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2010-05-07 19:37:33 (GMT) |
commit | a3b06c4fd310fdeda48a4730139cee09b5302072 (patch) | |
tree | 58636054e8f52c5851109b908053cc4da26b060a /src | |
parent | 368c93a05bf38e440dba3f033f6e2e1cbeb2f379 (diff) | |
download | Doxygen-a3b06c4fd310fdeda48a4730139cee09b5302072.zip Doxygen-a3b06c4fd310fdeda48a4730139cee09b5302072.tar.gz Doxygen-a3b06c4fd310fdeda48a4730139cee09b5302072.tar.bz2 |
Release-1.6.3-20100507
Diffstat (limited to 'src')
79 files changed, 2031 insertions, 1362 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp index 2542774..bfd2fa3 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -372,40 +372,40 @@ void ClassDef::internalInsertMember(MemberDef *md, /********************************************/ if (md->isRelated() && (extractPrivate || prot!=Private)) { - addMemberToList(MemberList::related,md,true); + addMemberToList(MemberList::related,md,TRUE); } else if (md->isFriend()) { - addMemberToList(MemberList::friends,md,true); + addMemberToList(MemberList::friends,md,TRUE); } else { switch (md->memberType()) { case MemberDef::Signal: // Qt specific - addMemberToList(MemberList::signals,md,true); + addMemberToList(MemberList::signals,md,TRUE); break; case MemberDef::DCOP: // KDE2 specific - addMemberToList(MemberList::dcopMethods,md,true); + addMemberToList(MemberList::dcopMethods,md,TRUE); break; case MemberDef::Property: - addMemberToList(MemberList::properties,md,true); + addMemberToList(MemberList::properties,md,TRUE); break; case MemberDef::Event: - addMemberToList(MemberList::events,md,true); + addMemberToList(MemberList::events,md,TRUE); break; case MemberDef::Slot: // Qt specific switch (prot) { case Protected: case Package: // slots in packages are not possible! - addMemberToList(MemberList::proSlots,md,true); + addMemberToList(MemberList::proSlots,md,TRUE); break; case Public: - addMemberToList(MemberList::pubSlots,md,true); + addMemberToList(MemberList::pubSlots,md,TRUE); break; case Private: - addMemberToList(MemberList::priSlots,md,true); + addMemberToList(MemberList::priSlots,md,TRUE); break; } break; @@ -417,16 +417,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proStaticAttribs,md,true); + addMemberToList(MemberList::proStaticAttribs,md,TRUE); break; case Package: - addMemberToList(MemberList::pacStaticAttribs,md,true); + addMemberToList(MemberList::pacStaticAttribs,md,TRUE); break; case Public: - addMemberToList(MemberList::pubStaticAttribs,md,true); + addMemberToList(MemberList::pubStaticAttribs,md,TRUE); break; case Private: - addMemberToList(MemberList::priStaticAttribs,md,true); + addMemberToList(MemberList::priStaticAttribs,md,TRUE); break; } } @@ -435,16 +435,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proStaticMethods,md,true); + addMemberToList(MemberList::proStaticMethods,md,TRUE); break; case Package: - addMemberToList(MemberList::pacStaticMethods,md,true); + addMemberToList(MemberList::pacStaticMethods,md,TRUE); break; case Public: - addMemberToList(MemberList::pubStaticMethods,md,true); + addMemberToList(MemberList::pubStaticMethods,md,TRUE); break; case Private: - addMemberToList(MemberList::priStaticMethods,md,true); + addMemberToList(MemberList::priStaticMethods,md,TRUE); break; } } @@ -456,16 +456,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proAttribs,md,true); + addMemberToList(MemberList::proAttribs,md,TRUE); break; case Package: - addMemberToList(MemberList::pacAttribs,md,true); + addMemberToList(MemberList::pacAttribs,md,TRUE); break; case Public: - addMemberToList(MemberList::pubAttribs,md,true); + addMemberToList(MemberList::pubAttribs,md,TRUE); break; case Private: - addMemberToList(MemberList::priAttribs,md,true); + addMemberToList(MemberList::priAttribs,md,TRUE); break; } } @@ -474,16 +474,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proTypes,md,true); + addMemberToList(MemberList::proTypes,md,TRUE); break; case Package: - addMemberToList(MemberList::pacTypes,md,true); + addMemberToList(MemberList::pacTypes,md,TRUE); break; case Public: - addMemberToList(MemberList::pubTypes,md,true); + addMemberToList(MemberList::pubTypes,md,TRUE); break; case Private: - addMemberToList(MemberList::priTypes,md,true); + addMemberToList(MemberList::priTypes,md,TRUE); break; } } @@ -492,16 +492,16 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (prot) { case Protected: - addMemberToList(MemberList::proMethods,md,true); + addMemberToList(MemberList::proMethods,md,TRUE); break; case Package: - addMemberToList(MemberList::pacMethods,md,true); + addMemberToList(MemberList::pacMethods,md,TRUE); break; case Public: - addMemberToList(MemberList::pubMethods,md,true); + addMemberToList(MemberList::pubMethods,md,TRUE); break; case Private: - addMemberToList(MemberList::priMethods,md,true); + addMemberToList(MemberList::priMethods,md,TRUE); break; } } @@ -515,21 +515,21 @@ void ClassDef::internalInsertMember(MemberDef *md, /*******************************************************/ if ((md->isRelated() && (extractPrivate || prot!=Private)) || md->isFriend()) { - addMemberToList(MemberList::relatedMembers,md,false); + addMemberToList(MemberList::relatedMembers,md,FALSE); } else { switch (md->memberType()) { case MemberDef::Property: - addMemberToList(MemberList::propertyMembers,md,false); + addMemberToList(MemberList::propertyMembers,md,FALSE); break; case MemberDef::Event: - addMemberToList(MemberList::eventMembers,md,false); + addMemberToList(MemberList::eventMembers,md,FALSE); break; case MemberDef::Signal: // fall through case MemberDef::DCOP: - addMemberToList(MemberList::functionMembers,md,false); + addMemberToList(MemberList::functionMembers,md,FALSE); break; case MemberDef::Slot: switch (prot) @@ -537,12 +537,12 @@ void ClassDef::internalInsertMember(MemberDef *md, case Protected: case Package: case Public: - addMemberToList(MemberList::functionMembers,md,false); + addMemberToList(MemberList::functionMembers,md,FALSE); break; case Private: if (extractPrivate) { - addMemberToList(MemberList::functionMembers,md,false); + addMemberToList(MemberList::functionMembers,md,FALSE); } break; } @@ -553,13 +553,13 @@ void ClassDef::internalInsertMember(MemberDef *md, switch (md->memberType()) { case MemberDef::Typedef: - addMemberToList(MemberList::typedefMembers,md,false); + addMemberToList(MemberList::typedefMembers,md,FALSE); break; case MemberDef::Enumeration: - addMemberToList(MemberList::enumMembers,md,false); + addMemberToList(MemberList::enumMembers,md,FALSE); break; case MemberDef::EnumValue: - addMemberToList(MemberList::enumValMembers,md,false); + addMemberToList(MemberList::enumValMembers,md,FALSE); break; case MemberDef::Function: if (md->isConstructor() || md->isDestructor()) @@ -569,11 +569,11 @@ void ClassDef::internalInsertMember(MemberDef *md, } else { - addMemberToList(MemberList::functionMembers,md,false); + addMemberToList(MemberList::functionMembers,md,FALSE); } break; case MemberDef::Variable: - addMemberToList(MemberList::variableMembers,md,false); + addMemberToList(MemberList::variableMembers,md,FALSE); break; default: err("Unexpected member type %d found!\n",md->memberType()); @@ -2002,7 +2002,7 @@ bool ClassDef::hasNonReferenceSuperClass() } /*! called from MemberDef::writeDeclaration() to (recusively) write the - * definition of an annonymous struct, union or class. + * definition of an anonymous struct, union or class. */ void ClassDef::writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup) { @@ -2125,9 +2125,9 @@ bool ClassDef::isVisibleInHierarchy() return // show all classes or a subclass is visible (allExternals || hasNonReferenceSuperClass()) && - // and not an annonymous compound + // and not an anonymous compound name().find('@')==-1 && - // not an artifically introduced class + // not an artificially introduced class !isArtificial() && // and not privately inherited (m_impl->prot!=Private || extractPrivate) && @@ -2163,16 +2163,20 @@ bool ClassDef::isBaseClass(ClassDef *bcd, bool followInstances,int level) } if (baseClasses()) { - BaseClassListIterator bcli(*baseClasses()); - for ( ; bcli.current() && !found ; ++bcli) + //BaseClassListIterator bcli(*baseClasses()); + //for ( ; bcli.current() && !found ; ++bcli) + BaseClassDef *bcdi = baseClasses()->first(); + while (bcdi) { - ClassDef *ccd=bcli.current()->classDef; + //ClassDef *ccd=bcli.current()->classDef; + ClassDef *ccd=bcdi->classDef; if (!followInstances && ccd->templateMaster()) ccd=ccd->templateMaster(); //printf("isBaseClass() baseclass %s\n",ccd->name().data()); if (ccd==bcd) found=TRUE; else found=ccd->isBaseClass(bcd,followInstances,level+1); + bcdi = baseClasses()->next(); } } return found; @@ -3229,17 +3233,32 @@ void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md,bool isBrie static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); MemberList *ml = createMemberList(lt); + ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs)); + ml->append(md); + +#if 0 if (( isBrief && sortBriefDocs ) || (!isBrief && sortMemberDocs) ) ml->inSort(md); else ml->append(md); +#endif // for members in the declaration lists we set the section, needed for member grouping if ((ml->listType()&MemberList::detailedLists)==0) md->setSectionList(this,ml); } +void ClassDef::sortMemberLists() +{ + MemberList *ml = m_impl->memberLists.first(); + while (ml) + { + if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + ml = m_impl->memberLists.next(); + } +} + void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title, const char *subTitle) { diff --git a/src/classdef.h b/src/classdef.h index 693e299..4b85739 100644 --- a/src/classdef.h +++ b/src/classdef.h @@ -304,6 +304,7 @@ class ClassDef : public Definition void addListReferences(); void computeAnchors(); void mergeMembers(); + void sortMemberLists(); void distributeMemberGroupDocumentation(); void writeDocumentation(OutputList &ol); void writeDocumentationForInnerClasses(OutputList &ol); diff --git a/src/cmdmapper.cpp b/src/cmdmapper.cpp index bd6d593..16e8a7a 100644 --- a/src/cmdmapper.cpp +++ b/src/cmdmapper.cpp @@ -159,7 +159,7 @@ CommandMap htmlTagMap[] = { "div", HTML_DIV }, { "c", XML_C }, - // { "code", XML_CODE }, <= ambigious <code> is also a HTML tag + // { "code", XML_CODE }, <= ambiguous <code> is also a HTML tag { "description", XML_DESCRIPTION }, { "example", XML_EXAMPLE }, { "exception", XML_EXCEPTION }, @@ -283,11 +283,13 @@ ClassDef *VariableContext::findVariable(const QCString &name) { if (name.isEmpty()) return 0; ClassDef *result = 0; - QListIterator<Scope> sli(m_scopes); + //QListIterator<Scope> sli(m_scopes); Scope *scope; QCString key = name; // search from inner to outer scope - for (sli.toLast();(scope=sli.current());--sli) + scope = m_scopes.last(); + //for (sli.toLast();(scope=sli.current());--sli) + while (scope) { result = scope->find(key); if (result) @@ -295,6 +297,7 @@ ClassDef *VariableContext::findVariable(const QCString &name) DBG_CTX((stderr,"** findVariable(%s)=%p\n",name.data(),result)); return result; } + scope = m_scopes.prev(); } // nothing found -> also try the global scope result=m_globalScope.find(name); @@ -835,7 +838,8 @@ static bool getLinkInScope(const QCString &c, // scope const QCString &m, // member const char *memberText, // exact text CodeOutputInterface &ol, - const char *text + const char *text, + bool varOnly=FALSE ) { MemberDef *md; @@ -843,9 +847,9 @@ static bool getLinkInScope(const QCString &c, // scope FileDef *fd; NamespaceDef *nd; GroupDef *gd; - //fprintf(stderr,"getLinkInScope: trying `%s'::`%s'\n",c.data(),m.data()); + //fprintf(stderr,"getLinkInScope: trying `%s'::`%s' varOnly=%d\n",c.data(),m.data(),varOnly); if (getDefs(c,m,"()",md,cd,fd,nd,gd,FALSE,g_sourceFileDef) && - md->isLinkable()) + md->isLinkable() && (!varOnly || md->isVariable())) { if (g_exampleBlock) { @@ -894,18 +898,19 @@ static bool getLinkInScope(const QCString &c, // scope static bool getLink(const char *className, const char *memberName, CodeOutputInterface &ol, - const char *text=0) + const char *text=0, + bool varOnly=FALSE) { //printf("getLink(%s,%s) g_curClassName=%s\n",className,memberName,g_curClassName.data()); QCString m=removeRedundantWhiteSpace(memberName); QCString c=className; - if (!getLinkInScope(c,m,memberName,ol,text)) + if (!getLinkInScope(c,m,memberName,ol,text,varOnly)) { if (!g_curClassName.isEmpty()) { if (!c.isEmpty()) c.prepend("::"); c.prepend(g_curClassName); - return getLinkInScope(c,m,memberName,ol,text); + return getLinkInScope(c,m,memberName,ol,text,varOnly); } return FALSE; } @@ -913,7 +918,7 @@ static bool getLink(const char *className, } static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, - bool typeOnly=FALSE) + bool typeOnly=FALSE,bool varOnly=FALSE) { int i=0; if (*clName=='~') // correct for matching negated values i.s.o. destructors. @@ -953,7 +958,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, //fprintf(stderr,"is found as a type %s\n",cd?cd->name().data():"<null>"); if (cd==0 && md==0) // also see if it is variable or enum or enum value { - if (getLink(g_classScope,clName,ol,clName)) + if (getLink(g_classScope,clName,ol,clName,varOnly)) { return; } @@ -1031,7 +1036,7 @@ static void generateClassOrGlobalLink(CodeOutputInterface &ol,char *clName, md=0; // variable not accessible } } - if (md) + if (md && (!varOnly || md->isVariable())) { //fprintf(stderr,"is a global md=%p g_currentDefinition=%s linkable=%d\n",md,g_currentDefinition?g_currentDefinition->name().data():"<none>",md->isLinkable()); if (md->isLinkable()) @@ -1890,7 +1895,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} { if (ambig) // multiple input files match the name { - //printf("===== yes %s is ambigious\n",yytext); + //printf("===== yes %s is ambiguous\n",yytext); QCString name = convertToQCString(QDir::cleanDirPath(yytext)); if (!name.isEmpty() && g_sourceFileDef) { @@ -2227,6 +2232,9 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} } <UsingName>{ID}("::"{ID})* { addUsingDirective(yytext); generateClassOrGlobalLink(*g_code,yytext); + DBG_CTX((stderr,"** scope stack push CLASSBLOCK\n")); + g_scopeStack.push(CLASSBLOCK); + pushScope(yytext); BEGIN(Body); } <UsingName>\n { codifyLines(yytext); BEGIN(Body); } @@ -2372,7 +2380,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP} } <Body>{SCOPENAME}/{BN}*[;,)\]] { // "int var;" or "var, var2" or "debug(f) macro" addType(); - generateClassOrGlobalLink(*g_code,yytext/*,TRUE*/); + generateClassOrGlobalLink(*g_code,yytext,FALSE,TRUE); g_name+=yytext; } <Body>{SCOPENAME}/{B}* { // p->func() diff --git a/src/commentcnv.l b/src/commentcnv.l index a38228f..e508221 100644 --- a/src/commentcnv.l +++ b/src/commentcnv.l @@ -67,6 +67,7 @@ static bool g_specialComment; static QCString g_aliasString; static int g_blockCount; +static bool g_lastEscaped; static int g_lastBlockContext; static bool g_pythonDocString; @@ -696,30 +697,41 @@ void replaceComment(int offset); g_lastBlockContext=YY_START; g_blockCount=1; g_aliasString=yytext; + g_lastEscaped=0; BEGIN( ReadAliasArgs ); } -<ReadAliasArgs>[^{}\n\*]+ { +<ReadAliasArgs>[^{}\n\\\*]+ { g_aliasString+=yytext; + g_lastEscaped=FALSE; } +<ReadAliasArgs>"\\" { + if (g_lastEscaped) g_lastEscaped=FALSE; + else g_lastEscaped=TRUE; + g_aliasString+=yytext; + } <ReadAliasArgs>\n { g_aliasString+=yytext; g_lineNr++; + g_lastEscaped=FALSE; } <ReadAliasArgs>"{" { g_aliasString+=yytext; - g_blockCount++; + if (!g_lastEscaped) g_blockCount++; + g_lastEscaped=FALSE; } <ReadAliasArgs>"}" { g_aliasString+=yytext; - g_blockCount--; + if (!g_lastEscaped) g_blockCount--; if (g_blockCount==0) { replaceAliases(g_aliasString); BEGIN( g_lastBlockContext ); } + g_lastEscaped=FALSE; } <ReadAliasArgs>. { g_aliasString+=yytext; + g_lastEscaped=FALSE; } <ReadLine>. { copyToOutput(yytext,yyleng); diff --git a/src/config.xml b/src/config.xml index 088f9e7..b360841 100644 --- a/src/config.xml +++ b/src/config.xml @@ -722,7 +722,7 @@ which an include is specified. Set to NO to disable this. If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all compounds will be generated. Enable this if the project contains a lot of classes, structs, unions or interfaces. -' defval='0'/> +' defval='1'/> <option type='int' id='COLS_IN_ALPHA_INDEX' docs=' If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns @@ -832,6 +832,14 @@ should uniquely identify the documentation set bundle. This should be a reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen will append .docset to the name. ' defval='org.doxygen.Project' depends='GENERATE_DOCSET'/> + <option type='string' id='DOCSET_PUBLISHER_ID' format='string' docs=' +When GENERATE_DOCSET tag specifies a string that should uniquely identify +the documentation publisher. This should be a reverse domain-name style +string, e.g. com.mycompany.MyDocSet.documentation. +' defval='org.doxygen.Publisher' depends='GENERATE_DOCSET'/> + <option type='string' id='DOCSET_PUBLISHER_NAME' format='string' docs=' +The GENERATE_DOCSET tag identifies the documentation publisher. +' defval='Publisher' depends='GENERATE_DOCSET'/> <option type='bool' id='GENERATE_HTMLHELP' docs=' If the GENERATE_HTMLHELP tag is set to YES, additional index files will be generated that can be used as input for tools like the diff --git a/src/configoptions.cpp b/src/configoptions.cpp index a51fae4..d6f161f 100644 --- a/src/configoptions.cpp +++ b/src/configoptions.cpp @@ -1028,7 +1028,7 @@ void addConfigOptions(Config *cfg) "If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index\n" "of all compounds will be generated. Enable this if the project\n" "contains a lot of classes, structs, unions or interfaces.", - FALSE + TRUE ); //---- ci = cfg->addInt( @@ -1205,6 +1205,22 @@ void addConfigOptions(Config *cfg) cs->setDefaultValue("org.doxygen.Project"); cs->addDependency("GENERATE_DOCSET"); //---- + cs = cfg->addString( + "DOCSET_PUBLISHER_ID", + "When GENERATE_DOCSET tag specifies a string that should uniquely identify\n" + "the documentation publisher. This should be a reverse domain-name style\n" + "string, e.g. com.mycompany.MyDocSet.documentation." + ); + cs->setDefaultValue("org.doxygen.Publisher"); + cs->addDependency("GENERATE_DOCSET"); + //---- + cs = cfg->addString( + "DOCSET_PUBLISHER_NAME", + "The GENERATE_DOCSET tag identifies the documentation publisher." + ); + cs->setDefaultValue("Publisher"); + cs->addDependency("GENERATE_DOCSET"); + //---- cb = cfg->addBool( "GENERATE_HTMLHELP", "If the GENERATE_HTMLHELP tag is set to YES, additional index files\n" diff --git a/src/dbusxmlscanner.cpp b/src/dbusxmlscanner.cpp index 666506d..a6141fa 100644 --- a/src/dbusxmlscanner.cpp +++ b/src/dbusxmlscanner.cpp @@ -597,8 +597,8 @@ private: { type = attributes.value(type_idx); - QRegExp reg_exp(QString("(a?[ybnqiuxdtsogv]|a[{]sv[}])")); - if (reg_exp.match(type)) + QRegExp reg_exp(QCString("(a?[ybnqiuxdtsogv]|a[{]sv[}])")); + if (reg_exp.match(type.data())) { return type; } DOC_ERROR(QString("Unnamed complex D-Bus type \"%1\" found.").arg(type)); diff --git a/src/defgen.cpp b/src/defgen.cpp index 2c6c34b..16b57f4 100644 --- a/src/defgen.cpp +++ b/src/defgen.cpp @@ -35,7 +35,7 @@ #define DEF_DB(x) -inline void writeDEFString(QTextStream &t,const char *s) +inline void writeDEFString(FTextStream &t,const char *s) { const char* p=s; char c; @@ -51,7 +51,7 @@ inline void writeDEFString(QTextStream &t,const char *s) } void generateDEFForMember(MemberDef *md, - QTextStream &t, + FTextStream &t, Definition *def, const char* Prefix) { @@ -312,7 +312,7 @@ void generateDEFForMember(MemberDef *md, void generateDEFClassSection(ClassDef *cd, - QTextStream &t, + FTextStream &t, MemberList *ml, const char *kind) { @@ -331,7 +331,7 @@ void generateDEFClassSection(ClassDef *cd, } } -void generateDEFForClass(ClassDef *cd,QTextStream &t) +void generateDEFForClass(ClassDef *cd,FTextStream &t) { // + brief description // + detailed description @@ -474,7 +474,7 @@ void generateDEFForClass(ClassDef *cd,QTextStream &t) } void generateDEFSection(Definition *d, - QTextStream &t, + FTextStream &t, MemberList *ml, const char *kind) { @@ -491,7 +491,7 @@ void generateDEFSection(Definition *d, } } -void generateDEFForNamespace(NamespaceDef *nd,QTextStream &t) +void generateDEFForNamespace(NamespaceDef *nd,FTextStream &t) { if (nd->isReference()) return; // skip external references t << " namespace = {" << endl; @@ -517,7 +517,7 @@ void generateDEFForNamespace(NamespaceDef *nd,QTextStream &t) t << " };" << endl; } -void generateDEFForFile(FileDef *fd,QTextStream &t) +void generateDEFForFile(FileDef *fd,FTextStream &t) { if (fd->isReference()) return; // skip external references @@ -600,7 +600,7 @@ void generateDEF() err("Cannot open file %s for writing!\n",fileName.data()); return; } - QTextStream t(&f); + FTextStream t(&f); t << "AutoGen Definitions dummy;" << endl; if (Doxygen::classSDict->count()+Doxygen::inputNameList->count()>0) diff --git a/src/diagram.cpp b/src/diagram.cpp index ee5111e..96d057a 100644 --- a/src/diagram.cpp +++ b/src/diagram.cpp @@ -21,7 +21,7 @@ #include <stdlib.h> #include <qlist.h> #include <qarray.h> -#include <qtextstream.h> +#include "ftextstream.h" #include <qfile.h> #include "diagram.h" @@ -142,7 +142,7 @@ static void writeBitmapBox(DiagramItem *di,Image *image, } } -static void writeVectorBox(QTextStream &t,DiagramItem *di, +static void writeVectorBox(FTextStream &t,DiagramItem *di, float x,float y,bool children=FALSE) { if (di->virtualness()==Virtual) t << "dashed\n"; @@ -151,7 +151,7 @@ static void writeVectorBox(QTextStream &t,DiagramItem *di, if (di->virtualness()==Virtual) t << "solid\n"; } -static void writeMapArea(QTextStream &t,ClassDef *cd,QCString relPath, +static void writeMapArea(FTextStream &t,ClassDef *cd,QCString relPath, int x,int y,int w,int h) { if (cd->isLinkable()) @@ -161,7 +161,7 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,QCString relPath, t << "<area "; if (!ref.isEmpty()) { - t << "doxygen=\"" << ref << ":"; + t << "target=\"_blank\" doxygen=\"" << ref << ":"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; t << "\" "; } @@ -485,7 +485,7 @@ void TreeDiagram::computeExtremes(uint *maxLabelLen,uint *maxXPos) if (maxXPos) *maxXPos=mx; } -void TreeDiagram::drawBoxes(QTextStream &t,Image *image, +void TreeDiagram::drawBoxes(FTextStream &t,Image *image, bool doBase,bool bitmap, uint baseRows,uint superRows, uint cellWidth,uint cellHeight, @@ -616,7 +616,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image, } } -void TreeDiagram::drawConnectors(QTextStream &t,Image *image, +void TreeDiagram::drawConnectors(FTextStream &t,Image *image, bool doBase,bool bitmap, uint baseRows,uint superRows, uint cellWidth,uint cellHeight) @@ -968,7 +968,7 @@ ClassDiagram::~ClassDiagram() delete super; } -void ClassDiagram::writeFigure(QTextStream &output,const char *path, +void ClassDiagram::writeFigure(FTextStream &output,const char *path, const char *fileName) const { uint baseRows=base->computeRows(); @@ -1018,7 +1018,7 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, err("Could not open file %s for writing\n",convertToQCString(f1.name()).data()); exit(1); } - QTextStream t(&f1); + FTextStream t(&f1); //printf("writeEPS() rows=%d cols=%d\n",rows,cols); @@ -1262,7 +1262,7 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path, } -void ClassDiagram::writeImage(QTextStream &t,const char *path, +void ClassDiagram::writeImage(FTextStream &t,const char *path, const char *relPath,const char *fileName, bool generateMap) const { diff --git a/src/diagram.h b/src/diagram.h index 96a0658..1d1bde9 100644 --- a/src/diagram.h +++ b/src/diagram.h @@ -25,6 +25,7 @@ class TreeDiagram; class ClassDiagram; class DiagramItemList; class Image; +class FTextStream; class DiagramItem { @@ -101,13 +102,13 @@ class TreeDiagram : public QList<DiagramRow> //uint computeCols(); void moveChildren(DiagramItem *root,int dx); void computeExtremes(uint *labelWidth,uint *xpos); - void drawBoxes(QTextStream &t,Image *image, + void drawBoxes(FTextStream &t,Image *image, bool doBase,bool bitmap, uint baseRows,uint superRows, uint cellWidth,uint cellHeight, QCString relPath="", bool generateMap=TRUE); - void drawConnectors(QTextStream &t,Image *image, + void drawConnectors(FTextStream &t,Image *image, bool doBase,bool bitmap, uint baseRows,uint superRows, uint cellWidth,uint cellheight); @@ -122,9 +123,9 @@ class ClassDiagram public: ClassDiagram(ClassDef *root); ~ClassDiagram(); - void writeFigure(QTextStream &t,const char *path, + void writeFigure(FTextStream &t,const char *path, const char *file) const; - void writeImage(QTextStream &t,const char *path,const char *relPath, + void writeImage(FTextStream &t,const char *path,const char *relPath, const char *file,bool generateMap=TRUE) const; private: TreeDiagram *base; diff --git a/src/dirdef.cpp b/src/dirdef.cpp index 0d9faf6..84fa3ab 100644 --- a/src/dirdef.cpp +++ b/src/dirdef.cpp @@ -9,6 +9,7 @@ #include "message.h" #include "dot.h" #include "layout.h" +#include "ftextstream.h" //---------------------------------------------------------------------- // method implementation @@ -662,7 +663,7 @@ DirDef *DirDef::mergeDirectoryInTree(const QCString &path) return dir; } -void DirDef::writeDepGraph(QTextStream &t) +void DirDef::writeDepGraph(FTextStream &t) { writeDotDirDepGraph(t,this); } diff --git a/src/dirdef.h b/src/dirdef.h index 376fcb1..e5e7ef2 100644 --- a/src/dirdef.h +++ b/src/dirdef.h @@ -30,7 +30,7 @@ class QStrList; class FileDef; class OutputList; class UsedDir; -class QTextStream; +class FTextStream; class DirDef; @@ -69,7 +69,7 @@ class DirDef : public Definition // generate output void writeDocumentation(OutputList &ol); - void writeDepGraph(QTextStream &t); + void writeDepGraph(FTextStream &t); static DirDef *mergeDirectoryInTree(const QCString &path); bool visited; diff --git a/src/docparser.cpp b/src/docparser.cpp index cd7e956..6ac8ae4 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -70,15 +70,15 @@ static const char *sectionLevelToName[] = // Parser state: global variables during a call to validatingParseDoc static Definition * g_scope; -static QString g_context; +static QCString g_context; static bool g_inSeeBlock; static bool g_insideHtmlLink; static QStack<DocNode> g_nodeStack; static QStack<DocStyleChange> g_styleStack; static QStack<DocStyleChange> g_initialStyleStack; static QList<Definition> g_copyStack; -static QString g_fileName; -static QString g_relPath; +static QCString g_fileName; +static QCString g_relPath; static bool g_hasParamCommand; static bool g_hasReturnCommand; @@ -89,7 +89,7 @@ static QCString g_exampleName; static SectionDict * g_sectionDict; static QCString g_searchUrl; -static QString g_includeFileText; +static QCString g_includeFileText; static uint g_includeFileOffset; static uint g_includeFileLength; @@ -97,15 +97,15 @@ static uint g_includeFileLength; struct DocParserContext { Definition *scope; - QString context; + QCString context; bool inSeeBlock; bool insideHtmlLink; QStack<DocNode> nodeStack; QStack<DocStyleChange> styleStack; QStack<DocStyleChange> initialStyleStack; QList<Definition> copyStack; - QString fileName; - QString relPath; + QCString fileName; + QCString relPath; bool hasParamCommand; bool hasReturnCommand; @@ -116,7 +116,7 @@ struct DocParserContext SectionDict *sectionDict; QCString searchUrl; - QString includeFileText; + QCString includeFileText; uint includeFileOffset; uint includeFileLength; @@ -297,7 +297,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) else if (ambig) { QCString text; - text.sprintf("Warning: image file name %s is ambigious.\n",fileName); + text.sprintf("Warning: image file name %s is ambiguous.\n",fileName); text+="Possible candidates:\n"; text+=showFileDefMatches(Doxygen::imageNameDict,fileName); warn_doc_error(g_fileName,doctokenizerYYlineno,text); @@ -322,7 +322,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type) * member g_memberDef, then a warning is raised (unless warnings * are disabled altogether). */ -static void checkArgumentName(const QString &name,bool isParam) +static void checkArgumentName(const QCString &name,bool isParam) { if (!Config_getBool("WARN_IF_DOC_ERROR")) return; if (g_memberDef==0) return; // not a member @@ -334,16 +334,16 @@ static void checkArgumentName(const QString &name,bool isParam) static QRegExp re("[a-zA-Z0-9_\\x80-\\xFF]+\\.*"); int p=0,i=0,l; - while ((i=re.match(name,p,&l))!=-1) // to handle @param x,y + while ((i=re.match(name.data(),p,&l))!=-1) // to handle @param x,y { - QString aName=name.mid(i,l); + QCString aName=name.mid(i,l); //printf("aName=`%s'\n",aName.data()); ArgumentListIterator ali(*al); Argument *a; bool found=FALSE; for (ali.toFirst();(a=ali.current());++ali) { - QString argName = g_memberDef->isDefine() ? a->type : a->name; + QCString argName = g_memberDef->isDefine() ? a->type : a->name; argName=argName.stripWhiteSpace(); //printf("argName=`%s'\n",argName.data()); if (argName.right(3)=="...") argName=argName.left(argName.length()-3); @@ -358,10 +358,10 @@ static void checkArgumentName(const QString &name,bool isParam) if (!found && isParam) { //printf("member type=%d\n",memberDef->memberType()); - QString scope=g_memberDef->getScopeString(); + QCString scope=g_memberDef->getScopeString(); if (!scope.isEmpty()) scope+="::"; else scope=""; - QString inheritedFrom = ""; - QString docFile = g_memberDef->docFile(); + QCString inheritedFrom = ""; + QCString docFile = g_memberDef->docFile(); int docLine = g_memberDef->docLine(); MemberDef *inheritedMd = g_memberDef->inheritsDocsFrom(); if (inheritedMd) // documentation was inherited @@ -402,7 +402,7 @@ static void checkUndocumentedParams() bool found=FALSE; for (ali.toFirst();(a=ali.current());++ali) { - QString argName = g_memberDef->isDefine() ? a->type : a->name; + QCString argName = g_memberDef->isDefine() ? a->type : a->name; argName=argName.stripWhiteSpace(); if (argName.right(3)=="...") argName=argName.left(argName.length()-3); if (getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python && argName=="self") @@ -418,14 +418,14 @@ static void checkUndocumentedParams() if (found) { bool first=TRUE; - QString errMsg= + QCString errMsg= "Warning: The following parameters of "+ - QString(g_memberDef->qualifiedName()) + - QString(argListToString(al.pointer())) + + QCString(g_memberDef->qualifiedName()) + + QCString(argListToString(al.pointer())) + " are not documented:\n"; for (ali.toFirst();(a=ali.current());++ali) { - QString argName = g_memberDef->isDefine() ? a->type : a->name; + QCString argName = g_memberDef->isDefine() ? a->type : a->name; argName=argName.stripWhiteSpace(); if (getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python && argName=="self") { @@ -472,7 +472,7 @@ static void detectNoDocumentedParams() { LockingPtr<ArgumentList> al = g_memberDef->argumentList(); LockingPtr<ArgumentList> declAl = g_memberDef->declArgumentList(); - QString returnType = g_memberDef->typeString(); + QCString returnType = g_memberDef->typeString(); bool isPython = getLanguageFromFileName(g_memberDef->getDefFileName())==SrcLangExt_Python; if (!g_memberDef->hasDocumentedParams() && @@ -551,15 +551,15 @@ static void detectNoDocumentedParams() //--------------------------------------------------------------------------- /*! Strips known html and tex extensions from \a text. */ -static QString stripKnownExtensions(const char *text) +static QCString stripKnownExtensions(const char *text) { - QString result=text; + QCString result=text; if (result.right(4)==".tex") { result=result.left(result.length()-4); } else if (result.right(Doxygen::htmlFileExtension.length())== - QString(Doxygen::htmlFileExtension)) + QCString(Doxygen::htmlFileExtension)) { result=result.left(result.length()-Doxygen::htmlFileExtension.length()); } @@ -657,15 +657,15 @@ static bool insideTable(DocNode *n) * @retval FALSE if name was not found. */ static bool findDocsForMemberOrCompound(const char *commandName, - QString *pDoc, - QString *pBrief, + QCString *pDoc, + QCString *pBrief, Definition **pDef) { //printf("findDocsForMemberOrCompound(%s)\n",commandName); *pDoc=""; *pBrief=""; *pDef=0; - QString cmdArg=substitute(commandName,"#","::"); + QCString cmdArg=substitute(commandName,"#","::"); int l=cmdArg.length(); if (l==0) return FALSE; @@ -689,8 +689,8 @@ static bool findDocsForMemberOrCompound(const char *commandName, } } - QString name=removeRedundantWhiteSpace(cmdArg.left(funcStart).latin1()); - QString args=cmdArg.right(l-funcStart); + QCString name=removeRedundantWhiteSpace(cmdArg.left(funcStart)); + QCString args=cmdArg.right(l-funcStart); // try if the link is to a member MemberDef *md=0; @@ -700,9 +700,9 @@ static bool findDocsForMemberOrCompound(const char *commandName, GroupDef *gd=0; PageDef *pd=0; bool found = getDefs( - g_context.find('.')==-1?g_context.latin1():"", // `find('.') is a hack to detect files - name.latin1(), - args.isEmpty()?0:args.latin1(), + g_context.find('.')==-1?g_context.data():"", // `find('.') is a hack to detect files + name.data(), + args.isEmpty()?0:args.data(), md,cd,fd,nd,gd,FALSE,0,TRUE); //printf("found=%d context=%s name=%s\n",found,g_context.data(),name.data()); if (found && md) @@ -717,7 +717,7 @@ static bool findDocsForMemberOrCompound(const char *commandName, int scopeOffset=g_context.length(); do // for each scope { - QString fullName=cmdArg; + QCString fullName=cmdArg; if (scopeOffset>0) { fullName.prepend(g_context.left(scopeOffset)+"::"); @@ -790,10 +790,10 @@ static bool defaultHandleToken(DocNode *parent,int tok, static int handleStyleArgument(DocNode *parent,QList<DocNode> &children, - const QString &cmdName) + const QCString &cmdName) { DBG(("handleStyleArgument(%s)\n",cmdName.data())); - QString tokenName = g_token->name; + QCString tokenName = g_token->name; int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) { @@ -996,16 +996,16 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) { Definition *compound=0; MemberDef *member=0; - QString name = linkToText(g_token->name,TRUE); + QCString name = linkToText(g_token->name,TRUE); int len = g_token->name.length(); ClassDef *cd=0; bool ambig; FileDef *fd = findFileDef(Doxygen::inputNameDict,g_fileName,ambig); //printf("handleLinkedWord(%s) g_context=%s\n",name.data(),g_context.data()); if (!g_insideHtmlLink && - (resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member,TRUE,fd) + (resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member,TRUE,fd,TRUE) || (!g_context.isEmpty() && // also try with global scope - resolveRef("",g_token->name,g_inSeeBlock,&compound,&member)) + resolveRef("",g_token->name,g_inSeeBlock,&compound,&member,FALSE,0,TRUE)) ) ) { @@ -1116,7 +1116,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children } DBG(("\n")); reparsetoken: - QString tokenName = g_token->name; + QCString tokenName = g_token->name; switch (tok) { case TK_COMMAND: @@ -1432,7 +1432,7 @@ handlepara: //--------------------------------------------------------------------------- -DocSymbol::SymType DocSymbol::decodeSymbol(const QString &symName,char *letter) +DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName,char *letter) { int l=symName.length(); DBG(("decodeSymbol(%s) l=%d\n",symName.data(),l)); @@ -1501,7 +1501,7 @@ DocSymbol::SymType DocSymbol::decodeSymbol(const QString &symName,char *letter) //--------------------------------------------------------------------------- static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children, - const QString &doc) + const QCString &doc) { int retval = RetVal_OK; @@ -1540,7 +1540,7 @@ static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children, //--------------------------------------------------------------------------- -static void readTextFileByName(const QString &file,QString &text) +static void readTextFileByName(const QCString &file,QCString &text) { bool ambig; FileDef *fd; @@ -1550,7 +1550,7 @@ static void readTextFileByName(const QString &file,QString &text) } else if (ambig) { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: included file name %s is ambigious" + warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: included file name %s is ambiguous" "Possible candidates:\n%s",file.data(), showFileDefMatches(Doxygen::exampleNameDict,file).data() ); @@ -1564,7 +1564,7 @@ static void readTextFileByName(const QString &file,QString &text) //--------------------------------------------------------------------------- -DocWord::DocWord(DocNode *parent,const QString &word) : +DocWord::DocWord(DocNode *parent,const QCString &word) : m_parent(parent), m_word(word) { //printf("new word %s url=%s\n",word.data(),g_searchUrl.data()); @@ -1576,9 +1576,9 @@ DocWord::DocWord(DocNode *parent,const QString &word) : //--------------------------------------------------------------------------- -DocLinkedWord::DocLinkedWord(DocNode *parent,const QString &word, - const QString &ref,const QString &file, - const QString &anchor,const QString &tooltip) : +DocLinkedWord::DocLinkedWord(DocNode *parent,const QCString &word, + const QCString &ref,const QCString &file, + const QCString &anchor,const QCString &tooltip) : m_parent(parent), m_word(word), m_ref(ref), m_file(file), m_relPath(g_relPath), m_anchor(anchor), m_tooltip(tooltip) @@ -1592,7 +1592,7 @@ DocLinkedWord::DocLinkedWord(DocNode *parent,const QString &word, //--------------------------------------------------------------------------- -DocAnchor::DocAnchor(DocNode *parent,const QString &id,bool newAnchor) +DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor) : m_parent(parent) { if (id.isEmpty()) @@ -1628,9 +1628,9 @@ DocAnchor::DocAnchor(DocNode *parent,const QString &id,bool newAnchor) //--------------------------------------------------------------------------- -DocVerbatim::DocVerbatim(DocNode *parent,const QString &context, - const QString &text, Type t,bool isExample, - const QString &exampleFile) +DocVerbatim::DocVerbatim(DocNode *parent,const QCString &context, + const QCString &text, Type t,bool isExample, + const QCString &exampleFile) : m_parent(parent), m_context(context), m_text(text), m_type(t), m_isExample(isExample), m_exampleFile(exampleFile), m_relPath(g_relPath) { @@ -1787,7 +1787,7 @@ void DocIncOperator::parse() void DocCopy::parse() { - QString doc,brief; + QCString doc,brief; Definition *def; if (findDocsForMemberOrCompound(m_link,&doc,&brief,&def)) { @@ -1882,7 +1882,7 @@ DocXRefItem::DocXRefItem(DocNode *parent,int id,const char *key) : bool DocXRefItem::parse() { - QString listName; + QCString listName; RefList *refList = Doxygen::xrefLists->find(m_key); if (refList && ( @@ -1929,7 +1929,7 @@ bool DocXRefItem::parse() DocFormula::DocFormula(DocNode *parent,int id) : m_parent(parent), m_relPath(g_relPath) { - QString formCmd; + QCString formCmd; formCmd.sprintf("\\form#%d",id); Formula *formula=Doxygen::formulaNameDict[formCmd]; if (formula) @@ -2096,7 +2096,7 @@ endsecreflist: //--------------------------------------------------------------------------- -DocInternalRef::DocInternalRef(DocNode *parent,const QString &ref) +DocInternalRef::DocInternalRef(DocNode *parent,const QCString &ref) : m_parent(parent), m_relPath(g_relPath) { int i=ref.find('#'); @@ -2147,7 +2147,7 @@ void DocInternalRef::parse() //--------------------------------------------------------------------------- -DocRef::DocRef(DocNode *parent,const QString &target,const QString &context) : +DocRef::DocRef(DocNode *parent,const QCString &target,const QCString &context) : m_parent(parent), m_refToSection(FALSE), m_refToAnchor(FALSE) { Definition *compound = 0; @@ -2289,7 +2289,7 @@ void DocRef::parse() //--------------------------------------------------------------------------- -DocLink::DocLink(DocNode *parent,const QString &target) : +DocLink::DocLink(DocNode *parent,const QCString &target) : m_parent(parent) { Definition *compound; @@ -2326,9 +2326,9 @@ DocLink::DocLink(DocNode *parent,const QString &target) : } -QString DocLink::parse(bool isJavaLink,bool isXmlLink) +QCString DocLink::parse(bool isJavaLink,bool isXmlLink) { - QString result; + QCString result; g_nodeStack.push(this); DBG(("DocLink::parse() start\n")); @@ -2369,7 +2369,7 @@ QString DocLink::parse(bool isJavaLink,bool isXmlLink) case TK_WORD: if (isJavaLink) // special case to detect closing } { - QString w = g_token->name; + QCString w = g_token->name; int p; if (w=="}") { @@ -2417,7 +2417,7 @@ endlink: //--------------------------------------------------------------------------- -DocDotFile::DocDotFile(DocNode *parent,const QString &name,const QString &context) : +DocDotFile::DocDotFile(DocNode *parent,const QCString &name,const QCString &context) : m_parent(parent), m_name(name), m_relPath(g_relPath), m_context(context) { } @@ -2480,7 +2480,7 @@ void DocDotFile::parse() } else if (ambig) { - warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: included dot file name %s is ambigious.\n" + warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: included dot file name %s is ambiguous.\n" "Possible candidates:\n%s",m_name.data(), showFileDefMatches(Doxygen::exampleNameDict,m_name).data() ); @@ -2499,7 +2499,7 @@ void DocDotFile::parse() //--------------------------------------------------------------------------- -DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QString &name,Type t) : +DocImage::DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name,Type t) : m_parent(parent), m_attribs(attribs), m_name(name), m_type(t), m_relPath(g_relPath) { @@ -3314,7 +3314,7 @@ int DocHtmlDescTitle::parse() { case TK_COMMAND: { - QString cmdName=g_token->name; + QCString cmdName=g_token->name; bool isJavaLink=FALSE; switch (Mappers::cmdMapper->map(cmdName)) { @@ -3370,7 +3370,7 @@ int DocHtmlDescTitle::parse() doctokenizerYYsetStatePara(); DocLink *lnk = new DocLink(this,g_token->name); m_children.append(lnk); - QString leftOver = lnk->parse(isJavaLink); + QCString leftOver = lnk->parse(isJavaLink); if (!leftOver.isEmpty()) { m_children.append(new DocWord(this,leftOver)); @@ -3831,7 +3831,7 @@ void DocTitle::parse() ASSERT(n==this); } -void DocTitle::parseFromString(const QString &text) +void DocTitle::parseFromString(const QCString &text) { m_children.append(new DocWord(this,text)); } @@ -3903,7 +3903,7 @@ int DocSimpleSect::parseRcs() m_title = new DocTitle(this); m_title->parseFromString(g_token->name); - QString text = g_token->text; + QCString text = g_token->text; docParserPushContext(); // this will create a new g_token internalValidatingParseDoc(this,m_children,text); docParserPopContext(); // this will restore the old g_token @@ -3952,7 +3952,7 @@ int DocSimpleSect::parseXml() return retval; } -void DocSimpleSect::appendLinkWord(const QString &word) +void DocSimpleSect::appendLinkWord(const QCString &word) { DocPara *p; if (m_children.isEmpty() || m_children.last()->kind()!=DocNode::Kind_Para) @@ -4001,7 +4001,7 @@ QCString DocSimpleSect::typeString() const //-------------------------------------------------------------------------- -int DocParamList::parse(const QString &cmdName) +int DocParamList::parse(const QCString &cmdName) { int retval=RetVal_OK; DBG(("DocParamList::parse() start\n")); @@ -4055,7 +4055,7 @@ endparamlist: return retval; } -int DocParamList::parseXml(const QString ¶mName) +int DocParamList::parseXml(const QCString ¶mName) { int retval=RetVal_OK; DBG(("DocParamList::parseXml() start\n")); @@ -4125,7 +4125,7 @@ int DocParamList::parseXml(const QString ¶mName) //-------------------------------------------------------------------------- -int DocParamSect::parse(const QString &cmdName,bool xmlContext, Direction d) +int DocParamSect::parse(const QCString &cmdName,bool xmlContext, Direction d) { int retval=RetVal_OK; DBG(("DocParamSect::parse() start\n")); @@ -4191,7 +4191,7 @@ int DocPara::handleSimpleSection(DocSimpleSect::Type t, bool xmlContext) return (rv!=TK_NEWPARA) ? rv : RetVal_OK; } -int DocPara::handleParamSection(const QString &cmdName, +int DocPara::handleParamSection(const QCString &cmdName, DocParamSect::Type t, bool xmlContext=FALSE, int direction=DocParamSect::Unspecified) @@ -4235,7 +4235,7 @@ int DocPara::handleXRefItem() return retval; } -void DocPara::handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t) +void DocPara::handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t) { DBG(("handleIncludeOperator(%s)\n",cmdName.data())); int tok=doctokenizerYYlex(); @@ -4286,7 +4286,7 @@ void DocPara::handleIncludeOperator(const QString &cmdName,DocIncOperator::Type op->parse(); } -void DocPara::handleImage(const QString &cmdName) +void DocPara::handleImage(const QCString &cmdName) { int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) @@ -4310,7 +4310,7 @@ void DocPara::handleImage(const QString &cmdName) return; } DocImage::Type t; - QString imgType = g_token->name.lower(); + QCString imgType = g_token->name.lower(); if (imgType=="html") t=DocImage::Html; else if (imgType=="latex") t=DocImage::Latex; else if (imgType=="rtf") t=DocImage::Rtf; @@ -4336,7 +4336,7 @@ void DocPara::handleImage(const QString &cmdName) img->parse(); } -void DocPara::handleDotFile(const QString &cmdName) +void DocPara::handleDotFile(const QCString &cmdName) { int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) @@ -4354,13 +4354,13 @@ void DocPara::handleDotFile(const QString &cmdName) tokToString(tok),cmdName.data()); return; } - QString name = g_token->name; + QCString name = g_token->name; DocDotFile *df = new DocDotFile(this,name,g_context); m_children.append(df); df->parse(); } -void DocPara::handleLink(const QString &cmdName,bool isJavaLink) +void DocPara::handleLink(const QCString &cmdName,bool isJavaLink) { int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) @@ -4380,14 +4380,14 @@ void DocPara::handleLink(const QString &cmdName,bool isJavaLink) doctokenizerYYsetStatePara(); DocLink *lnk = new DocLink(this,g_token->name); m_children.append(lnk); - QString leftOver = lnk->parse(isJavaLink); + QCString leftOver = lnk->parse(isJavaLink); if (!leftOver.isEmpty()) { m_children.append(new DocWord(this,leftOver)); } } -void DocPara::handleRef(const QString &cmdName) +void DocPara::handleRef(const QCString &cmdName) { DBG(("handleRef(%s)\n",cmdName.data())); int tok=doctokenizerYYlex(); @@ -4414,7 +4414,7 @@ endref: } -void DocPara::handleInclude(const QString &cmdName,DocInclude::Type t) +void DocPara::handleInclude(const QCString &cmdName,DocInclude::Type t) { DBG(("handleInclude(%s)\n",cmdName.data())); int tok=doctokenizerYYlex(); @@ -4444,7 +4444,7 @@ void DocPara::handleInclude(const QString &cmdName,DocInclude::Type t) inc->parse(); } -void DocPara::handleSection(const QString &cmdName) +void DocPara::handleSection(const QCString &cmdName) { // get the argument of the section command. int tok=doctokenizerYYlex(); @@ -4484,7 +4484,7 @@ int DocPara::handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level) // For XML tags whose content is stored in attributes rather than // contained within the element, we need a way to inject the attribute // text into the current paragraph. -bool DocPara::injectToken(int tok,const QString &tokText) +bool DocPara::injectToken(int tok,const QCString &tokText) { g_token->name = tokText; return defaultHandleToken(this,tok,m_children); @@ -4532,7 +4532,7 @@ void DocPara::handleInheritDoc() } -int DocPara::handleCommand(const QString &cmdName) +int DocPara::handleCommand(const QCString &cmdName) { DBG(("handleCommand(%s)\n",cmdName.data())); int retval = RetVal_OK; @@ -4925,7 +4925,7 @@ int DocPara::handleCommand(const QString &cmdName) static bool findAttribute(const HtmlAttribList &tagHtmlAttribs, const char *attrName, - QString *result) + QCString *result) { HtmlAttribListIterator li(tagHtmlAttribs); @@ -4941,7 +4941,7 @@ static bool findAttribute(const HtmlAttribList &tagHtmlAttribs, return FALSE; } -int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs) +int DocPara::handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs) { DBG(("handleHtmlStartTag(%s,%d)\n",tagName.data(),tagHtmlAttribs.count())); int retval=RetVal_OK; @@ -5136,7 +5136,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag case XML_PARAM: case XML_TYPEPARAM: { - QString paramName; + QCString paramName; if (findAttribute(tagHtmlAttribs,"name",¶mName)) { retval = handleParamSection(paramName, @@ -5152,7 +5152,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag case XML_PARAMREF: case XML_TYPEPARAMREF: { - QString paramName; + QCString paramName; if (findAttribute(tagHtmlAttribs,"name",¶mName)) { //printf("paramName=%s\n",paramName.data()); @@ -5169,7 +5169,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag break; case XML_EXCEPTION: { - QString exceptName; + QCString exceptName; if (findAttribute(tagHtmlAttribs,"cref",&exceptName)) { retval = handleParamSection(exceptName,DocParamSect::Exception,TRUE); @@ -5212,7 +5212,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag // C# specification is extremely vague about this (but what else // can we expect from Microsoft...) { - QString cref; + QCString cref; //printf("XML_SEE: empty tag=%d\n",g_token->emptyTag); if (findAttribute(tagHtmlAttribs,"cref",&cref)) { @@ -5232,7 +5232,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag doctokenizerYYsetStatePara(); DocLink *lnk = new DocLink(this,cref); m_children.append(lnk); - QString leftOver = lnk->parse(FALSE,TRUE); + QCString leftOver = lnk->parse(FALSE,TRUE); if (!leftOver.isEmpty()) { m_children.append(new DocWord(this,leftOver)); @@ -5247,7 +5247,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag break; case XML_SEEALSO: { - QString cref; + QCString cref; if (findAttribute(tagHtmlAttribs,"cref",&cref)) { // Look for an existing "see" section @@ -5279,7 +5279,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag break; case XML_LIST: { - QString type; + QCString type; findAttribute(tagHtmlAttribs,"type",&type); DocHtmlList::Type listType = DocHtmlList::Unordered; if (type=="number") @@ -5317,7 +5317,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag return retval; } -int DocPara::handleHtmlEndTag(const QString &tagName) +int DocPara::handleHtmlEndTag(const QCString &tagName) { DBG(("handleHtmlEndTag(%s)\n",tagName.data())); int tagId = Mappers::htmlTagMapper->map(tagName); @@ -6220,8 +6220,8 @@ DocNode *validatingParseDoc(const char *fileName,int startLine, g_fileName = fileName; g_relPath = (!linkFromIndex && ctx) ? - QString(relativePathToRoot(ctx->getOutputFileBase())) : - QString(""); + QCString(relativePathToRoot(ctx->getOutputFileBase())) : + QCString(""); //printf("ctx->name=%s relPath=%s\n",ctx->name().data(),g_relPath.data()); g_memberDef = md; g_nodeStack.clear(); diff --git a/src/docparser.h b/src/docparser.h index 51a8455..6deb1f5 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -22,8 +22,7 @@ #include <stdio.h> #include <qlist.h> -#include <qstrlist.h> -#include <qstring.h> +#include <qcstring.h> #include "docvisitor.h" #include "htmlattrib.h" @@ -189,15 +188,15 @@ template<class T> class CompAccept class DocWord : public DocNode { public: - DocWord(DocNode *parent,const QString &word); - QString word() const { return m_word; } + DocWord(DocNode *parent,const QCString &word); + QCString word() const { return m_word; } Kind kind() const { return Kind_Word; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } private: DocNode *m_parent; - QString m_word; + QCString m_word; }; /*! @brief Node representing a word that can be linked to something @@ -205,36 +204,36 @@ class DocWord : public DocNode class DocLinkedWord : public DocNode { public: - DocLinkedWord(DocNode *parent,const QString &word, - const QString &ref,const QString &file, - const QString &anchor,const QString &tooltip); - QString word() const { return m_word; } + DocLinkedWord(DocNode *parent,const QCString &word, + const QCString &ref,const QCString &file, + const QCString &anchor,const QCString &tooltip); + QCString word() const { return m_word; } Kind kind() const { return Kind_LinkedWord; } DocNode *parent() const { return m_parent; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString ref() const { return m_ref; } - QString anchor() const { return m_anchor; } - QString tooltip() const { return m_tooltip; } + QCString file() const { return m_file; } + QCString relPath() const { return m_relPath; } + QCString ref() const { return m_ref; } + QCString anchor() const { return m_anchor; } + QCString tooltip() const { return m_tooltip; } void accept(DocVisitor *v) { v->visit(this); } private: DocNode *m_parent; - QString m_word; - QString m_ref; - QString m_file; - QString m_relPath; - QString m_anchor; - QString m_tooltip; + QCString m_word; + QCString m_ref; + QCString m_file; + QCString m_relPath; + QCString m_anchor; + QCString m_tooltip; }; /*! @brief Node representing an URL (or email address) */ class DocURL : public DocNode { public: - DocURL(DocNode *parent,const QString &url,bool isEmail) : + DocURL(DocNode *parent,const QCString &url,bool isEmail) : m_parent(parent), m_url(url), m_isEmail(isEmail) {} - QString url() const { return m_url; } + QCString url() const { return m_url; } Kind kind() const { return Kind_URL; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } @@ -242,7 +241,7 @@ class DocURL : public DocNode private: DocNode *m_parent; - QString m_url; + QCString m_url; bool m_isEmail; }; @@ -278,17 +277,17 @@ class DocHorRuler : public DocNode class DocAnchor : public DocNode { public: - DocAnchor(DocNode *parent,const QString &id,bool newAnchor); + DocAnchor(DocNode *parent,const QCString &id,bool newAnchor); Kind kind() const { return Kind_Anchor; } DocNode *parent() const { return m_parent; } - QString anchor() const { return m_anchor; } - QString file() const { return m_file; } + QCString anchor() const { return m_anchor; } + QCString file() const { return m_file; } void accept(DocVisitor *v) { v->visit(this); } private: DocNode *m_parent; - QString m_anchor; - QString m_file; + QCString m_anchor; + QCString m_file; }; /*! @brief Node representing a style change */ @@ -336,7 +335,7 @@ class DocSymbol : public DocNode Kind kind() const { return Kind_Symbol; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } - static SymType decodeSymbol(const QString &symName,char *letter); + static SymType decodeSymbol(const QCString &symName,char *letter); private: DocNode *m_parent; @@ -348,15 +347,15 @@ class DocSymbol : public DocNode class DocWhiteSpace : public DocNode { public: - DocWhiteSpace(DocNode *parent,const QString &chars) : + DocWhiteSpace(DocNode *parent,const QCString &chars) : m_parent(parent), m_chars(chars) {} Kind kind() const { return Kind_WhiteSpace; } - QString chars() const { return m_chars; } + QCString chars() const { return m_chars; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } private: DocNode *m_parent; - QString m_chars; + QCString m_chars; }; /*! @brief Node representing a verbatim, unparsed text fragment */ @@ -364,27 +363,27 @@ class DocVerbatim : public DocNode { public: enum Type { Code, HtmlOnly, ManOnly, LatexOnly, XmlOnly, Verbatim, Dot, Msc }; - DocVerbatim(DocNode *parent,const QString &context, - const QString &text, Type t,bool isExample, - const QString &exampleFile); + DocVerbatim(DocNode *parent,const QCString &context, + const QCString &text, Type t,bool isExample, + const QCString &exampleFile); Kind kind() const { return Kind_Verbatim; } Type type() const { return m_type; } - QString text() const { return m_text; } - QString context() const { return m_context; } + QCString text() const { return m_text; } + QCString context() const { return m_context; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } bool isExample() const { return m_isExample; } - QString exampleFile() const { return m_exampleFile; } - QString relPath() const { return m_relPath; } + QCString exampleFile() const { return m_exampleFile; } + QCString relPath() const { return m_relPath; } private: DocNode *m_parent; - QString m_context; - QString m_text; + QCString m_context; + QCString m_text; Type m_type; bool m_isExample; - QString m_exampleFile; - QString m_relPath; + QCString m_exampleFile; + QCString m_relPath; }; @@ -393,36 +392,36 @@ class DocInclude : public DocNode { public: enum Type { Include, DontInclude, VerbInclude, HtmlInclude, IncWithLines }; - DocInclude(DocNode *parent,const QString &file, - const QString context, Type t, - bool isExample,const QString exampleFile) : + DocInclude(DocNode *parent,const QCString &file, + const QCString context, Type t, + bool isExample,const QCString exampleFile) : m_parent(parent), m_file(file), m_context(context), m_type(t), m_isExample(isExample), m_exampleFile(exampleFile) {} Kind kind() const { return Kind_Include; } - QString file() const { return m_file; } - QString extension() const { int i=m_file.findRev('.'); + QCString file() const { return m_file; } + QCString extension() const { int i=m_file.findRev('.'); if (i!=-1) return m_file.right(m_file.length()-i); else return ""; } Type type() const { return m_type; } - QString text() const { return m_text; } - QString context() const { return m_context; } + QCString text() const { return m_text; } + QCString context() const { return m_context; } DocNode *parent() const { return m_parent; } bool isExample() const { return m_isExample; } - QString exampleFile() const { return m_exampleFile; } + QCString exampleFile() const { return m_exampleFile; } void accept(DocVisitor *v) { v->visit(this); } void parse(); private: DocNode *m_parent; - QString m_file; - QString m_context; - QString m_text; + QCString m_file; + QCString m_context; + QCString m_text; Type m_type; bool m_isExample; - QString m_exampleFile; + QCString m_exampleFile; }; /*! @brief Node representing a include/dontinclude operator block */ @@ -430,16 +429,16 @@ class DocIncOperator : public DocNode { public: enum Type { Line, SkipLine, Skip, Until }; - DocIncOperator(DocNode *parent,Type t,const QString &pat, - const QString &context,bool isExample,const QString &exampleFile) : + DocIncOperator(DocNode *parent,Type t,const QCString &pat, + const QCString &context,bool isExample,const QCString &exampleFile) : m_parent(parent), m_type(t), m_pattern(pat), m_context(context), m_isFirst(FALSE), m_isLast(FALSE), m_isExample(isExample), m_exampleFile(exampleFile) {} Kind kind() const { return Kind_IncOperator; } Type type() const { return m_type; } - QString text() const { return m_text; } - QString pattern() const { return m_pattern; } - QString context() const { return m_context; } + QCString text() const { return m_text; } + QCString pattern() const { return m_pattern; } + QCString context() const { return m_context; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } bool isFirst() const { return m_isFirst; } @@ -447,19 +446,19 @@ class DocIncOperator : public DocNode void markFirst(bool v=TRUE) { m_isFirst = v; } void markLast(bool v=TRUE) { m_isLast = v; } bool isExample() const { return m_isExample; } - QString exampleFile() const { return m_exampleFile; } + QCString exampleFile() const { return m_exampleFile; } void parse(); private: DocNode *m_parent; Type m_type; - QString m_text; - QString m_pattern; - QString m_context; + QCString m_text; + QCString m_pattern; + QCString m_context; bool m_isFirst; bool m_isLast; bool m_isExample; - QString m_exampleFile; + QCString m_exampleFile; }; /*! @brief Node representing an item of a cross-referenced list */ @@ -468,9 +467,9 @@ class DocFormula : public DocNode public: DocFormula(DocNode *parent,int id); Kind kind() const { return Kind_Formula; } - QString name() const { return m_name; } - QString text() const { return m_text; } - QString relPath() const { return m_relPath; } + QCString name() const { return m_name; } + QCString text() const { return m_text; } + QCString relPath() const { return m_relPath; } int id() const { return m_id; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { v->visit(this); } @@ -478,9 +477,9 @@ class DocFormula : public DocNode private: DocNode *m_parent; - QString m_name; - QString m_text; - QString m_relPath; + QCString m_name; + QCString m_text; + QCString m_relPath; int m_id; }; @@ -495,12 +494,12 @@ class DocIndexEntry : public DocNode DocNode *parent() const { return m_parent; } Definition *scope() const { return m_scope; } MemberDef *member() const { return m_member; } - QString entry() const { return m_entry; } + QCString entry() const { return m_entry; } void accept(DocVisitor *v) { v->visit(this); } private: DocNode *m_parent; - QString m_entry; + QCString m_entry; Definition *m_scope; MemberDef *m_member; }; @@ -511,18 +510,18 @@ class DocIndexEntry : public DocNode class DocCopy : public CompAccept<DocCopy>, public DocNode { public: - DocCopy(DocNode *parent,const QString &link,bool copyBrief,bool copyDetails) + DocCopy(DocNode *parent,const QCString &link,bool copyBrief,bool copyDetails) : m_parent(parent), m_link(link), m_copyBrief(copyBrief), m_copyDetails(copyDetails) { } Kind kind() const { return Kind_Copy; } - QString link() const { return m_link; } + QCString link() const { return m_link; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocCopy>::accept(this,v); } void parse(); private: DocNode *m_parent; - QString m_link; + QCString m_link; bool m_copyBrief; bool m_copyDetails; }; @@ -557,7 +556,7 @@ class DocTitle : public CompAccept<DocTitle>, public DocNode public: DocTitle(DocNode *parent) : m_parent(parent) {} void parse(); - void parseFromString(const QString &title); + void parseFromString(const QCString &title); Kind kind() const { return Kind_Title; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocTitle>::accept(this,v); } @@ -573,12 +572,12 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode //enum Type { Bug, Test, Todo, Deprecated }; DocXRefItem(DocNode *parent,int id,const char *key); Kind kind() const { return Kind_XRefItem; } - QString file() const { return m_file; } - QString anchor() const { return m_anchor; } - QString title() const { return m_title; } + QCString file() const { return m_file; } + QCString anchor() const { return m_anchor; } + QCString title() const { return m_title; } DocNode *parent() const { return m_parent; } - QString relPath() const { return m_relPath; } - QString key() const { return m_key; } + QCString relPath() const { return m_relPath; } + QCString key() const { return m_key; } void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); } bool parse(); const QList<DocNode> &children() const { return m_children; } @@ -586,11 +585,11 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode private: DocNode *m_parent; int m_id; - QString m_key; - QString m_file; - QString m_anchor; - QString m_title; - QString m_relPath; + QCString m_key; + QCString m_file; + QCString m_anchor; + QCString m_title; + QCString m_relPath; }; /*! @brief Node representing an image */ @@ -598,15 +597,15 @@ class DocImage : public CompAccept<DocImage>, public DocNode { public: enum Type { Html, Latex, Rtf }; - DocImage(DocNode *parent,const HtmlAttribList &attribs,const QString &name,Type t); + DocImage(DocNode *parent,const HtmlAttribList &attribs,const QCString &name,Type t); Kind kind() const { return Kind_Image; } Type type() const { return m_type; } - QString name() const { return m_name; } + QCString name() const { return m_name; } DocNode *parent() const { return m_parent; } bool hasCaption() const { return !m_children.isEmpty(); } - QString width() const { return m_width; } - QString height() const { return m_height; } - QString relPath() const { return m_relPath; } + QCString width() const { return m_width; } + QCString height() const { return m_height; } + QCString relPath() const { return m_relPath; } const HtmlAttribList &attribs() const { return m_attribs; } void accept(DocVisitor *v) { CompAccept<DocImage>::accept(this,v); } void parse(); @@ -614,74 +613,74 @@ class DocImage : public CompAccept<DocImage>, public DocNode private: DocNode *m_parent; HtmlAttribList m_attribs; - QString m_name; + QCString m_name; Type m_type; - QString m_width; - QString m_height; - QString m_relPath; + QCString m_width; + QCString m_height; + QCString m_relPath; }; /*! @brief Node representing a dot file */ class DocDotFile : public CompAccept<DocDotFile>, public DocNode { public: - DocDotFile(DocNode *parent,const QString &name,const QString &context); + DocDotFile(DocNode *parent,const QCString &name,const QCString &context); void parse(); Kind kind() const { return Kind_DotFile; } - QString name() const { return m_name; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } + QCString name() const { return m_name; } + QCString file() const { return m_file; } + QCString relPath() const { return m_relPath; } bool hasCaption() const { return !m_children.isEmpty(); } - QString width() const { return m_width; } - QString height() const { return m_height; } + QCString width() const { return m_width; } + QCString height() const { return m_height; } DocNode *parent() const { return m_parent; } - QString context() const { return m_context; } + QCString context() const { return m_context; } void accept(DocVisitor *v) { CompAccept<DocDotFile>::accept(this,v); } private: DocNode *m_parent; - QString m_name; - QString m_file; - QString m_relPath; - QString m_width; - QString m_height; - QString m_context; + QCString m_name; + QCString m_file; + QCString m_relPath; + QCString m_width; + QCString m_height; + QCString m_context; }; /*! @brief Node representing a link to some item */ class DocLink : public CompAccept<DocLink>, public DocNode { public: - DocLink(DocNode *parent,const QString &target); - QString parse(bool,bool isXmlLink=FALSE); + DocLink(DocNode *parent,const QCString &target); + QCString parse(bool,bool isXmlLink=FALSE); Kind kind() const { return Kind_Link; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString ref() const { return m_ref; } - QString anchor() const { return m_anchor; } + QCString file() const { return m_file; } + QCString relPath() const { return m_relPath; } + QCString ref() const { return m_ref; } + QCString anchor() const { return m_anchor; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocLink>::accept(this,v); } private: DocNode *m_parent; - QString m_file; - QString m_relPath; - QString m_ref; - QString m_anchor; - QString m_refText; + QCString m_file; + QCString m_relPath; + QCString m_ref; + QCString m_anchor; + QCString m_refText; }; /*! @brief Node representing a reference to some item */ class DocRef : public CompAccept<DocRef>, public DocNode { public: - DocRef(DocNode *parent,const QString &target,const QString &context); + DocRef(DocNode *parent,const QCString &target,const QCString &context); void parse(); Kind kind() const { return Kind_Ref; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString ref() const { return m_ref; } - QString anchor() const { return m_anchor; } - QString targetTitle() const { return m_text; } + QCString file() const { return m_file; } + QCString relPath() const { return m_relPath; } + QCString ref() const { return m_ref; } + QCString anchor() const { return m_anchor; } + QCString targetTitle() const { return m_text; } DocNode *parent() const { return m_parent; } bool hasLinkText() const { return !m_children.isEmpty(); } bool refToAnchor() const { return m_refToAnchor; } @@ -692,40 +691,40 @@ class DocRef : public CompAccept<DocRef>, public DocNode DocNode * m_parent; bool m_refToSection; bool m_refToAnchor; - QString m_file; - QString m_relPath; - QString m_ref; - QString m_anchor; - QString m_text; + QCString m_file; + QCString m_relPath; + QCString m_ref; + QCString m_anchor; + QCString m_text; }; /*! @brief Node representing an internal reference to some item */ class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode { public: - DocInternalRef(DocNode *parent,const QString &target); + DocInternalRef(DocNode *parent,const QCString &target); void parse(); Kind kind() const { return Kind_Ref; } - QString file() const { return m_file; } - QString relPath() const { return m_relPath; } - QString anchor() const { return m_anchor; } + QCString file() const { return m_file; } + QCString relPath() const { return m_relPath; } + QCString anchor() const { return m_anchor; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocInternalRef>::accept(this,v); } private: DocNode * m_parent; - QString m_file; - QString m_relPath; - QString m_anchor; + QCString m_file; + QCString m_relPath; + QCString m_anchor; }; /*! @brief Node representing a Language specific section */ //class DocLanguage : public CompAccept<DocLanguage>, public DocNode //{ // public: -// DocLanguage(DocNode *parent,const QString &id) : +// DocLanguage(DocNode *parent,const QCString &id) : // m_parent(parent), m_id(id) {} -// QString id() const { return m_id; } +// QCString id() const { return m_id; } // Kind kind() const { return Kind_Language; } // DocNode *parent() const { return m_parent; } // void accept(DocVisitor *v) { CompAccept<DocLanguage>::accept(this,v); } @@ -733,17 +732,17 @@ class DocInternalRef : public CompAccept<DocInternalRef>, public DocNode // // private: // DocNode * m_parent; -// QString m_id; +// QCString m_id; //}; /*! @brief Node representing a Hypertext reference */ class DocHRef : public CompAccept<DocHRef>, public DocNode { public: - DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QString &url) : + DocHRef(DocNode *parent,const HtmlAttribList &attribs,const QCString &url) : m_parent(parent), m_attribs(attribs), m_url(url) {} int parse(); - QString url() const { return m_url; } + QCString url() const { return m_url; } Kind kind() const { return Kind_HRef; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocHRef>::accept(this,v); } @@ -752,7 +751,7 @@ class DocHRef : public CompAccept<DocHRef>, public DocNode private: DocNode * m_parent; HtmlAttribList m_attribs; - QString m_url; + QCString m_url; }; /*! @brief Node Html heading */ @@ -812,14 +811,14 @@ class DocHtmlDescList : public CompAccept<DocHtmlDescList>, public DocNode class DocSection : public CompAccept<DocSection>, public DocNode { public: - DocSection(DocNode *parent,int level,const QString &id) : + DocSection(DocNode *parent,int level,const QCString &id) : m_parent(parent), m_level(level), m_id(id) {} Kind kind() const { return Kind_Section; } int level() const { return m_level; } - QString title() const { return m_title; } - QString anchor() const { return m_anchor; } - QString id() const { return m_id; } - QString file() const { return m_file; } + QCString title() const { return m_title; } + QCString anchor() const { return m_anchor; } + QCString id() const { return m_id; } + QCString file() const { return m_file; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocSection>::accept(this,v); } int parse(); @@ -827,22 +826,22 @@ class DocSection : public CompAccept<DocSection>, public DocNode private: DocNode *m_parent; int m_level; - QString m_id; - QString m_title; - QString m_anchor; - QString m_file; + QCString m_id; + QCString m_title; + QCString m_anchor; + QCString m_file; }; /*! @brief Node representing a reference to a section */ class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode { public: - DocSecRefItem(DocNode *parent,const QString &target) : + DocSecRefItem(DocNode *parent,const QCString &target) : m_parent(parent), m_target(target) {} Kind kind() const { return Kind_SecRefItem; } - QString target() const { return m_target; } - QString file() const { return m_file; } - QString anchor() const { return m_anchor; } + QCString target() const { return m_target; } + QCString file() const { return m_file; } + QCString anchor() const { return m_anchor; } DocNode *parent() const { return m_parent; } void accept(DocVisitor *v) { CompAccept<DocSecRefItem>::accept(this,v); } void parse(); @@ -850,9 +849,9 @@ class DocSecRefItem : public CompAccept<DocSecRefItem>, public DocNode private: DocNode *m_parent; - QString m_target; - QString m_file; - QString m_anchor; + QCString m_target; + QCString m_file; + QCString m_anchor; }; /*! @brief Node representing a list of section references */ @@ -937,7 +936,7 @@ class DocSimpleSect : public CompAccept<DocSimpleSect>, public DocNode int parse(bool userTitle,bool needsSeparator); int parseRcs(); int parseXml(); - void appendLinkWord(const QString &word); + void appendLinkWord(const QCString &word); const QList<DocNode> &children() const { return m_children; } private: @@ -975,7 +974,7 @@ class DocParamSect : public CompAccept<DocParamSect>, public DocNode }; DocParamSect(DocNode *parent,Type t) : m_parent(parent), m_type(t) {} - int parse(const QString &cmdName,bool xmlContext,Direction d); + int parse(const QCString &cmdName,bool xmlContext,Direction d); Kind kind() const { return Kind_ParamSect; } Type type() const { return m_type; } DocNode *parent() const { return m_parent; } @@ -1005,29 +1004,29 @@ class DocPara : public CompAccept<DocPara>, public DocNode const QList<DocNode> &children() const { return m_children; } QList<DocNode> &children() { return m_children; } - int handleCommand(const QString &cmdName); - int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs); - int handleHtmlEndTag(const QString &tagName); + int handleCommand(const QCString &cmdName); + int handleHtmlStartTag(const QCString &tagName,const HtmlAttribList &tagHtmlAttribs); + int handleHtmlEndTag(const QCString &tagName); int handleSimpleSection(DocSimpleSect::Type t,bool xmlContext=FALSE); int handleXRefItem(); - int handleParamSection(const QString &cmdName,DocParamSect::Type t, + int handleParamSection(const QCString &cmdName,DocParamSect::Type t, bool xmlContext, int direction); - void handleIncludeOperator(const QString &cmdName,DocIncOperator::Type t); - void handleImage(const QString &cmdName); - void handleDotFile(const QString &cmdName); - void handleInclude(const QString &cmdName,DocInclude::Type t); - void handleLink(const QString &cmdName,bool isJavaLink); - void handleRef(const QString &cmdName); - void handleSection(const QString &cmdName); + void handleIncludeOperator(const QCString &cmdName,DocIncOperator::Type t); + void handleImage(const QCString &cmdName); + void handleDotFile(const QCString &cmdName); + void handleInclude(const QCString &cmdName,DocInclude::Type t); + void handleLink(const QCString &cmdName,bool isJavaLink); + void handleRef(const QCString &cmdName); + void handleSection(const QCString &cmdName); void handleInheritDoc(); int handleStartCode(); int handleHtmlHeader(const HtmlAttribList &tagHtmlAttribs,int level); - bool injectToken(int tok,const QString &tokText); + bool injectToken(int tok,const QCString &tokText); private: DocNode *m_parent; - QString m_sectionId; + QCString m_sectionId; bool m_isFirst; bool m_isLast; }; @@ -1057,8 +1056,8 @@ class DocParamList : public DocNode for (cli.toFirst();(n=cli.current());++cli) n->accept(v); v->visitPost(this); } - int parse(const QString &cmdName); - int parseXml(const QString ¶mName); + int parse(const QCString &cmdName); + int parseXml(const QCString ¶mName); private: DocNode * m_parent; diff --git a/src/docsets.cpp b/src/docsets.cpp index 449ac1f..76e90db 100644 --- a/src/docsets.cpp +++ b/src/docsets.cpp @@ -44,6 +44,10 @@ void DocSets::initialize() if (bundleId.isEmpty()) bundleId="org.doxygen.Project"; QCString feedName = Config_getString("DOCSET_FEEDNAME"); if (feedName.isEmpty()) feedName="FeedName"; + QCString publisherId = Config_getString("DOCSET_PUBLISHER_ID"); + if (publisherId.isEmpty()) publisherId="PublisherId"; + QCString publisherName = Config_getString("DOCSET_PUBLISHER_NAME"); + if (publisherName.isEmpty()) publisherName="PublisherName"; // -- write Makefile { @@ -54,8 +58,7 @@ void DocSets::initialize() err("Could not open file %s for writing\n",mfName.data()); exit(1); } - QTextStream ts(&makefile); - ts.setEncoding(QTextStream::UnicodeUTF8); + FTextStream ts(&makefile); ts << "DOCSET_NAME=" << bundleId << ".docset\n" "DOCSET_CONTENTS=$(DOCSET_NAME)/Contents\n" @@ -103,8 +106,7 @@ void DocSets::initialize() err("Could not open file %s for writing\n",plName.data()); exit(1); } - QTextStream ts(&plist); - ts.setEncoding(QTextStream::UnicodeUTF8); + FTextStream ts(&plist); ts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" "<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\"\n" @@ -117,6 +119,10 @@ void DocSets::initialize() " <string>" << bundleId << ".docset</string>\n" " <key>DocSetFeedName</key>\n" " <string>" << feedName << "</string>\n" + " <key>DocSetPublisherIdentifier</key>\n" + " <string>" << publisherId << "</string>\n" + " <key>DocSetPublisherName</key>\n" + " <string>" << publisherName << "</string>\n" "</dict>\n" "</plist>\n"; } @@ -131,7 +137,6 @@ void DocSets::initialize() } QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index"; m_nts.setDevice(m_nf); - m_nts.setEncoding(QTextStream::UnicodeUTF8); m_nts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl; m_nts << "<DocSetNodes version=\"1.0\">" << endl; m_nts << " <TOC>" << endl; @@ -151,7 +156,6 @@ void DocSets::initialize() exit(1); } m_tts.setDevice(m_tf); - m_tts.setEncoding(QTextStream::UnicodeUTF8); m_tts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl; m_tts << "<Tokens version=\"1.0\">" << endl; } @@ -218,12 +222,11 @@ void DocSets::addContentsItem(bool isDir, m_firstNode.at(m_dc-1)=FALSE; m_nts << indent() << " <Node>" << endl; m_nts << indent() << " <Name>" << convertToXML(name) << "</Name>" << endl; - m_nts << indent() << " <Path>" << file << Doxygen::htmlFileExtension; + m_nts << indent() << " <Path>" << file << Doxygen::htmlFileExtension << "</Path>" << endl; if (anchor) { - m_nts << "#" << anchor; + m_nts << indent() << " <Anchor>" << anchor << "</Anchor>" << endl; } - m_nts << "</Path>" << endl; } } @@ -409,7 +412,7 @@ void DocSets::addIndexItem(Definition *context,MemberDef *md, } } -void DocSets::writeToken(QTextStream &t, +void DocSets::writeToken(FTextStream &t, const Definition *d, const QCString &type, const QCString &lang, diff --git a/src/docsets.h b/src/docsets.h index d4558d0..31b5263 100644 --- a/src/docsets.h +++ b/src/docsets.h @@ -17,10 +17,9 @@ #define DOCSETS_H #include "qtbc.h" -#include <qtextstream.h> #include <qstrlist.h> #include "sortdict.h" - +#include "ftextstream.h" #include "index.h" class QFile; @@ -56,7 +55,7 @@ class DocSets : public IndexIntf void addStyleSheetFile(const char *) {} private: - void writeToken(QTextStream &t, const Definition *d, + void writeToken(FTextStream &t, const Definition *d, const QCString &type, const QCString &lang, const char *scope=0, const char *anchor=0, const char *decl=0); @@ -75,8 +74,8 @@ class DocSets : public IndexIntf QCString indent(); QFile *m_nf; QFile *m_tf; - QTextStream m_nts; - QTextStream m_tts; + FTextStream m_nts; + FTextStream m_tts; int m_dc; int m_id; QArray<bool> m_firstNode; diff --git a/src/doctokenizer.h b/src/doctokenizer.h index 036d982..7660385 100644 --- a/src/doctokenizer.h +++ b/src/doctokenizer.h @@ -19,7 +19,7 @@ #ifndef _DOCTOKENIZER_H #define _DOCTOKENIZER_H -#include <qstring.h> +#include <qcstring.h> #include <qlist.h> #include "htmlattrib.h" @@ -68,10 +68,10 @@ struct TokenInfo char unknownChar; // command token - QString name; + QCString name; // command text (RCS tag) - QString text; + QCString text; // comment blocks @@ -80,14 +80,14 @@ struct TokenInfo int indent; // sections - QString sectionId; + QCString sectionId; // simple section - QString simpleSectName; - QString simpleSectText; + QCString simpleSectName; + QCString simpleSectText; // verbatim fragment - QString verb; + QCString verb; // xrefitem int id; @@ -98,7 +98,7 @@ struct TokenInfo bool emptyTag; // whitespace - QString chars; + QCString chars; // url bool isEMailAddr; diff --git a/src/doctokenizer.l b/src/doctokenizer.l index a7bcead..d220395 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -42,7 +42,7 @@ static int g_commentState; TokenInfo *g_token = 0; static int g_inputPos = 0; static const char *g_inputString; -static QString g_fileName; +static QCString g_fileName; static bool g_insidePre; // context for section finding phase @@ -256,7 +256,7 @@ static void handleHtmlTag() } } -static QString stripEmptyLines(const char *s) +static QCString stripEmptyLines(const char *s) { int result=0,p=0; for (;;) @@ -382,14 +382,14 @@ REFWORD {LABELID}|{REFWORD2} %% <St_Para>\r /* skip carriage return */ <St_Para>^{LISTITEM} { /* list item */ - QString text=yytext; + QCString text=yytext; int dashPos = text.findRev('-'); g_token->isEnumList = text.at(dashPos+1)=='#'; g_token->indent = computeIndent(yytext,dashPos); return TK_LISTITEM; } <St_Para>{BLANK}*\n{LISTITEM} { /* list item on next line */ - QString text=yytext; + QCString text=yytext; text=text.right(text.length()-text.find('\n')-1); int dashPos = text.findRev('-'); g_token->isEnumList = text.at(dashPos+1)=='#'; @@ -397,12 +397,12 @@ REFWORD {LABELID}|{REFWORD2} return TK_LISTITEM; } <St_Para>^{ENDLIST} { /* end list */ - int dotPos = QString(yytext).findRev('.'); + int dotPos = QCString(yytext).findRev('.'); g_token->indent = computeIndent(yytext,dotPos); return TK_ENDLIST; } <St_Para>{BLANK}*\n{ENDLIST} { /* end list on next line */ - QString text=yytext; + QCString text=yytext; text=text.right(text.length()-text.find('\n')-1); int dotPos = text.findRev('.'); g_token->indent = computeIndent(text,dotPos); @@ -422,7 +422,7 @@ REFWORD {LABELID}|{REFWORD2} <St_Para>{SPCMD3} { g_token->name = "form"; bool ok; - g_token->id = QString(yytext).right(yyleng-6).toInt(&ok); + g_token->id = QCString(yytext).right(yyleng-6).toInt(&ok); ASSERT(ok); return TK_COMMAND; } @@ -435,7 +435,7 @@ REFWORD {LABELID}|{REFWORD2} } <St_Para>{PARAMIO} { /* param [in,out] command */ g_token->name = "param"; - QString s(yytext); + QCString s(yytext); bool isIn = s.find("in")!=-1; bool isOut = s.find("out")!=-1; if (isIn) @@ -470,7 +470,7 @@ REFWORD {LABELID}|{REFWORD2} return TK_URL; } <St_Para>"$"{ID}":"[^\n$]+"$" { /* RCS tag */ - QString tagName(yytext+1); + QCString tagName(yytext+1); int index=tagName.find(':'); g_token->name = tagName.left(index+1); g_token->text = tagName.mid(index+2,tagName.length()-index-3); @@ -774,7 +774,7 @@ REFWORD {LABELID}|{REFWORD2} BEGIN(St_XRefItem2); } <St_XRefItem2>[0-9]+"." { - QString numStr=yytext; + QCString numStr=yytext; numStr=numStr.left(yyleng-1); g_token->id=numStr.toInt(); return RetVal_OK; @@ -802,7 +802,7 @@ REFWORD {LABELID}|{REFWORD2} return TK_WORD; } <St_File>"\""[^\n\"]+"\"" { - QString text=yytext; + QCString text=yytext; g_token->name = text.mid(1,text.length()-2); return TK_WORD; } diff --git a/src/dot.cpp b/src/dot.cpp index 04be1c1..5d9b975 100644 --- a/src/dot.cpp +++ b/src/dot.cpp @@ -38,7 +38,7 @@ #include "vhdldocgen.h" #include <qdir.h> #include <qfile.h> -#include <qtextstream.h> +#include "ftextstream.h" #include <md5.h> #define MAP_CMD "cmapx" @@ -92,7 +92,7 @@ static int getDotFontSize() return dotFontSize; } -static void writeGraphHeader(QTextStream &t) +static void writeGraphHeader(FTextStream &t) { t << "digraph G" << endl; t << "{" << endl; @@ -108,7 +108,7 @@ static void writeGraphHeader(QTextStream &t) "fontsize=\"" << FONTSIZE << "\",shape=record];\n"; } -static void writeGraphFooter(QTextStream &t) +static void writeGraphFooter(FTextStream &t) { t << "}" << endl; } @@ -124,9 +124,9 @@ static void writeGraphFooter(QTextStream &t) * map file was found * \returns TRUE if succesful. */ -static bool convertMapFile(QTextStream &t,const char *mapName, +static bool convertMapFile(FTextStream &t,const char *mapName, const QCString relPath, bool urlOnly=FALSE, - const QString &context=QString()) + const QCString &context=QCString()) { QFile f(mapName); if (!f.open(IO_ReadOnly)) @@ -189,7 +189,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName, QCString url = link.mid(marker+1); if (!ref.isEmpty()) { - result = "doxygen=\"" + ref + ":"; + result = "target=\"_blank\" doxygen=\"" + ref + ":"; if ((dest=Doxygen::tagDestinationDict[ref])) result += *dest + "/"; result += "\" "; } @@ -629,7 +629,7 @@ static QCString escapeTooltip(const QCString &tooltip) return result; } -static void writeBoxMemberList(QTextStream &t,char prot,MemberList *ml,ClassDef *scope) +static void writeBoxMemberList(FTextStream &t,char prot,MemberList *ml,ClassDef *scope) { if (ml) { @@ -662,7 +662,7 @@ static void writeBoxMemberList(QTextStream &t,char prot,MemberList *ml,ClassDef } } -void DotNode::writeBox(QTextStream &t, +void DotNode::writeBox(FTextStream &t, GraphType gt, GraphOutputFormat /*format*/, bool hasNonReachableChildren, @@ -764,7 +764,7 @@ void DotNode::writeBox(QTextStream &t, t << "];" << endl; } -void DotNode::writeArrow(QTextStream &t, +void DotNode::writeArrow(FTextStream &t, GraphType gt, GraphOutputFormat format, DotNode *cn, @@ -807,7 +807,7 @@ void DotNode::writeArrow(QTextStream &t, t << "];" << endl; } -void DotNode::write(QTextStream &t, +void DotNode::write(FTextStream &t, GraphType gt, GraphOutputFormat format, bool topDown, @@ -865,7 +865,7 @@ void DotNode::write(QTextStream &t, //printf("end DotNode::write(%d) name=%s\n",distance,m_label.data()); } -void DotNode::writeXML(QTextStream &t,bool isClassGraph) +void DotNode::writeXML(FTextStream &t,bool isClassGraph) { t << " <node id=\"" << m_number << "\">" << endl; t << " <label>" << convertToXML(m_label) << "</label>" << endl; @@ -934,7 +934,7 @@ void DotNode::writeXML(QTextStream &t,bool isClassGraph) } -void DotNode::writeDEF(QTextStream &t) +void DotNode::writeDEF(FTextStream &t) { const char* nodePrefix = " node-"; @@ -1101,7 +1101,7 @@ const DotNode *DotNode::findDocNode() const int DotGfxHierarchyTable::m_curNodeNumber; -void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const +void DotGfxHierarchyTable::writeGraph(FTextStream &out,const char *path) const { //printf("DotGfxHierarchyTable::writeGraph(%s)\n",name); //printf("m_rootNodes=%p count=%d\n",m_rootNodes,m_rootNodes->count()); @@ -1140,9 +1140,9 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const DotNode *node; // compute md5 checksum of the graph were are about to generate - QString theGraph; - QTextStream md5stream(&theGraph,IO_WriteOnly); - md5stream.setEncoding(md5stream.UnicodeUTF8); + QGString theGraph; + FTextStream md5stream(&theGraph); + //md5stream.setEncoding(md5stream.UnicodeUTF8); writeGraphHeader(md5stream); md5stream << " rankdir=LR;" << endl; for (dnli2.toFirst();(node=dnli2.current());++dnli2) @@ -1163,7 +1163,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const resetReNumbering(); uchar md5_sig[16]; QCString sigStr(33); - MD5Buffer((const unsigned char *)theGraph.ascii(),theGraph.length(),md5_sig); + MD5Buffer((const unsigned char *)theGraph.data(),theGraph.length(),md5_sig); MD5SigToString(md5_sig,sigStr.data(),33); if (checkAndUpdateMd5Signature(absBaseName,sigStr) || !QFileInfo(absMapName).exists()) @@ -1172,8 +1172,8 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) const QCString dotName=absBaseName+".dot"; QFile f(dotName); if (!f.open(IO_WriteOnly)) return; - QTextStream t(&f); - t.setEncoding(t.UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(t.UnicodeUTF8); t << theGraph; f.close(); resetReNumbering(); @@ -1777,9 +1777,9 @@ QCString computeMd5Signature(DotNode *root, bool reNumber=TRUE; //printf("computeMd5Signature\n"); - QString buf; - QTextStream md5stream(&buf,IO_WriteOnly); - md5stream.setEncoding(md5stream.UnicodeUTF8); + QGString buf; + FTextStream md5stream(&buf); + //md5stream.setEncoding(md5stream.UnicodeUTF8); writeGraphHeader(md5stream); if (lrRank) { @@ -1824,13 +1824,13 @@ QCString computeMd5Signature(DotNode *root, writeGraphFooter(md5stream); uchar md5_sig[16]; QCString sigStr(33); - MD5Buffer((const unsigned char *)buf.ascii(),buf.length(),md5_sig); + MD5Buffer((const unsigned char *)buf.data(),buf.length(),md5_sig); MD5SigToString(md5_sig,sigStr.data(),33); if (reNumber) { resetReNumbering(); } - graphStr=buf.ascii(); + graphStr=buf.data(); //printf("md5: %s | file: %s\n",sigStr,baseName.data()); return sigStr; } @@ -1854,8 +1854,8 @@ static bool updateDotGraph(DotNode *root, f.setName(baseName+".dot"); if (f.open(IO_WriteOnly)) { - QTextStream t(&f); - t.setEncoding(t.UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(t.UnicodeUTF8); t << theGraph; } return TRUE; @@ -1884,7 +1884,7 @@ QCString DotClassGraph::diskName() const return result; } -QCString DotClassGraph::writeGraph(QTextStream &out, +QCString DotClassGraph::writeGraph(FTextStream &out, GraphOutputFormat format, const char *path, const char *relPath, @@ -1989,9 +1989,8 @@ QCString DotClassGraph::writeGraph(QTextStream &out, break; } out << "\"/></div>" << endl; - QString tmpstr; - QTextOStream tmpout(&tmpstr); - tmpout.setEncoding(tmpout.UnicodeUTF8); + QGString tmpstr; + FTextStream tmpout(&tmpstr); convertMapFile(tmpout,absBaseName+".map",relPath); if (!tmpstr.isEmpty()) { @@ -2039,7 +2038,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out, //-------------------------------------------------------------------- -void DotClassGraph::writeXML(QTextStream &t) +void DotClassGraph::writeXML(FTextStream &t) { QDictIterator<DotNode> dni(*m_usedNodes); DotNode *node; @@ -2049,7 +2048,7 @@ void DotClassGraph::writeXML(QTextStream &t) } } -void DotClassGraph::writeDEF(QTextStream &t) +void DotClassGraph::writeDEF(FTextStream &t) { QDictIterator<DotNode> dni(*m_usedNodes); DotNode *node; @@ -2223,7 +2222,7 @@ QCString DotInclDepGraph::diskName() const return convertNameToFile(result); } -QCString DotInclDepGraph::writeGraph(QTextStream &out, +QCString DotInclDepGraph::writeGraph(FTextStream &out, GraphOutputFormat format, const char *path, const char *relPath, @@ -2301,9 +2300,9 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, << imgExt << "\" border=\"0\" usemap=\"#" << mapName << "_map\" alt=\"\"/>"; out << "</div>" << endl; - QString tmpstr; - QTextOStream tmpout(&tmpstr); - tmpout.setEncoding(tmpout.UnicodeUTF8); + QGString tmpstr; + FTextStream tmpout(&tmpstr); + //tmpout.setEncoding(tmpout.UnicodeUTF8); convertMapFile(tmpout,absBaseName+".map",relPath); if (!tmpstr.isEmpty()) { @@ -2351,7 +2350,7 @@ bool DotInclDepGraph::isTooBig() const return numNodes>=maxNodes; } -void DotInclDepGraph::writeXML(QTextStream &t) +void DotInclDepGraph::writeXML(FTextStream &t) { QDictIterator<DotNode> dni(*m_usedNodes); DotNode *node; @@ -2518,7 +2517,7 @@ DotCallGraph::~DotCallGraph() delete m_usedNodes; } -QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, +QCString DotCallGraph::writeGraph(FTextStream &out, GraphOutputFormat format, const char *path,const char *relPath,bool generateImageMap) const { QDir d(path); @@ -2586,11 +2585,11 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, out << "<div class=\"center\"><img src=\"" << relPath << baseName << "." << imgExt << "\" border=\"0\" usemap=\"#" << mapName << "_map\" alt=\""; - out << "\">"; + out << "\"/>"; out << "</div>" << endl; - QString tmpstr; - QTextOStream tmpout(&tmpstr); - tmpout.setEncoding(tmpout.UnicodeUTF8); + QGString tmpstr; + FTextStream tmpout(&tmpstr); + //tmpout.setEncoding(tmpout.UnicodeUTF8); convertMapFile(tmpout,absBaseName+".map",relPath); if (!tmpstr.isEmpty()) { @@ -2648,7 +2647,7 @@ DotDirDeps::~DotDirDeps() { } -QCString DotDirDeps::writeGraph(QTextStream &out, +QCString DotDirDeps::writeGraph(FTextStream &out, GraphOutputFormat format, const char *path, const char *relPath, @@ -2675,8 +2674,8 @@ QCString DotDirDeps::writeGraph(QTextStream &out, { err("Cannot create file %s.dot for writing!\n",baseName.data()); } - QTextStream t(&f); - t.setEncoding(t.UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(t.UnicodeUTF8); m_dir->writeDepGraph(t); f.close(); @@ -2724,9 +2723,9 @@ QCString DotDirDeps::writeGraph(QTextStream &out, out << convertToXML(m_dir->displayName()); out << "\"/>"; out << "</div>" << endl; - QString tmpstr; - QTextOStream tmpout(&tmpstr); - tmpout.setEncoding(tmpout.UnicodeUTF8); + QGString tmpstr; + FTextStream tmpout(&tmpstr); + //tmpout.setEncoding(tmpout.UnicodeUTF8); convertMapFile(tmpout,absBaseName+".map",relPath,TRUE); if (!tmpstr.isEmpty()) { @@ -2783,7 +2782,7 @@ void generateGraphLegend(const char *path) convertToQCString(dotFile.name()).data()); return; } - QTextStream dotText(&dotFile); + FTextStream dotText(&dotFile); writeGraphHeader(dotText); dotText << " Node9 [shape=\"box\",label=\"Inherited\",fontsize=\"" << FONTSIZE << "\",height=0.2,width=0.4,fontname=\"" << FONTNAME << "\",fillcolor=\"grey75\",style=\"filled\" fontcolor=\"black\"];\n"; dotText << " Node10 -> Node9 [dir=back,color=\"midnightblue\",fontsize=\"" << FONTSIZE << "\",style=\"solid\",fontname=\"" << FONTNAME << "\"];\n"; @@ -2880,8 +2879,8 @@ void writeDotGraphFromFile(const char *inFile,const char *outDir, * \param context the scope in which this graph is found (for resolving links) * \returns a string which is the HTML image map (without the \<map\>\</map\>) */ -QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, - const QCString &relPath,const QString &context) +QCString getDotImageMapFromFile(const QCString& inFile, const QCString& outDir, + const QCString &relPath,const QCString &context) { QString outFile = inFile + ".map"; @@ -2903,14 +2902,14 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, return ""; } - QString result; - QTextOStream tmpout(&result); - tmpout.setEncoding(tmpout.UnicodeUTF8); + QGString result; + FTextStream tmpout(&result); + //tmpout.setEncoding(tmpout.UnicodeUTF8); convertMapFile(tmpout, absOutFile, relPath ,TRUE, context); d.remove(outFile); unsetDotFontPath(); - return result; + return result.data(); } // end MDG mods @@ -3125,7 +3124,7 @@ void DotGroupCollaboration::addCollaborationMember( } -QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat format, +QCString DotGroupCollaboration::writeGraph( FTextStream &t, GraphOutputFormat format, const char *path, const char *relPath, bool writeImageMap) const { @@ -3143,8 +3142,8 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo QFile dotfile(absBaseName+".dot"); if (dotfile.open(IO_WriteOnly)) { - QTextStream tdot(&dotfile); - tdot.setEncoding(tdot.UnicodeUTF8); + FTextStream tdot(&dotfile); + //tdot.setEncoding(tdot.UnicodeUTF8); writeGraphHeader(tdot); // clean write flags @@ -3245,7 +3244,7 @@ QCString DotGroupCollaboration::writeGraph( QTextStream &t, GraphOutputFormat fo return baseName; } -void DotGroupCollaboration::Edge::write( QTextStream &t ) const +void DotGroupCollaboration::Edge::write( FTextStream &t ) const { const char* linkTypeColor[] = { "darkorchid3" @@ -3312,7 +3311,7 @@ bool DotGroupCollaboration::isTrivial() const return m_usedNodes->count() <= 1; } -void DotGroupCollaboration::writeGraphHeader(QTextStream &t) const +void DotGroupCollaboration::writeGraphHeader(FTextStream &t) const { t << "digraph structs" << endl; t << "{" << endl; @@ -3326,7 +3325,7 @@ void DotGroupCollaboration::writeGraphHeader(QTextStream &t) const t << " rankdir=LR;\n"; } -void writeDotDirDepGraph(QTextStream &t,DirDef *dd) +void writeDotDirDepGraph(FTextStream &t,DirDef *dd) { t << "digraph G {\n"; if (Config_getBool("DOT_TRANSPARENT")) @@ -26,7 +26,7 @@ class ClassDef; class FileDef; -class QTextStream; +class FTextStream; class DotNodeList; class ClassSDict; class MemberDef; @@ -72,12 +72,12 @@ class DotNode void removeChild(DotNode *n); void removeParent(DotNode *n); int findParent( DotNode *n ); - void write(QTextStream &t,GraphType gt,GraphOutputFormat f, + void write(FTextStream &t,GraphType gt,GraphOutputFormat f, bool topDown,bool toChildren,bool backArrows,bool reNumber); int m_subgraphId; void clearWriteFlag(); - void writeXML(QTextStream &t,bool isClassGraph); - void writeDEF(QTextStream &t); + void writeXML(FTextStream &t,bool isClassGraph); + void writeDEF(FTextStream &t); QCString label() const { return m_label; } int number() const { return m_number; } bool isVisible() const { return m_visible; } @@ -86,9 +86,9 @@ class DotNode private: void colorConnectedNodes(int curColor); - void writeBox(QTextStream &t,GraphType gt,GraphOutputFormat f, + void writeBox(FTextStream &t,GraphType gt,GraphOutputFormat f, bool hasNonReachableChildren, bool reNumber=FALSE); - void writeArrow(QTextStream &t,GraphType gt,GraphOutputFormat f,DotNode *cn, + void writeArrow(FTextStream &t,GraphType gt,GraphOutputFormat f,DotNode *cn, EdgeInfo *ei,bool topDown, bool pointBack=TRUE, bool reNumber=FALSE); void setDistance(int distance); const DotNode *findDocNode() const; // only works for acyclic graphs! @@ -139,7 +139,7 @@ class DotGfxHierarchyTable public: DotGfxHierarchyTable(); ~DotGfxHierarchyTable(); - void writeGraph(QTextStream &t,const char *path) const; + void writeGraph(FTextStream &t,const char *path) const; private: void addHierarchy(DotNode *n,ClassDef *cd,bool hide); @@ -159,11 +159,11 @@ class DotClassGraph ~DotClassGraph(); bool isTrivial() const; bool isTooBig() const; - QCString writeGraph(QTextStream &t,GraphOutputFormat f,const char *path, + QCString writeGraph(FTextStream &t,GraphOutputFormat f,const char *path, const char *relPath, bool TBRank=TRUE,bool imageMap=TRUE) const; - void writeXML(QTextStream &t); - void writeDEF(QTextStream &t); + void writeXML(FTextStream &t); + void writeDEF(FTextStream &t); QCString diskName() const; private: @@ -188,13 +188,13 @@ class DotInclDepGraph public: DotInclDepGraph(FileDef *fd,bool inverse); ~DotInclDepGraph(); - QCString writeGraph(QTextStream &t, GraphOutputFormat f,const char *path, + QCString writeGraph(FTextStream &t, GraphOutputFormat f,const char *path, const char *relPath, bool writeImageMap=TRUE) const; bool isTrivial() const; bool isTooBig() const; QCString diskName() const; - void writeXML(QTextStream &t); + void writeXML(FTextStream &t); private: void buildGraph(DotNode *n,FileDef *fd,int distance); @@ -215,7 +215,7 @@ class DotCallGraph public: DotCallGraph(MemberDef *md,bool inverse); ~DotCallGraph(); - QCString writeGraph(QTextStream &t, GraphOutputFormat f, + QCString writeGraph(FTextStream &t, GraphOutputFormat f, const char *path,const char *relPath,bool writeImageMap=TRUE) const; void buildGraph(DotNode *n,MemberDef *md,int distance); bool isTrivial() const; @@ -241,7 +241,7 @@ class DotDirDeps DotDirDeps(DirDef *dir); ~DotDirDeps(); bool isTrivial() const; - QCString writeGraph(QTextStream &out, + QCString writeGraph(FTextStream &out, GraphOutputFormat format, const char *path, const char *relPath, @@ -284,12 +284,12 @@ class DotGroupCollaboration EdgeType eType; QList<Link> links; - void write( QTextStream &t ) const; + void write( FTextStream &t ) const; }; DotGroupCollaboration(GroupDef* gd); ~DotGroupCollaboration(); - QCString writeGraph(QTextStream &t, GraphOutputFormat format, + QCString writeGraph(FTextStream &t, GraphOutputFormat format, const char *path,const char *relPath, bool writeImageMap=TRUE) const; void buildGraph(GroupDef* gd); @@ -297,7 +297,7 @@ class DotGroupCollaboration private : void addCollaborationMember( Definition* def, QCString& url, EdgeType eType ); void addMemberList( class MemberList* ml ); - void writeGraphHeader(QTextStream &t) const; + void writeGraphHeader(FTextStream &t) const; Edge* addEdge( DotNode* _pNStart, DotNode* _pNEnd, EdgeType _eType, const QCString& _label, const QCString& _url ); @@ -338,9 +338,9 @@ void generateGraphLegend(const char *path); void writeDotGraphFromFile(const char *inFile,const char *outDir, const char *outFile,GraphOutputFormat format); -QString getDotImageMapFromFile(const QString& inFile, const QString& outDir, - const QCString& relPath,const QString &context); +QCString getDotImageMapFromFile(const QCString& inFile, const QCString& outDir, + const QCString& relPath,const QCString &context); -void writeDotDirDepGraph(QTextStream &t,DirDef *dd); +void writeDotDirDepGraph(FTextStream &t,DirDef *dd); #endif diff --git a/src/doxygen.cpp b/src/doxygen.cpp index c07b2b7..2efc9ed 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -680,7 +680,7 @@ static void buildFileList(EntryNav *rootNav) "the second argument in the \\file statement ", root->name.data() ); - if (ambig) // name is ambigious + if (ambig) // name is ambiguous { text+="matches the following input files:\n"; text+=showFileDefMatches(Doxygen::inputNameDict,root->name); @@ -736,7 +736,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) "the argument of the \\class, \\struct, \\union, or \\include command ", includeFile.data() ); - if (ambig) // name is ambigious + if (ambig) // name is ambiguous { text+="matches the following input files:\n"; text+=showFileDefMatches(Doxygen::inputNameDict,root->includeFile); @@ -2072,7 +2072,7 @@ static MemberDef *addVariableToFile( { if (!root->type.isEmpty() && !root->name.isEmpty()) { - if (name.at(0)=='@') // dummy variable representing annonymous union + if (name.at(0)=='@') // dummy variable representing anonymous union def=root->type; else def=root->type+" "+name+root->args; @@ -2479,8 +2479,8 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1) { MemberDef *md=0; - // if cd is an annonymous scope we insert the member - // into a non-annonymous scope as well. This is needed to + // if cd is an anonymous scope we insert the member + // into a non-anonymous scope as well. This is needed to // be able to refer to it using \var or \fn //int indentDepth=0; @@ -4411,7 +4411,7 @@ static void findInheritedTemplateInstances() for (;(rootNav=edi.current());++edi) { ClassDef *cd; - // strip any annonymous scopes first + // strip any anonymous scopes first QCString bName=stripAnonymousNamespaceScope(rootNav->name()); bName=stripTemplateSpecifiersFromScope(bName); Debug::print(Debug::Classes,0," Inheritance: Class %s : \n",bName.data()); @@ -4434,7 +4434,7 @@ static void findUsedTemplateInstances() for (;(rootNav=edi.current());++edi) { ClassDef *cd; - // strip any annonymous scopes first + // strip any anonymous scopes first QCString bName=stripAnonymousNamespaceScope(rootNav->name()); bName=stripTemplateSpecifiersFromScope(bName); Debug::print(Debug::Classes,0," Usage: Class %s : \n",bName.data()); @@ -4460,7 +4460,7 @@ static void computeClassRelations() rootNav->loadEntry(g_storage); Entry *root = rootNav->entry(); - // strip any annonymous scopes first + // strip any anonymous scopes first QCString bName=stripAnonymousNamespaceScope(rootNav->name()); bName=stripTemplateSpecifiersFromScope(bName); Debug::print(Debug::Classes,0," Relations: Class %s : \n",bName.data()); @@ -4500,7 +4500,7 @@ static void computeTemplateClassRelations() QCString bName=stripAnonymousNamespaceScope(root->name); bName=stripTemplateSpecifiersFromScope(bName); ClassDef *cd=getClass(bName); - // strip any annonymous scopes first + // strip any anonymous scopes first QDict<ClassDef> *templInstances = 0; if (cd && (templInstances=cd->getTemplateInstances())) { @@ -7220,6 +7220,48 @@ static void addSourceReferences() } //---------------------------------------------------------------------------- + +static void sortMemberLists() +{ + // sort class member lists + ClassSDict::Iterator cli(*Doxygen::classSDict); + ClassDef *cd=0; + for (cli.toFirst();(cd=cli.current());++cli) + { + cd->sortMemberLists(); + } + + // sort namespace member lists + NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); + NamespaceDef *nd=0; + for (nli.toFirst();(nd=nli.current());++nli) + { + nd->sortMemberLists(); + } + + // sort file member lists + FileNameListIterator fnli(*Doxygen::inputNameList); + FileName *fn; + for (;(fn=fnli.current());++fnli) + { + FileNameIterator fni(*fn); + FileDef *fd; + for (;(fd=fni.current());++fni) + { + fd->sortMemberLists(); + } + } + + // sort group member lists + GroupSDict::Iterator gli(*Doxygen::groupSDict); + GroupDef *gd; + for (gli.toFirst();(gd=gli.current());++gli) + { + gd->sortMemberLists(); + } +} + +//---------------------------------------------------------------------------- // generate the documentation of all classes static void generateClassList(ClassSDict &classSDict) @@ -8053,7 +8095,7 @@ static void buildExampleList(EntryNav *rootNav) { PageDef *pd=new PageDef(root->fileName,root->startLine, root->name,root->brief+root->doc+root->inbodyDocs,root->args); - pd->setFileName(convertNameToFile(pd->name()+"-example")); + pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE)); pd->addSectionsToDefinition(root->anchors); //pi->addSections(root->anchors); @@ -9445,7 +9487,7 @@ void readConfiguration(int argc, char **argv) /* Perlmod wants to know the path to the config file.*/ QFileInfo configFileInfo(configName); - setPerlModDoxyfile(configFileInfo.absFilePath()); + setPerlModDoxyfile(configFileInfo.absFilePath().data()); } @@ -10126,6 +10168,9 @@ void parseInput() addListReferences(); generateXRefPages(); + msg("Sorting member lists...\n"); + sortMemberLists(); + if (Config_getBool("SHOW_DIRECTORIES") && Config_getBool("DIRECTORY_GRAPH")) { msg("Computing dependencies between directories...\n"); @@ -10194,7 +10239,7 @@ void generateOutput() if (generateEclipseHelp) Doxygen::indexList.addIndex(new EclipseHelp); if (generateHtmlHelp) Doxygen::indexList.addIndex(new HtmlHelp); if (generateQhp) Doxygen::indexList.addIndex(new Qhp); - if (generateTreeView) Doxygen::indexList.addIndex(new FTVHelp); + if (generateTreeView) Doxygen::indexList.addIndex(new FTVHelp(TRUE)); if (generateDocSet) Doxygen::indexList.addIndex(new DocSets); Doxygen::indexList.initialize(); Doxygen::indexList.addImageFile("tab_r.gif"); @@ -10398,6 +10443,7 @@ void generateOutput() // FTVHelp::getInstance()->finalize(); //} + msg("finalizing index lists...\n"); Doxygen::indexList.finalize(); if (!Config_getString("GENERATE_TAGFILE").isEmpty()) @@ -10476,6 +10522,10 @@ void generateOutput() portable_getSysElapsedTime() ); } + else + { + msg("finished...\n"); + } /************************************************************************** * Start cleaning up * diff --git a/src/doxygen.css b/src/doxygen.css index 28c5241..bbb8368 100644 --- a/src/doxygen.css +++ b/src/doxygen.css @@ -153,6 +153,15 @@ div.ah { color: #ffffff; margin-bottom: 3px; margin-top: 3px + padding: .2em; + border: solid thin #333; + border-radius: .5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); } div.groupHeader { @@ -325,6 +334,11 @@ hr.footer { /* @group Member Descriptions */ +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { @@ -592,19 +606,19 @@ table.doxtable th { list-style-type:none; float:left; padding-left:10px; + padding-right: 15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:##45; } .navpath a { height:32px; display:block; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - padding-right: 15px; text-decoration: none; outline: none; - color:##45; } .navpath a:hover diff --git a/src/doxygen_css.h b/src/doxygen_css.h index ff941b3..fc02e37 100644 --- a/src/doxygen_css.h +++ b/src/doxygen_css.h @@ -153,6 +153,15 @@ " color: #ffffff;\n" " margin-bottom: 3px;\n" " margin-top: 3px\n" +" padding: .2em;\n" +" border: solid thin #333;\n" +" border-radius: .5em;\n" +" -webkit-border-radius: .5em;\n" +" -moz-border-radius: .5em;\n" +" -webkit-box-shadow: 2px 2px 3px #999;\n" +" -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n" +" background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n" +" background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n" "}\n" "\n" "div.groupHeader {\n" @@ -325,6 +334,11 @@ "\n" "/* @group Member Descriptions */\n" "\n" +"table.memberdecls {\n" +" border-spacing: 0px;\n" +" padding: 0px;\n" +"}\n" +"\n" ".mdescLeft, .mdescRight,\n" ".memItemLeft, .memItemRight,\n" ".memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n" @@ -592,19 +606,19 @@ " list-style-type:none;\n" " float:left;\n" " padding-left:10px;\n" +" padding-right: 15px;\n" +" background-image:url('bc_s.png');\n" +" background-repeat:no-repeat;\n" +" background-position:right;\n" +" color:##45;\n" "}\n" "\n" ".navpath a\n" "{\n" " height:32px;\n" " display:block;\n" -" background-image:url('bc_s.png');\n" -" background-repeat:no-repeat;\n" -" background-position:right;\n" -" padding-right: 15px;\n" " text-decoration: none;\n" " outline: none;\n" -" color:##45;\n" "}\n" "\n" ".navpath a:hover\n" diff --git a/src/eclipsehelp.cpp b/src/eclipsehelp.cpp index 4451a2a..8abca03 100644 --- a/src/eclipsehelp.cpp +++ b/src/eclipsehelp.cpp @@ -76,7 +76,7 @@ void EclipseHelp::initialize() // -- initialize its text stream m_tocstream.setDevice(m_tocfile); - m_tocstream.setEncoding(QTextStream::UnicodeUTF8); + //m_tocstream.setEncoding(FTextStream::UnicodeUTF8); // -- write the opening tag QCString title = Config_getString("PROJECT_NAME"); @@ -112,7 +112,7 @@ void EclipseHelp::finalize() if (pluginFile.open(IO_WriteOnly)) { QString docId = Config_getString("ECLIPSE_DOC_ID"); - QTextStream t(&pluginFile); + FTextStream t(&pluginFile); t << "<plugin name=\"" << docId << "\" id=\"" << docId << "\"" << endl; t << " version=\"1.0.0\" provider-name=\"Doxygen\">" << endl; t << " <extension point=\"org.eclipse.help.toc\">" << endl; diff --git a/src/eclipsehelp.h b/src/eclipsehelp.h index 9466a47..645292f 100644 --- a/src/eclipsehelp.h +++ b/src/eclipsehelp.h @@ -26,7 +26,7 @@ #include "qtbc.h" #include "index.h" -#include <qtextstream.h> +#include "ftextstream.h" /* -- forward declarations */ class QFile; @@ -62,7 +62,7 @@ class EclipseHelp : public IndexIntf bool m_endtag; QFile * m_tocfile; - QTextStream m_tocstream; + FTextStream m_tocstream; QCString m_pathprefix; /* -- avoid copying */ diff --git a/src/filedef.cpp b/src/filedef.cpp index d81a5fb..7593834 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -1533,12 +1533,16 @@ void FileDef::addMemberToList(MemberList::ListType lt,MemberDef *md) static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); MemberList *ml = createMemberList(lt); - if (((ml->listType()&MemberList::declarationLists) && sortBriefDocs) || - ((ml->listType()&MemberList::documentationLists) && sortMemberDocs) - ) + ml->setNeedsSorting( + ((ml->listType()&MemberList::declarationLists) && sortBriefDocs) || + ((ml->listType()&MemberList::documentationLists) && sortMemberDocs)); + ml->append(md); +#if 0 + if (ml->needsSorting()) ml->inSort(md); else ml->append(md); +#endif if (lt&MemberList::documentationLists) { ml->setInFile(TRUE); @@ -1546,6 +1550,16 @@ void FileDef::addMemberToList(MemberList::ListType lt,MemberDef *md) if (ml->listType()&MemberList::declarationLists) md->setSectionList(this,ml); } +void FileDef::sortMemberLists() +{ + MemberList *ml = m_memberLists.first(); + while (ml) + { + if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + ml = m_memberLists.next(); + } +} + MemberList *FileDef::getMemberList(MemberList::ListType lt) const { FileDef *that = (FileDef*)this; diff --git a/src/filedef.h b/src/filedef.h index 0ea156f..b79653d 100644 --- a/src/filedef.h +++ b/src/filedef.h @@ -153,6 +153,7 @@ class FileDef : public Definition void combineUsingRelations(); bool generateSourceFile() const; + void sortMemberLists(); void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported); void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported); diff --git a/src/formula.cpp b/src/formula.cpp index b8d32cb..d0e3843 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -172,8 +172,8 @@ void FormulaList::generateBitmaps(const char *path) int zoomFactor = Config_getInt("FORMULA_FONTSIZE"); if (zoomFactor<8 || zoomFactor>50) zoomFactor=10; scaleFactor *= zoomFactor/10.0; - int gx = (((int)((x2-x1)*scaleFactor))+3)&~2; - int gy = (((int)((y2-y1)*scaleFactor))+3)&~2; + int gx = (((int)((x2-x1)*scaleFactor))+3)&~1; + int gy = (((int)((y2-y1)*scaleFactor))+3)&~1; // Then we run ghostscript to convert the postscript to a pixmap // The pixmap is a truecolor image, where only black and white are // used. diff --git a/src/ftextstream.cpp b/src/ftextstream.cpp new file mode 100644 index 0000000..f72185f --- /dev/null +++ b/src/ftextstream.cpp @@ -0,0 +1,259 @@ +#include "ftextstream.h" +#include <qfile.h> + +//---------------------------------------------------------------------------- + +class QGStringBuffer : public QIODevice +{ + public: + QGStringBuffer( QGString* str ); + ~QGStringBuffer(); + bool open( int m ); + void close(); + void flush(); + uint size() const; + int at() const; + bool at( int pos ); + int readBlock( char *, uint) { return -1; } + int writeBlock( const char *p, uint len ); + int getch() { return -1; } + int putch( int ch ); + int ungetch( int ) { return -1; } + + protected: + QGString* m_str; + + private: // Disabled copy constructor and operator= + QGStringBuffer( const QGStringBuffer & ); + QGStringBuffer &operator=( const QGStringBuffer & ); +}; + +QGStringBuffer::QGStringBuffer( QGString* str ) : m_str(str) +{ + //printf("QGStringBuffer::QGStringBuffer(%p)\n",str); +} + +QGStringBuffer::~QGStringBuffer() +{ +} + +bool QGStringBuffer::open( int m ) +{ + if ( !m_str ) + { +#if defined(CHECK_STATE) + qWarning( "QGStringBuffer::open: No string" ); +#endif + return FALSE; + } + if ( isOpen() ) + { // buffer already open +#if defined(CHECK_STATE) + qWarning( "QGStringBuffer::open: Buffer already open" ); +#endif + return FALSE; + } + setMode( m ); + if ( m & IO_Truncate ) + { // truncate buffer + m_str->truncate( 0 ); + } + if ( m & IO_Append ) + { // append to end of buffer + ioIndex = m_str->length(); + } + else + { + ioIndex = 0; + } + setState( IO_Open ); + setStatus( 0 ); + return TRUE; +} + +void QGStringBuffer::close() +{ + if ( isOpen() ) + { + setFlags( IO_Direct ); + ioIndex = 0; + } +} + +void QGStringBuffer::flush() +{ +} + +uint QGStringBuffer::size() const +{ + return m_str ? m_str->length() : 0; +} + +int QGStringBuffer::at() const +{ + return ioIndex; +} + +bool QGStringBuffer::at( int pos ) +{ +#if defined(CHECK_STATE) + if ( !isOpen() ) + { + qWarning( "QGStringBuffer::at: Buffer is not open" ); + return FALSE; + } +#endif + if ( (uint)pos >= m_str->length() ) + { +#if defined(CHECK_RANGE) + qWarning( "QGStringBuffer::at: Index %d out of range", pos ); +#endif + return FALSE; + } + + ioIndex = pos; + return TRUE; +} + +int QGStringBuffer::writeBlock( const char *p, uint len ) +{ + //printf("QGStringBuffer::writeBlock(%p,%d) m_str=%p ioIndex=%d\n",p,len, + // m_str,ioIndex); + m_str->enlarge(ioIndex+len+1); + memcpy(m_str->data()+ioIndex,p,len); + ioIndex+=len; + m_str->data()[ioIndex]='\0'; + m_str->setLen(ioIndex); + return len; +} + +int QGStringBuffer::putch( int ch ) +{ + //printf("QGStringBuffer::putch(%d) m_str=%p ioIndex=%d\n", + // ch,m_str,ioIndex); + m_str->enlarge(ioIndex+2); + m_str->data()[ioIndex] = (char)ch; + ioIndex++; + m_str->data()[ioIndex] = '\0'; + m_str->setLen(ioIndex); + return ch; +} + + +//---------------------------------------------------------------------------- + +FTextStream::FTextStream() +{ + m_dev = 0; + m_owndev = FALSE; +} + +FTextStream::FTextStream( QIODevice *dev ) +{ + m_dev = dev; + m_owndev = FALSE; +} + +FTextStream::FTextStream( QGString *s ) +{ + m_dev = new QGStringBuffer(s); + ((QGStringBuffer*)m_dev)->open( IO_WriteOnly ); + m_owndev = TRUE; +} + +FTextStream::FTextStream( FILE *fh ) +{ + m_dev = new QFile; + ((QFile *)m_dev)->open( IO_WriteOnly, fh); +} + +FTextStream::~FTextStream() +{ + if (m_owndev) delete m_dev; + m_dev = 0; +} + +QIODevice *FTextStream::device() const +{ + return m_dev; +} + +void FTextStream::setDevice( QIODevice *dev ) +{ + if (m_owndev) + { + delete m_dev; + m_owndev = FALSE; + } + m_dev = dev; +} + +void FTextStream::unsetDevice() +{ + setDevice(0); +} + +FTextStream &FTextStream::output_int( ulong n, bool neg ) +{ + char buf[20]; + char *p = &buf[19]; + *p = '\0'; + if ( neg ) + { + n = (ulong)(-(long)n); + } + do + { + *--p = ((int)(n%10)) + '0'; + n /= 10; + } while ( n ); + if ( neg ) *--p = '-'; + return operator<<(p); +} + +FTextStream &FTextStream::operator<<( signed short i ) +{ + return output_int( i, i < 0 ); +} + +FTextStream &FTextStream::operator<<( unsigned short i ) +{ + return output_int( i, FALSE ); +} + +FTextStream &FTextStream::operator<<( signed int i ) +{ + return output_int( i, i < 0 ); +} + +FTextStream &FTextStream::operator<<( unsigned int i ) +{ + return output_int( i, FALSE ); +} + +FTextStream &FTextStream::operator<<( signed long i ) +{ + return output_int( i, i < 0 ); +} + +FTextStream &FTextStream::operator<<( unsigned long i ) +{ + return output_int( i, FALSE ); +} + +FTextStream &FTextStream::operator<<( float f ) +{ + return *this << (double)f; +} + +FTextStream &FTextStream::operator<<( double d ) +{ + char buf[64]; + sprintf(buf,"%f",d); + return *this << buf; +} + + + + + diff --git a/src/ftextstream.h b/src/ftextstream.h new file mode 100644 index 0000000..63ef244 --- /dev/null +++ b/src/ftextstream.h @@ -0,0 +1,82 @@ +#ifndef FTEXTSTREAM_H +#define FTEXTSTREAM_H + +#include "qtbc.h" +#include "qiodevice.h" +#include "qstring.h" +#include "qgstring.h" +#include <stdio.h> + +/** @brief Simplified and optimized version of QTextStream */ +class FTextStream +{ + public: + FTextStream(); + FTextStream( QIODevice * ); + FTextStream( QGString * ); + FTextStream( FILE * ); + virtual ~FTextStream(); + + QIODevice *device() const; + void setDevice( QIODevice * ); + void unsetDevice(); + + FTextStream &operator<<( char ); + FTextStream &operator<<( const char *); + FTextStream &operator<<( const QString & ); + FTextStream &operator<<( const QCString & ); + FTextStream &operator<<( signed short ); + FTextStream &operator<<( unsigned short ); + FTextStream &operator<<( signed int ); + FTextStream &operator<<( unsigned int ); + FTextStream &operator<<( signed long ); + FTextStream &operator<<( unsigned long ); + FTextStream &operator<<( float ); + FTextStream &operator<<( double ); + + private: + QIODevice *m_dev; + bool m_owndev; + FTextStream &output_int( ulong n, bool neg ); + + private: // Disabled copy constructor and operator= +#if defined(Q_DISABLE_COPY) + FTextStream( const FTextStream & ); + FTextStream &operator=( const FTextStream & ); +#endif +}; + +inline FTextStream &FTextStream::operator<<( char c) +{ + m_dev->putch(c); + return *this; +} + +inline FTextStream &FTextStream::operator<<( const char* s) +{ + uint len = qstrlen( s ); + m_dev->writeBlock( s, len ); + return *this; +} + +inline FTextStream &FTextStream::operator<<( const QString & s) +{ + return operator<<(s.data()); +} + +inline FTextStream &FTextStream::operator<<( const QCString &s) +{ + return operator<<(s.data()); +} + +typedef FTextStream & (*FTSFUNC)(FTextStream &);// manipulator function + +inline FTextStream &operator<<( FTextStream &s, FTSFUNC f ) +{ return (*f)( s ); } + +inline FTextStream &endl( FTextStream & s) +{ + return s << '\n'; +} + +#endif // FTEXTSTREAM_H diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp index 7e27b23..c23baed 100644 --- a/src/ftvhelp.cpp +++ b/src/ftvhelp.cpp @@ -433,7 +433,7 @@ void FTVHelp::addContentsItem(bool isDir, static int folderId=1; -void FTVHelp::generateIndent(QTextStream &t, FTVNode *n,int level) +void FTVHelp::generateIndent(FTextStream &t, FTVNode *n,int level) { if (n->parent) { @@ -478,7 +478,7 @@ void FTVHelp::generateIndent(QTextStream &t, FTVNode *n,int level) } } -void FTVHelp::generateLink(QTextStream &t,FTVNode *n) +void FTVHelp::generateLink(FTextStream &t,FTVNode *n) { QCString *dest; //printf("FTVHelp::generateLink(ref=%s,file=%s,anchor=%s\n", @@ -492,7 +492,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n) if (!n->ref.isEmpty()) // link to entity imported via tag file { t << "<a class=\"elRef\" "; - t << "doxygen=\"" << n->ref << ":"; + t << "target=\"_blank\" doxygen=\"" << n->ref << ":"; if ((dest=Doxygen::tagDestinationDict[n->ref])) t << *dest << "/"; t << "\" "; } @@ -520,7 +520,7 @@ void FTVHelp::generateLink(QTextStream &t,FTVNode *n) } } -void FTVHelp::generateTree(QTextStream &t, const QList<FTVNode> &nl,int level) +void FTVHelp::generateTree(FTextStream &t, const QList<FTVNode> &nl,int level) { QCString spaces; spaces.fill(' ',level*2+8); @@ -574,100 +574,8 @@ void FTVHelp::generateTreeViewImages() } } -void FTVHelp::generateTreeView(QString* OutString) +void FTVHelp::generateScript(FTextStream &t) { - QCString fileName; - QFile f; - static bool searchEngine = Config_getBool("SEARCHENGINE"); - static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); - - generateTreeViewImages(); - - // If top level index, generate alternative index.html as a frame - if (m_topLevelIndex) - { - fileName=Config_getString("HTML_OUTPUT")+"/index"+Doxygen::htmlFileExtension; - f.setName(fileName); - if (!f.open(IO_WriteOnly)) - { - err("Cannot open file %s for writing!\n",fileName.data()); - return; - } - else - { - QTextStream t(&f); -#if QT_VERSION >= 200 - t.setEncoding(QTextStream::UnicodeUTF8); -#endif - //t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n"; - t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; - t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n"; - t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"; - t << "<title>"; - if (Config_getString("PROJECT_NAME").isEmpty()) - { - t << "Doxygen Documentation"; - } - else - { - t << Config_getString("PROJECT_NAME"); - } - t << "</title>\n</head>" << endl; - t << "<frameset cols=\"" << Config_getInt("TREEVIEW_WIDTH") << ",*\">" << endl; - t << " <frame src=\"tree" << Doxygen::htmlFileExtension << "\" name=\"treefrm\"/>" << endl; - t << " <frame src=\"main" << Doxygen::htmlFileExtension << "\" name=\"basefrm\"/>" << endl; - t << " <noframes>" << endl; - t << " <body>" << endl; - t << " <a href=\"main" << Doxygen::htmlFileExtension << "\">Frames are disabled. Click here to go to the main page.</a>" << endl; - t << " </body>" << endl; - t << " </noframes>" << endl; - t << "</frameset>" << endl; - t << "</html>" << endl; - f.close(); - } - } - - // Generate tree view - if (!OutString) - OutString = new QString; - QTextOStream t(OutString); - t.setEncoding(QTextStream::UnicodeUTF8); - - if (m_topLevelIndex) - { - //if (searchEngine) - //{ - // t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; - //} - t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; - t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"; - t << " <head>\n"; - t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"; - t << " <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n"; - t << " <meta http-equiv=\"Content-Language\" content=\"en\" />\n"; - if (searchEngine) - { - t << " <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>" << endl; - t << " <script type=\"text/javaScript\" src=\"search/search.js\"></script>" << endl; - } - t << " <link rel=\"stylesheet\" href=\""; - QCString cssname=Config_getString("HTML_STYLESHEET"); - if (cssname.isEmpty()) - { - t << "doxygen.css"; - } - else - { - QFileInfo cssfi(cssname); - if (!cssfi.exists()) - { - err("Error: user specified HTML style sheet file does not exist!\n"); - } - t << cssfi.fileName(); - } - t << "\"/>" << endl; - t << " <title>TreeView</title>\n"; - } t << " <script type=\"text/javascript\">\n"; t << " <!-- // Hide script from old browsers\n"; t << " \n"; @@ -726,8 +634,112 @@ void FTVHelp::generateTreeView(QString* OutString) t << "\n"; t << " // End script hiding --> \n"; t << " </script>\n"; - if (m_topLevelIndex) +} + +void FTVHelp::generateTreeViewInline(FTextStream &t) +{ + generateScript(t); + t << " <div class=\"directory-alt\">\n"; + t << " <br/>\n"; + t << " <div style=\"display: block;\">\n"; + + generateTree(t,m_indentNodes[0],0); + + t << " </div>\n"; + t << " </div>\n"; +} + + +void FTVHelp::generateTreeView() +{ + QCString fileName; + QFile f; + static bool searchEngine = Config_getBool("SEARCHENGINE"); + static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); + generateTreeViewImages(); + + fileName=Config_getString("HTML_OUTPUT")+"/index"+Doxygen::htmlFileExtension; + f.setName(fileName); + if (!f.open(IO_WriteOnly)) + { + err("Cannot open file %s for writing!\n",fileName.data()); + return; + } + else + { + FTextStream t(&f); + //t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\">\n"; + t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n"; + t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n"; + t << "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"; + t << "<title>"; + if (Config_getString("PROJECT_NAME").isEmpty()) + { + t << "Doxygen Documentation"; + } + else + { + t << Config_getString("PROJECT_NAME"); + } + t << "</title>\n</head>" << endl; + t << "<frameset cols=\"" << Config_getInt("TREEVIEW_WIDTH") << ",*\">" << endl; + t << " <frame src=\"tree" << Doxygen::htmlFileExtension << "\" name=\"treefrm\"/>" << endl; + t << " <frame src=\"main" << Doxygen::htmlFileExtension << "\" name=\"basefrm\"/>" << endl; + t << " <noframes>" << endl; + t << " <body>" << endl; + t << " <a href=\"main" << Doxygen::htmlFileExtension << "\">Frames are disabled. Click here to go to the main page.</a>" << endl; + t << " </body>" << endl; + t << " </noframes>" << endl; + t << "</frameset>" << endl; + t << "</html>" << endl; + f.close(); + } + + // Generate tree view + fileName=Config_getString("HTML_OUTPUT")+"/tree"+Doxygen::htmlFileExtension; + f.setName(fileName); + if (!f.open(IO_WriteOnly)) { + err("Cannot open file %s for writing!\n",fileName.data()); + return; + } + else + { + FTextStream t(&f); + + //if (searchEngine) + //{ + // t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; + //} + t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; + t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"; + t << " <head>\n"; + t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n"; + t << " <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n"; + t << " <meta http-equiv=\"Content-Language\" content=\"en\" />\n"; + if (searchEngine) + { + t << " <link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>" << endl; + t << " <script type=\"text/javaScript\" src=\"search/search.js\"></script>" << endl; + } + t << " <link rel=\"stylesheet\" href=\""; + QCString cssname=Config_getString("HTML_STYLESHEET"); + if (cssname.isEmpty()) + { + t << "doxygen.css"; + } + else + { + QFileInfo cssfi(cssname); + if (!cssfi.exists()) + { + err("Error: user specified HTML style sheet file does not exist!\n"); + } + t << cssfi.fileName(); + } + t << "\"/>" << endl; + t << " <title>TreeView</title>\n"; + generateScript(t); t << " </head>\n"; t << "\n"; t << " <body class=\"ftvtree\""; @@ -793,41 +805,17 @@ void FTVHelp::generateTreeView(QString* OutString) t << projName; } t << "</span></h3>\n"; - } - else - { - t << " <div class=\"directory-alt\">\n"; - t << " <br/>\n"; - } - t << " <div style=\"display: block;\">\n"; + t << " <div style=\"display: block;\">\n"; - generateTree(t,m_indentNodes[0],0); + generateTree(t,m_indentNodes[0],0); - t << " </div>\n"; - t << " </div>\n"; + t << " </div>\n"; + t << " </div>\n"; - if (m_topLevelIndex) - { t << " </body>\n"; t << "</html>\n"; - } - if (m_topLevelIndex) - { - fileName=Config_getString("HTML_OUTPUT")+"/tree"+Doxygen::htmlFileExtension; - f.setName(fileName); - if (!f.open(IO_WriteOnly)) - { - err("Cannot open file %s for writing!\n",fileName.data()); - return; - } - else - { - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); - t << *OutString << endl; - f.close(); - } + f.close(); } } diff --git a/src/ftvhelp.h b/src/ftvhelp.h index 468fa3b..e843b3c 100644 --- a/src/ftvhelp.h +++ b/src/ftvhelp.h @@ -31,6 +31,7 @@ class QFile; struct FTVNode; +class FTextStream; struct FTVImageInfo { @@ -71,7 +72,7 @@ extern FTVImageInfo image_info[]; class FTVHelp : public IndexIntf { public: - FTVHelp(bool topLevelIndex = true); + FTVHelp(bool LTI); ~FTVHelp(); void initialize(); void finalize(); @@ -89,12 +90,14 @@ class FTVHelp : public IndexIntf void addIndexFile(const char *) {} void addImageFile(const char *) {} void addStyleSheetFile(const char *) {} - void generateTreeView(QString* = NULL); + void generateTreeView(); + void generateTreeViewInline(FTextStream &t); private: + void generateScript(FTextStream &t); void generateTreeViewImages(); - void generateTree(QTextStream &t,const QList<FTVNode> &nl,int level); - void generateIndent(QTextStream &t,FTVNode *n,int level); - void generateLink(QTextStream &t,FTVNode *n); + void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level); + void generateIndent(FTextStream &t,FTVNode *n,int level); + void generateLink(FTextStream &t,FTVNode *n); QList<FTVNode> *m_indentNodes; int m_indent; bool m_topLevelIndex; diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 71e5082..f75cc94 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -1320,14 +1320,30 @@ void GroupDef::addMemberToList(MemberList::ListType lt,MemberDef *md) static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); MemberList *ml = createMemberList(lt); - if (((ml->listType()&MemberList::declarationLists) && sortBriefDocs) || - ((ml->listType()&MemberList::documentationLists) && sortMemberDocs) - ) + ml->setNeedsSorting( + ((ml->listType()&MemberList::declarationLists) && sortBriefDocs) || + ((ml->listType()&MemberList::documentationLists) && sortMemberDocs)); + ml->append(md); + +#if 0 + if (ml->needsSorting()) ml->inSort(md); else ml->append(md); +#endif } +void GroupDef::sortMemberLists() +{ + MemberList *ml = m_memberLists.first(); + while (ml) + { + if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + ml = m_memberLists.next(); + } +} + + MemberList *GroupDef::getMemberList(MemberList::ListType lt) const { GroupDef *that = (GroupDef*)this; diff --git a/src/groupdef.h b/src/groupdef.h index 3e8d188..3482d0f 100644 --- a/src/groupdef.h +++ b/src/groupdef.h @@ -82,6 +82,7 @@ class GroupDef : public Definition void findSectionsInDocumentation(); void addListReferences(); + void sortMemberLists(); bool visited; // number of times accessed for output - KPW diff --git a/src/htmlattrib.h b/src/htmlattrib.h index 6b7006c..ad0f0d8 100644 --- a/src/htmlattrib.h +++ b/src/htmlattrib.h @@ -18,8 +18,8 @@ /*! A Html option. A name, value pair */ struct HtmlAttrib { - QString name; - QString value; + QCString name; + QCString value; }; /*! @brief A list of Html attributes. @@ -35,10 +35,10 @@ class HtmlAttribList : public QList<HtmlAttrib> { operator=(l); } HtmlAttribList &operator=(const HtmlAttribList &l) { clear(); QList<HtmlAttrib>::operator=(l); return *this; } - QString toString() const + QCString toString() const { HtmlAttribList *that = (HtmlAttribList *)this; - QString result; + QCString result; HtmlAttrib *attr=that->first(); while (attr) { diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index c15d71a..b03fd68 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -129,7 +129,7 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs) //------------------------------------------------------------------------- -HtmlDocVisitor::HtmlDocVisitor(QTextStream &t,CodeOutputInterface &ci, +HtmlDocVisitor::HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt) : DocVisitor(DocVisitor_Html), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_langExt(langExt) @@ -308,7 +308,7 @@ void HtmlDocVisitor::visit(DocVerbatim *s) forceEndParagraph(s); m_t << PREFRAG_START; Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,s->context(),s->text().latin1(), + ->parseCode(m_ci,s->context(),s->text(), s->isExample(),s->exampleFile()); m_t << PREFRAG_END; forceStartParagraph(s); @@ -405,7 +405,7 @@ void HtmlDocVisitor::visit(DocInclude *inc) Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci, inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile(), 0, // fd @@ -425,7 +425,7 @@ void HtmlDocVisitor::visit(DocInclude *inc) Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci, inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile(), &fd); m_t << PREFRAG_END; @@ -464,7 +464,7 @@ void HtmlDocVisitor::visit(DocIncOperator *op) { Doxygen::parserManager->getParser(m_langExt) ->parseCode(m_ci,op->context(), - op->text().latin1(),op->isExample(), + op->text(),op->isExample(), op->exampleFile()); } pushEnabled(); @@ -951,9 +951,9 @@ void HtmlDocVisitor::visitPre(DocSection *s) forceEndParagraph(s); m_t << "<h" << s->level()+1 << ">"; m_t << "<a class=\"anchor\" id=\"" << s->anchor(); - m_t << "\">" << endl; + m_t << "\"></a>" << endl; filter(convertCharEntitiesToUTF8(s->title().data())); - m_t << "</a></h" << s->level()+1 << ">\n"; + m_t << "</h" << s->level()+1 << ">\n"; } void HtmlDocVisitor::visitPost(DocSection *s) @@ -1502,15 +1502,15 @@ void HtmlDocVisitor::filterQuotedCdataAttr(const char* str) } } -void HtmlDocVisitor::startLink(const QString &ref,const QString &file, - const QString &relPath,const QString &anchor, - const QString &tooltip) +void HtmlDocVisitor::startLink(const QCString &ref,const QCString &file, + const QCString &relPath,const QCString &anchor, + const QCString &tooltip) { QCString *dest; if (!ref.isEmpty()) // link to entity imported via tag file { m_t << "<a class=\"elRef\" "; - m_t << "doxygen=\"" << ref << ":"; + m_t << "target=\"_blank\" doxygen=\"" << ref << ":"; if ((dest=Doxygen::tagDestinationDict[ref])) m_t << *dest << "/"; m_t << "\" "; } @@ -1552,42 +1552,42 @@ void HtmlDocVisitor::popEnabled() delete v; } -void HtmlDocVisitor::writeDotFile(const QString &fileName,const QString &relPath, - const QString &context) +void HtmlDocVisitor::writeDotFile(const QCString &fileName,const QCString &relPath, + const QCString &context) { - QString baseName=fileName; + QCString baseName=fileName; int i; if ((i=baseName.findRev('/'))!=-1) { baseName=baseName.right(baseName.length()-i-1); } - QString outDir = Config_getString("HTML_OUTPUT"); + QCString outDir = Config_getString("HTML_OUTPUT"); writeDotGraphFromFile(fileName,outDir,baseName,BITMAP); - QString mapName = baseName+".map"; - QString mapFile = fileName+".map"; + QCString mapName = baseName+".map"; + QCString mapFile = fileName+".map"; m_t << "<img src=\"" << relPath << baseName << "." << Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\"" << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl; - QString imap = getDotImageMapFromFile(baseName,outDir,relPath.data(),context); + QCString imap = getDotImageMapFromFile(baseName,outDir,relPath,context); m_t << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">" << imap << "</map>" << endl; } -void HtmlDocVisitor::writeMscFile(const QString &fileName,const QString &relPath, - const QString &context) +void HtmlDocVisitor::writeMscFile(const QCString &fileName,const QCString &relPath, + const QCString &context) { - QString baseName=fileName; + QCString baseName=fileName; int i; if ((i=baseName.findRev('/'))!=-1) { baseName=baseName.right(baseName.length()-i-1); } - QString outDir = Config_getString("HTML_OUTPUT"); + QCString outDir = Config_getString("HTML_OUTPUT"); writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP); - QString mapName = baseName+".map"; - QString mapFile = fileName+".map"; + QCString mapName = baseName+".map"; + QCString mapFile = fileName+".map"; m_t << "<img src=\"" << relPath << baseName << ".png\" alt=\"" << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl; - QString imap = getMscImageMapFromFile(fileName,outDir,relPath.data(),context); + QCString imap = getMscImageMapFromFile(fileName,outDir,relPath,context); m_t << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">" << imap << "</map>" << endl; } diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h index 586ef4f..b31247f 100644 --- a/src/htmldocvisitor.h +++ b/src/htmldocvisitor.h @@ -24,15 +24,14 @@ #include <qcstring.h> class DocNode; -class QTextStream; +class FTextStream; class CodeOutputInterface; -class QString; /*! @brief Concrete visitor implementation for HTML output. */ class HtmlDocVisitor : public DocVisitor { public: - HtmlDocVisitor(QTextStream &t,CodeOutputInterface &ci,const char *langExt); + HtmlDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt); //-------------------------------------- // visitor functions for leaf nodes @@ -133,12 +132,12 @@ class HtmlDocVisitor : public DocVisitor void filter(const char *str); void filterQuotedCdataAttr(const char* str); - void startLink(const QString &ref,const QString &file, - const QString &relPath,const QString &anchor, - const QString &tooltip = QString::null); + void startLink(const QCString &ref,const QCString &file, + const QCString &relPath,const QCString &anchor, + const QCString &tooltip = ""); void endLink(); - void writeDotFile(const QString &fileName,const QString &relPath,const QString &context); - void writeMscFile(const QString &fileName,const QString &relPath,const QString &context); + void writeDotFile(const QCString &fileName,const QCString &relPath,const QCString &context); + void writeMscFile(const QCString &fileName,const QCString &relPath,const QCString &context); void pushEnabled(); void popEnabled(); @@ -150,7 +149,7 @@ class HtmlDocVisitor : public DocVisitor // state variables //-------------------------------------- - QTextStream &m_t; + FTextStream &m_t; CodeOutputInterface &m_ci; bool m_insidePre; bool m_hide; diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 33f6bdc..a07619d 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -857,7 +857,7 @@ void HtmlGenerator::writeStyleSheetFile(QFile &file) t << replaceColorMarkers(defaultStyleSheet); } -static void writeDefaultHeaderFile(QTextStream &t, const char *title, +static void writeDefaultHeaderFile(FTextStream &t, const char *title, const char *relPath,bool usePathCmd, bool searchPage=FALSE) { @@ -929,8 +929,8 @@ static void writeDefaultHeaderFile(QTextStream &t, const char *title, void HtmlGenerator::writeHeaderFile(QFile &file) { - QTextStream t(&file); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&file); + //t.setEncoding(QTextStream::UnicodeUTF8); writeDefaultHeaderFile(t,"$title",relativePathToRoot(0),TRUE); } @@ -948,7 +948,7 @@ void HtmlGenerator::writeFooterFile(QFile &file) << "</html>\n"; } -static void generateDynamicSections(QTextStream &t,const QCString &relPath) +static void generateDynamicSections(FTextStream &t,const QCString &relPath) { if (Config_getBool("HTML_DYNAMIC_SECTIONS")) { @@ -1087,7 +1087,7 @@ void HtmlGenerator::startFile(const char *name,const char *, m_sectionCount=0; } -void HtmlGenerator::writeSearchFooter(QTextStream &t,const QCString &relPath) +void HtmlGenerator::writeSearchFooter(FTextStream &t,const QCString &relPath) { (void)relPath; t << "<!--- window showing the filter options -->\n"; @@ -1107,7 +1107,7 @@ void HtmlGenerator::writeSearchFooter(QTextStream &t,const QCString &relPath) t << "\n"; } -static void writePageFooter(QTextStream &t,const QCString &lastTitle, +static void writePageFooter(FTextStream &t,const QCString &lastTitle, const QCString relPath) { static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); @@ -1271,7 +1271,7 @@ void HtmlGenerator::startIndexItem(const char *ref,const char *f) if (ref) { t << "<a class=\"elRef\" "; - t << "doxygen=\"" << ref << ":"; + t << "target=\"_blank\" doxygen=\"" << ref << ":"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; t << "\" "; } @@ -1326,7 +1326,7 @@ void HtmlGenerator::writeObjectLink(const char *ref,const char *f, if (ref) { t << "<a class=\"elRef\" "; - t << "doxygen=\"" << ref << ":"; + t << "target=\"_blank\" doxygen=\"" << ref << ":"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; t << "\" "; } @@ -1359,7 +1359,7 @@ void HtmlGenerator::writeCodeLink(const char *ref,const char *f, if (ref) { t << "<a class=\"codeRef\" "; - t << "doxygen=\"" << ref << ":"; + t << "target=\"_blank\" doxygen=\"" << ref << ":"; if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; t << "\" "; } @@ -1435,12 +1435,11 @@ void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::Secti case SectionInfo::Paragraph: t << "\n\n<h5>"; break; default: ASSERT(0); break; } - t << "<a class=\"anchor\" id=\"" << lab << "\">"; + t << "<a class=\"anchor\" id=\"" << lab << "\"></a>"; } void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type) { - t << "</a>"; switch(type) { case SectionInfo::Page: t << "</h1>"; break; @@ -1550,7 +1549,7 @@ void HtmlGenerator::writeChar(char c) //--- helper function for dynamic sections ------------------------- -static void startSectionHeader(QTextStream &t,int sectionCount) +static void startSectionHeader(FTextStream &t,int sectionCount) { static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); if (dynamicSections) @@ -1567,12 +1566,12 @@ static void startSectionHeader(QTextStream &t,int sectionCount) } } -static void endSectionHeader(QTextStream &t) +static void endSectionHeader(FTextStream &t) { t << "</div>" << endl; } -static void startSectionSummary(QTextStream &t,int sectionCount) +static void startSectionSummary(FTextStream &t,int sectionCount) { static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); if (dynamicSections) @@ -1583,7 +1582,7 @@ static void startSectionSummary(QTextStream &t,int sectionCount) } } -static void endSectionSummary(QTextStream &t) +static void endSectionSummary(FTextStream &t) { static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); if (dynamicSections) @@ -1592,7 +1591,7 @@ static void endSectionSummary(QTextStream &t) } } -static void startSectionContent(QTextStream &t,int sectionCount) +static void startSectionContent(FTextStream &t,int sectionCount) { static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS"); if (dynamicSections) @@ -1607,7 +1606,7 @@ static void startSectionContent(QTextStream &t,int sectionCount) } } -static void endSectionContent(QTextStream &t) +static void endSectionContent(FTextStream &t) { t << "</div>" << endl; } @@ -1667,7 +1666,7 @@ void HtmlGenerator::endMemberList() } } -// annonymous type: +// anonymous type: // 0 = single column right aligned // 1 = double column left aligned // 2 = single column left aligned @@ -1756,7 +1755,7 @@ void HtmlGenerator::startMemberSections() DBG_HTML(t << "<!-- startMemberSections -->" << endl) if (Config_getBool("HTML_ALIGN_MEMBERS")) { - t << "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">" << endl; + t << "<table class=\"memberdecls\">" << endl; // HTML is not recursively decomposable, sorry //t << "<tr><td></td></tr>" << endl; } @@ -2221,7 +2220,7 @@ void HtmlGenerator::printDoc(DocNode *n,const char *langExt) //---------------- helpers for index generation ----------------------------- -static void startQuickIndexList(QTextStream &t,bool compact,bool topLevel=TRUE) +static void startQuickIndexList(FTextStream &t,bool compact,bool topLevel=TRUE) { if (compact) { @@ -2241,7 +2240,7 @@ static void startQuickIndexList(QTextStream &t,bool compact,bool topLevel=TRUE) } } -static void endQuickIndexList(QTextStream &t,bool compact) +static void endQuickIndexList(FTextStream &t,bool compact) { if (compact) { @@ -2254,7 +2253,7 @@ static void endQuickIndexList(QTextStream &t,bool compact) } } -static void startQuickIndexItem(QTextStream &t,const char *l, +static void startQuickIndexItem(FTextStream &t,const char *l, bool hl,bool /*compact*/, const QCString &relPath) { @@ -2264,7 +2263,7 @@ static void startQuickIndexItem(QTextStream &t,const char *l, t << "<span>"; } -static void endQuickIndexItem(QTextStream &t) +static void endQuickIndexItem(FTextStream &t) { t << "</span>"; t << "</a>"; @@ -2297,7 +2296,7 @@ static bool quickLinkVisible(LayoutNavEntry::Kind kind) return FALSE; } -static void renderQuickLinksAsTree(QTextStream &t,const QCString &relPath,LayoutNavEntry *root) +static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,LayoutNavEntry *root) { QListIterator<LayoutNavEntry> li(root->children()); @@ -2327,7 +2326,7 @@ static void renderQuickLinksAsTree(QTextStream &t,const QCString &relPath,Layout } -static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath, +static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath, LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind, bool highlightParent,bool highlightSearch) { @@ -2448,7 +2447,7 @@ static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath, } } -static void writeDefaultQuickLinks(QTextStream &t,bool compact, +static void writeDefaultQuickLinks(FTextStream &t,bool compact, HighlightedItem hli,const QCString &relPath) { LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry(); @@ -2535,8 +2534,8 @@ void HtmlGenerator::writeSearchPage() QFile f(fileName); if (f.open(IO_WriteOnly)) { - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(QTextStream::UnicodeUTF8); if (g_header.isEmpty()) { writeDefaultHeaderFile(t,theTranslator->trSearch().data(),0,FALSE,TRUE); diff --git a/src/htmlgen.h b/src/htmlgen.h index e795bf9..a3c0b81 100644 --- a/src/htmlgen.h +++ b/src/htmlgen.h @@ -25,6 +25,7 @@ #define PREFRAG_END "</pre></div>" class QFile; +class FTextStream; class HtmlGenerator : public OutputGenerator { @@ -247,7 +248,7 @@ class HtmlGenerator : public OutputGenerator { t << "<a name=\"" << anchor << "\"></a>"; } void linkableSymbol(int,const char *,Definition *,Definition *) {} - static void writeSearchFooter(QTextStream &t,const QCString &relPath); + static void writeSearchFooter(FTextStream &t,const QCString &relPath); static void writeSearchData(const char *dir); //static void generateSectionImages(); diff --git a/src/index.cpp b/src/index.cpp index 390fc55..b385d79 100644 --- a/src/index.cpp +++ b/src/index.cpp @@ -716,17 +716,20 @@ void writeHierarchicalIndex(OutputList &ol) FTVHelp* ftv = 0; bool treeView=Config_getBool("USE_INLINE_TREES"); if (treeView) - ftv = new FTVHelp(false); + { + ftv = new FTVHelp(FALSE); + } writeClassHierarchy(ol,ftv); if (ftv) { - QString OutStr; - ftv->generateTreeView(&OutStr); + QGString outStr; + FTextStream t(&outStr); + ftv->generateTreeViewInline(t); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - ol.writeString(OutStr); + ol.writeString(outStr); ol.popGeneratorState(); delete ftv; } @@ -2446,7 +2449,7 @@ static QCString searchId(const QCString &s) else { char val[4]; - sprintf(val,"_%02x",c); + sprintf(val,"_%02x",(uchar)c); result+=val; } } @@ -2645,12 +2648,12 @@ void writeJavascriptSearchIndex() QCString *dest = Doxygen::tagDestinationDict[d->getReference()]; if (dest && *dest=='.') // relative path (see bug 593679) { - t << "doxygen=\"" << d->getReference() << ":../" + t << "target=\"_blank\" doxygen=\"" << d->getReference() << ":../" << *dest << "/\" href=\"../" << *dest << "/"; } else if (dest) // absolute path { - t << "doxygen=\"" << d->getReference() << ":" + t << "target=\"_blank\" doxygen=\"" << d->getReference() << ":" << *dest << "/\" href=\"" << *dest << "/"; } } @@ -2731,7 +2734,7 @@ void writeJavascriptSearchIndex() if (!d->getReference().isEmpty()) { QCString *dest; - t << "doxygen=\"" << d->getReference() << ":../"; + t << "target=\"_blank\" doxygen=\"" << d->getReference() << ":../"; if ((dest=Doxygen::tagDestinationDict[d->getReference()])) t << *dest << "/"; t << "\" "; t << "href=\"../"; @@ -2919,7 +2922,7 @@ void writeJavascriptSearchIndex() Doxygen::indexList.addStyleSheetFile("search/search.js"); } -void writeSearchCategories(QTextStream &t) +void writeSearchCategories(FTextStream &t) { static SearchIndexCategoryMapping map; int i,j=0; @@ -3525,7 +3528,7 @@ void writeGroupIndex(OutputList &ol) bool treeView=Config_getBool("USE_INLINE_TREES"); if (treeView) { - ftv = new FTVHelp(false); + ftv = new FTVHelp(FALSE); } writeGroupHierarchy(ol,ftv); @@ -3533,11 +3536,12 @@ void writeGroupIndex(OutputList &ol) Doxygen::indexList.decContentsDepth(); if (ftv) { - QString OutStr; - ftv->generateTreeView(&OutStr); + QGString outStr; + FTextStream t(&outStr); + ftv->generateTreeViewInline(t); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - ol.writeString(OutStr); + ol.writeString(outStr); ol.popGeneratorState(); delete ftv; } @@ -3571,17 +3575,20 @@ void writeDirIndex(OutputList &ol) FTVHelp* ftv = 0; bool treeView=Config_getBool("USE_INLINE_TREES"); if (treeView) - ftv = new FTVHelp(false); + { + ftv = new FTVHelp(FALSE); + } writeDirHierarchy(ol,ftv); if (ftv) { - QString OutStr; - ftv->generateTreeView(&OutStr); + QGString outStr; + FTextStream t(&outStr); + ftv->generateTreeViewInline(t); ol.pushGeneratorState(); ol.disableAllBut(OutputGenerator::Html); - ol.writeString(OutStr); + ol.writeString(outStr); ol.popGeneratorState(); delete ftv; } diff --git a/src/index.h b/src/index.h index 065bfff..c5d1bb3 100644 --- a/src/index.h +++ b/src/index.h @@ -25,7 +25,7 @@ class Definition; class MemberDef; class OutputList; -class QTextStream; +class FTextStream; /** \brief Abstract interface for index generators. */ class IndexIntf @@ -268,6 +268,6 @@ void addNamespaceMemberNameToIndex(MemberDef *md); // search engine void writeJavascriptSearchIndex(); -void writeSearchCategories(QTextStream &t); +void writeSearchCategories(FTextStream &t); #endif diff --git a/src/instdox.cpp b/src/instdox.cpp index 6343cfd..a446a9a 100644 --- a/src/instdox.cpp +++ b/src/instdox.cpp @@ -110,7 +110,7 @@ void writeInstallScript() t << " }\n"; t << " elsif ( ! $quiet && $sub ne \"_doc\" && $sub ne \"_cgi\" )\n"; t << " {\n"; - t << " print \"Substituting $subst{$sub} for each occurence of tag file $sub\\n\"; \n"; + t << " print \"Substituting $subst{$sub} for each occurrence of tag file $sub\\n\"; \n"; t << " }\n"; t << "}\n"; t << "\n"; diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index 7897731..8e9c1bf 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -28,9 +28,9 @@ #include "msc.h" #include "htmlattrib.h" -static QString escapeLabelName(const char *s) +static QCString escapeLabelName(const char *s) { - QString result; + QCString result; const char *p=s; char c; while ((c=*p++)) @@ -73,9 +73,9 @@ static int rowspan(DocHtmlCell *cell) return retval; } -QString LatexDocVisitor::escapeMakeIndexChars(const char *s) +QCString LatexDocVisitor::escapeMakeIndexChars(const char *s) { - QString result; + QCString result; const char *p=s; char str[2]; str[1]=0; char c; @@ -96,7 +96,7 @@ QString LatexDocVisitor::escapeMakeIndexChars(const char *s) } -LatexDocVisitor::LatexDocVisitor(QTextStream &t,CodeOutputInterface &ci, +LatexDocVisitor::LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt,bool insideTabbing) : DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE), m_insideTabbing(insideTabbing), @@ -272,27 +272,27 @@ void LatexDocVisitor::visit(DocStyleChange *s) void LatexDocVisitor::visit(DocVerbatim *s) { - static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); + //static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); if (m_hide) return; switch(s->type()) { case DocVerbatim::Code: - if (latexSourceCode) - { - m_t << "\n\n\\begin{footnotesize}\\begin{alltt}" << endl; - } - else + //if (latexSourceCode) + //{ + // m_t << "\n\n\\begin{footnotesize}\\begin{alltt}" << endl; + //} + //else { m_t << "\n\\begin{DoxyCode}\n"; } Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,s->context(),s->text().latin1(), + ->parseCode(m_ci,s->context(),s->text(), s->isExample(),s->exampleFile()); - if (latexSourceCode) - { - m_t << "\\end{alltt}\\end{footnotesize}" << endl; - } - else + //if (latexSourceCode) + //{ + // m_t << "\\end{alltt}\\end{footnotesize}" << endl; + //} + //else { m_t << "\\end{DoxyCode}\n"; } @@ -389,7 +389,7 @@ void LatexDocVisitor::visit(DocInclude *inc) FileDef fd( cfi.dirPath(), cfi.fileName() ); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile(), &fd); m_t << "\\end{DoxyCodeInclude}" << endl; @@ -399,7 +399,7 @@ void LatexDocVisitor::visit(DocInclude *inc) m_t << "\n\\begin{DoxyCodeInclude}\n"; Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(),inc->isExample(), + inc->text(),inc->isExample(), inc->exampleFile()); m_t << "\\end{DoxyCodeInclude}\n"; break; @@ -431,7 +431,7 @@ void LatexDocVisitor::visit(DocIncOperator *op) if (!m_hide) { Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,op->context(),op->text().latin1(), + ->parseCode(m_ci,op->context(),op->text(), op->isExample(),op->exampleFile()); } pushEnabled(); @@ -948,7 +948,7 @@ void LatexDocVisitor::visitPre(DocImage *img) m_t << "\n\\begin{DoxyImageNoCaption}\n" " \\mbox{"; } - QString gfxName = img->name(); + QCString gfxName = img->name(); if (gfxName.right(4)==".eps" || gfxName.right(4)==".pdf") { gfxName=gfxName.left(gfxName.length()-4); @@ -1062,7 +1062,7 @@ void LatexDocVisitor::visitPost(DocSecRefList *) //void LatexDocVisitor::visitPre(DocLanguage *l) //{ -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); // if (l->id().lower()!=langId.lower()) // { // pushEnabled(); @@ -1072,7 +1072,7 @@ void LatexDocVisitor::visitPost(DocSecRefList *) // //void LatexDocVisitor::visitPost(DocLanguage *l) //{ -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); // if (l->id().lower()!=langId.lower()) // { // popEnabled(); @@ -1238,7 +1238,7 @@ void LatexDocVisitor::filter(const char *str) filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem); } -void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor) +void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) { if (ref.isEmpty() && Config_getBool("PDF_HYPERLINKS")) // internal PDF link { @@ -1269,7 +1269,7 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt } } -void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QString &anchor) +void LatexDocVisitor::endLink(const QCString &ref,const QCString &file,const QCString &anchor) { m_t << "}"; if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS")) @@ -1295,13 +1295,13 @@ void LatexDocVisitor::popEnabled() delete v; } -void LatexDocVisitor::startDotFile(const QString &fileName, - const QString &width, - const QString &height, +void LatexDocVisitor::startDotFile(const QCString &fileName, + const QCString &width, + const QCString &height, bool hasCaption ) { - QString baseName=fileName; + QCString baseName=fileName; int i; if ((i=baseName.findRev('/'))!=-1) { @@ -1315,8 +1315,8 @@ void LatexDocVisitor::startDotFile(const QString &fileName, { baseName=baseName.left(baseName.length()-4); } - QString outDir = Config_getString("LATEX_OUTPUT"); - QString name = fileName; + QCString outDir = Config_getString("LATEX_OUTPUT"); + QCString name = fileName; writeDotGraphFromFile(name,outDir,baseName,EPS); if (hasCaption) { @@ -1358,15 +1358,15 @@ void LatexDocVisitor::endDotFile(bool hasCaption) } } -void LatexDocVisitor::writeMscFile(const QString &baseName) +void LatexDocVisitor::writeMscFile(const QCString &baseName) { - QString shortName = baseName; + QCString shortName = baseName; int i; if ((i=shortName.findRev('/'))!=-1) { shortName=shortName.right(shortName.length()-i-1); } - QString outDir = Config_getString("LATEX_OUTPUT"); + QCString outDir = Config_getString("LATEX_OUTPUT"); writeMscGraphFromFile(baseName,outDir,baseName,MSC_EPS); m_t << "\n\\begin{DoxyImageNoCaption}" " \\mbox{\\includegraphics"; diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h index 94037df..7b7a4d9 100644 --- a/src/latexdocvisitor.h +++ b/src/latexdocvisitor.h @@ -24,15 +24,14 @@ #include <qcstring.h> #include <qmap.h> -class QTextStream; +class FTextStream; class CodeOutputInterface; -class QString; /*! @brief Concrete visitor implementation for LaTeX output. */ class LatexDocVisitor : public DocVisitor { public: - LatexDocVisitor(QTextStream &t,CodeOutputInterface &ci, + LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt,bool insideTabbing); //-------------------------------------- @@ -137,15 +136,15 @@ class LatexDocVisitor : public DocVisitor //-------------------------------------- void filter(const char *str); - void startLink(const QString &ref,const QString &file, - const QString &anchor); - void endLink(const QString &ref,const QString &file, - const QString &anchor); - QString escapeMakeIndexChars(const char *s); - void startDotFile(const QString &fileName,const QString &width, - const QString &height, bool hasCaption); + void startLink(const QCString &ref,const QCString &file, + const QCString &anchor); + void endLink(const QCString &ref,const QCString &file, + const QCString &anchor); + QCString escapeMakeIndexChars(const char *s); + void startDotFile(const QCString &fileName,const QCString &width, + const QCString &height, bool hasCaption); void endDotFile(bool hasCaption); - void writeMscFile(const QString &fileName); + void writeMscFile(const QCString &fileName); void pushEnabled(); void popEnabled(); @@ -154,7 +153,7 @@ class LatexDocVisitor : public DocVisitor // state variables //-------------------------------------- - QTextStream &m_t; + FTextStream &m_t; CodeOutputInterface &m_ci; bool m_insidePre; bool m_insideItem; diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 3f72ff4..d848a97 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -92,7 +92,7 @@ void LatexGenerator::init() QCString latex_command = Config_getString("LATEX_CMD_NAME"); QCString mkidx_command = Config_getString("MAKEINDEX_CMD_NAME"); // end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05 - QTextStream t(&file); + FTextStream t(&file); if (!Config_getBool("USE_PDFLATEX")) // use plain old latex { t << "all: clean refman.dvi" << endl @@ -166,7 +166,7 @@ void LatexGenerator::init() createSubDirs(d); } -static void writeDefaultHeaderPart1(QTextStream &t) +static void writeDefaultHeaderPart1(FTextStream &t) { // part 1 @@ -267,7 +267,7 @@ static void writeDefaultHeaderPart1(QTextStream &t) } -static void writeDefaultHeaderPart2(QTextStream &t) +static void writeDefaultHeaderPart2(FTextStream &t) { // part 2 t << "}\\\\" << endl @@ -275,7 +275,7 @@ static void writeDefaultHeaderPart2(QTextStream &t) << "{\\large "; } -static void writeDefaultHeaderPart3(QTextStream &t) +static void writeDefaultHeaderPart3(FTextStream &t) { // part 3 t << " Doxygen " << versionString << "}\\\\" << endl @@ -296,7 +296,7 @@ static void writeDefaultHeaderPart3(QTextStream &t) } } -static void writeDefaultStyleSheetPart1(QTextStream &t) +static void writeDefaultStyleSheetPart1(FTextStream &t) { // part 1 t << "\\NeedsTeXFormat{LaTeX2e}\n" @@ -329,13 +329,14 @@ static void writeDefaultStyleSheetPart1(QTextStream &t) t << "\\rfoot[\\fancyplain{}{\\bfseries\\scriptsize%\n "; } -static void writeDefaultStyleSheetPart2(QTextStream &t) +static void writeDefaultStyleSheetPart2(FTextStream &t) { t << "\\lfoot[]{\\fancyplain{}{\\bfseries\\scriptsize%\n "; } -static void writeDefaultStyleSheetPart3(QTextStream &t) +static void writeDefaultStyleSheetPart3(FTextStream &t) { + static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE"); t << "}}\n"; t << "\\cfoot{}\n\n"; t << "%---------- Internal commands used in this style file ----------------\n\n"; @@ -365,13 +366,27 @@ static void writeDefaultStyleSheetPart3(QTextStream &t) " \\normalsize%\n" "}\n\n"; t << "% Used by @code ... @endcode\n" - "\\newenvironment{DoxyCode}{%\n" - " \\footnotesize%\n" - " \\verbatim%\n" - "}{%\n" - " \\endverbatim%\n" - " \\normalsize%\n" - "}\n\n"; + "\\newenvironment{DoxyCode}{%\n"; + if (latexSourceCode) + { + t << "\n\n\\begin{footnotesize}\\begin{alltt}%" << endl; + } + else + { + t << " \\footnotesize%\n" + " \\verbatim%\n"; + } + t << "}{%\n"; + if (latexSourceCode) + { + t << "\\end{alltt}\\end{footnotesize}%" << endl; + } + else + { + t << " \\endverbatim%\n" + " \\normalsize%\n"; + } + t << "}\n\n"; t << "% Used by @example, @include, @includelineno and @dontinclude\n" "\\newenvironment{DoxyCodeInclude}{%\n" " \\DoxyCode%\n" @@ -529,6 +544,11 @@ static void writeDefaultStyleSheetPart3(QTextStream &t) " \\end{description}%\n" " \\end{DoxyDesc}%\n" "}\n\n"; + t << "% is used for parameters within a detailed function description\n" + "\\newenvironment{DoxyParamCaption}{%\n" + " \\renewcommand{\\item}[2][]{##1 \\em ##2}%\n" + " }{%\n" + "}\n\n"; t << "% Used by return value lists\n" "\\newenvironment{DoxyRetVals}[1]{%\n" " \\begin{DoxyDesc}{#1}%\n" @@ -628,7 +648,7 @@ static void writeDefaultStyleSheetPart3(QTextStream &t) void LatexGenerator::writeHeaderFile(QFile &f) { - QTextStream t(&f); + FTextStream t(&f); writeDefaultHeaderPart1(t); t << "Your title here"; writeDefaultHeaderPart2(t); @@ -638,8 +658,8 @@ void LatexGenerator::writeHeaderFile(QFile &f) void LatexGenerator::writeStyleSheetFile(QFile &f) { - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(QTextStream::UnicodeUTF8); writeDefaultStyleSheetPart1(t); QCString &projectName = Config_getString("PROJECT_NAME"); @@ -855,7 +875,7 @@ void LatexGenerator::startIndexSection(IndexSections is) void LatexGenerator::endIndexSection(IndexSections is) { - static bool compactLatex = Config_getBool("COMPACT_LATEX"); + //static bool compactLatex = Config_getBool("COMPACT_LATEX"); static bool sourceBrowser = Config_getBool("SOURCE_BROWSER"); static QCString latexHeader = Config_getString("LATEX_HEADER"); switch (is) @@ -1082,9 +1102,9 @@ void LatexGenerator::endIndexSection(IndexSections is) } } -void LatexGenerator::writePageLink(const char *name, bool first) +void LatexGenerator::writePageLink(const char *name, bool /*first*/) { - bool &compactLatex = Config_getBool("COMPACT_LATEX"); + //bool &compactLatex = Config_getBool("COMPACT_LATEX"); // next is remove for bug615957 //if (compactLatex || first) t << "\\input" ; else t << "\\include"; t << "\\input" ; @@ -1928,14 +1948,46 @@ void LatexGenerator::endParamList() t << "\\end{Desc}" << endl; } -void LatexGenerator::startParameterType(bool first,const char *key) +void LatexGenerator::startParameterList(bool openBracket) +{ + /* start of ParameterType ParameterName list */ + if (openBracket) t << "("; + t << endl << "\\begin{DoxyParamCaption}" << endl; +} + + +void LatexGenerator::startParameterType(bool /*first*/,const char *key) +{ + t << "\\item[{"; + t << key; +// if (!first) +// { +// t << "\\/ " << key << " "; +// } +} + +void LatexGenerator::endParameterType() { - if (!first) + t << "}]"; +} + +void LatexGenerator::startParameterName(bool /*oneArgOnly*/) +{ + t << "{"; +} + +void LatexGenerator::endParameterName(bool last,bool /* emptyList */,bool closeBracket) +{ + t << "}" << endl; + + if (last) { - t << "\\/ " << key << " "; + t << "\\end{DoxyParamCaption}" << endl; + if (closeBracket) t << ")"; } } + void LatexGenerator::printDoc(DocNode *n,const char *langExt) { LatexDocVisitor *visitor = new LatexDocVisitor(t,*this,langExt,insideTabbing); @@ -2025,27 +2077,27 @@ void LatexGenerator::escapeMakeIndexChars(const char *s) void LatexGenerator::startCodeFragment() { - if (m_prettyCode) - { - t << endl << endl; - t << "\\begin{footnotesize}\\begin{alltt}\n"; - } - else - { + //if (m_prettyCode) + //{ + // t << endl << endl; + // t << "\\begin{footnotesize}\\begin{alltt}\n"; + //} + //else + //{ t << "\n\\begin{DoxyCode}\n"; - } + //} } void LatexGenerator::endCodeFragment() { - if (m_prettyCode) - { - t << "\\end{alltt}\\end{footnotesize}" << endl; - } - else - { + //if (m_prettyCode) + //{ + // t << "\\end{alltt}\\end{footnotesize}" << endl; + //} + //else + //{ t << "\\end{DoxyCode}\n"; - } + //} } void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const char *anchor,int l) diff --git a/src/latexgen.h b/src/latexgen.h index 9e0078f..6ba7c79 100644 --- a/src/latexgen.h +++ b/src/latexgen.h @@ -217,10 +217,10 @@ class LatexGenerator : public OutputGenerator void startMemberDocName(bool) {} void endMemberDocName() {} void startParameterType(bool,const char *); - void endParameterType() {} - void startParameterName(bool) {} - void endParameterName(bool,bool,bool) {} - void startParameterList(bool) {} + void endParameterType(); + void startParameterName(bool); + void endParameterName(bool,bool,bool); + void startParameterList(bool); void endParameterList() {} void startConstraintList(const char *); diff --git a/src/layout.h b/src/layout.h index ba8089c..8d2c5fa 100644 --- a/src/layout.h +++ b/src/layout.h @@ -123,7 +123,7 @@ struct LayoutNavEntry Dirs, Examples }; - LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QString &bf, const QString &tl,bool prepend=FALSE) + LayoutNavEntry(LayoutNavEntry *parent,Kind k,bool vs,const QCString &bf, const QCString &tl,bool prepend=FALSE) : m_parent(parent), m_kind(k), m_visible(vs), m_baseFile(bf), m_title(tl) { m_children.setAutoDelete(TRUE); if (parent) { if (prepend) parent->prependChild(this); else parent->addChild(this); } diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in index ed1d643..52adf17 100644 --- a/src/libdoxygen.pro.in +++ b/src/libdoxygen.pro.in @@ -48,6 +48,7 @@ HEADERS = bufstr.h \ filedef.h \ filename.h \ formula.h \ + ftextstream.h \ ftvhelp.h \ groupdef.h \ htags.h \ @@ -179,6 +180,7 @@ SOURCES = ce_lex.cpp \ filedef.cpp \ filename.cpp \ formula.cpp \ + ftextstream.cpp \ ftvhelp.cpp \ fortrancode.cpp \ fortranscanner.cpp \ diff --git a/src/lodepng.h b/src/lodepng.h index 545bb91..a86ab65 100644 --- a/src/lodepng.h +++ b/src/lodepng.h @@ -1120,7 +1120,7 @@ The meanings of the LodePNG error values: *) 53: size of zlib data too small *) 55: jumped past tree while generating huffman tree, this could be when the tree will have more leaves than symbols after generating it out of the - given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib. + given lengths. They call this an oversubscribed dynamic bit lengths tree in zlib. *) 56: given output image colorType or bitDepth not supported for color conversion *) 57: invalid CRC encountered (checking CRC can be disabled) *) 58: invalid ADLER32 encountered (checking ADLER32 can be disabled) diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp index 4a5cf61..b4886b6 100644 --- a/src/mandocvisitor.cpp +++ b/src/mandocvisitor.cpp @@ -28,7 +28,7 @@ #include <qfileinfo.h> #include "parserintf.h" -ManDocVisitor::ManDocVisitor(QTextStream &t,CodeOutputInterface &ci, +ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt) : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE), m_indent(0), m_langExt(langExt) @@ -195,7 +195,7 @@ void ManDocVisitor::visit(DocVerbatim *s) m_t << ".PP" << endl; m_t << ".nf" << endl; Doxygen::parserManager->getParser(0/*TODO*/) - ->parseCode(m_ci,s->context(),s->text().latin1(), + ->parseCode(m_ci,s->context(),s->text(), s->isExample(),s->exampleFile()); if (!m_firstCol) m_t << endl; m_t << ".fi" << endl; @@ -244,7 +244,7 @@ void ManDocVisitor::visit(DocInclude *inc) FileDef fd( cfi.dirPath(), cfi.fileName() ); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile(), &fd); if (!m_firstCol) m_t << endl; @@ -259,7 +259,7 @@ void ManDocVisitor::visit(DocInclude *inc) m_t << ".nf" << endl; Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(),inc->isExample(), + inc->text(),inc->isExample(), inc->exampleFile()); if (!m_firstCol) m_t << endl; m_t << ".fi" << endl; @@ -304,7 +304,7 @@ void ManDocVisitor::visit(DocIncOperator *op) if (!m_hide) { Doxygen::parserManager->getParser(0/*TODO*/) - ->parseCode(m_ci,op->context(),op->text().latin1(), + ->parseCode(m_ci,op->context(),op->text(), op->isExample(),op->exampleFile()); } pushEnabled(); @@ -479,7 +479,7 @@ void ManDocVisitor::visitPre(DocTitle *) void ManDocVisitor::visitPost(DocTitle *) { if (m_hide) return; - m_t << "\\fP"; + m_t << "\\fP" << endl; m_t << ".RS 4" << endl; } diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h index 2ace4c6..5b7eebe 100644 --- a/src/mandocvisitor.h +++ b/src/mandocvisitor.h @@ -23,15 +23,14 @@ #include <qstack.h> #include <qcstring.h> -class QTextStream; +class FTextStream; class CodeOutputInterface; -class QString; /*! @brief Concrete visitor implementation for LaTeX output. */ class ManDocVisitor : public DocVisitor { public: - ManDocVisitor(QTextStream &t,CodeOutputInterface &ci,const char *langExt); + ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt); //-------------------------------------- // visitor functions for leaf nodes @@ -143,7 +142,7 @@ class ManDocVisitor : public DocVisitor // state variables //-------------------------------------- - QTextStream &m_t; + FTextStream &m_t; CodeOutputInterface &m_ci; bool m_insidePre; bool m_hide; diff --git a/src/mangen.cpp b/src/mangen.cpp index 67c389b..fc5f504 100644 --- a/src/mangen.cpp +++ b/src/mangen.cpp @@ -422,9 +422,9 @@ void ManGenerator::startDoxyAnchor(const char *,const char *manName, { if ( linkfile.open( IO_WriteOnly ) ) { - QTextStream linkstream; + FTextStream linkstream; linkstream.setDevice(&linkfile); - linkstream.setEncoding(QTextStream::UnicodeUTF8); + //linkstream.setEncoding(QTextStream::UnicodeUTF8); linkstream << ".so man" << getExtension() << "/" << buildFileName( manName ) << endl; } } diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 17eb795..e7fa89e 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -98,14 +98,19 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, //printf("writeDefArgList(%d)\n",defArgList->count()); ol.pushGeneratorState(); - ol.disableAllBut(OutputGenerator::Html); + //ol.disableAllBut(OutputGenerator::Html); + bool htmlOn = ol.isEnabled(OutputGenerator::Html); + bool latexOn = ol.isEnabled(OutputGenerator::Latex); { - // html + // html and latex + if (htmlOn) ol.enable(OutputGenerator::Html); + if (latexOn) ol.enable(OutputGenerator::Latex); ol.endMemberDocName(); ol.startParameterList(!md->isObjCMethod()); } ol.enableAll(); ol.disable(OutputGenerator::Html); + ol.disable(OutputGenerator::Latex); { // other formats if (!md->isObjCMethod()) ol.docify("("); // start argument list @@ -202,12 +207,16 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, ol.docify(" "); } ol.disable(OutputGenerator::Man); + ol.disable(OutputGenerator::Latex); ol.startEmphasis(); ol.enable(OutputGenerator::Man); + if (latexOn) ol.enable(OutputGenerator::Latex); if (a->name.isEmpty()) ol.docify(a->type); else ol.docify(a->name); ol.disable(OutputGenerator::Man); + ol.disable(OutputGenerator::Latex); ol.endEmphasis(); ol.enable(OutputGenerator::Man); + if (latexOn) ol.enable(OutputGenerator::Latex); } if (!a->array.isEmpty()) { @@ -260,13 +269,13 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, first=FALSE; } ol.pushGeneratorState(); - bool htmlOn = ol.isEnabled(OutputGenerator::Html); ol.disable(OutputGenerator::Html); + ol.disable(OutputGenerator::Latex); //if (!first) ol.writeString(" "); if (!md->isObjCMethod()) ol.docify(")"); // end argument list ol.enableAll(); - ol.disableAllBut(OutputGenerator::Html); - if (!htmlOn) ol.disable(OutputGenerator::Html); + if (htmlOn) ol.enable(OutputGenerator::Html); + if (latexOn) ol.enable(OutputGenerator::Latex); if (!md->isDefine()) { if (first) ol.startParameterName(defArgList->count()<2); @@ -355,7 +364,7 @@ class MemberDefImpl NamespaceDef *nspace; // the namespace this member is in. MemberDef *enumScope; // the enclosing scope, if this is an enum field - MemberDef *annEnumType; // the annonymous enum that is the type of this member + MemberDef *annEnumType; // the anonymous enum that is the type of this member MemberList *enumFields; // enumeration fields MemberDef *redefines; // the members that this member redefines @@ -449,7 +458,6 @@ class MemberDefImpl bool docsForDefinition; // TRUE => documentation block is put before // definition. // FALSE => block is put before declaration. - ClassDef *category; }; @@ -636,6 +644,9 @@ MemberDef::MemberDef(const char *df,int dl, m_impl = new MemberDefImpl; m_impl->init(this,t,a,e,p,v,s,r,mt,tal,al); m_flushPending = FALSE; + m_isLinkableCached = 0; + m_isConstructorCached = 0; + m_isDestructorCached = 0; } void MemberDef::moveTo(Definition *scope) @@ -653,6 +664,8 @@ void MemberDef::moveTo(Definition *scope) { m_impl->nspace = (NamespaceDef*)scope; } + m_isLinkableCached = 0; + m_isConstructorCached = 0; } @@ -847,67 +860,87 @@ QCString MemberDef::anchor() const return result; } -bool MemberDef::isLinkableInProject() const +void MemberDef::_computeLinkableInProject() { + makeResident(); static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE"); static bool extractStatic = Config_getBool("EXTRACT_STATIC"); - makeResident(); - + m_isLinkableCached = 2; // linkable //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data()); if (isHidden()) { //printf("is hidden\n"); - return FALSE; + m_isLinkableCached = 1; + return; } if (m_impl->templateMaster) { //printf("has template master\n"); - return m_impl->templateMaster->isLinkableInProject(); + m_isLinkableCached = m_impl->templateMaster->isLinkableInProject() ? 2 : 1; } if (name().isEmpty() || name().at(0)=='@') { //printf("name invalid\n"); - return FALSE; // not a valid or a dummy name + m_isLinkableCached = 1; // not a valid or a dummy name + return; } if (!hasDocumentation() && !isReference()) { //printf("no docs or reference\n"); - return FALSE; // no documentation + m_isLinkableCached = 1; // no documentation + return; } if (m_impl->group && !m_impl->group->isLinkableInProject()) { //printf("group but group not linkable!\n"); - return FALSE; // group but group not linkable + m_isLinkableCached = 1; // group but group not linkable + return; } if (!m_impl->group && m_impl->classDef && !m_impl->classDef->isLinkableInProject()) { //printf("in a class but class not linkable!\n"); - return FALSE; // in class but class not linkable + m_isLinkableCached = 1; // in class but class not linkable + return; } if (!m_impl->group && m_impl->nspace && !m_impl->related && !m_impl->nspace->isLinkableInProject()) { //printf("in a namespace but namespace not linkable!\n"); - return FALSE; // in namespace but namespace not linkable + m_isLinkableCached = 1; // in namespace but namespace not linkable + return; } if (!m_impl->group && !m_impl->nspace && !m_impl->related && !m_impl->classDef && m_impl->fileDef && !m_impl->fileDef->isLinkableInProject()) { //printf("in a file but file not linkable!\n"); - return FALSE; // in file (and not in namespace) but file not linkable + m_isLinkableCached = 1; // in file (and not in namespace) but file not linkable + return; } if (m_impl->prot==Private && !extractPrivate && m_impl->mtype!=Friend) { //printf("private and invisible!\n"); - return FALSE; // hidden due to protection + m_isLinkableCached = 1; // hidden due to protection + return; } if (m_impl->stat && m_impl->classDef==0 && !extractStatic) { //printf("static and invisible!\n"); - return FALSE; // hidden due to staticness + m_isLinkableCached = 1; // hidden due to staticness + return; } //printf("linkable!\n"); - return TRUE; // linkable! + return; // linkable! +} + +bool MemberDef::isLinkableInProject() const +{ + if (m_isLinkableCached==0) + { + MemberDef *that = (MemberDef*)this; + that->_computeLinkableInProject(); + } + ASSERT(m_isLinkableCached>0); + return m_isLinkableCached==2; } bool MemberDef::isLinkable() const @@ -1346,7 +1379,7 @@ void MemberDef::writeDeclaration(OutputList &ol, } // *** write name - if (!name().isEmpty() && name().at(0)!='@') // hide annonymous stuff + if (!name().isEmpty() && name().at(0)!='@') // hide anonymous stuff { //printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable()); if (!(name().isEmpty() || name().at(0)=='@') && // name valid @@ -1595,7 +1628,7 @@ bool MemberDef::isDetailedSectionLinkable() const bool staticFilter = getClassDef()!=0 || !isStatic() || extractStatic; // only include members that are non-private unless EXTRACT_PRIVATE is - // set to YES or the member is part of a group + // set to YES or the member is part of a group bool privateFilter = (protection()!=Private || extractPrivate || m_impl->mtype==Friend ); @@ -2537,6 +2570,7 @@ void MemberDef::setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri, m_impl->groupStartLine=startLine; m_impl->groupHasDocs=hasDocs; m_impl->groupMember=member; + m_isLinkableCached = 0; } void MemberDef::setEnumScope(MemberDef *md) @@ -2550,6 +2584,7 @@ void MemberDef::setEnumScope(MemberDef *md) m_impl->groupFileName=md->getGroupFileName(); m_impl->groupStartLine=md->getGroupStartLine(); m_impl->groupHasDocs=md->getGroupHasDocs(); + m_isLinkableCached = 0; } } @@ -2557,6 +2592,8 @@ void MemberDef::setMemberClass(ClassDef *cd) { makeResident(); m_impl->classDef=cd; + m_isLinkableCached = 0; + m_isConstructorCached = 0; setOuterScope(cd); } @@ -2750,19 +2787,22 @@ Specifier MemberDef::virtualness(int count) const return v; } -bool MemberDef::isConstructor() const -{ +void MemberDef::_computeIsConstructor() +{ makeResident(); + m_isConstructorCached=1; // FALSE if (m_impl->classDef) { if (m_impl->isDMember) // for D { - return name()=="this"; + m_isConstructorCached = name()=="this" ? 2 : 1; + return; } else if (m_impl->fileDef && getLanguageFromFileName(m_impl->fileDef->name())==SrcLangExt_PHP) { // for PHP - return name()=="__construct"; + m_isConstructorCached = name()=="__construct" ? 2 : 1; + return; } else // for other languages { @@ -2770,35 +2810,61 @@ bool MemberDef::isConstructor() const int i=locName.find('<'); if (i==-1) // not a template class { - return name()==locName; + m_isConstructorCached = name()==locName ? 2 : 1; } else { - return name()==locName.left(i); + m_isConstructorCached = name()==locName.left(i) ? 2 : 1; } + return; } } - else - return FALSE; } -bool MemberDef::isDestructor() const +bool MemberDef::isConstructor() const { + if (m_isConstructorCached==0) + { + MemberDef *that = (MemberDef*)this; + that->_computeIsConstructor(); + } + ASSERT(m_isConstructorCached>0); + return m_isConstructorCached==2; + +} + +void MemberDef::_computeIsDestructor() +{ makeResident(); + bool isDestructor; if (m_impl->isDMember) // for D { - return name()=="~this"; + isDestructor = name()=="~this"; } else if (m_impl->fileDef && getLanguageFromFileName(m_impl->fileDef->name())==SrcLangExt_PHP) { // for PHP - return name()=="__destruct"; + isDestructor = name()=="__destruct"; } else // other languages { - return (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI + isDestructor = + (name().find('~')!=-1 || name().find('!')!=-1) // The ! is for C++/CLI && name().find("operator")==-1; } + m_isDestructorCached = isDestructor ? 2 : 1; +} + +bool MemberDef::isDestructor() const +{ + if (m_isDestructorCached==0) + { + MemberDef *that=(MemberDef*)this; + that->_computeIsDestructor(); + } + ASSERT(m_isDestructorCached>0); + return m_isDestructorCached==2; + } void MemberDef::writeEnumDeclaration(OutputList &typeDecl, @@ -3641,6 +3707,7 @@ void MemberDef::setMemberType(MemberType t) { makeResident(); m_impl->mtype=t; + m_isLinkableCached = 0; } void MemberDef::setDefinition(const char *d) @@ -3653,12 +3720,16 @@ void MemberDef::setFileDef(FileDef *fd) { makeResident(); m_impl->fileDef=fd; + m_isLinkableCached = 0; + m_isConstructorCached = 0; + m_isDestructorCached = 0; } void MemberDef::setProtection(Protection p) { makeResident(); m_impl->prot=p; + m_isLinkableCached = 0; } void MemberDef::setMemberSpecifiers(int s) @@ -3716,12 +3787,14 @@ void MemberDef::makeRelated() { makeResident(); m_impl->related = Related; + m_isLinkableCached = 0; } void MemberDef::makeForeign() { makeResident(); m_impl->related = Foreign; + m_isLinkableCached = 0; } void MemberDef::setHasDocumentedParams(bool b) @@ -3758,6 +3831,8 @@ void MemberDef::setEnumClassScope(ClassDef *cd) { makeResident(); m_impl->classDef = cd; + m_isLinkableCached = 0; + m_isConstructorCached = 0; } void MemberDef::setDocumentedEnumValues(bool value) @@ -3806,6 +3881,7 @@ void MemberDef::setTemplateMaster(MemberDef *mt) { makeResident(); m_impl->templateMaster=mt; + m_isLinkableCached = 0; } void MemberDef::setDocsForDefinition(bool b) diff --git a/src/memberdef.h b/src/memberdef.h index c68886e..4eebb0a 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -362,6 +362,9 @@ class MemberDef : public Definition void unlock() const; void saveToDisk() const; void makeResident() const; + void _computeLinkableInProject(); + void _computeIsConstructor(); + void _computeIsDestructor(); static int s_indentLevel; // disable copying of member defs @@ -376,6 +379,9 @@ class MemberDef : public Definition int m_cacheHandle; off_t m_storagePos; // location where the item is stored in file (if impl==0) bool m_flushPending; + uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE + uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE + uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE }; #endif diff --git a/src/memberlist.cpp b/src/memberlist.cpp index 379409c..cf0235e 100644 --- a/src/memberlist.cpp +++ b/src/memberlist.cpp @@ -39,6 +39,7 @@ MemberList::MemberList(ListType lt) : m_listType(lt) m_numDocMembers=-1; // special value indicating that value needs to be computed m_inGroup=FALSE; m_inFile=FALSE; + m_needsSorting=FALSE; } MemberList::~MemberList() @@ -221,7 +222,7 @@ bool MemberList::declVisible() const } } } - // if this is an anoymous enum and there are variables of this + // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. if (enumVars==0) // show enum here { @@ -307,7 +308,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, } } } - // if this is an anoymous enum and there are variables of this + // if this is an anonymous enum and there are variables of this // enum type (i.e. enumVars>0), then we do not show the enum here. if (enumVars==0) // show enum here { @@ -631,6 +632,7 @@ void MemberList::marshal(StorageIntf *s) marshalInt(s,m_numDocMembers); marshalBool(s,m_inGroup); marshalBool(s,m_inFile); + marshalBool(s,m_needsSorting); if (memberGroupList==0) { marshalUInt(s,NULL_LIST); // null pointer representation @@ -662,6 +664,7 @@ void MemberList::unmarshal(StorageIntf *s) m_numDocMembers = unmarshalInt(s); m_inGroup = unmarshalBool(s); m_inFile = unmarshalBool(s); + m_needsSorting = unmarshalBool(s); uint i,count = unmarshalUInt(s); if (count==NULL_LIST) // empty list { @@ -733,6 +736,11 @@ QCString MemberList::listTypeAsString() const return ""; } +void MemberList::setNeedsSorting(bool b) +{ + m_needsSorting = b; +} + //-------------------------------------------------------------------------- int MemberSDict::compareItems(GCI item1, GCI item2) diff --git a/src/memberlist.h b/src/memberlist.h index de5e907..d222a48 100644 --- a/src/memberlist.h +++ b/src/memberlist.h @@ -133,6 +133,7 @@ class MemberList : public QList<MemberDef> int friendCount() const { ASSERT(m_numDecMembers!=-1); return m_friendCnt; } int numDecMembers() const { ASSERT(m_numDecMembers!=-1); return m_numDecMembers; } int numDocMembers() const { ASSERT(m_numDocMembers!=-1); return m_numDocMembers; } + bool needsSorting() const { return m_needsSorting; } void countDecMembers(bool countEnumValues=FALSE); void countDocMembers(bool countEnumValues=FALSE); void writePlainDeclarations(OutputList &ol, @@ -150,6 +151,7 @@ class MemberList : public QList<MemberDef> void setInFile(bool inFile) { m_inFile=inFile; } void addListReferences(Definition *def); void findSectionsInDocumentation(); + void setNeedsSorting(bool b); MemberGroupList *getMemberGroupList() const { return memberGroupList; } void marshal(StorageIntf *s); @@ -170,6 +172,7 @@ class MemberList : public QList<MemberDef> bool m_inGroup; // is this list part of a group definition bool m_inFile; // is this list part of a file definition ListType m_listType; + bool m_needsSorting; }; class MemberListIterator : public QListIterator<MemberDef> diff --git a/src/msc.cpp b/src/msc.cpp index 14f41a4..72f9681 100644 --- a/src/msc.cpp +++ b/src/msc.cpp @@ -27,7 +27,7 @@ static const int maxCmdLine = 40960; static bool convertMapFile(QTextStream &t,const char *mapName,const QCString relPath, - const QString &context) + const QCString &context) { QFile f(mapName); if (!f.open(IO_ReadOnly)) @@ -140,10 +140,10 @@ error: QDir::setCurrent(oldDir); } -QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, - const QCString& relPath,const QString& context) +QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir, + const QCString& relPath,const QCString& context) { - QString outFile = inFile + ".map"; + QCString outFile = inFile + ".map"; // chdir to the output dir, so dot can find the font file. QCString oldDir = convertToQCString(QDir::currentDirPath()); @@ -169,7 +169,7 @@ QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, QDir().remove(outFile); QDir::setCurrent(oldDir); - return result; + return result.data(); } @@ -25,8 +25,8 @@ enum MscOutputFormat { MSC_BITMAP , MSC_EPS }; void writeMscGraphFromFile(const char *inFile,const char *outDir, const char *outFile,MscOutputFormat format); -QString getMscImageMapFromFile(const QString& inFile, const QString& outDir, - const QCString& relPath,const QString& context); +QCString getMscImageMapFromFile(const QCString& inFile, const QCString& outDir, + const QCString& relPath,const QCString& context); #endif diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index ee0191c..98b4831 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -57,6 +57,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl, memberGroupSDict->setAutoDelete(TRUE); visited=FALSE; m_subGrouping=Config_getBool("SUBGROUPING"); + m_isCSharp = df && getLanguageFromFileName(df)==SrcLangExt_CSharp; } NamespaceDef::~NamespaceDef() @@ -882,15 +883,33 @@ void NamespaceDef::addMemberToList(MemberList::ListType lt,MemberDef *md) static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS"); static bool sortMemberDocs = Config_getBool("SORT_MEMBER_DOCS"); MemberList *ml = createMemberList(lt); - if (((ml->listType()&MemberList::declarationLists) && sortBriefDocs) || - ((ml->listType()&MemberList::documentationLists) && sortMemberDocs) - ) + ml->setNeedsSorting( + ((ml->listType()&MemberList::declarationLists) && sortBriefDocs) || + ((ml->listType()&MemberList::documentationLists) && sortMemberDocs)); + ml->append(md); + +#if 0 + if (ml->needsSorting()) ml->inSort(md); else ml->append(md); +#endif + if (ml->listType()&MemberList::declarationLists) md->setSectionList(this,ml); } +void NamespaceDef::sortMemberLists() +{ + MemberList *ml = m_memberLists.first(); + while (ml) + { + if (ml->needsSorting()) { ml->sort(); ml->setNeedsSorting(FALSE); } + ml = m_memberLists.next(); + } +} + + + MemberList *NamespaceDef::getMemberList(MemberList::ListType lt) const { NamespaceDef *that = (NamespaceDef*)this; @@ -932,7 +951,7 @@ bool NamespaceDef::isLinkableInProject() const return TRUE; } return !name().isEmpty() && name().at(i)!='@' && // not anonymous - hasDocumentation() && // documented + (hasDocumentation() || m_isCSharp) && // documented !isReference() && // not an external reference !isHidden() && // not hidden !isArtificial() && // or artificial @@ -944,7 +963,6 @@ bool NamespaceDef::isLinkable() const return isLinkableInProject() || isReference(); } - MemberDef * NamespaceDef::getMemberByName(const QCString &n) const { MemberDef *md = 0; diff --git a/src/namespacedef.h b/src/namespacedef.h index f5dda20..ac64576 100644 --- a/src/namespacedef.h +++ b/src/namespacedef.h @@ -67,6 +67,7 @@ class NamespaceDef : public Definition void addMembersToMemberGroup(); void distributeMemberGroupDocumentation(); void findSectionsInDocumentation(); + void sortMemberLists(); virtual Definition *findInnerCompound(const char *name); void addInnerCompound(Definition *d); @@ -117,6 +118,7 @@ class NamespaceDef : public Definition ClassSDict *classSDict; NamespaceSDict *namespaceSDict; bool m_subGrouping; + bool m_isCSharp; }; class NamespaceList : public QList<NamespaceDef> diff --git a/src/outputgen.cpp b/src/outputgen.cpp index 0d19776..4e91156 100644 --- a/src/outputgen.cpp +++ b/src/outputgen.cpp @@ -26,10 +26,6 @@ OutputGenerator::OutputGenerator() { //printf("OutputGenerator::OutputGenerator()\n"); file=0; - b.setBuffer(a); - b.open( IO_WriteOnly ); - t.setDevice(&b); - t.setEncoding(QTextStream::UnicodeUTF8); active=TRUE; genStack = new QStack<bool>; genStack->setAutoDelete(TRUE); @@ -57,55 +53,13 @@ void OutputGenerator::startPlainFile(const char *name) err("Could not open file %s for writing\n",fileName.data()); exit(1); } - fs.setDevice(file); + t.setDevice(file); } void OutputGenerator::endPlainFile() { - bool converted=false; - if (!encoding.isEmpty()) - { - QByteArray enc(a.size()*4); - void *cd = portable_iconv_open(encoding,"UTF-8"); - if (cd!=(void *)(-1)) - { - size_t iLeft=a.size(); - size_t oLeft=enc.size(); - const char *inputPtr = a.data(); - char *outputPtr = enc.data(); - if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft)) - { - enc.resize(enc.size()-oLeft); - postProcess(enc); - //printf("a.size()=%d enc.size()=%d iLeft=%d oLeft=%d enc2.size()=%d\n", - // a.size(),enc.size(),iLeft,oLeft,enc2.size()); - fs.writeRawBytes(enc.data(),enc.size()) ; // write string buffer to file - converted=TRUE; - } - portable_iconv_close(cd); - } - } - if (!converted) - { - //printf("endPlainFile(%s)\n",file->name()); - fs.writeRawBytes(a.data(),a.size()) ; // write string buffer to file - } - b.close(); - delete file; + delete file; file=0; - a.resize(0); - b.setBuffer(a); - b.open(IO_WriteOnly); - t.setDevice(&b); -} - -QCString OutputGenerator::getContents() const -{ - QCString s; - s.resize(a.size()+1); - memcpy(s.data(),a.data(),a.size()); - s.at(a.size())='\0'; - return s; } void OutputGenerator::pushGeneratorState() diff --git a/src/outputgen.h b/src/outputgen.h index 3331231..82b6c38 100644 --- a/src/outputgen.h +++ b/src/outputgen.h @@ -19,7 +19,7 @@ #define OUTPUTGEN_H #include "qtbc.h" -#include <qtextstream.h> +#include "ftextstream.h" #include <qbuffer.h> #include <qfile.h> #include <qstack.h> @@ -287,12 +287,12 @@ class OutputGenerator : public BaseOutputDocInterface virtual OutputGenerator *get(OutputType o) = 0; void startPlainFile(const char *name); void endPlainFile(); - QCString getContents() const; + //QCString getContents() const; bool isEnabled() const { return active; } void pushGeneratorState(); void popGeneratorState(); - void setEncoding(const QCString &enc) { encoding = enc; } - virtual void postProcess(QByteArray &) { } + //void setEncoding(const QCString &enc) { encoding = enc; } + //virtual void postProcess(QByteArray &) { } virtual void printDoc(DocNode *,const char *langExt) = 0; @@ -406,15 +406,11 @@ class OutputGenerator : public BaseOutputDocInterface virtual void endConstraintList() = 0; protected: - QTextStream fs; - QByteArray a; - QBuffer b; - QTextStream t; + FTextStream t; QFile *file; QCString dir; bool active; QStack<bool> *genStack; - QString encoding; private: OutputGenerator(const OutputGenerator &o); diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 417cbf3..46fd91a 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -37,7 +37,7 @@ class PerlModOutputStream { public: - QString m_s; + QCString m_s; QTextStream *m_t; PerlModOutputStream(QTextStream *t = 0) : m_t(t) { } @@ -45,7 +45,6 @@ public: void add(char c); void add(const char *s); void add(QCString &s); - void add(QString &s); void add(int n); void add(unsigned int n); }; @@ -74,14 +73,6 @@ void PerlModOutputStream::add(QCString &s) m_s += s; } -void PerlModOutputStream::add(QString &s) -{ - if (m_t != 0) - (*m_t) << s; - else - m_s += s; -} - void PerlModOutputStream::add(int n) { if (m_t != 0) @@ -115,7 +106,7 @@ public: inline void setPerlModOutputStream(PerlModOutputStream *os) { m_stream = os; } inline PerlModOutput &openSave() { iopenSave(); return *this; } - inline PerlModOutput &closeSave(QString &s) { icloseSave(s); return *this; } + inline PerlModOutput &closeSave(QCString &s) { icloseSave(s); return *this; } inline PerlModOutput &continueBlock() { @@ -130,7 +121,6 @@ public: inline PerlModOutput &add(char c) { m_stream->add(c); return *this; } inline PerlModOutput &add(const char *s) { m_stream->add(s); return *this; } inline PerlModOutput &add(QCString &s) { m_stream->add(s); return *this; } - inline PerlModOutput &add(QString &s) { m_stream->add(s); return *this; } inline PerlModOutput &add(int n) { m_stream->add(n); return *this; } inline PerlModOutput &add(unsigned int n) { m_stream->add(n); return *this; } @@ -169,7 +159,7 @@ public: protected: void iopenSave(); - void icloseSave(QString &); + void icloseSave(QCString &); void incIndent(); void decIndent(); @@ -198,7 +188,7 @@ void PerlModOutput::iopenSave() m_stream = new PerlModOutputStream(); } -void PerlModOutput::icloseSave(QString &s) +void PerlModOutput::icloseSave(QCString &s) { s = m_stream->m_s; delete m_stream; @@ -389,8 +379,8 @@ private: // helper functions //-------------------------------------- - void addLink(const QString &ref, const QString &file, - const QString &anchor); + void addLink(const QCString &ref, const QCString &file, + const QCString &anchor); void enterText(); void leaveText(); @@ -410,7 +400,7 @@ private: PerlModOutput &m_output; bool m_textmode; bool m_textblockstart; - QString m_other; + QCString m_other; }; PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output) @@ -426,9 +416,9 @@ void PerlModDocVisitor::finish() .add(m_other); } -void PerlModDocVisitor::addLink(const QString &,const QString &file,const QString &anchor) +void PerlModDocVisitor::addLink(const QCString &,const QCString &file,const QCString &anchor) { - QString link = file; + QCString link = file; if (!anchor.isEmpty()) (link += "_1") += anchor; m_output.addFieldQuotedString("link", link); @@ -499,7 +489,7 @@ void PerlModDocVisitor::closeOther() // Using a secondary text stream will corrupt the perl file. Instead of // printing doc => [ data => [] ], it will print doc => [] data => []. /* - QString other; + QCString other; leaveText(); m_output.closeSave(other); m_other += other; @@ -656,7 +646,7 @@ void PerlModDocVisitor::visit(DocVerbatim *s) void PerlModDocVisitor::visit(DocAnchor *anc) { - QString anchor = anc->file() + "_1" + anc->anchor(); + QCString anchor = anc->file() + "_1" + anc->anchor(); openItem("anchor"); m_output.addFieldQuotedString("id", anchor); closeItem(); @@ -722,7 +712,7 @@ void PerlModDocVisitor::visit(DocIncOperator *) void PerlModDocVisitor::visit(DocFormula *f) { openItem("formula"); - QString id; + QCString id; id += f->id(); m_output.addFieldQuotedString("id", id).addFieldQuotedString("content", f->text()); closeItem(); @@ -867,7 +857,7 @@ void PerlModDocVisitor::visitPost(DocSimpleListItem *) { closeSubBlock(); } void PerlModDocVisitor::visitPre(DocSection *s) { - QString sect = QString("sect%1").arg(s->level()); + QCString sect = QCString().sprintf("sect%d",s->level()); openItem(sect); openSubBlock("content"); } @@ -1366,10 +1356,10 @@ static const char *getVirtualnessName(Specifier virt) return 0; } -static QString pathDoxyfile; -static QString pathDoxyExec; +static QCString pathDoxyfile; +static QCString pathDoxyExec; -void setPerlModDoxyfile(const QString &qs) +void setPerlModDoxyfile(const QCString &qs) { pathDoxyfile = qs; pathDoxyExec = QDir::currentDirPath(); @@ -1381,18 +1371,18 @@ public: PerlModOutput m_output; - QString pathDoxyStructurePM; - QString pathDoxyDocsTex; - QString pathDoxyFormatTex; - QString pathDoxyLatexTex; - QString pathDoxyLatexDVI; - QString pathDoxyLatexPDF; - QString pathDoxyStructureTex; - QString pathDoxyDocsPM; - QString pathDoxyLatexPL; - QString pathDoxyLatexStructurePL; - QString pathDoxyRules; - QString pathMakefile; + QCString pathDoxyStructurePM; + QCString pathDoxyDocsTex; + QCString pathDoxyFormatTex; + QCString pathDoxyLatexTex; + QCString pathDoxyLatexDVI; + QCString pathDoxyLatexPDF; + QCString pathDoxyStructureTex; + QCString pathDoxyDocsPM; + QCString pathDoxyLatexPL; + QCString pathDoxyLatexStructurePL; + QCString pathDoxyRules; + QCString pathMakefile; inline PerlModGenerator(bool pretty) : m_output(pretty) { } @@ -2353,7 +2343,7 @@ bool PerlModGenerator::generateDoxyRules() return false; bool perlmodLatex = Config_getBool("PERLMOD_LATEX"); - QString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX"); + QCString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX"); QTextStream doxyRulesStream(&doxyRules); doxyRulesStream << @@ -2450,7 +2440,7 @@ bool PerlModGenerator::generateMakefile() return false; bool perlmodLatex = Config_getBool("PERLMOD_LATEX"); - QString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX"); + QCString prefix = Config_getString("PERLMOD_MAKEVAR_PREFIX"); QTextStream makefileStream(&makefile); makefileStream << diff --git a/src/perlmodgen.h b/src/perlmodgen.h index 66ea8a5..6885ad7 100644 --- a/src/perlmodgen.h +++ b/src/perlmodgen.h @@ -15,9 +15,9 @@ #ifndef PERLMODGEN_H #define PERLMODGEN_H -class QString; +class QCString; -extern void setPerlModDoxyfile(const QString &); +extern void setPerlModDoxyfile(const QCString &); extern void generatePerlMod(); #endif @@ -1500,7 +1500,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) if ((g_includeStack.isEmpty() || g_curlyCount>0) && g_macroExpansion && (def=g_fileDefineDict->find(yytext)) && - macroIsAccessible(def) && + (def->isPredefined || macroIsAccessible(def)) && (!g_expandOnlyPredef || def->isPredefined) ) { @@ -1509,7 +1509,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) g_defArgsStr=yytext; if (def->nargs==-1) // no function macro { - QCString result = expandMacro(g_defArgsStr); + QCString result = def->isPredefined ? def->definition : expandMacro(g_defArgsStr); outputArray(result,result.length()); } else // zero or more arguments @@ -1525,19 +1525,15 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) } <CopyLine>{ID} { Define *def=0; - //printf("Search for define %s\n",yytext); if ((g_includeStack.isEmpty() || g_curlyCount>0) && g_macroExpansion && (def=g_fileDefineDict->find(yytext)) && def->nargs==-1 && - macroIsAccessible(def) && + (def->isPredefined || macroIsAccessible(def)) && (!g_expandOnlyPredef || def->isPredefined) ) { - //printf("Found it!\n"); - QCString name=yytext; - QCString result=expandMacro(name); - //printf("result=`%s'\n",result.data()); + QCString result=def->isPredefined ? def->definition : expandMacro(yytext); outputArray(result,result.length()); } else diff --git a/src/qhpxmlwriter.h b/src/qhpxmlwriter.h index 33e6152..c88eebd 100644 --- a/src/qhpxmlwriter.h +++ b/src/qhpxmlwriter.h @@ -18,7 +18,7 @@ #define QHPXMLWRITER_H #include <qstring.h> -#include <qtextstream.h> +#include "ftextstream.h" class QFile; @@ -52,8 +52,8 @@ class QhpXmlWriter char const * const * attributes = 0); void closePure(char const * elementName); - QString m_backend; - QTextOStream m_out; + QGString m_backend; + FTextStream m_out; int m_indentLevel; bool m_curLineIndented; bool m_compress; diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 9824311..a713b40 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -33,16 +33,16 @@ //#define DBG_RTF(x) m_t << x #define DBG_RTF(x) do {} while(0) -RTFDocVisitor::RTFDocVisitor(QTextStream &t,CodeOutputInterface &ci, +RTFDocVisitor::RTFDocVisitor(FTextStream &t,CodeOutputInterface &ci, const char *langExt) : DocVisitor(DocVisitor_RTF), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_indentLevel(0), m_lastIsPara(FALSE), m_langExt(langExt) { } -QString RTFDocVisitor::getStyle(const char *name) +QCString RTFDocVisitor::getStyle(const char *name) { - QString n; + QCString n; n.sprintf("%s%d",name,m_indentLevel); StyleData *sd = rtf_Style[n]; ASSERT(sd!=0); @@ -333,7 +333,7 @@ void RTFDocVisitor::visit(DocVerbatim *s) m_t << "\\par" << endl; m_t << rtf_Style_Reset << getStyle("CodeExample"); Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,s->context(),s->text().latin1(), + ->parseCode(m_ci,s->context(),s->text(), s->isExample(),s->exampleFile()); //m_t << "\\par" << endl; m_t << "}" << endl; @@ -408,7 +408,7 @@ void RTFDocVisitor::visit(DocAnchor *anc) { if (m_hide) return; DBG_RTF("{\\comment RTFDocVisitor::visit(DocAnchor)}\n"); - QString anchor; + QCString anchor; if (!anc->file().isEmpty()) { anchor+=anc->file(); @@ -441,7 +441,7 @@ void RTFDocVisitor::visit(DocInclude *inc) FileDef fd( cfi.dirPath(), cfi.fileName() ); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile(), &fd); m_t << "\\par"; @@ -454,7 +454,7 @@ void RTFDocVisitor::visit(DocInclude *inc) m_t << rtf_Style_Reset << getStyle("CodeExample"); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(),inc->isExample(), + inc->text(),inc->isExample(), inc->exampleFile()); m_t << "\\par"; m_t << "}" << endl; @@ -497,7 +497,7 @@ void RTFDocVisitor::visit(DocIncOperator *op) if (!m_hide) { Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,op->context(),op->text().latin1(), + ->parseCode(m_ci,op->context(),op->text(), op->isExample(),op->exampleFile()); } pushEnabled(); @@ -750,7 +750,7 @@ void RTFDocVisitor::visitPre(DocSection *s) if (!m_lastIsPara) m_t << "\\par" << endl; m_t << "{{" // start section << rtf_Style_Reset; - QString heading; + QCString heading; int level = QMIN(s->level()+1,4); heading.sprintf("Heading%d",level); // set style @@ -1017,7 +1017,7 @@ void RTFDocVisitor::visitPre(DocHtmlHeader *header) DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlHeader)}\n"); m_t << "{" // start section << rtf_Style_Reset; - QString heading; + QCString heading; int level = QMIN(header->level()+2,4); heading.sprintf("Heading%d",level); // set style @@ -1146,7 +1146,7 @@ void RTFDocVisitor::visitPost(DocSecRefList *) //void RTFDocVisitor::visitPre(DocLanguage *l) //{ // DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocLanguage)}\n"); -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); // if (l->id().lower()!=langId.lower()) // { // pushEnabled(); @@ -1157,7 +1157,7 @@ void RTFDocVisitor::visitPost(DocSecRefList *) //void RTFDocVisitor::visitPost(DocLanguage *l) //{ // DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocLanguage)}\n"); -// QString langId = Config_getEnum("OUTPUT_LANGUAGE"); +// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); // if (l->id().lower()!=langId.lower()) // { // popEnabled(); @@ -1269,7 +1269,7 @@ void RTFDocVisitor::visitPre(DocXRefItem *x) m_t << "{" << rtf_Style["Heading5"]->reference << endl; if (Config_getBool("RTF_HYPERLINKS") && !anonymousEnum) { - QString refName; + QCString refName; if (!x->file().isEmpty()) { refName+=x->file(); @@ -1405,11 +1405,11 @@ void RTFDocVisitor::filter(const char *str,bool verbatim) } } -void RTFDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor) +void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) { if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS")) { - QString refName; + QCString refName; if (!file.isEmpty()) { refName+=file; @@ -1432,7 +1432,7 @@ void RTFDocVisitor::startLink(const QString &ref,const QString &file,const QStri m_lastIsPara=FALSE; } -void RTFDocVisitor::endLink(const QString &ref) +void RTFDocVisitor::endLink(const QCString &ref) { if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS")) { @@ -1458,15 +1458,15 @@ void RTFDocVisitor::popEnabled() delete v; } -void RTFDocVisitor::writeDotFile(const QString &fileName) +void RTFDocVisitor::writeDotFile(const QCString &fileName) { - QString baseName=fileName; + QCString baseName=fileName; int i; if ((i=baseName.findRev('/'))!=-1) { baseName=baseName.right(baseName.length()-i-1); } - QString outDir = Config_getString("RTF_OUTPUT"); + QCString outDir = Config_getString("RTF_OUTPUT"); writeDotGraphFromFile(fileName,outDir,baseName,BITMAP); if (!m_lastIsPara) m_t << "\\par" << endl; m_t << "{" << endl; @@ -1478,15 +1478,15 @@ void RTFDocVisitor::writeDotFile(const QString &fileName) m_lastIsPara=TRUE; } -void RTFDocVisitor::writeMscFile(const QString &fileName) +void RTFDocVisitor::writeMscFile(const QCString &fileName) { - QString baseName=fileName; + QCString baseName=fileName; int i; if ((i=baseName.findRev('/'))!=-1) { baseName=baseName.right(baseName.length()-i-1); } - QString outDir = Config_getString("RTF_OUTPUT"); + QCString outDir = Config_getString("RTF_OUTPUT"); writeMscGraphFromFile(fileName,outDir,baseName,MSC_BITMAP); if (!m_lastIsPara) m_t << "\\par" << endl; m_t << "{" << endl; diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h index 5d8af10..db7e28b 100644 --- a/src/rtfdocvisitor.h +++ b/src/rtfdocvisitor.h @@ -23,15 +23,14 @@ #include <qstack.h> #include <qcstring.h> -class QTextStream; +class FTextStream; class CodeOutputInterface; -class QString; /*! @brief Concrete visitor implementation for RTF output. */ class RTFDocVisitor : public DocVisitor { public: - RTFDocVisitor(QTextStream &t,CodeOutputInterface &ci,const char *langExt); + RTFDocVisitor(FTextStream &t,CodeOutputInterface &ci,const char *langExt); //-------------------------------------- // visitor functions for leaf nodes @@ -135,23 +134,23 @@ class RTFDocVisitor : public DocVisitor //-------------------------------------- void filter(const char *str,bool verbatim=FALSE); - void startLink(const QString &ref,const QString &file, - const QString &anchor); - void endLink(const QString &ref); - QString getStyle(const char *name); + void startLink(const QCString &ref,const QCString &file, + const QCString &anchor); + void endLink(const QCString &ref); + QCString getStyle(const char *name); void incIndentLevel(); void decIndentLevel(); void pushEnabled(); void popEnabled(); - void writeDotFile(const QString &fileName); - void writeMscFile(const QString &fileName); + void writeDotFile(const QCString &fileName); + void writeMscFile(const QCString &fileName); //-------------------------------------- // state variables //-------------------------------------- - QTextStream &m_t; + FTextStream &m_t; CodeOutputInterface &m_ci; bool m_insidePre; bool m_hide; diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp index 6ef321c..1ab36ce 100644 --- a/src/rtfgen.cpp +++ b/src/rtfgen.cpp @@ -38,6 +38,7 @@ #include "docparser.h" #include "dirdef.h" #include "vhdldocgen.h" +#include "portable.h" //#define DBG_RTF(x) x; #define DBG_RTF(x) @@ -325,7 +326,7 @@ void RTFGenerator::beginRTFSection() void RTFGenerator::startFile(const char *name,const char *,const char *) { - setEncoding(QCString().sprintf("CP%s",theTranslator->trRTFansicp().data())); + //setEncoding(QCString().sprintf("CP%s",theTranslator->trRTFansicp())); QCString fileName=name; relPath = relativePathToRoot(fileName); @@ -2219,11 +2220,61 @@ void RTFGenerator::endMemberSubtitle() // } //} // + +// note: function is not reentrant! +static void encodeForOutput(FTextStream &t,const QCString &s) +{ + QCString encoding; + bool converted=FALSE; + int l = s.length(); + static QByteArray enc; + if (l*4>(int)enc.size()) enc.resize(l*4); // worst case + encoding.sprintf("CP%s",theTranslator->trRTFansicp().data()); + if (!encoding.isEmpty()) + { + // convert from UTF-8 back to the output encoding + void *cd = portable_iconv_open(encoding,"UTF-8"); + if (cd!=(void *)(-1)) + { + size_t iLeft=l; + size_t oLeft=enc.size(); + const char *inputPtr = s.data(); + char *outputPtr = enc.data(); + if (!portable_iconv(cd, &inputPtr, &iLeft, &outputPtr, &oLeft)) + { + enc.resize(enc.size()-oLeft); + converted=TRUE; + } + portable_iconv_close(cd); + } + } + if (!converted) // if we did not convert anything, copy as is. + { + memcpy(enc.data(),s.data(),l); + enc.resize(l); + } + uint i; + for (i=0;i<enc.size();i++) + { + uchar c = (uchar)enc.at(i); + if (c>=0x80) + { + char esc[10]; + sprintf(esc,"\\'%X",c); + t << esc; + } + else + { + t << (char)c; + } + } +} + /** * VERY brittle routine inline RTF's included by other RTF's. * it is recursive and ugly. */ -static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncludeHeader=TRUE) +static bool preProcessFile(QDir &d,QCString &infName, FTextStream &t, bool bIncludeHeader=TRUE) { QFile f(infName); if (!f.open(IO_ReadOnly)) @@ -2246,11 +2297,10 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl err("ERROR - read error in %s before end of RTF header!\n",infName.data()); return FALSE; } - if (bIncludeHeader) t << lineBuf; + if (bIncludeHeader) encodeForOutput(t,lineBuf); } while (lineBuf.find("\\comment begin body")==-1); - //while (fgets(buffer,sizeof(buffer),infp) != NULL) while (f.readLine(lineBuf.data(),maxLineLength)!=-1) { int pos; @@ -2260,18 +2310,18 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl int endNamePos = lineBuf.find('"',startNamePos); QCString fileName = lineBuf.mid(startNamePos,endNamePos-startNamePos); DBG_RTF(t << "{\\comment begin include " << fileName << "}" << endl) - if (!PreProcessFile(d,fileName,t,FALSE)) return FALSE; + if (!preProcessFile(d,fileName,t,FALSE)) return FALSE; DBG_RTF(t << "{\\comment end include " << fileName << "}" << endl) } - else + else // no INCLUDETEXT on this line { // elaborate hoopla to skip the final "}" if we didn't include the // headers if (!f.atEnd() || bIncludeHeader) { - t << lineBuf; + encodeForOutput(t,lineBuf); } - else + else // last line of included file { // null terminate at the last '}' //char *str = strrchr(buffer,'}'); @@ -2281,7 +2331,7 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl lineBuf.at(pos) = '\0'; else err("Strange, the last char was not a '}'\n"); - t << lineBuf; + encodeForOutput(t,lineBuf); } } } @@ -2460,10 +2510,9 @@ bool RTFGenerator::preProcessFileInplace(const char *path,const char *name) err("Failed to open %s for writing!\n",combinedName.data()); return FALSE; } - QTextStream outt(&outf); - outt.setEncoding(QTextStream::UnicodeUTF8); + FTextStream outt(&outf); - if (!PreProcessFile(thisDir,mainRTFName,outt)) + if (!preProcessFile(thisDir,mainRTFName,outt)) { // it failed, remove the temp file outf.close(); @@ -2620,6 +2669,7 @@ void RTFGenerator::rtfwriteRuler_thin() t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw5\\brsp20 \\adjustright \\par}" << endl; } +#if 0 void RTFGenerator::postProcess(QByteArray &a) { QByteArray enc(a.size()*4); // worst case @@ -2648,6 +2698,7 @@ void RTFGenerator::postProcess(QByteArray &a) enc.resize(off); a = enc; } +#endif void RTFGenerator::startConstraintList(const char *header) { diff --git a/src/rtfgen.h b/src/rtfgen.h index a32a097..ce92d53 100644 --- a/src/rtfgen.h +++ b/src/rtfgen.h @@ -46,7 +46,7 @@ class RTFGenerator : public OutputGenerator void writeFooter() {} void endFile(); void clearBuffer(); - void postProcess(QByteArray &); + //void postProcess(QByteArray &); void startIndexSection(IndexSections); void endIndexSection(IndexSections); diff --git a/src/scanner.l b/src/scanner.l index 7501855..0eecb14 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -160,7 +160,7 @@ static QCString briefBackup; static bool g_inputFromFile; static int docBlockContext; -static QCString docBlock; +static QGString docBlock; static QCString docBlockName; static bool docBlockInBody; static bool docBlockAutoBrief; @@ -3172,8 +3172,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) if (msName.isEmpty() && !current->name.isEmpty()) { // see if the compound does not have a name or is inside another - // annonymous compound. If so we insert a - // special `annonymous' variable. + // anonymous compound. If so we insert a + // special `anonymous' variable. //Entry *p=current_root; Entry *p=current; while (p) @@ -3186,8 +3186,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) int pi = (i==-1) ? 0 : i+2; if (p->name.at(pi)=='@') { - // annonymous compound inside -> insert dummy variable name - //printf("Adding annonymous variable for scope %s\n",p->name.data()); + // anonymous compound inside -> insert dummy variable name + //printf("Adding anonymous variable for scope %s\n",p->name.data()); msName.sprintf("@%d",anonCount++); break; } @@ -4569,7 +4569,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) else BEGIN( CopyArgComment ); } -<CSConstraintType,CSConstraintName>"#" { // artifically inserted token to signal end of comment block +<CSConstraintType,CSConstraintName>"#" { // artificially inserted token to signal end of comment block current->typeConstr->last()->docs = fullArgString; } <CSConstraintType>"{" { // end of type constraint reached @@ -5126,14 +5126,14 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?) } <DocLine>[^\n]*/"\n" { // whole line docBlock+=yytext; - handleCommentBlock(docBlock,current->brief.isEmpty()); + handleCommentBlock(docBlock.data(),current->brief.isEmpty()); BEGIN( docBlockContext ); } /* ---- Comments blocks ------ */ <DocBlock>"*"*"*/" { // end of comment block - handleCommentBlock(docBlock,FALSE); + handleCommentBlock(docBlock.data(),FALSE); BEGIN(docBlockContext); } <DocBlock>^{B}*("//")?{B}*"*"+/[^//] { // start of a comment line diff --git a/src/search_css.h b/src/search_css.h index b0be070..0ef3863 100644 --- a/src/search_css.h +++ b/src/search_css.h @@ -19,7 +19,7 @@ " margin-top: 8px;\n" " right: 0px;\n" " width: 170px;\n" -" z-index: 102;*/\n" +" z-index: 102;\n" "}\n" "\n" "#MSearchBox .left\n" diff --git a/src/textdocvisitor.h b/src/textdocvisitor.h index b1afb1a..081d57e 100644 --- a/src/textdocvisitor.h +++ b/src/textdocvisitor.h @@ -23,14 +23,14 @@ #include "docparser.h" #include <qstack.h> #include <qcstring.h> -#include <qtextstream.h> +#include "ftextstream.h" /*! @brief Concrete visitor implementation for TEXT output. */ class TextDocVisitor : public DocVisitor { public: - TextDocVisitor(QTextStream &t) : DocVisitor(DocVisitor_Text), m_t(t) {} + TextDocVisitor(FTextStream &t) : DocVisitor(DocVisitor_Text), m_t(t) {} //-------------------------------------- // visitor functions for leaf nodes @@ -127,7 +127,7 @@ class TextDocVisitor : public DocVisitor void filter(const char *str); - QTextStream &m_t; + FTextStream &m_t; }; #endif diff --git a/src/util.cpp b/src/util.cpp index f6213cd..86e825e 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -131,7 +131,7 @@ void TextGeneratorOLImpl::writeLink(const char *extRef,const char *file, const int maxInheritanceDepth = 100000; /*! - Removes all anoymous scopes from string s + Removes all anonymous scopes from string s Possible examples: \verbatim "bla::@10::blep" => "bla::blep" @@ -197,7 +197,7 @@ QCString replaceAnonymousScopes(const QCString &s,const char *replacement) } -// strip annonymous left hand side part of the scope +// strip anonymous left hand side part of the scope QCString stripAnonymousNamespaceScope(const QCString &s) { int i,p=0,l; @@ -1251,7 +1251,7 @@ static void getResolvedSymbol(Definition *scope, //printf(" bestMatch=%p bestResolvedType=%s\n",bestMatch,bestResolvedType.data()); } -/* Find the fully qualified class name refered to by the input class +/* Find the fully qualified class name referred to by the input class * or typedef name against the input scope. * Loops through scope and each of its parent scopes looking for a * match against the input name. Can recursively call itself when @@ -1429,7 +1429,7 @@ ClassDef *getResolvedClassRec(Definition *scope, return bestMatch; } -/* Find the fully qualified class name refered to by the input class +/* Find the fully qualified class name referred to by the input class * or typedef name against the input scope. * Loops through scope and each of its parent scopes looking for a * match against the input name. @@ -1465,7 +1465,7 @@ ClassDef *getResolvedClass(Definition *scope, { if (!mayBeHidden || !result->isHidden()) { - result=0; // don't link to artifical/hidden classes unless explicitly allowed + result=0; // don't link to artificial/hidden classes unless explicitly allowed } } //printf("getResolvedClass(%s,%s)=%s\n",scope?scope->name().data():"<global>", @@ -1483,7 +1483,7 @@ static bool findOperator(const QCString &s,int i) int b = s.findRev("operator",i); if (b==-1) return FALSE; // not found b+=8; - while (b<i) // check if there are only spaces inbetween + while (b<i) // check if there are only spaces in between // the operator and the > { if (!isspace((uchar)s.at(b))) return FALSE; @@ -1509,17 +1509,53 @@ static bool findOperator2(const QCString &s,int i) static const char constScope[] = { 'c', 'o', 'n', 's', 't', ':' }; static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' }; + +//#define ADD_CHAR(c) if (resultPos>=resultLen) { resultLen+=1024; result.resize(resultLen); } +// result[resultPos++]=(c) + +class StrBuf +{ + public: + StrBuf() : str(0), pos(0), len(0) {} + ~StrBuf() { free(str); str=0; pos=0; len=0; } + void clear() { pos=0; } + void addChar(char c) { if (pos>=len) { len+=1024; str = (char*)realloc(str,len); } + str[pos++]=c; + } + void addStr(const char *s) { + int l=strlen(s); + if (pos+l>=len) { len+=l+1024; str = (char*)realloc(str,len); } + strcpy(&str[pos],s); + pos+=l; + } + const char *get() { return str; } + int getPos() const { return pos; } + char at(int i) const { return str[i]; } + private: + char *str; + int pos; + int len; +}; + +#define CLR_BUF() g_strBuf.clear() +#define ADD_CHAR(c) g_strBuf.addChar(c) +#define ADD_STR(s) g_strBuf.addStr(s) +#define GET_STR() g_strBuf.get() +#define STR_POS() g_strBuf.getPos() +#define STR_AT(i) g_strBuf.at(i) + +// Not this function is not reentrant due to the use of static buffer! QCString removeRedundantWhiteSpace(const QCString &s) { static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT"); if (s.isEmpty()) return s; - int resultLen = 1024; - int resultPos = 0; - QCString result(resultLen); - // we use ADD_CHAR(c) instead of result+=c to + static StrBuf strBuf; + //int resultLen = 1024; + //int resultPos = 0; + //QCString result(resultLen); + // we use strBuf.addChar(c) instead of result+=c to // improve the performance of this function -#define ADD_CHAR(c) if (resultPos>=resultLen) { resultLen+=1024; result.resize(resultLen); } \ - result[resultPos++]=(c) + strBuf.clear(); uint i; uint l=s.length(); uint csp=0; @@ -1554,14 +1590,14 @@ nextChar: if (c=='"') // quoted string { i++; - ADD_CHAR(c); + strBuf.addChar(c); while (i<l) { char cc=s.at(i); - ADD_CHAR(cc); + strBuf.addChar(cc); if (cc=='\\') // escaped character { - ADD_CHAR(s.at(i+1)); + strBuf.addChar(s.at(i+1)); i+=2; } else if (cc=='"') // end of string @@ -1575,24 +1611,24 @@ nextChar: (i<8 || !findOperator(s,i)) // string in front is not "operator" ) { - ADD_CHAR('<'); - ADD_CHAR(' '); + strBuf.addChar('<'); + strBuf.addChar(' '); } else if (i>0 && c=='>' && // current char is a > (isId(s.at(i-1)) || isspace((uchar)s.at(i-1)) || s.at(i-1)=='*' || s.at(i-1)=='&') && // prev char is an id char or space (i<8 || !findOperator(s,i)) // string in front is not "operator" ) { - ADD_CHAR(' '); - ADD_CHAR('>'); + strBuf.addChar(' '); + strBuf.addChar('>'); } else if (i>0 && c==',' && !isspace((uchar)s.at(i-1)) && ((i<l-1 && isId(s.at(i+1))) || (i<l-2 && s.at(i+1)=='$' && isId(s.at(i+2))) // for PHP || (i<l-3 && s.at(i+1)=='&' && s.at(i+2)=='$' && isId(s.at(i+3))))) // for PHP { - ADD_CHAR(','); - ADD_CHAR(' '); + strBuf.addChar(','); + strBuf.addChar(' '); } else if (i>0 && ((isId(s.at(i)) && s.at(i-1)==')') || @@ -1600,8 +1636,8 @@ nextChar: ) ) { - ADD_CHAR(' '); - ADD_CHAR(s.at(i)); + strBuf.addChar(' '); + strBuf.addChar(s.at(i)); } else if (c=='t' && csp==5 /*&& (i<5 || !isId(s.at(i-5)))*/ && !(isId(s.at(i+1)) /*|| s.at(i+1)==' '*/ || @@ -1612,16 +1648,16 @@ nextChar: ) // prevent const ::A from being converted to const::A { - ADD_CHAR('t'); - ADD_CHAR(' '); + strBuf.addChar('t'); + strBuf.addChar(' '); if (s.at(i+1)==' ') i++; csp=0; } else if (c==':' && csp==6 /*&& (i<6 || !isId(s.at(i-6)))*/) // replace const::A by const ::A { - ADD_CHAR(' '); - ADD_CHAR(':'); + strBuf.addChar(' '); + strBuf.addChar(':'); csp=0; } else if (c=='l' && vsp==7 /*&& (i<7 || !isId(s.at(i-7)))*/ && @@ -1633,16 +1669,16 @@ nextChar: ) // prevent virtual ::A from being converted to virtual::A { - ADD_CHAR('l'); - ADD_CHAR(' '); + strBuf.addChar('l'); + strBuf.addChar(' '); if (s.at(i+1)==' ') i++; vsp=0; } else if (c==':' && vsp==8 /*&& (i<8 || !isId(s.at(i-8)))*/) // replace virtual::A by virtual ::A { - ADD_CHAR(' '); - ADD_CHAR(':'); + strBuf.addChar(' '); + strBuf.addChar(':'); vsp=0; } else if (!isspace((uchar)c) || // not a space @@ -1656,28 +1692,28 @@ nextChar: if (c=='*' || c=='&' || c=='@' || c=='$') { //uint rl=result.length(); - uint rl=resultPos; - if ((rl>0 && (isId(result.at(rl-1)) || result.at(rl-1)=='>')) && + uint rl=strBuf.getPos(); + if ((rl>0 && (isId(strBuf.at(rl-1)) || strBuf.at(rl-1)=='>')) && ((c!='*' && c!='&') || !findOperator2(s,i)) // avoid splitting operator* and operator->* and operator& ) { - ADD_CHAR(' '); + strBuf.addChar(' '); } } - ADD_CHAR(c); + strBuf.addChar(c); if (cliSupport && (c=='^' || c=='%') && i>1 && isId(s.at(i-1)) && !findOperator(s,i) ) { - ADD_CHAR(' '); // C++/CLI: Type^ name and Type% name + strBuf.addChar(' '); // C++/CLI: Type^ name and Type% name } } } //printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),result.data()); - ADD_CHAR(0); - result.resize(resultPos); - return result; + strBuf.addChar(0); + //result.resize(resultPos); + return strBuf.get(); } bool rightScopeMatch(const QCString &scope, const QCString &name) @@ -2000,7 +2036,7 @@ void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId) //---------------------------------------------------------------------------- -/*! takes the \a buf of the given lenght \a len and converts CR LF (DOS) +/*! takes the \a buf of the given length \a len and converts CR LF (DOS) * or CR (MAC) line ending to LF (Unix). Returns the length of the * converted content (i.e. the same as \a len (Unix, MAC) or * smaller (DOS). @@ -2311,6 +2347,7 @@ int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level) int m=maxInheritanceDepth; if (cd->baseClasses()) { +#if 0 BaseClassListIterator bcli(*cd->baseClasses()); for ( ; bcli.current() ; ++bcli) { @@ -2319,6 +2356,15 @@ int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level) if (mc<m) m=mc; if (m<0) break; } +#endif + BaseClassDef *bcdi = cd->baseClasses()->first(); + while (bcdi) + { + int mc=minClassDistance(bcdi->classDef,bcd,level+1); + if (mc<m) m=mc; + if (m<0) break; + bcdi = cd->baseClasses()->next(); + } } return m; } @@ -2683,9 +2729,9 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA, srcAType.stripPrefix("class "); dstAType.stripPrefix("class "); - // allow distingishing "const A" from "const B" even though + // allow distinguishing "const A" from "const B" even though // from a syntactic point of view they would be two names of the same - // type "const". This is not fool prove ofcourse, but should at least + // type "const". This is not fool prove of course, but should at least // catch the most common cases. if ((srcAType=="const" || srcAType=="volatile") && !srcAName.isEmpty()) { @@ -3470,7 +3516,7 @@ void mergeArguments(ArgumentList *srcAl,ArgumentList *dstAl,bool forceNameOverwr dstA->defval=srcA->defval.copy(); } - // fix wrongly detected const or volatile specificiers before merging. + // fix wrongly detected const or volatile specifiers before merging. // example: "const A *const" is detected as type="const A *" name="const" if (srcA->name=="const" || srcA->name=="volatile") { @@ -3799,7 +3845,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, } } /* go to the parent scope */ - if (scopeOffset==0) { scopeOffset=-1; @@ -3810,7 +3855,6 @@ bool getDefs(const QCString &scName,const QCString &memberName, } } while (scopeOffset>=0); - // unknown or undocumented scope } if (mn && scopeName.isEmpty() && mScope.isEmpty()) // Maybe a related function? { @@ -4082,7 +4126,8 @@ bool resolveRef(/* in */ const char *scName, /* out */ Definition **resContext, /* out */ MemberDef **resMember, bool lookForSpecialization, - FileDef *currentFile + FileDef *currentFile, + bool checkScope ) { QCString tsName = name; @@ -4173,15 +4218,25 @@ bool resolveRef(/* in */ const char *scName, GroupDef *gd = 0; // check if nameStr is a member or global. - //printf("getDefs(scope=%s,name=%s,args=%s)\n",scopeStr.data(),nameStr.data(),argsStr.data()); + //printf("getDefs(scope=%s,name=%s,args=%s checkScope=%d)\n", + // scopeStr.data(),nameStr.data(),argsStr.data(),checkScope); if (getDefs(scopeStr,nameStr,argsStr, md,cd,fd,nd,gd, - scopePos==0 && !memberScopeFirst, + scopePos==0 && !memberScopeFirst, // forceEmptyScope currentFile, - TRUE + TRUE // checkCV ) ) { + if (checkScope && md && !cd && !nd && (!scopeStr.isEmpty() || nameStr.find("::")>0)) + { + // we did find a member, but it is a global one while we were explicitly + // looking for a scoped variable. See bug 616387 for an example why this check is needed. + // note we do need to support autolinking to "::symbol" hence the >0 + *resContext=0; + *resMember=0; + return FALSE; + } //printf("after getDefs md=%p cd=%p fd=%p nd=%p gd=%p\n",md,cd,fd,nd,gd); if (md) { *resMember=md; *resContext=md; } else if (cd) *resContext=cd; @@ -4211,7 +4266,7 @@ bool resolveRef(/* in */ const char *scName, if (tryUnspecializedVersion) { - return resolveRef(scName,name,inSeeBlock,resContext,resMember,FALSE); + return resolveRef(scName,name,inSeeBlock,resContext,resMember,FALSE,0,checkScope); } return FALSE; @@ -4486,7 +4541,7 @@ QCString substituteClassNames(const QCString &s) #endif //---------------------------------------------------------------------- -// substitute all occurences of `src' in `s' by `dst' +// substitute all occurrences of `src' in `s' by `dst' QCString substitute(const char *s,const char *src,const char *dst) { @@ -4577,7 +4632,7 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig) return fd; } } - else // file name alone is ambigious + else // file name alone is ambiguous { int count=0; FileNameIterator fni(*fn); @@ -4726,38 +4781,40 @@ bool hasVisibleRoot(BaseClassList *bcl) //---------------------------------------------------------------------- +// note that this function is not reentrant due to the use of static strBuf! QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscore) { static bool caseSenseNames = Config_getBool("CASE_SENSE_NAMES"); - QCString result; + static StrBuf strBuf; + strBuf.clear(); char c; const char *p=name; while ((c=*p++)!=0) { switch(c) { - case '_': if (allowUnderscore) result+="_"; else result+="__"; break; - case '-': result+="-"; break; - case ':': result+="_1"; break; - case '/': result+="_2"; break; - case '<': result+="_3"; break; - case '>': result+="_4"; break; - case '*': result+="_5"; break; - case '&': result+="_6"; break; - case '|': result+="_7"; break; - case '.': if (allowDots) result+="."; else result+="_8"; break; - case '!': result+="_9"; break; - case ',': result+="_00"; break; - case ' ': result+="_01"; break; - case '{': result+="_02"; break; - case '}': result+="_03"; break; - case '?': result+="_04"; break; - case '^': result+="_05"; break; - case '%': result+="_06"; break; - case '(': result+="_07"; break; - case ')': result+="_08"; break; - case '+': result+="_09"; break; - case '=': result+="_0A"; break; + case '_': if (allowUnderscore) strBuf.addChar('_'); else strBuf.addStr("__"); break; + case '-': strBuf.addChar('-'); break; + case ':': strBuf.addStr("_1"); break; + case '/': strBuf.addStr("_2"); break; + case '<': strBuf.addStr("_3"); break; + case '>': strBuf.addStr("_4"); break; + case '*': strBuf.addStr("_5"); break; + case '&': strBuf.addStr("_6"); break; + case '|': strBuf.addStr("_7"); break; + case '.': if (allowDots) strBuf.addChar('.'); else strBuf.addStr("_8"); break; + case '!': strBuf.addStr("_9"); break; + case ',': strBuf.addStr("_00"); break; + case ' ': strBuf.addStr("_01"); break; + case '{': strBuf.addStr("_02"); break; + case '}': strBuf.addStr("_03"); break; + case '?': strBuf.addStr("_04"); break; + case '^': strBuf.addStr("_05"); break; + case '%': strBuf.addStr("_06"); break; + case '(': strBuf.addStr("_07"); break; + case ')': strBuf.addStr("_08"); break; + case '+': strBuf.addStr("_09"); break; + case '=': strBuf.addStr("_0A"); break; default: if (c<0) { @@ -4769,21 +4826,22 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor ids[2]=map[id>>4]; ids[3]=map[id&0xF]; ids[4]=0; - result+=ids; + strBuf.addStr(ids); } else if (caseSenseNames || !isupper(c)) { - result+=c; + strBuf.addChar(c); } else { - result+="_"; - result+=tolower(c); + strBuf.addChar('_'); + strBuf.addChar(tolower(c)); } break; } } - return result; + strBuf.addChar(0); + return strBuf.get(); } /*! This function determines the file name on disk of an item @@ -5117,38 +5175,41 @@ QCString stripScope(const char *name) /*! Converts a string to an XML-encoded string */ QCString convertToXML(const char *s) { - QCString result; - if (s==0) return result; + static StrBuf strBuf; + strBuf.clear(); + if (s==0) return ""; const char *p=s; char c; while ((c=*p++)) { switch (c) { - case '<': result+="<"; break; - case '>': result+=">"; break; - case '&': result+="&"; break; - case '\'': result+="'"; break; - case '"': result+="""; break; - default: result+=c; break; + case '<': strBuf.addStr("<"); break; + case '>': strBuf.addStr(">"); break; + case '&': strBuf.addStr("&"); break; + case '\'': strBuf.addStr("'"); break; + case '"': strBuf.addStr("""); break; + default: strBuf.addChar(c); break; } } - return result; + strBuf.addChar(0); + return strBuf.get(); } /*! Converts a string to a HTML-encoded string */ QCString convertToHtml(const char *s,bool keepEntities) { - QCString result; - if (s==0) return result; + static StrBuf strBuf; + strBuf.clear(); + if (s==0) return ""; const char *p=s; char c; while ((c=*p++)) { switch (c) { - case '<': result+="<"; break; - case '>': result+=">"; break; + case '<': strBuf.addStr("<"); break; + case '>': strBuf.addStr(">"); break; case '&': if (keepEntities) { const char *e=p; @@ -5160,25 +5221,26 @@ QCString convertToHtml(const char *s,bool keepEntities) if (ce==';') // found end of an entity { // copy entry verbatim - result+=c; - while (p<e) result+=*p++; + strBuf.addChar(c); + while (p<e) strBuf.addChar(*p++); } else { - result+="&"; + strBuf.addStr("&"); } } else { - result+="&"; + strBuf.addStr("&"); } break; - case '\'': result+="'"; break; - case '"': result+="""; break; - default: result+=c; break; + case '\'': strBuf.addStr("'"); break; + case '"': strBuf.addStr("""); break; + default: strBuf.addChar(c); break; } } - return result; + strBuf.addChar(0); + return strBuf.get(); } QCString convertCharEntitiesToUTF8(const QCString &s) @@ -5764,7 +5826,7 @@ PageDef *addRelatedPage(const char *name,const QCString &ptitle, pd->setReference(tagInfo->tagName); } - pd->setFileName(convertNameToFile(pd->name())); + pd->setFileName(convertNameToFile(pd->name(),FALSE,TRUE)); //printf("Appending page `%s'\n",baseName.data()); Doxygen::pageSDict->append(baseName,pd); @@ -5865,7 +5927,7 @@ void addGroupListToTitle(OutputList &ol,Definition *d) #if 0 /*! - * Function converts Latin1 character to latex string representin the same + * Function converts Latin1 character to latex string representing the same * character. */ static void latin1ToLatex(QTextStream &t,unsigned char c) @@ -5941,7 +6003,7 @@ static void latin1ToLatex(QTextStream &t,unsigned char c) } /*! - * Function converts Latin2 character to latex string representin the same + * Function converts Latin2 character to latex string representing the same * character. */ static void latin2ToLatex(QTextStream &t,unsigned char c) @@ -6054,149 +6116,76 @@ static void latin2ToLatex(QTextStream &t,unsigned char c) } #endif -void filterLatexString(QTextStream &t,const char *str, +void filterLatexString(FTextStream &t,const char *str, bool insideTabbing,bool insidePre,bool insideItem) { - if (str) + if (str==0) return; + const unsigned char *p=(const unsigned char *)str; + unsigned char c; + unsigned char pc='\0'; + while (*p) { - const unsigned char *p=(const unsigned char *)str; - unsigned char c; - unsigned char pc='\0'; - while (*p) - { - c=*p++; + c=*p++; - if (insidePre) + if (insidePre) + { + switch(c) { - switch(c) - { - case '\\': t << "\\(\\backslash\\)"; break; - case '{': t << "\\{"; break; - case '}': t << "\\}"; break; - case '_': t << "\\_"; break; - default: - t << (char)c; - } + case '\\': t << "\\(\\backslash\\)"; break; + case '{': t << "\\{"; break; + case '}': t << "\\}"; break; + case '_': t << "\\_"; break; + default: + t << (char)c; } - else - { - switch(c) - { - case '#': t << "\\#"; break; - case '$': t << "\\$"; break; - case '%': t << "\\%"; break; - case '^': t << "$^\\wedge$"; break; - case '&': t << "\\&"; break; - case '*': t << "$\\ast$"; break; - case '_': t << "\\_"; - if (!insideTabbing) t << "\\-"; - break; - case '{': t << "\\{"; break; - case '}': t << "\\}"; break; - case '<': t << "$<$"; break; - case '>': t << "$>$"; break; - case '|': t << "$|$"; break; - case '~': t << "$\\sim$"; break; - case '[': if (Config_getBool("PDF_HYPERLINKS") || insideItem) - t << "\\mbox{[}"; + } + else + { + switch(c) + { + case '#': t << "\\#"; break; + case '$': t << "\\$"; break; + case '%': t << "\\%"; break; + case '^': t << "$^\\wedge$"; break; + case '&': t << "\\&"; break; + case '*': t << "$\\ast$"; break; + case '_': t << "\\_"; + if (!insideTabbing) t << "\\-"; + break; + case '{': t << "\\{"; break; + case '}': t << "\\}"; break; + case '<': t << "$<$"; break; + case '>': t << "$>$"; break; + case '|': t << "$|$"; break; + case '~': t << "$\\sim$"; break; + case '[': if (Config_getBool("PDF_HYPERLINKS") || insideItem) + t << "\\mbox{[}"; + else + t << "["; + break; + case ']': if (pc=='[') t << "$\\,$"; + if (Config_getBool("PDF_HYPERLINKS") || insideItem) + t << "\\mbox{]}"; else - t << "["; - break; - case ']': if (pc=='[') t << "$\\,$"; - if (Config_getBool("PDF_HYPERLINKS") || insideItem) - t << "\\mbox{]}"; - else - t << "]"; - break; - case '-': t << "-\\/"; - break; - case '\\': if (*p=='<') - { t << "$<$"; p++; } - else if (*p=='>') - { t << "$>$"; p++; } - else - { t << "$\\backslash$"; } - break; - case '"': { t << "\\char`\\\"{}"; } - break; - - default: - t << (char)c; -#if 0 - { - // Some languages use wide characters - if (isJapanese || isKorean || isChinese || isSerbian) - { - if (c>=128) - { - t << (char)c; - if (*p) - { - c = *p++; - t << (char)c; - } - } - else // ascii char => see if we can insert a hypenation hint - { - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - else if (isCzech || isRussian || isUkrainian || isSlovene) - { - if (c>=128) - { - t << (char)c; - } - else // ascii char => see if we can insert a hypenation hint - { - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - else if (isGreek) - { - if (c<128) - { - t << "\\textlatin{" << (char)c << "}"; - } - else - { - t << (char)c; - } - } - else if (isLatin2) - { - if (c>=128) - { - latin2ToLatex(t,c); - } - else - { - // see if we can insert an hyphenation hint - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - else // another language => assume latin1 charset - { - if (c>=128) - { - latin1ToLatex(t,c); - } - else - { - // see if we can insert an hyphenation hint - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - } -#endif - } + t << "]"; + break; + case '-': t << "-\\/"; + break; + case '\\': if (*p=='<') + { t << "$<$"; p++; } + else if (*p=='>') + { t << "$>$"; p++; } + else + { t << "$\\backslash$"; } + break; + case '"': { t << "\\char`\\\"{}"; } + break; + + default: + t << (char)c; } - pc = c; } + pc = c; } } @@ -6401,7 +6390,7 @@ g_lang2extMap[] = bool updateLanguageMapping(const QCString &extension,const QCString &language) { - //getLanguageFromFileName("dummy"); // force initializion of the g_extLookup map + //getLanguageFromFileName("dummy"); // force initialization of the g_extLookup map const Lang2ExtMap *p = g_lang2extMap; QCString langName = language.lower(); while (p->langName) @@ -6552,23 +6541,24 @@ bool checkIfTypedef(Definition *scope,FileDef *fileScope,const char *n) } QCString parseCommentAsText(const Definition *scope,const MemberDef *md, - const QString &doc,const QCString &fileName,int lineNr) + const QCString &doc,const QCString &fileName,int lineNr) { - QString result; - if (doc.isEmpty()) return result.data(); - QTextStream t(&result,IO_WriteOnly); + QGString s; + if (doc.isEmpty()) return s.data(); + FTextStream t(&s); DocNode *root = validatingParseDoc(fileName,lineNr, (Definition*)scope,(MemberDef*)md,doc,FALSE,FALSE); TextDocVisitor *visitor = new TextDocVisitor(t); root->accept(visitor); delete visitor; delete root; + QCString result = s.data(); int i=0; if (result.length()>80) { for (i=80;i<100;i++) // search for nice truncation point { - if (result.at(i).isSpace() || + if (isspace(result.at(i)) || result.at(i)==',' || result.at(i)=='.' || result.at(i)=='?') @@ -6662,6 +6652,8 @@ static QCString replaceAliasArgument(const QCString &aliasValue,int paramNum, } } result+=aliasValue.right(aliasValue.length()-p); + result = substitute(result,"\\{","{"); + result = substitute(result,"\\}","}"); result = expandAliasRec(substitute(result,"\\,",",")); //printf("replaceAliasArgument('%s',%d,'%s')->%s\n", // aliasValue.data(),paramNum,paramValue.data(),result.data()); @@ -6705,12 +6697,22 @@ QCString extractAliasArgs(const QCString &args,int pos) { int i; int bc=0; + char prevChar=0; if (args.at(pos)=='{') // alias has argument { for (i=pos;i<(int)args.length();i++) { - if (args.at(i)=='{') bc++; - if (args.at(i)=='}') bc--; + if (prevChar!='\\') + { + if (args.at(i)=='{') bc++; + if (args.at(i)=='}') bc--; + prevChar=args.at(i); + } + else + { + prevChar=0; + } + if (bc==0) { //printf("extractAliasArgs('%s')->'%s'\n",args.data(),args.mid(pos+1,i-pos-1).data()); @@ -6964,9 +6966,9 @@ bool patternMatch(const QFileInfo &fi,const QStrList *patList) #else // unix QRegExp re(pattern,TRUE,TRUE); // case sensitive match #endif - found = found || re.match(fi.fileName())!=-1 || - re.match(fi.filePath())!=-1 || - re.match(fi.absFilePath())!=-1; + found = found || re.match(fi.fileName().data())!=-1 || + re.match(fi.filePath().data())!=-1 || + re.match(fi.absFilePath().data())!=-1; //printf("Matching `%s' against pattern `%s' found=%d\n", // fi->fileName().data(),pattern.data(),found); } @@ -56,6 +56,7 @@ class Definition; class BufStr; class QFileInfo; class QStrList; +class FTextStream; //-------------------------------------------------------------------- @@ -141,7 +142,8 @@ bool resolveRef(/* in */ const char *scName, /* out */ Definition **resContext, /* out */ MemberDef **resMember, /* in */ bool lookForSpecializations = TRUE, - /* in */ FileDef *currentFile = 0 + /* in */ FileDef *currentFile = 0, + /* in */ bool checkScope = FALSE ); bool resolveLink(/* in */ const char *scName, @@ -297,7 +299,7 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor void addGroupListToTitle(OutputList &ol,Definition *d); -void filterLatexString(QTextStream &t,const char *str, +void filterLatexString(FTextStream &t,const char *str, bool insideTabbing=FALSE,bool insidePre=FALSE, bool insideItem=FALSE); @@ -345,7 +347,7 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md, QCString *pResolvedType=0, ArgumentList *actTemplParams=0); -QCString parseCommentAsText(const Definition *scope,const MemberDef *member,const QString &doc,const QCString &fileName,int lineNr); +QCString parseCommentAsText(const Definition *scope,const MemberDef *member,const QCString &doc,const QCString &fileName,int lineNr); QCString transcodeCharacterStringToUTF8(const QCString &input); diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index d9b33d2..cbe3c1d 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -28,7 +28,7 @@ #include <qfileinfo.h> #include "parserintf.h" -XmlDocVisitor::XmlDocVisitor(QTextStream &t,CodeOutputInterface &ci) +XmlDocVisitor::XmlDocVisitor(FTextStream &t,CodeOutputInterface &ci) : DocVisitor(DocVisitor_XML), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) { } @@ -179,7 +179,7 @@ void XmlDocVisitor::visit(DocVerbatim *s) case DocVerbatim::Code: // fall though m_t << "<programlisting>"; Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,s->context(),s->text().latin1(), + ->parseCode(m_ci,s->context(),s->text(), s->isExample(),s->exampleFile()); m_t << "</programlisting>"; break; @@ -237,7 +237,7 @@ void XmlDocVisitor::visit(DocInclude *inc) FileDef fd( cfi.dirPath(), cfi.fileName() ); Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile(), &fd); m_t << "</programlisting>"; @@ -247,7 +247,7 @@ void XmlDocVisitor::visit(DocInclude *inc) m_t << "<programlisting>"; Doxygen::parserManager->getParser(inc->extension()) ->parseCode(m_ci,inc->context(), - inc->text().latin1(), + inc->text(), inc->isExample(), inc->exampleFile()); m_t << "</programlisting>"; @@ -287,7 +287,7 @@ void XmlDocVisitor::visit(DocIncOperator *op) { Doxygen::parserManager->getParser(m_langExt) ->parseCode(m_ci,op->context(), - op->text().latin1(),op->isExample(), + op->text(),op->isExample(), op->exampleFile()); } pushEnabled(); @@ -656,7 +656,7 @@ void XmlDocVisitor::visitPre(DocImage *img) } m_t << "\""; - QString baseName=img->name(); + QCString baseName=img->name(); int i; if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1) { @@ -679,7 +679,7 @@ void XmlDocVisitor::visitPre(DocImage *img) // copy the image to the output dir QFile inImage(img->name()); - QFile outImage(Config_getString("XML_OUTPUT")+"/"+baseName.ascii()); + QFile outImage(Config_getString("XML_OUTPUT")+"/"+baseName.data()); if (inImage.open(IO_ReadOnly)) { if (outImage.open(IO_WriteOnly)) @@ -907,7 +907,7 @@ void XmlDocVisitor::filter(const char *str) m_t << convertToXML(str); } -void XmlDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor) +void XmlDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) { m_t << "<ref refid=\"" << file; if (!anchor.isEmpty()) m_t << "_1" << anchor; diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h index 4662b04..89001aa 100644 --- a/src/xmldocvisitor.h +++ b/src/xmldocvisitor.h @@ -23,15 +23,15 @@ #include <qstack.h> #include <qcstring.h> -class QTextStream; +class FTextStream; class CodeOutputInterface; -class QString; +class QCString; /*! @brief Concrete visitor implementation for XML output. */ class XmlDocVisitor : public DocVisitor { public: - XmlDocVisitor(QTextStream &t,CodeOutputInterface &ci); + XmlDocVisitor(FTextStream &t,CodeOutputInterface &ci); //-------------------------------------- // visitor functions for leaf nodes @@ -135,8 +135,8 @@ class XmlDocVisitor : public DocVisitor //-------------------------------------- void filter(const char *str); - void startLink(const QString &ref,const QString &file, - const QString &anchor); + void startLink(const QCString &ref,const QCString &file, + const QCString &anchor); void endLink(); void pushEnabled(); @@ -146,7 +146,7 @@ class XmlDocVisitor : public DocVisitor // state variables //-------------------------------------- - QTextStream &m_t; + FTextStream &m_t; CodeOutputInterface &m_ci; bool m_insidePre; bool m_hide; diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 400180e..e6bb475 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -108,12 +108,12 @@ class XmlSectionMapper : public QIntDict<char> static XmlSectionMapper g_xmlSectionMapper; -inline void writeXMLString(QTextStream &t,const char *s) +inline void writeXMLString(FTextStream &t,const char *s) { t << convertToXML(s); } -inline void writeXMLCodeString(QTextStream &t,const char *s, int &col) +inline void writeXMLCodeString(FTextStream &t,const char *s, int &col) { char c; while ((c=*s++)) @@ -140,7 +140,7 @@ inline void writeXMLCodeString(QTextStream &t,const char *s, int &col) } -static void writeXMLHeader(QTextStream &t) +static void writeXMLHeader(FTextStream &t) { t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "; @@ -158,8 +158,8 @@ static void writeCombineScript() err("Cannot open file %s for writing!\n",fileName.data()); return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); t << "<!-- XSLT script to combine the generated output into a single file. \n" @@ -180,7 +180,7 @@ static void writeCombineScript() } -void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId, +void writeXMLLink(FTextStream &t,const char *extRef,const char *compoundId, const char *anchorId,const char *text,const char *tooltip) { t << "<ref refid=\"" << compoundId; @@ -198,7 +198,7 @@ void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId, class TextGeneratorXMLImpl : public TextGeneratorIntf { public: - TextGeneratorXMLImpl(QTextStream &t): m_t(t) {} + TextGeneratorXMLImpl(FTextStream &t): m_t(t) {} void writeString(const char *s,bool /*keepSpaces*/) const { writeXMLString(m_t,s); @@ -211,7 +211,7 @@ class TextGeneratorXMLImpl : public TextGeneratorIntf writeXMLLink(m_t,extRef,file,anchor,text,0); } private: - QTextStream &m_t; + FTextStream &m_t; }; template<class T> class ValStack @@ -272,7 +272,7 @@ class XMLCodeGenerator : public CodeOutputInterface { public: - XMLCodeGenerator(QTextStream &t) : m_t(t), m_lineNumber(-1), + XMLCodeGenerator(FTextStream &t) : m_t(t), m_lineNumber(-1), m_insideCodeLine(FALSE), m_normalHLNeedStartTag(TRUE), m_insideSpecialHL(FALSE) {} virtual ~XMLCodeGenerator() { } @@ -403,7 +403,7 @@ class XMLCodeGenerator : public CodeOutputInterface } private: - QTextStream &m_t; + FTextStream &m_t; QCString m_refId; QCString m_external; int m_lineNumber; @@ -417,7 +417,7 @@ class XMLCodeGenerator : public CodeOutputInterface static void writeTemplateArgumentList(ArgumentList *al, - QTextStream &t, + FTextStream &t, Definition *scope, FileDef *fileScope, int indent) @@ -455,7 +455,7 @@ static void writeTemplateArgumentList(ArgumentList *al, } } -static void writeMemberTemplateLists(MemberDef *md,QTextStream &t) +static void writeMemberTemplateLists(MemberDef *md,FTextStream &t) { LockingPtr<ArgumentList> templMd = md->templateArguments(); if (templMd!=0) // function template prefix @@ -464,12 +464,12 @@ static void writeMemberTemplateLists(MemberDef *md,QTextStream &t) } } -static void writeTemplateList(ClassDef *cd,QTextStream &t) +static void writeTemplateList(ClassDef *cd,FTextStream &t) { writeTemplateArgumentList(cd->templateArguments(),t,cd,0,4); } -static void writeXMLDocBlock(QTextStream &t, +static void writeXMLDocBlock(FTextStream &t, const QCString &fileName, int lineNr, Definition *scope, @@ -493,7 +493,7 @@ static void writeXMLDocBlock(QTextStream &t, } -void writeXMLCodeBlock(QTextStream &t,FileDef *fd) +void writeXMLCodeBlock(FTextStream &t,FileDef *fd) { ParserInterface *pIntf=Doxygen::parserManager->getParser(fd->getDefFileExtension()); pIntf->resetCodeParserState(); @@ -508,7 +508,7 @@ void writeXMLCodeBlock(QTextStream &t,FileDef *fd) delete xmlGen; } -static void writeMemberReference(QTextStream &t,Definition *def,MemberDef *rmd,const char *tagName) +static void writeMemberReference(FTextStream &t,Definition *def,MemberDef *rmd,const char *tagName) { QCString scope = rmd->getScopeString(); QCString name = rmd->name(); @@ -544,7 +544,7 @@ static void stripQualifiers(QCString &typeStr) } } -static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,Definition *def) +static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,Definition *def) { // + declaration/definition arg lists @@ -976,7 +976,7 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De t << " </memberdef>" << endl; } -static void generateXMLSection(Definition *d,QTextStream &ti,QTextStream &t, +static void generateXMLSection(Definition *d,FTextStream &ti,FTextStream &t, MemberList *ml,const char *kind,const char *header=0, const char *documentation=0) { @@ -1018,7 +1018,7 @@ static void generateXMLSection(Definition *d,QTextStream &ti,QTextStream &t, t << " </sectiondef>" << endl; } -static void writeListOfAllMembers(ClassDef *cd,QTextStream &t) +static void writeListOfAllMembers(ClassDef *cd,FTextStream &t) { t << " <listofallmembers>" << endl; if (cd->memberNameInfoSDict()) @@ -1066,7 +1066,7 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t) t << " </listofallmembers>" << endl; } -static void writeInnerClasses(const ClassSDict *cl,QTextStream &t) +static void writeInnerClasses(const ClassSDict *cl,FTextStream &t) { if (cl) { @@ -1091,7 +1091,7 @@ static void writeInnerClasses(const ClassSDict *cl,QTextStream &t) } } -static void writeInnerNamespaces(const NamespaceSDict *nl,QTextStream &t) +static void writeInnerNamespaces(const NamespaceSDict *nl,FTextStream &t) { if (nl) { @@ -1108,7 +1108,7 @@ static void writeInnerNamespaces(const NamespaceSDict *nl,QTextStream &t) } } -static void writeInnerFiles(const FileList *fl,QTextStream &t) +static void writeInnerFiles(const FileList *fl,FTextStream &t) { if (fl) { @@ -1122,7 +1122,7 @@ static void writeInnerFiles(const FileList *fl,QTextStream &t) } } -static void writeInnerPages(const PageSDict *pl,QTextStream &t) +static void writeInnerPages(const PageSDict *pl,FTextStream &t) { if (pl) { @@ -1140,7 +1140,7 @@ static void writeInnerPages(const PageSDict *pl,QTextStream &t) } } -static void writeInnerGroups(const GroupList *gl,QTextStream &t) +static void writeInnerGroups(const GroupList *gl,FTextStream &t) { if (gl) { @@ -1155,7 +1155,7 @@ static void writeInnerGroups(const GroupList *gl,QTextStream &t) } } -static void writeInnerDirs(const DirList *dl,QTextStream &t) +static void writeInnerDirs(const DirList *dl,FTextStream &t) { if (dl) { @@ -1170,7 +1170,7 @@ static void writeInnerDirs(const DirList *dl,QTextStream &t) } -static void generateXMLForClass(ClassDef *cd,QTextStream &ti) +static void generateXMLForClass(ClassDef *cd,FTextStream &ti) { // + brief description // + detailed description @@ -1207,8 +1207,8 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) err("Cannot open file %s for writing!\n",fileName.data()); return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" @@ -1408,7 +1408,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ti << " </compound>" << endl; } -static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti) +static void generateXMLForNamespace(NamespaceDef *nd,FTextStream &ti) { // + contained class definitions // + contained namespace definitions @@ -1433,8 +1433,8 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti) err("Cannot open file %s for writing!\n",fileName.data()); return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" @@ -1490,7 +1490,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti) ti << " </compound>" << endl; } -static void generateXMLForFile(FileDef *fd,QTextStream &ti) +static void generateXMLForFile(FileDef *fd,FTextStream &ti) { // + includes files // + includedby files @@ -1520,8 +1520,8 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti) err("Cannot open file %s for writing!\n",fileName.data()); return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" @@ -1637,7 +1637,7 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti) ti << " </compound>" << endl; } -static void generateXMLForGroup(GroupDef *gd,QTextStream &ti) +static void generateXMLForGroup(GroupDef *gd,FTextStream &ti) { // + members // + member groups @@ -1665,8 +1665,8 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti) return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << gd->getOutputFileBase() << "\" kind=\"group\">" << endl; @@ -1720,7 +1720,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti) ti << " </compound>" << endl; } -static void generateXMLForDir(DirDef *dd,QTextStream &ti) +static void generateXMLForDir(DirDef *dd,FTextStream &ti) { if (dd->isReference()) return; // skip external references ti << " <compound refid=\"" << dd->getOutputFileBase() @@ -1736,8 +1736,8 @@ static void generateXMLForDir(DirDef *dd,QTextStream &ti) return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << dd->getOutputFileBase() << "\" kind=\"dir\">" << endl; @@ -1759,7 +1759,7 @@ static void generateXMLForDir(DirDef *dd,QTextStream &ti) ti << " </compound>" << endl; } -static void generateXMLForPage(PageDef *pd,QTextStream &ti,bool isExample) +static void generateXMLForPage(PageDef *pd,FTextStream &ti,bool isExample) { // + name // + title @@ -1789,8 +1789,8 @@ static void generateXMLForPage(PageDef *pd,QTextStream &ti,bool isExample) return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); writeXMLHeader(t); t << " <compounddef id=\"" << pageName; t << "\" kind=\"" << kindName << "\">" << endl; @@ -1898,8 +1898,8 @@ void generateXML() err("Cannot open file %s for writing!\n",fileName.data()); return; } - QTextStream t(&f); - t.setEncoding(QTextStream::UnicodeUTF8); + FTextStream t(&f); + //t.setEncoding(FTextStream::UnicodeUTF8); // write index header t << "<?xml version='1.0' encoding='UTF-8' standalone='no'?>" << endl;; |