Commit 7e1fa1f2 authored by dimitri's avatar dimitri

Release-1.8.1

parent c11926b2
......@@ -188,7 +188,6 @@ HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = YES
DOCSET_FEEDNAME = "Doxygen docs"
......
DOXYGEN Version 1.8.0-20120429
DOXYGEN Version 1.8.1
Please read the installation section of the manual
(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.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (29 April 2012)
Dimitri van Heesch (dimitri@stack.nl) (19 May 2012)
......@@ -17,10 +17,10 @@
doxygen_version_major=1
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.
doxygen_version_mmn=20120429
doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -149,20 +149,55 @@ dl.el {
margin-left: -1cm;
}
.fragment {
font-family: monospace, fixed;
font-size: 105%;
}
pre.fragment {
border: 1px solid #D5D5D5;
background-color: #FCFCFC;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
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: #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 {
......
......@@ -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.
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.
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
\ref cfg_expand_as_defined "EXPAND_AS_DEFINED" tag.
A typically example where some help from the preprocessor is needed is
when dealing with Microsoft's __declspec language extension. Here is an
example function.
when dealing with Microsoft's __declspec language extension. The same goes
for GNU's __attribute__ extension. Here is an example function.
\verbatim
extern "C" void __declspec(dllexport) ErrorMsg( String aMessage,...);
......
......@@ -9,7 +9,7 @@ PROJECT_NUMBER =
PROJECT_BRIEF =
PROJECT_LOGO =
OUTPUT_DIRECTORY = ../qtools_docs
CREATE_SUBDIRS = NO
CREATE_SUBDIRS = YES
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
......@@ -117,7 +117,7 @@ FILTER_SOURCE_PATTERNS =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
SOURCE_BROWSER = YES
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = YES
......@@ -145,7 +145,6 @@ HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = YES
DOCSET_FEEDNAME = "Doxygen generated docs"
......
This diff is collapsed.
......@@ -331,7 +331,8 @@ class ClassDef : public Definition
void writeDocumentationForInnerClasses(OutputList &ol);
void writeMemberPages(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 writeSummaryLinks(OutputList &ol);
void reclassifyMember(MemberDef *md,MemberDef::MemberType t);
......@@ -340,7 +341,7 @@ class ClassDef : public Definition
const char *header,bool localNames);
void removeMemberFromLists(MemberDef *md);
void addGroupedInheritedMembers(OutputList &ol,MemberList::ListType lt,
const QCString &inheritId);
ClassDef *inheritedFrom,const QCString &inheritId);
bool visited;
......@@ -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);
void writeMemberDocumentation(OutputList &ol,MemberList::ListType lt,const QCString &title,bool showInline=FALSE);
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 writeDetailedDescription(OutputList &ol,const QCString &pageType,bool exampleFlag,
const QCString &title,const QCString &anchor=QCString());
......@@ -381,11 +382,11 @@ class ClassDef : public Definition
void writeMoreLink(OutputList &ol,const QCString &anchor);
void writeDetailedDocumentationBody(OutputList &ol);
int countInheritedDecMembersRec(MemberList::ListType lt);
int countInheritedDecMembersRec(MemberList::ListType lt,ClassDef *inheritedFrom);
int countInheritedDecMembers(MemberList::ListType lt);
int countAdditionalInheritedMembers();
void writeAdditionalInheritedMembers(OutputList &ol);
int countMembersIncludingGrouped(MemberList::ListType lt);
int countMembersIncludingGrouped(MemberList::ListType lt,ClassDef *inheritedFrom);
ClassDefImpl *m_impl;
......
......@@ -516,7 +516,7 @@ static void startCodeLine()
g_code->writeLineNumber(0,0,0,g_yyLineNr);
}
}
g_code->startCodeLine();
g_code->startCodeLine(g_sourceFileDef && g_lineNumbers);
if (g_currentFontClass)
{
g_code->startFontClass(g_currentFontClass);
......
......@@ -1101,6 +1101,15 @@ RCSTAG "$"{ID}":"[^\n$]+"$"
}
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
addOutput(yytext);
}
......
......@@ -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
Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
' 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='
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
......
......@@ -1285,6 +1285,19 @@ void addConfigOptions(Config *cfg)
);
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(
"GENERATE_DOCSET",
"If the GENERATE_DOCSET tag is set to YES, additional index files\n"
......
......@@ -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"
" </g>\n"
" </g>\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"
" <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[] =
" <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"
" </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"
;
......@@ -585,9 +598,9 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
if (width==-1)
{
if (height<=60)
height=60;
height=300;
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
out << "<div class=\"zoom\">";
//out << "<object type=\"image/svg+xml\" data=\""
......@@ -1065,11 +1078,42 @@ bool DotFilePatcher::run()
}
lineNr++;
}
fi.close();
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);
return TRUE;
}
......@@ -1484,8 +1528,8 @@ void DotNode::setDistance(int distance)
static QCString convertLabel(const QCString &l)
{
QCString result;
QCString bBefore("\\_/<({[: =-+@%#~?$");
QCString bAfter(">]),;|");
QCString bBefore("\\_/<({[: =-+@%#~?$"); // break before character set
QCString bAfter(">]),;|"); // break after character set
const char *p=l.data();
if (p==0) return result;
char c;
......@@ -1520,7 +1564,7 @@ static QCString convertLabel(const QCString &l)
}
else if (charsLeft>foldLen/3 && sinceLast>foldLen && bBefore.contains(c))
{
result+="\\n";
result+="\\l";
result+=replacement;
foldLen = (foldLen+sinceLast+1)/2;
sinceLast=1;
......@@ -1529,14 +1573,14 @@ static QCString convertLabel(const QCString &l)
!isupper(c) && isupper(*p))
{
result+=replacement;
result+="\\n";
result+="\\l";
foldLen = (foldLen+sinceLast+1)/2;
sinceLast=0;
}
else if (charsLeft>foldLen/3 && sinceLast>foldLen && bAfter.contains(c))
{
result+=replacement;
result+="\\n";
result+="\\l";
foldLen = (foldLen+sinceLast+1)/2;
sinceLast=0;
}
......@@ -1595,7 +1639,7 @@ static void writeBoxMemberList(FTextStream &t,
static int limit = Config_getInt("UML_LIMIT_NUM_FIELDS");
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;
}
else
......@@ -2781,10 +2825,11 @@ DotClassGraph::DotClassGraph(ClassDef *cd,DotNode::GraphType t)
bool DotClassGraph::isTrivial() const
{
static bool umlLook = Config_getBool("UML_LOOK");
if (m_graphType==DotNode::Inheritance)
return m_startNode->m_children==0 && m_startNode->m_parents==0;
else
return m_startNode->m_children==0;
return !umlLook && m_startNode->m_children==0;
}
bool DotClassGraph::isTooBig() const
......
......@@ -253,11 +253,17 @@ static STLInfo g_stlinfo[] =
{
// className baseClass1 baseClass2 templType1 templName1 templType2 templName2 virtInheritance // iterators
{ "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
{ "smart_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
{ "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_istream", "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[] =
{ "bitset", 0, 0, "Bits", 0, 0, 0, FALSE, FALSE },
{ "deque", 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 },
{ "unordered_map", 0, 0, "K", "keys", "T", "elements", FALSE, TRUE }, // C++11
{ "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 },
{ "unordered_set", 0, 0, "K", "keys", 0, 0, FALSE, TRUE }, // C++11
{ "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 },
{ "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)
);
if (pd)
{
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->addSectionsToDefinition(root->anchors);
pd->setShowToc(root->stat);
addPageToContext(pd,rootNav);
......@@ -8231,6 +8243,7 @@ static void findMainPage(EntryNav *rootNav)
Doxygen::mainPage = new PageDef(root->docFile,root->docLine,
indexName, root->brief+root->doc+root->inbodyDocs,title);
//setFileNameForSections(root->anchors,"index",Doxygen::mainPage);
Doxygen::mainPage->setBriefDescription(root->brief,root->briefFile,root->briefLine);
Doxygen::mainPage->setFileName(indexName);
Doxygen::mainPage->setShowToc(root->stat);
addPageToContext(Doxygen::mainPage,rootNav);
......@@ -8428,6 +8441,7 @@ static void buildExampleList(EntryNav *rootNav)
{
PageDef *pd=new PageDef(root->fileName,root->startLine,
root->name,root->brief+root->doc+root->inbodyDocs,root->args);
pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
pd->setFileName(convertNameToFile(pd->name()+"-example",FALSE,TRUE));
pd->addSectionsToDefinition(root->anchors);
pd->setLanguage(root->lang);
......
......@@ -149,20 +149,55 @@ dl.el {
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-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 {
border: 1px solid ##CC;
background-color: ##FC;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
overflow: auto;
word-wrap: break-word;
font-size: 9pt;
line-height: 125%;
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 {
......@@ -581,8 +616,8 @@ span.mlabels {
span.mlabel {
background-color: ##88;
border-top:1px solid ##55;
border-left:1px solid ##55;
border-top:1px solid ##70;
border-left:1px solid ##70;
border-right:1px solid ##CC;
border-bottom:1px solid ##CC;
text-shadow: none;
......@@ -622,6 +657,10 @@ div.directory {
padding-right: 6px;
}
.directory td.entry a {
outline:none;
}
.directory td.desc {
width: 100%;
padding-left: 6px;
......@@ -1089,15 +1128,5 @@ tr.heading h2 {
overflow:inherit;
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 @@
" margin-left: -1cm;\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-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"
"pre.fragment {\n"
" border: 1px solid ##CC;\n"
" background-color: ##FC;\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"
"span.lineno {\n"
" padding-right: 4px;\n"
" text-align: right;\n"
" border-right: 2px solid #0F0;\n"
" background-color: #E8E8E8;\n"
" white-space: pre;\n"
"}\n"
"span.lineno a {\n"
" background-color: #D8D8D8;\n"
"}\n"
"\n"
"span.lineno a:hover {\n"
" background-color: #C8C8C8;\n"
"}\n"
"\n"
"div.ah {\n"
......@@ -581,8 +616,8 @@
"\n"
"span.mlabel {\n"
" background-color: ##88;\n"
" border-top:1px solid ##55;\n"
" border-left:1px solid ##55;\n"
" border-top:1px solid ##70;\n"
" border-left:1px solid ##70;\n"
" border-right:1px solid ##CC;\n"
" border-bottom:1px solid ##CC;\n"
" text-shadow: none;\n"
......@@ -622,6 +657,10 @@
" padding-right: 6px;\n"
"}\n"
"\n"
".directory td.entry a {\n"
" outline:none;\n"
"}\n"
"\n"
".directory td.desc {\n"
" width: 100%;\n"
" padding-left: 6px;\n"
......@@ -1089,15 +1128,5 @@
" overflow:inherit;\n"
" display:inline;\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"
......@@ -68,10 +68,10 @@ function toggleInherit(id)
var img = $('tr.inherit_header.'+id+' img');
var src = $(img).attr('src');
if (rows.filter(':first').is(':visible')===true) {
rows.hide();
rows.css('display','none');
$(img).attr('src',src.substring(0,src.length-8)+'closed.png');
} 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');
}
}
......
......@@ -68,10 +68,10 @@
" var img = $('tr.inherit_header.'+id+' img');\n"
" var src = $(img).attr('src');\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"
" } 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"
" }\n"
"}\n"
......
......@@ -49,7 +49,7 @@ class DevNullCodeDocInterface : public CodeOutputInterface
const char *) {}
virtual void writeLineNumber(const char *,const char *,
const char *,int) {}
virtual void startCodeLine() {}
virtual void startCodeLine(bool) {}
virtual void endCodeLine() {}
virtual void startCodeAnchor(const char *) {}
virtual void endCodeAnchor() {}
......@@ -341,7 +341,11 @@ void FileDef::writeIncludeGraph(OutputList &ol)
{
//printf("Graph for file %s\n",name().data());
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.disable(OutputGenerator::Man);
......@@ -361,7 +365,11 @@ void FileDef::writeIncludedByGraph(OutputList &ol)
{
//printf("Graph for file %s\n",name().data());
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.disable(OutputGenerator::Man);
......
......@@ -211,7 +211,7 @@ void FormulaList::generateBitmaps(const char *path)
err("error: ghostscript produced an illegal image format!");
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.
while (!t.eof() && (s=t.readLine().utf8()) && !s.isEmpty() && s.at(0)=='#') { }
sscanf(s,"%d %d",&imageX,&imageY);
......
......@@ -246,7 +246,7 @@ static void startCodeLine()
g_code->writeLineNumber(0,0,0,g_yyLineNr);
}
}
g_code->startCodeLine();
g_code->startCodeLine(g_sourceFileDef);
if (g_currentFontClass)
{
g_code->startFontClass(g_currentFontClass);
......@@ -388,11 +388,13 @@ static bool getFortranTypeDefs(const QCString &tname, const QCString &moduleName
{
UseEntry *use;
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;
return TRUE;
}
}
}
return FALSE;
......@@ -420,6 +422,10 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
// search for function
MemberName *mn = Doxygen::functionNameSDict->find(memberName);
if (!mn)
{
mn = Doxygen::memberNameSDict->find(memberName);
}
if (mn) // name is known
{
......@@ -463,7 +469,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
{
//cout << " search in only: " << moduleName << ":: " << memberName << "==" << (*it)<< endl;
if (memberName == (*it).utf8())
{
return TRUE; // found in ONLY-part of use list
}
}
}
}
......@@ -527,7 +535,7 @@ static void generateLink(CodeOutputInterface &ol, char *lname)
{
ClassDef *cd=0;
QCString tmp = lname;
tmp = tmp.lower();
tmp = removeRedundantWhiteSpace(tmp.lower());
// check if lowercase lname is a linkable type or interface
if ( (getFortranTypeDefs(tmp, currentModule, cd, useMembers)) && cd->isLinkable() )
......@@ -656,7 +664,7 @@ NUM_TYPE (complex|integer|logical|real)
LOG_OPER (\.and\.|\.eq\.|\.eqv\.|\.ge\.|\.gt\.|\.le\.|\.lt\.|\.ne\.|\.neqv\.|\.or\.|\.not\.)
KIND {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}")"
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)
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)
IGNORE (CALL)
PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)?
/* | */
......@@ -687,6 +696,7 @@ IGNORE (CALL)
%x DeclContLine
%x Parameterlist
%x String
%x Subprogend
%%
/*==================================================================*/
......@@ -712,20 +722,27 @@ IGNORE (CALL)
/*-------- use statement -------------------------------------------*/
<Start>"use"{BS_} {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
yy_push_state(YY_START);
BEGIN(Use);
}
<Use>{ID} {
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
QCString tmp = yytext;
tmp = tmp.lower();
g_insideBody=TRUE;
generateLink(*g_code, yytext);
g_insideBody=FALSE;
/* append module name to use dict */
useEntry = new UseEntry();
useEntry->module = yytext;
useMembers->append(yytext, useEntry);
addUse(yytext);
//useEntry->module = yytext;
//useMembers->append(yytext, useEntry);
//addUse(yytext);
useEntry->module = tmp;
useMembers->append(tmp, useEntry);
addUse(tmp);
}
<Use>,{BS}"ONLY" { // TODO: rename
codifyLines(yytext);
......@@ -753,7 +770,11 @@ IGNORE (CALL)
if (!stricmp(yytext,"module")) currentModule="module";
}
<ClassName>{ID} {
if (currentModule == "module") currentModule=yytext;
if (currentModule == "module")
{
currentModule=yytext;
currentModule = currentModule.lower();
}
generateLink(*g_code,yytext);
yy_pop_state();
}
......@@ -765,20 +786,13 @@ IGNORE (CALL)
currentModule=0;
REJECT;
}
<Start>^{BS}"end"({BS}("program"|"module"|"type"|"interface")({BS_}{ID})?)?{BS}/(\n|!) { //
endScope();
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
/*-------- 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");
codifyLines(yytext);
endFontClass();
}
<Start>{SUBPROG}{BS_} { // Fortran subroutine or function found
<Start>({PREFIX}{BS_})?{SUBPROG}{BS_} { // Fortran subroutine or function found
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
......@@ -793,10 +807,23 @@ IGNORE (CALL)
<Subprog>"(".* { // ignore rest of line
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();
}
<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;
endScope();
startFontClass("keyword");
......@@ -804,7 +831,7 @@ IGNORE (CALL)
endFontClass();
}
/*-------- variable declaration ----------------------------------*/
<Start>"TYPE"{BS}"(" {
<Start>"type"{BS}"(" {
yy_push_state(YY_START);
BEGIN(TypeDecl);
startFontClass("keywordtype");
......@@ -861,6 +888,7 @@ IGNORE (CALL)
}
<Declaration>"&" { // continuation line
g_code->codify(yytext);
yy_push_state(YY_START);
BEGIN(DeclContLine);
}
......
......@@ -196,7 +196,7 @@ static int yyread(char *buf,int max_size);
static void startCommentBlock(bool);
static void handleCommentBlock(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 addSubprogram(const char *text);
static void addInterface(QCString name, InterfaceType type);
......@@ -463,9 +463,8 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
// extract generic name
QCString name = QCString(yytext).stripWhiteSpace();
name = name.right(name.length() - 9).stripWhiteSpace();
name = name.right(name.length() - 9).stripWhiteSpace().lower();
addInterface(name, ifType);
startScope(last_entry);
}
}
......@@ -490,7 +489,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
current->section = Entry::FUNCTION_SEC ;
current->name = yytext;
moduleProcedures.append(current);
addCurrentEntry();
addCurrentEntry(1);
}
<ModuleProcedure>"\n" { yyColNr -= 1;
unput(*yytext);
......@@ -608,7 +607,7 @@ private {
current->name = current_root->name + "::" + current->name;
}
addCurrentEntry();
addCurrentEntry(1);
startScope(last_entry);
BEGIN(TypedefBody);
}
......@@ -639,7 +638,7 @@ private {
current->name = name;
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
addCurrentEntry();
addCurrentEntry(1);
}
{BS}"=>"[^(\n|\!)]* { /* Specific bindings come after the ID. */
last_entry->args = yytext;
......@@ -689,7 +688,7 @@ private {
addModule(NULL);
yy_push_state(ModuleBody); //anon program
}
argType = QCString(yytext).simplifyWhiteSpace();
argType = QCString(yytext).simplifyWhiteSpace().lower();
yy_push_state(AttributeList);
}
/* Dimitri: macro expansion should already be done during preprocessing not here!
......@@ -781,7 +780,7 @@ private {
current->type = argType;
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
addCurrentEntry();
addCurrentEntry(1);
}
else if (!argType.isEmpty())
{ // declaration of parameter list: add type for corr. parameter
......@@ -925,7 +924,7 @@ private {
/*------ fortran subroutine/function handling ------------------------------------------------------------*/
/* 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)
{
addInterface("$interface$", ifType);
......@@ -977,7 +976,7 @@ private {
<Parameterlist>")" {
current->args += ")";
current->args = removeRedundantWhiteSpace(current->args);
addCurrentEntry();
addCurrentEntry(1);
startScope(last_entry);
BEGIN(SubprogBody);
}
......@@ -1003,7 +1002,7 @@ private {
newLine();
//printf("3=========> without parameterlist \n");
//current->argList = ;
addCurrentEntry();
addCurrentEntry(1);
startScope(last_entry);
BEGIN(SubprogBody);
}
......@@ -1891,10 +1890,10 @@ static void initEntry()
/**
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());
current->name = current->name.lower();
current_root->addSubEntry(current);
last_entry = current;
current = new Entry ;
......@@ -1928,7 +1927,7 @@ static void addModule(const char *name, bool isModule)
current->fileName = yyFileName;
current->bodyLine = yyLineNr; // used for source reference
current->protection = Public ;
addCurrentEntry();
addCurrentEntry(1);
startScope(last_entry);
}
......@@ -1992,7 +1991,7 @@ static void addInterface(QCString name, InterfaceType type)
current->fileName = yyFileName;
current->bodyLine = yyLineNr;
addCurrentEntry();
addCurrentEntry(1);
}
......@@ -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);
if (needsEntry) addCurrentEntry();
if (needsEntry) addCurrentEntry(0);
}
//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
static void generateTreeViewImages();
void generateTreeViewScripts();
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 generateJSTreeTopLevel(FTextStream &tidx,FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
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 generateJSLink(FTextStream &t,FTVNode *n);
QList<FTVNode> *m_indentNodes;
......
......@@ -352,9 +352,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
break;
case DocVerbatim::Verbatim:
forceEndParagraph(s);
m_t << PREFRAG_START;
m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
filter(s->text());
m_t << PREFRAG_END;
m_t << "</pre>" /*<< PREFRAG_END*/;
forceStartParagraph(s);
break;
case DocVerbatim::HtmlOnly:
......@@ -477,9 +477,9 @@ void HtmlDocVisitor::visit(DocInclude *inc)
break;
case DocInclude::VerbInclude:
forceEndParagraph(inc);
m_t << PREFRAG_START;
m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
filter(inc->text());
m_t << PREFRAG_END;
m_t << "</pre>" /*<< PREFRAG_END*/;
forceStartParagraph(inc);
break;
case DocInclude::Snippet:
......
......@@ -2234,13 +2234,15 @@ void HtmlGenerator::startDotGraph()
void HtmlGenerator::endDotGraph(const DotClassGraph &g)
{
bool generateLegend = Config_getBool("GENERATE_LEGEND");
bool umlLook = Config_getBool("UML_LOOK");
endSectionHeader(t);
startSectionSummary(t,m_sectionCount);
endSectionSummary(t);
startSectionContent(t,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\">[";
startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension);
......@@ -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,
const char *filename,const char *anchor,
const char *title)
......@@ -3072,4 +3052,50 @@ void HtmlGenerator::writeInheritedSectionTitle(const char *id,
<< "</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 @@
#include "qtbc.h"
#include "outputgen.h"
#define PREFRAG_START "<div class=\"fragment\"><pre class=\"fragment\">"
#define PREFRAG_END "</pre></div>"
//#define PREFRAG_START "<div class=\"fragment\"><pre class=\"fragment\">"
//#define PREFRAG_END "</pre></div>"
#define PREFRAG_START "<div class=\"fragment\">"
#define PREFRAG_END "</div><!-- fragment -->"
class QFile;
class FTextStream;
......@@ -144,8 +146,8 @@ class HtmlGenerator : public OutputGenerator
void startCodeFragment() { t << PREFRAG_START; }
void endCodeFragment() { t << PREFRAG_END; }
void writeLineNumber(const char *,const char *,const char *,int);
void startCodeLine() { col=0; }
void endCodeLine() { codify("\n"); }
void startCodeLine(bool);
void endCodeLine();
void startEmphasis() { t << "<em>"; }
void endEmphasis() { t << "</em>"; }
void startBold() { t << "<b>"; }
......@@ -164,8 +166,8 @@ class HtmlGenerator : public OutputGenerator
const char *anchor,const char *name,
const char *args);
void endDoxyAnchor(const char *fName,const char *anchor);
void startCodeAnchor(const char *label) { t << "<a name=\"" << label << "\"></a>"; }
void endCodeAnchor() { }
void startCodeAnchor(const char *label);
void endCodeAnchor();
void writeLatexSpacing() {}
void writeStartAnnoItem(const char *type,const char *file,
const char *path,const char *name);
......
This diff is collapsed.
......@@ -244,7 +244,7 @@ void LatexDocVisitor::visit(DocSymbol *s)
if (m_hide) return;
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::Less: if (m_insidePre) m_t << "<"; else m_t << "$<$";
break;
......
......@@ -1662,7 +1662,9 @@ void LatexGenerator::writeCodeLink(const char *ref,const char *f,
if (f) t << stripPath(f);
if (f && anchor) t << "_";
if (anchor) t << anchor;
t << "}{" << name << "}";
t << "}{";
codify(name);
t << "}";
}
else
{
......@@ -2516,7 +2518,7 @@ void LatexGenerator::writeLineNumber(const char *ref,const char *fileName,const
}
}
void LatexGenerator::startCodeLine()
void LatexGenerator::startCodeLine(bool)
{
col=0;
}
......
......@@ -132,7 +132,7 @@ class LatexGenerator : public OutputGenerator
void startCodeFragment();
void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l);
void startCodeLine();
void startCodeLine(bool hasLineNumbers);
void endCodeLine();
void startEmphasis() { t << "{\\em "; }
void endEmphasis() { t << "}"; }
......
......@@ -128,7 +128,7 @@ class ManGenerator : public OutputGenerator
void startCodeFragment();
void endCodeFragment();
void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
void startCodeLine() {}
void startCodeLine(bool) {}
void endCodeLine() { codify("\n"); col=0; }
void startEmphasis() { t << "\\fI"; firstCol=FALSE; }
void endEmphasis() { t << "\\fP"; firstCol=FALSE; }
......
......@@ -976,22 +976,22 @@ static void processInline(GrowBuf &out,const char *data,int size)
/** returns whether the line is a setext-style hdr underline */
static int isHeaderline(const char *data, int size)
{
int i = 0;
int i=0, c=0;
while (i<size && data[i]==' ') i++;
// test of level 1 header
if (data[i]=='=')
{
while (i<size && data[i]=='=') i++;
while (i<size && data[i]=='=') i++,c++;
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
if (data[i]=='-')
{
while (i<size && data[i]=='-') i++;
while (i<size && data[i]=='-') i++,c++;
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;
}
......@@ -1713,6 +1713,7 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
int i=0,end;
//printf("writeCodeBlock: data={%s}\n",QCString(data).left(size).data());
out.addStr("@verbatim\n");
int emptyLines=0;
while (i<size)
{
// find end of this line
......@@ -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());
if (j==end-1) // empty line
{
// add empty line
out.addStr("\n");
emptyLines++;
i=end;
}
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
out.addStr(data+i+refIndent+codeBlockIndent,end-i-refIndent-codeBlockIndent);
i=end;
......@@ -1740,6 +1746,12 @@ static int writeCodeBlock(GrowBuf &out,const char *data,int size,int refIndent)
}
}
out.addStr("@endverbatim\n");
while (emptyLines>0) // write skipped empty lines
{
// add empty line
out.addStr("\n");
emptyLines--;
}
//printf("i=%d\n",i);
return i;
}
......
This diff is collapsed.
......@@ -185,6 +185,7 @@ class MemberDef : public Definition
MemberDef *reimplements() const;
LockingPtr< MemberList > reimplementedBy() const;
bool isReimplementedBy(ClassDef *cd) const;
//int inbodyLine() const;
//QCString inbodyFile() const;
......@@ -348,7 +349,7 @@ class MemberDef : public Definition
// output generation
void writeDeclaration(OutputList &ol,
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,
const char *scopeName,Definition *container,
bool inGroup,bool showEnumValues=FALSE,bool
......@@ -378,6 +379,15 @@ class MemberDef : public Definition
void _computeIsConstructor();
void _computeIsDestructor();
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;
// disable copying of member defs
......
......@@ -118,11 +118,11 @@ void MemberGroup::writeDeclarations(OutputList &ol,
void MemberGroup::writePlainDeclarations(OutputList &ol,
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());
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,
......@@ -138,7 +138,8 @@ void MemberGroup::writeDocumentationPage(OutputList &ol,const char *scopeName,
}
void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
MemberList::ListType lt,const QCString &inheritId)
MemberList::ListType lt,
ClassDef *inheritedFrom,const QCString &inheritId)
{
//printf("** addGroupedInheritedMembers()\n");
MemberListIterator li(*memberList);
......@@ -150,7 +151,7 @@ void MemberGroup::addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
{
MemberList ml(lt);
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()
return m_numDocMembers;
}
int MemberGroup::countInheritableMembers(ClassDef *inheritedFrom) const
{
return memberList->countInheritableMembers(inheritedFrom);
}
void MemberGroup::distributeMemberGroupDocumentation()
{
//printf("MemberGroup::distributeMemberGroupDocumentation() %s\n",grpHeader.data());
......
......@@ -49,7 +49,7 @@ class MemberGroup
void setAnchors(ClassDef *);
void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId);
ClassDef *inheritedFrom,const char *inheritId);
void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
bool showInline=FALSE);
......@@ -58,7 +58,8 @@ class MemberGroup
void writeDocumentationPage(OutputList &ol,const char *scopeName,
Definition *container);
void addGroupedInheritedMembers(OutputList &ol,ClassDef *cd,
MemberList::ListType lt,const QCString &inheritId);
MemberList::ListType lt,
ClassDef *inheritedFrom,const QCString &inheritId);
QCString documentation() { return doc; }
bool allMembersInSameSection() { return inSameSection; }
......@@ -78,6 +79,7 @@ class MemberGroup
int friendCount() const;
int numDecMembers() const;
int numDocMembers() const;
int countInheritableMembers(ClassDef *inheritedFrom) const;
void setInGroup(bool b);
void addListReferences(Definition *d);
void setRefItems(const QList<ListItemInfo> *sli);
......
......@@ -67,6 +67,47 @@ int MemberList::compareItems(GCI item1, GCI item2)
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
* the declaration part of a compound's documentation page.
*/
......@@ -252,7 +293,7 @@ bool MemberList::declVisible() const
void MemberList::writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId
ClassDef *inheritedFrom,const char *inheritId
)
{
//printf("----- writePlainDeclaration() ----\n");
......@@ -274,7 +315,8 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{
//printf(">>> Member `%s' type=%d visible=%d\n",
// md->name().data(),md->memberType(),md->isBriefSectionVisible());
if (md->isBriefSectionVisible())
if ((inheritedFrom==0 || !md->isReimplementedBy(inheritedFrom)) &&
md->isBriefSectionVisible())
{
switch(md->memberType())
{
......@@ -290,7 +332,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
case MemberDef::Event:
{
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;
}
case MemberDef::Enumeration:
......@@ -354,13 +396,14 @@ void MemberList::writePlainDeclarations(OutputList &ol,
break;
}
case MemberDef::Friend:
if (inheritedFrom==0)
{
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;
}
case MemberDef::EnumValue:
......@@ -369,7 +412,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{
//printf("EnumValue!\n");
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;
......@@ -411,16 +454,32 @@ void MemberList::writePlainDeclarations(OutputList &ol,
//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,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle, bool showEnumValues,
bool showInline,ClassDef *inheritedFrom)
{
(void)showEnumValues; // unused
//printf("----- writeDeclaration() this=%p ---- inheritedFrom=%p\n",this,inheritedFrom);
static bool optimizeVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString inheritId;
countDecMembers(showEnumValues,gd); // count members shown in this section
countDecMembers(/*showEnumValues*/FALSE,gd); // count members shown in this section
Definition *ctx = cd;
if (ctx==0 && nd) ctx = nd;
if (ctx==0 && gd) ctx = gd;
......@@ -432,7 +491,7 @@ void MemberList::writeDeclarations(OutputList &ol,
int num = numDecMembers();
if (inheritedFrom)
{
if (cd && !optimizeVhdl)
if ( cd && !optimizeVhdl && countInheritableMembers(inheritedFrom)>0 )
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......@@ -494,7 +553,7 @@ void MemberList::writeDeclarations(OutputList &ol,
}
else
{
writePlainDeclarations(ol,cd,nd,fd,gd,inheritId);
writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
}
//printf("memberGroupList=%p\n",memberGroupList);
......@@ -524,7 +583,7 @@ void MemberList::writeDeclarations(OutputList &ol,
ol.startMemberGroup();
}
//printf("--- mg->writePlainDeclarations ---\n");
mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritId);
mg->writePlainDeclarations(ol,cd,nd,fd,gd,inheritedFrom,inheritId);
if (inheritId.isEmpty())
{
ol.endMemberGroup(hasHeader);
......@@ -537,7 +596,7 @@ void MemberList::writeDeclarations(OutputList &ol,
{
// also add members that of this list type, that are grouped together
// in a separate list in class 'inheritedFrom'
cd->addGroupedInheritedMembers(ol,m_listType,inheritId);
cd->addGroupedInheritedMembers(ol,m_listType,inheritedFrom,inheritId);
}
//printf("----- end writeDeclaration() ----\n");
}
......
......@@ -136,9 +136,10 @@ class MemberList : public QList<MemberDef>
bool needsSorting() const { return m_needsSorting; }
void countDecMembers(bool countEnumValues=FALSE,GroupDef *gd=0);
void countDocMembers(bool countEnumValues=FALSE);
int countInheritableMembers(ClassDef *inheritedFrom) const;
void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *inheritId);
ClassDef *inheritedFrom,const char *inheritId);
void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle,
......
......@@ -76,6 +76,7 @@
display:block;
padding:0px;
margin:0px;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
#side-nav {
......@@ -115,6 +116,7 @@
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: ##FA;
-webkit-overflow-scrolling : touch; /* iOS 5+ */
}
@media print
......
var navTreeIndex;
var navTreeSubIndices = new Array();
function getData(varName)
{
......@@ -13,6 +13,14 @@ function stripPath(uri)
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)
{
var head = document.getElementsByTagName("head")[0];
......@@ -297,7 +305,8 @@ function showNode(o, node, index)
showNode(o,node,index); // retry with child node expanded
},true);
} else {
if (o.toroot=="index.html" /*|| n.childrenData*/) {
var rootBase = o.toroot.replace(/\..+$/, '');
if (rootBase=="index" || rootBase=="pages") {
expandNode(o, n, true, true);
}
selectAndHighlight(n);
......@@ -320,24 +329,47 @@ function getNode(o, po)
}
}
function gotoNode(o,root,hash)
function gotoNode(o,subIndex,root,hash)
{
var nti = navTreeIndex[root+hash];
o.breadcrumbs = nti ? nti : navTreeIndex[root];
if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex["index.html"];
o.breadcrumbs.unshift(0);
showNode(o, o.node, 0);
var nti = navTreeSubIndices[subIndex][root+hash];
o.breadcrumbs = nti ? nti : navTreeSubIndices[subIndex][root];
if (o.breadcrumbs)
{
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)
{
if (navTreeIndex){
gotoNode(o,root,hash);
gotoSubIndex(o,root,hash,relpath);
} else {
getScript(relpath+"navtreeindex",function(){
navTreeIndex = eval('NAVTREEINDEX');
if (navTreeIndex){
gotoNode(o,root,hash);
gotoSubIndex(o,root,hash,relpath);
}
},true);
}
......@@ -377,7 +409,7 @@ function initNavTree(toroot,relpath)
$('.item').removeClass('selected');
$('.item').removeAttr('id');
}
var link=stripPath($(location).attr('pathname'));
var link=stripPath2($(location).attr('pathname'));
navTo(o,link,$(location).attr('hash'),relpath);
}
})
......
......@@ -76,6 +76,7 @@
" display:block;\n"
" padding:0px;\n"
" margin:0px;\n"
" -webkit-overflow-scrolling : touch; /* iOS 5+ */\n"
"}\n"
"\n"
"#side-nav {\n"
......@@ -115,6 +116,7 @@
" background-image:url('nav_h.png');\n"
" background-repeat:repeat-x;\n"
" background-color: ##FA;\n"
" -webkit-overflow-scrolling : touch; /* iOS 5+ */\n"
"}\n"
"\n"
"@media print\n"
......
"\n"
"var navTreeIndex;\n"
"var navTreeSubIndices = new Array();\n"
"\n"
"function getData(varName)\n"
"{\n"
......@@ -13,6 +13,14 @@
" return uri.substring(uri.lastIndexOf('/')+1);\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"
"{\n"
" var head = document.getElementsByTagName(\"head\")[0]; \n"
......@@ -297,7 +305,8 @@
" showNode(o,node,index); // retry with child node expanded\n"
" },true);\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"
" }\n"
" selectAndHighlight(n);\n"
......@@ -320,24 +329,47 @@
" }\n"
"}\n"
"\n"
"function gotoNode(o,root,hash)\n"
"function gotoNode(o,subIndex,root,hash)\n"
"{\n"
" var nti = navTreeIndex[root+hash];\n"
" o.breadcrumbs = nti ? nti : navTreeIndex[root];\n"
" if (o.breadcrumbs==null) o.breadcrumbs = navTreeIndex[\"index.html\"];\n"
" o.breadcrumbs.unshift(0);\n"
" showNode(o, o.node, 0);\n"
" var nti = navTreeSubIndices[subIndex][root+hash];\n"
" o.breadcrumbs = nti ? nti : navTreeSubIndices[subIndex][root];\n"
" if (o.breadcrumbs)\n"
" {\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"
"function navTo(o,root,hash,relpath)\n"
"{\n"
" if (navTreeIndex){\n"
" gotoNode(o,root,hash);\n"
" gotoSubIndex(o,root,hash,relpath);\n"
" } else {\n"
" getScript(relpath+\"navtreeindex\",function(){\n"
" navTreeIndex = eval('NAVTREEINDEX');\n"
" if (navTreeIndex){\n"
" gotoNode(o,root,hash);\n"
" gotoSubIndex(o,root,hash,relpath);\n"
" }\n"
" },true);\n"
" } \n"
......@@ -377,7 +409,7 @@
" $('.item').removeClass('selected');\n"
" $('.item').removeAttr('id');\n"
" }\n"
" var link=stripPath($(location).attr('pathname'));\n"
" var link=stripPath2($(location).attr('pathname'));\n"
" navTo(o,link,$(location).attr('hash'),relpath);\n"
" }\n"
" })\n"
......
......@@ -65,7 +65,7 @@ class CodeOutputInterface
virtual void writeLineNumber(const char *ref,const char *file,
const char *anchor,int lineNumber) = 0;
virtual void startCodeLine() = 0;
virtual void startCodeLine(bool hasLineNumbers) = 0;
virtual void endCodeLine() = 0;
virtual void startCodeAnchor(const char *label) = 0;
virtual void endCodeAnchor() = 0;
......
......@@ -231,8 +231,8 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startCodeFragment); }
void endCodeFragment()
{ forall(&OutputGenerator::endCodeFragment); }
void startCodeLine()
{ forall(&OutputGenerator::startCodeLine); }
void startCodeLine(bool hasLineNumbers)
{ forall(&OutputGenerator::startCodeLine,hasLineNumbers); }
void endCodeLine()
{ forall(&OutputGenerator::endCodeLine); }
void writeLineNumber(const char *ref,const char *file,const char *anchor,
......
......@@ -248,14 +248,17 @@ void PageDef::writePageDocumentation(OutputList &ol)
bool PageDef::visibleInIndex() const
{
return // not part of a group
!getGroupDef() &&
// not an externally defined page
(!isReference() || Config_getBool("ALLEXTERNALS")) &&
// not a subpage
(getOuterScope()==0 ||
getOuterScope()->definitionType()!=Definition::TypePage
);
static bool allExternals = Config_getBool("ALLEXTERNALS");
return // not part of a group
!getGroupDef() &&
// not an externally defined page
(!isReference() || allExternals)
// &&
// not a subpage
//(getOuterScope()==0 ||
// getOuterScope()->definitionType()!=Definition::TypePage
//)
;
}
bool PageDef::documentedPage() const
......
......@@ -382,7 +382,7 @@ static void startCodeLine()
}
//g_code->endLineNumber();
}
g_code->startCodeLine();
g_code->startCodeLine(g_sourceFileDef);
if (g_currentFontClass)
{
g_code->startFontClass(g_currentFontClass);
......
......@@ -76,6 +76,18 @@ function initResizable()
if (i>=0) window.location.hash=url.substr(i);
var _preventDefault = function(evt) { evt.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 @@
" if (i>=0) window.location.hash=url.substr(i);\n"
" var _preventDefault = function(evt) { evt.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"
......@@ -123,7 +123,7 @@ class RTFGenerator : public OutputGenerator
void startCodeFragment();
void endCodeFragment();
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 startEmphasis() { t << "{\\i "; }
void endEmphasis() { t << "}"; }
......
......@@ -353,7 +353,7 @@ class SDict
class IteratorDict; // first forward declare
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.
*/
class IteratorDict
......
......@@ -1799,7 +1799,7 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
void linkifyText(const TextGeneratorIntf &out,Definition *scope,
FileDef *fileScope,const char *,
FileDef *fileScope,Definition *self,
const char *text, bool autoBreak,bool external,
bool keepSpaces,int indentLevel)
{
......@@ -1882,11 +1882,14 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
//printf("Found typedef %s\n",typeDef->name().data());
if (external ? typeDef->isLinkable() : typeDef->isLinkableInProject())
{
out.writeLink(typeDef->getReference(),
typeDef->getOutputFileBase(),
typeDef->anchor(),
word);
found=TRUE;
if (typeDef->getOuterScope()!=self)
{
out.writeLink(typeDef->getReference(),
typeDef->getOutputFileBase(),
typeDef->anchor(),
word);
found=TRUE;
}
}
}
if (!found && cd)
......@@ -1895,8 +1898,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
// add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject())
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
if (cd!=self)
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
}
}
}
else if ((cd=getClass(matchWord+"-p"))) // search for Obj-C protocols as well
......@@ -1904,8 +1910,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
// add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject())
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
if (cd!=self)
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
}
}
}
else if ((cd=getClass(matchWord+"-g"))) // C# generic as well
......@@ -1913,8 +1922,11 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
// add link to the result
if (external ? cd->isLinkable() : cd->isLinkableInProject())
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
if (cd!=self)
{
out.writeLink(cd->getReference(),cd->getOutputFileBase(),cd->anchor(),word);
found=TRUE;
}
}
}
else
......@@ -1951,10 +1963,14 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,
//printf("Found ref scope=%s\n",d?d->name().data():"<global>");
//ol.writeObjectLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),word);
out.writeLink(md->getReference(),md->getOutputFileBase(),
md->anchor(),word);
//printf("found symbol %s\n",matchWord.data());
found=TRUE;
if (md!=self && (self==0 || md->name()!=self->name()))
// name check is needed for overloaded members, where getDefs just returns one
{
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,
else if (*p=='>')
{ t << "$>$"; p++; }
else
{ t << "$\\backslash$"; }
{ t << "\\textbackslash{}"; }
break;
case '"': { t << "\\char`\\\"{}"; }
break;
......
......@@ -96,7 +96,7 @@ QCString getLanguageSpecificSeparator(SrcLangExt lang,bool classScope=FALSE);
void linkifyText(const TextGeneratorIntf &ol,
Definition *scope,
FileDef *fileScope,
const char *name,
Definition *self,
const char *text,
bool autoBreak=FALSE,
bool external=TRUE,
......
......@@ -225,7 +225,7 @@ static void startCodeLine()
g_code->writeLineNumber(0,0,0,g_yyLineNr);
}
}
g_code->startCodeLine();
g_code->startCodeLine(g_sourceFileDef);
if (g_currentFontClass)
{
g_code->startFontClass(g_currentFontClass);
......
......@@ -2119,8 +2119,11 @@ static void addCompInst(char *n, char* instName, char* comp,int iLine)
initEntry(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
{
......
......@@ -1016,9 +1016,9 @@ void isVhdlDocPending()
{
if (!str_doc.pending)
return;
str_doc.pending=FALSE;
oldEntry=0; // prevents endless recursion
iDocLine=str_doc.iDocLine;
handleCommentBlock(str_doc.doc,str_doc.brief);
iDocLine=-1;
str_doc.pending=FALSE;
}
......@@ -298,7 +298,7 @@ class XMLCodeGenerator : public CodeOutputInterface
writeXMLLink(m_t,ref,file,anchor,name,tooltip);
col+=strlen(name);
}
void startCodeLine()
void startCodeLine(bool)
{
XML_DB(("(startCodeLine)\n"));
m_t << "<codeline";
......@@ -770,7 +770,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
QCString typeStr = md->typeString(); //replaceAnonymousScopes(md->typeString());
stripQualifiers(typeStr);
t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),typeStr);
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,typeStr);
t << "</type>" << endl;
t << " <definition>" << convertToXML(md->definition()) << "</definition>" << endl;
t << " <argsstring>" << convertToXML(md->argsString()) << "</argsstring>" << endl;
......@@ -833,7 +833,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (!a->type.isEmpty())
{
t << " <type>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),a->type);
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a->type);
t << "</type>" << endl;
}
if (!a->name.isEmpty())
......@@ -857,7 +857,7 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (!a->defval.isEmpty())
{
t << " <defval>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),a->defval);
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,a->defval);
t << "</defval>" << endl;
}
if (defArg && defArg->hasDocumentation())
......@@ -895,14 +895,14 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (!md->initializer().isEmpty() && md->initializer().length()<2000)
{
t << " <initializer>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->initializer());
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->initializer());
t << "</initializer>" << endl;
}
if (md->excpString())
{
t << " <exceptions>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->excpString());
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->excpString());
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