Commit 01f41c40 authored by dimitri's avatar dimitri

Release-1.7.2-20101106

parent a32c2461
......@@ -272,7 +272,7 @@ CLASS_DIAGRAMS = NO
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = YES
DOT_FONTNAME = FreeSans
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
......@@ -286,7 +286,7 @@ CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
DOT_IMAGE_FORMAT = svg
DOT_PATH =
DOTFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
......@@ -294,4 +294,4 @@ MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = NO
GENERATE_LEGEND = YES
DOT_CLEANUP = YES
DOT_CLEANUP = NO
DOXYGEN Version 1.7.2
DOXYGEN Version 1.7.2-20101106
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (08 October 2010)
Dimitri van Heesch (06 November 2010)
DOXYGEN Version 1.7.2
DOXYGEN Version 1.7.2_20101106
Please read INSTALL for compilation instructions.
......@@ -26,4 +26,4 @@ forum.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (08 October 2010)
Dimitri van Heesch (dimitri@stack.nl) (06 November 2010)
......@@ -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=NO
doxygen_version_mmn=20101106
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......
......@@ -44,7 +44,7 @@ EXAMPLE_PATH = ../examples
RECURSIVE = NO
TAGFILES =
ALLEXTERNALS = NO
PERL_PATH = /usr/local/bin/perl
PERL_PATH = /usr/bin/perl
SEARCHENGINE = NO
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
......
......@@ -199,7 +199,7 @@ wrote the following perl script, which automatically adds or removes -d
from the correct line in the Makefile:
\verbatim
#!/usr/local/bin/perl
#!/usr/bin/perl
$file = shift @ARGV;
print "Toggle debugging mode for $file\n";
......@@ -216,10 +216,10 @@ if (open(F,"<Makefile.libdoxygen.old")) {
}
print "Processing Makefile.libdoxygen...\n";
while (<F>) {
if ( s/\(LEX\) -P([a-zA-Z]+)YY -t $file/(LEX) -d -P\1YY -t $file/g ) {
if ( s/\(LEX\) (-i )?-P([a-zA-Z]+)YY -t $file/(LEX) -d \1-P\2YY -t $file/g ) {
print "Enabling debug info for $file\n";
}
elsif ( s/\(LEX\) -d -P([a-zA-Z]+)YY -t $file/(LEX) -P\1YY -t $file/g ) {
elsif ( s/\(LEX\) -d (-i )?-P([a-zA-Z]+)YY -t $file/(LEX) \1-P\2YY -t $file/g ) {
print "Disabling debug info for $file\n";
}
print G "$_";
......@@ -234,6 +234,7 @@ else {
# touch the file
$now = time;
utime $now, $now, $file
\endverbatim
*/
......
......@@ -2389,7 +2389,7 @@ INPUT = examples/examples.doc src
FILE_PATTERNS = *.cc *.h
INCLUDE_PATH = examples
TAGFILES = qt.tag
PERL_PATH = /usr/local/bin/perl
PERL_PATH = /usr/bin/perl
SEARCHENGINE = YES
\endverbatim
......
......@@ -25,8 +25,8 @@
{\fancyplain{}{\bfseries\rightmark}}
\rhead[\fancyplain{}{\bfseries\leftmark}]
{\fancyplain{}{\bfseries\thepage}}
\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2006}]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2006}}
\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2010}]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2010}}
\cfoot{}
%---------- Internal commands used in this style file ----------------
......
......@@ -169,7 +169,11 @@ class ClassDefImpl
*/
bool subGrouping;
/** Reason of existance is a "use" relation */
bool usedOnly;
/** List of titles to use for the summary */
SDict<QCString> vhdlSummaryTitles;
};
void ClassDefImpl::init(const char *defFileName, const char *name,
......@@ -224,8 +228,9 @@ void ClassDefImpl::init(const char *defFileName, const char *name,
}
}
ClassDefImpl::ClassDefImpl()
ClassDefImpl::ClassDefImpl() : vhdlSummaryTitles(17)
{
vhdlSummaryTitles.setAutoDelete(TRUE);
}
ClassDefImpl::~ClassDefImpl()
......@@ -364,6 +369,16 @@ void ClassDef::internalInsertMember(MemberDef *md,
//printf("insertInternalMember(%s) isHidden()=%d\n",md->name().data(),md->isHidden());
if (md->isHidden()) return;
static bool optVhdl = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
if (optVhdl)
{
QCString title=VhdlDocGen::trVhdlType(md->getMemberSpecifiers(),FALSE);
if (!m_impl->vhdlSummaryTitles.find(title))
{
m_impl->vhdlSummaryTitles.append(title,new QCString(title));
}
}
if (!isReference())
{
static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
......@@ -1369,32 +1384,45 @@ void ClassDef::writeAuthorSection(OutputList &ol)
void ClassDef::writeSummaryLinks(OutputList &ol)
{
static bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
QListIterator<LayoutDocEntry> eli(
LayoutDocManager::instance().docEntries(LayoutDocManager::Class));
LayoutDocEntry *lde;
bool first=TRUE;
for (eli.toFirst();(lde=eli.current());++eli)
if (!vhdlOpt)
{
if (lde->kind()==LayoutDocEntry::ClassNestedClasses &&
m_impl->innerClasses &&
m_impl->innerClasses->declVisible()
)
for (eli.toFirst();(lde=eli.current());++eli)
{
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeSummaryLink(ol,"nested-classes",ls->title,first);
}
else if (lde->kind()== LayoutDocEntry::MemberDecl)
{
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
MemberList * ml = getMemberList(lmd->type);
if (ml && ml->declVisible())
if (lde->kind()==LayoutDocEntry::ClassNestedClasses &&
m_impl->innerClasses &&
m_impl->innerClasses->declVisible()
)
{
writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first);
LayoutDocEntrySection *ls = (LayoutDocEntrySection*)lde;
writeSummaryLink(ol,"nested-classes",ls->title,first);
}
else if (lde->kind()== LayoutDocEntry::MemberDecl)
{
LayoutDocEntryMemberDecl *lmd = (LayoutDocEntryMemberDecl*)lde;
MemberList * ml = getMemberList(lmd->type);
if (ml && ml->declVisible())
{
writeSummaryLink(ol,ml->listTypeAsString(),lmd->title,first);
}
}
}
}
else // VDHL only
{
SDict<QCString>::Iterator li(m_impl->vhdlSummaryTitles);
for (li.toFirst();li.current();++li)
{
writeSummaryLink(ol,li.current()->data(),li.current()->data(),first);
}
}
if (!first)
{
ol.writeString(" </div>\n");
......
......@@ -1267,15 +1267,15 @@ instead of the = operator.
If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
this tag can be used to specify a list of macro names that should be expanded.
The macro definition that is found in the sources will be used.
Use the PREDEFINED tag if you want to use a different macro definition.
Use the PREDEFINED tag if you want to use a different macro definition that
overrules the definition found in the source code.
' depends='ENABLE_PREPROCESSING'>
</option>
<option type='bool' id='SKIP_FUNCTION_MACROS' docs='
If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
doxygen&apos;s preprocessor will remove all function-like macros that are alone
on a line, have an all uppercase name, and do not end with a semicolon. Such
function macros are typically used for boiler-plate code, and will confuse
the parser if not removed.
doxygen&apos;s preprocessor will remove all references to function-like macros
that are alone on a line, have an all uppercase name, and do not end with a
semicolon, because these will confuse the parser if not removed.
' defval='1' depends='ENABLE_PREPROCESSING'/>
</group>
<group name='External' docs='Configuration::additions related to external references'>
......@@ -1350,15 +1350,14 @@ explicitly to a value larger than 0 to get control over the balance
between CPU load and processing speed.
' defval='0' minval='0' maxval='32'/>
<option type='string' id='DOT_FONTNAME' format='string' docs='
By default doxygen will write a font called FreeSans.ttf to the output
directory and reference it in all dot files that doxygen generates. This
font does not include all possible unicode characters however, so when you need
these (or just want a differently looking font) you can specify the font name
By default doxygen will write a font called Helvetica to the output
directory and reference it in all dot files that doxygen generates.
When you want a differently looking font you can specify the font name
using DOT_FONTNAME. You need need to make sure dot is able to find the font,
which can be done by putting it in a standard location or by setting the
DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
containing the font.
' defval='FreeSans.ttf' depends='HAVE_DOT'/>
' defval='Helvetica' depends='HAVE_DOT'/>
<option type='int' id='DOT_FONTSIZE' docs='
The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
The default size is 10pt.
......@@ -1438,6 +1437,7 @@ If left blank png will be used.
<value name='png'/>
<value name='jpg'/>
<value name='gif'/>
<value name='svg'/>
</option>
<option type='string' id='DOT_PATH' format='dir' docs='
The tag DOT_PATH can be used to specify the path where the dot tool can be
......
......@@ -1922,17 +1922,16 @@ void addConfigOptions(Config *cfg)
"If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then\n"
"this tag can be used to specify a list of macro names that should be expanded.\n"
"The macro definition that is found in the sources will be used.\n"
"Use the PREDEFINED tag if you want to use a different macro definition."
"Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code."
);
cl->addDependency("ENABLE_PREPROCESSING");
//----
cb = cfg->addBool(
"SKIP_FUNCTION_MACROS",
"If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then\n"
"doxygen's preprocessor will remove all function-like macros that are alone\n"
"on a line, have an all uppercase name, and do not end with a semicolon. Such\n"
"function macros are typically used for boiler-plate code, and will confuse\n"
"the parser if not removed.",
"doxygen's preprocessor will remove all references to function-like macros\n"
"that are alone on a line, have an all uppercase name, and do not end with a\n"
"semicolon, because these will confuse the parser if not removed.",
TRUE
);
cb->addDependency("ENABLE_PREPROCESSING");
......@@ -2046,16 +2045,15 @@ void addConfigOptions(Config *cfg)
//----
cs = cfg->addString(
"DOT_FONTNAME",
"By default doxygen will write a font called FreeSans.ttf to the output\n"
"directory and reference it in all dot files that doxygen generates. This\n"
"font does not include all possible unicode characters however, so when you need\n"
"these (or just want a differently looking font) you can specify the font name\n"
"By default doxygen will write a font called Helvetica to the output\n"
"directory and reference it in all dot files that doxygen generates.\n"
"When you want a differently looking font you can specify the font name\n"
"using DOT_FONTNAME. You need need to make sure dot is able to find the font,\n"
"which can be done by putting it in a standard location or by setting the\n"
"DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory\n"
"containing the font."
);
cs->setDefaultValue("FreeSans.ttf");
cs->setDefaultValue("Helvetica");
cs->addDependency("HAVE_DOT");
//----
ci = cfg->addInt(
......@@ -2190,6 +2188,7 @@ void addConfigOptions(Config *cfg)
ce->addValue("png");
ce->addValue("jpg");
ce->addValue("gif");
ce->addValue("svg");
ce->addDependency("HAVE_DOT");
//----
cs = cfg->addString(
......
......@@ -1008,7 +1008,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
ClassDef *cd=0;
bool ambig;
FileDef *fd = findFileDef(Doxygen::inputNameDict,g_fileName,ambig);
//printf("handleLinkedWord(%s) g_context=%s\n",name.data(),g_context.data());
//printf("handleLinkedWord(%s) g_context=%s\n",g_token->name.data(),g_context.data());
if (!g_insideHtmlLink &&
(resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member,TRUE,fd,TRUE)
|| (!g_context.isEmpty() && // also try with global scope
......@@ -1104,7 +1104,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
}
else // normal non-linkable word
{
if (g_token->name.left(1)=='#' || g_token->name.left(2)=="::")
if (g_token->name.left(1)=="#" || g_token->name.left(2)=="::")
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"warning: explicit link request to '%s' could not be resolved",qPrint(name));
}
......@@ -5662,6 +5662,7 @@ int DocPara::handleHtmlEndTag(const QCString &tagName)
case XML_PARAM:
case XML_TYPEPARAM:
case XML_RETURNS:
case XML_SEE:
case XML_SEEALSO:
case XML_EXCEPTION:
retval = RetVal_CloseXml;
......
......@@ -259,6 +259,7 @@ static void handleHtmlTag()
static QCString stripEmptyLines(const char *s)
{
if (s==0) return QCString();
int result=0,p=0;
for (;;)
{
......
This diff is collapsed.
......@@ -357,7 +357,7 @@ class DotRunner
};
/** @brief Helper class to insert a set of map file into an output file */
class DotMapConverter
class DotFilePatcher
{
public:
struct Map
......@@ -368,11 +368,14 @@ class DotMapConverter
QCString context;
QCString label;
};
DotMapConverter(const char *patchFile);
DotFilePatcher(const char *patchFile);
int addMap(const QCString &mapFile,const QCString &relPath,
bool urlOnly,const QCString &context,const QCString &label);
int addFigure(const QCString &baseName,
const QCString &figureName,bool heightCheck);
int addSVGConversion(const QCString &relPath,bool urlOnly,const QCString &context);
int addSVGObject(const QCString &baseName, const QCString &figureName,
const QCString &relPath);
bool run();
private:
......@@ -415,13 +418,17 @@ class DotManager
const QCString &context,const QCString &label);
int addFigure(const QCString &file,const QCString &baseName,
const QCString &figureName,bool heightCheck);
int addSVGConversion(const QCString &file,const QCString &relPath,
bool urlOnly,const QCString &context);
int addSVGObject(const QCString &file,const QCString &baseName,
const QCString &figureNAme,const QCString &relPath);
bool run();
private:
DotManager();
virtual ~DotManager();
QList<DotRunner> m_dotRuns;
SDict<DotMapConverter> m_dotMaps;
SDict<DotFilePatcher> m_dotMaps;
static DotManager *m_theInstance;
DotRunnerQueue *m_queue;
QList<DotWorkerThread> m_workers;
......@@ -433,8 +440,9 @@ void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format);
QCString getDotImageMapFromFile(const QCString& inFile, const QCString& outDir,
const QCString& relPath,const QCString& context);
void writeDotImageMapFromFile(FTextStream &t,
const QCString& inFile, const QCString& outDir,
const QCString& relPath,const QCString& context);
void writeDotDirDepGraph(FTextStream &t,DirDef *dd);
......
......@@ -2197,8 +2197,9 @@ static MemberDef *addVariableToFile(
* \returns -1 if this is not a function pointer variable or
* the index at which the brace of (...*name) was found.
*/
static int findFunctionPtr(const QCString &type,int *pLength=0)
static int findFunctionPtr(const QCString &type,int lang, int *pLength=0)
{
if (lang == SrcLangExt_F90) return -1; // Fortran does not have function pointers
static const QRegExp re("([^)]*[\\*\\^][^)]*)");
int i=-1,l;
if (!type.isEmpty() && // return type is non-empty
......@@ -2381,7 +2382,7 @@ static void addVariable(EntryNav *rootNav,int isFuncPtr=-1)
else
{
int i=isFuncPtr;
if (i==-1) i=findFunctionPtr(root->type); // for typedefs isFuncPtr is not yet set
if (i==-1) i=findFunctionPtr(root->type,root->lang); // for typedefs isFuncPtr is not yet set
if (i!=-1) // function pointer
{
int ai = root->type.find('[',i);
......@@ -2593,7 +2594,7 @@ static void buildVarList(EntryNav *rootNav)
(rootNav->section()==Entry::VARIABLE_SEC // it's a variable
) ||
(rootNav->section()==Entry::FUNCTION_SEC && // or maybe a function pointer variable
(isFuncPtr=findFunctionPtr(rootNav->type()))!=-1
(isFuncPtr=findFunctionPtr(rootNav->type(),rootNav->lang()))!=-1
) ||
(rootNav->section()==Entry::FUNCTION_SEC && // class variable initialized by constructor
isVarWithConstructor(rootNav)
......@@ -6164,7 +6165,7 @@ static void filterMemberDocumentation(EntryNav *rootNav)
}
if ( // detect func variable/typedef to func ptr
(i=findFunctionPtr(root->type,&l))!=-1
(i=findFunctionPtr(root->type,root->lang,&l))!=-1
)
{
//printf("Fixing function pointer!\n");
......@@ -10393,6 +10394,7 @@ void generateOutput()
// what categories we find in this function.
if (Config_getBool("GENERATE_HTML") && searchEngine)
{
msg("Generating search indices...\n");
QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
QDir searchDir(searchDirName);
if (!searchDir.exists() && !searchDir.mkdir(searchDirName))
......
......@@ -683,4 +683,44 @@ div.headertitle
{
padding: 5px 5px 5px 10px;
}
dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
{
border-left:4px solid;
padding: 0 0 0 6px;
}
dl.note
{
border-color: #D0D000;
}
dl.warning, dl.attention
{
border-color: #FF0000;
}
dl.pre, dl.post, dl.invariant
{
border-color: #00D000;
}
dl.deprecated
{
border-color: #505050;
}
dl.todo
{
border-color: #00C0E0;
}
dl.test
{
border-color: #3030E0;
}
dl.bug
{
border-color: #C08050;
}
......@@ -683,4 +683,44 @@
"{\n"
" padding: 5px 5px 5px 10px;\n"
"}\n"
"dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug\n"
"{\n"
" border-left:4px solid;\n"
" padding: 0 0 0 6px;\n"
"}\n"
"\n"
"dl.note\n"
"{\n"
" border-color: #D0D000;\n"
"}\n"
"\n"
"dl.warning, dl.attention\n"
"{\n"
" border-color: #FF0000;\n"
"}\n"
"\n"
"dl.pre, dl.post, dl.invariant\n"
"{\n"
" border-color: #00D000;\n"
"}\n"
"\n"
"dl.deprecated\n"
"{\n"
" border-color: #505050;\n"
"}\n"
"\n"
"dl.todo\n"
"{\n"
" border-color: #00C0E0;\n"
"}\n"
"\n"
"dl.test\n"
"{\n"
" border-color: #3030E0;\n"
"}\n"
"\n"
"dl.bug\n"
"{\n"
" border-color: #C08050;\n"
"}\n"
"\n"
......@@ -365,8 +365,8 @@ void Entry::addSpecialListItem(const char *listName,int itemId)
EntryNav::EntryNav(EntryNav *parent, Entry *e)
: m_parent(parent), m_subList(0), m_section(e->section), m_type(e->type),
m_name(e->name), m_fileDef(0), m_info(0), m_offset(-1),
m_noLoad(FALSE)
m_name(e->name), m_fileDef(0), m_lang(e->lang),
m_info(0), m_offset(-1), m_noLoad(FALSE)
{
if (e->tagInfo)
{
......
......@@ -413,6 +413,7 @@ class EntryNav
Entry *entry() const { return m_info; }
int section() const { return m_section; }
SrcLangExt lang() const { return m_lang; }
const QCString &type() const { return m_type; }
const QCString &name() const { return m_name; }
TagInfo *tagInfo() const { return m_tagInfo; }
......@@ -432,6 +433,7 @@ class EntryNav
QCString m_name; //!< member name
TagInfo *m_tagInfo; //!< tag file info
FileDef *m_fileDef;
SrcLangExt m_lang; //!< programming language in which this entry was found
Entry *m_info;
int64 m_offset;
......
......@@ -645,12 +645,16 @@ B [ \t]
BS [ \t]*
BS_ [ \t]+
COMMA {BS},{BS}
ARGS {BS}("("[^)]*")"){BS}
ARGS_L0 ("("[^)]*")")
ARGS_L1a [^()]*"("[^)]*")"[^)]*
ARGS_L1 ("("{ARGS_L1a}*")")
ARGS_L2 "("({ARGS_L0}|[^()]|{ARGS_L1a}|{ARGS_L1})*")"
ARGS {BS}({ARGS_L0}|{ARGS_L1}|{ARGS_L2})
NUM_TYPE (complex|integer|logical|real)
KIND {ARGS}
CHAR (CHARACTER{ARGS}?|CHARACTER{BS}"*"({BS}[0-9]+|{ARGS}))
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{B}PRECISION|{CHAR})
TYPE_SPEC (({NUM_TYPE}({BS}"*"{BS}[0-9]+)?)|({NUM_TYPE}{KIND})|DOUBLE{BS_}PRECISION|{CHAR}|TYPE{ARGS})
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)
......
......@@ -210,7 +210,11 @@ B [ \t]
BS [ \t]*
BS_ [ \t]+
COMMA {BS},{BS}
ARGS {BS}("("[^)]*")")
ARGS_L0 ("("[^)]*")")
ARGS_L1a [^()]*"("[^)]*")"[^)]*
ARGS_L1 ("("{ARGS_L1a}*")")
ARGS_L2 "("({ARGS_L0}|[^()]|{ARGS_L1a}|{ARGS_L1})*")"
ARGS {BS}({ARGS_L0}|{ARGS_L1}|{ARGS_L2})
NOARGS {BS}"\n"
NUM_TYPE (complex|integer|logical|real)
......@@ -377,6 +381,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
current->section=Entry::USINGDIR_SEC;
current_root->addSubEntry(current);
current = new Entry;
current->lang = SrcLangExt_F90;
yy_pop_state();
}
<Use>{ID}/, {
......@@ -391,6 +396,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
current->section=Entry::USINGDECL_SEC;
current_root->addSubEntry(current);
current = new Entry ;
current->lang = SrcLangExt_F90;
}
<Use,UseOnly>"\n" {
unput(*yytext);
......@@ -398,7 +404,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
}
/*------ ignore special fortran statements */
<Start,ModuleBody,SubprogBody>^[ \t]*interface({BS_}{ID}({BS}\({BS}[^ \t()]+{BS}\))?)?/{BS}(!|\n) { // handle interface block
<Start,ModuleBody,SubprogBody>^[ \t]*interface({BS_}{ID}({ARGS}?)?)?/{BS}(!|\n) { // handle interface block
if(YY_START == Start)
{
addModule(NULL);
......@@ -417,7 +423,7 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
yy_push_state(InterfaceBody);
startScope(last_entry);
}
<InterfaceBody>^{BS}"end"({BS}"interface"({BS_}{ID})?)?{BS}/(\n|!) {
<InterfaceBody>^{BS}"end"({BS}"interface"({BS_}{ID}{ARGS}?)?)?{BS}/(\n|!) {
if (!endScope(current_root))
yyterminate();
yy_pop_state();
......@@ -1327,6 +1333,16 @@ static QCString applyModifiers(QCString typeName, SymbolModifiers& mdfs)
typeName += ",";
typeName += "save";
}
if (mdfs.protection == SymbolModifiers::PUBLIC)
{
typeName += ",";
typeName += "public";
}
else if (mdfs.protection == SymbolModifiers::PRIVATE)
{
typeName += ",";
typeName += "private";
}
return typeName;
}
......@@ -1485,6 +1501,7 @@ static void initEntry()
current->mtype = mtype;
current->virt = virt;
current->stat = gstat;
current->lang = SrcLangExt_F90;
initGroupInfo(current);
}
......@@ -1706,11 +1723,13 @@ static void parseMain(const char *fileName,const char *fileBuf,Entry *rt)
groupEnterFile(yyFileName,yyLineNr);
current = new Entry;
current->lang = SrcLangExt_F90;
current->name = yyFileName;
current->section = Entry::SOURCE_SEC;
current_root->addSubEntry(current);
file_root = current;
current = new Entry;
current->lang = SrcLangExt_F90;
fscanYYrestart( fscanYYin );
{
......
......@@ -1634,11 +1634,14 @@ void HtmlDocVisitor::writeDotFile(const QCString &fn,const QCString &relPath,
writeDotGraphFromFile(fn,outDir,baseName,BITMAP);
QCString mapName = baseName+".map";
QCString mapFile = fn+".map";
m_t << "<img src=\"" << relPath << baseName << "."
<< Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\""
<< baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">" << endl;
QCString imap = getDotImageMapFromFile(fn,outDir,relPath,context);
m_t << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">" << imap << "</map>" << endl;
//m_t << "<img src=\"" << relPath << baseName << "."
// << Config_getEnum("DOT_IMAGE_FORMAT") << "\" alt=\""
// << baseName << "\" border=\"0\" usemap=\"#" << mapName << "\">"
// << endl;
//QCString imap = getDotImageMapFromFile(m_t,fn,baseName,outDir,relPath,context);
//m_t << "<map name=\"" << mapName << "\" id=\"" << mapName << "\">"
// << imap << "</map>" << endl;
writeDotImageMapFromFile(m_t,fn,outDir,relPath,context);
}
void HtmlDocVisitor::writeMscFile(const QCString &fileName,const QCString &relPath,
......
......@@ -43,8 +43,8 @@
#include "image.h"
//#define DBG_HTML(x) x;
#define DBG_HTML(x)
#define DBG_HTML(x) x;
//#define DBG_HTML(x)
static const char defaultStyleSheet[] =
#include "doxygen_css.h"
......
......@@ -3141,7 +3141,15 @@ void writeGraphInfo(OutputList &ol)
bool oldStripCommentsState = stripCommentsStateRef;
// temporarily disable the stripping of comments for our own code example!
stripCommentsStateRef = FALSE;
ol.parseDoc("graph_legend",1,0,0,theTranslator->trLegendDocs(),FALSE,FALSE);
QCString legendDocs = theTranslator->trLegendDocs();
int s = legendDocs.find("<center>");
int e = legendDocs.find("</center>");
if (Config_getEnum("DOT_IMAGE_FORMAT")=="svg" && s!=-1 && e!=-1)
{
legendDocs = legendDocs.left(s+8) + "[!-- SVG 0 --]\n" + legendDocs.mid(e);
//printf("legendDocs=%s\n",legendDocs.data());
}
ol.parseDoc("graph_legend",1,0,0,legendDocs,FALSE,FALSE);
stripCommentsStateRef = oldStripCommentsState;
endFile(ol);
ol.popGeneratorState();
......
......@@ -203,7 +203,7 @@ enum NamespaceMemberHighlight
NMHL_Typedefs,
NMHL_Enums,
NMHL_EnumValues,
NMHL_Total = FMHL_EnumValues+1
NMHL_Total = NMHL_EnumValues+1
};
enum ClassHighlight
......
......@@ -119,6 +119,7 @@ void writeInstallScript()
t << " $match = \"" << Config_getString("HTML_FILE_EXTENSION") << "\";\n";
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 << " }\n";
t << " closedir(D);\n";
......@@ -147,7 +148,7 @@ void writeInstallScript()
t << " }\n";
t << " if ($oldf ne \"tree.js\") {\n";
t << " while (<F>) {\n";
t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n";
t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (xlink:href|href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n";
t << " print G \"$_\";\n";
t << " }\n";
t << " }\n";
......
......@@ -769,6 +769,8 @@ class LayoutParser : public QXmlDefaultHandler
bool javaOpt = Config_getBool("OPTIMIZE_OUTPUT_JAVA");
bool fortranOpt = Config_getBool("OPTIMIZE_FOR_FORTRAN");
bool vhdlOpt = Config_getBool("OPTIMIZE_OUTPUT_VHDL");
bool hasGraphicalHierarchy = Config_getBool("HAVE_DOT") &&
Config_getBool("GRAPHICAL_HIERARCHY");
static struct NavEntryMap
{
const char *typeStr; // type attribute name in the XML file
......@@ -799,7 +801,8 @@ class LayoutParser : public QXmlDefaultHandler
theTranslator->trClasses(),
theTranslator->trCompoundList(), "annotated" },
{ "hierarchy", LayoutNavEntry::ClassHierarchy, vhdlOpt ? VhdlDocGen::trDesignUnitHierarchy() :
theTranslator->trClassHierarchy(), QCString(), "hierarchy" },
theTranslator->trClassHierarchy(), QCString(),
hasGraphicalHierarchy ? "inherits" : "hierarchy" },
{ "classmembers", LayoutNavEntry::ClassMembers, fortranOpt ? theTranslator->trCompoundMembersFortran() :
vhdlOpt ? VhdlDocGen::trDesignUnitMembers() :
theTranslator->trCompoundMembers(), QCString(), "functions" },
......
......@@ -422,7 +422,7 @@ void MemberList::writeDeclarations(OutputList &ol,
if (!st.isEmpty())
{
ol.startMemberSubtitle();
ol.parseDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE);
ol.parseDoc("[generated]",-1,ctx,0,subtitle,FALSE,FALSE,0,TRUE,FALSE);
ol.endMemberSubtitle();
}
}
......
......@@ -4733,19 +4733,27 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
BEGIN( ClassVar );
}
<ClassVar>":" {
current->type.resize(0);
if ((current->spec & Entry::Interface) ||
(current->spec & Entry::Struct) ||
(current->spec & Entry::Ref) ||
(current->spec & Entry::Value) ||
insidePHP || insideCS || insideD || insideObjC
)
baseProt=Public;
if (current->section == Entry::VARIABLE_SEC) // enum a b:2, see bug 313527
{
BEGIN(BitFields);
current->bitfields+=":";
}
else
baseProt=Private;
baseVirt=Normal;
baseName.resize(0);
BEGIN( BasesProt ) ;
{
current->type.resize(0);
if ((current->spec & Entry::Interface) ||
(current->spec & Entry::Struct) ||
(current->spec & Entry::Ref) ||
(current->spec & Entry::Value) ||
insidePHP || insideCS || insideD || insideObjC
)
baseProt=Public;
else
baseProt=Private;
baseVirt=Normal;
baseName.resize(0);
BEGIN( BasesProt ) ;
}
}
<ClassVar>[;=*&] {
unput(*yytext);
......
......@@ -33,9 +33,6 @@ class TranslatorDutch : public Translator
* "\\usepackage[latin2]{inputenc}\n"
* "\\usepackage[T1]{fontenc}\n"
* </pre>
*
* The Dutch LaTeX does not use such commands. Because of this
* the empty string is returned in this implementation.
*/
QCString latexLanguageSupportCommand()
{
......@@ -90,11 +87,11 @@ class TranslatorDutch : public Translator
QCString trCompoundList()
{ return "Klasse Lijst"; }
QCString trFileList()
{ return "File Lijst"; }
{ return "Bestandslijst"; }
QCString trCompoundMembers()
{ return "Klasse Members"; }
QCString trFileMembers()
{ return "File members"; }
{ return "Bestand members"; }
QCString trRelatedPages()
{ return "Gerelateerde pagina's"; }
QCString trExamples()
......@@ -150,13 +147,13 @@ class TranslatorDutch : public Translator
QCString trCompoundIndex()
{ return "Klasse Index"; }
QCString trFileIndex()
{ return "File Index"; }
{ return "Bestand Index"; }
QCString trModuleDocumentation()
{ return "Module Documentatie"; }
QCString trClassDocumentation()
{ return "Klassen Documentatie"; }
QCString trFileDocumentation()
{ return "File Documentatie"; }
{ return "Bestand Documentatie"; }
QCString trExampleDocumentation()
{ return "Documentatie van voorbeelden"; }
QCString trPageDocumentation()
......@@ -1145,7 +1142,7 @@ class TranslatorDutch : public Translator
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Deze directory hi&euml;rarchie is min of meer alfabetisch "
{ return "Deze folder hi&euml;rarchie is min of meer alfabetisch "
"gesorteerd:";
}
......@@ -1191,7 +1188,7 @@ class TranslatorDutch : public Translator
/*! header that is put before the list of member subprograms (Fortran). */
virtual QCString trMemberFunctionDocumentationFortran()
{ return "Member Function/Subroutine Documentation"; }
{ return "Member Funcie/Subroutine Documentatie"; }
//////////////////////////////////////////////////////////////////////////
// new since 1.5.4 (mainly for Fortran)
......
......@@ -3194,6 +3194,7 @@ static QCString getCanonicalTypeForIdentifier(
}
if (cd && cd->isUsedOnly()) cd=0; // ignore types introduced by usage relations
//printf("cd=%p mtype=%p\n",cd,mType);
//printf(" getCanonicalTypeForIdentifer: symbol=%s word=%s cd=%s d=%s fs=%s cd->isTemplate=%d\n",
// symName.data(),
// word.data(),
......@@ -3264,7 +3265,8 @@ static QCString getCanonicalTypeForIdentifier(
}
else if (mType && mType->isTypedef()) // a typedef
{
result = mType->qualifiedName();
//result = mType->qualifiedName(); // changed after 1.7.2
result = mType->typeString();
}
else // fallback
{
......
......@@ -32,21 +32,6 @@
#include "entry.h"
#include "memberlist.h"
#if 0
#include "qcstring.h"
#include "qlist.h"
#include "qstringlist.h"
#include "filedef.h"
#include "classlist.h"
#include "classdef.h"
#include "translator.h"
#include "qregexp.h"
#include "outputlist.h"
#include "membername.h"
#include "memberdef.h"
#include "memberlist.h"
#endif
class Entry;
class ClassSDict;
class FileStorage;
......
......@@ -176,7 +176,7 @@ static void deleteSpecChars(char* str,char *buf)
*buf='\0';
}
void getType(Entry* p,char* text)
static void getType(Entry* p,char* text)
{
QCString name(text);
name=name.stripWhiteSpace();
......@@ -241,7 +241,7 @@ void getType(Entry* p,char* text)
* adds signals found in entities|records|units
*/
void addSignals(const char* str,int line, Entry *e,const char *comment=0)
static void addSignals(const char* str,int line, Entry *e,const char *comment=0)
{
//printf("===> addSignals (%s) comment='%s'\n",str,comment);
QList<QCString> ql;
......@@ -492,8 +492,7 @@ static Entry* getEntryAtLine(const Entry* ce,int line)
//-------------------------------------------------------------------------
void parserInit()
static void parserInit()
{
iCounter=0;
iTextCounter=0;
......@@ -1803,7 +1802,7 @@ static void mergeGrouping(const Entry* ce,int)
* and so on..
*/
void mapLibPackage(const Entry* ce)
static void mapLibPackage(const Entry* ce)
{
Entry *lastComp=0;
while (TRUE)
......
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