Commit 48f4fd9c authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.7.2-20101224

parent dd7602fd
......@@ -190,7 +190,7 @@ ENUM_VALUES_PER_LINE = 4
GENERATE_TREEVIEW = YES
USE_INLINE_TREES = YES
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = YES
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
......
DOXYGEN Version 1.7.2-20101118
DOXYGEN Version 1.7.2-20101224
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (18 November 2010)
Dimitri van Heesch (24 December 2010)
DOXYGEN Version 1.7.2_20101118
DOXYGEN Version 1.7.2_20101224
Please read INSTALL for compilation instructions.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (18 November 2010)
Dimitri van Heesch (dimitri@stack.nl) (24 December 2010)
......@@ -6,5 +6,6 @@
<file>images/file.png</file>
<file>images/folder.png</file>
<file>images/refresh.png</file>
<file>images/tunecolor.png</file>
</qresource>
</RCC>
......@@ -117,6 +117,32 @@ static void updateStringOption(
//==========================================================================
TuneColorDialog::TuneColorDialog(QWidget *parent) : QDialog(parent)
{
setWindowTitle(tr("Tune the color of the HTML output"));
QGridLayout *layout = new QGridLayout(this);
m_image = new QImage(QString::fromAscii(":/images/tunecolor.png"));
m_imageLab = new QLabel;
m_imageLab->setPixmap(QPixmap::fromImage(*m_image));
layout->addWidget(new QLabel(tr("Example output: use the sliders to change")),0,0);
layout->addWidget(m_imageLab,1,0);
QHBoxLayout *buttonsLayout = new QHBoxLayout;
QPushButton *okButton = new QPushButton(tr("Ok"));
connect(okButton,SIGNAL(clicked()),SLOT(accept()));
okButton->setDefault(true);
QPushButton *cancelButton = new QPushButton(tr("Cancel"));
connect(cancelButton,SIGNAL(clicked()),SLOT(reject()));
buttonsLayout->addStretch();
buttonsLayout->addWidget(okButton);
buttonsLayout->addWidget(cancelButton);
layout->addLayout(buttonsLayout,5,0);
}
//==========================================================================
Step1::Step1(Wizard *wizard,const QHash<QString,Input*> &modelData) : m_wizard(wizard), m_modelData(modelData)
{
QVBoxLayout *layout = new QVBoxLayout(this);
......@@ -477,9 +503,14 @@ Step3::Step3(Wizard *wizard,const QHash<QString,Input*> &modelData)
m_htmlOptionsGroup->addButton(r, 2);
// GENERATE_HTMLHELP
vbox->addWidget(r);
m_searchEnabled=new QCheckBox(tr("With search function (requires PHP enabled web server)"));
m_searchEnabled=new QCheckBox(tr("With search function"));
vbox->addWidget(m_searchEnabled);
// SEARCH_ENGINE
QHBoxLayout *hbox = new QHBoxLayout;
m_tuneColor=new QPushButton(tr("Change color..."));
hbox->addWidget(m_tuneColor);
hbox->addStretch(1);
vbox->addLayout(hbox);
m_htmlOptions->setLayout(vbox);
m_htmlOptions->setChecked(true);
}
......@@ -531,6 +562,13 @@ Step3::Step3(Wizard *wizard,const QHash<QString,Input*> &modelData)
SLOT(setHtmlOptions(int)));
connect(m_texOptionsGroup,SIGNAL(buttonClicked(int)),
SLOT(setLatexOptions(int)));
connect(m_tuneColor,SIGNAL(clicked()),SLOT(tuneColorDialog()));
}
void Step3::tuneColorDialog()
{
TuneColorDialog tuneColor(this);
tuneColor.exec();
}
void Step3::setHtmlEnabled(bool b)
......
......@@ -17,6 +17,7 @@
#include <QSplitter>
#include <QHash>
#include <QDialog>
class Input;
class QTreeWidget;
......@@ -29,12 +30,26 @@ class QRadioButton;
class QGroupBox;
class QButtonGroup;
class Wizard;
class QImage;
class QLabel;
enum OptLang { Lang_Cpp, Lang_C, Lang_Java, Lang_CS };
enum HtmlStyle { HS_Plain, HS_TreeView, HS_CHM };
enum TexStyle { TS_PDFHyper, TS_PDF, TS_PS };
enum DiagramMode { DM_None, DM_Builtin, DM_Dot };
class TuneColorDialog : public QDialog
{
Q_OBJECT
public:
TuneColorDialog(QWidget *parent=0);
private:
QImage *m_image;
QLabel *m_imageLab;
};
class Step1 : public QWidget
{
Q_OBJECT
......@@ -103,6 +118,7 @@ class Step3 : public QWidget
void setSearchEnabled(int);
void setHtmlOptions(int);
void setLatexOptions(int);
void tuneColorDialog();
private:
QGroupBox *m_texOptions;
......@@ -115,6 +131,7 @@ class Step3 : public QWidget
QCheckBox *m_rtfEnabled;
QCheckBox *m_xmlEnabled;
QCheckBox *m_searchEnabled;
QPushButton *m_tuneColor;
Wizard *m_wizard;
const QHash<QString,Input *> &m_modelData;
};
......
......@@ -20,7 +20,7 @@ doxygen_version_minor=7
doxygen_version_revision=2
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20101118
doxygen_version_mmn=20101224
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -189,6 +189,7 @@ documentation:
\refitem cmdhash \\\#
\refitem cmdperc \\\%
\refitem cmdquot \\\"
\refitem cmddcolon \\\::
\endsecreflist
The following subsections provide a list of all commands that are recognized by
......@@ -2701,6 +2702,14 @@ class Receiver
character has to be escaped in some cases, because it is used in pairs
to indicate an unformatted text fragment.
<hr>
\section cmddcolon \\::
\addindex \\\::
This command write a double colon (\::) to the output. This
character sequence has to be escaped in some cases, because it is used
to ref to documented entities.
<hr>
\htmlonly <center> \endhtmlonly
<h2>
......
......@@ -801,6 +801,16 @@ function's detailed documentation block.
putting \ref cmddeprecated "\\deprecated"
commands in the documentation.
\anchor cfg_strict_proto_matching
<dt>\c STRICT_PROTO_MATCHING <dd>
\addindex STRICT_PROTO_MATCHING
If the \c STRICT_PROTO_MATCHING option is enabled and doxygen fails to
do proper type resolution of all parameters of a function it will reject a
match between the prototype and the implementation of a member function even
if there is only one candidate or it is obvious which candidate to choose
by doing a simple string match. By disabling \c STRICT_PROTO_MATCHING doxygen
will still accept a match between prototype and implementation in such cases.
\anchor cfg_generate_todolist
<dt>\c GENERATE_TODOLIST <dd>
\addindex GENERATE_TODOLIST
......
......@@ -30,6 +30,7 @@ Maximiliano Pin: max dot pin at bitroit dot com
Albert Mora: [unreachable] amora at iua dot upf dot es
TranslatorChinese
Lang Yang: lian dot yang dot cn at gmail dot com
Li Daobing: lidaobing at gmail dot com
Wei Liu: liuwei at asiainfo dot com
......
# Doxyfile 1.6.3
# Doxyfile 1.7.2
#---------------------------------------------------------------------------
# Project related configuration options
......@@ -62,6 +62,7 @@ SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
......@@ -104,6 +105,7 @@ IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
......@@ -131,9 +133,9 @@ HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 80
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = NO
HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = YES
......@@ -165,6 +167,9 @@ USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
#---------------------------------------------------------------------------
......@@ -241,10 +246,10 @@ PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = FreeSans.ttf
DOT_FONTSIZE = 10
......@@ -263,6 +268,7 @@ DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = YES
......
......@@ -1434,6 +1434,7 @@ void ClassDef::writeSummaryLinks(OutputList &ol)
// write all documentation for this class
void ClassDef::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
QCString pageType = " ";
......@@ -1459,12 +1460,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
m_impl->tempArgs != 0);
}
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,TRUE);
if (getOuterScope()!=Doxygen::globalScope)
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_ClassVisible,!generateTreeView);
if (!generateTreeView)
{
writeNavigationPath(ol);
if (getOuterScope()!=Doxygen::globalScope)
{
writeNavigationPath(ol);
}
ol.endQuickIndices();
}
ol.endQuickIndices();
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
......@@ -1621,8 +1625,15 @@ void ClassDef::writeDocumentation(OutputList &ol)
writeDocAnchorsToTagFile();
Doxygen::tagFile << " </compound>" << endl;
}
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFile(ol);
endFile(ol,TRUE);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
......@@ -1730,14 +1741,23 @@ void ClassDef::writeMemberList(OutputList &ol)
{
static bool cOpt = Config_getBool("OPTIMIZE_OUTPUT_FOR_C");
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
if (m_impl->allMemberNameInfoSDict==0 || cOpt) return;
// only for HTML
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QCString memListFile = getMemberListFileName();
startFile(ol,memListFile,memListFile,
theTranslator->trMemberList(),HLI_ClassVisible);
startFile(ol,memListFile,memListFile,theTranslator->trMemberList(),
HLI_ClassVisible,!generateTreeView,getOutputFileBase());
if (!generateTreeView)
{
if (getOuterScope()!=Doxygen::globalScope)
{
writeNavigationPath(ol);
}
ol.endQuickIndices();
}
startTitle(ol,0);
ol.parseText(displayName()+" "+theTranslator->trMemberList());
endTitle(ol,0,0);
......
......@@ -1890,8 +1890,14 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
bool ambig;
bool found=FALSE;
FileDef *fd=0;
//printf("looking for include %s\n",yytext);
if ((fd=findFileDef(Doxygen::inputNameDict,yytext,ambig)) &&
QCString absPath = yytext;
if (g_sourceFileDef && QDir::isRelativePath(absPath))
{
absPath = QDir::cleanDirPath(g_sourceFileDef->getPath()+"/"+absPath);
}
//printf("looking for include %s -> %s\n",yytext,absPath.data());
if ((fd=findFileDef(Doxygen::inputNameDict,absPath,ambig)) &&
fd->isLinkable())
{
if (ambig) // multiple input files match the name
......
......@@ -1303,6 +1303,7 @@ void Config::check()
filePatternList.append("*.py");
filePatternList.append("*.f90");
filePatternList.append("*.f");
filePatternList.append("*.for");
filePatternList.append("*.vhd");
filePatternList.append("*.vhdl");
if (portable_fileSystemIsCaseSensitive())
......
......@@ -14,6 +14,17 @@ by quotes) that should identify the project. ' defval=''/>
The PROJECT_NUMBER tag can be used to enter a project or revision number.
This could be handy for archiving the generated documentation or
if some version control system is used.
' defval=''/>
<option type='string' id='PROJECT_BRIEF' format='string' docs='
Using the PROJECT_BRIEF tag one can provide an optional one line description
for a project that appears at the top of each page and should give viewer
a quick idea about the purpose of the project. Keep the description short.
' defval=''/>
<option type='string' id='PROJECT_LOGO' format='file' docs='
With the PROJECT_LOGO tag one can specify an logo or icon that is
included in the documentation. The maximum height of the logo should not
exceed 55 pixels and the maximum width should not exceed 200 pixels.
Doxygen will copy the logo to the output directory.
' defval=''/>
<option type='string' id='OUTPUT_DIRECTORY' format='dir' docs='
The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
......@@ -565,7 +576,7 @@ and *.h) to filter out the source-files in the directories. If left
blank the following patterns are tested:
*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
*.f90 *.f *.vhd *.vhdl
*.f90 *.f *.for *.vhd *.vhdl
'>
<value name='*.c'/>
<value name='*.cc'/>
......@@ -596,6 +607,7 @@ blank the following patterns are tested:
<value name='*.py'/>
<value name='*.f90'/>
<value name='*.f'/>
<value name='*.for'/>
<value name='*.vhd'/>
<value name='*.vhdl'/>
</option>
......@@ -666,7 +678,7 @@ input file. Doxygen will then use the output that the filter program writes
to standard output. If FILTER_PATTERNS is specified, this tag will be
ignored.
' defval=''/>
<option type='list' id='FILTER_PATTERNS' format='file' docs='
<option type='list' id='FILTER_PATTERNS' format='string' docs='
The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
basis. Doxygen will compare the file name with each pattern and apply the
filter if there is a match. The filters are a list of the form:
......@@ -680,7 +692,7 @@ If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
INPUT_FILTER) will be used to filter the input files when producing source
files to browse (i.e. when SOURCE_BROWSER is set to YES).
' defval='0'/>
<option type='list' id='FILTER_SOURCE_PATTERNS' format='file' docs='
<option type='list' id='FILTER_SOURCE_PATTERNS' format='string' docs='
The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
pattern. A pattern will override the setting for FILTER_PATTERN (if any)
and it is also possible to disable source filtering for a specific pattern
......
......@@ -43,6 +43,20 @@ void addConfigOptions(Config *cfg)
"if some version control system is used."
);
//----
cs = cfg->addString(
"PROJECT_BRIEF",
"Using the PROJECT_BRIEF tag one can provide an optional one line description for a project that appears at the top of each page and should give viewer a quick idea about the purpose of the project. Keep the description short."
);
//----
cs = cfg->addString(
"PROJECT_LOGO",
"With the PROJECT_LOGO tag one can specify an logo or icon that is\n"
"included in the documentation. The maximum height of the logo should not\n"
"exceed 55 pixels and the maximum width should not exceed 200 pixels.\n"
"Doxygen will copy the logo to the output directory."
);
cs->setWidgetType(ConfigString::File);
//----
cs = cfg->addString(
"OUTPUT_DIRECTORY",
"The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)\n"
......@@ -811,7 +825,7 @@ void addConfigOptions(Config *cfg)
"blank the following patterns are tested:\n"
"*.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh\n"
"*.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py\n"
"*.f90 *.f *.vhd *.vhdl"
"*.f90 *.f *.for *.vhd *.vhdl"
);
cl->addValue("*.c");
cl->addValue("*.cc");
......@@ -842,6 +856,7 @@ void addConfigOptions(Config *cfg)
cl->addValue("*.py");
cl->addValue("*.f90");
cl->addValue("*.f");
cl->addValue("*.for");
cl->addValue("*.vhd");
cl->addValue("*.vhdl");
//----
......@@ -945,7 +960,6 @@ void addConfigOptions(Config *cfg)
"info on how filters are used. If FILTER_PATTERNS is empty or if\n"
"non of the patterns match the file name, INPUT_FILTER is applied."
);
cl->setWidgetType(ConfigList::File);
//----
cb = cfg->addBool(
"FILTER_SOURCE_FILES",
......@@ -964,7 +978,6 @@ void addConfigOptions(Config *cfg)
"FILTER_SOURCE_FILES is enabled."
);
cl->addDependency("FILTER_SOURCE_FILES");
cl->setWidgetType(ConfigList::File);
//---------------------------------------------------------------------------
cfg->addInfo("Source Browser","configuration options related to source browsing");
//---------------------------------------------------------------------------
......
......@@ -275,11 +275,10 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
int i=l-1;
while (i>=0 && (isspace((uchar)g_curArgTypeName.at(i)) || g_curArgTypeName.at(i)=='.')) i--;
while (i>=0 && isId(g_curArgTypeName.at(i))) i--;
//printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i);
Argument *a = new Argument;
a->attrib = g_curArgAttrib.copy();
//printf("a->type=%s a->name=%s i=%d l=%d\n",
// a->type.data(),a->name.data(),i,l);
// a->type.data(),a->name.data(),i,l);
a->array.resize(0);
if (i==l-1 && g_curArgTypeName.at(i)==')') // function argument
{
......@@ -300,24 +299,28 @@ ID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
}
else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)).stripWhiteSpace();
a->name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
// if the type becomes a type specifier only then we make a mistake
// and need to correct it to avoid seeing a nameless parameter
// "struct A" as a parameter with type "struct" and name "A".
int sv=0;
if (a->type.left(6)=="const ") sv=6;
else if (a->type.left(8)=="volatile ") sv=9;
if (a->type.mid(sv)=="struct" ||
a->type.mid(sv)=="union" ||
a->type.mid(sv)=="class" ||
a->type.mid(sv)=="typename" ||
a->type=="const" || a->type=="volatile")
if (a->type.left(6)=="const ") sv=6;
else if (a->type.left(9)=="volatile ") sv=9;
if (a->type.mid(sv)=="struct" ||
a->type.mid(sv)=="union" ||
a->type.mid(sv)=="class" ||
a->type.mid(sv)=="typename" ||
a->type=="const" ||
a->type=="volatile"
)
{
a->type = a->type + " " + a->name;
a->name.resize(0);
}
//printf(" --> a->type='%s'\n",a->type.data());
}
else // assume only the type was specified, try to determine name later
{
......
......@@ -575,6 +575,7 @@ static bool readCodeFragment(const char *fileName,
char cn=0;
while (lineNr<=endLine && !feof(f) && !found)
{
int pc=0;
while ((c=fgetc(f))!='{' && c!=':' && c!=EOF)
{
//printf("parsing char `%c'\n",c);
......@@ -586,10 +587,24 @@ static bool readCodeFragment(const char *fileName,
{
col+=Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
}
else if (pc=='/' && c=='/') // skip single line comment
{
while ((c=fgetc(f))!='\n' && c!=EOF) pc=c;
if (c=='\n') lineNr++,col=0;
}
else if (pc=='/' && c=='*') // skip C style comment
{
while (((c=fgetc(f))!='/' || pc!='*') && c!=EOF)
{
if (c=='\n') lineNr++,col=0;
pc=c;
}
}
else
{
col++;
}
pc = c;
}
if (c==':')
{
......@@ -1291,7 +1306,7 @@ void Definition::writePathFragment(OutputList &ol) const
{
m_impl->outerScope->writePathFragment(ol);
}
ol.writeString(" <li>");
ol.writeString(" <li class=\"navelem\">");
if (isLinkable())
{
if (definitionType()==Definition::TypeGroup && ((const GroupDef*)this)->groupTitle())
......@@ -1327,14 +1342,31 @@ void Definition::writePathFragment(OutputList &ol) const
void Definition::writeNavigationPath(OutputList &ol) const
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool hasCustomFooter = !Config_getString("HTML_FOOTER").isEmpty();
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString(" <div class=\"navpath\">\n");
if (generateTreeView)
{
ol.writeString("</div>\n");
}
ol.writeString(" <div id=\"nav-path\" class=\"navpath\">\n");
ol.writeString(" <ul>\n");
writePathFragment(ol);
ol.writeString(" </ul>\n");
ol.writeString(" </div>\n");
if (!hasCustomFooter)
{
if (generateTreeView) // write the doxygen logo as part of the navigation bar
{
ol.writeString(" <li class=\"footer\">");
ol.writeLogo();
ol.writeString("</li>\n");
}
ol.writeString(" </ul>\n");
ol.writeString(" </div>\n");
}
ol.popGeneratorState();
}
......
......@@ -191,12 +191,12 @@ void DirDef::writeDirectoryGraph(OutputList &ol)
{
msg("Generating dependency graph for directory %s\n",displayName().data());
ol.disable(OutputGenerator::Man);
ol.startParagraph();
//ol.startParagraph();
ol.startDirDepGraph();
//TODO: ol.parseText(theTranslator->trDirDepGraph());
ol.parseText((QCString)"Directory dependency graph for "+displayName()+":");
ol.endDirDepGraph(dirDep);
ol.endParagraph();
//ol.endParagraph();
ol.enableAll();
}
}
......@@ -318,16 +318,19 @@ void DirDef::endMemberDeclarations(OutputList &ol)
void DirDef::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
QCString shortTitle=theTranslator->trDirReference(m_shortName);
QCString title=theTranslator->trDirReference(m_dispName);
startFile(ol,getOutputFileBase(),name(),title,HLI_None,TRUE);
startFile(ol,getOutputFileBase(),name(),title,HLI_None,!generateTreeView);
// write navigation path
writeNavigationPath(ol);
ol.endQuickIndices();
if (!generateTreeView)
{
// write navigation path
writeNavigationPath(ol);
ol.endQuickIndices();
}
startTitle(ol,getOutputFileBase());
ol.pushGeneratorState();
......@@ -422,35 +425,18 @@ void DirDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
endFile(ol);
ol.popGeneratorState();
}
ol.endContents();
#if 0
void DirDef::writePathFragment(OutputList &ol) const
{
if (m_parent)
if (generateTreeView)
{
m_parent->writePathFragment(ol);
ol.writeString("&#160;/&#160;");
writeNavigationPath(ol);
}
ol.writeObjectLink(getReference(),getOutputFileBase(),0,shortName());
}
void DirDef::writeNavigationPath(OutputList &ol)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
endFile(ol,TRUE);
ol.popGeneratorState();
ol.writeString("<div class=\"nav\">\n");
writePathFragment(ol);
ol.writeString("</div>\n");
ol.popGeneratorState();
}
#endif
void DirDef::setLevel()
{
......@@ -701,6 +687,7 @@ static void writePartialFilePath(OutputList &ol,const DirDef *root,const FileDef
void DirRelation::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......@@ -710,28 +697,24 @@ void DirRelation::writeDocumentation(OutputList &ol)
QCString title=theTranslator->trDirRelation(
m_src->displayName()+" -> "+
m_dst->dir()->shortName());
startFile(ol,getOutputFileBase(),getOutputFileBase(),title);
startFile(ol,getOutputFileBase(),getOutputFileBase(),
title,HLI_None,!generateTreeView,m_src->getOutputFileBase());
// write navigation path
m_src->writeNavigationPath(ol);
if (!generateTreeView)
{
// write navigation path
m_src->writeNavigationPath(ol);
ol.endQuickIndices();
}
ol.startContents();
//startTitle(ol,getOutputFileBase());
// ol.parseText(shortTitle);
//endTitle(ol,getOutputFileBase(),title);
ol.writeString("<h3>"+shortTitle+"</h3>");
ol.writeString("<table class=\"dirtab\">");
ol.writeString("<tr class=\"dirtab\">");
// TODO: translate me! "File in %s"
ol.writeString("<th class=\"dirtab\">");
ol.parseText(theTranslator->trFileIn(m_src->pathFragment()));
//m_src->writePathFragment(ol);
ol.writeString("</th>");
// TODO: translate me! "Includes file in %s"
ol.writeString("<th class=\"dirtab\">");
//ol.writeString("Includes file in ");
//m_dst->dir()->writePathFragment(ol);
ol.parseText(theTranslator->trIncludesFileIn(m_dst->dir()->pathFragment()));
ol.writeString("</th>");
ol.writeString("</tr>");
......@@ -750,8 +733,15 @@ void DirRelation::writeDocumentation(OutputList &ol)
ol.writeString("</tr>");
}
ol.writeString("</table>");
ol.endContents();
endFile(ol);
if (generateTreeView)
{
m_src->writeNavigationPath(ol);
}
endFile(ol,TRUE);
ol.popGeneratorState();
}
......
......@@ -453,7 +453,7 @@ static bool writeSVGFigureLink(FTextStream &out,const QCString &relPath,
out << "<iframe src=\""
<< relPath << baseName << ".svg\" width=\""
<< ((width*96+48)/72) << "\" height=\""
<< ((height*96+48)/72) << "\">";
<< ((height*96+48)/72) << "\" frameborder=\"0\" scrolling=\"no\">";
writeSVGNotSupported(out);
// out << "</object>";
out << "</iframe>";
......@@ -1744,7 +1744,7 @@ void DotGfxHierarchyTable::writeGraph(FTextStream &out,
QCString baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
baseName = convertNameToFile(baseName);
//baseName = convertNameToFile(baseName);
QCString imgName = baseName+"."+ imgExt;
QCString mapName = baseName+".map";
QCString absImgName = QCString(d.absPath().data())+"/"+imgName;
......
......@@ -144,7 +144,7 @@ class DotGfxHierarchyTable
public:
DotGfxHierarchyTable();
~DotGfxHierarchyTable();
void writeGraph(FTextStream &t,const char *path,const char *fileName) const;
void writeGraph(FTextStream &t,const char *path, const char *fileName) const;
private:
void addHierarchy(DotNode *n,ClassDef *cd,bool hide);
......
......@@ -672,6 +672,7 @@ static void buildFileList(EntryNav *rootNav)
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)))
{
gd->addFile(fd);
fd->makePartOfGroup(gd);
//printf("File %s: in group %s\n",fd->name().data(),s->data());
}
}
......@@ -8554,34 +8555,66 @@ static void readTagFile(Entry *root,const char *tl)
}
//----------------------------------------------------------------------------
static void copyFile(const QCString &src,const QCString &dest)
{
QFile sf(src);
if (sf.open(IO_ReadOnly))
{
QFileInfo fi(src);
QFile df(dest);
if (df.open(IO_WriteOnly))
{
char *buffer = new char[fi.size()];
sf.readBlock(buffer,fi.size());
df.writeBlock(buffer,fi.size());
df.flush();
delete[] buffer;
}
else
{
err("error: could not write to file %s\n",dest.data());
}
}
else
{
err("error: could not open user specified file %s\n",src.data());
}
}
static void copyStyleSheet()
{
QCString &htmlStyleSheet = Config_getString("HTML_STYLESHEET");
if (!htmlStyleSheet.isEmpty())
{
QFile cssf(htmlStyleSheet);
QFileInfo cssfi(htmlStyleSheet);
if (cssf.open(IO_ReadOnly))
QFileInfo fi(htmlStyleSheet);
if (!fi.exists())
{
QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+cssfi.fileName().data();
QFile df(destFileName);
if (df.open(IO_WriteOnly))
{
char *buffer = new char[cssf.size()];
cssf.readBlock(buffer,cssf.size());
df.writeBlock(buffer,cssf.size());
df.flush();
delete[] buffer;
}
else
{
err("error: could not write to style sheet %s\n",destFileName.data());
}
err("Style sheet '%s' specified by HTML_STYLESHEET does not exist!\n",htmlStyleSheet.data());
htmlStyleSheet.resize(0); // revert to the default
}
else
{
err("error: could not open user specified style sheet %s\n",Config_getString("HTML_STYLESHEET").data());
htmlStyleSheet.resize(0); // revert to the default
QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
copyFile(htmlStyleSheet,destFileName);
}
}
}
static void copyLogo()
{
QCString &projectLogo = Config_getString("PROJECT_LOGO");
if (!projectLogo.isEmpty())
{
QFileInfo fi(projectLogo);
if (!fi.exists())
{
err("Project logo '%s' specified by PROJECT_LOGO does not exist!\n",projectLogo.data());
projectLogo.resize(0); // revert to the default
}
else
{
QCString destFileName = Config_getString("HTML_OUTPUT")+"/"+fi.fileName().data();
copyFile(projectLogo,destFileName);
}
}
}
......@@ -10340,6 +10373,7 @@ void generateOutput()
#endif
//if (Config_getBool("HTML_DYNAMIC_SECTIONS")) HtmlGenerator::generateSectionImages();
copyStyleSheet();
copyLogo();
if (!generateTreeView && Config_getBool("USE_INLINE_TREES"))
{
FTVHelp::generateTreeViewImages();
......
......@@ -636,14 +636,14 @@ table.doxtable th {
list-style-type:none;
float:left;
padding-left:10px;
padding-right: 15px;
padding-right:15px;
background-image:url('bc_s.png');
background-repeat:no-repeat;
background-position:right;
color:##45;
}
.navpath a
.navpath li.navelem a
{
height:32px;
display:block;
......@@ -651,11 +651,25 @@ table.doxtable th {
outline: none;
}
.navpath a:hover
.navpath li.navelem a:hover
{
color:##80;
}
.navpath li.footer
{
list-style-type:none;
float:right;
padding-left:10px;
padding-right:15px;
background-image:none;
background-repeat:no-repeat;
background-position:right;
color:##45;
font-size: 8pt;
}
div.summary
{
float: right;
......@@ -670,6 +684,19 @@ div.summary a
white-space: nowrap;
}
div.ingroups
{
font-size: 8pt;
padding-left: 5px;
width: 50%;
text-align: left;
}
div.ingroups a
{
white-space: nowrap;
}
div.header
{
background-image:url('nav_h.png');
......@@ -724,3 +751,44 @@ dl.bug
border-color: #C08050;
}
#projectlogo
{
text-align: center;
vertical-align: bottom;
border-collapse: separate;
}
#projectlogo img
{
border: 0px none;
}
#projectname
{
font: 300% arial,sans-serif;
margin: 0px;
padding: 0px;
}
#projectbrief
{
font: 120% arial,sans-serif;
margin: 0px;
padding: 0px;
}
#projectnumber
{
font: 50% arial,sans-serif;
margin: 0px;
padding: 0px;
}
#titlearea
{
padding: 0px;
margin: 0px;
width: 100%;
border-bottom: 1px solid ##70;
}
......@@ -636,14 +636,14 @@
" list-style-type:none;\n"
" float:left;\n"
" padding-left:10px;\n"
" padding-right: 15px;\n"
" padding-right:15px;\n"
" background-image:url('bc_s.png');\n"
" background-repeat:no-repeat;\n"
" background-position:right;\n"
" color:##45;\n"
"}\n"
"\n"
".navpath a\n"
".navpath li.navelem a\n"
"{\n"
" height:32px;\n"
" display:block;\n"
......@@ -651,11 +651,25 @@
" outline: none;\n"
"}\n"
"\n"
".navpath a:hover\n"
".navpath li.navelem a:hover\n"
"{\n"
" color:##80;\n"
"}\n"
"\n"
".navpath li.footer\n"
"{\n"
" list-style-type:none;\n"
" float:right;\n"
" padding-left:10px;\n"
" padding-right:15px;\n"
" background-image:none;\n"
" background-repeat:no-repeat;\n"
" background-position:right;\n"
" color:##45;\n"
" font-size: 8pt;\n"
"}\n"
"\n"
"\n"
"div.summary\n"
"{\n"
" float: right;\n"
......@@ -670,6 +684,19 @@
" white-space: nowrap;\n"
"}\n"
"\n"
"div.ingroups\n"
"{\n"
" font-size: 8pt;\n"
" padding-left: 5px;\n"
" width: 50%;\n"
" text-align: left;\n"
"}\n"
"\n"
"div.ingroups a\n"
"{\n"
" white-space: nowrap;\n"
"}\n"
"\n"
"div.header\n"
"{\n"
" background-image:url('nav_h.png');\n"
......@@ -724,3 +751,44 @@
" border-color: #C08050;\n"
"}\n"
"\n"
"#projectlogo\n"
"{\n"
" text-align: center;\n"
" vertical-align: bottom;\n"
" border-collapse: separate;\n"
"}\n"
" \n"
"#projectlogo img\n"
"{ \n"
" border: 0px none;\n"
"}\n"
" \n"
"#projectname\n"
"{\n"
" font: 300% arial,sans-serif;\n"
" margin: 0px;\n"
" padding: 0px;\n"
"}\n"
" \n"
"#projectbrief\n"
"{\n"
" font: 120% arial,sans-serif;\n"
" margin: 0px;\n"
" padding: 0px;\n"
"}\n"
"\n"
"#projectnumber\n"
"{\n"
" font: 50% arial,sans-serif;\n"
" margin: 0px;\n"
" padding: 0px;\n"
"}\n"
"\n"
"#titlearea\n"
"{\n"
" padding: 0px;\n"
" margin: 0px;\n"
" width: 100%;\n"
" border-bottom: 1px solid ##70;\n"
"}\n"
"\n"
......@@ -84,7 +84,9 @@ void EclipseHelp::initialize()
{
title = "Doxygen generated documentation";
}
m_tocstream << "<toc label=\"" << convertToXML(title) << "\">" << endl;
m_tocstream << "<toc label=\"" << convertToXML(title)
<< "\" topic=\"" << convertToXML(m_pathprefix)
<< "index" << Doxygen::htmlFileExtension << "\">" << endl;
++ m_depth;
}
......@@ -155,7 +157,7 @@ void EclipseHelp::decContentsDepth()
* @param anchor Name of an anchor of the item.
*/
void EclipseHelp::addContentsItem(
bool isDir,
bool /* isDir */,
const char *name,
const char * /* ref */,
const char *file,
......@@ -165,8 +167,8 @@ void EclipseHelp::addContentsItem(
closedTag();
indent();
m_tocstream << "<topic label=\"" << convertToXML(name) << "\"";
if (!isDir && file)
{ // -- Eclipse help cannot handle directories
if (file)
{
m_tocstream << " href=\"" << convertToXML(m_pathprefix)
<< file << Doxygen::htmlFileExtension;
if (anchor)
......
......@@ -497,6 +497,7 @@ void FileDef::writeSummaryLinks(OutputList &ol)
*/
void FileDef::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
//funcList->countDecMembers();
//QCString fn = name();
......@@ -517,9 +518,12 @@ void FileDef::writeDocumentation(OutputList &ol)
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,TRUE);
getDirDef()->writeNavigationPath(ol);
ol.endQuickIndices();
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
if (!generateTreeView)
{
getDirDef()->writeNavigationPath(ol);
ol.endQuickIndices();
}
QCString pageTitleShort=theTranslator->trFileReference(name());
startTitle(ol,getOutputFileBase(),this);
ol.pushGeneratorState();
......@@ -534,7 +538,11 @@ void FileDef::writeDocumentation(OutputList &ol)
}
else
{
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible);
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_FileVisible,!generateTreeView);
if (!generateTreeView)
{
ol.endQuickIndices();
}
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
......@@ -672,7 +680,14 @@ void FileDef::writeDocumentation(OutputList &ol)
Doxygen::tagFile << " </compound>" << endl;
}
endFile(ol);
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFile(ol,TRUE);
if (Config_getBool("SEPARATE_MEMBER_PAGES"))
{
......@@ -746,6 +761,7 @@ void FileDef::writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const
/*! Write a source listing of this file to the output */
void FileDef::writeSource(OutputList &ol)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
static bool filterSourceFiles = Config_getBool("FILTER_SOURCE_FILES");
static bool latexSourceCode = Config_getBool("LATEX_SOURCE_CODE");
QCString title = docname;
......@@ -760,16 +776,21 @@ void FileDef::writeSource(OutputList &ol)
if (Config_getBool("SHOW_DIRECTORIES") && getDirDef())
{
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
getDirDef()->writeNavigationPath(ol);
ol.endQuickIndices();
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
!generateTreeView,getOutputFileBase());
if (!generateTreeView)
{
getDirDef()->writeNavigationPath(ol);
ol.endQuickIndices();
}
startTitle(ol,getOutputFileBase());
ol.parseText(name());
endTitle(ol,getOutputFileBase(),title);
}
else
{
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,TRUE);
startFile(ol,getSourceFileBase(),0,pageTitle,HLI_FileVisible,
!generateTreeView,getOutputFileBase());
startTitle(ol,getSourceFileBase());
ol.parseText(title);
endTitle(ol,getSourceFileBase(),0);
......@@ -795,7 +816,15 @@ void FileDef::writeSource(OutputList &ol)
);
ol.endCodeFragment();
ol.endContents();
endFile(ol);
if (generateTreeView)
{
writeNavigationPath(ol);
endFile(ol,TRUE);
}
else
{
endFile(ol);
}
ol.enableAll();
}
......
This diff is collapsed.
This diff is collapsed.
......@@ -33,40 +33,6 @@ class QFile;
struct FTVNode;
class FTextStream;
struct FTVImageInfo
{
const char *alt;
const char *name;
const unsigned char *data;
unsigned int len;
unsigned short width, height;
};
extern FTVImageInfo image_info[];
#define FTVIMG_blank 0
#define FTVIMG_doc 1
#define FTVIMG_folderclosed 2
#define FTVIMG_folderopen 3
#define FTVIMG_lastnode 4
#define FTVIMG_link 5
#define FTVIMG_mlastnode 6
#define FTVIMG_mnode 7
#define FTVIMG_node 8
#define FTVIMG_plastnode 9
#define FTVIMG_pnode 10
#define FTVIMG_vertline 11
#define FTV_S(name) #name
#define FTV_ICON_FILE(name) "ftv2" FTV_S(name) ".png"
#define FTVIMG_INDEX(name) FTVIMG_ ## name
#define FTV_INFO(name) ( image_info[FTVIMG_INDEX(name)] )
#define FTV_IMGATTRIBS(name) \
"src=\"" FTV_ICON_FILE(name) "\" " \
"alt=\"" << FTV_INFO(name).alt << "\" " \
"width=\"" << FTV_INFO(name).width << "\" " \
"height=\"" << FTV_INFO(name).height << "\" "
/*! A class that generates a dynamic tree view side panel.
*/
class FTVHelp : public IndexIntf
......@@ -93,11 +59,14 @@ class FTVHelp : public IndexIntf
void generateTreeView();
void generateTreeViewInline(FTextStream &t);
static void generateTreeViewImages();
void generateTreeViewScripts();
private:
void generateScript(FTextStream &t);
void generateTree(FTextStream &t,const QList<FTVNode> &nl,int level);
bool generateJSTree(FTextStream &t,const QList<FTVNode> &nl,int level,bool &first);
void generateIndent(FTextStream &t,FTVNode *n,int level);
void generateLink(FTextStream &t,FTVNode *n);
void generateJSLink(FTextStream &t,FTVNode *n);
QList<FTVNode> *m_indentNodes;
int m_indent;
bool m_topLevelIndex;
......
......@@ -589,11 +589,11 @@ void GroupDef::writeGroupGraph(OutputList &ol)
msg("Generating dependency graph for group %s\n",qualifiedName().data());
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.startParagraph();
//ol.startParagraph();
ol.startGroupCollaboration();
ol.parseText(theTranslator->trCollaborationDiagram(title));
ol.endGroupCollaboration(graph);
ol.endParagraph();
//ol.endParagraph();
ol.popGeneratorState();
}
}
......@@ -848,12 +848,20 @@ void GroupDef::writeSummaryLinks(OutputList &ol)
void GroupDef::writeDocumentation(OutputList &ol)
{
//static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
ol.pushGeneratorState();
startFile(ol,getOutputFileBase(),name(),title);
startTitle(ol,getOutputFileBase(),this);
ol.startHeaderSection();
writeSummaryLinks(ol);
ol.startTitleHead(getOutputFileBase());
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.parseText(title);
ol.popGeneratorState();
ol.endTitleHead(getOutputFileBase(),title);
addGroupListToTitle(ol,this);
endTitle(ol,getOutputFileBase(),title);
ol.endHeaderSection();
ol.startContents();
if (Doxygen::searchIndex)
......@@ -989,6 +997,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
//---------------------------------------- end flexible part -------------------------------
endFile(ol);
ol.popGeneratorState();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
......
This diff is collapsed.
......@@ -36,8 +36,12 @@ class HtmlGenerator : public OutputGenerator
static void writeStyleSheetFile(QFile &f);
static void writeHeaderFile(QFile &f);
static void writeFooterFile(QFile &f);
static void writeSearchPage();
static void writeTabData();
static void writeSearchFooter(FTextStream &t,const QCString &relPath);
static void writeSearchData(const char *dir);
static void writeSearchPage();
static QCString writeLogoAsString(const char *path);
static QCString writeSplitBarAsString(const char *name,const char *relpath);
void enable()
{ if (genStack->top()) active=*genStack->top(); else active=TRUE; }
......@@ -188,6 +192,8 @@ class HtmlGenerator : public OutputGenerator
void endPageRef(const char *,const char *) {}
void startQuickIndices();
void endQuickIndices();
void writeSplitBar(const char *name);
void writeLogo();
void writeQuickLinks(bool compact,HighlightedItem hli);
void startContents();
void endContents();
......@@ -245,15 +251,15 @@ class HtmlGenerator : public OutputGenerator
void startFontClass(const char *s) { t << "<span class=\"" << s << "\">"; }
void endFontClass() { t << "</span>"; }
void writeCodeAnchor(const char *anchor)
{ t << "<a name=\"" << anchor << "\"></a>"; }
void linkableSymbol(int,const char *,Definition *,Definition *) {}
static void writeSearchFooter(FTextStream &t,const QCString &relPath);
static void writeSearchData(const char *dir);
//static void generateSectionImages();
private:
static void writePageFooter(FTextStream &t,const QCString &,const QCString &);
QCString lastTitle;
QCString lastFile;
QCString relPath;
......
......@@ -447,7 +447,7 @@ void HtmlHelp::createProjectFile()
FTextStream t(&f);
QCString indexName="index"+Doxygen::htmlFileExtension;
if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
//if (Config_getBool("GENERATE_TREEVIEW")) indexName="main"+Doxygen::htmlFileExtension;
t << "[OPTIONS]\n";
if (!Config_getString("CHM_FILE").isEmpty())
{
......
This diff is collapsed.
......@@ -261,8 +261,8 @@ void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
void endTitle(OutputList &ol,const char *fileName,const char *name);
void startFile(OutputList &ol,const char *name,const char *manName,
const char *title,HighlightedItem hli=HLI_None,
bool additionalIndices=FALSE);
void endFile(OutputList &ol,bool external=FALSE);
bool additionalIndices=FALSE,const char *altSidebarName=0);
void endFile(OutputList &ol,bool skipNavIndex=FALSE);
void initClassMemberIndices();
void initFileMemberIndices();
......
......@@ -59,12 +59,6 @@ void writeInstallScript()
t << ");\n";
t << "$quiet = 0;\n";
t << "\n";
t << "if (open(F,\"search.cfg\"))\n";
t << "{\n";
t << " $_=<F> ; s/[ \\t\\n]*$//g ; $subst{\"_doc\"} = $_;\n";
t << " $_=<F> ; s/[ \\t\\n]*$//g ; $subst{\"_cgi\"} = $_;\n";
t << "}\n";
t << "\n";
t << "while ( @ARGV ) {\n";
t << " $_ = shift @ARGV;\n";
t << " if ( s/^-// ) {\n";
......@@ -120,7 +114,7 @@ void writeInstallScript()
t << " next if ( $file =~ /^\\.\\.?$/ );\n";
t << " ($file =~ /$match/) && (push @files, $file);\n";
t << " ($file =~ /\\.svg/) && (push @files, $file);\n";
t << " ($file =~ \"tree.js\") && (push @files, $file);\n";
t << " ($file =~ \"navtree.js\") && (push @files, $file);\n";
t << " }\n";
t << " closedir(D);\n";
t << " }\n";
......
This diff is collapsed.
This diff is collapsed.
......@@ -161,11 +161,7 @@ void LatexGenerator::init()
t << endl
<< "clean:" << endl
#if defined(_MSC_VER)
<< "\tdel "
#else
<< "\trm -f "
#endif
<< "*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf" << endl;
createSubDirs(d);
......
......@@ -180,6 +180,8 @@ class LatexGenerator : public OutputGenerator
void endPageRef(const char *,const char *);
void startQuickIndices() {}
void endQuickIndices() {}
void writeSplitBar(const char *) {}
void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
......
......@@ -759,7 +759,7 @@ class LayoutParser : public QXmlDefaultHandler
{
// no MainPage node... add one the first item of the root node...
new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE,
Config_getBool("GENERATE_TREEVIEW") ? "main" : "index",
/*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index",
theTranslator->trMainPage(),TRUE);
}
}
......@@ -780,7 +780,7 @@ class LayoutParser : public QXmlDefaultHandler
QCString baseFile; // base name of the file containing the index page
} mapping[] =
{
{ "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), Config_getBool("GENERATE_TREEVIEW") ? "main" : "index" },
{ "mainpage", LayoutNavEntry::MainPage, theTranslator->trMainPage(), QCString(), /*Config_getBool("GENERATE_TREEVIEW") ? "main" :*/ "index" },
{ "pages", LayoutNavEntry::Pages, theTranslator->trRelatedPages(), QCString(), "pages" },
{ "modules", LayoutNavEntry::Modules, theTranslator->trModules(), QCString(), "modules" },
{ "namespaces", LayoutNavEntry::Namespaces, javaOpt ? theTranslator->trPackages() :
......
......@@ -61,6 +61,7 @@ HEADERS = bufstr.h \
index.h \
index_xsd.h \
instdox.h \
jquery_js.h \
language.h \
latexdocvisitor.h \
latexgen.h \
......@@ -78,6 +79,8 @@ HEADERS = bufstr.h \
message.h \
msc.h \
namespacedef.h \
navtree_css.h \
navtree_js.h \
objcache.h \
outputgen.h \
outputlist.h \
......@@ -95,6 +98,7 @@ HEADERS = bufstr.h \
qhpxmlwriter.h \
qtbc.h \
reflist.h \
resize_js.h \
rtfdocvisitor.h \
rtfgen.h \
rtfstyle.h \
......
......@@ -120,3 +120,18 @@ search_css.h: search.css
doxygen_css.h: doxygen.css
cat doxygen.css | $(TO_C_CMD) >doxygen_css.h
navtree_js.h: navtree.js
cat navtree.js | $(TO_C_CMD) >navtree_js.h
navindex_js.h: navindex.js
cat navindex.js | $(TO_C_CMD) >navindex_js.h
resize_js.h: resize.js
cat resize.js | $(TO_C_CMD) >resize_js.h
jquery_js.h: jquery.js
cat jquery.js | $(TO_C_CMD) >jquery_js.h
navtree_css.h: navtree.css
cat navtree.css | $(TO_C_CMD) >navtree_css.h
......@@ -178,6 +178,8 @@ class ManGenerator : public OutputGenerator
void endPageRef(const char *,const char *) {}
void startQuickIndices() {}
void endQuickIndices() {}
void writeSplitBar(const char *) {}
void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
......
......@@ -143,7 +143,6 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
//printf("~~~ %s cName=%s\n",md->name().data(),cName.data());
//if (!md->isDefine()) ol.startParameter(TRUE); else ol.docify(" ");
bool first=TRUE;
bool paramTypeStarted=FALSE;
bool isDefine = md->isDefine();
......@@ -166,10 +165,6 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
// use the following to put the function pointer type before the name
bool hasFuncPtrType=FALSE;
// or use the following to put the function pointer as it appears in
// the prototype.
//bool hasFuncPtrType=vp!=-1 && wp!=-1 && wp<vp;
if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
{
ol.docify(a->attrib+" ");
......@@ -208,10 +203,10 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
}
if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name
{
if (!hasFuncPtrType)
{
ol.docify(" ");
}
//if (!hasFuncPtrType)
//{
// ol.docify(" ");
//}
ol.disable(OutputGenerator::Man);
ol.disable(OutputGenerator::Latex);
ol.startEmphasis();
......@@ -277,21 +272,12 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.pushGeneratorState();
ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Latex);
//if (!first) ol.writeString("&#160;");
if (!md->isObjCMethod()) ol.docify(")"); // end argument list
ol.enableAll();
if (htmlOn) ol.enable(OutputGenerator::Html);
if (latexOn) ol.enable(OutputGenerator::Latex);
//if (!isDefine)
{
if (first) ol.startParameterName(defArgList->count()<2);
ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
}
//else // isDefine
//{
// if (first) ol.startParameterName(TRUE);
// ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
//}
if (first) ol.startParameterName(defArgList->count()<2);
ol.endParameterName(TRUE,defArgList->count()<2,!md->isObjCMethod());
ol.popGeneratorState();
if (md->extraTypeChars())
{
......
......@@ -107,7 +107,7 @@ void MemberGroup::setAnchors(ClassDef *context)
void MemberGroup::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd)
{
printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
//printf("MemberGroup::writeDeclarations() %s\n",grpHeader.data());
QCString ldoc = doc;
if (!ldoc.isEmpty()) ldoc.prepend("<a name=\""+anchor()+"\"></a>");
memberList->writeDeclarations(ol,cd,nd,fd,gd,grpHeader,ldoc/*,TRUE,TRUE*/);
......
......@@ -515,14 +515,19 @@ void MemberList::writeDocumentation(OutputList &ol,
void MemberList::writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
MemberListIterator mli(*this);
MemberDef *md;
for ( ; (md=mli.current()) ; ++mli)
{
QCString diskName=md->getOutputFileBase();
QCString title=md->qualifiedName();
startFile(ol,diskName,md->name(),title);
container->writeNavigationPath(ol);
startFile(ol,diskName,md->name(),title,HLI_None,!generateTreeView,
container->getOutputFileBase());
if (!generateTreeView)
{
container->writeNavigationPath(ol);
}
ol.startContents();
ol.writeString("<table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"
......@@ -539,8 +544,15 @@ void MemberList::writeDocumentationPage(OutputList &ol,
ol.writeString(" </td>\n");
ol.writeString(" </tr>\n");
ol.writeString("</table>\n");
endFile(ol);
ol.endContents();
if (generateTreeView)
{
container->writeNavigationPath(ol);
}
endFile(ol,TRUE);
}
if (memberGroupList)
{
......
......@@ -411,7 +411,8 @@ void NamespaceDef::writeSummaryLinks(OutputList &ol)
void NamespaceDef::writeDocumentation(OutputList &ol)
{
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
static bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
QCString pageTitle;
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
......@@ -426,12 +427,17 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
{
pageTitle = theTranslator->trNamespaceReference(displayName());
}
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,TRUE);
if (getOuterScope()!=Doxygen::globalScope)
startFile(ol,getOutputFileBase(),name(),pageTitle,HLI_NamespaceVisible,!generateTreeView);
if (!generateTreeView)
{
writeNavigationPath(ol);
if (getOuterScope()!=Doxygen::globalScope)
{
writeNavigationPath(ol);
}
ol.endQuickIndices();
}
ol.endQuickIndices();
startTitle(ol,getOutputFileBase(),this);
ol.parseText(pageTitle);
addGroupListToTitle(ol,this);
......@@ -544,7 +550,14 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
//---------------------------------------- end flexible part -------------------------------
endFile(ol);
ol.endContents();
if (generateTreeView)
{
writeNavigationPath(ol);
}
endFile(ol,TRUE);
if (generateTagFile)
{
......
#nav-tree .children_ul {
margin:0;
padding:4px;
}
#nav-tree ul {
list-style:none outside none;
margin:0px;
padding:0px;
}
#nav-tree li {
white-space:nowrap;
margin:0px;
padding:0px;
}
#nav-tree .plus {
margin:0px;
}
#nav-tree .selected {
background-image: url('tab_a.png');
background-repeat:repeat-x;
color: #fff;
text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
}
#nav-tree img {
margin:0px;
padding:0px;
border:0px;
vertical-align: middle;
}
#nav-tree a {
text-decoration:none;
padding:0px;
margin:0px;
outline:none;
}
#nav-tree .label {
margin:0px;
padding:0px;
}
#nav-tree .label a {
padding:2px;
}
#nav-tree .selected a {
text-decoration:none;
padding:2px;
margin:0px;
color:#fff;
}
#nav-tree .children_ul {
margin:0px;
padding:0px;
}
#nav-tree .item {
margin:0px;
padding:0px;
}
#nav-tree {
padding: 0px 0px;
background-color: #FAFAFF;
font-size:14px;
overflow:auto;
}
#doc-content {
overflow:auto;
display:block;
padding:0px;
margin:0px;
}
#side-nav {
padding:0 6px 0 0;
margin: 0px;
display:block;
position: absolute;
left: 0px;
width: 300px;
}
.ui-resizable .ui-resizable-handle {
display:block;
}
.ui-resizable-e {
background:url("ftv2splitbar.png") repeat scroll right center transparent;
cursor:e-resize;
height:100%;
right:0;
top:0;
width:6px;
}
.ui-resizable-handle {
display:none;
font-size:0.1px;
position:absolute;
z-index:1;
}
#nav-tree-contents {
margin: 6px 0px 0px 0px;
}
#nav-tree {
background-image:url('nav_h.png');
background-repeat:repeat-x;
background-color: ##FA;
}
function createIndent(o,domNode,node,level)
{
if (node.parentNode && node.parentNode.parentNode)
{
createIndent(o,domNode,node.parentNode,level+1);
}
var imgNode = document.createElement("img");
if (level==0 && node.childrenData)
{
node.plus_img = imgNode;
node.expandToggle = document.createElement("a");
node.expandToggle.href = "javascript:void(0)";
node.expandToggle.onclick = function()
{
if (node.expanded)
{
$(node.getChildrenUL()).slideUp("fast");
if (node.isLast)
{
node.plus_img.src = node.relpath+"ftv2plastnode.png";
}
else
{
node.plus_img.src = node.relpath+"ftv2pnode.png";
}
node.expanded = false;
}
else
{
expandNode(o, node, false);
}
}
node.expandToggle.appendChild(imgNode);
domNode.appendChild(node.expandToggle);
}
else
{
domNode.appendChild(imgNode);
}
if (level==0)
{
if (node.isLast)
{
if (node.childrenData)
{
imgNode.src = node.relpath+"ftv2plastnode.png";
}
else
{
imgNode.src = node.relpath+"ftv2lastnode.png";
domNode.appendChild(imgNode);
}
}
else
{
if (node.childrenData)
{
imgNode.src = node.relpath+"ftv2pnode.png";
}
else
{
imgNode.src = node.relpath+"ftv2node.png";
domNode.appendChild(imgNode);
}
}
}
else
{
if (node.isLast)
{
imgNode.src = node.relpath+"ftv2blank.png";
}
else
{
imgNode.src = node.relpath+"ftv2vertline.png";
}
}
imgNode.border = "0";
}
function newNode(o, po, text, link, childrenData, lastNode)
{
var node = new Object();
node.children = Array();
node.childrenData = childrenData;
node.depth = po.depth + 1;
node.relpath = po.relpath;
node.isLast = lastNode;
node.li = document.createElement("li");
po.getChildrenUL().appendChild(node.li);
node.parentNode = po;
node.itemDiv = document.createElement("div");
node.itemDiv.className = "item";
node.labelSpan = document.createElement("span");
node.labelSpan.className = "label";
createIndent(o,node.itemDiv,node,0);
node.itemDiv.appendChild(node.labelSpan);
node.li.appendChild(node.itemDiv);
var a = document.createElement("a");
node.labelSpan.appendChild(a);
node.label = document.createTextNode(text);
a.appendChild(node.label);
if (link)
{
a.href = node.relpath+link;
}
else
{
if (childrenData != null)
{
a.className = "nolink";
a.href = "javascript:void(0)";
a.onclick = node.expandToggle.onclick;
node.expanded = false;
}
}
node.childrenUL = null;
node.getChildrenUL = function()
{
if (!node.childrenUL)
{
node.childrenUL = document.createElement("ul");
node.childrenUL.className = "children_ul";
node.childrenUL.style.display = "none";
node.li.appendChild(node.childrenUL);
}
return node.childrenUL;
};
return node;
}
function showRoot()
{
var headerHeight = $("#top").height();
var footerHeight = $("#nav-path").height();
var windowHeight = $(window).height() - headerHeight - footerHeight;
navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
}
function expandNode(o, node, imm)
{
if (node.childrenData && !node.expanded)
{
if (!node.childrenVisited)
{
getNode(o, node);
}
if (imm)
{
$(node.getChildrenUL()).show();
}
else
{
$(node.getChildrenUL()).slideDown("fast",showRoot);
}
if (node.isLast)
{
node.plus_img.src = node.relpath+"ftv2mlastnode.png";
}
else
{
node.plus_img.src = node.relpath+"ftv2mnode.png";
}
node.expanded = true;
}
}
function getNode(o, po)
{
po.childrenVisited = true;
var l = po.childrenData.length-1;
for (var i in po.childrenData)
{
var nodeData = po.childrenData[i];
po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
i==l);
}
}
function findNavTreePage(url, data)
{
var nodes = data;
var result = null;
for (var i in nodes)
{
var d = nodes[i];
if (d[1] == url)
{
return new Array(i);
}
else if (d[2] != null) // array of children
{
result = findNavTreePage(url, d[2]);
if (result != null)
{
return (new Array(i).concat(result));
}
}
}
return null;
}
function initNavTree(toroot,relpath)
{
var o = new Object();
o.toroot = toroot;
o.node = new Object();
o.node.li = document.getElementById("nav-tree-contents");
o.node.childrenData = NAVTREE;
o.node.children = new Array();
o.node.childrenUL = document.createElement("ul");
o.node.getChildrenUL = function() { return o.node.childrenUL; };
o.node.li.appendChild(o.node.childrenUL);
o.node.depth = 0;
o.node.relpath = relpath;
getNode(o, o.node);
o.breadcrumbs = findNavTreePage(toroot, NAVTREE);
if (o.breadcrumbs == null)
{
o.breadcrumbs = findNavTreePage("index.html",NAVTREE);
}
if (o.breadcrumbs != null && o.breadcrumbs.length>0)
{
var p = o.node;
for (var i in o.breadcrumbs)
{
var j = o.breadcrumbs[i];
p = p.children[j];
expandNode(o,p,true);
}
p.itemDiv.className = p.itemDiv.className + " selected";
p.itemDiv.id = "selected";
$(window).load(showRoot);
}
}
"#nav-tree .children_ul {\n"
" margin:0;\n"
" padding:4px;\n"
"}\n"
"\n"
"#nav-tree ul {\n"
" list-style:none outside none;\n"
" margin:0px;\n"
" padding:0px;\n"
"}\n"
"\n"
"#nav-tree li {\n"
" white-space:nowrap;\n"
" margin:0px;\n"
" padding:0px;\n"
"}\n"
"\n"
"#nav-tree .plus {\n"
" margin:0px;\n"
"}\n"
"\n"
"#nav-tree .selected {\n"
" background-image: url('tab_a.png');\n"
" background-repeat:repeat-x;\n"
" color: #fff;\n"
" text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
"}\n"
"\n"
"#nav-tree img {\n"
" margin:0px;\n"
" padding:0px;\n"
" border:0px;\n"
" vertical-align: middle;\n"
"}\n"
"\n"
"#nav-tree a {\n"
" text-decoration:none;\n"
" padding:0px;\n"
" margin:0px;\n"
" outline:none;\n"
"}\n"
"\n"
"#nav-tree .label {\n"
" margin:0px;\n"
" padding:0px;\n"
"}\n"
"\n"
"#nav-tree .label a {\n"
" padding:2px;\n"
"}\n"
"\n"
"#nav-tree .selected a {\n"
" text-decoration:none;\n"
" padding:2px;\n"
" margin:0px;\n"
" color:#fff;\n"
"}\n"
"\n"
"#nav-tree .children_ul {\n"
" margin:0px;\n"
" padding:0px;\n"
"}\n"
"\n"
"#nav-tree .item {\n"
" margin:0px;\n"
" padding:0px;\n"
"}\n"
"\n"
"#nav-tree {\n"
" padding: 0px 0px;\n"
" background-color: #FAFAFF; \n"
" font-size:14px;\n"
" overflow:auto;\n"
"}\n"
"\n"
"#doc-content {\n"
" overflow:auto;\n"
" display:block;\n"
" padding:0px;\n"
" margin:0px;\n"
"}\n"
"\n"
"#side-nav {\n"
" padding:0 6px 0 0;\n"
" margin: 0px;\n"
" display:block;\n"
" position: absolute;\n"
" left: 0px;\n"
" width: 300px;\n"
"}\n"
"\n"
".ui-resizable .ui-resizable-handle {\n"
" display:block;\n"
"}\n"
"\n"
".ui-resizable-e {\n"
" background:url(\"ftv2splitbar.png\") repeat scroll right center transparent;\n"
" cursor:e-resize;\n"
" height:100%;\n"
" right:0;\n"
" top:0;\n"
" width:6px;\n"
"}\n"
"\n"
".ui-resizable-handle {\n"
" display:none;\n"
" font-size:0.1px;\n"
" position:absolute;\n"
" z-index:1;\n"
"}\n"
"\n"
"#nav-tree-contents {\n"
" margin: 6px 0px 0px 0px;\n"
"}\n"
"\n"
"#nav-tree {\n"
" background-image:url('nav_h.png');\n"
" background-repeat:repeat-x;\n"
" background-color: ##FA;\n"
"}\n"
"\n"
"\n"
"\n"
This diff is collapsed.
......@@ -379,6 +379,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void writeGraphicalHierarchy(const DotGfxHierarchyTable &g) = 0;
virtual void startQuickIndices() = 0;
virtual void endQuickIndices() = 0;
virtual void writeSplitBar(const char *) = 0;
virtual void writeLogo() = 0;
virtual void writeQuickLinks(bool compact,HighlightedItem hli) = 0;
virtual void startContents() = 0;
virtual void endContents() = 0;
......
......@@ -328,6 +328,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startQuickIndices); }
void endQuickIndices()
{ forall(&OutputGenerator::endQuickIndices); }
void writeSplitBar(const char *name)
{ forall(&OutputGenerator::writeSplitBar,name); }
void writeLogo()
{ forall(&OutputGenerator::writeLogo); }
void writeQuickLinks(bool compact,HighlightedItem hli)
{ forall(&OutputGenerator::writeQuickLinks,compact,hli); }
void startContents()
......
......@@ -69,13 +69,15 @@ bool PageDef::hasParentPage() const
void PageDef::writeDocumentation(OutputList &ol)
{
static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
//outputList->disable(OutputGenerator::Man);
QCString pageName;
pageName=escapeCharsInString(name(),FALSE,TRUE);
//printf("PageDef::writeDocumentation: %s\n",getOutputFileBase().data());
startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,TRUE);
startFile(ol,getOutputFileBase(),pageName,title(),HLI_Pages,!generateTreeView);
ol.pushGeneratorState();
//1.{
......@@ -92,13 +94,15 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.enable(OutputGenerator::Html);
}
if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
if (!generateTreeView)
{
getOuterScope()->writeNavigationPath(ol);
if (getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
{
getOuterScope()->writeNavigationPath(ol);
}
ol.endQuickIndices();
}
ol.endQuickIndices();
// save old generator state and write title only to Man generator
ol.pushGeneratorState();
//2.{
......@@ -135,7 +139,16 @@ void PageDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState();
//1.}
endFile(ol);
if (generateTreeView && getOuterScope()!=Doxygen::globalScope && !Config_getBool("DISABLE_INDEX"))
{
ol.endContents();
getOuterScope()->writeNavigationPath(ol);
endFile(ol,TRUE);
}
else
{
endFile(ol);
}
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
......
This diff is collapsed.
This diff is collapsed.
......@@ -173,6 +173,8 @@ class RTFGenerator : public OutputGenerator
void endPageRef(const char *,const char *);
void startQuickIndices() {}
void endQuickIndices() {}
void writeSplitBar(const char *) {}
void writeLogo() {}
void writeQuickLinks(bool,HighlightedItem) {}
void startContents() {}
void endContents() {}
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -382,5 +382,17 @@ QCString externalLinkTarget();
QCString externalRef(const QCString &relPath,const QCString &ref,bool href);
int nextUtf8CharPosition(const QCString &utf8Str,int len,int startPos);
struct ColoredImgDataItem
{
const char *name;
unsigned short width;
unsigned short height;
unsigned char *content;
unsigned char *alpha;
};
void writeColoredImgData(const char *dir,ColoredImgDataItem data[]);
QCString replaceColorMarkers(const char *str);
#endif
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