summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp16
-rw-r--r--src/commentscan.l7
-rw-r--r--src/definition.h2
-rw-r--r--src/dirdef.cpp6
-rw-r--r--src/docparser.cpp4
-rw-r--r--src/docparser.h8
-rw-r--r--src/docsets.cpp3
-rw-r--r--src/doctokenizer.l8
-rw-r--r--src/dot.cpp2
-rw-r--r--src/doxygen.cpp56
-rw-r--r--src/filedef.cpp4
-rw-r--r--src/groupdef.cpp17
-rw-r--r--src/htmlgen.cpp9
-rw-r--r--src/latexdocvisitor.cpp36
-rw-r--r--src/latexdocvisitor.h3
-rw-r--r--src/latexgen.cpp40
-rw-r--r--src/latexgen.h2
-rw-r--r--src/memberdef.cpp65
-rw-r--r--src/memberdef.h2
-rw-r--r--src/membergroup.cpp6
-rw-r--r--src/memberlist.cpp6
-rw-r--r--src/namespacedef.cpp6
-rw-r--r--src/outputlist.cpp4
-rw-r--r--src/outputlist.h2
-rw-r--r--src/rtfgen.cpp3
-rw-r--r--src/scanner.l18
-rw-r--r--src/tagreader.cpp1
-rw-r--r--src/translator_de.h57
-rw-r--r--src/util.cpp50
-rw-r--r--src/util.h13
-rw-r--r--src/xmlgen.cpp2
31 files changed, 317 insertions, 141 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index cb4f842..5c75ebb 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -301,6 +301,10 @@ QCString ClassDef::displayName() const
{
n="<"+n.left(n.length()-2)+">";
}
+ else if (n.right(2)=="-g")
+ {
+ n = n.left(n.length()-2);
+ }
//printf("ClassDef::displayName()=%s\n",n.data());
return n;
}
@@ -863,7 +867,7 @@ static void writeTemplateSpec(OutputList &ol,Definition *d,
void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
{
- if (!briefDescription().isEmpty())
+ if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
ol.parseDoc(briefFile(),briefLine(),this,0,
@@ -882,10 +886,6 @@ void ClassDef::writeBriefDescription(OutputList &ol,bool exampleFlag)
writeMoreLink(ol,anchor());
}
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph(); // FIXME:PARA
- //ol.popGeneratorState();
ol.endParagraph();
}
ol.writeSynopsis();
@@ -1937,9 +1937,9 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
startTitle(ol,getOutputFileBase(),this);
- ol.parseText(pageTitle);
+ ol.parseText(pageTitle,TRUE);
addGroupListToTitle(ol,this);
- endTitle(ol,getOutputFileBase(),name());
+ endTitle(ol,getOutputFileBase(),displayName());
writeDocumentationContents(ol,pageTitle);
if (generateTreeView)
@@ -2073,7 +2073,7 @@ void ClassDef::writeMemberList(OutputList &ol)
ol.endQuickIndices();
}
startTitle(ol,0);
- ol.parseText(displayName()+" "+theTranslator->trMemberList());
+ ol.parseText(displayName()+" "+theTranslator->trMemberList(),TRUE);
endTitle(ol,0,0);
ol.startContents();
ol.parseText(theTranslator->trThisIsTheListOfAllMembers());
diff --git a/src/commentscan.l b/src/commentscan.l
index b95ae7c..61cc9e2 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -1040,7 +1040,11 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
addOutput(yytext);
}
<Comment>^{B}*"-" { // start of autolist
- setOutput(OutputDoc);
+ if (inContext!=OutputXRef)
+ {
+ briefEndsAtDot=FALSE;
+ setOutput(OutputDoc);
+ }
addOutput(yytext);
}
<Comment>("."+)[a-z_A-Z0-9\)] { // . at start or in the middle of a word, or ellipsis
@@ -2571,6 +2575,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
lineNr = yyLineNr;
//printf("position=%d parseMore=%d\n",position,parseMore);
+
return parseMore;
}
diff --git a/src/definition.h b/src/definition.h
index 5d7fd15..46b81a0 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -290,7 +290,7 @@ class Definition : public DefinitionIntf, public LockableObj
virtual void addInnerCompound(Definition *d);
virtual void setOuterScope(Definition *d);
- void setHidden(bool b);
+ virtual void setHidden(bool b);
void setArtificial(bool b);
diff --git a/src/dirdef.cpp b/src/dirdef.cpp
index 2d15f54..9e9579b 100644
--- a/src/dirdef.cpp
+++ b/src/dirdef.cpp
@@ -152,7 +152,7 @@ void DirDef::writeDetailedDescription(OutputList &ol,const QCString &title)
void DirDef::writeBriefDescription(OutputList &ol)
{
- if (!briefDescription().isEmpty())
+ if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
ol.parseDoc(briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE);
@@ -225,7 +225,6 @@ void DirDef::writeSubDirList(OutputList &ol)
}
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),
FALSE, // indexWords
@@ -235,7 +234,6 @@ void DirDef::writeSubDirList(OutputList &ol)
TRUE // link from index
);
ol.endMemberDescription();
- ol.endParagraph();
}
dd=m_subdirs.next();
}
@@ -288,7 +286,6 @@ void DirDef::writeFileList(OutputList &ol)
ol.endMemberItem();
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),
FALSE, // indexWords
@@ -298,7 +295,6 @@ void DirDef::writeFileList(OutputList &ol)
TRUE // link from index
);
ol.endMemberDescription();
- ol.endParagraph();
}
fd=m_fileList->next();
}
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 5028c90..d6f31df 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -6509,7 +6509,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
return root;
}
-DocNode *validatingParseText(const char *input)
+DocNode *validatingParseText(const char *input,bool forceBreaks)
{
// store parser state so we can re-enter this function if needed
docParserPushContext();
@@ -6537,7 +6537,7 @@ DocNode *validatingParseText(const char *input)
g_paramsFound.clear();
g_searchUrl="";
- DocText *txt = new DocText;
+ DocText *txt = new DocText(forceBreaks);
if (input)
{
diff --git a/src/docparser.h b/src/docparser.h
index 39f0fe5..6ad4457 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -69,7 +69,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
/*! Main entry point for parsing simple text fragments. These
* fragments are limited to words, whitespace and symbols.
*/
-DocNode *validatingParseText(const char *input);
+DocNode *validatingParseText(const char *input,bool forceBreaks=FALSE);
/*! Searches for section and anchor commands in the input */
void docFindSections(const char *input,
@@ -1195,10 +1195,14 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
class DocText : public CompAccept<DocText>, public DocNode
{
public:
- DocText() {}
+ DocText(bool forceBreaks) : m_forceBreaks(forceBreaks) {}
Kind kind() const { return Kind_Text; }
void accept(DocVisitor *v) { CompAccept<DocText>::accept(this,v); }
void parse();
+ bool forceBreaks() const { return m_forceBreaks; }
+
+ private:
+ bool m_forceBreaks;
};
/*! @brief Root node of documentation tree */
diff --git a/src/docsets.cpp b/src/docsets.cpp
index 1c0b55d..17f8ca8 100644
--- a/src/docsets.cpp
+++ b/src/docsets.cpp
@@ -135,7 +135,8 @@ void DocSets::initialize()
err("Could not open file %s for writing\n",notes.data());
exit(1);
}
- QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ QCString indexName="index";
m_nts.setDevice(m_nf);
m_nts << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
m_nts << "<DocSetNodes version=\"1.0\">" << endl;
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index d33dc4a..1ede3b4 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -333,12 +333,12 @@ LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 (({SCOPEPRE}*"operator"{OPMASK})|({SCOPEPRE}"operator"{OPMASKOPT})|(("::"|"#"){SCOPEPRE}*"operator"{OPMASKOPT})){CVSPEC}?
LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
-CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."]
+CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."=]
ESCWORD "%"{ID}(("::"|"."){ID})*
WORD1 {ESCWORD}|{CHARWORDQ}+|"{"|"}"|"'\"'"|("\""[^"\n]*\n?[^"\n]*"\"")
-WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"
+WORD2 "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="
WORD1NQ {ESCWORD}|{CHARWORDQ}+
-WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"
+WORD2NQ "."|","|"("|")"|"["|"]"|":"|";"|"\?"|"="
HTMLTAG "<"(("/")?){ID}({WS}+{ATTRIB})*{WS}*(("/")?)">"
HTMLKEYL "strong"|"center"|"table"|"caption"|"small"|"code"|"dfn"|"var"|"img"|"pre"|"sub"|"sup"|"tr"|"td"|"th"|"ol"|"ul"|"li"|"tt"|"kbd"|"em"|"hr"|"dl"|"dt"|"dd"|"br"|"i"|"a"|"b"|"p"
HTMLKEYU "STRONG"|"CENTER"|"TABLE"|"CAPTION"|"SMALL"|"CODE"|"DFN"|"VAR"|"IMG"|"PRE"|"SUB"|"SUP"|"TR"|"TD"|"TH"|"OL"|"UL"|"LI"|"TT"|"KBD"|"EM"|"HR"|"DL"|"DT"|"DD"|"BR"|"I"|"A"|"B"|"P"
@@ -940,7 +940,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}
<*>\n {
warn(g_fileName,yylineno,"warning: Unexpected new line character");
}
-<*>[\\@<>&$#%~"] { /* unescaped special character */
+<*>[\\@<>&$#%~"=] { /* unescaped special character */
//warn(g_fileName,yylineno,"warning: Unexpected character `%s', assuming command \\%s was meant.",yytext,yytext);
g_token->name = yytext;
return TK_COMMAND;
diff --git a/src/dot.cpp b/src/dot.cpp
index 7a92eeb..744b95f 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -3579,7 +3579,7 @@ void writeDotImageMapFromFile(FTextStream &t,
else // bitmap graphics
{
t << "<img src=\"" << relPath << imgName << "\" alt=\""
- << imgName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl
+ << imgName << "\" border=\"0\" usemap=\"#" << mapName << "\"/>" << endl
<< "<map name=\"" << mapName << "\" id=\"" << mapName << "\">";
convertMapFile(t, absOutFile, relPath ,TRUE, context);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 2ad5bc5..a451e46 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -2398,12 +2398,13 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
Debug::print(Debug::Variables,0,
"VARIABLE_SEC: \n"
- " type=`%s' name=`%s' args=`%s' bodyLine=`%d' mGrpId=%d\n",
+ " type=`%s' name=`%s' args=`%s' bodyLine=`%d' mGrpId=%d relates=%s\n",
root->type.data(),
root->name.data(),
root->args.data(),
root->bodyLine,
- root->mGrpId
+ root->mGrpId,
+ root->relates.data()
);
//printf("root->parent->name=%s\n",root->parent->name.data());
@@ -4355,8 +4356,8 @@ static bool findClassRelation(
else if (mode==Undocumented && (scopeOffset==0 || isATemplateArgument))
{
Debug::print(Debug::Classes,0,
- " New undocumented base class `%s' baseClassName=%s\n",
- biName.data(),baseClassName.data()
+ " New undocumented base class `%s' baseClassName=%s isArtificial=%d\n",
+ biName.data(),baseClassName.data(),isArtificial
);
baseClass=0;
if (isATemplateArgument)
@@ -5941,16 +5942,17 @@ static void findMember(EntryNav *rootNav,
{
bool newMember=TRUE; // assume we have a new member
bool newMemberName=FALSE;
+ MemberDef *mdDefine=0;
bool isDefine=FALSE;
{
MemberName *mn = Doxygen::functionNameSDict->find(funcName);
if (mn)
{
- MemberDef *md = mn->first();
- while (md && !isDefine)
+ mdDefine = mn->first();
+ while (mdDefine && !isDefine)
{
- isDefine = isDefine || md->isDefine();
- md = mn->next();
+ isDefine = isDefine || mdDefine->isDefine();
+ if (!isDefine) mdDefine = mn->next();
}
}
}
@@ -5970,6 +5972,7 @@ static void findMember(EntryNav *rootNav,
LockingPtr<ArgumentList> rmdAl = rmd->argumentList();
newMember=
+ className!=rmd->getOuterScope()->name() ||
!matchArguments2(rmd->getOuterScope(),rmd->getFileDef(),rmdAl.pointer(),
cd,fd,root->argList,
TRUE);
@@ -5997,19 +6000,17 @@ static void findMember(EntryNav *rootNav,
else
mtype=MemberDef::Function;
+ if (isDefine && mdDefine)
+ {
+ mdDefine->setHidden(TRUE);
+ funcType="#define";
+ funcArgs=mdDefine->argsString();
+ funcDecl=funcType + " " + funcName;
+ }
+
//printf("New related name `%s' `%d'\n",funcName.data(),
// root->argList ? (int)root->argList->count() : -1);
- // new related (member) function
-#if 0 // removed as it doesn't handle related template functions correctly
- ArgumentList *tArgList =
- getTemplateArgumentsFromName(scopeName+"::"+funcName,root->tArgLists);
- MemberDef *md=new MemberDef(
- root->fileName,root->startLine,
- funcType,funcName,funcArgs,exceptions,
- root->protection,root->virt,root->stat,TRUE,
- mtype,tArgList,funcArgs.isEmpty() ? 0 : root->argList);
-#endif
// first note that we pass:
// (root->tArgLists ? root->tArgLists->last() : 0)
// for the template arguments fo the new "member."
@@ -6025,6 +6026,12 @@ static void findMember(EntryNav *rootNav,
mtype,
(root->tArgLists ? root->tArgLists->last() : 0),
funcArgs.isEmpty() ? 0 : root->argList);
+
+ if (isDefine && mdDefine)
+ {
+ md->setInitializer(mdDefine->initializer());
+ }
+
//
// we still have the problem that
// MemberDef::writeDocumentation() in memberdef.cpp
@@ -6105,7 +6112,10 @@ static void findMember(EntryNav *rootNav,
cd->insertUsedFile(root->fileName);
md->setRefItems(root->sli);
if (root->relatesType == Duplicate) md->setRelatedAlso(cd);
- addMemberToGroups(root,md);
+ if (!isDefine)
+ {
+ addMemberToGroups(root,md);
+ }
//printf("Adding member=%s\n",md->name().data());
if (newMemberName)
{
@@ -7986,7 +7996,8 @@ static void buildPageList(EntryNav *rootNav)
QCString title=root->args.stripWhiteSpace();
if (title.isEmpty()) title=theTranslator->trMainPage();
- QCString name = Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ //QCString name = Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ QCString name = "index";
addRefItem(root->sli,
name,
"page",
@@ -8011,7 +8022,8 @@ static void findMainPage(EntryNav *rootNav)
{
//printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
QCString title=root->args.stripWhiteSpace();
- QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ QCString indexName="index";
Doxygen::mainPage = new PageDef(root->fileName,root->startLine,
indexName, root->brief+root->doc+root->inbodyDocs,title);
//setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
@@ -9918,7 +9930,7 @@ void searchInputFiles(StringList &inputFiles)
readFileOrDirectory(s,0,Doxygen::mscFileNameDict,0,0,
0,0,0,
alwaysRecursive);
- s=dotFileList.next();
+ s=mscFileList.next();
}
diff --git a/src/filedef.cpp b/src/filedef.cpp
index b3f19fa..5c68187 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -220,7 +220,7 @@ void FileDef::writeDetailedDescription(OutputList &ol,const QCString &title)
void FileDef::writeBriefDescription(OutputList &ol)
{
- if (!briefDescription().isEmpty())
+ if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
ol.parseDoc(briefFile(),briefLine(),this,0,
@@ -531,7 +531,7 @@ void FileDef::writeDocumentation(OutputList &ol)
ol.parseText(pageTitleShort); // Html only
ol.enableAll();
ol.disable(OutputGenerator::Html);
- ol.parseText(pageTitle); // other output formats
+ ol.parseText(pageTitle,TRUE); // other output formats
ol.popGeneratorState();
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),title);
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 82fd647..f4d4eb9 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -554,7 +554,7 @@ void GroupDef::writeDetailedDescription(OutputList &ol,const QCString &title)
void GroupDef::writeBriefDescription(OutputList &ol)
{
- if (!briefDescription().isEmpty())
+ if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
ol.parseDoc(briefFile(),briefLine(),this,0,
@@ -574,11 +574,6 @@ void GroupDef::writeBriefDescription(OutputList &ol)
ol.endTextLink();
}
ol.popGeneratorState();
-
- //ol.pushGeneratorState();
- //ol.disable(OutputGenerator::RTF);
- //ol.newParagraph();
- //ol.popGeneratorState();
ol.endParagraph();
}
}
@@ -626,11 +621,9 @@ void GroupDef::writeFiles(OutputList &ol,const QCString &title)
ol.endMemberItem();
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),fd,0,fd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
- ol.endParagraph();
}
fd=fileList->next();
}
@@ -668,11 +661,9 @@ void GroupDef::writeNestedGroups(OutputList &ol,const QCString &title)
ol.endMemberItem();
if (!gd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),gd,0,gd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
- ol.endParagraph();
}
gd=groupList->next();
}
@@ -703,11 +694,9 @@ void GroupDef::writeDirs(OutputList &ol,const QCString &title)
}
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
- ol.endParagraph();
}
dd=dirList->next();
}
@@ -1276,7 +1265,9 @@ void addMemberToGroups(Entry *root,MemberDef *md)
if (insertit)
{
- //printf("insertMember found at %s line %d\n",md->getDefFileName().data(),md->getDefLine());
+ //printf("insertMember found at %s line %d: %s: related %s\n",
+ // md->getDefFileName().data(),md->getDefLine(),
+ // md->name().data(),root->relates.data());
bool success = fgd->insertMember(md);
if (success)
{
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index ebca041..f4e9c54 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -765,7 +765,10 @@ static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlig
static QCString getLogoName(const char *projectLogo)
{
if (projectLogo==0) return "";
- if (projectLogo[0]=='$') return projectLogo; // marker is used
+ if (projectLogo[0]=='$')
+ {
+ return projectLogo; // marker is used
+ }
QFileInfo fi(projectLogo);
if (fi.exists())
{
@@ -1017,8 +1020,8 @@ static QCString substituteHtmlKeywords(const QCString &s,const char *title,
// additional HTML only keywords
result = substitute(result,"$treeview",treeViewCssJs);
- result = substitute(result,"$search",searchCssJs);
result = substitute(result,"$searchbox",searchBox);
+ result = substitute(result,"$search",searchCssJs);
result = substitute(result,"$mathjax",mathJaxJs);
result = substitute(result,"$relpath$",relPath); //<-- must be last
@@ -1275,7 +1278,7 @@ void HtmlGenerator::writeHeaderFile(QFile &file, const char *cssname)
t << " <tbody>\n";
t << " <tr style=\"height: 56px;\">\n";
t << " <!--BEGIN PROJECT_LOGO-->\n";
- t << " <td id=\"projectlogo\"><img alt=\"Logo\" src=\"$relpath$$projectlogo\"></td>\n";
+ t << " <td id=\"projectlogo\"><img alt=\"Logo\" src=\"$relpath$$projectlogo\"/></td>\n";
t << " <!--END PROJECT_LOGO-->\n";
t << " <!--BEGIN PROJECT_NAME-->\n";
t << " <td style=\"padding-left: 0.5em;\">\n";
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 48e3675..6d53f37 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -46,6 +46,28 @@ static QCString escapeLabelName(const char *s)
return result;
}
+static bool isSymbol(const char *s)
+{
+ int l=0; // word length
+ int nCaps=0; // number of captials
+ int nCamels=0; // number of lowerCase+upperCase combos
+ int nUnscore=0; // number of underscores
+ const char *p=s;
+ char c;
+ bool plo=FALSE;
+ while ((c=*p++))
+ {
+ bool lo=c>='a' && c<='z';
+ bool up=c>='A' && c<='Z';
+ if (c=='_') nUnscore++;
+ if (up) nCaps++;
+ if (up && plo) nCamels++;
+ plo=lo;
+ l++;
+ }
+ return l>=20 || nCaps>=4 || nCamels>=2 || nUnscore>0;
+}
+
const int maxLevels=5;
static const char *secLabels[maxLevels] =
{ "section","subsection","subsubsection","paragraph","subparagraph" };
@@ -100,7 +122,8 @@ 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),
- m_langExt(langExt), m_currentColumn(0), m_inRowspan(FALSE)
+ m_forceBreaks(FALSE), m_langExt(langExt), m_currentColumn(0),
+ m_inRowspan(FALSE)
{
}
@@ -111,14 +134,14 @@ LatexDocVisitor::LatexDocVisitor(FTextStream &t,CodeOutputInterface &ci,
void LatexDocVisitor::visit(DocWord *w)
{
if (m_hide) return;
- filter(w->word());
+ filter(w->word(),isSymbol(w->word()));
}
void LatexDocVisitor::visit(DocLinkedWord *w)
{
if (m_hide) return;
startLink(w->ref(),w->file(),w->anchor());
- filter(w->word());
+ filter(w->word(),isSymbol(w->word()));
endLink(w->ref(),w->file(),w->anchor());
}
@@ -1301,17 +1324,18 @@ void LatexDocVisitor::visitPost(DocCopy *)
{
}
-void LatexDocVisitor::visitPre(DocText *)
+void LatexDocVisitor::visitPre(DocText *t)
{
+ m_forceBreaks = t->forceBreaks();
}
void LatexDocVisitor::visitPost(DocText *)
{
}
-void LatexDocVisitor::filter(const char *str)
+void LatexDocVisitor::filter(const char *str,bool forceBreaks)
{
- filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem);
+ filterLatexString(m_t,str,m_insideTabbing,m_insidePre,m_insideItem,m_forceBreaks || forceBreaks);
}
void LatexDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor)
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 535c411..b4c7f3b 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -137,7 +137,7 @@ class LatexDocVisitor : public DocVisitor
// helper functions
//--------------------------------------
- void filter(const char *str);
+ void filter(const char *str,bool forceBreaks=FALSE);
void startLink(const QCString &ref,const QCString &file,
const QCString &anchor);
void endLink(const QCString &ref,const QCString &file,
@@ -165,6 +165,7 @@ class LatexDocVisitor : public DocVisitor
bool m_insideItem;
bool m_hide;
bool m_insideTabbing;
+ bool m_forceBreaks;
QStack<bool> m_enabled;
QCString m_langExt;
QMap<int, int> m_rowspanIndices;
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 6c297b8..3e301ac 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -264,6 +264,7 @@ static void writeDefaultHeaderPart1(FTextStream &t)
"\\setcounter{tocdepth}{3}\n"
"\\renewcommand{\\footrulewidth}{0.4pt}\n"
"\\renewcommand{\\familydefault}{\\sfdefault}\n"
+ "\\hfuzz=10pt\n" // allow a bit of overflow to go unnoticed
"\\begin{document}\n";
static bool pdfHyperlinks = Config_getBool("PDF_HYPERLINKS");
static bool usePDFLatex = Config_getBool("USE_PDFLATEX");
@@ -618,21 +619,23 @@ static void writeDefaultStyleSheetPart3(FTextStream &t)
" \\begin{DoxyDesc}{#2}%\n"
" \\begin{description}%\n"
" \\item[] \\hspace{\\fill} \\vspace{-25pt}%\n"
- " \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
- " \\rowcolors{1}{white}{tableShade}%\n"
- " \\arrayrulecolor{gray}%\n"
+ //" \\definecolor{tableShade}{HTML}{F8F8F8}%\n"
+ //" \\rowcolors{1}{white}{tableShade}%\n"
+ //" \\arrayrulecolor{gray}%\n"
+ " \\settowidth{\\labelwidth}{40pt}%\n"
+ " \\setlength{\\LTleft}{\\labelwidth}%\n"
" \\setlength{\\tabcolsep}{0.01\\textwidth}%\n"
" \\ifthenelse{\\equal{#1}{}}\n" // default: name, docs columns
" {\\begin{longtable}{|>{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.87\\textwidth}|}}%\n"
+ " p{0.76\\textwidth}|}}%\n"
" {\\ifthenelse{\\equal{#1}{1}}%\n" // inout, name, docs columns, or type, name, docs columns
" {\\begin{longtable}{|>{\\centering}p{0.10\\textwidth}|%\n"
" >{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.75\\textwidth}|}}%\n"
+ " p{0.64\\textwidth}|}}%\n"
" {\\begin{longtable}{|>{\\centering}p{0.10\\textwidth}|%\n" // inout, type, name, docs columns
" >{\\centering\\hspace{0pt}}p{0.15\\textwidth}|%\n"
" >{\\raggedleft\\hspace{0pt}}p{0.15\\textwidth}|%\n"
- " p{0.58\\textwidth}|}}%\n"
+ " p{0.47\\textwidth}|}}%\n"
" }\\hline%\n"
"}{%\n"
" \\end{longtable}%\n"
@@ -1033,7 +1036,8 @@ void LatexGenerator::endIndexSection(IndexSections is)
break;
case isMainPage:
{
- QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ //QCString indexName=Config_getBool("GENERATE_TREEVIEW")?"main":"index";
+ QCString indexName="index";
t << "}\n\\label{index}";
if (Config_getBool("PDF_HYPERLINKS")) t << "\\hypertarget{index}{}";
t << "\\input{" << indexName << "}\n";
@@ -1397,12 +1401,12 @@ void LatexGenerator::endIndexKey()
void LatexGenerator::startIndexValue(bool hasBrief)
{
t << " ";
- if (hasBrief) t << "(";
+ if (hasBrief) t << "\\\\*";
}
-void LatexGenerator::endIndexValue(const char *name,bool hasBrief)
+void LatexGenerator::endIndexValue(const char *name,bool /*hasBrief*/)
{
- if (hasBrief) t << ")";
+ //if (hasBrief) t << ")";
t << "}{\\pageref{" << name << "}}{}" << endl;
}
@@ -1777,7 +1781,7 @@ void LatexGenerator::endSection(const char *lab,SectionInfo::SectionType)
void LatexGenerator::docify(const char *str)
{
- filterLatexString(t,str,insideTabbing,FALSE);
+ filterLatexString(t,str,insideTabbing,FALSE,FALSE,TRUE);
}
void LatexGenerator::codify(const char *str)
@@ -1961,7 +1965,9 @@ void LatexGenerator::writeNonBreakableSpace(int)
t << "\\>";
}
else
+ {
t << "~";
+ }
}
void LatexGenerator::startMemberList()
@@ -2366,3 +2372,15 @@ void LatexGenerator::endInlineHeader()
t << "}" << endl;
}
+void LatexGenerator::lineBreak(const char *)
+{
+ if (insideTabbing)
+ {
+ t << "\\\\\n";
+ }
+ else
+ {
+ t << "\\*\n";
+ }
+}
+
diff --git a/src/latexgen.h b/src/latexgen.h
index c1e4e52..0d7c2ef 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -143,7 +143,7 @@ class LatexGenerator : public OutputGenerator
void endDescription();
void startDescItem();
void endDescItem();
- void lineBreak(const char *style=0) { (void)style; t << "\\par\n"; }
+ void lineBreak(const char *style=0);
void startMemberDoc(const char *,const char *,const char *,const char *,bool);
void endMemberDoc(bool);
void startDoxyAnchor(const char *,const char *,const char *,const char *,const char *);
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 8479370..f4139d2 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -944,6 +944,13 @@ void MemberDef::setInbodyDocumentation(const char *d,const char *inbodyFile,int
m_isLinkableCached = 0;
}
+void MemberDef::setHidden(bool b)
+{
+ makeResident();
+ Definition::setHidden(b);
+ m_isLinkableCached = 0;
+}
+
bool MemberDef::isLinkableInProject() const
{
if (m_isLinkableCached==0)
@@ -988,8 +995,18 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
LockingPtr<MemberDef> lock(this,this);
QCString sep = optimizeOutputJava ? "." : "::";
QCString n = name();
- if (!hideScopeNames && m_impl->classDef && gd) n.prepend(m_impl->classDef->name()+sep);
- else if (!hideScopeNames && m_impl->nspace && (gd || fd)) n.prepend(m_impl->nspace->name()+sep);
+ if (!hideScopeNames)
+ {
+ if (m_impl->classDef && gd && !isRelated())
+ {
+ n.prepend(m_impl->classDef->name()+sep);
+ }
+ else if (m_impl->nspace && (gd || fd))
+ {
+ n.prepend(m_impl->nspace->name()+sep);
+ }
+ }
+
if (isObjCMethod())
{
if (isStatic()) ol.docify("+ "); else ol.docify("- ");
@@ -1170,7 +1187,7 @@ bool MemberDef::isBriefSectionVisible() const
visibleIfEnabled && visibleIfPrivate &&
/*visibleIfDocVirtual &&*/ visibleIfNotDefaultCDTor &&
visibleIfFriendCompound &&
- !m_impl->annScope;
+ !m_impl->annScope && !isHidden();
//printf("MemberDef::isBriefSectionVisible() %d\n",visible);
return visible;
}
@@ -1343,7 +1360,13 @@ void MemberDef::writeDeclaration(OutputList &ol,
{
if (getAnonymousEnumType()) // type is an anonymous enum
{
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),ltype.left(i),TRUE);
+ linkifyText(TextGeneratorOLImpl(ol), // out
+ d, // scope
+ getBodyDef(), // fileScope
+ name(), //
+ ltype.left(i), // text
+ TRUE // autoBreak
+ );
getAnonymousEnumType()->writeEnumDeclaration(ol,cd,nd,fd,gd);
//ol+=*getAnonymousEnumType()->enumDecl();
linkifyText(TextGeneratorOLImpl(ol),d,m_impl->fileDef,name(),ltype.right(ltype.length()-i-l),TRUE);
@@ -1351,7 +1374,13 @@ void MemberDef::writeDeclaration(OutputList &ol,
else
{
ltype = ltype.left(i) + " { ... } " + removeAnonymousScopes(ltype.right(ltype.length()-i-l));
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),ltype,TRUE);
+ linkifyText(TextGeneratorOLImpl(ol), // out
+ d, // scope
+ getBodyDef(), // fileScope
+ name(), //
+ ltype, // text
+ TRUE // autoBreak
+ );
}
}
}
@@ -1366,7 +1395,13 @@ void MemberDef::writeDeclaration(OutputList &ol,
ltype.prepend("(");
ltype.append(")");
}
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),ltype,TRUE);
+ linkifyText(TextGeneratorOLImpl(ol), // out
+ d, // scope
+ getBodyDef(), // fileScope
+ name(), //
+ ltype, // text
+ TRUE // autoBreak
+ );
}
bool htmlOn = ol.isEnabled(OutputGenerator::Html);
if (htmlOn && Config_getBool("HTML_ALIGN_MEMBERS") && !ltype.isEmpty())
@@ -1466,8 +1501,16 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (argsString() && !isObjCMethod())
{
if (!isDefine()) ol.writeString(" ");
- //ol.docify(argsString());
- linkifyText(TextGeneratorOLImpl(ol),d,getBodyDef(),name(),argsString());
+ linkifyText(TextGeneratorOLImpl(ol), // out
+ d, // scope
+ getBodyDef(), // fileScope
+ name(), //
+ argsString(), // text
+ m_impl->annMemb, // autoBreak
+ TRUE, // external
+ FALSE, // keepSpaces
+ s_indentLevel
+ );
}
// *** write exceptions
@@ -1661,7 +1704,7 @@ bool MemberDef::isDetailedSectionLinkable() const
)
);
- return ((docFilter && staticFilter && privateFilter && friendCompoundFilter) /*|| inAnonymousScope*/);
+ return ((docFilter && staticFilter && privateFilter && friendCompoundFilter && !isHidden()) /*|| inAnonymousScope*/);
}
bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
@@ -1694,6 +1737,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup);
+
if ( !hasDocs ) return;
if (isEnumValue() && !showEnumValues) return;
@@ -1976,7 +2020,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
if (m_impl->classDef &&
container->definitionType()==TypeClass &&
- m_impl->classDef!=container
+ m_impl->classDef!=container &&
+ !isRelated()
)
{
sl.append("inherited");
diff --git a/src/memberdef.h b/src/memberdef.h
index 0ddda3d..4079f08 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -334,6 +334,8 @@ class MemberDef : public Definition
void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
void setBriefDescription(const char *b,const char *briefFile,int briefLine);
void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
+
+ void setHidden(bool b);
//-----------------------------------------------------------------------------------
// --- actions ----
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 5a5fd80..2f821f8 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -69,11 +69,13 @@ MemberGroup::~MemberGroup()
void MemberGroup::insertMember(MemberDef *md)
{
//printf("MemberGroup::insertMember m_parent=%s memberList=%p count=%d"
- // " member section list: %p\n",
+ // " member section list: %p: md=%p:%s\n",
// m_parent ? m_parent->name().data() : "<null>",
// memberList->first() ? memberList->first()->getSectionList(m_parent) : 0,
// memberList->count(),
- // md->getSectionList(m_parent));
+ // md->getSectionList(m_parent),
+ // md,md->name().data());
+
MemberDef *firstMd = memberList->first();
if (inSameSection && memberList->count()>0 &&
firstMd->getSectionList(m_parent)!=md->getSectionList(m_parent))
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index fd37977..aad386c 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -60,7 +60,8 @@ int MemberList::compareItems(GCI item1, GCI item2)
else if (ord2 > ord1)
return 1;
}
- return stricmp(c1->name(),c2->name());
+ int cmp = stricmp(c1->name(),c2->name());
+ return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine();
}
/*! Count the number of members in this list that are visible in
@@ -792,7 +793,8 @@ int MemberSDict::compareItems(GCI item1, GCI item2)
{
MemberDef *c1=(MemberDef *)item1;
MemberDef *c2=(MemberDef *)item2;
- return stricmp(c1->name(),c2->name());
+ int cmp = stricmp(c1->name(),c2->name());
+ return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine();
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index eca2dfe..0ea3edb 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -274,7 +274,7 @@ void NamespaceDef::writeDetailedDescription(OutputList &ol,const QCString &title
void NamespaceDef::writeBriefDescription(OutputList &ol)
{
- if (!briefDescription().isEmpty())
+ if (!briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startParagraph();
ol.parseDoc(briefFile(),briefLine(),this,0,
@@ -440,7 +440,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
startTitle(ol,getOutputFileBase(),this);
- ol.parseText(pageTitle);
+ ol.parseText(pageTitle,TRUE);
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),displayName());
ol.startContents();
@@ -865,11 +865,9 @@ void NamespaceSDict::writeDeclaration(OutputList &ol,const char *title,bool loca
ol.endMemberItem();
if (!nd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
- ol.startParagraph();
ol.startMemberDescription();
ol.parseDoc(nd->briefFile(),nd->briefLine(),nd,0,nd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
- ol.endParagraph();
}
}
}
diff --git a/src/outputlist.cpp b/src/outputlist.cpp
index 57f4f67..e50b259 100644
--- a/src/outputlist.cpp
+++ b/src/outputlist.cpp
@@ -173,7 +173,7 @@ void OutputList::parseDoc(const char *fileName,int startLine,
delete root;
}
-void OutputList::parseText(const QCString &textStr)
+void OutputList::parseText(const QCString &textStr,bool forceBreaks)
{
int count=0;
OutputGenerator *og=outputs->first();
@@ -184,7 +184,7 @@ void OutputList::parseText(const QCString &textStr)
}
if (count==0) return; // no output formats enabled.
- DocNode *root = validatingParseText(textStr);
+ DocNode *root = validatingParseText(textStr,forceBreaks);
og=outputs->first();
while (og)
diff --git a/src/outputlist.h b/src/outputlist.h
index 1c78ada3..403adbc 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -68,7 +68,7 @@ class OutputList : public OutputDocInterface
Definition *ctx,MemberDef *md,const QCString &docStr,
bool indexWords,bool isExample,const char *exampleName=0,
bool singleLine=FALSE,bool linkFromIndex=FALSE);
- void parseText(const QCString &textStr);
+ void parseText(const QCString &textStr,bool forceBreaks=FALSE);
void startIndexSection(IndexSections is)
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index cc6690e..0cebf87 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -615,7 +615,8 @@ void RTFGenerator::endIndexSection(IndexSections is)
t << "{\\tc \\v " << substitute(Doxygen::mainPage->title(),"%","") << "}"<< endl;
}
t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
- if (Config_getBool("GENERATE_TREEVIEW")) t << "main"; else t << "index";
+ //if (Config_getBool("GENERATE_TREEVIEW")) t << "main"; else t << "index";
+ t << "index";
t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
break;
//case isPackageIndex:
diff --git a/src/scanner.l b/src/scanner.l
index b654d47..122cd05 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -1220,16 +1220,18 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
- curlyCount=0;
+ }
+<PackageName>";" {
current_root->addSubEntry(current);
current_root = current ;
- current = new Entry ;
+ current = new Entry ;
initEntry();
- BEGIN( FindMembers ) ;
- }
-<PackageName>";" {
BEGIN(FindMembers);
}
+<PackageName>"{" {
+ curlyCount=0;
+ BEGIN( ReadNSBody );
+ }
<FindMembers>{B}*"initonly"{BN}+ {
current->type += " initonly ";
if (insideCli) current->spec |= Entry::Initonly;
@@ -3129,7 +3131,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->endBodyLine = yyLineNr;
QCString &cn = current->name;
QCString rn = current_root->name.copy();
- //printf("cn=`%s' rn=`%s'\n",cn.data(),rn.data());
+ //printf("cn=`%s' rn=`%s' isTypedef=%d\n",cn.data(),rn.data(),isTypedef);
if (!cn.isEmpty() && !rn.isEmpty())
{
prependScope();
@@ -3174,7 +3176,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
else
{
- if (!isTypedef)
+ if (!isTypedef && cn.find('@')==-1) // not typedef or unnamed struct
{
// enabled the next two lines for bug 623424
current->doc.resize(0);
@@ -3392,7 +3394,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
if (*yytext==';') // end of a struct/class ...
{
- if (msName.isEmpty() && memspecEntry && (current->section&Entry::COMPOUND_MASK))
+ if (!isTypedef && msName.isEmpty() && memspecEntry && (current->section&Entry::COMPOUND_MASK))
{ // case where a class/struct has a doc block after it
if (!current->doc.isEmpty())
{
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index 0368dad..1934903 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -326,6 +326,7 @@ class TagFileParser : public QXmlDefaultHandler
else
{
warn("warning: Unknown compound attribute `%s' found!\n",kind.data());
+ m_state = Invalid;
}
if (isObjC=="yes" && m_curClass)
{
diff --git a/src/translator_de.h b/src/translator_de.h
index ca92c2b..8a9ca21 100644
--- a/src/translator_de.h
+++ b/src/translator_de.h
@@ -129,7 +129,7 @@
#ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H
-class TranslatorGerman : public TranslatorAdapter_1_6_3
+class TranslatorGerman : public Translator
{
public:
@@ -1910,6 +1910,61 @@ class TranslatorGerman : public TranslatorAdapter_1_6_3
return "Keine Treffer";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.6.3 (missing items for the directory pages)
+//////////////////////////////////////////////////////////////////////////
+
+ /*! introduction text for the directory dependency graph */
+ virtual QCString trDirDependency(const char *name)
+ {
+ return (QCString)"Verzeichnis-Abhängigkeitsgraph für "+name;
+ }
+
+ /*! when clicking a directory dependency label, a page with a
+ * table is shown. The heading for the first column mentions the
+ * source file that has a relation to another file.
+ */
+ virtual QCString trFileIn(const char *name)
+ {
+ return (QCString)"Datei in "+name;
+ }
+
+ /*! when clicking a directory dependency label, a page with a
+ * table is shown. The heading for the second column mentions the
+ * destination file that is included.
+ */
+ virtual QCString trIncludesFileIn(const char *name)
+ {
+ return (QCString)"Include-Dateien in "+name;
+ }
+
+ /** Compiles a date string.
+ * @param year Year in 4 digits
+ * @param month Month of the year: 1=January
+ * @param day Day of the Month: 1..31
+ * @param dayOfWeek Day of the week: 1=Monday..7=Sunday
+ * @param hour Hour of the day: 0..23
+ * @param minutes Minutes in the hour: 0..59
+ * @param seconds Seconds within the minute: 0..59
+ * @param includeTime Include time in the result string?
+ */
+ virtual QCString trDateTime(int year,int month,int day,int dayOfWeek,
+ int hour,int minutes,int seconds,
+ bool includeTime)
+ {
+ static const char *days[] = { "Mon","Die","Mit","Don","Fre","Sam","Son" };
+ static const char *months[] = { "Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez" };
+ QCString sdate;
+ sdate.sprintf("%s %s %d %d",days[dayOfWeek-1],months[month-1],day,year);
+ if (includeTime)
+ {
+ QCString stime;
+ stime.sprintf(" %.2d:%.2d:%.2d",hour,minutes,seconds);
+ sdate+=stime;
+ }
+ return sdate;
+ }
+
};
#endif
diff --git a/src/util.cpp b/src/util.cpp
index ecc1b34..b64ac28 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -90,6 +90,8 @@ TextGeneratorOLImpl::TextGeneratorOLImpl(OutputDocInterface &od) : m_od(od)
void TextGeneratorOLImpl::writeString(const char *s,bool keepSpaces) const
{
+ if (s==0) return;
+ //printf("TextGeneratorOlImpl::writeString('%s',%d)\n",s,keepSpaces);
if (keepSpaces)
{
const char *p=s;
@@ -111,18 +113,21 @@ void TextGeneratorOLImpl::writeString(const char *s,bool keepSpaces) const
}
}
-void TextGeneratorOLImpl::writeBreak() const
+void TextGeneratorOLImpl::writeBreak(int indent) const
{
- m_od.pushGeneratorState();
- m_od.disableAllBut(OutputGenerator::Html);
m_od.lineBreak("typebreak");
- m_od.popGeneratorState();
+ int i;
+ for (i=0;i<indent;i++)
+ {
+ m_od.writeNonBreakableSpace(3);
+ }
}
void TextGeneratorOLImpl::writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
) const
{
+ //printf("TextGeneratorOlImpl::writeLink('%s')\n",text);
m_od.writeObjectLink(extRef,file,anchor,text);
}
@@ -1749,9 +1754,9 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
void linkifyText(const TextGeneratorIntf &out,Definition *scope,
FileDef *fileScope,const char *,
const char *text, bool autoBreak,bool external,
- bool keepSpaces)
+ bool keepSpaces,int indentLevel)
{
- //printf("`%s'\n",text);
+ //printf("linkify=`%s'\n",text);
static QRegExp regExp("[a-z_A-Z\\x80-\\xFF][~!a-z_A-Z0-9.:\\x80-\\xFF]*");
static QRegExp regExpSplit("(?!:),");
QCString txtStr=text;
@@ -1794,7 +1799,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
if (i!=-1) // add a link-break at i in case of Html output
{
out.writeString(splitText.left(i+offset),keepSpaces);
- out.writeBreak();
+ out.writeBreak(indentLevel==0 ? 0 : indentLevel+1);
out.writeString(splitText.right(splitLength-i-offset),keepSpaces);
floatingIndex=splitLength-i-offset+matchLen;
}
@@ -1824,17 +1829,8 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
//printf("** Match word '%s'\n",matchWord.data());
MemberDef *typeDef=0;
- if ((cd=getResolvedClass(scope,fileScope,matchWord,&typeDef)))
- {
- //printf("Found class %s\n",cd->name().data());
- // add link to the result
- if (external ? cd->isLinkable() : cd->isLinkableInProject())
- {
- out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
- found=TRUE;
- }
- }
- else if (typeDef)
+ cd=getResolvedClass(scope,fileScope,matchWord,&typeDef);
+ if (typeDef) // First look at typedef then class, see bug 584184.
{
//printf("Found typedef %s\n",typeDef->name().data());
if (external ? typeDef->isLinkable() : typeDef->isLinkableInProject())
@@ -1846,6 +1842,16 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
found=TRUE;
}
}
+ if (!found && cd)
+ {
+ //printf("Found class %s\n",cd->name().data());
+ // add link to the result
+ if (external ? cd->isLinkable() : cd->isLinkableInProject())
+ {
+ out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
+ found=TRUE;
+ }
+ }
else if ((cd=getClass(matchWord+"-p"))) // search for Obj-C protocols as well
{
// add link to the result
@@ -4711,7 +4717,7 @@ QCString substituteKeywords(const QCString &s,const char *title)
result = substitute(result,"$projectname",Config_getString("PROJECT_NAME"));
result = substitute(result,"$projectnumber",Config_getString("PROJECT_NUMBER"));
result = substitute(result,"$projectbrief",Config_getString("PROJECT_BRIEF"));
- result = substitute(result,"$projectlogo",Config_getString("PROJECT_LOGO"));
+ result = substitute(result,"$projectlogo",stripPath(Config_getString("PROJECT_LOGO")));
return result;
}
@@ -5952,7 +5958,7 @@ void addGroupListToTitle(OutputList &ol,Definition *d)
}
void filterLatexString(FTextStream &t,const char *str,
- bool insideTabbing,bool insidePre,bool insideItem)
+ bool insideTabbing,bool insidePre,bool insideItem,bool forceBreaks)
{
if (str==0) return;
const unsigned char *p=(const unsigned char *)str;
@@ -6017,6 +6023,10 @@ void filterLatexString(FTextStream &t,const char *str,
break;
default:
+ if (!insideTabbing && forceBreaks && c!=' ' && *p!=' ')
+ {
+ t << "\\-";
+ }
t << (char)c;
}
}
diff --git a/src/util.h b/src/util.h
index 5853e00..615f70e 100644
--- a/src/util.h
+++ b/src/util.h
@@ -65,7 +65,7 @@ class TextGeneratorIntf
public:
virtual ~TextGeneratorIntf() {}
virtual void writeString(const char *,bool) const = 0;
- virtual void writeBreak() const = 0;
+ virtual void writeBreak(int indent) const = 0;
virtual void writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
) const = 0;
@@ -77,7 +77,7 @@ class TextGeneratorOLImpl : public TextGeneratorIntf
virtual ~TextGeneratorOLImpl() {}
TextGeneratorOLImpl(OutputDocInterface &od);
void writeString(const char *s,bool keepSpaces) const;
- void writeBreak() const;
+ void writeBreak(int indent) const;
void writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
) const;
@@ -113,7 +113,8 @@ void linkifyText(const TextGeneratorIntf &ol,
const char *text,
bool autoBreak=FALSE,
bool external=TRUE,
- bool keepSpaces=FALSE
+ bool keepSpaces=FALSE,
+ int indentLevel=0
);
void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId=-1);
@@ -307,8 +308,10 @@ QCString escapeCharsInString(const char *name,bool allowDots,bool allowUnderscor
void addGroupListToTitle(OutputList &ol,Definition *d);
void filterLatexString(FTextStream &t,const char *str,
- bool insideTabbing=FALSE,bool insidePre=FALSE,
- bool insideItem=FALSE);
+ bool insideTabbing=FALSE,
+ bool insidePre=FALSE,
+ bool insideItem=FALSE,
+ bool forceBreaks=FALSE);
QCString rtfFormatBmkStr(const char *name);
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index b1cc535..dd793f6 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -203,7 +203,7 @@ class TextGeneratorXMLImpl : public TextGeneratorIntf
{
writeXMLString(m_t,s);
}
- void writeBreak() const {}
+ void writeBreak(int) const {}
void writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
) const