Commit 7e1fa1f2 authored by dimitri's avatar dimitri

Release-1.8.1

parent c11926b2
...@@ -188,7 +188,6 @@ HTML_COLORSTYLE_HUE = 220 ...@@ -188,7 +188,6 @@ HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80 HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = YES HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = YES GENERATE_DOCSET = YES
DOCSET_FEEDNAME = "Doxygen docs" DOCSET_FEEDNAME = "Doxygen docs"
......
DOXYGEN Version 1.8.0-20120429 DOXYGEN Version 1.8.1
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (29 April 2012) Dimitri van Heesch (19 May 2012)
DOXYGEN Version 1.8.0_20120429 DOXYGEN Version 1.8.1
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -26,4 +26,4 @@ forum. ...@@ -26,4 +26,4 @@ forum.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (29 April 2012) Dimitri van Heesch (dimitri@stack.nl) (19 May 2012)
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=8 doxygen_version_minor=8
doxygen_version_revision=0 doxygen_version_revision=1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20120429 doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"` bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
...@@ -149,20 +149,55 @@ dl.el { ...@@ -149,20 +149,55 @@ dl.el {
margin-left: -1cm; margin-left: -1cm;
} }
.fragment {
font-family: monospace, fixed;
font-size: 105%;
}
pre.fragment { pre.fragment {
border: 1px solid #D5D5D5; border: 1px solid #C4CFE5;
background-color: #FCFCFC; background-color: #FBFCFD;
padding: 4px 6px; padding: 4px 6px;
margin: 4px 8px 4px 2px; margin: 4px 8px 4px 2px;
overflow: auto; overflow: auto;
word-wrap: break-word; word-wrap: break-word;
font-size: 9pt; font-size: 9pt;
line-height: 125%; line-height: 125%;
font-family: monospace, fixed;
font-size: 105%;
}
div.fragment {
padding: 4px;
margin: 4px;
background-color: #FCFCFC;
border: 1px solid #D5D5D5;
}
div.line {
font-family: monospace, fixed;
font-size: 13px;
line-height: 1.0;
text-wrap: unrestricted;
white-space: -moz-pre-wrap; /* Moz */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
text-indent: -53px;
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
}
span.lineno {
padding-right: 4px;
text-align: right;
border-right: 2px solid #0F0;
background-color: #E8E8E8;
white-space: pre;
}
span.lineno a {
background-color: #D8D8D8;
}
span.lineno a:hover {
background-color: #C8C8C8;
} }
div.ah { div.ah {
......
...@@ -72,7 +72,8 @@ Level 1 or 2 headers can be made as the follows ...@@ -72,7 +72,8 @@ Level 1 or 2 headers can be made as the follows
------------------------- -------------------------
A header is followed by a line containing only ='s or -'s. A header is followed by a line containing only ='s or -'s.
Note that the exact amount of ='s or -'s is not important. Note that the exact amount of ='s or -'s is not important as long as
there are at least two.
Alternatively, you can use #'s at the start of a line to make a header. Alternatively, you can use #'s at the start of a line to make a header.
The number of #'s at the start of the line determines the level (up to 6 levels are supported). The number of #'s at the start of the line determines the level (up to 6 levels are supported).
......
...@@ -75,8 +75,8 @@ the \ref cfg_predefined "PREDEFINED" or ...@@ -75,8 +75,8 @@ the \ref cfg_predefined "PREDEFINED" or
\ref cfg_expand_as_defined "EXPAND_AS_DEFINED" tag. \ref cfg_expand_as_defined "EXPAND_AS_DEFINED" tag.
A typically example where some help from the preprocessor is needed is A typically example where some help from the preprocessor is needed is
when dealing with Microsoft's __declspec language extension. Here is an when dealing with Microsoft's __declspec language extension. The same goes
example function. for GNU's __attribute__ extension. Here is an example function.
\verbatim \verbatim
extern "C" void __declspec(dllexport) ErrorMsg( String aMessage,...); extern "C" void __declspec(dllexport) ErrorMsg( String aMessage,...);
......
...@@ -9,7 +9,7 @@ PROJECT_NUMBER = ...@@ -9,7 +9,7 @@ PROJECT_NUMBER =
PROJECT_BRIEF = PROJECT_BRIEF =
PROJECT_LOGO = PROJECT_LOGO =
OUTPUT_DIRECTORY = ../qtools_docs OUTPUT_DIRECTORY = ../qtools_docs
CREATE_SUBDIRS = NO CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = English OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES REPEAT_BRIEF = YES
...@@ -117,7 +117,7 @@ FILTER_SOURCE_PATTERNS = ...@@ -117,7 +117,7 @@ FILTER_SOURCE_PATTERNS =
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to source browsing # configuration options related to source browsing
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
SOURCE_BROWSER = NO SOURCE_BROWSER = YES
INLINE_SOURCES = NO INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES REFERENCED_BY_RELATION = YES
...@@ -145,7 +145,6 @@ HTML_COLORSTYLE_HUE = 220 ...@@ -145,7 +145,6 @@ HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80 HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = YES HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = YES GENERATE_DOCSET = YES
DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_FEEDNAME = "Doxygen generated docs"
......
This diff is collapsed.
...@@ -331,7 +331,8 @@ class ClassDef : public Definition ...@@ -331,7 +331,8 @@ class ClassDef : public Definition
void writeDocumentationForInnerClasses(OutputList &ol); void writeDocumentationForInnerClasses(OutputList &ol);
void writeMemberPages(OutputList &ol); void writeMemberPages(OutputList &ol);
void writeMemberList(OutputList &ol); void writeMemberList(OutputList &ol);
void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,const char *inheritId); void writeDeclaration(OutputList &ol,MemberDef *md,bool inGroup,
ClassDef *inheritedFrom,const char *inheritId);
void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const; void writeQuickMemberLinks(OutputList &ol,MemberDef *md) const;
void writeSummaryLinks(OutputList &ol); void writeSummaryLinks(OutputList &ol);
void reclassifyMember(MemberDef *md,MemberDef::MemberType t); void reclassifyMember(MemberDef *md,MemberDef::MemberType t);
...@@ -340,7 +341,7 @@ class ClassDef : public Definition ...@@ -340,7 +341,7 @@ class ClassDef : public Definition
const char *header,bool localNames); const char *header,bool localNames);
void removeMemberFromLists(MemberDef *md); void removeMemberFromLists(MemberDef *md);
void addGroupedInheritedMembers(OutputList &ol,MemberList::ListType lt, void addGroupedInheritedMembers(OutputList &ol,MemberList::ListType lt,
const QCString &inheritId); ClassDef *inheritedFrom,const QCString &inheritId);
bool visited; bool visited;
...@@ -362,7 +363,7 @@ class ClassDef : public Definition ...@@ -362,7 +363,7 @@ class ClassDef : public Definition
const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,int lt2=-1,QPtrDict<void> *visitedClasses=0); const char *subTitle=0,bool showInline=FALSE,ClassDef *inheritedFrom=0,int lt2=-1,QPtrDict<void> *visitedClasses=0);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title,bool showInline=FALSE); void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title,bool showInline=FALSE);
void writeSimpleMemberDocumentation(OutputList &ol,MemberList::ListType lt); void writeSimpleMemberDocumentation(OutputList &ol,MemberList::ListType lt);
void writePlainMemberDeclaration(OutputList &ol,MemberList::ListType lt,bool inGroup,const char *inheritId); void writePlainMemberDeclaration(OutputList &ol,MemberList::ListType lt,bool inGroup,ClassDef *inheritedFrom,const char *inheritId);
void writeBriefDescription(OutputList &ol,bool exampleFlag); void writeBriefDescription(OutputList &ol,bool exampleFlag);
void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag, void writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
const QCString &title,const QCString &anchor=QCString()); const QCString &title,const QCString &anchor=QCString());
...@@ -381,11 +382,11 @@ class ClassDef : public Definition ...@@ -381,11 +382,11 @@ class ClassDef : public Definition
void writeMoreLink(OutputList &ol,const QCString &anchor); void writeMoreLink(OutputList &ol,const QCString &anchor);
void writeDetailedDocumentationBody(OutputList &ol); void writeDetailedDocumentationBody(OutputList &ol);
int countInheritedDecMembersRec(MemberList::ListType lt); int countInheritedDecMembersRec(MemberList::ListType lt,ClassDef *inheritedFrom);
int countInheritedDecMembers(MemberList::ListType lt); int countInheritedDecMembers(MemberList::ListType lt);
int countAdditionalInheritedMembers(); int countAdditionalInheritedMembers();
void writeAdditionalInheritedMembers(OutputList &ol); void writeAdditionalInheritedMembers(OutputList &ol);
int countMembersIncludingGrouped(MemberList::ListType lt); int countMembersIncludingGrouped(MemberList::ListType lt,ClassDef *inheritedFrom);
ClassDefImpl *m_impl; ClassDefImpl *m_impl;
......
...@@ -516,7 +516,7 @@ static void startCodeLine() ...@@ -516,7 +516,7 @@ static void startCodeLine()
g_code->writeLineNumber(0,0,0,g_yyLineNr); g_code->writeLineNumber(0,0,0,g_yyLineNr);
} }
} }
g_code->startCodeLine(); g_code->startCodeLine(g_sourceFileDef && g_lineNumbers);
if (g_currentFontClass) if (g_currentFontClass)
{ {
g_code->startFontClass(g_currentFontClass); g_code->startFontClass(g_currentFontClass);
......
...@@ -1101,6 +1101,15 @@ RCSTAG "$"{ID}":"[^\n$]+"$" ...@@ -1101,6 +1101,15 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
} }
addOutput(yytext); addOutput(yytext);
} }
<Comment>^{B}*([\-:|]{B}*)*("--"|"---")({B}*[\-:|])*{B}*/\n { // horizontal line (dashed)
addOutput(yytext);
}
<Comment>"---" { // mdash
addOutput("&mdash;");
}
<Comment>"--" { // ndash
addOutput("&ndash;");
}
<Comment>("."+)[a-z_A-Z0-9\)] { // . at start or in the middle of a word, or ellipsis <Comment>("."+)[a-z_A-Z0-9\)] { // . at start or in the middle of a word, or ellipsis
addOutput(yytext); addOutput(yytext);
} }
......
...@@ -895,6 +895,16 @@ page has loaded. For this to work a browser that supports ...@@ -895,6 +895,16 @@ page has loaded. For this to work a browser that supports
JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
' defval='0' depends='GENERATE_HTML'/> ' defval='0' depends='GENERATE_HTML'/>
<option type='int' id='HTML_INDEX_NUM_ENTRIES' docs='
With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
entries shown in the various tree structured indices initially; the user
can expand and collapse entries dynamically later on. Doxygen will expand
the tree to such a level that at most the specified number of entries are
visible (unless a fully collapsed tree already exceeds this amount).
So setting the number of entries 1 will produce a full collapsed tree by
default. 0 is a special value representing an infinite number of entries
and will result in a full expanded tree by default.
' minval='0' maxval='9999' defval='100'/>
<option type='bool' id='GENERATE_DOCSET' docs=' <option type='bool' id='GENERATE_DOCSET' docs='
If the GENERATE_DOCSET tag is set to YES, additional index files If the GENERATE_DOCSET tag is set to YES, additional index files
will be generated that can be used as input for Apple&apos;s Xcode 3 will be generated that can be used as input for Apple&apos;s Xcode 3
......
...@@ -1285,6 +1285,19 @@ void addConfigOptions(Config *cfg) ...@@ -1285,6 +1285,19 @@ void addConfigOptions(Config *cfg)
); );
cb->addDependency("GENERATE_HTML"); cb->addDependency("GENERATE_HTML");
//---- //----
ci = cfg->addInt(
"HTML_INDEX_NUM_ENTRIES",
"With HTML_INDEX_NUM_ENTRIES one can control the preferred number of\n"
"entries shown in the various tree structured indices initially; the user\n"
"can expand and collapse entries dynamically later on. Doxygen will expand\n"
"the tree to such a level that at most the specified number of entries are\n"
"visible (unless a fully collapsed tree already exceeds this amount).\n"
"So setting the number of entries 1 will produce a full collapsed tree by\n"
"default. 0 is a special value representing an infinite number of entries\n"
"and will result in a full expanded tree by default.",
0,9999,100
);
//----
cb = cfg->addBool( cb = cfg->addBool(
"GENERATE_DOCSET", "GENERATE_DOCSET",
"If the GENERATE_DOCSET tag is set to YES, additional index files\n" "If the GENERATE_DOCSET tag is set to YES, additional index files\n"
......
...@@ -115,6 +115,7 @@ static const char svgZoomFooter[] = ...@@ -115,6 +115,7 @@ static const char svgZoomFooter[] =
" <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n" " <path fill=\"none\" stroke=\"white\" stroke-width=\"1.5\" d=\"M0,-3.0v7 M-2.5,-0.5L0,-3.0L2.5,-0.5\"/>\n"
" </g>\n" " </g>\n"
" </g>\n" " </g>\n"
/*
" <svg viewBox=\"0 0 25 25\" width=\"100%\" height=\"30px\" preserveAspectRatio=\"xMaxYMin meet\"> \n" " <svg viewBox=\"0 0 25 25\" width=\"100%\" height=\"30px\" preserveAspectRatio=\"xMaxYMin meet\"> \n"
" <g id=\"printButton\" transform=\"scale(0.4 0.4)\" onmousedown=\"handlePrint(evt)\">\n" " <g id=\"printButton\" transform=\"scale(0.4 0.4)\" onmousedown=\"handlePrint(evt)\">\n"
" <rect height=\"23.33753581\" id=\"paper\" rx=\"2\" style=\"fill:#f2f5e9;fill-rule:evenodd;stroke:#111111;stroke-width:3.224;stroke-linejoin:round;\" transform=\"matrix(1.000000,0.000000,-0.339266,0.940691,0.000000,0.000000)\" width=\"25.55231285\" x=\"26.69387353\" y=\"7.36162977\"/>\n" " <rect height=\"23.33753581\" id=\"paper\" rx=\"2\" style=\"fill:#f2f5e9;fill-rule:evenodd;stroke:#111111;stroke-width:3.224;stroke-linejoin:round;\" transform=\"matrix(1.000000,0.000000,-0.339266,0.940691,0.000000,0.000000)\" width=\"25.55231285\" x=\"26.69387353\" y=\"7.36162977\"/>\n"
...@@ -122,6 +123,18 @@ static const char svgZoomFooter[] = ...@@ -122,6 +123,18 @@ static const char svgZoomFooter[] =
" <rect height=\"8.27750969\" id=\"tray\" style=\"fill:#d2d5c9;fill-rule:evenodd;stroke:#111111;stroke-width:3.125;stroke-linecap:round;stroke-linejoin:round;\" width=\"40\" x=\"10.28778839\" y=\"44.96812282\"/>\n" " <rect height=\"8.27750969\" id=\"tray\" style=\"fill:#d2d5c9;fill-rule:evenodd;stroke:#111111;stroke-width:3.125;stroke-linecap:round;stroke-linejoin:round;\" width=\"40\" x=\"10.28778839\" y=\"44.96812282\"/>\n"
" </g>\n" " </g>\n"
" </svg>\n" " </svg>\n"
*/
" <svg viewBox=\"0 0 15 15\" width=\"100%\" height=\"30px\" preserveAspectRatio=\"xMaxYMin meet\">\n"
" <g id=\"arrow_out\" transform=\"scale(0.3 0.3)\">\n"
" <a xlink:href=\"$orgname\" target=\"_base\">\n"
" <rect id=\"button\" ry=\"5\" rx=\"5\" y=\"6\" x=\"6\" height=\"38\" width=\"38\"\n"
" fill=\"#f2f5e9\" fill-opacity=\"0.5\" stroke=\"#606060\" stroke-width=\"1.0\"/>\n"
" <path id=\"arrow\"\n"
" d=\"M 11.500037,31.436501 C 11.940474,20.09759 22.043105,11.32322 32.158766,21.979434 L 37.068811,17.246167 C 37.068811,17.246167 37.088388,32 37.088388,32 L 22.160133,31.978069 C 22.160133,31.978069 26.997745,27.140456 26.997745,27.140456 C 18.528582,18.264221 13.291696,25.230495 11.500037,31.436501 z\"\n"
" style=\"fill:#404040;\"/>\n"
" </a>\n"
" </g>\n"
" </svg>\n"
"</svg>\n" "</svg>\n"
; ;
...@@ -585,9 +598,9 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath, ...@@ -585,9 +598,9 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
if (width==-1) if (width==-1)
{ {
if (height<=60) if (height<=60)
height=60; height=300;
else else
height+=40; // add some extra space for zooming height+=300; // add some extra space for zooming
if (height>600) height=600; // clip to maximum height of 600 pixels if (height>600) height=600; // clip to maximum height of 600 pixels
out << "<div class=\"zoom\">"; out << "<div class=\"zoom\">";
//out << "<object type=\"image/svg+xml\" data=\"" //out << "<object type=\"image/svg+xml\" data=\""
...@@ -1065,11 +1078,42 @@ bool DotFilePatcher::run() ...@@ -1065,11 +1078,42 @@ bool DotFilePatcher::run()
} }
lineNr++; lineNr++;
} }
fi.close();
if (isSVGFile && interactiveSVG && replacedHeader) if (isSVGFile && interactiveSVG && replacedHeader)
{ {
t << svgZoomFooter; QCString orgName=m_patchFile.left(m_patchFile.length()-4)+"_org.svg";
t << substitute(svgZoomFooter,"$orgname",orgName);
fo.close();
// keep original SVG file so we can refer to it, we do need to replace
// dummy link by real ones
QFile fi(tmpName);
QFile fo(orgName);
if (!fi.open(IO_ReadOnly))
{
err("error: problem opening file %s for reading!\n",tmpName.data());
return FALSE;
}
if (!fo.open(IO_WriteOnly))
{
err("error: problem opening file %s for writing!\n",orgName.data());
return FALSE;
}
FTextStream t(&fo);
while (!fi.atEnd()) // foreach line
{
QCString line(maxLineLen);
int numBytes = fi.readLine(line.data(),maxLineLen);
if (numBytes<=0)
{
break;
}
Map *map = m_maps.at(0); // there is only one 'map' for a SVG file
t << replaceRef(line,map->relPath,map->urlOnly,map->context,"_top");
}
fi.close();
fo.close();
} }
fi.close(); // remove temporary file
QDir::current().remove(tmpName); QDir::current().remove(tmpName);
return TRUE; return TRUE;
} }
...@@ -1484,8 +1528,8 @@ void DotNode::setDistance(int distance) ...@@ -1484,8 +1528,8 @@ void DotNode::setDistance(int distance)
static QCString convertLabel(const QCString &l) static QCString convertLabel(const QCString &l)
{ {
QCString result; QCString result;
QCString bBefore("\\_/<({[: =-+@%#~?$"); QCString bBefore("\\_/<({[: =-+@%#~?$"); // break before character set
QCString bAfter(">]),;|"); QCString bAfter(">]),;|"); // break after character set
const char *p=l.data(); const char *p=l.data();
if (p==0) return result; if (p==0) return result;
char c; char c;
...@@ -1520,7 +1564,7 @@ static QCString convertLabel(const QCString &l) ...@@ -1520,7 +1564,7 @@ static QCString convertLabel(const QCString &l)
} }
else if (charsLeft>foldLen/3 && sinceLast>foldLen && bBefore.contains(c)) else if (charsLeft>foldLen/3 && sinceLast>foldLen && bBefore.contains(c))
{ {
result+="\\n"; result+="\\l";
result+=replacement; result+=replacement;
foldLen = (foldLen+sinceLast+1)/2; foldLen = (foldLen+sinceLast+1)/2;
sinceLast=1; sinceLast=1;
...@@ -1529,14 +1573,14 @@ static QCString convertLabel(const QCString &l) ...@@ -1529,14 +1573,14 @@ static QCString convertLabel(const QCString &l)
!isupper(c) && isupper(*p)) !isupper(c) && isupper(*p))
{ {
result+=replacement; result+=replacement;
result+="\\n"; result+="\\l";
foldLen = (foldLen+sinceLast+1)/2; foldLen = (foldLen+sinceLast+1)/2;
sinceLast=0; sinceLast=0;
} }
else if (charsLeft>foldLen/3 && sinceLast>foldLen && bAfter.contains(c)) else if (charsLeft>foldLen/3 && sinceLast>foldLen && bAfter.contains(c))
{ {
result+=replacement; result+=replacement;
result+="\\n"; result+="\\l";
foldLen = (foldLen+sinceLast+1)/2; foldLen = (foldLen+sinceLast+1)/2;
sinceLast=0; sinceLast=0;
} }
...@@ -1595,7 +1639,7 @@ static void writeBoxMemberList(FTextStream &t, ...@@ -1595,7 +1639,7 @@ static void writeBoxMemberList(FTextStream &t,
static int limit = Config_getInt("UML_LIMIT_NUM_FIELDS"); static int limit = Config_getInt("UML_LIMIT_NUM_FIELDS");
if (limit>0 && (totalCount>limit*3/2 && count>=limit)) if (limit>0 && (totalCount>limit*3/2 && count>=limit))
{ {
t << theTranslator->trAndMore(QCString().sprintf("%d",totalCount-count)); t << theTranslator->trAndMore(QCString().sprintf("%d",totalCount-count)) << "\\l";
break; break;
} }
else else
...@@ -2781,10 +2825,11 @@ DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t) ...@@ -2781,10 +2825,11 @@ DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t)
bool DotClassGraph::isTrivial() const bool DotClassGraph::isTrivial() const
{ {
static bool umlLook = Config_getBool("UML_LOOK");
if (m_graphType==DotNode::Inheritance) if (m_graphType==DotNode::Inheritance)
return m_startNode->m_children==0 && m_startNode->m_parents==0; return m_startNode->m_children==0 && m_startNode->m_parents==0;
else else
return m_startNode->m_children==0; return !umlLook && m_startNode->m_children==0;
} }
bool DotClassGraph::isTooBig() const bool DotClassGraph::isTooBig() const
......
...@@ -253,11 +253,17 @@ static STLInfo g_stlinfo[] = ...@@ -253,11 +253,17 @@ static STLInfo g_stlinfo[] =
{ {
// className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators // className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators
{ "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "allocator", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "array", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, // C++11
{ "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // deprecated { "auto_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // deprecated
{ "smart_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11 { "smart_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
{ "unique_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11 { "unique_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
{ "weak_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11 { "weak_ptr", 0, 0, "T", "ptr", 0, 0, FALSE, FALSE }, // C++11
{ "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11 { "ios_base", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "error_code", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "error_category", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "system_error", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "error_condition", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "thread", 0, 0, 0, 0, 0, 0, FALSE, FALSE }, // C++11
{ "basic_ios", "ios_base", 0, "Char", 0, 0, 0, FALSE, FALSE }, { "basic_ios", "ios_base", 0, "Char", 0, 0, 0, FALSE, FALSE },
{ "basic_istream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE }, { "basic_istream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE },
{ "basic_ostream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE }, { "basic_ostream", "basic_ios<Char>", 0, "Char", 0, 0, 0, TRUE, FALSE },
...@@ -293,10 +299,15 @@ static STLInfo g_stlinfo[] = ...@@ -293,10 +299,15 @@ static STLInfo g_stlinfo[] =
{ "bitset", 0, 0, "Bits", 0, 0, 0, FALSE, FALSE }, { "bitset", 0, 0, "Bits", 0, 0, 0, FALSE, FALSE },
{ "deque", 0, 0, "T", "elements", 0, 0, FALSE, TRUE }, { "deque", 0, 0, "T", "elements", 0, 0, FALSE, TRUE },
{ "list", 0, 0, "T", "elements", 0, 0, FALSE, TRUE }, { "list", 0, 0, "T", "elements", 0, 0, FALSE, TRUE },
{ "forward_list", 0, 0, "T", "elements", 0, 0, FALSE, TRUE }, // C++11
{ "map", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE }, { "map", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE },
{ "unordered_map", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE }, // C++11
{ "multimap", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE }, { "multimap", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE },
{ "unordered_multimap", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE }, // C++11
{ "set", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, { "set", 0, 0, "K", "keys", 0, 0, FALSE, TRUE },
{ "unordered_set", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, // C++11
{ "multiset", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, { "multiset", 0, 0, "K", "keys", 0, 0, FALSE, TRUE },
{ "unordered_multiset", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, // C++11
{ "vector", 0, 0, "T", "elements", 0, 0, FALSE, TRUE }, { "vector", 0, 0, "T", "elements", 0, 0, FALSE, TRUE },
{ "queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
{ "priority_queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE }, { "priority_queue", 0, 0, "T", "elements", 0, 0, FALSE, FALSE },
...@@ -507,6 +518,7 @@ static void addRelatedPage(EntryNav *rootNav) ...@@ -507,6 +518,7 @@ static void addRelatedPage(EntryNav *rootNav)
); );
if (pd) if (pd)
{ {
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->addSectionsToDefinition(root->anchors); pd->addSectionsToDefinition(root->anchors);
pd->setShowToc(root->stat); pd->setShowToc(root->stat);
addPageToContext(pd,rootNav); addPageToContext(pd,rootNav);
...@@ -8231,6 +8243,7 @@ static void findMainPage(EntryNav *rootNav) ...@@ -8231,6 +8243,7 @@ static void findMainPage(EntryNav *rootNav)
Doxygen::mainPage = new PageDef(root->docFile,root->docLine, Doxygen::mainPage = new PageDef(root->docFile,root->docLine,
indexName, root->brief+root->doc+root->inbodyDocs,title); indexName, root->brief+root->doc+root->inbodyDocs,title);
//setFileNameForSections(root->anchors,"index",Doxygen::mainPage); //setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
Doxygen::mainPage->setBriefDescription(root->brief,root->briefFile,root->briefLine);
Doxygen::mainPage->setFileName(indexName); Doxygen::mainPage->setFileName(indexName);
Doxygen::mainPage->setShowToc(root->stat); Doxygen::mainPage->setShowToc(root->stat);
addPageToContext(Doxygen::mainPage,rootNav); addPageToContext(Doxygen::mainPage,rootNav);
...@@ -8428,6 +8441,7 @@ static void buildExampleList(EntryNav *rootNav) ...@@ -8428,6 +8441,7 @@ static void buildExampleList(EntryNav *rootNav)
{ {
PageDef *pd=new PageDef(root->fileName,root->startLine, PageDef *pd=new PageDef(root->fileName,root->startLine,
root->name,root->brief+root->doc+root->inbodyDocs,root->args); root->name,root->brief+root->doc+root->inbodyDocs,root->args);
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE)); pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
pd->addSectionsToDefinition(root->anchors); pd->addSectionsToDefinition(root->anchors);
pd->setLanguage(root->lang); pd->setLanguage(root->lang);
......
...@@ -149,20 +149,55 @@ dl.el { ...@@ -149,20 +149,55 @@ dl.el {
margin-left: -1cm; margin-left: -1cm;
} }
.fragment { pre.fragment {
border: 1px solid #C4CFE5;
background-color: #FBFCFD;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
font-family: monospace, fixed;
font-size: 105%;
}
div.fragment {
padding: 4px;
margin: 4px;
background-color: ##FC;
border: 1px solid ##CC;
}
div.line {
font-family: monospace, fixed; font-family: monospace, fixed;
font-size: 105%; font-size: 13px;
line-height: 1.0;
text-wrap: unrestricted;
white-space: -moz-pre-wrap; /* Moz */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
text-indent: -53px;
padding-left: 53px;
padding-bottom: 0px;
margin: 0px;
} }
pre.fragment { span.lineno {
border: 1px solid ##CC; padding-right: 4px;
background-color: ##FC; text-align: right;
padding: 4px 6px; border-right: 2px solid #0F0;
margin: 4px 8px 4px 2px; background-color: #E8E8E8;
overflow: auto; white-space: pre;
word-wrap: break-word; }
font-size: 9pt; span.lineno a {
line-height: 125%; background-color: #D8D8D8;
}
span.lineno a:hover {
background-color: #C8C8C8;
} }
div.ah { div.ah {
...@@ -581,8 +616,8 @@ span.mlabels { ...@@ -581,8 +616,8 @@ span.mlabels {
span.mlabel { span.mlabel {
background-color: ##88; background-color: ##88;
border-top:1px solid ##55; border-top:1px solid ##70;
border-left:1px solid ##55; border-left:1px solid ##70;
border-right:1px solid ##CC; border-right:1px solid ##CC;
border-bottom:1px solid ##CC; border-bottom:1px solid ##CC;
text-shadow: none; text-shadow: none;
...@@ -622,6 +657,10 @@ div.directory { ...@@ -622,6 +657,10 @@ div.directory {
padding-right: 6px; padding-right: 6px;
} }
.directory td.entry a {
outline:none;
}
.directory td.desc { .directory td.desc {
width: 100%; width: 100%;
padding-left: 6px; padding-left: 6px;
...@@ -1089,15 +1128,5 @@ tr.heading h2 { ...@@ -1089,15 +1128,5 @@ tr.heading h2 {
overflow:inherit; overflow:inherit;
display:inline; display:inline;
} }
pre.fragment
{
overflow: visible;
text-wrap: unrestricted;
white-space: -moz-pre-wrap; /* Moz */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 */
word-wrap: break-word; /* IE 5.5+ */
}
} }
...@@ -149,20 +149,55 @@ ...@@ -149,20 +149,55 @@
" margin-left: -1cm;\n" " margin-left: -1cm;\n"
"}\n" "}\n"
"\n" "\n"
".fragment {\n" "pre.fragment {\n"
" border: 1px solid #C4CFE5;\n"
" background-color: #FBFCFD;\n"
" padding: 4px 6px;\n"
" margin: 4px 8px 4px 2px;\n"
" overflow: auto;\n"
" word-wrap: break-word;\n"
" font-size: 9pt;\n"
" line-height: 125%;\n"
" font-family: monospace, fixed;\n"
" font-size: 105%;\n"
"}\n"
"\n"
"div.fragment {\n"
" padding: 4px;\n"
" margin: 4px;\n"
" background-color: ##FC;\n"
" border: 1px solid ##CC;\n"
"}\n"
"\n"
"div.line {\n"
" font-family: monospace, fixed;\n" " font-family: monospace, fixed;\n"
" font-size: 105%;\n" " font-size: 13px;\n"
" line-height: 1.0;\n"
" text-wrap: unrestricted;\n"
" white-space: -moz-pre-wrap; /* Moz */\n"
" white-space: -pre-wrap; /* Opera 4-6 */\n"
" white-space: -o-pre-wrap; /* Opera 7 */\n"
" white-space: pre-wrap; /* CSS3 */\n"
" word-wrap: break-word; /* IE 5.5+ */\n"
" text-indent: -53px;\n"
" padding-left: 53px;\n"
" padding-bottom: 0px;\n"
" margin: 0px;\n"
"}\n" "}\n"
"\n" "\n"
"pre.fragment {\n" "span.lineno {\n"
" border: 1px solid ##CC;\n" " padding-right: 4px;\n"
" background-color: ##FC;\n" " text-align: right;\n"
" padding: 4px 6px;\n" " border-right: 2px solid #0F0;\n"
" margin: 4px 8px 4px 2px;\n" " background-color: #E8E8E8;\n"
" overflow: auto;\n" " white-space: pre;\n"
" word-wrap: break-word;\n" "}\n"
" font-size: 9pt;\n" "span.lineno a {\n"
" line-height: 125%;\n" " background-color: #D8D8D8;\n"
"}\n"
"\n"
"span.lineno a:hover {\n"
" background-color: #C8C8C8;\n"
"}\n" "}\n"
"\n" "\n"
"div.ah {\n" "div.ah {\n"
...@@ -581,8 +616,8 @@ ...@@ -581,8 +616,8 @@
"\n" "\n"
"span.mlabel {\n" "span.mlabel {\n"
" background-color: ##88;\n" " background-color: ##88;\n"
" border-top:1px solid ##55;\n" " border-top:1px solid ##70;\n"
" border-left:1px solid ##55;\n" " border-left:1px solid ##70;\n"
" border-right:1px solid ##CC;\n" " border-right:1px solid ##CC;\n"
" border-bottom:1px solid ##CC;\n" " border-bottom:1px solid ##CC;\n"
" text-shadow: none;\n" " text-shadow: none;\n"
...@@ -622,6 +657,10 @@ ...@@ -622,6 +657,10 @@
" padding-right: 6px;\n" " padding-right: 6px;\n"
"}\n" "}\n"
"\n" "\n"
".directory td.entry a {\n"
" outline:none;\n"
"}\n"
"\n"
".directory td.desc {\n" ".directory td.desc {\n"
" width: 100%;\n" " width: 100%;\n"
" padding-left: 6px;\n" " padding-left: 6px;\n"
...@@ -1089,15 +1128,5 @@ ...@@ -1089,15 +1128,5 @@
" overflow:inherit;\n" " overflow:inherit;\n"
" display:inline;\n" " display:inline;\n"
" }\n" " }\n"
" pre.fragment\n"
" {\n"
" overflow: visible;\n"
" text-wrap: unrestricted;\n"
" white-space: -moz-pre-wrap; /* Moz */\n"
" white-space: -pre-wrap; /* Opera 4-6 */\n"
" white-space: -o-pre-wrap; /* Opera 7 */\n"
" white-space: pre-wrap; /* CSS3 */\n"
" word-wrap: break-word; /* IE 5.5+ */\n"
" }\n"
"}\n" "}\n"
"\n" "\n"
...@@ -68,10 +68,10 @@ function toggleInherit(id) ...@@ -68,10 +68,10 @@ function toggleInherit(id)
var img = $('tr.inherit_header.'+id+' img'); var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src'); var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) { if (rows.filter(':first').is(':visible')===true) {
rows.hide(); rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png'); $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} else { } else {
rows.show(); rows.css('display','table-row'); // using show() causes jump in firefox
$(img).attr('src',src.substring(0,src.length-10)+'open.png'); $(img).attr('src',src.substring(0,src.length-10)+'open.png');
} }
} }
......
...@@ -68,10 +68,10 @@ ...@@ -68,10 +68,10 @@
" var img = $('tr.inherit_header.'+id+' img');\n" " var img = $('tr.inherit_header.'+id+' img');\n"
" var src = $(img).attr('src');\n" " var src = $(img).attr('src');\n"
" if (rows.filter(':first').is(':visible')===true) {\n" " if (rows.filter(':first').is(':visible')===true) {\n"
" rows.hide();\n" " rows.css('display','none');\n"
" $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n" " $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n"
" } else {\n" " } else {\n"
" rows.show();\n" " rows.css('display','table-row'); // using show() causes jump in firefox\n"
" $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n" " $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n"
" }\n" " }\n"
"}\n" "}\n"
......
...@@ -49,7 +49,7 @@ class DevNullCodeDocInterface : public CodeOutputInterface ...@@ -49,7 +49,7 @@ class DevNullCodeDocInterface : public CodeOutputInterface
const char *) {} const char *) {}
virtual void writeLineNumber(const char *,const char *, virtual void writeLineNumber(const char *,const char *,
const char *,int) {} const char *,int) {}
virtual void startCodeLine() {} virtual void startCodeLine(bool) {}
virtual void endCodeLine() {} virtual void endCodeLine() {}
virtual void startCodeAnchor(const char *) {} virtual void startCodeAnchor(const char *) {}
virtual void endCodeAnchor() {} virtual void endCodeAnchor() {}
...@@ -341,7 +341,11 @@ void FileDef::writeIncludeGraph(OutputList &ol) ...@@ -341,7 +341,11 @@ void FileDef::writeIncludeGraph(OutputList &ol)
{ {
//printf("Graph for file %s\n",name().data()); //printf("Graph for file %s\n",name().data());
DotInclDepGraph incDepGraph(this,FALSE); DotInclDepGraph incDepGraph(this,FALSE);
if (!incDepGraph.isTrivial() && !incDepGraph.isTooBig()) if (incDepGraph.isTooBig())
{
err("warning: Include graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
}
else if (!incDepGraph.isTrivial())
{ {
ol.startTextBlock(); ol.startTextBlock();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
...@@ -361,7 +365,11 @@ void FileDef::writeIncludedByGraph(OutputList &ol) ...@@ -361,7 +365,11 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
{ {
//printf("Graph for file %s\n",name().data()); //printf("Graph for file %s\n",name().data());
DotInclDepGraph incDepGraph(this,TRUE); DotInclDepGraph incDepGraph(this,TRUE);
if (!incDepGraph.isTrivial() && !incDepGraph.isTooBig()) if (incDepGraph.isTooBig())
{
err("warning: Included by graph for '%s' not generated, too many nodes. Consider increasing DOT_GRAPH_MAX_NODES.\n",name().data());
}
if (!incDepGraph.isTrivial())
{ {
ol.startTextBlock(); ol.startTextBlock();
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
......
...@@ -211,7 +211,7 @@ void FormulaList::generateBitmaps(const char *path) ...@@ -211,7 +211,7 @@ void FormulaList::generateBitmaps(const char *path)
err("error: ghostscript produced an illegal image format!"); err("error: ghostscript produced an illegal image format!");
else else
{ {
// assume the size if after the first line that does not start with // assume the size is after the first line that does not start with
// # excluding the first line of the file. // # excluding the first line of the file.
while (!t.eof() && (s=t.readLine().utf8()) && !s.isEmpty() && s.at(0)=='#') { } while (!t.eof() && (s=t.readLine().utf8()) && !s.isEmpty() && s.at(0)=='#') { }
sscanf(s,"%d %d",&imageX,&imageY); sscanf(s,"%d %d",&imageX,&imageY);
......
...@@ -246,7 +246,7 @@ static void startCodeLine() ...@@ -246,7 +246,7 @@ static void startCodeLine()
g_code->writeLineNumber(0,0,0,g_yyLineNr); g_code->writeLineNumber(0,0,0,g_yyLineNr);
} }
} }
g_code->startCodeLine(); g_code->startCodeLine(g_sourceFileDef);
if (g_currentFontClass) if (g_currentFontClass)
{ {
g_code->startFontClass(g_currentFontClass); g_code->startFontClass(g_currentFontClass);
...@@ -388,11 +388,13 @@ static bool getFortranTypeDefs(const QCString &tname, const QCString &moduleName ...@@ -388,11 +388,13 @@ static bool getFortranTypeDefs(const QCString &tname, const QCString &moduleName
{ {
UseEntry *use; UseEntry *use;
for (UseSDict::Iterator di(*usedict); (use=di.current()); ++di) for (UseSDict::Iterator di(*usedict); (use=di.current()); ++di)
if ((cd= Doxygen::classSDict->find(use->module+"::"+tname))) {
if ((cd= Doxygen::classSDict->find(use->module+"::"+tname)))
{ {
//cout << "=== type found in used module" << endl; //cout << "=== type found in used module" << endl;
return TRUE; return TRUE;
} }
}
} }
return FALSE; return FALSE;
...@@ -420,6 +422,10 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam ...@@ -420,6 +422,10 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
// search for function // search for function
MemberName *mn = Doxygen::functionNameSDict->find(memberName); MemberName *mn = Doxygen::functionNameSDict->find(memberName);
if (!mn)
{
mn = Doxygen::memberNameSDict->find(memberName);
}
if (mn) // name is known if (mn) // name is known
{ {
...@@ -463,7 +469,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam ...@@ -463,7 +469,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
{ {
//cout << " search in only: " << moduleName << ":: " << memberName << "==" << (*it)<< endl; //cout << " search in only: " << moduleName << ":: " << memberName << "==" << (*it)<< endl;
if (memberName == (*it).utf8()) if (memberName == (*it).utf8())
{
return TRUE; // found in ONLY-part of use list return TRUE; // found in ONLY-part of use list
}
} }
} }
} }
...@@ -527,7 +535,7 @@ static void generateLink(CodeOutputInterface &ol, char *lname) ...@@ -527,7 +535,7 @@ static void generateLink(CodeOutputInterface &ol, char *lname)
{ {
ClassDef *cd=0; ClassDef *cd=0;
QCString tmp = lname; QCString tmp = lname;
tmp = tmp.lower(); tmp = removeRedundantWhiteSpace(tmp.lower());
// check if lowercase lname is a linkable type or interface // check if lowercase lname is a linkable type or interface
if ( (getFortranTypeDefs(tmp, currentModule, cd, useMembers)) && cd->isLinkable() ) if ( (getFortranTypeDefs(tmp, currentModule, cd, useMembers)) && cd->isLinkable() )
...@@ -656,7 +664,7 @@ NUM_TYPE (complex|integer|logical|real) ...@@ -656,7 +664,7 @@ NUM_TYPE (complex|integer|logical|real)
LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.) LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.)
KIND {ARGS} KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS})) CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLEX|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS}) TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}COMPLEX|DOUBLE{BS_}PRECISION|{CHAR})
INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")" INTENT_SPEC intent{BS}"("{BS}(in|out|in{BS}out){BS}")"
ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|ELEMENTAL) ATTR_SPEC (ALLOCATABLE|DIMENSION{ARGS}|EXTERNAL|{INTENT_SPEC}|INTRINSIC|OPTIONAL|PARAMETER|POINTER|PRIVATE|PUBLIC|SAVE|TARGET|RECURSIVE|PURE|ELEMENTAL)
...@@ -665,6 +673,7 @@ ACCESS_SPEC (PRIVATE|PUBLIC) ...@@ -665,6 +673,7 @@ ACCESS_SPEC (PRIVATE|PUBLIC)
ATTR_STMT {ATTR_SPEC}|DIMENSION ATTR_STMT {ATTR_SPEC}|DIMENSION
COMMANDS (DO|SELECT|CASE|WHERE|IF|THEN|ELSE|MODULE{BS_}PROCEDURE|CONTAINS|IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|DEALLOCATE|SIZE|END{BS}IF|END{BS}DO|WHILE|INQUIRE|OPEN|CLOSE|DATA) COMMANDS (DO|SELECT|CASE|WHERE|IF|THEN|ELSE|MODULE{BS_}PROCEDURE|CONTAINS|IMPLICIT{BS}NONE|CONTAINS|WRITE|READ|ALLOCATE|ALLOCATED|ASSOCIATED|DEALLOCATE|SIZE|END{BS}IF|END{BS}DO|WHILE|INQUIRE|OPEN|CLOSE|DATA)
IGNORE (CALL) IGNORE (CALL)
PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)?
/* | */ /* | */
...@@ -687,6 +696,7 @@ IGNORE (CALL) ...@@ -687,6 +696,7 @@ IGNORE (CALL)
%x DeclContLine %x DeclContLine
%x Parameterlist %x Parameterlist
%x String %x String
%x Subprogend
%% %%
/*==================================================================*/ /*==================================================================*/
...@@ -712,20 +722,27 @@ IGNORE (CALL) ...@@ -712,20 +722,27 @@ IGNORE (CALL)
/*-------- use statement -------------------------------------------*/ /*-------- use statement -------------------------------------------*/
<Start>"use"{BS_} { <Start>"use"{BS_} {
startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
endFontClass();
yy_push_state(YY_START); yy_push_state(YY_START);
BEGIN(Use); BEGIN(Use);
} }
<Use>{ID} { <Use>{ID} {
startFontClass("keywordflow"); QCString tmp = yytext;
codifyLines(yytext); tmp = tmp.lower();
endFontClass(); g_insideBody=TRUE;
generateLink(*g_code, yytext);
g_insideBody=FALSE;
/* append module name to use dict */ /* append module name to use dict */
useEntry = new UseEntry(); useEntry = new UseEntry();
useEntry->module = yytext; //useEntry->module = yytext;
useMembers->append(yytext, useEntry); //useMembers->append(yytext, useEntry);
addUse(yytext); //addUse(yytext);
useEntry->module = tmp;
useMembers->append(tmp, useEntry);
addUse(tmp);
} }
<Use>,{BS}"ONLY" { // TODO: rename <Use>,{BS}"ONLY" { // TODO: rename
codifyLines(yytext); codifyLines(yytext);
...@@ -753,7 +770,11 @@ IGNORE (CALL) ...@@ -753,7 +770,11 @@ IGNORE (CALL)
if (!stricmp(yytext,"module")) currentModule="module"; if (!stricmp(yytext,"module")) currentModule="module";
} }
<ClassName>{ID} { <ClassName>{ID} {
if (currentModule == "module") currentModule=yytext; if (currentModule == "module")
{
currentModule=yytext;
currentModule = currentModule.lower();
}
generateLink(*g_code,yytext); generateLink(*g_code,yytext);
yy_pop_state(); yy_pop_state();
} }
...@@ -765,20 +786,13 @@ IGNORE (CALL) ...@@ -765,20 +786,13 @@ IGNORE (CALL)
currentModule=0; currentModule=0;
REJECT; REJECT;
} }
<Start>^{BS}"end"({BS}("program"|"module"|"type"|"interface")({BS_}{ID})?)?{BS}/(\n|!) { //
endScope();
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
/*-------- subprog definition -------------------------------------*/ /*-------- subprog definition -------------------------------------*/
<Start>{TYPE_SPEC}{BS}/{SUBPROG}{BS_} { // TYPE_SPEC is for old function style function result <Start>({PREFIX}{BS_})?{TYPE_SPEC}{BS_}({PREFIX}{BS_})?{BS}/{SUBPROG}{BS_} { // TYPE_SPEC is for old function style function result
startFontClass("keyword"); startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
} }
<Start>{SUBPROG}{BS_} { // Fortran subroutine or function found <Start>({PREFIX}{BS_})?{SUBPROG}{BS_} { // Fortran subroutine or function found
startFontClass("keyword"); startFontClass("keyword");
codifyLines(yytext); codifyLines(yytext);
endFontClass(); endFontClass();
...@@ -793,10 +807,23 @@ IGNORE (CALL) ...@@ -793,10 +807,23 @@ IGNORE (CALL)
<Subprog>"(".* { // ignore rest of line <Subprog>"(".* { // ignore rest of line
codifyLines(yytext); codifyLines(yytext);
} }
<Subprog>"\n" { codifyLines(yytext); <Subprog,Subprogend>"\n" { codifyLines(yytext);
yy_pop_state();
}
<Start>^{BS}"end"{BS}({SUBPROG}|"module"|"program"|"type"|"interface"){BS} { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl;
endScope();
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
yy_push_state(YY_START);
BEGIN(Subprogend);
}
<Subprogend>{ID}/{BS}(\n|!) {
generateLink(*g_code,yytext);
yy_pop_state(); yy_pop_state();
} }
<Start>^{BS}"end"({BS}{SUBPROG}({BS_}{ID})?)?{BS}/(\n|!) { // Fortran subroutine or function ends <Start>^{BS}"end"{BS}({SUBPROG}|"module"|"program"|"type"|"interface"){BS}/(\n|!) { // Fortran subroutine or function ends
//cout << "===> end function " << yytext << endl; //cout << "===> end function " << yytext << endl;
endScope(); endScope();
startFontClass("keyword"); startFontClass("keyword");
...@@ -804,7 +831,7 @@ IGNORE (CALL) ...@@ -804,7 +831,7 @@ IGNORE (CALL)
endFontClass(); endFontClass();
} }
/*-------- variable declaration ----------------------------------*/ /*-------- variable declaration ----------------------------------*/
<Start>"TYPE"{BS}"(" { <Start>"type"{BS}"(" {
yy_push_state(YY_START); yy_push_state(YY_START);
BEGIN(TypeDecl); BEGIN(TypeDecl);
startFontClass("keywordtype"); startFontClass("keywordtype");
...@@ -861,6 +888,7 @@ IGNORE (CALL) ...@@ -861,6 +888,7 @@ IGNORE (CALL)
} }
<Declaration>"&" { // continuation line <Declaration>"&" { // continuation line
g_code->codify(yytext);
yy_push_state(YY_START); yy_push_state(YY_START);
BEGIN(DeclContLine); BEGIN(DeclContLine);
} }
......
...@@ -196,7 +196,7 @@ static int yyread(char *buf,int max_size); ...@@ -196,7 +196,7 @@ static int yyread(char *buf,int max_size);
static void startCommentBlock(bool); static void startCommentBlock(bool);
static void handleCommentBlock(const QCString &doc,bool brief); static void handleCommentBlock(const QCString &doc,bool brief);
static void subrHandleCommentBlock(const QCString &doc,bool brief); static void subrHandleCommentBlock(const QCString &doc,bool brief);
static void addCurrentEntry(); static void addCurrentEntry(int case_insens);
static void addModule(const char *name, bool isModule=FALSE); static void addModule(const char *name, bool isModule=FALSE);
static void addSubprogram(const char *text); static void addSubprogram(const char *text);
static void addInterface(QCString name, InterfaceType type); static void addInterface(QCString name, InterfaceType type);
...@@ -463,9 +463,8 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA ...@@ -463,9 +463,8 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
// extract generic name // extract generic name
QCString name = QCString(yytext).stripWhiteSpace(); QCString name = QCString(yytext).stripWhiteSpace();
name = name.right(name.length() - 9).stripWhiteSpace(); name = name.right(name.length() - 9).stripWhiteSpace().lower();
addInterface(name, ifType); addInterface(name, ifType);
startScope(last_entry); startScope(last_entry);
} }
} }
...@@ -490,7 +489,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA ...@@ -490,7 +489,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
current->section = Entry::FUNCTION_SEC ; current->section = Entry::FUNCTION_SEC ;
current->name = yytext; current->name = yytext;
moduleProcedures.append(current); moduleProcedures.append(current);
addCurrentEntry(); addCurrentEntry(1);
} }
<ModuleProcedure>"\n" { yyColNr -= 1; <ModuleProcedure>"\n" { yyColNr -= 1;
unput(*yytext); unput(*yytext);
...@@ -608,7 +607,7 @@ private { ...@@ -608,7 +607,7 @@ private {
current->name = current_root->name + "::" + current->name; current->name = current_root->name + "::" + current->name;
} }
addCurrentEntry(); addCurrentEntry(1);
startScope(last_entry); startScope(last_entry);
BEGIN(TypedefBody); BEGIN(TypedefBody);
} }
...@@ -639,7 +638,7 @@ private { ...@@ -639,7 +638,7 @@ private {
current->name = name; current->name = name;
current->fileName = yyFileName; current->fileName = yyFileName;
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
addCurrentEntry(); addCurrentEntry(1);
} }
{BS}"=>"[^(\n|\!)]* { /* Specific bindings come after the ID. */ {BS}"=>"[^(\n|\!)]* { /* Specific bindings come after the ID. */
last_entry->args = yytext; last_entry->args = yytext;
...@@ -689,7 +688,7 @@ private { ...@@ -689,7 +688,7 @@ private {
addModule(NULL); addModule(NULL);
yy_push_state(ModuleBody); //anon program yy_push_state(ModuleBody); //anon program
} }
argType = QCString(yytext).simplifyWhiteSpace(); argType = QCString(yytext).simplifyWhiteSpace().lower();
yy_push_state(AttributeList); yy_push_state(AttributeList);
} }
/* Dimitri: macro expansion should already be done during preprocessing not here! /* Dimitri: macro expansion should already be done during preprocessing not here!
...@@ -781,7 +780,7 @@ private { ...@@ -781,7 +780,7 @@ private {
current->type = argType; current->type = argType;
current->fileName = yyFileName; current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference current->bodyLine = yyLineNr; // used for source reference
addCurrentEntry(); addCurrentEntry(1);
} }
else if (!argType.isEmpty()) else if (!argType.isEmpty())
{ // declaration of parameter list: add type for corr. parameter { // declaration of parameter list: add type for corr. parameter
...@@ -925,7 +924,7 @@ private { ...@@ -925,7 +924,7 @@ private {
/*------ fortran subroutine/function handling ------------------------------------------------------------*/ /*------ fortran subroutine/function handling ------------------------------------------------------------*/
/* Start is initial condition */ /* Start is initial condition */
<Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}/{SUBPROG}{BS_} { <Start,ModuleBody,SubprogBody,InterfaceBody,ModuleBodyContains,SubprogBodyContains>^{BS}({PREFIX}{BS_})?{TYPE_SPEC}{BS}({PREFIX}{BS_})?/{SUBPROG}{BS_} {
if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC) if (ifType == IF_ABSTRACT || ifType == IF_SPECIFIC)
{ {
addInterface("$interface$", ifType); addInterface("$interface$", ifType);
...@@ -977,7 +976,7 @@ private { ...@@ -977,7 +976,7 @@ private {
<Parameterlist>")" { <Parameterlist>")" {
current->args += ")"; current->args += ")";
current->args = removeRedundantWhiteSpace(current->args); current->args = removeRedundantWhiteSpace(current->args);
addCurrentEntry(); addCurrentEntry(1);
startScope(last_entry); startScope(last_entry);
BEGIN(SubprogBody); BEGIN(SubprogBody);
} }
...@@ -1003,7 +1002,7 @@ private { ...@@ -1003,7 +1002,7 @@ private {
newLine(); newLine();
//printf("3=========> without parameterlist \n"); //printf("3=========> without parameterlist \n");
//current->argList = ; //current->argList = ;
addCurrentEntry(); addCurrentEntry(1);
startScope(last_entry); startScope(last_entry);
BEGIN(SubprogBody); BEGIN(SubprogBody);
} }
...@@ -1891,10 +1890,10 @@ static void initEntry() ...@@ -1891,10 +1890,10 @@ static void initEntry()
/** /**
adds current entry to current_root and creates new current adds current entry to current_root and creates new current
*/ */
static void addCurrentEntry() static void addCurrentEntry(int case_insens)
{ {
if (case_insens) current->name = current->name.lower();
//printf("===Adding entry %s to %s\n", current->name.data(), current_root->name.data()); //printf("===Adding entry %s to %s\n", current->name.data(), current_root->name.data());
current->name = current->name.lower();
current_root->addSubEntry(current); current_root->addSubEntry(current);
last_entry = current; last_entry = current;
current = new Entry ; current = new Entry ;
...@@ -1928,7 +1927,7 @@ static void addModule(const char *name, bool isModule) ...@@ -1928,7 +1927,7 @@ static void addModule(const char *name, bool isModule)
current->fileName = yyFileName; current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference current->bodyLine = yyLineNr; // used for source reference
current->protection = Public ; current->protection = Public ;
addCurrentEntry(); addCurrentEntry(1);
startScope(last_entry); startScope(last_entry);
} }
...@@ -1992,7 +1991,7 @@ static void addInterface(QCString name, InterfaceType type) ...@@ -1992,7 +1991,7 @@ static void addInterface(QCString name, InterfaceType type)
current->fileName = yyFileName; current->fileName = yyFileName;
current->bodyLine = yyLineNr; current->bodyLine = yyLineNr;
addCurrentEntry(); addCurrentEntry(1);
} }
...@@ -2060,11 +2059,11 @@ static void handleCommentBlock(const QCString &doc,bool brief) ...@@ -2060,11 +2059,11 @@ static void handleCommentBlock(const QCString &doc,bool brief)
)) ))
{ {
//fprintf(stderr,"parseCommentBlock position=%d [%s] needsEntry=%d\n",position,doc.data()+position,needsEntry); //fprintf(stderr,"parseCommentBlock position=%d [%s] needsEntry=%d\n",position,doc.data()+position,needsEntry);
if (needsEntry) addCurrentEntry(); if (needsEntry) addCurrentEntry(0);
} }
//fprintf(stderr,"parseCommentBlock position=%d [%s] needsEntry=%d\n",position,doc.data()+position,needsEntry); //fprintf(stderr,"parseCommentBlock position=%d [%s] needsEntry=%d\n",position,doc.data()+position,needsEntry);
if (needsEntry) addCurrentEntry(); if (needsEntry) addCurrentEntry(0);
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
......
This diff is collapsed.
...@@ -62,11 +62,11 @@ class FTVHelp : public IndexIntf ...@@ -62,11 +62,11 @@ class FTVHelp : public IndexIntf
static void generateTreeViewImages(); static void generateTreeViewImages();
void generateTreeViewScripts(); void generateTreeViewScripts();
private: private:
void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level,int &index); void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level,int maxLevel,int &index);
//bool generateJSTree(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first); //bool generateJSTree(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
//bool generateJSTreeTopLevel(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first); //bool generateJSTreeTopLevel(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
QCString generateIndentLabel(FTVNode *n,int level); QCString generateIndentLabel(FTVNode *n,int level);
void generateIndent(FTextStream &t,FTVNode *n,int level); void generateIndent(FTextStream &t,FTVNode *n,int level,bool opened);
void generateLink(FTextStream &t,FTVNode *n); void generateLink(FTextStream &t,FTVNode *n);
//void generateJSLink(FTextStream &t,FTVNode *n); //void generateJSLink(FTextStream &t,FTVNode *n);
QList<FTVNode> *m_indentNodes; QList<FTVNode> *m_indentNodes;
......
...@@ -352,9 +352,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s) ...@@ -352,9 +352,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
break; break;
case DocVerbatim::Verbatim: case DocVerbatim::Verbatim:
forceEndParagraph(s); forceEndParagraph(s);
m_t << PREFRAG_START; m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
filter(s->text()); filter(s->text());
m_t << PREFRAG_END; m_t << "</pre>" /*<< PREFRAG_END*/;
forceStartParagraph(s); forceStartParagraph(s);
break; break;
case DocVerbatim::HtmlOnly: case DocVerbatim::HtmlOnly:
...@@ -477,9 +477,9 @@ void HtmlDocVisitor::visit(DocInclude *inc) ...@@ -477,9 +477,9 @@ void HtmlDocVisitor::visit(DocInclude *inc)
break; break;
case DocInclude::VerbInclude: case DocInclude::VerbInclude:
forceEndParagraph(inc); forceEndParagraph(inc);
m_t << PREFRAG_START; m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
filter(inc->text()); filter(inc->text());
m_t << PREFRAG_END; m_t << "</pre>" /*<< PREFRAG_END*/;
forceStartParagraph(inc); forceStartParagraph(inc);
break; break;
case DocInclude::Snippet: case DocInclude::Snippet:
......
...@@ -2234,13 +2234,15 @@ void HtmlGenerator::startDotGraph() ...@@ -2234,13 +2234,15 @@ void HtmlGenerator::startDotGraph()
void HtmlGenerator::endDotGraph(const DotClassGraph &g) void HtmlGenerator::endDotGraph(const DotClassGraph &g)
{ {
bool generateLegend = Config_getBool("GENERATE_LEGEND");
bool umlLook = Config_getBool("UML_LOOK");
endSectionHeader(t); endSectionHeader(t);
startSectionSummary(t,m_sectionCount); startSectionSummary(t,m_sectionCount);
endSectionSummary(t); endSectionSummary(t);
startSectionContent(t,m_sectionCount); startSectionContent(t,m_sectionCount);
g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,TRUE,m_sectionCount); g.writeGraph(t,BITMAP,dir,fileName,relPath,TRUE,TRUE,m_sectionCount);
if (Config_getBool("GENERATE_LEGEND")) if (generateLegend && !umlLook)
{ {
t << "<center><span class=\"legend\">["; t << "<center><span class=\"legend\">[";
startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension); startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension);
...@@ -2384,28 +2386,6 @@ void HtmlGenerator::writeNonBreakableSpace(int n) ...@@ -2384,28 +2386,6 @@ void HtmlGenerator::writeNonBreakableSpace(int n)
} }
} }
void HtmlGenerator::writeLineNumber(const char *ref,const char *filename,
const char *anchor,int l)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d",l);
lineAnchor.sprintf("l%05d",l);
if (filename)
{
startCodeAnchor(lineAnchor);
writeCodeLink(ref,filename,anchor,lineNumber,0);
endCodeAnchor();
}
else
{
startCodeAnchor(lineAnchor);
codify(lineNumber);
endCodeAnchor();
}
codify(" ");
}
void HtmlGenerator::startSimpleSect(SectionTypes, void HtmlGenerator::startSimpleSect(SectionTypes,
const char *filename,const char *anchor, const char *filename,const char *anchor,
const char *title) const char *title)
...@@ -3072,4 +3052,50 @@ void HtmlGenerator::writeInheritedSectionTitle(const char *id, ...@@ -3072,4 +3052,50 @@ void HtmlGenerator::writeInheritedSectionTitle(const char *id,
<< "</td></tr>" << endl; << "</td></tr>" << endl;
} }
void HtmlGenerator::startCodeLine(bool hasLineNumbers)
{
if (!hasLineNumbers) t << "<div class=\"line\">";
col=0;
}
void HtmlGenerator::endCodeLine()
{
//codify("\n");
t << "</div>\n";
}
void HtmlGenerator::startCodeAnchor(const char *label)
{
t << "<div class=\"line\">";
t << "<a name=\"" << label << "\"></a><span class=\"lineno\">";
}
void HtmlGenerator::endCodeAnchor()
{
t << "</span>";
}
void HtmlGenerator::writeLineNumber(const char *ref,const char *filename,
const char *anchor,int l)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%5d",l);
lineAnchor.sprintf("l%05d",l);
if (filename)
{
startCodeAnchor(lineAnchor);
writeCodeLink(ref,filename,anchor,lineNumber,0);
endCodeAnchor();
}
else
{
startCodeAnchor(lineAnchor);
codify(lineNumber);
endCodeAnchor();
}
t << "&#160;";
}
...@@ -21,8 +21,10 @@ ...@@ -21,8 +21,10 @@
#include "qtbc.h" #include "qtbc.h"
#include "outputgen.h" #include "outputgen.h"
#define PREFRAG_START "<div class=\"fragment\"><pre class=\"fragment\">" //#define PREFRAG_START "<div class=\"fragment\"><pre class=\"fragment\">"
#define PREFRAG_END "</pre></div>" //#define PREFRAG_END "</pre></div>"
#define PREFRAG_START "<div class=\"fragment\">"
#define PREFRAG_END "</div><!-- fragment -->"
class QFile; class QFile;
class FTextStream; class FTextStream;
...@@ -144,8 +146,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -144,8 +146,8 @@ class HtmlGenerator : public OutputGenerator
void startCodeFragment() { t << PREFRAG_START; } void startCodeFragment() { t << PREFRAG_START; }
void endCodeFragment() { t << PREFRAG_END; } void endCodeFragment() { t << PREFRAG_END; }
void writeLineNumber(const char *,const char *,const char *,int); void writeLineNumber(const char *,const char *,const char *,int);
void startCodeLine() { col=0; } void startCodeLine(bool);
void endCodeLine() { codify("\n"); } void endCodeLine();
void startEmphasis() { t << "<em>"; } void startEmphasis() { t << "<em>"; }
void endEmphasis() { t << "</em>"; } void endEmphasis() { t << "</em>"; }
void startBold() { t << "<b>"; } void startBold() { t << "<b>"; }
...@@ -164,8 +166,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -164,8 +166,8 @@ class HtmlGenerator : public OutputGenerator
const char *anchor,const char *name, const char *anchor,const char *name,
const char *args); const char *args);
void endDoxyAnchor(const char *fName,const char *anchor); void endDoxyAnchor(const char *fName,const char *anchor);
void startCodeAnchor(const char *label) { t << "<a name=\"" << label << "\"></a>"; } void startCodeAnchor(const char *label);
void endCodeAnchor() { } void endCodeAnchor();
void writeLatexSpacing() {} void writeLatexSpacing() {}
void writeStartAnnoItem(const char *type,const char *file, void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name); const char *path,const char *name);
......
This diff is collapsed.
...@@ -244,7 +244,7 @@ void LatexDocVisitor::visit(DocSymbol *s) ...@@ -244,7 +244,7 @@ void LatexDocVisitor::visit(DocSymbol *s)
if (m_hide) return; if (m_hide) return;
switch(s->symbol()) switch(s->symbol())
{ {
case DocSymbol::BSlash: m_t << "$\\backslash$"; break; case DocSymbol::BSlash: m_t << "\\textbackslash{}"; break;
case DocSymbol::At: m_t << "@"; break; case DocSymbol::At: m_t << "@"; break;
case DocSymbol::Less: if (m_insidePre) m_t << "<"; else m_t << "$<$"; case DocSymbol::Less: if (m_insidePre) m_t << "<"; else m_t << "$<$";
break; break;
......
...@@ -1662,7 +1662,9 @@ void LatexGenerator::writeCodeLink(const char *ref,const char *f, ...@@ -1662,7 +1662,9 @@ void LatexGenerator::writeCodeLink(const char *ref,const char *f,
if (f) t << stripPath(f); if (f) t << stripPath(f);
if (f && anchor) t << "_"; if (f && anchor) t << "_";
if (anchor) t << anchor; if (anchor) t << anchor;
t << "}{" << name << "}"; t << "}{";
codify(name);
t << "}";
} }
else else
{ {
...@@ -2516,7 +2518,7 @@ void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const ...@@ -2516,7 +2518,7 @@ void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const
} }
} }
void LatexGenerator::startCodeLine() void LatexGenerator::startCodeLine(bool)
{ {
col=0; col=0;
} }
......
...@@ -132,7 +132,7 @@ class LatexGenerator : public OutputGenerator ...@@ -132,7 +132,7 @@ class LatexGenerator : public OutputGenerator
void startCodeFragment(); void startCodeFragment();
void endCodeFragment(); void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l); void writeLineNumber(const char *,const char *,const char *,int l);
void startCodeLine(); void startCodeLine(bool hasLineNumbers);
void endCodeLine(); void endCodeLine();
void startEmphasis() { t << "{\\em "; } void startEmphasis() { t << "{\\em "; }
void endEmphasis() { t << "}"; } void endEmphasis() { t << "}"; }
......
...@@ -128,7 +128,7 @@ class ManGenerator : public OutputGenerator ...@@ -128,7 +128,7 @@ class ManGenerator : public OutputGenerator
void startCodeFragment(); void startCodeFragment();
void endCodeFragment(); void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; } void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
void startCodeLine() {} void startCodeLine(bool) {}
void endCodeLine() { codify("\n"); col=0; } void endCodeLine() { codify("\n"); col=0; }
void startEmphasis() { t << "\\fI"; firstCol=FALSE; } void startEmphasis() { t << "\\fI"; firstCol=FALSE; }
void endEmphasis() { t << "\\fP"; firstCol=FALSE; } void endEmphasis() { t << "\\fP"; firstCol=FALSE; }
......
...@@ -976,22 +976,22 @@ static void processInline(GrowBuf &out,const char *data,int size) ...@@ -976,22 +976,22 @@ static void processInline(GrowBuf &out,const char *data,int size)
/** returns whether the line is a setext-style hdr underline */ /** returns whether the line is a setext-style hdr underline */
static int isHeaderline(const char *data, int size) static int isHeaderline(const char *data, int size)
{ {
int i = 0; int i=0, c=0;
while (i<size && data[i]==' ') i++; while (i<size && data[i]==' ') i++;
// test of level 1 header // test of level 1 header
if (data[i]=='=') if (data[i]=='=')
{ {
while (i<size && data[i]=='=') i++; while (i<size && data[i]=='=') i++,c++;
while (i<size && data[i]==' ') i++; while (i<size && data[i]==' ') i++;
return (i>=size || data[i]=='\n') ? 1 : 0; return (c>1 && (i>=size || data[i]=='\n')) ? 1 : 0;
} }
// test of level 2 header // test of level 2 header
if (data[i]=='-') if (data[i]=='-')
{ {
while (i<size && data[i]=='-') i++; while (i<size && data[i]=='-') i++,c++;
while (i<size && data[i]==' ') i++; while (i<size && data[i]==' ') i++;
return (i>=size || data[i]=='\n') ? 2 : 0; return (c>1 && (i>=size || data[i]=='\n')) ? 2 : 0;
} }
return 0; return 0;
} }
...@@ -1713,6 +1713,7 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent) ...@@ -1713,6 +1713,7 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
int i=0,end; int i=0,end;
//printf("writeCodeBlock: data={%s}\n",QCString(data).left(size).data()); //printf("writeCodeBlock: data={%s}\n",QCString(data).left(size).data());
out.addStr("@verbatim\n"); out.addStr("@verbatim\n");
int emptyLines=0;
while (i<size) while (i<size)
{ {
// find end of this line // find end of this line
...@@ -1724,12 +1725,17 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent) ...@@ -1724,12 +1725,17 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
//printf("j=%d end=%d indent=%d refIndent=%d data={%s}\n",j,end,indent,refIndent,QCString(data+i).left(end-i-1).data()); //printf("j=%d end=%d indent=%d refIndent=%d data={%s}\n",j,end,indent,refIndent,QCString(data+i).left(end-i-1).data());
if (j==end-1) // empty line if (j==end-1) // empty line
{ {
// add empty line emptyLines++;
out.addStr("\n");
i=end; i=end;
} }
else if (indent>=refIndent+codeBlockIndent) // enough indent to contine the code block else if (indent>=refIndent+codeBlockIndent) // enough indent to contine the code block
{ {
while (emptyLines>0) // write skipped empty lines
{
// add empty line
out.addStr("\n");
emptyLines--;
}
// add code line minus the indent // add code line minus the indent
out.addStr(data+i+refIndent+codeBlockIndent,end-i-refIndent-codeBlockIndent); out.addStr(data+i+refIndent+codeBlockIndent,end-i-refIndent-codeBlockIndent);
i=end; i=end;
...@@ -1740,6 +1746,12 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent) ...@@ -1740,6 +1746,12 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
} }
} }
out.addStr("@endverbatim\n"); out.addStr("@endverbatim\n");
while (emptyLines>0) // write skipped empty lines
{
// add empty line
out.addStr("\n");
emptyLines--;
}
//printf("i=%d\n",i); //printf("i=%d\n",i);
return i; return i;
} }
......
This diff is collapsed.
...@@ -185,6 +185,7 @@ class MemberDef : public Definition ...@@ -185,6 +185,7 @@ class MemberDef : public Definition
MemberDef *reimplements() const; MemberDef *reimplements() const;
LockingPtr< MemberList > reimplementedBy() const; LockingPtr< MemberList > reimplementedBy() const;
bool isReimplementedBy(ClassDef *cd) const;
//int inbodyLine() const; //int inbodyLine() const;
//QCString inbodyFile() const; //QCString inbodyFile() const;
...@@ -348,7 +349,7 @@ class MemberDef : public Definition ...@@ -348,7 +349,7 @@ class MemberDef : public Definition
// output generation // output generation
void writeDeclaration(OutputList &ol, void writeDeclaration(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool inGroup,const char *inheritId=0); bool inGroup,ClassDef *inheritFrom=0,const char *inheritId=0);
void writeDocumentation(MemberList *ml,OutputList &ol, void writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName,Definition *container, const char *scopeName,Definition *container,
bool inGroup,bool showEnumValues=FALSE,bool bool inGroup,bool showEnumValues=FALSE,bool
...@@ -378,6 +379,15 @@ class MemberDef : public Definition ...@@ -378,6 +379,15 @@ class MemberDef : public Definition
void _computeIsConstructor(); void _computeIsConstructor();
void _computeIsDestructor(); void _computeIsDestructor();
void _getLabels(QStrList &sl,Definition *container) const; void _getLabels(QStrList &sl,Definition *container) const;
void _writeCallGraph(OutputList &ol);
void _writeCallerGraph(OutputList &ol);
void _writeReimplements(OutputList &ol);
void _writeReimplementedBy(OutputList &ol);
void _writeExamples(OutputList &ol);
void _writeTypeConstraints(OutputList &ol);
void _writeEnumValues(OutputList &ol,Definition *container,
const QCString &cfname,const QCString &ciname,
const QCString &cname);
static int s_indentLevel; static int s_indentLevel;
// disable copying of member defs // disable copying of member defs
......
...@@ -118,11 +118,11 @@ void MemberGroup::writeDeclarations(OutputList &ol, ...@@ -118,11 +118,11 @@ void MemberGroup::writeDeclarations(OutputList &ol,
void MemberGroup::writePlainDeclarations(OutputList &ol, void MemberGroup::writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId ClassDef *inheritedFrom,const char *inheritId
) )
{ {
//printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count()); //printf("MemberGroup::writePlainDeclarations() memberList->count()=%d\n",memberList->count());
memberList->writePlainDeclarations(ol,cd,nd,fd,gd,inheritId); memberList->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
} }
void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName, void MemberGroup::writeDocumentation(OutputList &ol,const char *scopeName,
...@@ -138,7 +138,8 @@ void MemberGroup::writeDocumentationPage(OutputList &ol,const char *scopeName, ...@@ -138,7 +138,8 @@ void MemberGroup::writeDocumentationPage(OutputList &ol,const char *scopeName,
} }
void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
MemberList::ListType lt,const QCString &inheritId) MemberList::ListType lt,
ClassDef *inheritedFrom,const QCString &inheritId)
{ {
//printf("** addGroupedInheritedMembers()\n"); //printf("** addGroupedInheritedMembers()\n");
MemberListIterator li(*memberList); MemberListIterator li(*memberList);
...@@ -150,7 +151,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, ...@@ -150,7 +151,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
{ {
MemberList ml(lt); MemberList ml(lt);
ml.append(md); ml.append(md);
ml.writePlainDeclarations(ol,cd,0,0,0,inheritId); ml.writePlainDeclarations(ol,cd,0,0,0,inheritedFrom,inheritId);
} }
} }
} }
...@@ -206,6 +207,12 @@ int MemberGroup::countDocMembers() ...@@ -206,6 +207,12 @@ int MemberGroup::countDocMembers()
return m_numDocMembers; return m_numDocMembers;
} }
int MemberGroup::countInheritableMembers(ClassDef *inheritedFrom) const
{
return memberList->countInheritableMembers(inheritedFrom);
}
void MemberGroup::distributeMemberGroupDocumentation() void MemberGroup::distributeMemberGroupDocumentation()
{ {
//printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data()); //printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data());
......
...@@ -49,7 +49,7 @@ class MemberGroup ...@@ -49,7 +49,7 @@ class MemberGroup
void setAnchors(ClassDef *); void setAnchors(ClassDef *);
void writePlainDeclarations(OutputList &ol, void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId); ClassDef *inheritedFrom,const char *inheritId);
void writeDeclarations(OutputList &ol, void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool showInline=FALSE); bool showInline=FALSE);
...@@ -58,7 +58,8 @@ class MemberGroup ...@@ -58,7 +58,8 @@ class MemberGroup
void writeDocumentationPage(OutputList &ol,const char *scopeName, void writeDocumentationPage(OutputList &ol,const char *scopeName,
Definition *container); Definition *container);
void addGroupedInheritedMembers(OutputList &ol,ClassDef *cd, void addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
MemberList::ListType lt,const QCString &inheritId); MemberList::ListType lt,
ClassDef *inheritedFrom,const QCString &inheritId);
QCString documentation() { return doc; } QCString documentation() { return doc; }
bool allMembersInSameSection() { return inSameSection; } bool allMembersInSameSection() { return inSameSection; }
...@@ -78,6 +79,7 @@ class MemberGroup ...@@ -78,6 +79,7 @@ class MemberGroup
int friendCount() const; int friendCount() const;
int numDecMembers() const; int numDecMembers() const;
int numDocMembers() const; int numDocMembers() const;
int countInheritableMembers(ClassDef *inheritedFrom) const;
void setInGroup(bool b); void setInGroup(bool b);
void addListReferences(Definition *d); void addListReferences(Definition *d);
void setRefItems(const QList<ListItemInfo> *sli); void setRefItems(const QList<ListItemInfo> *sli);
......
...@@ -67,6 +67,47 @@ int MemberList::compareItems(GCI item1, GCI item2) ...@@ -67,6 +67,47 @@ int MemberList::compareItems(GCI item1, GCI item2)
return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine(); return cmp!=0 ? cmp : c1->getDefLine()-c2->getDefLine();
} }
int MemberList::countInheritableMembers(ClassDef *inheritedFrom) const
{
int count=0;
QListIterator<MemberDef> mli(*this);
MemberDef *md;
for (mli.toFirst();(md=mli.current());++mli)
{
if (md->isBriefSectionVisible())
{
if (md->memberType()!=MemberDef::Friend &&
md->memberType()!=MemberDef::EnumValue)
{
//printf("member %s: isReimplementedBy(%s)=%d\n",md->name().data(),
// inheritedFrom->name().data(),
// md->isReimplementedBy(inheritedFrom));
if (md->memberType()==MemberDef::Function)
{
if (!md->isReimplementedBy(inheritedFrom)) count++;
}
else
{
count++;
}
}
}
}
if (memberGroupList)
{
MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg;
for (;(mg=mgli.current());++mgli)
{
count+=mg->countInheritableMembers(inheritedFrom);
}
}
//printf("%s::countInheritableMembers(%s)=%d\n",
// listTypeAsString().data(),
// inheritedFrom->name().data(),count);
return count;
}
/*! Count the number of members in this list that are visible in /*! Count the number of members in this list that are visible in
* the declaration part of a compound's documentation page. * the declaration part of a compound's documentation page.
*/ */
...@@ -252,7 +293,7 @@ bool MemberList::declVisible() const ...@@ -252,7 +293,7 @@ bool MemberList::declVisible() const
void MemberList::writePlainDeclarations(OutputList &ol, void MemberList::writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId ClassDef *inheritedFrom,const char *inheritId
) )
{ {
//printf("----- writePlainDeclaration() ----\n"); //printf("----- writePlainDeclaration() ----\n");
...@@ -274,7 +315,8 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -274,7 +315,8 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{ {
//printf(">>> Member `%s' type=%d visible=%d\n", //printf(">>> Member `%s' type=%d visible=%d\n",
// md->name().data(),md->memberType(),md->isBriefSectionVisible()); // md->name().data(),md->memberType(),md->isBriefSectionVisible());
if (md->isBriefSectionVisible()) if ((inheritedFrom==0 || !md->isReimplementedBy(inheritedFrom)) &&
md->isBriefSectionVisible())
{ {
switch(md->memberType()) switch(md->memberType())
{ {
...@@ -290,7 +332,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -290,7 +332,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
case MemberDef::Event: case MemberDef::Event:
{ {
if (first) ol.startMemberList(),first=FALSE; if (first) ol.startMemberList(),first=FALSE;
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritId); md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
break; break;
} }
case MemberDef::Enumeration: case MemberDef::Enumeration:
...@@ -354,13 +396,14 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -354,13 +396,14 @@ void MemberList::writePlainDeclarations(OutputList &ol,
break; break;
} }
case MemberDef::Friend: case MemberDef::Friend:
if (inheritedFrom==0)
{ {
if (first) if (first)
{ {
ol.startMemberList(); ol.startMemberList();
first=FALSE; first=FALSE;
} }
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritId); md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
break; break;
} }
case MemberDef::EnumValue: case MemberDef::EnumValue:
...@@ -369,7 +412,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -369,7 +412,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{ {
//printf("EnumValue!\n"); //printf("EnumValue!\n");
if (first) ol.startMemberList(),first=FALSE; if (first) ol.startMemberList(),first=FALSE;
md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritId); md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup,inheritedFrom,inheritId);
} }
} }
break; break;
...@@ -411,16 +454,32 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -411,16 +454,32 @@ void MemberList::writePlainDeclarations(OutputList &ol,
//printf("----- end writePlainDeclaration() ----\n"); //printf("----- end writePlainDeclaration() ----\n");
} }
/** Writes the list of members to the output.
* @param ol Output list to write to
* @param cd non-null if this list is part of class documentation.
* @param nd non-null if this list is part of namespace documentation.
* @param fd non-null if this list is part of file documentation.
* @param gd non-null if this list is part of group documentation.
* @param title Title to use for the member list.
* @param subtitle Sub title to use for the member list.
* @param showEnumValues Obsolete, always set to FALSE.
* @param showInline if set to TRUE if title is rendered differently
* @param inheritedFrom if not 0, the list is shown inside the
* given class as inherited members, parameter cd points to the
* class containing the members.
*/
void MemberList::writeDeclarations(OutputList &ol, void MemberList::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle, bool showEnumValues, const char *title,const char *subtitle, bool showEnumValues,
bool showInline,ClassDef *inheritedFrom) bool showInline,ClassDef *inheritedFrom)
{ {
(void)showEnumValues; // unused
//printf("----- writeDeclaration() this=%p ---- inheritedFrom=%p\n",this,inheritedFrom); //printf("----- writeDeclaration() this=%p ---- inheritedFrom=%p\n",this,inheritedFrom);
static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL"); static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString inheritId; QCString inheritId;
countDecMembers(showEnumValues,gd); // count members shown in this section countDecMembers(/*showEnumValues*/FALSE,gd); // count members shown in this section
Definition *ctx = cd; Definition *ctx = cd;
if (ctx==0 && nd) ctx = nd; if (ctx==0 && nd) ctx = nd;
if (ctx==0 && gd) ctx = gd; if (ctx==0 && gd) ctx = gd;
...@@ -432,7 +491,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -432,7 +491,7 @@ void MemberList::writeDeclarations(OutputList &ol,
int num = numDecMembers(); int num = numDecMembers();
if (inheritedFrom) if (inheritedFrom)
{ {
if (cd && !optimizeVhdl) if ( cd && !optimizeVhdl && countInheritableMembers(inheritedFrom)>0 )
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
...@@ -494,7 +553,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -494,7 +553,7 @@ void MemberList::writeDeclarations(OutputList &ol,
} }
else else
{ {
writePlainDeclarations(ol,cd,nd,fd,gd,inheritId); writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
} }
//printf("memberGroupList=%p\n",memberGroupList); //printf("memberGroupList=%p\n",memberGroupList);
...@@ -524,7 +583,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -524,7 +583,7 @@ void MemberList::writeDeclarations(OutputList &ol,
ol.startMemberGroup(); ol.startMemberGroup();
} }
//printf("--- mg->writePlainDeclarations ---\n"); //printf("--- mg->writePlainDeclarations ---\n");
mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritId); mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
if (inheritId.isEmpty()) if (inheritId.isEmpty())
{ {
ol.endMemberGroup(hasHeader); ol.endMemberGroup(hasHeader);
...@@ -537,7 +596,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -537,7 +596,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{ {
// also add members that of this list type, that are grouped together // also add members that of this list type, that are grouped together
// in a separate list in class 'inheritedFrom' // in a separate list in class 'inheritedFrom'
cd->addGroupedInheritedMembers(ol,m_listType,inheritId); cd->addGroupedInheritedMembers(ol,m_listType,inheritedFrom,inheritId);
} }
//printf("----- end writeDeclaration() ----\n"); //printf("----- end writeDeclaration() ----\n");
} }
......
...@@ -136,9 +136,10 @@ class MemberList : public QList<MemberDef> ...@@ -136,9 +136,10 @@ class MemberList : public QList<MemberDef>
bool needsSorting() const { return m_needsSorting; } bool needsSorting() const { return m_needsSorting; }
void countDecMembers(bool countEnumValues=FALSE,GroupDef *gd=0); void countDecMembers(bool countEnumValues=FALSE,GroupDef *gd=0);
void countDocMembers(bool countEnumValues=FALSE); void countDocMembers(bool countEnumValues=FALSE);
int countInheritableMembers(ClassDef *inheritedFrom) const;
void writePlainDeclarations(OutputList &ol, void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId); ClassDef *inheritedFrom,const char *inheritId);
void writeDeclarations(OutputList &ol, void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle, const char *title,const char *subtitle,
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
display:block; display:block;
padding:0px; padding:0px;
margin:0px; margin:0px;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
} }
#side-nav { #side-nav {
...@@ -115,6 +116,7 @@ ...@@ -115,6 +116,7 @@
background-image:url('nav_h.png'); background-image:url('nav_h.png');
background-repeat:repeat-x; background-repeat:repeat-x;
background-color: ##FA; background-color: ##FA;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
} }
@media print @media print
......
var navTreeIndex; var navTreeIndex;
var navTreeSubIndices = new Array();
function getData(varName) function getData(varName)
{ {
...@@ -13,6 +13,14 @@ function stripPath(uri) ...@@ -13,6 +13,14 @@ function stripPath(uri)
return uri.substring(uri.lastIndexOf('/')+1); return uri.substring(uri.lastIndexOf('/')+1);
} }
function stripPath2(uri)
{
var i = uri.lastIndexOf('/');
var s = uri.substring(i+1);
var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
return m ? uri.substring(i-6) : s;
}
function getScript(scriptName,func,show) function getScript(scriptName,func,show)
{ {
var head = document.getElementsByTagName("head")[0]; var head = document.getElementsByTagName("head")[0];
...@@ -297,7 +305,8 @@ function showNode(o, node, index) ...@@ -297,7 +305,8 @@ function showNode(o, node, index)
showNode(o,node,index); // retry with child node expanded showNode(o,node,index); // retry with child node expanded
},true); },true);
} else { } else {
if (o.toroot=="index.html" /*|| n.childrenData*/) { var rootBase = o.toroot.replace(/\..+$/, '');
if (rootBase=="index" || rootBase=="pages") {
expandNode(o, n, true, true); expandNode(o, n, true, true);
} }
selectAndHighlight(n); selectAndHighlight(n);
...@@ -320,24 +329,47 @@ function getNode(o, po) ...@@ -320,24 +329,47 @@ function getNode(o, po)
} }
} }
function gotoNode(o,root,hash) function gotoNode(o,subIndex,root,hash)
{ {
var nti = navTreeIndex[root+hash]; var nti = navTreeSubIndices[subIndex][root+hash];
o.breadcrumbs = nti ? nti : navTreeIndex[root]; o.breadcrumbs = nti ? nti : navTreeSubIndices[subIndex][root];
if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex["index.html"]; if (o.breadcrumbs)
o.breadcrumbs.unshift(0); {
showNode(o, o.node, 0); o.breadcrumbs.unshift(0); // add 0 for root node
showNode(o, o.node, 0);
}
}
function gotoSubIndex(o,root,hash,relpath)
{
if (hash.match(/^#l\d+$/))
{
hash=''; // strip line number anchors
}
var url=root+hash;
var i=-1;
while (navTreeIndex[i+1]<=url) i++;
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash)
} else {
getScript(relpath+'navtreeindex'+i,function(){
navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
if (navTreeSubIndices[i]) {
gotoNode(o,i,root,hash);
}
},true);
}
} }
function navTo(o,root,hash,relpath) function navTo(o,root,hash,relpath)
{ {
if (navTreeIndex){ if (navTreeIndex){
gotoNode(o,root,hash); gotoSubIndex(o,root,hash,relpath);
} else { } else {
getScript(relpath+"navtreeindex",function(){ getScript(relpath+"navtreeindex",function(){
navTreeIndex = eval('NAVTREEINDEX'); navTreeIndex = eval('NAVTREEINDEX');
if (navTreeIndex){ if (navTreeIndex){
gotoNode(o,root,hash); gotoSubIndex(o,root,hash,relpath);
} }
},true); },true);
} }
...@@ -377,7 +409,7 @@ function initNavTree(toroot,relpath) ...@@ -377,7 +409,7 @@ function initNavTree(toroot,relpath)
$('.item').removeClass('selected'); $('.item').removeClass('selected');
$('.item').removeAttr('id'); $('.item').removeAttr('id');
} }
var link=stripPath($(location).attr('pathname')); var link=stripPath2($(location).attr('pathname'));
navTo(o,link,$(location).attr('hash'),relpath); navTo(o,link,$(location).attr('hash'),relpath);
} }
}) })
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
" display:block;\n" " display:block;\n"
" padding:0px;\n" " padding:0px;\n"
" margin:0px;\n" " margin:0px;\n"
" -webkit-overflow-scrolling : touch; /* iOS 5+ */\n"
"}\n" "}\n"
"\n" "\n"
"#side-nav {\n" "#side-nav {\n"
...@@ -115,6 +116,7 @@ ...@@ -115,6 +116,7 @@
" background-image:url('nav_h.png');\n" " background-image:url('nav_h.png');\n"
" background-repeat:repeat-x;\n" " background-repeat:repeat-x;\n"
" background-color: ##FA;\n" " background-color: ##FA;\n"
" -webkit-overflow-scrolling : touch; /* iOS 5+ */\n"
"}\n" "}\n"
"\n" "\n"
"@media print\n" "@media print\n"
......
"\n"
"var navTreeIndex;\n" "var navTreeIndex;\n"
"var navTreeSubIndices = new Array();\n"
"\n" "\n"
"function getData(varName)\n" "function getData(varName)\n"
"{\n" "{\n"
...@@ -13,6 +13,14 @@ ...@@ -13,6 +13,14 @@
" return uri.substring(uri.lastIndexOf('/')+1);\n" " return uri.substring(uri.lastIndexOf('/')+1);\n"
"}\n" "}\n"
"\n" "\n"
"function stripPath2(uri)\n"
"{\n"
" var i = uri.lastIndexOf('/');\n"
" var s = uri.substring(i+1);\n"
" var m = uri.substring(0,i+1).match(/\\/d\\w\\/d\\w\\w\\/$/);\n"
" return m ? uri.substring(i-6) : s;\n"
"}\n"
"\n"
"function getScript(scriptName,func,show)\n" "function getScript(scriptName,func,show)\n"
"{\n" "{\n"
" var head = document.getElementsByTagName(\"head\")[0]; \n" " var head = document.getElementsByTagName(\"head\")[0]; \n"
...@@ -297,7 +305,8 @@ ...@@ -297,7 +305,8 @@
" showNode(o,node,index); // retry with child node expanded\n" " showNode(o,node,index); // retry with child node expanded\n"
" },true);\n" " },true);\n"
" } else {\n" " } else {\n"
" if (o.toroot==\"index.html\" /*|| n.childrenData*/) {\n" " var rootBase = o.toroot.replace(/\\..+$/, '');\n"
" if (rootBase==\"index\" || rootBase==\"pages\") {\n"
" expandNode(o, n, true, true);\n" " expandNode(o, n, true, true);\n"
" }\n" " }\n"
" selectAndHighlight(n);\n" " selectAndHighlight(n);\n"
...@@ -320,24 +329,47 @@ ...@@ -320,24 +329,47 @@
" }\n" " }\n"
"}\n" "}\n"
"\n" "\n"
"function gotoNode(o,root,hash)\n" "function gotoNode(o,subIndex,root,hash)\n"
"{\n" "{\n"
" var nti = navTreeIndex[root+hash];\n" " var nti = navTreeSubIndices[subIndex][root+hash];\n"
" o.breadcrumbs = nti ? nti : navTreeIndex[root];\n" " o.breadcrumbs = nti ? nti : navTreeSubIndices[subIndex][root];\n"
" if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex[\"index.html\"];\n" " if (o.breadcrumbs)\n"
" o.breadcrumbs.unshift(0);\n" " {\n"
" showNode(o, o.node, 0);\n" " o.breadcrumbs.unshift(0); // add 0 for root node\n"
" showNode(o, o.node, 0);\n"
" }\n"
"}\n"
"\n"
"function gotoSubIndex(o,root,hash,relpath)\n"
"{\n"
" if (hash.match(/^#l\\d+$/)) \n"
" {\n"
" hash=''; // strip line number anchors\n"
" }\n"
" var url=root+hash;\n"
" var i=-1;\n"
" while (navTreeIndex[i+1]<=url) i++;\n"
" if (navTreeSubIndices[i]) {\n"
" gotoNode(o,i,root,hash)\n"
" } else {\n"
" getScript(relpath+'navtreeindex'+i,function(){\n"
" navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);\n"
" if (navTreeSubIndices[i]) {\n"
" gotoNode(o,i,root,hash);\n"
" }\n"
" },true);\n"
" }\n"
"}\n" "}\n"
"\n" "\n"
"function navTo(o,root,hash,relpath)\n" "function navTo(o,root,hash,relpath)\n"
"{\n" "{\n"
" if (navTreeIndex){\n" " if (navTreeIndex){\n"
" gotoNode(o,root,hash);\n" " gotoSubIndex(o,root,hash,relpath);\n"
" } else {\n" " } else {\n"
" getScript(relpath+\"navtreeindex\",function(){\n" " getScript(relpath+\"navtreeindex\",function(){\n"
" navTreeIndex = eval('NAVTREEINDEX');\n" " navTreeIndex = eval('NAVTREEINDEX');\n"
" if (navTreeIndex){\n" " if (navTreeIndex){\n"
" gotoNode(o,root,hash);\n" " gotoSubIndex(o,root,hash,relpath);\n"
" }\n" " }\n"
" },true);\n" " },true);\n"
" } \n" " } \n"
...@@ -377,7 +409,7 @@ ...@@ -377,7 +409,7 @@
" $('.item').removeClass('selected');\n" " $('.item').removeClass('selected');\n"
" $('.item').removeAttr('id');\n" " $('.item').removeAttr('id');\n"
" }\n" " }\n"
" var link=stripPath($(location).attr('pathname'));\n" " var link=stripPath2($(location).attr('pathname'));\n"
" navTo(o,link,$(location).attr('hash'),relpath);\n" " navTo(o,link,$(location).attr('hash'),relpath);\n"
" }\n" " }\n"
" })\n" " })\n"
......
...@@ -65,7 +65,7 @@ class CodeOutputInterface ...@@ -65,7 +65,7 @@ class CodeOutputInterface
virtual void writeLineNumber(const char *ref,const char *file, virtual void writeLineNumber(const char *ref,const char *file,
const char *anchor,int lineNumber) = 0; const char *anchor,int lineNumber) = 0;
virtual void startCodeLine() = 0; virtual void startCodeLine(bool hasLineNumbers) = 0;
virtual void endCodeLine() = 0; virtual void endCodeLine() = 0;
virtual void startCodeAnchor(const char *label) = 0; virtual void startCodeAnchor(const char *label) = 0;
virtual void endCodeAnchor() = 0; virtual void endCodeAnchor() = 0;
......
...@@ -231,8 +231,8 @@ class OutputList : public OutputDocInterface ...@@ -231,8 +231,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startCodeFragment); } { forall(&OutputGenerator::startCodeFragment); }
void endCodeFragment() void endCodeFragment()
{ forall(&OutputGenerator::endCodeFragment); } { forall(&OutputGenerator::endCodeFragment); }
void startCodeLine() void startCodeLine(bool hasLineNumbers)
{ forall(&OutputGenerator::startCodeLine); } { forall(&OutputGenerator::startCodeLine,hasLineNumbers); }
void endCodeLine() void endCodeLine()
{ forall(&OutputGenerator::endCodeLine); } { forall(&OutputGenerator::endCodeLine); }
void writeLineNumber(const char *ref,const char *file,const char *anchor, void writeLineNumber(const char *ref,const char *file,const char *anchor,
......
...@@ -248,14 +248,17 @@ void PageDef::writePageDocumentation(OutputList &ol) ...@@ -248,14 +248,17 @@ void PageDef::writePageDocumentation(OutputList &ol)
bool PageDef::visibleInIndex() const bool PageDef::visibleInIndex() const
{ {
return // not part of a group static bool allExternals = Config_getBool("ALLEXTERNALS");
!getGroupDef() && return // not part of a group
// not an externally defined page !getGroupDef() &&
(!isReference() || Config_getBool("ALLEXTERNALS")) && // not an externally defined page
// not a subpage (!isReference() || allExternals)
(getOuterScope()==0 || // &&
getOuterScope()->definitionType()!=Definition::TypePage // not a subpage
); //(getOuterScope()==0 ||
// getOuterScope()->definitionType()!=Definition::TypePage
//)
;
} }
bool PageDef::documentedPage() const bool PageDef::documentedPage() const
......
...@@ -382,7 +382,7 @@ static void startCodeLine() ...@@ -382,7 +382,7 @@ static void startCodeLine()
} }
//g_code->endLineNumber(); //g_code->endLineNumber();
} }
g_code->startCodeLine(); g_code->startCodeLine(g_sourceFileDef);
if (g_currentFontClass) if (g_currentFontClass)
{ {
g_code->startFontClass(g_currentFontClass); g_code->startFontClass(g_currentFontClass);
......
...@@ -76,6 +76,18 @@ function initResizable() ...@@ -76,6 +76,18 @@ function initResizable()
if (i>=0) window.location.hash=url.substr(i); if (i>=0) window.location.hash=url.substr(i);
var _preventDefault = function(evt) { evt.preventDefault(); }; var _preventDefault = function(evt) { evt.preventDefault(); };
$("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
$(document).bind('touchmove',function(e){
try {
var target = e.target;
while (target) {
if ($(target).css('-webkit-overflow-scrolling')=='touch') return;
target = target.parentNode;
}
e.preventDefault();
} catch(err) {
e.preventDefault();
}
});
} }
...@@ -76,6 +76,18 @@ ...@@ -76,6 +76,18 @@
" if (i>=0) window.location.hash=url.substr(i);\n" " if (i>=0) window.location.hash=url.substr(i);\n"
" var _preventDefault = function(evt) { evt.preventDefault(); };\n" " var _preventDefault = function(evt) { evt.preventDefault(); };\n"
" $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n" " $(\"#splitbar\").bind(\"dragstart\", _preventDefault).bind(\"selectstart\", _preventDefault);\n"
" $(document).bind('touchmove',function(e){\n"
" try {\n"
" var target = e.target;\n"
" while (target) {\n"
" if ($(target).css('-webkit-overflow-scrolling')=='touch') return;\n"
" target = target.parentNode;\n"
" }\n"
" e.preventDefault();\n"
" } catch(err) {\n"
" e.preventDefault();\n"
" }\n"
" });\n"
"}\n" "}\n"
"\n" "\n"
"\n" "\n"
...@@ -123,7 +123,7 @@ class RTFGenerator : public OutputGenerator ...@@ -123,7 +123,7 @@ class RTFGenerator : public OutputGenerator
void startCodeFragment(); void startCodeFragment();
void endCodeFragment(); void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; } void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
void startCodeLine() { col=0; } void startCodeLine(bool) { col=0; }
void endCodeLine() { lineBreak(); } void endCodeLine() { lineBreak(); }
void startEmphasis() { t << "{\\i "; } void startEmphasis() { t << "{\\i "; }
void endEmphasis() { t << "}"; } void endEmphasis() { t << "}"; }
......
...@@ -353,7 +353,7 @@ class SDict ...@@ -353,7 +353,7 @@ class SDict
class IteratorDict; // first forward declare class IteratorDict; // first forward declare
friend class IteratorDict; // then make it a friend friend class IteratorDict; // then make it a friend
/*! Simple iterator for SDict. It iterates in over the dictionary elements /*! Simple iterator for SDict. It iterates over the dictionary elements
* in an unsorted way, but does provide information about the element's key. * in an unsorted way, but does provide information about the element's key.
*/ */
class IteratorDict class IteratorDict
......
...@@ -1799,7 +1799,7 @@ bool leftScopeMatch(const QCString &scope, const QCString &name) ...@@ -1799,7 +1799,7 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
void linkifyText(const TextGeneratorIntf &out,Definition *scope, void linkifyText(const TextGeneratorIntf &out,Definition *scope,
FileDef *fileScope,const char *, FileDef *fileScope,Definition *self,
const char *text, bool autoBreak,bool external, const char *text, bool autoBreak,bool external,
bool keepSpaces,int indentLevel) bool keepSpaces,int indentLevel)
{ {
...@@ -1882,11 +1882,14 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1882,11 +1882,14 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
//printf("Found typedef %s\n",typeDef->name().data()); //printf("Found typedef %s\n",typeDef->name().data());
if (external ? typeDef->isLinkable() : typeDef->isLinkableInProject()) if (external ? typeDef->isLinkable() : typeDef->isLinkableInProject())
{ {
out.writeLink(typeDef->getReference(), if (typeDef->getOuterScope()!=self)
typeDef->getOutputFileBase(), {
typeDef->anchor(), out.writeLink(typeDef->getReference(),
word); typeDef->getOutputFileBase(),
found=TRUE; typeDef->anchor(),
word);
found=TRUE;
}
} }
} }
if (!found && cd) if (!found && cd)
...@@ -1895,8 +1898,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1895,8 +1898,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
// add link to the result // add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject()) if (external ? cd->isLinkable() : cd->isLinkableInProject())
{ {
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word); if (cd!=self)
found=TRUE; {
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
}
} }
} }
else if ((cd=getClass(matchWord+"-p"))) // search for Obj-C protocols as well else if ((cd=getClass(matchWord+"-p"))) // search for Obj-C protocols as well
...@@ -1904,8 +1910,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1904,8 +1910,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
// add link to the result // add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject()) if (external ? cd->isLinkable() : cd->isLinkableInProject())
{ {
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word); if (cd!=self)
found=TRUE; {
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
}
} }
} }
else if ((cd=getClass(matchWord+"-g"))) // C# generic as well else if ((cd=getClass(matchWord+"-g"))) // C# generic as well
...@@ -1913,8 +1922,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1913,8 +1922,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
// add link to the result // add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject()) if (external ? cd->isLinkable() : cd->isLinkableInProject())
{ {
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word); if (cd!=self)
found=TRUE; {
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
}
} }
} }
else else
...@@ -1951,10 +1963,14 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope, ...@@ -1951,10 +1963,14 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
//printf("Found ref scope=%s\n",d?d->name().data():"<global>"); //printf("Found ref scope=%s\n",d?d->name().data():"<global>");
//ol.writeObjectLink(d->getReference(),d->getOutputFileBase(), //ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),word); // md->anchor(),word);
out.writeLink(md->getReference(),md->getOutputFileBase(), if (md!=self && (self==0 || md->name()!=self->name()))
md->anchor(),word); // name check is needed for overloaded members, where getDefs just returns one
//printf("found symbol %s\n",matchWord.data()); {
found=TRUE; out.writeLink(md->getReference(),md->getOutputFileBase(),
md->anchor(),word);
//printf("found symbol %s\n",matchWord.data());
found=TRUE;
}
} }
} }
...@@ -6123,7 +6139,7 @@ void filterLatexString(FTextStream &t,const char *str, ...@@ -6123,7 +6139,7 @@ void filterLatexString(FTextStream &t,const char *str,
else if (*p=='>') else if (*p=='>')
{ t << "$>$"; p++; } { t << "$>$"; p++; }
else else
{ t << "$\\backslash$"; } { t << "\\textbackslash{}"; }
break; break;
case '"': { t << "\\char`\\\"{}"; } case '"': { t << "\\char`\\\"{}"; }
break; break;
......
...@@ -96,7 +96,7 @@ QCString getLanguageSpecificSeparator(SrcLangExt lang,bool classScope=FALSE); ...@@ -96,7 +96,7 @@ QCString getLanguageSpecificSeparator(SrcLangExt lang,bool classScope=FALSE);
void linkifyText(const TextGeneratorIntf &ol, void linkifyText(const TextGeneratorIntf &ol,
Definition *scope, Definition *scope,
FileDef *fileScope, FileDef *fileScope,
const char *name, Definition *self,
const char *text, const char *text,
bool autoBreak=FALSE, bool autoBreak=FALSE,
bool external=TRUE, bool external=TRUE,
......
...@@ -225,7 +225,7 @@ static void startCodeLine() ...@@ -225,7 +225,7 @@ static void startCodeLine()
g_code->writeLineNumber(0,0,0,g_yyLineNr); g_code->writeLineNumber(0,0,0,g_yyLineNr);
} }
} }
g_code->startCodeLine(); g_code->startCodeLine(g_sourceFileDef);
if (g_currentFontClass) if (g_currentFontClass)
{ {
g_code->startFontClass(g_currentFontClass); g_code->startFontClass(g_currentFontClass);
......
...@@ -2119,8 +2119,11 @@ static void addCompInst(char *n, char* instName, char* comp,int iLine) ...@@ -2119,8 +2119,11 @@ static void addCompInst(char *n, char* instName, char* comp,int iLine)
initEntry(current); initEntry(current);
instFiles.append(new Entry(*current)); instFiles.append(new Entry(*current));
} }
delete current;
current=new Entry; Entry *temp=current; // hold current pointer (temp=oldEntry)
current=new Entry; // (oldEntry != current)
delete temp;
} }
else else
{ {
......
...@@ -1016,9 +1016,9 @@ void isVhdlDocPending() ...@@ -1016,9 +1016,9 @@ void isVhdlDocPending()
{ {
if (!str_doc.pending) if (!str_doc.pending)
return; return;
str_doc.pending=FALSE;
oldEntry=0; // prevents endless recursion
iDocLine=str_doc.iDocLine; iDocLine=str_doc.iDocLine;
handleCommentBlock(str_doc.doc,str_doc.brief); handleCommentBlock(str_doc.doc,str_doc.brief);
iDocLine=-1; iDocLine=-1;
str_doc.pending=FALSE;
} }
...@@ -298,7 +298,7 @@ class XMLCodeGenerator : public CodeOutputInterface ...@@ -298,7 +298,7 @@ class XMLCodeGenerator : public CodeOutputInterface
writeXMLLink(m_t,ref,file,anchor,name,tooltip); writeXMLLink(m_t,ref,file,anchor,name,tooltip);
col+=strlen(name); col+=strlen(name);
} }
void startCodeLine() void startCodeLine(bool)
{ {
XML_DB(("(startCodeLine)\n")); XML_DB(("(startCodeLine)\n"));
m_t << "<codeline"; m_t << "<codeline";
...@@ -770,7 +770,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De ...@@ -770,7 +770,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString()); QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString());
stripQualifiers(typeStr); stripQualifiers(typeStr);
t << " <type>"; t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),typeStr); linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,typeStr);
t << "</type>" << endl; t << "</type>" << endl;
t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl; t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl;
t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl; t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl;
...@@ -833,7 +833,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De ...@@ -833,7 +833,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (!a->type.isEmpty()) if (!a->type.isEmpty())
{ {
t << " <type>"; t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),a->type); linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a->type);
t << "</type>" << endl; t << "</type>" << endl;
} }
if (!a->name.isEmpty()) if (!a->name.isEmpty())
...@@ -857,7 +857,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De ...@@ -857,7 +857,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (!a->defval.isEmpty()) if (!a->defval.isEmpty())
{ {
t << " <defval>"; t << " <defval>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),a->defval); linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a->defval);
t << "</defval>" << endl; t << "</defval>" << endl;
} }
if (defArg && defArg->hasDocumentation()) if (defArg && defArg->hasDocumentation())
...@@ -895,14 +895,14 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De ...@@ -895,14 +895,14 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (!md->initializer().isEmpty() && md->initializer().length()<2000) if (!md->initializer().isEmpty() && md->initializer().length()<2000)
{ {
t << " <initializer>"; t << " <initializer>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->initializer()); linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->initializer());
t << "</initializer>" << endl; t << "</initializer>" << endl;
} }
if (md->excpString()) if (md->excpString())
{ {
t << " <exceptions>"; t << " <exceptions>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->excpString()); linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->excpString());
t << "</exceptions>" << endl; t << "</exceptions>" << endl;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment