Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
f38608d4
Commit
f38608d4
authored
May 22, 2000
by
dimitri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Release-1.1.3-20000522
parent
8013b5fe
Changes
49
Hide whitespace changes
Inline
Side-by-side
Showing
49 changed files
with
1230 additions
and
869 deletions
+1230
-869
INSTALL
INSTALL
+4
-4
README
README
+2
-2
VERSION
VERSION
+1
-1
config_templ.l
addon/configgen/config_templ.l
+37
-10
configgen.cpp
addon/configgen/configgen.cpp
+36
-15
doxywizard_templ.cpp
addon/doxywizard/doxywizard_templ.cpp
+1
-0
commands.doc
doc/commands.doc
+9
-0
faq.doc
doc/faq.doc
+10
-0
starting.doc
doc/starting.doc
+10
-7
doxygen.spec
packages/rpm/doxygen.spec
+1
-1
classdef.cpp
src/classdef.cpp
+32
-129
classdef.h
src/classdef.h
+11
-1
code.l
src/code.l
+36
-2
config.h
src/config.h
+4
-2
config.l
src/config.l
+103
-39
definition.cpp
src/definition.cpp
+10
-2
definition.h
src/definition.h
+14
-2
doxygen.cpp
src/doxygen.cpp
+221
-123
doxygen.h
src/doxygen.h
+8
-2
entry.cpp
src/entry.cpp
+2
-0
entry.h
src/entry.h
+1
-0
filedef.cpp
src/filedef.cpp
+15
-3
filedef.h
src/filedef.h
+2
-0
filename.cpp
src/filename.cpp
+5
-4
filename.h
src/filename.h
+2
-1
groupdef.cpp
src/groupdef.cpp
+19
-8
groupdef.h
src/groupdef.h
+2
-1
htmlgen.cpp
src/htmlgen.cpp
+1
-1
index.cpp
src/index.cpp
+31
-14
latexgen.cpp
src/latexgen.cpp
+1
-1
logos.cpp
src/logos.cpp
+200
-296
memberdef.cpp
src/memberdef.cpp
+15
-13
memberdef.h
src/memberdef.h
+8
-9
membergroup.cpp
src/membergroup.cpp
+20
-2
membergroup.h
src/membergroup.h
+1
-0
memberlist.cpp
src/memberlist.cpp
+50
-18
memberlist.h
src/memberlist.h
+4
-3
message.cpp
src/message.cpp
+100
-1
message.h
src/message.h
+4
-1
namespacedef.cpp
src/namespacedef.cpp
+16
-3
namespacedef.h
src/namespacedef.h
+3
-1
pre.l
src/pre.l
+7
-5
rtfgen.cpp
src/rtfgen.cpp
+2
-2
scanner.h
src/scanner.h
+4
-2
scanner.l
src/scanner.l
+143
-123
tag.l
src/tag.l
+4
-3
translator.h
src/translator.h
+1
-1
util.cpp
src/util.cpp
+16
-10
util.h
src/util.h
+1
-1
No files found.
INSTALL
View file @
f38608d4
DOXYGEN Version 1.1.3-200005
14
DOXYGEN Version 1.1.3-200005
22
CONTENTS
--------
...
...
@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.3-200005
14
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.3-200005
14
.src.tar # unpack it
gunzip doxygen-1.1.3-200005
22
.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.3-200005
22
.src.tar # unpack it
2. Run the configure script:
...
...
@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
14
May 2000)
Dimitri van Heesch (
22
May 2000)
README
View file @
f38608d4
DOXYGEN Version 1.1.3-200005
14
DOXYGEN Version 1.1.3-200005
22
Please read INSTALL for compilation instructions.
...
...
@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (
14
May 2000)
Dimitri van Heesch (
22
May 2000)
VERSION
View file @
f38608d4
1.1.3-200005
14
1.1.3-200005
22
addon/configgen/config_templ.l
View file @
f38608d4
...
...
@@ -40,13 +40,16 @@ void err(const char *fmt, ...)
vfprintf(stderr, fmt, args);
va_end(args);
}
void warn(const char *fmt, ...)
void warn
_cont
(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
}
void initWarningFormat()
{
}
#else
#include "doxygen.h"
#include "message.h"
...
...
@@ -183,7 +186,7 @@ static int yyread(char *buf,int max_size)
else
{
*b=FALSE;
warn("Warning: Invalid value `%s' for "
warn
_cont
("Warning: Invalid value `%s' for "
"boolean tag in line %d; use YES or NO\n",
bs.data(),yyLineNr);
}
...
...
@@ -248,7 +251,7 @@ static void writeStringList(QTextStream &t,QStrList &l)
const char *s=p;
bool hasBlanks=FALSE;
while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t');
if (!first) t << " ";
if (!first) t << "
";
first=FALSE;
if (hasBlanks) t << "\"" << s << "\""; else t << s;
p = l.next();
...
...
@@ -288,7 +291,7 @@ void configStrToVal()
int ts = tabSizeString.toInt(&ok);
if (!ok || ts<1 || ts>16)
{
warn("Warning: argument of TAB_SIZE is not a valid number, using tab size of 8 spaces!\n");
warn
_cont
("Warning: argument of TAB_SIZE is not a valid number, using tab size of 8 spaces!\n");
ts=8;
}
Config::tabSize = ts;
...
...
@@ -304,7 +307,7 @@ void configStrToVal()
int cols = colsInAlphaIndexString.toInt(&ok);
if (!ok || cols<1 || cols>20)
{
warn("Warning: argument of COLS_IN_ALPHA_INDEX is not a valid number in the range [1..20]!\n"
warn
_cont
("Warning: argument of COLS_IN_ALPHA_INDEX is not a valid number in the range [1..20]!\n"
"Using the default of 5 columns!\n");
cols = 5;
}
...
...
@@ -341,7 +344,8 @@ static void substEnvVarsInStrList(QStrList &sl)
if (!wasQuoted) /* as a result of the expansion, a single string
may have expanded into a list, which we'll
add to sl. If the orginal string already
contained multiple elements no splitting is done! */
contained multiple elements no further
splitting is done to allow quoted items with spaces! */
{
...
...
@@ -354,10 +358,10 @@ static void substEnvVarsInStrList(QStrList &sl)
{
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
while (i<l && ((c=result.at(i))==' ' || c=='\t')) i++;
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++)
;
while (i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"')) i++
;
if (i<l) // not at the end of the string
{
if (c=='"') // word within quotes
...
...
@@ -424,6 +428,29 @@ void checkConfig()
// projectName[0]=toupper(projectName[0]);
//}
if (Config::warnFormat.isEmpty())
{
Config::warnFormat="$file:$line $text";
}
else
{
if (Config::warnFormat.find("$file")==-1)
{
err("Error: warning format does not contain a $file tag!\n");
exit(1);
}
if (Config::warnFormat.find("$line")==-1)
{
err("Error: warning format does not contain a $line tag!\n");
exit(1);
}
if (Config::warnFormat.find("$text")==-1)
{
err("Error: wanring format foes not contain a $text tag!\n");
exit(1);
}
}
initWarningFormat();
// set default man page extension if non is given by the user
if (Config::manExtension.isEmpty())
...
...
@@ -715,7 +742,7 @@ void checkConfig()
QFileInfo fi(Config::perlPath);
if (!fi.exists())
{
warn("Warning: tag PERL_PATH: perl interpreter not found at default or"
warn
_cont
("Warning: tag PERL_PATH: perl interpreter not found at default or"
"user specified (%s) location\n",
Config::perlPath.data());
}
...
...
addon/configgen/configgen.cpp
View file @
f38608d4
...
...
@@ -775,21 +775,7 @@ void init()
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Japanese"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Finnish"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Spanish"
);
ConfigBool
::
add
(
"quietFlag"
,
"QUIET"
,
"FALSE"
,
"generate progress messages flag"
,
"The QUIET tag can be used to turn on/off the messages that are generated
\n
"
"by doxygen. Possible values are YES and NO. If left blank NO is used.
\n
"
);
ConfigBool
::
add
(
"warningFlag"
,
"WARNINGS"
,
"TRUE"
,
"generate warnings flag"
,
"The WARNINGS tag can be used to turn on/off the warning messages that are
\n
"
"generated by doxygen. Possible values are YES and NO. If left blank
\n
"
"NO is used.
\n
"
);
ConfigString
::
addFixedValue
(
"outputLanguage"
,
"Croatian"
);
ConfigBool
::
add
(
"noIndexFlag"
,
"DISABLE_INDEX"
,
"FALSE"
,
...
...
@@ -984,6 +970,41 @@ void init()
"documentation sections, marked by
\\
if sectionname ...
\\
endif.
\n
"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo
::
add
(
"Messages"
,
"configuration options related to warning and progress messages"
);
//-----------------------------------------------------------------------------------------------
ConfigBool
::
add
(
"quietFlag"
,
"QUIET"
,
"FALSE"
,
"generate progress messages flag"
,
"The QUIET tag can be used to turn on/off the messages that are generated
\n
"
"by doxygen. Possible values are YES and NO. If left blank NO is used.
\n
"
);
ConfigBool
::
add
(
"warningFlag"
,
"WARNINGS"
,
"TRUE"
,
"generate warnings flag"
,
"The WARNINGS tag can be used to turn on/off the warning messages that are
\n
"
"generated by doxygen. Possible values are YES and NO. If left blank
\n
"
"NO is used.
\n
"
);
ConfigBool
::
add
(
"warningUndocFlag"
,
"WARN_IF_UNDOCUMENTED"
,
"TRUE"
,
"generate undocumented warnings"
,
"If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
\n
"
"for undocumented members. If EXTRACT_ALL is set to YES then this flag will
\n
"
"automatically be disabled.
\n
"
);
ConfigString
::
add
(
"warnFormat"
,
"WARN_FORMAT"
,
"$file:$line: $text"
,
"format of the warning messages"
,
"The WARN_FORMAT tag determines the format of the warning messages that
\n
"
"doxygen can produce. The string should contain the $file, $line, and $text
\n
"
"tags, which will be replaced by the file and line number from which the
\n
"
"warning originated and the warning text.
\n
"
);
//-----------------------------------------------------------------------------------------------
ConfigInfo
::
add
(
"Input"
,
"configuration options related to the input files"
);
//-----------------------------------------------------------------------------------------------
ConfigList
::
add
(
"inputSources"
,
...
...
addon/doxywizard/doxywizard_templ.cpp
View file @
f38608d4
...
...
@@ -13,6 +13,7 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <qmainwindow.h>
#include <qpopupmenu.h>
#include <qfileinfo.h>
...
...
doc/commands.doc
View file @
f38608d4
...
...
@@ -87,6 +87,7 @@ documentation:
<li> \refitem cmdmainpage \mainpage
<li> \refitem cmdname \name
<li> \refitem cmdnamespace \namespace
<li> \refitem cmdnosubgrouping \nosubgrouping
<li> \refitem cmdoverload \overload
<li> \refitem cmdpage \page
<li> \refitem cmdpar \par
...
...
@@ -366,6 +367,14 @@ See section \ref memgroup for an example.
Indicates that a comment block contains documentation for a
namespace with name \<name\>.
<hr>
\subsection cmdnosubgrouping \nosubgrouping
This command can be put in the documentation
of a class. It can be used in combination with member grouping
to avoid that doxygen puts a member group as a subgroup of a
Public/Protected/Private/... section.
<hr>
\subsection cmdoverload \overload [(function declaration)]
...
...
doc/faq.doc
View file @
f38608d4
...
...
@@ -147,11 +147,21 @@ QTime and QIODevice classes.
Another reason is for the nice and bug free utility classes, like QList,
QDict, QString, QArray, QTextStream, QRegExp etc.
The GUI front-end doxywizard uses Qt for... well... the GUI!
<li><b>Can use doxygen on my Java code?</b>
No, at the moment there is no support for Java. I suggest to
use Sun's JavaDoc instead.
<li><b>How can I exclude all test directories from my directory tree?</b>
Simply put an exclude pattern like this in the configuration file:
\verbatim
EXCLUDE_PATTERNS = */test/*
\endverbatim
</ol>
\htmlonly
...
...
doc/starting.doc
View file @
f38608d4
...
...
@@ -493,13 +493,16 @@ detailed information about the group.
Nesting of member groups is not allowed.
If all members of a member group have the same type and protection level
(for instance all are static public members), then the whole member
group is displayed as a subgroup of the type/protection level group
(the group is displayed as a subsection of the "Static Public Members"
section for instance). If two or more members have different types,
then the group is put at the same level as the automatically
generated groups.
If all members of a member group inside a class have the same type
and protection level (for instance all are static public members),
then the whole member group is displayed as a subgroup of
the type/protection level group (the group is displayed as a
subsection of the "Static Public Members" section for instance).
If two or more members have different types, then the group is put
at the same level as the automatically generated groups.
If you want to force all member-groups of a class to be at the top level,
you should put a \ref cmdnosubgrouping "\\nosubgrouping" command inside the
documentation of the class.
\par Example:
\verbinclude memgrp.cpp
...
...
packages/rpm/doxygen.spec
View file @
f38608d4
Name: doxygen
Version: 1.1.3-200005
14
Version: 1.1.3-200005
22
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
...
...
src/classdef.cpp
View file @
f38608d4
...
...
@@ -42,8 +42,11 @@ static QCString stripExtension(const char *fName)
}
// constructs a new class definition
ClassDef
::
ClassDef
(
const
char
*
nm
,
CompoundType
ct
,
const
char
*
ref
,
const
char
*
fName
)
:
Definition
(
removeRedundantWhiteSpace
(
nm
))
ClassDef
::
ClassDef
(
const
char
*
defFileName
,
int
defLine
,
const
char
*
nm
,
CompoundType
ct
,
const
char
*
ref
,
const
char
*
fName
)
:
Definition
(
defFileName
,
defLine
,
removeRedundantWhiteSpace
(
nm
))
{
//name=n;
if
(
fName
)
...
...
@@ -83,6 +86,16 @@ ClassDef::ClassDef(const char *nm,CompoundType ct,const char *ref,const char *fN
memberGroupList
=
new
MemberGroupList
;
memberGroupList
->
setAutoDelete
(
TRUE
);
memberGroupDict
=
new
MemberGroupDict
(
257
);
int
i
=
name
().
findRev
(
"::"
);
if
(
i
==-
1
)
{
scopelessName
=
name
();
}
else
{
scopelessName
=
name
().
right
(
name
().
length
()
-
i
-
2
);
}
subGrouping
=
TRUE
;
}
// destroy the class definition
...
...
@@ -354,12 +367,14 @@ void ClassDef::insertMember(MemberDef *md,int groupId)
enumValMembers
.
append
(
md
);
break
;
case
MemberDef
:
:
Function
:
if
(
md
->
name
()
==
name
()
||
// constructor
if
(
md
->
name
()
==
scopelessName
||
// constructor
(
md
->
name
().
find
(
'~'
)
!=-
1
&&
// hack to detect destructor
md
->
name
().
find
(
"operator"
)
==-
1
)
)
{
constructors
.
append
(
md
);
}
else
{
if
(
Config
::
sortMembersFlag
)
...
...
@@ -454,6 +469,17 @@ void ClassDef::computeAnchors()
setAnchors
(
'u'
,
&
priTypes
);
}
void
ClassDef
::
distributeMemberGroupDocumentation
()
{
MemberGroupListIterator
mgli
(
*
memberGroupList
);
MemberGroup
*
mg
;
for
(;(
mg
=
mgli
.
current
());
++
mgli
)
{
mg
->
distributeMemberGroupDocumentation
();
}
}
// add a file name to the used files set
void
ClassDef
::
insertUsedFile
(
const
char
*
f
)
{
...
...
@@ -524,7 +550,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
OutputList
briefOutput
(
&
ol
);
if
(
!
briefDescription
().
isEmpty
())
{
parseDoc
(
briefOutput
,
name
(),
0
,
briefDescription
());
parseDoc
(
briefOutput
,
defFileName
,
defLine
,
name
(),
0
,
briefDescription
());
ol
+=
briefOutput
;
ol
.
writeString
(
"
\n
"
);
ol
.
pushGeneratorState
();
...
...
@@ -738,7 +764,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
MemberGroup
*
mg
;
for
(;(
mg
=
mgli
.
current
());
++
mgli
)
{
if
(
!
mg
->
allMembersInSameSection
())
// group is in its own section
if
(
!
mg
->
allMembersInSameSection
()
||
!
subGrouping
)
// group is in its own section
{
mg
->
writeDeclarations
(
ol
,
this
,
0
,
0
,
0
);
}
...
...
@@ -856,7 +882,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
ol
.
disableAllBut
(
OutputGenerator
::
RTF
);
ol
.
newParagraph
();
ol
.
popGeneratorState
();
parseDoc
(
ol
,
name
(),
0
,
documentation
()
+
"
\n
"
);
parseDoc
(
ol
,
defFileName
,
defLine
,
name
(),
0
,
documentation
()
+
"
\n
"
);
}
// write examples
if
(
exampleFlag
)
...
...
@@ -1149,33 +1175,6 @@ void ClassDef::writeMemberList(OutputList &ol)
ol
.
popGeneratorState
();
}
//void ClassDef::writeIncludeFile(OutputList &ol)
//{
// initParseCodeContext();
// if (!incFile) return;
// //printf("incFile=%s\n",incFile->absFilePath().data());
// ol.disableAllBut(OutputGenerator::Html);
// startFile(ol,fileName+"-include",name()+" Include File");
// startTitle(ol,0);
// QCString n=incName.copy();
// if (incName.isEmpty())
// {
// n=incFile->name();
// if (Config::fullPathNameFlag)
// {
// n.prepend(stripFromPath(incFile->getPath().copy()));
// }
// }
// parseText(ol,n);
// endTitle(ol,0,0);
// parseText(ol,theTranslator->trVerbatimText(incFile->name()));
// //ol.writeRuler();
// ol.startCodeFragment();
// parseCode(ol,n,fileToString(incFile->absFilePath()),FALSE,0);
// ol.endCodeFragment();
// endFile(ol);
// ol.enableAll();
//}
// add a reference to an example
bool
ClassDef
::
addExample
(
const
char
*
anchor
,
const
char
*
nameStr
,
...
...
@@ -1203,48 +1202,6 @@ bool ClassDef::hasExamples()
return
exampleList
->
count
()
>
0
;
}
#if 0
// write the list of all examples that are used in this class.
void ClassDef::writeExample(OutputList &ol)
{
QCString exampleLine=theTranslator->trWriteList(exampleList->count());
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes
while ((newIndex=marker.match(exampleLine,index,&matchLen))!=-1)
{
bool ok;
parseText(ol,exampleLine.mid(index,newIndex-index));
uint entryIndex = exampleLine.mid(newIndex+1,matchLen-1).toUInt(&ok);
Example *e=exampleList->at(entryIndex);
if (ok && e)
{
ol.writeObjectLink(0,e->file,e->anchor,e->name);
}
index=newIndex+matchLen;
}
parseText(ol,exampleLine.right(exampleLine.length()-index));
ol.writeString(".");
#if 0
Example *e=exampleList->first();
while (e)
{
ol.writeObjectLink(0,e->file,e->anchor,e->name);
e=exampleList->next();
if (e)
{
if (exampleList->at()==(int)exampleList->count()-1)
parseText(ol," "+theTranslator->trAnd()+" ");
else
ol.writeString(", ");
}
}
ol.writeString(".");
#endif
}
#endif
void
ClassDef
::
setTemplateArguments
(
ArgumentList
*
al
)
{
...
...
@@ -1260,33 +1217,6 @@ void ClassDef::setTemplateArguments(ArgumentList *al)
}
}
//QCString ClassDef::getTemplateNameString()
//{
// QCString result;
// if (!tempArgs || tempArgs->count()==0) return result;
// result="<";
// Argument *a=tempArgs->first();
// while (a)
// {
// if (!a->name.isEmpty()) // add template argument name
// {
// result+=a->name;
// }
// else // extract name from type
// {
// int i=a->type.length()-1;
// while (i>=0 && isId(a->type.at(i))) i--;
// if (i>0)
// {
// result+=a->type.right(a->type.length()-i-1);
// }
// }
// a=tempArgs->next();
// if (a) result+=", ";
// }
// result+=">";
// return result;
//}
bool
ClassDef
::
hasNonReferenceSuperClass
()
{
...
...
@@ -1297,33 +1227,6 @@ bool ClassDef::hasNonReferenceSuperClass()
return
found
;
}
//void ClassDef::writeMembersToContents()
//{
// HtmlHelp *htmlHelp = HtmlHelp::getInstance();
//
// htmlHelp->incContentsDepth();
//
// MemberNameInfoListIterator mnili(*allMemberNameInfoList);
// MemberNameInfo *mni;
// for (;(mni=mnili.current());++mnili)
// {
// MemberNameInfoIterator mnii(*mni);
// MemberInfo *mi;
// for (mnii.toLast();(mi=mnii.current());--mnii)
// {
// MemberDef *md=mi->memberDef;
// ClassDef *cd=md->memberClass();
// if (md->isLinkable() && cd==this) // member is not inherited
// {
// htmlHelp->addContentsItem(md->name()+md->argsString(),
// cd->getOutputFileBase(),
// md->anchor());
// }
// }
// }
// htmlHelp->decContentsDepth();
//}
void
ClassDef
::
writeDeclaration
(
OutputList
&
ol
,
MemberDef
*
md
,
bool
inGroup
)
{
//ol.insertMemberAlign();
...
...
src/classdef.h
View file @
f38608d4
...
...
@@ -53,7 +53,9 @@ class ClassDef : public Definition
Interface
=
Entry
::
INTERFACE_SEC
,
Exception
=
Entry
::
EXCEPTION_SEC
};
ClassDef
(
const
char
*
name
,
CompoundType
ct
,
const
char
*
ref
=
0
,
const
char
*
fName
=
0
);
ClassDef
(
const
char
*
fileName
,
int
startLine
,
const
char
*
name
,
CompoundType
ct
,
const
char
*
ref
=
0
,
const
char
*
fName
=
0
);
~
ClassDef
();
QCString
getOutputFileBase
()
const
{
return
fileName
;
}
CompoundType
compoundType
()
const
{
return
compType
;
}
...
...
@@ -115,8 +117,11 @@ class ClassDef : public Definition
{
return
usesIntfClassDict
;
}
void
setSubGrouping
(
bool
enabled
)
{
subGrouping
=
enabled
;
}
bool
visited
;
void
distributeMemberGroupDocumentation
();
protected
:
void
addUsedInterfaceClasses
(
MemberDef
*
md
,
const
char
*
typeStr
);
...
...
@@ -126,6 +131,7 @@ class ClassDef : public Definition
IncludeInfo
*
incInfo
;
// header file to refer to
QCString
incName
;
// alternative include file name
QCString
memListFileName
;
QCString
scopelessName
;
// name without any scopes
BaseClassList
*
inherits
;
BaseClassList
*
inheritedBy
;
NamespaceDef
*
nspace
;
// the namespace this class is in
...
...
@@ -177,6 +183,10 @@ class ClassDef : public Definition
FileDef
*
fileDef
;
UsesClassDict
*
usesImplClassDict
;
UsesClassDict
*
usesIntfClassDict
;
bool
subGrouping
;
// does this class group its user-grouped members
// as a sub-section of the normal (public/protected/..)
// groups?
};
struct
UsesClassDef
...
...
src/code.l
View file @
f38608d4
...
...
@@ -1002,10 +1002,10 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<SkipCxxComment>. {
g_code->codify(yytext);
}
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*{B}*"/*"[*!]/[^/*] {
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*
({B}*"//@"[{}]{B}*\n)?
{B}*"/*"[*!]/[^/*] {
g_yyLineNr+=QCString(yytext).contains('\n');
}
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)* {
<RemoveSpecialCComment>"*/"{B}*\n({B}*\n)*
({B}*"//@"[{}]{B}*\n)?
{
g_yyLineNr+=QCString(yytext).contains('\n');
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
...
...
@@ -1046,6 +1046,40 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
endFontClass();
}
}
<*>\n({B}*"//@"[{}]{B}*\n) { // remove one-line group marker
if (Config::stripCommentsFlag)
{
g_yyLineNr+=((QCString)yytext).contains('\n');
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
startCodeLine(*g_code);
}
}
else
{
startFontClass("comment");
codifyLines(yytext);
endFontClass();
}
}
<*>^{B}*"//@"[{}]{B}*\n { // remove one-line group marker
if (Config::stripCommentsFlag)
{
g_yyLineNr++;
g_code->endCodeLine();
if (g_yyLineNr<g_inputLines)
{
startCodeLine(*g_code);
}
}
else
{
startFontClass("comment");
codifyLines(yytext);
endFontClass();
}
}
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
if (Config::stripCommentsFlag)
{
...
...
src/config.h
View file @
f38608d4
...
...
@@ -35,8 +35,6 @@ struct Config
static
QCString
projectNumber
;
// the number of the project
static
QCString
outputDir
;
// the global output directory
static
QCString
outputLanguage
;
// the output language
static
bool
quietFlag
;
// generate progress messages flag
static
bool
warningFlag
;
// generate warnings flag
static
bool
noIndexFlag
;
// generate condensed index flag
static
bool
extractAllFlag
;
// gererate docs for all classes flag
static
bool
extractPrivateFlag
;
// generate docs for private members flag
...
...
@@ -61,6 +59,10 @@ struct Config
static
bool
sortMembersFlag
;
// sort members alphabetically?
static
int
tabSize
;
// number of spaces in a tab
static
QStrList
sectionFilterList
;
// list of section filters that are enabled
static
bool
quietFlag
;
// generate progress messages flag
static
bool
warningFlag
;
// generate warnings flag
static
bool
warningUndocFlag
;
// generate undocumented warnings
static
QCString
warnFormat
;
// format of the warning messages
static
QStrList
inputSources
;
// list of input files
static
QStrList
filePatternList
;
// list of file patterns
static
bool
recursiveFlag
;
// scan directories recursively
...
...
src/config.l
View file @
f38608d4
...
...
@@ -40,7 +40,7 @@ void err(const char *fmt, ...)
vfprintf(stderr, fmt, args);
va_end(args);
}
void warn(const char *fmt, ...)
void warn
_cont
(const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
...
...
@@ -67,8 +67,6 @@ QCString Config::projectName;
QCString Config::projectNumber;
QCString Config::outputDir;
QCString Config::outputLanguage = "English";
bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE;
bool Config::noIndexFlag = FALSE;
bool Config::extractAllFlag = FALSE;
bool Config::extractPrivateFlag = FALSE;
...
...
@@ -93,6 +91,10 @@ bool Config::inlineInfoFlag = TRUE;
bool Config::sortMembersFlag = TRUE;
int Config::tabSize = 8;
QStrList Config::sectionFilterList;
bool Config::quietFlag = FALSE;
bool Config::warningFlag = TRUE;
bool Config::warningUndocFlag = TRUE;
QCString Config::warnFormat = "$file:$line: $text";
QStrList Config::inputSources;
QStrList Config::filePatternList;
bool Config::recursiveFlag = FALSE;
...
...
@@ -205,8 +207,6 @@ static int yyread(char *buf,int max_size)
<Start>"PROJECT_NUMBER"[ \t]*"=" { BEGIN(GetString); s=&Config::projectNumber; s->resize(0); }
<Start>"OUTPUT_DIRECTORY"[ \t]*"=" { BEGIN(GetString); s=&Config::outputDir; s->resize(0); }
<Start>"OUTPUT_LANGUAGE"[ \t]*"=" { BEGIN(GetString); s=&Config::outputLanguage; s->resize(0); }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"DISABLE_INDEX"[ \t]*"=" { BEGIN(GetBool); b=&Config::noIndexFlag; }
<Start>"EXTRACT_ALL"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractAllFlag; }
<Start>"EXTRACT_PRIVATE"[ \t]*"=" { BEGIN(GetBool); b=&Config::extractPrivateFlag; }
...
...
@@ -231,6 +231,10 @@ static int yyread(char *buf,int max_size)
<Start>"SORT_MEMBER_DOCS"[ \t]*"=" { BEGIN(GetBool); b=&Config::sortMembersFlag; }
<Start>"TAB_SIZE"[ \t]*"=" { BEGIN(GetString); s=&tabSizeString; s->resize(0); }
<Start>"ENABLED_SECTIONS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::sectionFilterList; l->clear(); elemStr=""; }
<Start>"QUIET"[ \t]*"=" { BEGIN(GetBool); b=&Config::quietFlag; }
<Start>"WARNINGS"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningFlag; }
<Start>"WARN_IF_UNDOCUMENTED"[ \t]*"=" { BEGIN(GetBool); b=&Config::warningUndocFlag; }
<Start>"WARN_FORMAT"[ \t]*"=" { BEGIN(GetString); s=&Config::warnFormat; s->resize(0); }
<Start>"INPUT"[ \t]*"=" { BEGIN(GetStrList); l=&Config::inputSources; l->clear(); elemStr=""; }
<Start>"FILE_PATTERNS"[ \t]*"=" { BEGIN(GetStrList); l=&Config::filePatternList; l->clear(); elemStr=""; }
<Start>"RECURSIVE"[ \t]*"=" { BEGIN(GetBool); b=&Config::recursiveFlag; }
...
...
@@ -354,7 +358,7 @@ static int yyread(char *buf,int max_size)
else
{
*b=FALSE;
warn("Warning: Invalid value `%s' for "
warn
_cont
("Warning: Invalid value `%s' for "
"boolean tag in line %d; use YES or NO\n",
bs.data(),yyLineNr);
}
...
...
@@ -381,8 +385,6 @@ void dumpConfig()
printf("projectNumber=`%s'\n",Config::projectNumber.data());
printf("outputDir=`%s'\n",Config::outputDir.data());
printf("outputLanguage=`%s'\n",Config::outputLanguage.data());
printf("quietFlag=`%d'\n",Config::quietFlag);
printf("warningFlag=`%d'\n",Config::warningFlag);
printf("noIndexFlag=`%d'\n",Config::noIndexFlag);
printf("extractAllFlag=`%d'\n",Config::extractAllFlag);
printf("extractPrivateFlag=`%d'\n",Config::extractPrivateFlag);
...
...
@@ -421,6 +423,11 @@ void dumpConfig()
is=Config::sectionFilterList.next();
}
}
printf("# configuration options related to warning and progress messages\n");
printf("quietFlag=`%d'\n",Config::quietFlag);
printf("warningFlag=`%d'\n",Config::warningFlag);
printf("warningUndocFlag=`%d'\n",Config::warningUndocFlag);
printf("warnFormat=`%s'\n",Config::warnFormat.data());
printf("# configuration options related to the input files\n");
{
char *is=Config::inputSources.first();
...
...
@@ -586,8 +593,6 @@ void Config::init()
Config::projectNumber.resize(0);
Config::outputDir.resize(0);
Config::outputLanguage = "English";
Config::quietFlag = FALSE;
Config::warningFlag = TRUE;
Config::noIndexFlag = FALSE;
Config::extractAllFlag = FALSE;
Config::extractPrivateFlag = FALSE;
...
...
@@ -612,6 +617,10 @@ void Config::init()
Config::sortMembersFlag = TRUE;
Config::tabSize = 8;
Config::sectionFilterList.clear();
Config::quietFlag = FALSE;
Config::warningFlag = TRUE;
Config::warningUndocFlag = TRUE;
Config::warnFormat = "$file:$line: $text";
Config::inputSources.clear();
Config::filePatternList.clear();
Config::recursiveFlag = FALSE;
...
...
@@ -705,7 +714,7 @@ static void writeStringList(QTextStream &t,QStrList &l)
const char *s=p;
bool hasBlanks=FALSE;
while ((c=*p++)!=0 && !hasBlanks) hasBlanks = (c==' ' || c=='\n' || c=='\t');
if (!first) t << " ";
if (!first) t << "
";
first=FALSE;
if (hasBlanks) t << "\"" << s << "\""; else t << s;
p = l.next();
...
...
@@ -785,27 +794,6 @@ void writeTemplateConfig(QFile *f,bool sl)
writeStringValue(t,Config::outputLanguage);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The QUIET tag can be used to turn on/off the messages that are generated \n";
t << "# by doxygen. Possible values are YES and NO. If left blank NO is used. \n";
t << "\n";
}
t << "QUIET = ";
writeBoolValue(t,Config::quietFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The WARNINGS tag can be used to turn on/off the warning messages that are \n";
t << "# generated by doxygen. Possible values are YES and NO. If left blank \n";
t << "# NO is used. \n";
t << "\n";
}
t << "WARNINGS = ";
writeBoolValue(t,Config::warningFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The DISABLE_INDEX tag can be used to turn on/off the condensed index at \n";
...
...
@@ -1073,6 +1061,57 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to warning and progress messages\n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
{
t << "\n";
t << "# The QUIET tag can be used to turn on/off the messages that are generated \n";
t << "# by doxygen. Possible values are YES and NO. If left blank NO is used. \n";
t << "\n";
}
t << "QUIET = ";
writeBoolValue(t,Config::quietFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The WARNINGS tag can be used to turn on/off the warning messages that are \n";
t << "# generated by doxygen. Possible values are YES and NO. If left blank \n";
t << "# NO is used. \n";
t << "\n";
}
t << "WARNINGS = ";
writeBoolValue(t,Config::warningFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings \n";
t << "# for undocumented members. If EXTRACT_ALL is set to YES then this flag will \n";
t << "# automatically be disabled. \n";
t << "\n";
}
t << "WARN_IF_UNDOCUMENTED = ";
writeBoolValue(t,Config::warningUndocFlag);
t << "\n";
if (!sl)
{
t << "\n";
t << "# The WARN_FORMAT tag determines the format of the warning messages that \n";
t << "# doxygen can produce. The string should contain the $file, $line, and $text \n";
t << "# tags, which will be replaced by the file and line number from which the \n";
t << "# warning originated and the warning text. \n";
t << "\n";
}
t << "WARN_FORMAT = ";
writeStringValue(t,Config::warnFormat);
t << "\n";
if (!sl)
{
t << "\n";
}
t << "#---------------------------------------------------------------------------\n";
t << "# configuration options related to the input files\n";
t << "#---------------------------------------------------------------------------\n";
if (!sl)
...
...
@@ -1777,7 +1816,7 @@ void configStrToVal()
int ts = tabSizeString.toInt(&ok);
if (!ok || ts<1 || ts>16)
{
warn("Warning: argument of TAB_SIZE is not a valid number, using tab size of 8 spaces!\n");
warn
_cont
("Warning: argument of TAB_SIZE is not a valid number, using tab size of 8 spaces!\n");
ts=8;
}
Config::tabSize = ts;
...
...
@@ -1793,7 +1832,7 @@ void configStrToVal()
int cols = colsInAlphaIndexString.toInt(&ok);
if (!ok || cols<1 || cols>20)
{
warn("Warning: argument of COLS_IN_ALPHA_INDEX is not a valid number in the range [1..20]!\n"
warn
_cont
("Warning: argument of COLS_IN_ALPHA_INDEX is not a valid number in the range [1..20]!\n"
"Using the default of 5 columns!\n");
cols = 5;
}
...
...
@@ -1830,7 +1869,8 @@ static void substEnvVarsInStrList(QStrList &sl)
if (!wasQuoted) /* as a result of the expansion, a single string
may have expanded into a list, which we'll
add to sl. If the orginal string already
contained multiple elements no splitting is done! */
contained multiple elements no further
splitting is done to allow quoted items with spaces! */
{
...
...
@@ -1843,10 +1883,10 @@ static void substEnvVarsInStrList(QStrList &sl)
{
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
while (i<l && ((c=result.at(i))==' ' || c=='\t')) i++;
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++)
;
while (i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"')) i++
;
if (i<l) // not at the end of the string
{
if (c=='"') // word within quotes
...
...
@@ -1909,6 +1949,7 @@ void substituteEnvironmentVars()
substEnvVarsInString( Config::outputLanguage );
substEnvVarsInStrList( Config::stripFromPath );
substEnvVarsInStrList( Config::sectionFilterList );
substEnvVarsInString( Config::warnFormat );
substEnvVarsInStrList( Config::inputSources );
substEnvVarsInStrList( Config::filePatternList );
substEnvVarsInStrList( Config::excludeSources );
...
...
@@ -1949,6 +1990,29 @@ void checkConfig()
// projectName[0]=toupper(projectName[0]);
//}
if (Config::warnFormat.isEmpty())
{
Config::warnFormat="$file:$line $text";
}
else
{
if (Config::warnFormat.find("$file")==-1)
{
err("Error: warning format does not contain a $file tag!\n");
exit(1);
}
if (Config::warnFormat.find("$line")==-1)
{
err("Error: warning format does not contain a $line tag!\n");
exit(1);
}
if (Config::warnFormat.find("$text")==-1)
{
err("Error: wanring format foes not contain a $text tag!\n");
exit(1);
}
}
initWarningFormat();
// set default man page extension if non is given by the user
if (Config::manExtension.isEmpty())
...
...
@@ -2240,7 +2304,7 @@ void checkConfig()
QFileInfo fi(Config::perlPath);
if (!fi.exists())
{
warn("Warning: tag PERL_PATH: perl interpreter not found at default or"
warn
_cont
("Warning: tag PERL_PATH: perl interpreter not found at default or"
"user specified (%s) location\n",
Config::perlPath.data());
}
...
...
src/definition.cpp
View file @
f38608d4
...
...
@@ -25,9 +25,17 @@
#include "outputlist.h"
#include "scanner.h"
Definition
::
Definition
(
const
char
*
name
,
const
char
*
b
,
const
char
*
d
)
Definition
::
Definition
(
const
char
*
df
,
int
dl
,
const
char
*
name
,
const
char
*
b
,
const
char
*
d
)
{
n
=
name
;
brief
=
b
;
doc
=
d
;
sectionList
=
0
,
startBodyLine
=
endBodyLine
=-
1
,
bodyDef
=
0
;
defFileName
=
df
;
defLine
=
dl
;
n
=
name
;
brief
=
b
;
doc
=
d
;
sectionList
=
0
,
startBodyLine
=
endBodyLine
=-
1
,
bodyDef
=
0
;
}
Definition
::~
Definition
()
...
...
src/definition.h
View file @
f38608d4
...
...
@@ -25,12 +25,14 @@ class FileDef;
class
OutputList
;
class
SectionList
;
/*! The common base class of all
definition
s. */
/*! The common base class of all
entity definitions found in the source
s. */
class
Definition
{
public
:
/*! create a new definition */
Definition
(
const
char
*
name
,
const
char
*
b
=
0
,
const
char
*
d
=
0
);
Definition
(
const
char
*
defFileName
,
int
defLine
,
const
char
*
name
,
const
char
*
b
=
0
,
const
char
*
d
=
0
);
/*! destroys the definition */
virtual
~
Definition
();
/*! returns the name of the definition */
...
...
@@ -92,17 +94,27 @@ class Definition
FileDef
*
getBodyDef
()
{
return
bodyDef
;
}
void
writeSourceRef
(
OutputList
&
ol
,
const
char
*
scopeName
);
/*! returns the file in which this definition was found */
QCString
getDefFileName
()
const
{
return
defFileName
;
}
/*! returns the line number at which the definition was found */
int
getDefLine
()
const
{
return
defLine
;
}
protected
:
int
startBodyLine
;
// line number of the start of the definition
int
endBodyLine
;
// line number of the end of the definition
FileDef
*
bodyDef
;
// file definition containing the function body
// where the item was found
QCString
defFileName
;
int
defLine
;
private
:
QCString
n
;
// name of the definition
QCString
brief
;
// brief description
QCString
doc
;
// detailed description
QCString
ref
;
// reference to external documentation
SectionList
*
sectionList
;
// list of all sections
};
#endif
src/doxygen.cpp
View file @
f38608d4
...
...
@@ -183,13 +183,14 @@ void buildGroupList(Entry *root)
if
((
gd
=
groupDict
[
root
->
name
]))
{
warn
(
"Warning: group %s already documented
\n
"
" skipping documentation in file %s at line %d
\n
"
,
root
->
name
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: group %s already documented. "
"Skipping documentation."
,
root
->
name
.
data
());
}
else
{
gd
=
new
GroupDef
(
root
->
name
,
root
->
type
);
gd
=
new
GroupDef
(
root
->
fileName
,
root
->
startLine
,
root
->
name
,
root
->
type
);
gd
->
setBriefDescription
(
root
->
brief
);
gd
->
setDocumentation
(
root
->
doc
);
gd
->
addSectionsToDefinition
(
root
->
anchors
);
...
...
@@ -253,9 +254,12 @@ void buildFileList(Entry *root)
if
((
!
root
->
doc
.
isEmpty
()
&&
!
fd
->
documentation
().
isEmpty
())
||
(
!
root
->
brief
.
isEmpty
()
&&
!
fd
->
briefDescription
().
isEmpty
()))
{
warn
(
"Warning: file %s already documented
\n
"
" skipping documentation in file %s at line %d
\n
"
,
root
->
name
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: file %s already documented. "
"Skipping documentation."
,
root
->
name
.
data
()
);
}
else
{
...
...
@@ -281,21 +285,23 @@ void buildFileList(Entry *root)
else
{
const
char
*
fn
=
root
->
fileName
.
data
();
warn
(
"Warning: the name `%s' supplied as "
"the second argument in the
\\
file statement in file "
"%s at line %d "
,
root
->
name
.
data
(),
fn
?
fn
:
"???"
,
root
->
startLine
);
QCString
text
;
text
.
sprintf
(
"Warning: the name `%s' supplied as "
"the second argument in the
\\
file statement."
,
root
->
name
.
data
()
);
if
(
ambig
)
// name is ambigious
{
warn
(
"matches the following input files:
\n
"
)
;
showFileDefMatches
(
&
inputNameDict
,
root
->
name
);
warn
(
"Please use a more specific name by "
"including a (larger) part of the path!
\n
"
)
;
text
+=
"matches the following input files:
\n
"
;
text
+=
showFileDefMatches
(
&
inputNameDict
,
root
->
name
);
text
+=
"Please use a more specific name by "
"including a (larger) part of the path!"
;
}
else
// name is not an input file
warn
(
"is not an input file
\n
"
);
{
text
+=
"is not an input file"
;
}
warn
(
fn
,
root
->
startLine
,
text
);
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -325,21 +331,23 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
(
fd
=
findFileDef
(
&
inputNameDict
,
root
->
includeFile
,
ambig
))
==
0
)
{
// explicit request
warn
(
"Warning: the name `%s' supplied as "
"the second argument in the
\\
class statement in file "
"%s at line %d "
,
root
->
includeFile
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
QCString
text
;
text
.
sprintf
(
"Warning: the name `%s' supplied as "
"the second argument in the
\\
class statement."
,
root
->
includeFile
.
data
()
);
if
(
ambig
)
// name is ambigious
{
warn
(
"matches the following input files:
\n
"
)
;
showFileDefMatches
(
&
inputNameDict
,
root
->
includeFile
);
warn
(
"Please use a more specific name by "
"including a (larger) part of the path!
\n
"
)
;
text
+=
"matches the following input files:
\n
"
;
text
+=
showFileDefMatches
(
&
inputNameDict
,
root
->
includeFile
);
text
+=
"Please use a more specific name by "
"including a (larger) part of the path!
"
;
}
else
// name is not an input file
warn
(
"is not an input file
\n
"
);
{
text
+=
"is not an input file"
;
}
warn
(
root
->
fileName
,
root
->
startLine
,
text
);
}
else
if
(
root
->
includeFile
.
isEmpty
()
&&
ifd
&&
// see if the file extension makes sense
...
...
@@ -424,8 +432,9 @@ void buildClassList(Entry *root)
if
(
fullName
.
isEmpty
())
{
// this should not be called
warn
(
"Warning: invalid class found in file %s at %d
\n
"
,
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: invalid class name found!"
);
}
else
{
...
...
@@ -452,9 +461,12 @@ void buildClassList(Entry *root)
{
if
(
!
root
->
doc
.
isEmpty
()
&&
!
cd
->
documentation
().
isEmpty
())
{
warn
(
"Warning: class %s already has a detailed description
\n
"
" skipping the one in file %s at line %d
\n
"
,
fullName
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: class %s already has a detailed description. "
"Skipping the one found here."
,
fullName
.
data
()
);
}
else
if
(
!
root
->
doc
.
isEmpty
())
{
...
...
@@ -462,9 +474,12 @@ void buildClassList(Entry *root)
}
if
(
!
root
->
brief
.
isEmpty
()
&&
!
cd
->
briefDescription
().
isEmpty
())
{
warn
(
"Warning: class %s already has a brief description
\n
"
" skipping the one in file %s at line %d
\n
"
,
fullName
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: class %s already has a brief description
\n
"
" skipping the one found here."
,
fullName
.
data
()
);
}
else
if
(
!
root
->
brief
.
isEmpty
())
{
...
...
@@ -494,6 +509,7 @@ void buildClassList(Entry *root)
fd
->
insertClass
(
cd
);
}
addClassToGroups
(
root
,
cd
);
if
(
!
root
->
subGrouping
)
cd
->
setSubGrouping
(
FALSE
);
}
else
// new class
{
...
...
@@ -520,7 +536,7 @@ void buildClassList(Entry *root)
//printf("New class: namespace `%s' name=`%s'\n",className.data(),namespaceName.data());
ClassDef
*
cd
=
new
ClassDef
(
fullName
,
sec
);
ClassDef
*
cd
=
new
ClassDef
(
root
->
fileName
,
root
->
startLine
,
fullName
,
sec
);
cd
->
setDocumentation
(
root
->
doc
);
// copy docs to definition
cd
->
setBriefDescription
(
root
->
brief
);
//printf("new ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
...
...
@@ -530,6 +546,7 @@ void buildClassList(Entry *root)
// file definition containing the class cd
cd
->
setBodySegment
(
root
->
bodyLine
,
root
->
endBodyLine
);
cd
->
setBodyDef
(
fd
);
if
(
!
root
->
subGrouping
)
cd
->
setSubGrouping
(
FALSE
);
addClassToGroups
(
root
,
cd
);
...
...
@@ -614,9 +631,11 @@ void buildNamespaceList(Entry *root)
}
else
if
(
!
nd
->
documentation
().
isEmpty
()
&&
!
root
->
doc
.
isEmpty
())
{
warn
(
"Warning: namespace %s already has a detailed description,
\n
"
" skipping documentation in file %s at line %d
\n
"
,
fullName
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: namespace %s already has a detailed description. "
"Skipping the documentation found here."
,
fullName
.
data
());
}
if
(
nd
->
briefDescription
().
isEmpty
()
&&
!
root
->
brief
.
isEmpty
())
{
...
...
@@ -625,9 +644,11 @@ void buildNamespaceList(Entry *root)
}
else
if
(
!
nd
->
briefDescription
().
isEmpty
()
&&
!
root
->
brief
.
isEmpty
())
{
warn
(
"Warning: namespace %s already has a brief description,
\n
"
" skipping documentation in file %s at line %d
\n
"
,
fullName
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: namespace %s already has a brief description. "
"Skipping the documentation found here."
,
fullName
.
data
()
);
}
}
...
...
@@ -643,7 +664,7 @@ void buildNamespaceList(Entry *root)
)
*/
{
NamespaceDef
*
nd
=
new
NamespaceDef
(
fullName
);
NamespaceDef
*
nd
=
new
NamespaceDef
(
root
->
fileName
,
root
->
startLine
,
fullName
);
nd
->
setDocumentation
(
root
->
doc
);
// copy docs to definition
nd
->
setBriefDescription
(
root
->
brief
);
nd
->
addSectionsToDefinition
(
root
->
anchors
);
...
...
@@ -739,7 +760,8 @@ void findUsingDirectives(Entry *root)
}
else
// unknown namespace, but add it anyway.
{
NamespaceDef
*
nd
=
new
NamespaceDef
(
root
->
name
);
NamespaceDef
*
nd
=
new
NamespaceDef
(
root
->
fileName
,
root
->
startLine
,
root
->
name
);
nd
->
setDocumentation
(
root
->
doc
);
// copy docs to definition
nd
->
setBriefDescription
(
root
->
brief
);
nd
->
addSectionsToDefinition
(
root
->
anchors
);
...
...
@@ -846,12 +868,14 @@ static MemberDef *addVariableToClass(
}
}
// new member variable, typedef or enum value
MemberDef
*
md
=
new
MemberDef
(
root
->
type
,
name
,
root
->
args
,
0
,
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
root
->
type
,
name
,
root
->
args
,
0
,
prot
,
Normal
,
root
->
stat
,
FALSE
,
mtype
,
0
,
0
);
md
->
setMemberClass
(
cd
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
setDefinition
(
def
);
...
...
@@ -912,11 +936,13 @@ static MemberDef *addVariableToFile(
);
// new global variable, enum value or typedef
MemberDef
*
md
=
new
MemberDef
(
root
->
type
,
name
,
root
->
args
,
0
,
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
root
->
type
,
name
,
root
->
args
,
0
,
Public
,
Normal
,
root
->
stat
,
FALSE
,
mtype
,
0
,
0
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
...
...
@@ -1260,12 +1286,14 @@ void buildMemberList(Entry *root)
// new member function, signal or slot.
//printf("new member: %s class template args=`%s'\n",
// root->args.data(),argListToString(cd->templateArguments()).data());
MemberDef
*
md
=
new
MemberDef
(
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
!
root
->
relates
.
isEmpty
(),
mtype
,
root
->
mtArgList
,
root
->
argList
);
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
!
root
->
relates
.
isEmpty
(),
mtype
,
root
->
mtArgList
,
root
->
argList
);
md
->
setMemberClass
(
cd
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
setBodySegment
(
root
->
bodyLine
,
root
->
endBodyLine
);
...
...
@@ -1425,11 +1453,13 @@ void buildMemberList(Entry *root)
// new global function
QCString
name
=
removeRedundantWhiteSpace
(
root
->
name
);
MemberDef
*
md
=
new
MemberDef
(
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
root
->
type
,
name
,
root
->
args
,
root
->
exception
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
FALSE
,
MemberDef
::
Function
,
root
->
tArgList
,
root
->
argList
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
md
->
setPrototype
(
root
->
proto
);
...
...
@@ -1538,8 +1568,9 @@ void buildMemberList(Entry *root)
}
else
if
(
root
->
name
.
isEmpty
())
{
warn
(
"Warning: Illegal member name found in file %s at line %d
\n
"
,
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: Illegal member name found."
);
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -1819,7 +1850,7 @@ static bool findBaseClassRelation(Entry *root,ClassDef *cd,
else
if
(
insertUndocumented
)
{
Debug
::
print
(
Debug
::
Classes
,
0
,
" Undocumented base class `%s' baseClassName=%s
\n
"
,
bi
->
name
.
data
(),
baseClassName
.
data
());
baseClass
=
new
ClassDef
(
baseClassName
,
ClassDef
::
Class
);
baseClass
=
new
ClassDef
(
root
->
fileName
,
root
->
startLine
,
baseClassName
,
ClassDef
::
Class
);
// add base class to this class
cd
->
insertBaseClass
(
baseClass
,
bi
->
prot
,
bi
->
virt
,
templSpec
);
// add this class as super class to the base class
...
...
@@ -1912,10 +1943,11 @@ void computeClassRelations(Entry *root)
else
if
(
bName
.
right
(
2
)
!=
"::"
)
{
if
(
!
root
->
name
.
isEmpty
()
&&
root
->
name
[
0
]
!=
'@'
)
warn
(
"Warning: Compound %s
\n
"
" defined in file %s at line %d
\n
"
" is not documented
\n
"
,
root
->
name
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn_undoc
(
root
->
fileName
,
root
->
startLine
,
"Warning: Compound %s is not documented."
,
root
->
name
.
data
()
);
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -2055,8 +2087,8 @@ void addMemberDocs(Entry *root,
md
->
setBodyDef
(
fd
);
}
}
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
if
(
root
->
inLine
&&
!
md
->
isInline
())
md
->
setInline
(
TRUE
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
addMemberToGroups
(
root
,
md
);
...
...
@@ -2067,9 +2099,12 @@ void addMemberDocs(Entry *root,
{
if
(
md
->
getMemberGroup
()
->
groupId
()
!=
root
->
mGrpId
)
{
warn
(
"Warning: member %s belongs to two different group. The second "
"one is found at line %d of %s and will be ignored
\n
"
,
md
->
name
().
data
(),
root
->
startLine
,
root
->
fileName
.
data
());
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: member %s belongs to two different groups. The second "
"one found here will be ignored."
,
md
->
name
().
data
()
);
}
}
else
// set group id
...
...
@@ -2184,16 +2219,15 @@ static bool findUnrelatedFunction(Entry *root,
}
if
(
!
found
)
// no match
{
warn
(
"Warning: no matching member found for
\n
%s
\n
"
"in file %s at line %d
\n
"
,
decl
,
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: no matching member found for
\n
%s"
,
decl
);
}
}
else
// got docs for an undefined member!
{
warn
(
"Warning: documented function `%s'
\n
in file %s at line %d "
"
was not defined
\n
"
,
decl
,
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"
Warning: documented function `%s' was not defined."
,
decl
);
}
return
TRUE
;
}
...
...
@@ -2771,9 +2805,10 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
}
if
(
count
==
0
&&
!
(
isFriend
&&
funcType
==
"class"
))
warn
(
"Warning: no matching member found for
\n
%s
\n
"
"in file %s at line %d
\n
"
,
fullFuncDecl
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: no matching member found for
\n
%s"
,
fullFuncDecl
.
data
()
);
#if 0
else if (count>1)
{
...
...
@@ -2828,9 +2863,11 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
else
mtype
=
MemberDef
::
Function
;
// new overloaded member function
MemberDef
*
md
=
new
MemberDef
(
funcType
,
funcName
,
funcArgs
,
exceptions
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
TRUE
,
mtype
,
root
->
tArgList
,
root
->
argList
);
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
funcType
,
funcName
,
funcArgs
,
exceptions
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
TRUE
,
mtype
,
root
->
tArgList
,
root
->
argList
);
md
->
setMemberClass
(
cd
);
md
->
setDefinition
(
funcDecl
);
QCString
doc
=
getOverloadDocs
();
...
...
@@ -2839,8 +2876,8 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
md
->
setDocumentation
(
doc
);
//md->setDecFile(root->fileName);
//md->setDecLine(root->startLine);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setPrototype
(
root
->
proto
);
md
->
addSectionsToDefinition
(
root
->
anchors
);
//if (root->mGrpId!=-1)
...
...
@@ -2862,9 +2899,10 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
{
if
(
!
findUnrelatedFunction
(
root
,
namespaceName
,
funcName
,
funcTempList
,
funcArgs
,
funcDecl
))
{
warn
(
"Warning: Cannot determine class for function
\n
%s
\n
"
"in file %s at line %d
\n
"
,
fullFuncDecl
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: Cannot determine class for function
\n
%s"
,
fullFuncDecl
.
data
()
);
}
}
}
...
...
@@ -2908,7 +2946,9 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
mtype
=
MemberDef
::
Function
;
// new related (member) function
MemberDef
*
md
=
new
MemberDef
(
funcType
,
funcName
,
funcArgs
,
exceptions
,
MemberDef
*
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
funcType
,
funcName
,
funcArgs
,
exceptions
,
root
->
protection
,
root
->
virt
,
root
->
stat
,
TRUE
,
mtype
,
root
->
tArgList
,
root
->
argList
);
//printf("Related member name=`%s' decl=`%s' bodyLine=`%d'\n",
...
...
@@ -2959,8 +2999,8 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
md
->
setMemberClass
(
cd
);
md
->
setInline
(
root
->
inLine
);
md
->
setDefinition
(
funcDecl
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setPrototype
(
root
->
proto
);
md
->
setDocumentation
(
root
->
doc
);
md
->
setBriefDescription
(
root
->
brief
);
...
...
@@ -2978,8 +3018,11 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
}
else
{
warn
(
"Warning: class `%s' for related function `%s' is not "
"documented
\n
"
,
className
.
data
(),
funcName
.
data
());
warn_undoc
(
root
->
fileName
,
root
->
startLine
,
"Warning: class `%s' for related function `%s' is not "
"documented."
,
className
.
data
(),
funcName
.
data
()
);
}
}
else
// unrelated not overloaded member found
...
...
@@ -2987,17 +3030,18 @@ void findMember(Entry *root,QCString funcDecl,QCString related,bool overloaded,
if
(
className
.
isEmpty
()
&&
!
findUnrelatedFunction
(
root
,
namespaceName
,
funcName
,
funcTempList
,
funcArgs
,
funcDecl
))
{
warn
(
"Warning: class for member %s (file %s at line %d) cannot "
"be found
\n
"
,
funcName
.
data
(),
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: class for member %s cannot "
"be found."
,
funcName
.
data
()
);
}
}
}
else
{
// this should not be called
warn
(
"Warning: member with no name found in %s at line %d
\n
"
,
root
->
fileName
.
data
(),
root
->
startLine
);
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: member with no name found."
);
}
return
;
}
...
...
@@ -3164,11 +3208,13 @@ void findEnums(Entry *root)
if
(
!
name
.
isEmpty
())
{
// new enum type
md
=
new
MemberDef
(
0
,
name
,
0
,
0
,
root
->
protection
,
Normal
,
FALSE
,
FALSE
,
MemberDef
::
Enumeration
,
0
,
0
);
md
=
new
MemberDef
(
root
->
fileName
,
root
->
startLine
,
0
,
name
,
0
,
0
,
root
->
protection
,
Normal
,
FALSE
,
FALSE
,
MemberDef
::
Enumeration
,
0
,
0
);
if
(
!
isGlobal
)
md
->
setMemberClass
(
cd
);
else
md
->
setFileDef
(
fd
);
md
->
setDefFile
(
root
->
fileName
);
md
->
setDefLine
(
root
->
startLine
);
//
md->setDefFile(root->fileName);
//
md->setDefLine(root->startLine);
md
->
setBodySegment
(
root
->
bodyLine
,
root
->
endBodyLine
);
bool
ambig
;
md
->
setBodyDef
(
findFileDef
(
&
inputNameDict
,
root
->
fileName
,
ambig
));
...
...
@@ -3360,9 +3406,10 @@ void findEnumDocumentation(Entry *root)
}
if
(
!
found
)
{
warn
(
"Warning: Documentation for undefined enum `%s' found at"
" line %d of file %s
\n
"
,
name
.
data
(),
root
->
startLine
,
root
->
fileName
.
data
());
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: Documentation for undefined enum `%s' found."
,
name
.
data
()
);
}
}
}
...
...
@@ -3739,6 +3786,45 @@ void inheritDocumentation()
//----------------------------------------------------------------------------
void
distributeMemberGroupDocumentation
()
{
// for each class
ClassListIterator
cli
(
classList
);
ClassDef
*
cd
;
for
(
;
(
cd
=
cli
.
current
())
;
++
cli
)
{
cd
->
distributeMemberGroupDocumentation
();
}
// for each file
FileName
*
fn
=
inputNameList
.
first
();
while
(
fn
)
{
FileDef
*
fd
=
fn
->
first
();
while
(
fd
)
{
fd
->
distributeMemberGroupDocumentation
();
fd
=
fn
->
next
();
}
fn
=
inputNameList
.
next
();
}
// for each namespace
NamespaceDef
*
nd
=
namespaceList
.
first
();
while
(
nd
)
{
nd
->
distributeMemberGroupDocumentation
();
nd
=
namespaceList
.
next
();
}
// for each group
GroupDef
*
gd
=
groupList
.
first
();
while
(
gd
)
{
gd
->
distributeMemberGroupDocumentation
();
gd
=
groupList
.
next
();
}
}
//----------------------------------------------------------------------------
void
findDefineDocumentation
(
Entry
*
root
)
{
if
((
root
->
section
==
Entry
::
DEFINEDOC_SEC
||
...
...
@@ -3833,8 +3919,10 @@ void findDefineDocumentation(Entry *root)
}
else
if
(
!
root
->
doc
.
isEmpty
()
||
!
root
->
brief
.
isEmpty
())
// define not found
{
warn
(
"Warning: documentation for unknown define %s found at line %d of "
"file %s
\n
"
,
root
->
name
.
data
(),
root
->
startLine
,
root
->
fileName
.
data
());
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: documentation for unknown define %s found.
\n
"
,
root
->
name
.
data
()
);
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -3873,7 +3961,8 @@ void buildPageList(Entry *root)
baseName
=
baseName
.
left
(
baseName
.
length
()
-
4
);
else
if
(
baseName
.
right
(
5
)
==
".html"
)
baseName
=
baseName
.
left
(
baseName
.
length
()
-
5
);
pi
=
new
PageInfo
(
baseName
,
root
->
doc
,
pi
=
new
PageInfo
(
root
->
fileName
,
root
->
startLine
,
baseName
,
root
->
doc
,
root
->
args
.
stripWhiteSpace
());
QCString
pageName
;
if
(
Config
::
caseSensitiveNames
)
...
...
@@ -3914,14 +4003,17 @@ void findMainPage(Entry *root)
if
(
mainPage
==
0
)
{
//printf("Found main page! \n======\n%s\n=======\n",root->doc.data());
mainPage
=
new
PageInfo
(
"index"
,
root
->
doc
,
root
->
args
.
stripWhiteSpace
());
mainPage
=
new
PageInfo
(
root
->
fileName
,
root
->
startLine
,
"index"
,
root
->
doc
,
root
->
args
.
stripWhiteSpace
());
setFileNameForSections
(
root
->
anchors
,
"index"
);
}
else
{
warn
(
"Warning: found more than one
\\
mainpage comment block!
\n
Skipping the "
"block at line %d of %s
\n
"
,
root
->
startLine
,
root
->
fileName
.
data
());
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: found more than one
\\
mainpage comment block! Skipping this "
"block."
);
}
}
EntryListIterator
eli
(
*
root
->
sublist
);
...
...
@@ -3995,7 +4087,7 @@ void generatePageDocs()
outputList
->
writeSection
(
si
->
label
,
si
->
title
,
FALSE
);
}
outputList
->
startTextBlock
();
parseDoc
(
*
outputList
,
0
,
0
,
pi
->
doc
);
parseDoc
(
*
outputList
,
pi
->
defFileName
,
pi
->
defLine
,
0
,
0
,
pi
->
doc
);
outputList
->
endTextBlock
();
endFile
(
*
outputList
);
outputList
->
enable
(
OutputGenerator
::
Man
);
...
...
@@ -4014,13 +4106,16 @@ void buildExampleList(Entry *root)
{
if
(
exampleDict
[
root
->
name
])
{
warn
(
"Warning: Example %s was already documented. Ignoring "
"documentation at line %d of %s
\n
"
,
root
->
name
.
data
(),
root
->
startLine
,
root
->
fileName
.
data
());
warn
(
root
->
fileName
,
root
->
startLine
,
"Warning: Example %s was already documented. Ignoring "
"documentation found here."
,
root
->
name
.
data
()
);
}
else
{
PageInfo
*
pi
=
new
PageInfo
(
root
->
name
,
root
->
doc
,
root
->
args
);
PageInfo
*
pi
=
new
PageInfo
(
root
->
fileName
,
root
->
startLine
,
root
->
name
,
root
->
doc
,
root
->
args
);
setFileNameForSections
(
root
->
anchors
,
convertSlashes
(
pi
->
name
,
TRUE
)
+
"-example"
);
...
...
@@ -4340,7 +4435,7 @@ void readTagFile(const char *tl)
QFileInfo
fi
(
fileName
);
if
(
!
fi
.
exists
()
||
!
fi
.
isFile
())
{
warn
(
"Warning
: Tag file `%s' does not exist or is not a file. Skipping it...
\n
"
,
err
(
"Error
: Tag file `%s' does not exist or is not a file. Skipping it...
\n
"
,
fileName
.
data
());
return
;
}
...
...
@@ -4457,12 +4552,12 @@ void copyStyleSheet()
}
else
{
warn
(
"Warning
: could not write to style sheet %s
\n
"
,
destFileName
.
data
());
err
(
"Error
: could not write to style sheet %s
\n
"
,
destFileName
.
data
());
}
}
else
{
warn
(
"Warning
: could not open user specified style sheet %s
\n
"
,
Config
::
htmlStyleSheet
.
data
());
err
(
"Error
: could not open user specified style sheet %s
\n
"
,
Config
::
htmlStyleSheet
.
data
());
Config
::
htmlStyleSheet
.
resize
(
0
);
// revert to the default
}
}
...
...
@@ -4709,7 +4804,7 @@ void readFormulaRepository()
int
se
=
line
.
find
(
':'
);
// find name and text separator.
if
(
se
==-
1
)
{
warn
(
"Warning
: formula.repository is corrupted!
\n
"
);
err
(
"Error
: formula.repository is corrupted!
\n
"
);
break
;
}
else
...
...
@@ -4969,7 +5064,7 @@ int main(int argc,char **argv)
if
(
input
.
isEmpty
())
{
warn
(
"No input read, no output generated!
\n
"
);
err
(
"No input read, no output generated!
\n
"
);
exit
(
1
);
}
else
...
...
@@ -5117,6 +5212,9 @@ int main(int argc,char **argv)
inheritDocumentation
();
}
msg
(
"Distributing member group documentation.
\n
"
);
distributeMemberGroupDocumentation
();
/**************************************************************************
* Generate documentation *
**************************************************************************/
...
...
src/doxygen.h
View file @
f38608d4
...
...
@@ -36,8 +36,14 @@
struct
PageInfo
{
PageInfo
(
const
char
*
n
,
const
char
*
d
,
const
char
*
t
)
{
name
=
n
;
doc
=
d
;
title
=
t
;
}
PageInfo
(
const
char
*
f
,
int
l
,
const
char
*
n
,
const
char
*
d
,
const
char
*
t
)
:
defFileName
(
f
),
defLine
(
l
),
name
(
n
),
doc
(
d
),
title
(
t
)
{}
// where the page definition was found
QCString
defFileName
;
int
defLine
;
// contents of the page
QCString
name
;
QCString
doc
;
QCString
title
;
...
...
src/entry.cpp
View file @
f38608d4
...
...
@@ -207,6 +207,7 @@ void Entry::reset()
scopeSpec
.
resize
(
0
);
memberSpec
.
resize
(
0
);
initializer
.
resize
(
0
);
startLine
=
1
;
bodyLine
=
-
1
;
endBodyLine
=
-
1
;
mGrpId
=
-
1
;
...
...
@@ -217,6 +218,7 @@ void Entry::reset()
stat
=
FALSE
;
proto
=
FALSE
;
inLine
=
FALSE
;
subGrouping
=
TRUE
;
protection
=
Public
;
sublist
->
clear
();
extends
->
clear
();
...
...
src/entry.h
View file @
f38608d4
...
...
@@ -159,6 +159,7 @@ class Entry
bool
stat
;
// static ?
bool
proto
;
// prototype ?
bool
inLine
;
// inline ?
bool
subGrouping
;
// automatically group class members?
Specifier
virt
;
// virtualness of the entry
Entry
*
parent
;
// parent node in the tree
QCString
type
;
// member type
...
...
src/filedef.cpp
View file @
f38608d4
...
...
@@ -35,7 +35,7 @@
file was read from a tag file or 0 otherwise
*/
FileDef
::
FileDef
(
const
char
*
p
,
const
char
*
nm
,
const
char
*
ref
)
:
Definition
(
nm
)
:
Definition
(
(
QCString
)
p
+
nm
,
1
,
nm
)
{
path
=
p
;
filepath
=
path
+
nm
;
...
...
@@ -83,6 +83,16 @@ void FileDef::computeAnchors()
setAnchors
(
'a'
,
&
allMemberList
);
}
void
FileDef
::
distributeMemberGroupDocumentation
()
{
MemberGroupListIterator
mgli
(
*
memberGroupList
);
MemberGroup
*
mg
;
for
(;(
mg
=
mgli
.
current
());
++
mgli
)
{
mg
->
distributeMemberGroupDocumentation
();
}
}
/*! Write the documentation page for this file to the file of output
generators \a ol.
*/
...
...
@@ -95,6 +105,8 @@ void FileDef::writeDocumentation(OutputList &ol)
//{
// fn.prepend(stripFromPath(getPath().copy()));
//}
//printf("WriteDocumentation %p diskname=%s\n",this,diskname.data());
QCString
pageTitle
=
name
()
+
" File Reference"
;
startFile
(
ol
,
diskname
,
pageTitle
);
...
...
@@ -113,7 +125,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{
//if (brief.at(bl-1)!='.' && brief.at(bl-1)!='!' && brief.at(bl!='?'))
// brief+='.';
parseDoc
(
briefOutput
,
0
,
0
,
briefDescription
());
parseDoc
(
briefOutput
,
filepath
,
1
,
0
,
0
,
briefDescription
());
ol
+=
briefOutput
;
ol
.
writeString
(
"
\n
"
);
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
...
...
@@ -293,7 +305,7 @@ void FileDef::writeDocumentation(OutputList &ol)
{
//if (doc.at(dl-1)!='.' && doc.at(dl-1)!='!' && doc.at(dl-1)!='?')
// doc+='.';
parseDoc
(
ol
,
0
,
0
,
documentation
()
+
"
\n
"
);
parseDoc
(
ol
,
filepath
,
1
,
0
,
0
,
documentation
()
+
"
\n
"
);
}
//printf("Writing source ref for file %s\n",name().data());
if
(
Config
::
sourceBrowseFlag
)
...
...
src/filedef.h
View file @
f38608d4
...
...
@@ -125,6 +125,8 @@ class FileDef : public Definition
QList
<
IncludeInfo
>
*
includeFileList
()
const
{
return
includeList
;
}
QDict
<
IncludeInfo
>
*
includeFileDict
()
const
{
return
includeDict
;
}
void
distributeMemberGroupDocumentation
();
private
:
MemberList
allMemberList
;
MemberList
defineMembers
;
...
...
src/filename.cpp
View file @
f38608d4
...
...
@@ -55,7 +55,7 @@ void FileName::generateDiskNames()
//printf("Multiple occurrences of %s\n",name.data());
int
i
=
0
,
j
=
0
;
bool
found
=
FALSE
;
while
(
!
found
)
while
(
!
found
)
// search for the common prefix of all paths
{
fd
=
first
();
while
(
fd
&&
fd
->
isReference
())
fd
=
next
();
...
...
@@ -66,7 +66,7 @@ void FileName::generateDiskNames()
{
if
(
!
fd
->
isReference
())
{
//printf("i=%d
fd->path=`%s' fd->name=`%s'\n",i,fd->path
.data(),fd->name().data());
//printf("i=%d
j=%d fd->path=`%s' fd->name=`%s'\n",i,j,fd->path.left(i)
.data(),fd->name().data());
if
(
i
==
(
int
)
fd
->
path
.
length
())
{
//warning("Warning: Input file %s found multiple times!\n"
...
...
@@ -88,8 +88,9 @@ void FileName::generateDiskNames()
//printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
if
(
!
fd
->
isReference
())
{
fd
->
setName
(
fd
->
path
.
right
(
fd
->
path
.
length
()
-
j
-
1
)
+
name
);
fd
->
diskname
=
convertSlashes
(
fd
->
name
());
QCString
prefix
=
fd
->
path
.
right
(
fd
->
path
.
length
()
-
j
-
1
);
fd
->
setName
(
prefix
+
name
);
fd
->
diskname
=
convertSlashes
(
prefix
+
name
);
}
fd
=
next
();
}
...
...
src/filename.h
View file @
f38608d4
...
...
@@ -61,7 +61,8 @@ class FileNameListIterator : public QListIterator<FileName>
class
FileNameDict
:
public
QDict
<
FileName
>
{
public
:
FileNameDict
(
uint
size
)
:
QDict
<
FileName
>
(
size
)
{}
FileNameDict
(
uint
size
)
:
QDict
<
FileName
>
(
size
,
Config
::
caseSensitiveNames
)
{}
~
FileNameDict
()
{}
};
...
...
src/groupdef.cpp
View file @
f38608d4
...
...
@@ -31,8 +31,8 @@
#include "membergroup.h"
#include "doxygen.h"
GroupDef
::
GroupDef
(
const
char
*
na
,
const
char
*
t
)
:
Definition
(
na
)
GroupDef
::
GroupDef
(
const
char
*
df
,
int
dl
,
const
char
*
na
,
const
char
*
t
)
:
Definition
(
df
,
dl
,
na
)
{
fileList
=
new
FileList
;
classList
=
new
ClassList
;
...
...
@@ -66,6 +66,16 @@ GroupDef::~GroupDef()
delete
memberGroupDict
;
}
void
GroupDef
::
distributeMemberGroupDocumentation
()
{
MemberGroupListIterator
mgli
(
*
memberGroupList
);
MemberGroup
*
mg
;
for
(;(
mg
=
mgli
.
current
());
++
mgli
)
{
mg
->
distributeMemberGroupDocumentation
();
}
}
void
GroupDef
::
addFile
(
const
FileDef
*
def
)
{
fileList
->
append
(
def
);
...
...
@@ -159,7 +169,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
OutputList
briefOutput
(
&
ol
);
if
(
!
briefDescription
().
isEmpty
())
{
parseDoc
(
briefOutput
,
name
(),
0
,
briefDescription
());
parseDoc
(
briefOutput
,
defFileName
,
defLine
,
name
(),
0
,
briefDescription
());
ol
+=
briefOutput
;
ol
.
writeString
(
"
\n
"
);
ol
.
pushGeneratorState
();
...
...
@@ -189,7 +199,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if
(
!
fd
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
0
,
0
,
fd
->
briefDescription
());
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
fd
->
briefDescription
());
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
...
...
@@ -214,7 +224,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if
(
!
nd
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
0
,
0
,
nd
->
briefDescription
());
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
nd
->
briefDescription
());
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
...
...
@@ -238,7 +248,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
if
(
!
gd
->
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
0
,
0
,
gd
->
briefDescription
());
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
gd
->
briefDescription
());
ol
.
endMemberDescription
();
ol
.
newParagraph
();
}
...
...
@@ -284,7 +294,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
// write documentation
if
(
!
documentation
().
isEmpty
())
{
parseDoc
(
ol
,
name
(),
0
,
documentation
()
+
"
\n
"
);
parseDoc
(
ol
,
defFileName
,
defLine
,
name
(),
0
,
documentation
()
+
"
\n
"
);
}
}
...
...
@@ -427,7 +437,8 @@ void addMemberToGroups(Entry *root,MemberDef *md)
}
else
if
(
mgd
!=
gd
)
{
warn
(
"Warning: Member %s found in multiple groups.!
\n
"
warn
(
mgd
->
getDefFileName
(),
mgd
->
getDefLine
(),
"Warning: Member %s found in multiple groups.!
\n
"
"The member will be put in group %s, and not in group %s"
,
md
->
name
().
data
(),
mgd
->
name
().
data
(),
gd
->
name
().
data
()
);
...
...
src/groupdef.h
View file @
f38608d4
...
...
@@ -39,7 +39,7 @@ class MemberGroupDict;
class
GroupDef
:
public
Definition
{
public
:
GroupDef
(
const
char
*
name
,
const
char
*
title
);
GroupDef
(
const
char
*
fileName
,
int
line
,
const
char
*
name
,
const
char
*
title
);
~
GroupDef
();
QCString
getOutputFileBase
()
const
{
return
fileName
;
}
const
char
*
groupTitle
()
const
{
return
title
;
}
...
...
@@ -60,6 +60,7 @@ class GroupDef : public Definition
return
isLinkableInProject
()
||
isReference
();
}
void
computeAnchors
();
void
distributeMemberGroupDocumentation
();
private
:
QCString
title
;
// title of the group
...
...
src/htmlgen.cpp
View file @
f38608d4
...
...
@@ -154,7 +154,7 @@ void HtmlGenerator::writeFooter(int part,bool external)
}
t
<<
"doxygen.gif
\"
alt=
\"
doxygen
\"
"
<<
"align=center border=0 "
<<
endl
<<
"width=11
8 height=53></a>
"
<<
versionString
<<
" "
;
"width=11
0 height=53></a>
"
<<
versionString
<<
" "
;
}
break
;
default
:
...
...
src/index.cpp
View file @
f38608d4
...
...
@@ -393,7 +393,8 @@ void writeFileIndex(OutputList &ol)
{
ol
.
docify
(
" ("
);
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
0
,
0
,
parseDoc
(
briefOutput
,
fd
->
absFilePath
(),
1
,
0
,
0
,
abbreviate
(
fd
->
briefDescription
(),
fd
->
name
()));
ol
+=
briefOutput
;
ol
.
docify
(
")"
);
...
...
@@ -432,7 +433,9 @@ void writeFileIndex(OutputList &ol)
{
ol
.
docify
(
" ("
);
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
0
,
0
,
parseDoc
(
briefOutput
,
fd
->
absFilePath
(),
1
,
0
,
0
,
abbreviate
(
fd
->
briefDescription
(),
fd
->
name
()));
ol
+=
briefOutput
;
ol
.
docify
(
")"
);
...
...
@@ -580,8 +583,10 @@ void writeNamespaceIndex(OutputList &ol)
if
(
!
nd
->
briefDescription
().
isEmpty
())
{
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
nd
->
name
(),
0
,
abbreviate
(
nd
->
briefDescription
(),
nd
->
name
()));
parseDoc
(
briefOutput
,
nd
->
getDefFileName
(),
nd
->
getDefLine
(),
nd
->
name
(),
0
,
abbreviate
(
nd
->
briefDescription
(),
nd
->
name
()));
ol
+=
briefOutput
;
}
else
...
...
@@ -654,8 +659,10 @@ void writeAnnotatedClassList(OutputList &ol)
if
(
!
cd
->
briefDescription
().
isEmpty
())
{
OutputList
briefOutput
(
&
ol
);
parseDoc
(
briefOutput
,
cd
->
name
(),
0
,
abbreviate
(
cd
->
briefDescription
(),
cd
->
name
()));
parseDoc
(
briefOutput
,
cd
->
getDefFileName
(),
cd
->
getDefLine
(),
cd
->
name
(),
0
,
abbreviate
(
cd
->
briefDescription
(),
cd
->
name
()));
ol
+=
briefOutput
;
}
else
...
...
@@ -1454,10 +1461,15 @@ void writeGroupList(OutputList &ol)
{
ol
.
startDescItem
();
ol
.
startTextLink
(
gd
->
getOutputFileBase
(),
0
);
parseDoc
(
ol
,
0
,
0
,
gd
->
groupTitle
());
parseDoc
(
ol
,
gd
->
getDefFileName
(),
gd
->
getDefLine
(),
0
,
0
,
gd
->
groupTitle
());
ol
.
endTextLink
();
ol
.
endDescItem
();
parseDoc
(
ol
,
0
,
0
,
gd
->
briefDescription
());
parseDoc
(
ol
,
gd
->
getDefFileName
(),
gd
->
getDefLine
(),
0
,
0
,
gd
->
briefDescription
());
ol
.
newParagraph
();
}
}
...
...
@@ -1517,6 +1529,11 @@ void writeIndex(OutputList &ol)
//ol.disable(OutputGenerator::Latex);
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
QCString
defFileName
=
mainPage
?
mainPage
->
defFileName
.
data
()
:
"<generated>"
;
int
defLine
=
mainPage
?
mainPage
->
defLine
:
1
;
if
(
!
mainPage
||
mainPage
->
title
.
isEmpty
())
ol
.
startFile
(
"index"
,
"Main Index"
,
FALSE
);
else
...
...
@@ -1526,7 +1543,7 @@ void writeIndex(OutputList &ol)
ol
.
startTitleHead
(
0
);
if
(
mainPage
&&
!
mainPage
->
title
.
isEmpty
())
{
parseDoc
(
ol
,
0
,
0
,
mainPage
->
title
);
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
mainPage
->
title
);
}
else
{
...
...
@@ -1537,14 +1554,14 @@ void writeIndex(OutputList &ol)
if
(
!
Config
::
projectNumber
.
isEmpty
())
{
ol
.
startProjectNumber
();
parseDoc
(
ol
,
0
,
0
,
Config
::
projectNumber
);
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
Config
::
projectNumber
);
ol
.
endProjectNumber
();
}
if
(
Config
::
noIndexFlag
)
writeQuickLinks
(
ol
,
FALSE
);
if
(
mainPage
)
{
parseDoc
(
ol
,
0
,
0
,
mainPage
->
doc
);
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
mainPage
->
doc
);
}
endFile
(
ol
);
...
...
@@ -1565,7 +1582,7 @@ void writeIndex(OutputList &ol)
if
(
!
Config
::
projectNumber
.
isEmpty
())
{
ol
.
startProjectNumber
();
parseDoc
(
ol
,
0
,
0
,
Config
::
projectNumber
);
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
Config
::
projectNumber
);
ol
.
endProjectNumber
();
}
ol
.
endIndexSection
(
isTitlePageStart
);
...
...
@@ -1577,7 +1594,7 @@ void writeIndex(OutputList &ol)
ol
.
startIndexSection
(
isMainPage
);
if
(
!
mainPage
->
title
.
isEmpty
())
{
parseDoc
(
ol
,
0
,
0
,
mainPage
->
title
);
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
mainPage
->
title
);
}
else
{
...
...
@@ -1674,7 +1691,7 @@ void writeIndex(OutputList &ol)
ol
.
writeSection
(
si
->
label
,
si
->
title
,
FALSE
);
}
ol
.
startTextBlock
();
parseDoc
(
ol
,
0
,
0
,
mainPage
->
doc
);
parseDoc
(
ol
,
defFileName
,
defLine
,
0
,
0
,
mainPage
->
doc
);
ol
.
endTextBlock
();
endFile
(
ol
);
ol
.
enable
(
OutputGenerator
::
Man
);
...
...
src/latexgen.cpp
View file @
f38608d4
...
...
@@ -596,7 +596,7 @@ void LatexGenerator::writeStyleInfo(int part)
t
<<
"
\\
newenvironment{CompactItemize}
\n
"
;
t
<<
"{
\n
"
;
t
<<
"
\\
begin{itemize}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{-
4
pt}
\n
"
;
t
<<
"
\\
setlength{
\\
itemsep}{-
3
pt}
\n
"
;
t
<<
"
\\
setlength{
\\
parsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
topsep}{0pt}
\n
"
;
t
<<
"
\\
setlength{
\\
partopsep}{0pt}
\n
"
;
...
...
src/logos.cpp
View file @
f38608d4
...
...
@@ -31,303 +31,207 @@ unsigned char null_data[] = {
unsigned
int
null_len
=
43
;
unsigned
char
logo_data
[]
=
{
0x47
,
0x49
,
0x46
,
0x38
,
0x37
,
0x61
,
0x76
,
0x00
,
0x35
,
0x00
,
0xf7
,
0x00
,
0x00
,
0x31
,
0x7b
,
0x6b
,
0x31
,
0x7b
,
0x73
,
0x31
,
0x84
,
0x7b
,
0x31
,
0x84
,
0x84
,
0x31
,
0x8c
,
0x7b
,
0x31
,
0x8c
,
0x84
,
0x31
,
0x8c
,
0x8c
,
0x39
,
0x7b
,
0x7b
,
0x39
,
0x84
,
0x7b
,
0x39
,
0x84
,
0x84
,
0x39
,
0x8c
,
0x84
,
0x39
,
0x94
,
0x8c
,
0x39
,
0x94
,
0x94
,
0x39
,
0x9c
,
0x94
,
0x42
,
0x7b
,
0x73
,
0x42
,
0x8c
,
0x84
,
0x42
,
0x94
,
0x8c
,
0x42
,
0x9c
,
0x8c
,
0x42
,
0x9c
,
0x94
,
0x42
,
0xa5
,
0x9c
,
0x4a
,
0x5a
,
0x5a
,
0x4a
,
0x84
,
0x84
,
0x4a
,
0x8c
,
0x84
,
0x4a
,
0x94
,
0x8c
,
0x4a
,
0x94
,
0x94
,
0x4a
,
0x9c
,
0x94
,
0x4a
,
0xa5
,
0x94
,
0x4a
,
0xa5
,
0x9c
,
0x4a
,
0xa5
,
0xa5
,
0x52
,
0x52
,
0x52
,
0x52
,
0x73
,
0x73
,
0x52
,
0x7b
,
0x7b
,
0x52
,
0x84
,
0x84
,
0x52
,
0x94
,
0x8c
,
0x52
,
0x9c
,
0x94
,
0x52
,
0xa5
,
0x9c
,
0x52
,
0xad
,
0xa5
,
0x52
,
0xb5
,
0xad
,
0x5a
,
0x5a
,
0x5a
,
0x5a
,
0x63
,
0x63
,
0x5a
,
0x6b
,
0x6b
,
0x5a
,
0x7b
,
0x7b
,
0x5a
,
0x8c
,
0x84
,
0x5a
,
0x8c
,
0x8c
,
0x5a
,
0x94
,
0x8c
,
0x5a
,
0x94
,
0x94
,
0x5a
,
0x9c
,
0x94
,
0x5a
,
0xa5
,
0x9c
,
0x5a
,
0xa5
,
0xa5
,
0x5a
,
0xad
,
0xa5
,
0x5a
,
0xb5
,
0xad
,
0x5a
,
0xbd
,
0xb5
,
0x63
,
0x63
,
0x63
,
0x63
,
0x6b
,
0x6b
,
0x63
,
0x73
,
0x73
,
0x63
,
0x7b
,
0x7b
,
0x63
,
0x84
,
0x84
,
0x63
,
0x8c
,
0x8c
,
0x63
,
0x94
,
0x94
,
0x63
,
0xa5
,
0x9c
,
0x63
,
0xa5
,
0xa5
,
0x63
,
0xad
,
0xa5
,
0x63
,
0xb5
,
0xad
,
0x63
,
0xb5
,
0xb5
,
0x63
,
0xbd
,
0xbd
,
0x6b
,
0x6b
,
0x6b
,
0x6b
,
0x73
,
0x73
,
0x6b
,
0x7b
,
0x7b
,
0x6b
,
0x8c
,
0x8c
,
0x6b
,
0x9c
,
0x94
,
0x6b
,
0xa5
,
0x9c
,
0x6b
,
0xad
,
0xa5
,
0x6b
,
0xb5
,
0xad
,
0x6b
,
0xb5
,
0xb5
,
0x6b
,
0xbd
,
0xb5
,
0x6b
,
0xbd
,
0xbd
,
0x6b
,
0xc6
,
0xbd
,
0x6b
,
0xc6
,
0xc6
,
0x6b
,
0xce
,
0xc6
,
0x73
,
0x73
,
0x73
,
0x73
,
0x7b
,
0x7b
,
0x73
,
0x84
,
0x84
,
0x73
,
0x8c
,
0x8c
,
0x73
,
0x94
,
0x8c
,
0x73
,
0x94
,
0x94
,
0x73
,
0x9c
,
0x94
,
0x73
,
0x9c
,
0x9c
,
0x73
,
0xa5
,
0x9c
,
0x73
,
0xa5
,
0xa5
,
0x73
,
0xad
,
0xad
,
0x73
,
0xb5
,
0xad
,
0x73
,
0xb5
,
0xb5
,
0x73
,
0xbd
,
0xbd
,
0x73
,
0xce
,
0xce
,
0x7b
,
0x7b
,
0x7b
,
0x7b
,
0x8c
,
0x8c
,
0x7b
,
0x94
,
0x94
,
0x7b
,
0x9c
,
0x9c
,
0x7b
,
0xa5
,
0xa5
,
0x7b
,
0xb5
,
0xb5
,
0x7b
,
0xbd
,
0xb5
,
0x7b
,
0xbd
,
0xbd
,
0x7b
,
0xc6
,
0xc6
,
0x7b
,
0xce
,
0xc6
,
0x7b
,
0xce
,
0xce
,
0x7b
,
0xd6
,
0xce
,
0x7b
,
0xd6
,
0xd6
,
0x7b
,
0xde
,
0xd6
,
0x84
,
0x84
,
0x84
,
0x84
,
0x8c
,
0x8c
,
0x84
,
0x9c
,
0x94
,
0x84
,
0x9c
,
0x9c
,
0x84
,
0xa5
,
0x9c
,
0x84
,
0xad
,
0xad
,
0x84
,
0xb5
,
0xb5
,
0x84
,
0xc6
,
0xc6
,
0x84
,
0xce
,
0xce
,
0x84
,
0xd6
,
0xd6
,
0x8c
,
0x7b
,
0x7b
,
0x8c
,
0x84
,
0x84
,
0x8c
,
0x8c
,
0x8c
,
0x8c
,
0xa5
,
0xa5
,
0x8c
,
0xad
,
0xad
,
0x8c
,
0xb5
,
0xb5
,
0x8c
,
0xbd
,
0xb5
,
0x8c
,
0xbd
,
0xbd
,
0x8c
,
0xc6
,
0xc6
,
0x8c
,
0xce
,
0xce
,
0x8c
,
0xde
,
0xde
,
0x94
,
0x7b
,
0x7b
,
0x94
,
0x94
,
0x94
,
0x94
,
0x9c
,
0x9c
,
0x94
,
0xa5
,
0xa5
,
0x94
,
0xad
,
0xad
,
0x94
,
0xbd
,
0xb5
,
0x94
,
0xc6
,
0xbd
,
0x9c
,
0x9c
,
0x9c
,
0x9c
,
0xa5
,
0xa5
,
0x9c
,
0xb5
,
0xb5
,
0x9c
,
0xbd
,
0xbd
,
0x9c
,
0xc6
,
0xbd
,
0x9c
,
0xc6
,
0xc6
,
0x9c
,
0xce
,
0xc6
,
0x9c
,
0xce
,
0xce
,
0x9c
,
0xd6
,
0xd6
,
0xa5
,
0x5a
,
0x5a
,
0xa5
,
0x63
,
0x63
,
0xa5
,
0x84
,
0x84
,
0xa5
,
0x94
,
0x94
,
0xa5
,
0xa5
,
0xa5
,
0xa5
,
0xad
,
0xa5
,
0xa5
,
0xbd
,
0xbd
,
0xa5
,
0xc6
,
0xc6
,
0xa5
,
0xce
,
0xce
,
0xa5
,
0xd6
,
0xd6
,
0xa5
,
0xde
,
0xde
,
0xa5
,
0xe7
,
0xde
,
0xad
,
0x21
,
0x18
,
0xad
,
0x21
,
0x21
,
0xad
,
0x52
,
0x52
,
0xad
,
0x63
,
0x63
,
0xad
,
0x7b
,
0x7b
,
0xad
,
0xad
,
0xad
,
0xad
,
0xb5
,
0xb5
,
0xad
,
0xbd
,
0xbd
,
0xad
,
0xce
,
0xc6
,
0xad
,
0xce
,
0xce
,
0xad
,
0xd6
,
0xce
,
0xad
,
0xd6
,
0xd6
,
0xb5
,
0x21
,
0x21
,
0xb5
,
0x52
,
0x52
,
0xb5
,
0x5a
,
0x5a
,
0xb5
,
0x63
,
0x63
,
0xb5
,
0x6b
,
0x6b
,
0xb5
,
0xb5
,
0xb5
,
0xb5
,
0xc6
,
0xc6
,
0xb5
,
0xce
,
0xce
,
0xb5
,
0xd6
,
0xce
,
0xb5
,
0xd6
,
0xd6
,
0xb5
,
0xde
,
0xd6
,
0xb5
,
0xde
,
0xde
,
0xb5
,
0xe7
,
0xe7
,
0xbd
,
0x21
,
0x21
,
0xbd
,
0x29
,
0x29
,
0xbd
,
0x42
,
0x42
,
0xbd
,
0x52
,
0x52
,
0xbd
,
0x73
,
0x73
,
0xbd
,
0x7b
,
0x7b
,
0xbd
,
0x84
,
0x84
,
0xbd
,
0xbd
,
0xbd
,
0xbd
,
0xc6
,
0xc6
,
0xbd
,
0xce
,
0xce
,
0xbd
,
0xd6
,
0xd6
,
0xbd
,
0xde
,
0xde
,
0xc6
,
0x39
,
0x39
,
0xc6
,
0x73
,
0x73
,
0xc6
,
0x7b
,
0x7b
,
0xc6
,
0x84
,
0x84
,
0xc6
,
0x8c
,
0x8c
,
0xc6
,
0x94
,
0x94
,
0xc6
,
0xc6
,
0xc6
,
0xc6
,
0xce
,
0xce
,
0xc6
,
0xd6
,
0xd6
,
0xc6
,
0xde
,
0xde
,
0xc6
,
0xef
,
0xe7
,
0xce
,
0x7b
,
0x7b
,
0xce
,
0x8c
,
0x8c
,
0xce
,
0x94
,
0x94
,
0xce
,
0xce
,
0xce
,
0xce
,
0xd6
,
0xd6
,
0xce
,
0xde
,
0xde
,
0xce
,
0xe7
,
0xe7
,
0xd6
,
0x84
,
0x84
,
0xd6
,
0x94
,
0x8c
,
0xd6
,
0x94
,
0x94
,
0xd6
,
0x9c
,
0x9c
,
0xd6
,
0xad
,
0xad
,
0xd6
,
0xd6
,
0xd6
,
0xd6
,
0xe7
,
0xde
,
0xd6
,
0xef
,
0xef
,
0xde
,
0xa5
,
0xa5
,
0xde
,
0xbd
,
0xbd
,
0xde
,
0xce
,
0xce
,
0xde
,
0xde
,
0xde
,
0xde
,
0xe7
,
0xe7
,
0xde
,
0xef
,
0xe7
,
0xde
,
0xef
,
0xef
,
0xe7
,
0xbd
,
0xbd
,
0xe7
,
0xe7
,
0xe7
,
0xe7
,
0xef
,
0xef
,
0xe7
,
0xf7
,
0xf7
,
0xef
,
0xd6
,
0xd6
,
0xef
,
0xef
,
0xef
,
0xef
,
0xf7
,
0xf7
,
0xf7
,
0xf7
,
0xf7
,
0xf7
,
0xff
,
0xf7
,
0xf7
,
0xff
,
0xff
,
0xff
,
0xf7
,
0xf7
,
0xff
,
0xff
,
0xff
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x2c
,
0x00
,
0x00
,
0x00
,
0x00
,
0x76
,
0x00
,
0x35
,
0x00
,
0x00
,
0x08
,
0xfe
,
0x00
,
0xdd
,
0x09
,
0x1c
,
0x48
,
0xb0
,
0xa0
,
0xba
,
0x45
,
0x71
,
0x76
,
0xc8
,
0x29
,
0xc8
,
0xb0
,
0xa1
,
0xc3
,
0x87
,
0x10
,
0x23
,
0x4a
,
0x9c
,
0x48
,
0xb1
,
0xa2
,
0x3a
,
0x74
,
0xe4
,
0xb4
,
0x05
,
0x10
,
0x10
,
0xa0
,
0x48
,
0xc5
,
0x8f
,
0x20
,
0x43
,
0x8a
,
0x1c
,
0x59
,
0x10
,
0x5d
,
0xb6
,
0x5e
,
0xae
,
0x14
,
0x08
,
0x10
,
0xe0
,
0x91
,
0xa4
,
0xcb
,
0x97
,
0x30
,
0x43
,
0xaa
,
0xfb
,
0xd6
,
0x4b
,
0x50
,
0x1b
,
0x08
,
0x1c
,
0x8d
,
0xc4
,
0xdc
,
0xc9
,
0xb3
,
0xe7
,
0x40
,
0x75
,
0xd9
,
0x2a
,
0x3d
,
0x09
,
0xb2
,
0x40
,
0xa5
,
0x4e
,
0x9f
,
0x48
,
0x93
,
0xca
,
0x84
,
0x86
,
0xe8
,
0x09
,
0x8d
,
0x05
,
0x0b
,
0x04
,
0x1c
,
0x55
,
0x4a
,
0xb5
,
0xaa
,
0x43
,
0x93
,
0x88
,
0x82
,
0xd0
,
0xb8
,
0xb0
,
0x60
,
0xc0
,
0x54
,
0xab
,
0x60
,
0xad
,
0x02
,
0xcd
,
0x4a
,
0x43
,
0x42
,
0xd4
,
0x23
,
0x61
,
0xd3
,
0x56
,
0x55
,
0xc7
,
0x34
,
0x48
,
0x8d
,
0x0d
,
0x10
,
0x14
,
0x60
,
0x51
,
0x4b
,
0x17
,
0x29
,
0x5b
,
0xb2
,
0x19
,
0x24
,
0x14
,
0xf8
,
0x5a
,
0xb7
,
0xaf
,
0xcb
,
0xb1
,
0x41
,
0x4e
,
0x60
,
0x90
,
0xa0
,
0x00
,
0xad
,
0xdf
,
0xc3
,
0x24
,
0xef
,
0x6a
,
0xcd
,
0xab
,
0x80
,
0x2f
,
0xe2
,
0xc7
,
0x13
,
0xd1
,
0xb5
,
0xad
,
0x31
,
0xc2
,
0xac
,
0x61
,
0xc8
,
0x98
,
0x1d
,
0x5e
,
0x64
,
0xa6
,
0xe9
,
0x8f
,
0x9f
,
0x38
,
0x42
,
0x68
,
0x90
,
0x20
,
0x7c
,
0x59
,
0xa0
,
0x3a
,
0x75
,
0xe0
,
0x64
,
0x39
,
0xfa
,
0x03
,
0xa9
,
0x96
,
0x39
,
0x87
,
0xe6
,
0x82
,
0x31
,
0x04
,
0x06
,
0xcc
,
0xdd
,
0xe9
,
0x69
,
0xb3
,
0x50
,
0x35
,
0x54
,
0x17
,
0x2c
,
0xd8
,
0xeb
,
0x9f
,
0xea
,
0xd2
,
0x2d
,
0xcb
,
0xc4
,
0xa8
,
0x14
,
0x30
,
0x69
,
0xe1
,
0xc0
,
0x81
,
0x33
,
0xa8
,
0x4e
,
0x1a
,
0x26
,
0x39
,
0x87
,
0x62
,
0x95
,
0x2b
,
0xb8
,
0xae
,
0x9c
,
0xb4
,
0x5f
,
0xda
,
0xd4
,
0x4d
,
0x3b
,
0xe5
,
0xa7
,
0xd1
,
0x34
,
0xcd
,
0xe8
,
0xc0
,
0xfe
,
0xbd
,
0xda
,
0xf2
,
0x03
,
0xc8
,
0x92
,
0x25
,
0x40
,
0x62
,
0xdc
,
0xa8
,
0xbc
,
0xe0
,
0xb2
,
0x3a
,
0x72
,
0xdf
,
0x0c
,
0xbd
,
0x28
,
0xf1
,
0xc3
,
0x89
,
0x13
,
0x26
,
0x4d
,
0x38
,
0xa5
,
0x13
,
0x88
,
0x51
,
0x9b
,
0x26
,
0x34
,
0x4e
,
0x7c
,
0xf7
,
0x1e
,
0x39
,
0xd2
,
0x2c
,
0x50
,
0x00
,
0x16
,
0xc9
,
0x64
,
0xb1
,
0x80
,
0x04
,
0x1b
,
0xfc
,
0xe6
,
0x0e
,
0x46
,
0x19
,
0x95
,
0xc0
,
0xe0
,
0x21
,
0x0f
,
0x96
,
0x13
,
0x1f
,
0x09
,
0x25
,
0x4c
,
0x30
,
0xc0
,
0x4a
,
0x01
,
0x74
,
0x88
,
0xc0
,
0x7e
,
0x17
,
0x81
,
0xe3
,
0x0b
,
0x16
,
0x12
,
0x44
,
0x10
,
0x41
,
0x89
,
0x0f
,
0x30
,
0x72
,
0x1a
,
0x39
,
0xe4
,
0x44
,
0xd3
,
0x61
,
0x00
,
0x71
,
0x5c
,
0x02
,
0x01
,
0x07
,
0x24
,
0x28
,
0x70
,
0x00
,
0x85
,
0x25
,
0x7d
,
0x03
,
0x4d
,
0x1c
,
0x1b
,
0xc8
,
0xf0
,
0x43
,
0x79
,
0x33
,
0xfc
,
0x20
,
0x03
,
0x09
,
0x70
,
0xb5
,
0x67
,
0x9b
,
0x49
,
0xbe
,
0xec
,
0x30
,
0x01
,
0x09
,
0x32
,
0xe0
,
0x77
,
0x46
,
0x13
,
0x4d
,
0x74
,
0x51
,
0xc7
,
0x36
,
0x26
,
0x21
,
0x83
,
0x49
,
0x13
,
0xf6
,
0x9d
,
0x61
,
0x21
,
0x32
,
0xbd
,
0xbc
,
0xd0
,
0xd5
,
0x02
,
0x7a
,
0xc4
,
0xb1
,
0xe0
,
0x06
,
0x8f
,
0x98
,
0xf6
,
0x0d
,
0x32
,
0xae
,
0xf0
,
0xc1
,
0xc1
,
0x06
,
0x0b
,
0x98
,
0x42
,
0xce
,
0x49
,
0x2e
,
0x18
,
0xc0
,
0xc1
,
0x0c
,
0x1c
,
0x14
,
0xc5
,
0x51
,
0x87
,
0x56
,
0xb4
,
0x83
,
0xce
,
0x99
,
0x70
,
0x44
,
0xa0
,
0x81
,
0x06
,
0x7e
,
0x6a
,
0xf0
,
0x80
,
0x02
,
0x04
,
0x60
,
0x71
,
0x66
,
0x2f
,
0x89
,
0x00
,
0xb0
,
0xd1
,
0x03
,
0x03
,
0x48
,
0x20
,
0x43
,
0x09
,
0x06
,
0x0a
,
0xb0
,
0x0c
,
0x41
,
0x26
,
0xf5
,
0xf2
,
0x06
,
0x04
,
0x1b
,
0x8c
,
0x50
,
0x82
,
0x0c
,
0x48
,
0xf8
,
0x30
,
0xe4
,
0x06
,
0x66
,
0xb5
,
0x77
,
0x11
,
0x34
,
0xa2
,
0xe4
,
0xc0
,
0xa0
,
0x0c
,
0x3e
,
0x70
,
0x91
,
0x05
,
0x19
,
0x67
,
0x38
,
0x81
,
0x46
,
0x17
,
0xfe
,
0x74
,
0x64
,
0xe3
,
0x8a
,
0x20
,
0x82
,
0xf8
,
0xe1
,
0x04
,
0x94
,
0x87
,
0xf4
,
0x82
,
0x88
,
0x11
,
0x05
,
0x30
,
0x50
,
0xc0
,
0x0e
,
0x6c
,
0xe0
,
0x01
,
0x41
,
0x03
,
0x1b
,
0xc4
,
0x90
,
0xce
,
0x7b
,
0xba
,
0xe2
,
0x11
,
0x03
,
0xa8
,
0x30
,
0x9c
,
0x59
,
0x89
,
0x0e
,
0x0b
,
0xd2
,
0x07
,
0x43
,
0x06
,
0x76
,
0x06
,
0x70
,
0x85
,
0x36
,
0xe5
,
0x40
,
0xe3
,
0x8a
,
0x1b
,
0x10
,
0x44
,
0x30
,
0xc2
,
0x08
,
0x2c
,
0x54
,
0x91
,
0x50
,
0x04
,
0x0a
,
0x04
,
0x20
,
0x46
,
0x25
,
0x6c
,
0x44
,
0xd1
,
0xa1
,
0x00
,
0x0a
,
0x2c
,
0xb0
,
0xc1
,
0x0c
,
0x30
,
0xb0
,
0xa9
,
0x40
,
0x1c
,
0x03
,
0xed
,
0xe9
,
0x0a
,
0x1e
,
0x17
,
0x40
,
0xc0
,
0xe0
,
0x0e
,
0x37
,
0xd0
,
0x40
,
0x03
,
0x0a
,
0x21
,
0x80
,
0x6a
,
0x99
,
0x64
,
0x95
,
0x7c
,
0xc1
,
0xe0
,
0x06
,
0x24
,
0x10
,
0xa1
,
0x55
,
0x10
,
0x6e
,
0xcc
,
0xe1
,
0x44
,
0x1a
,
0x6a
,
0x68
,
0x52
,
0x89
,
0x17
,
0x41
,
0xb0
,
0xe1
,
0x47
,
0x13
,
0x3f
,
0x94
,
0xf0
,
0x46
,
0x14
,
0x02
,
0x8b
,
0xd0
,
0x46
,
0x10
,
0x4f
,
0x5c
,
0x21
,
0xc1
,
0x04
,
0x1b
,
0xa0
,
0x02
,
0xd4
,
0xc4
,
0x39
,
0xac
,
0x29
,
0xc1
,
0x22
,
0x35
,
0xe1
,
0xa0
,
0x2f
,
0x07
,
0x3f
,
0xe0
,
0x70
,
0xc2
,
0x09
,
0x29
,
0xe0
,
0x24
,
0x40
,
0x08
,
0x6f
,
0x8a
,
0xc2
,
0x46
,
0x08
,
0x7e
,
0xee
,
0x30
,
0x44
,
0x10
,
0x41
,
0x78
,
0x41
,
0xc8
,
0x05
,
0xe4
,
0x12
,
0x10
,
0x45
,
0x60
,
0x2b
,
0x25
,
0x00
,
0x81
,
0x05
,
0x28
,
0x0c
,
0x91
,
0xc5
,
0x68
,
0x0b
,
0xbc
,
0x60
,
0x1a
,
0x39
,
0x35
,
0xd9
,
0xb0
,
0xa0
,
0x04
,
0x2d
,
0xe0
,
0xc1
,
0x86
,
0x53
,
0x1d
,
0x74
,
0x10
,
0x82
,
0x04
,
0x10
,
0xb4
,
0xf7
,
0x8d
,
0x2b
,
0x6c
,
0x7c
,
0x50
,
0x02
,
0x93
,
0x57
,
0x08
,
0xb2
,
0x35
,
0x0d
,
0x41
,
0xb4
,
0x71
,
0x46
,
0x17
,
0x69
,
0xd0
,
0x31
,
0xca
,
0x1d
,
0x40
,
0xbf
,
0x01
,
0xa5
,
0x0f
,
0x9e
,
0x62
,
0x28
,
0x81
,
0xfe
,
0x22
,
0x78
,
0x68
,
0x15
,
0x85
,
0x04
,
0x19
,
0x4c
,
0xe0
,
0x03
,
0x39
,
0xc8
,
0xf4
,
0xfd
,
0x02
,
0xa8
,
0x23
,
0xf8
,
0x32
,
0xb1
,
0x07
,
0x0c
,
0x6c
,
0x50
,
0x42
,
0x18
,
0x5c
,
0x9b
,
0x90
,
0x83
,
0x4a
,
0x01
,
0x5c
,
0x42
,
0xb6
,
0x10
,
0x19
,
0x8c
,
0x10
,
0x43
,
0x1e
,
0x78
,
0x38
,
0x45
,
0x44
,
0x0f
,
0x23
,
0x68
,
0x00
,
0x41
,
0x11
,
0x50
,
0x98
,
0x40
,
0x41
,
0x00
,
0x08
,
0x14
,
0x80
,
0x41
,
0x10
,
0x26
,
0x98
,
0xf0
,
0x84
,
0x0f
,
0xa0
,
0x2a
,
0xa0
,
0x8e
,
0x6d
,
0x41
,
0x3d
,
0xe1
,
0xc0
,
0x02
,
0x79
,
0x29
,
0x82
,
0x12
,
0x22
,
0x5e
,
0xd0
,
0xd0
,
0x81
,
0x07
,
0x70
,
0x0d
,
0xb0
,
0x03
,
0x32
,
0x82
,
0x04
,
0x81
,
0x00
,
0x91
,
0x89
,
0xa3
,
0x29
,
0x88
,
0x53
,
0x41
,
0xf4
,
0x01
,
0xb7
,
0x1a
,
0xb0
,
0x4c
,
0xcc
,
0x36
,
0x1c
,
0x4c
,
0x64
,
0xbc
,
0xc1
,
0x06
,
0x1c
,
0x18
,
0x02
,
0x8d
,
0xf4
,
0x4f
,
0xe8
,
0xc0
,
0x01
,
0x83
,
0xa6
,
0x4c
,
0x7c
,
0x03
,
0x09
,
0x13
,
0x48
,
0xd0
,
0x47
,
0x2f
,
0x77
,
0xd0
,
0x80
,
0x40
,
0x04
,
0x24
,
0xfc
,
0x30
,
0x0a
,
0xef
,
0xfe
,
0x46
,
0xa1
,
0x92
,
0x00
,
0x71
,
0x2c
,
0x9f
,
0x02
,
0x93
,
0x5b
,
0xb8
,
0x82
,
0xc8
,
0x17
,
0x58
,
0x54
,
0x2f
,
0xc3
,
0x16
,
0x97
,
0x10
,
0x85
,
0x17
,
0x4c
,
0x87
,
0x00
,
0x01
,
0xec
,
0xa5
,
0x6f
,
0x26
,
0x08
,
0xc2
,
0xd3
,
0x30
,
0x00
,
0x81
,
0xd9
,
0xa1
,
0xa3
,
0x17
,
0x7d
,
0x4b
,
0x80
,
0x02
,
0x24
,
0xf0
,
0x82
,
0x6f
,
0xec
,
0x09
,
0x19
,
0x4d
,
0x31
,
0xc1
,
0x09
,
0x44
,
0x50
,
0x94
,
0x1d
,
0xb8
,
0xc2
,
0x0b
,
0x6f
,
0x81
,
0x00
,
0x04
,
0xc6
,
0x80
,
0x11
,
0x9a
,
0x14
,
0x8f
,
0x06
,
0x60
,
0x80
,
0x58
,
0x1a
,
0x68
,
0x41
,
0x3c
,
0xe6
,
0x59
,
0x01
,
0x08
,
0x32
,
0x00
,
0xd5
,
0x1e
,
0x30
,
0x02
,
0x41
,
0x7f
,
0x49
,
0x01
,
0x54
,
0x13
,
0xc8
,
0x42
,
0xf1
,
0x0e
,
0x27
,
0x81
,
0x11
,
0x28
,
0x43
,
0x7a
,
0xfe
,
0x15
,
0x90
,
0x40
,
0xfb
,
0xb4
,
0x41
,
0x3c
,
0xad
,
0x40
,
0x61
,
0x7e
,
0x55
,
0x60
,
0x43
,
0x10
,
0x58
,
0x10
,
0x03
,
0x19
,
0x2c
,
0x42
,
0x14
,
0x79
,
0x50
,
0xc2
,
0x7d
,
0x96
,
0xc0
,
0x07
,
0x68
,
0x64
,
0x43
,
0x80
,
0x1a
,
0x2c
,
0xe0
,
0x02
,
0xf6
,
0x20
,
0x40
,
0x7f
,
0x61
,
0x01
,
0x06
,
0x60
,
0x63
,
0x87
,
0x3b
,
0xc6
,
0xd6
,
0x3b
,
0x05
,
0xe8
,
0x8b
,
0x07
,
0xb3
,
0x7b
,
0x0f
,
0xd9
,
0x68
,
0x70
,
0x82
,
0x10
,
0x84
,
0xad
,
0x05
,
0x42
,
0x41
,
0xc1
,
0x02
,
0x18
,
0x20
,
0x81
,
0x32
,
0x3d
,
0xa8
,
0x76
,
0x34
,
0x88
,
0x42
,
0x17
,
0xd6
,
0xa0
,
0x06
,
0x5a
,
0x8c
,
0x0d
,
0x0f
,
0xbe
,
0xb3
,
0xc1
,
0xa3
,
0x24
,
0xa4
,
0x8c
,
0x8b
,
0xe0
,
0xf1
,
0x09
,
0x2f
,
0x20
,
0x01
,
0x09
,
0x38
,
0x10
,
0x85
,
0x1a
,
0x70
,
0x80
,
0x03
,
0x25
,
0xe8
,
0x43
,
0xed
,
0x4c
,
0x80
,
0x03
,
0x21
,
0xce
,
0x20
,
0x18
,
0x57
,
0x74
,
0x0a
,
0x0e
,
0x0a
,
0x50
,
0x00
,
0x01
,
0x80
,
0x81
,
0x62
,
0x22
,
0x68
,
0x52
,
0x19
,
0xe4
,
0x70
,
0x2b
,
0x27
,
0x94
,
0xe1
,
0x12
,
0xd9
,
0xb0
,
0x50
,
0x17
,
0x6b
,
0xa0
,
0x12
,
0x08
,
0x1c
,
0xc2
,
0x17
,
0x80
,
0xa4
,
0x01
,
0x16
,
0x48
,
0x90
,
0x81
,
0x06
,
0x8e
,
0x51
,
0x14
,
0x4e
,
0x79
,
0x00
,
0xe0
,
0x46
,
0xb0
,
0x9f
,
0x07
,
0x15
,
0x91
,
0x06
,
0x1b
,
0xa8
,
0xa5
,
0x0b
,
0xb2
,
0x72
,
0x82
,
0xca
,
0x48
,
0x00
,
0x09
,
0x53
,
0x5b
,
0x23
,
0x15
,
0xba
,
0xc0
,
0x4c
,
0x66
,
0x48
,
0x86
,
0x98
,
0x48
,
0x80
,
0xe1
,
0x06
,
0x1a
,
0xd0
,
0x83
,
0x63
,
0x51
,
0x2d
,
0x96
,
0x37
,
0xc4
,
0xde
,
0x0a
,
0x54
,
0x80
,
0xbd
,
0x0d
,
0x48
,
0x03
,
0x8f
,
0x43
,
0x10
,
0xe2
,
0x0f
,
0xcc
,
0x10
,
0xbd
,
0x27
,
0xdc
,
0x20
,
0x03
,
0x0a
,
0x28
,
0xc0
,
0x02
,
0x06
,
0xe1
,
0x94
,
0x22
,
0xd4
,
0x87
,
0x0b
,
0x50
,
0x72
,
0xc2
,
0x2b
,
0xc9
,
0x71
,
0x1a
,
0x32
,
0xd2
,
0xc0
,
0x06
,
0xe9
,
0xfe
,
0x5c
,
0xc0
,
0x22
,
0x7e
,
0x39
,
0x4b
,
0xb8
,
0xcc
,
0xee
,
0x1b
,
0x42
,
0xa1
,
0x41
,
0x0a
,
0x32
,
0x40
,
0xd0
,
0x49
,
0xb1
,
0x43
,
0x32
,
0x82
,
0x10
,
0x68
,
0x06
,
0xd8
,
0xb4
,
0x03
,
0xb2
,
0xb8
,
0x80
,
0x41
,
0x24
,
0xd8
,
0x86
,
0x40
,
0xec
,
0xb9
,
0x05
,
0x66
,
0xa2
,
0xc1
,
0x1c
,
0xcf
,
0x7c
,
0x82
,
0x11
,
0x96
,
0x10
,
0xa4
,
0x35
,
0x4d
,
0x80
,
0x0c
,
0x0f
,
0x62
,
0x8a
,
0x53
,
0x9e
,
0x30
,
0x82
,
0x0d
,
0x2c
,
0x09
,
0x7b
,
0x13
,
0x18
,
0xc3
,
0x4c
,
0xd6
,
0x18
,
0x04
,
0x2b
,
0x38
,
0x6e
,
0x06
,
0x40
,
0x40
,
0xc2
,
0xe1
,
0x20
,
0x60
,
0x00
,
0x05
,
0x5c
,
0x22
,
0x2b
,
0x94
,
0xc4
,
0x8f
,
0x7d
,
0xe6
,
0xf0
,
0x8a
,
0x6c
,
0xd0
,
0xb3
,
0x9e
,
0x1f
,
0xa4
,
0x81
,
0x10
,
0xbe
,
0xc4
,
0x08
,
0x68
,
0x9c
,
0xd0
,
0x08
,
0x23
,
0x10
,
0xa1
,
0x18
,
0xc9
,
0xd1
,
0x45
,
0x1b
,
0x2c
,
0x74
,
0x03
,
0x3d
,
0x28
,
0x07
,
0xb2
,
0xda
,
0x60
,
0x83
,
0x92
,
0xc2
,
0x65
,
0x07
,
0x01
,
0xc5
,
0x81
,
0x22
,
0x65
,
0x50
,
0x86
,
0x72
,
0x98
,
0x44
,
0x28
,
0x56
,
0xc0
,
0x92
,
0x1a
,
0x38
,
0xb1
,
0x52
,
0x3c
,
0x50
,
0xe1
,
0x56
,
0x4b
,
0x38
,
0xc2
,
0x16
,
0x1c
,
0xc7
,
0x81
,
0x4c
,
0xb0
,
0x83
,
0x26
,
0x6c
,
0x60
,
0x23
,
0x0e
,
0x48
,
0x36
,
0x01
,
0x92
,
0x6d
,
0x60
,
0x19
,
0xed
,
0x28
,
0x47
,
0x0b
,
0x69
,
0xf0
,
0x84
,
0x22
,
0xf4
,
0xe8
,
0x51
,
0xdf
,
0x33
,
0x4b
,
0x29
,
0x26
,
0x79
,
0x82
,
0x24
,
0x70
,
0xe1
,
0x0c
,
0x65
,
0x80
,
0xc6
,
0x37
,
0xc8
,
0x81
,
0x8e
,
0xd3
,
0xa0
,
0x02
,
0x13
,
0x4d
,
0x2d
,
0xca
,
0x02
,
0x1a
,
0x61
,
0x54
,
0xad
,
0xe8
,
0x40
,
0x60
,
0xb3
,
0x23
,
0x5c
,
0x2c
,
0x5d
,
0x60
,
0x55
,
0x1f
,
0x98
,
0xc2
,
0x17
,
0x89
,
0x98
,
0x02
,
0x06
,
0xbe
,
0x75
,
0xbd
,
0x23
,
0x04
,
0x55
,
0x08
,
0x89
,
0x64
,
0x92
,
0x19
,
0x50
,
0x71
,
0x89
,
0x37
,
0x64
,
0x81
,
0x09
,
0xae
,
0x4a
,
0xfe
,
0xc3
,
0x34
,
0x08
,
0x27
,
0x88
,
0x2f
,
0x38
,
0x81
,
0x99
,
0x4b
,
0x10
,
0x42
,
0x1b
,
0x62
,
0x18
,
0x03
,
0x0e
,
0x48
,
0xe3
,
0x99
,
0xac
,
0x3b
,
0x41
,
0x8f
,
0x38
,
0x30
,
0x81
,
0x12
,
0x24
,
0xc1
,
0x4c
,
0x64
,
0x5b
,
0x18
,
0xc2
,
0xce
,
0x26
,
0xb0
,
0x01
,
0xf0
,
0x81
,
0x8c
,
0xad
,
0x33
,
0x02
,
0x96
,
0x9a
,
0xa0
,
0x09
,
0x6d
,
0x64
,
0x23
,
0x1a
,
0xca
,
0x80
,
0x04
,
0x13
,
0xb8
,
0x30
,
0x8a
,
0xde
,
0x0d
,
0x75
,
0x00
,
0x05
,
0xa0
,
0xec
,
0x09
,
0x75
,
0x20
,
0x01
,
0xb0
,
0x39
,
0x50
,
0xa4
,
0x34
,
0xc0
,
0xc1
,
0x08
,
0x14
,
0xb9
,
0x5e
,
0x84
,
0x2d
,
0x52
,
0x91
,
0x24
,
0x88
,
0x81
,
0x16
,
0x7e
,
0x29
,
0x05
,
0x12
,
0xc0
,
0x94
,
0x09
,
0x5d
,
0x40
,
0x03
,
0x80
,
0xcc
,
0x80
,
0xa5
,
0x4d
,
0x90
,
0x63
,
0x7b
,
0x51
,
0xe0
,
0x82
,
0x7e
,
0xbb
,
0x10
,
0x06
,
0xb6
,
0x89
,
0x01
,
0x08
,
0x68
,
0x90
,
0x41
,
0x0c
,
0xc4
,
0x31
,
0x36
,
0x36
,
0x98
,
0xa0
,
0x03
,
0x20
,
0x60
,
0x6e
,
0x09
,
0x64
,
0x51
,
0xaf
,
0xed
,
0xf5
,
0x2e
,
0x05
,
0x23
,
0x58
,
0x81
,
0x07
,
0x50
,
0xa0
,
0x82
,
0x5a
,
0x72
,
0xb2
,
0x14
,
0x45
,
0x34
,
0x81
,
0x10
,
0xe0
,
0xc9
,
0x85
,
0x2e
,
0xa8
,
0x81
,
0x0e
,
0x5c
,
0x60
,
0xc2
,
0x76
,
0x65
,
0x50
,
0x08
,
0xef
,
0xa6
,
0x53
,
0x01
,
0x45
,
0x1d
,
0x6f
,
0x2d
,
0x6d
,
0x39
,
0x13
,
0x08
,
0xfa
,
0x0d
,
0x06
,
0xf0
,
0x25
,
0x99
,
0x22
,
0x79
,
0x80
,
0x63
,
0x12
,
0x6c
,
0xa1
,
0xc1
,
0x5a
,
0xc1
,
0x41
,
0x12
,
0x96
,
0x60
,
0xd1
,
0x34
,
0xa0
,
0x01
,
0x4b
,
0x9a
,
0xc8
,
0x19
,
0x1b
,
0xb4
,
0x90
,
0x86
,
0x34
,
0x74
,
0xc1
,
0x11
,
0xcb
,
0xe3
,
0xeb
,
0x0e
,
0x0e
,
0x56
,
0x06
,
0x74
,
0x14
,
0xb1
,
0x03
,
0x27
,
0x28
,
0x01
,
0x07
,
0x30
,
0xe0
,
0x83
,
0xd9
,
0x99
,
0xa9
,
0x26
,
0x78
,
0xf8
,
0x42
,
0x1b
,
0x28
,
0x66
,
0x02
,
0x1a
,
0x7c
,
0x61
,
0x04
,
0x45
,
0xe1
,
0xc1
,
0xfe
,
0x15
,
0x7b
,
0x87
,
0xc2
,
0x2d
,
0x60
,
0x09
,
0x40
,
0x4e
,
0x48
,
0x31
,
0x13
,
0xca
,
0xa0
,
0x08
,
0xef
,
0x1a
,
0x08
,
0x02
,
0xe2
,
0xd5
,
0x0a
,
0x0b
,
0x82
,
0x89
,
0x81
,
0x75
,
0xf0
,
0xe7
,
0x8a
,
0x4a
,
0xbc
,
0xe7
,
0x0a
,
0x60
,
0xf0
,
0x3d
,
0x0c
,
0x94
,
0x60
,
0x05
,
0x35
,
0x90
,
0x81
,
0xa2
,
0xfd
,
0x40
,
0x30
,
0x25
,
0x02
,
0xad
,
0x08
,
0x5c
,
0x00
,
0x44
,
0x1d
,
0xd2
,
0xd0
,
0x84
,
0x3e
,
0x00
,
0x83
,
0x45
,
0x2d
,
0x94
,
0x42
,
0x16
,
0xd4
,
0x00
,
0x88
,
0x68
,
0xd4
,
0x64
,
0x28
,
0x82
,
0x50
,
0xf4
,
0x23
,
0xc4
,
0x71
,
0x32
,
0xd6
,
0xa5
,
0x40
,
0xcb
,
0x13
,
0xd0
,
0x04
,
0x41
,
0x46
,
0xd5
,
0x0b
,
0x52
,
0xf4
,
0xa2
,
0x17
,
0xa2
,
0x88
,
0xf2
,
0x13
,
0xc2
,
0x00
,
0x95
,
0x0d
,
0x80
,
0x83
,
0x29
,
0x14
,
0x0b
,
0xc2
,
0x10
,
0xb0
,
0xe0
,
0x2a
,
0xb4
,
0x72
,
0x21
,
0x13
,
0xda
,
0x58
,
0xe3
,
0x10
,
0x8a
,
0x22
,
0x01
,
0xf1
,
0x0a
,
0x21
,
0x08
,
0x3a
,
0x58
,
0x68
,
0x06
,
0xbc
,
0x1c
,
0xd2
,
0x59
,
0x79
,
0x61
,
0x28
,
0x42
,
0xc0
,
0x01
,
0x11
,
0xa8
,
0xf0
,
0x05
,
0x2f
,
0xb0
,
0x81
,
0x10
,
0xaf
,
0x20
,
0x47
,
0x3b
,
0x46
,
0xe5
,
0x6c
,
0x68
,
0x4f
,
0x21
,
0x0e
,
0x7a
,
0x18
,
0x85
,
0x4f
,
0xdf
,
0xb3
,
0x3d
,
0x3c
,
0xdc
,
0xa1
,
0x12
,
0xbf
,
0xa0
,
0x92
,
0xac
,
0xd4
,
0x36
,
0x08
,
0x52
,
0x44
,
0x23
,
0x8d
,
0x93
,
0xe4
,
0xc1
,
0x90
,
0x48
,
0x30
,
0x1d
,
0x4a
,
0xc1
,
0x67
,
0xb1
,
0x6f
,
0xba
,
0x17
,
0xd0
,
0xc0
,
0x90
,
0x97
,
0x11
,
0x6c
,
0x83
,
0x70
,
0x95
,
0xc0
,
0x43
,
0xae
,
0xa1
,
0x60
,
0x85
,
0x2c
,
0xc4
,
0x81
,
0x11
,
0xd1
,
0xc0
,
0x88
,
0xb3
,
0xdb
,
0x10
,
0x07
,
0x4c
,
0x28
,
0x23
,
0x1c
,
0x41
,
0x61
,
0x83
,
0x17
,
0xc4
,
0xb0
,
0x08
,
0x60
,
0x7c
,
0xe7
,
0x27
,
0x55
,
0x12
,
0x05
,
0x22
,
0x68
,
0x85
,
0x08
,
0x51
,
0xb8
,
0x42
,
0x14
,
0x95
,
0x10
,
0x45
,
0x2f
,
0xfe
,
0xb2
,
0xd1
,
0xd8
,
0x15
,
0x65
,
0x03
,
0x4d
,
0x88
,
0xd8
,
0x78
,
0xc7
,
0x91
,
0x31
,
0x6e
,
0x43
,
0xc2
,
0xda
,
0x15
,
0xc8
,
0xb0
,
0xe0
,
0x7b
,
0x64
,
0xe5
,
0x0a
,
0x57
,
0x44
,
0xe3
,
0xa7
,
0x19
,
0xbd
,
0x81
,
0x0c
,
0x66
,
0x50
,
0x02
,
0x48
,
0xb0
,
0xa3
,
0x1d
,
0x18
,
0xc7
,
0x88
,
0x3a
,
0x32
,
0x31
,
0x0d
,
0xe0
,
0xd2
,
0xa0
,
0x08
,
0xc8
,
0x13
,
0x07
,
0x46
,
0xb4
,
0x55
,
0x09
,
0x41
,
0xe0
,
0x01
,
0x0f
,
0x82
,
0xb0
,
0xc4
,
0xc8
,
0x19
,
0xfb
,
0x5f
,
0x8d
,
0x8b
,
0x02
,
0x19
,
0xf4
,
0xb4
,
0x57
,
0x25
,
0x2a
,
0xe1
,
0x8a
,
0x6f
,
0x30
,
0xfb
,
0x48
,
0xe4
,
0xf0
,
0x86
,
0x31
,
0x8a
,
0xc1
,
0x0b
,
0x5e
,
0xec
,
0x82
,
0x17
,
0xc5
,
0x28
,
0xc6
,
0xd8
,
0x8b
,
0xe1
,
0x8c
,
0x67
,
0x5c
,
0xe3
,
0xed
,
0x6f
,
0x7f
,
0x86
,
0x31
,
0x8c
,
0x61
,
0xf6
,
0x5d
,
0xa4
,
0xdd
,
0x19
,
0xd6
,
0xb8
,
0x46
,
0xde
,
0xad
,
0xf1
,
0x8c
,
0x63
,
0xa8
,
0x1d
,
0xef
,
0x7b
,
0x97
,
0xfb
,
0xdc
,
0xf1
,
0x0e
,
0x77
,
0x5e
,
0xd0
,
0x8d
,
0x07
,
0x40
,
0xf8
,
0xc1
,
0x0c
,
0xa4
,
0x41
,
0x0e
,
0xbd
,
0x57
,
0xe3
,
0xf1
,
0xdd
,
0xb0
,
0xa2
,
0x29
,
0x8c
,
0x2b
,
0x8d
,
0x22
,
0xde
,
0xc0
,
0x53
,
0x25
,
0x58
,
0x02
,
0x39
,
0xb0
,
0x41
,
0x0c
,
0x62
,
0xe8
,
0xa2
,
0x15
,
0xac
,
0x08
,
0x3d
,
0x2b
,
0x5a
,
0x31
,
0x8c
,
0xce
,
0x37
,
0xc3
,
0xf3
,
0xad
,
0x48
,
0x7d
,
0xe9
,
0x4f
,
0xaf
,
0x8b
,
0xcf
,
0x93
,
0xbe
,
0x19
,
0xd4
,
0xb0
,
0x06
,
0xd0
,
0x6d
,
0xf3
,
0xa6
,
0x5e
,
0xe8
,
0xe2
,
0x16
,
0xb7
,
0x48
,
0x05
,
0xee
,
0x77
,
0xbf
,
0x7b
,
0xdd
,
0xf3
,
0x1e
,
0xf7
,
0xb6
,
0xe0
,
0x7d
,
0xf0
,
0x6d
,
0x11
,
0xfc
,
0xdd
,
0x0f
,
0xdf
,
0xf8
,
0xb7
,
0x20
,
0xfe
,
0xf1
,
0x81
,
0x8f
,
0x8b
,
0x27
,
0x0c
,
0x01
,
0x08
,
0x30
,
0x2d
,
0x03
,
0x32
,
0x8c
,
0x41
,
0xfc
,
0x54
,
0xd8
,
0x22
,
0x15
,
0xc2
,
0xa8
,
0x44
,
0x21
,
0x7e
,
0xfe
,
0x34
,
0x03
,
0x19
,
0x64
,
0x21
,
0x0c
,
0x3a
,
0xe0
,
0xfe
,
0x0f
,
0x58
,
0x76
,
0xfd
,
0x54
,
0x98
,
0xff
,
0xfc
,
0xe8
,
0x37
,
0xbf
,
0x27
,
0xd0
,
0xef
,
0x89
,
0xf6
,
0xbb
,
0xff
,
0xfd
,
0x9e
,
0xe8
,
0x44
,
0x2e
,
0xce
,
0xf1
,
0x20
,
0x9a
,
0x80
,
0x7c
,
0x12
,
0x91
,
0xf8
,
0x84
,
0xfe
,
0xf3
,
0xff
,
0x89
,
0xfc
,
0x47
,
0x42
,
0x15
,
0xfd
,
0x07
,
0x80
,
0xfe
,
0x07
,
0x80
,
0xfb
,
0xb7
,
0x0a
,
0x91
,
0x60
,
0x80
,
0xab
,
0x00
,
0x0a
,
0x0a
,
0xb8
,
0x80
,
0x0c
,
0xd8
,
0x80
,
0xa0
,
0xc0
,
0x0a
,
0xad
,
0xd7
,
0x0a
,
0x81
,
0xa0
,
0x40
,
0x5d
,
0x00
,
0x25
,
0x8a
,
0x50
,
0x09
,
0xa1
,
0x00
,
0x0a
,
0xad
,
0xa0
,
0x0b
,
0x9e
,
0x07
,
0x0a
,
0x76
,
0xc0
,
0x06
,
0x5c
,
0x90
,
0x78
,
0x42
,
0x12
,
0x24
,
0xe6
,
0x01
,
0x04
,
0x5c
,
0x60
,
0x09
,
0x94
,
0x10
,
0x09
,
0x0a
,
0x28
,
0x09
,
0xa0
,
0x10
,
0x09
,
0x91
,
0x20
,
0x09
,
0x2a
,
0xf8
,
0x82
,
0x32
,
0x08
,
0x83
,
0x30
,
0x38
,
0x83
,
0x92
,
0x70
,
0x83
,
0x1a
,
0xc8
,
0x0b
,
0xcf
,
0xc0
,
0x0d
,
0xd7
,
0x30
,
0x0e
,
0xb6
,
0xa1
,
0x23
,
0xae
,
0x50
,
0x09
,
0x88
,
0xb0
,
0x75
,
0x89
,
0xb0
,
0x75
,
0x5b
,
0x37
,
0x84
,
0x46
,
0x58
,
0x09
,
0x45
,
0x68
,
0x84
,
0x4b
,
0x98
,
0x84
,
0x44
,
0x28
,
0x84
,
0x50
,
0x58
,
0x84
,
0x43
,
0x38
,
0x84
,
0x52
,
0x58
,
0x84
,
0x22
,
0xd7
,
0x0b
,
0x13
,
0x33
,
0x04
,
0x50
,
0xd2
,
0x04
,
0x73
,
0x00
,
0x6b
,
0x56
,
0xd8
,
0x0b
,
0xd0
,
0x80
,
0x0c
,
0x13
,
0x13
,
0x04
,
0x42
,
0x90
,
0x05
,
0x4d
,
0x00
,
0x7d
,
0x4b
,
0xb0
,
0x85
,
0x3c
,
0x05
,
0x72
,
0x4e
,
0xd8
,
0x86
,
0x6e
,
0xc8
,
0x86
,
0x4e
,
0xe8
,
0x71
,
0x31
,
0xd7
,
0x4b
,
0xfc
,
0xf1
,
0x26
,
0xd0
,
0x10
,
0x86
,
0xc8
,
0x90
,
0x87
,
0x7a
,
0x88
,
0x87
,
0x7a
,
0xd8
,
0x87
,
0x79
,
0x18
,
0x86
,
0x80
,
0x88
,
0x0c
,
0x81
,
0x18
,
0x86
,
0xc9
,
0x80
,
0x87
,
0x84
,
0x68
,
0x88
,
0xbf
,
0x82
,
0x78
,
0x87
,
0xba
,
0xf2
,
0x04
,
0x60
,
0x50
,
0x06
,
0x73
,
0xd0
,
0x05
,
0xc0
,
0x90
,
0x0d
,
0x77
,
0x78
,
0x87
,
0xda
,
0xf0
,
0x0d
,
0x27
,
0x21
,
0x08
,
0xb9
,
0x86
,
0x03
,
0x47
,
0x90
,
0x86
,
0x4d
,
0xe0
,
0x07
,
0xb2
,
0x60
,
0x89
,
0x92
,
0x38
,
0x89
,
0xa2
,
0x38
,
0x8a
,
0xa4
,
0x58
,
0x8a
,
0x77
,
0x98
,
0x0d
,
0x8b
,
0xf5
,
0x75
,
0x47
,
0x82
,
0x0e
,
0xac
,
0xd8
,
0x8a
,
0xae
,
0xf8
,
0x8a
,
0xb0
,
0x18
,
0x8b
,
0xb2
,
0x38
,
0x8b
,
0xac
,
0x58
,
0x75
,
0xb4
,
0x22
,
0x0a
,
0x24
,
0x77
,
0x1a
,
0xaf
,
0x78
,
0x11
,
0x34
,
0xd1
,
0x74
,
0x12
,
0x17
,
0x2c
,
0x95
,
0x30
,
0x72
,
0xac
,
0x78
,
0x11
,
0xb0
,
0x48
,
0x8c
,
0xc6
,
0x38
,
0x8c
,
0x8d
,
0x95
,
0x8c
,
0xe9
,
0x90
,
0x8c
,
0x17
,
0xd1
,
0x8c
,
0xaa
,
0xb8
,
0x6a
,
0x03
,
0xd1
,
0x0e
,
0x62
,
0x34
,
0x7b
,
0x11
,
0xf1
,
0x8c
,
0x32
,
0xf1
,
0x5f
,
0x79
,
0x38
,
0x6e
,
0x9a
,
0x31
,
0x73
,
0x68
,
0x52
,
0x73
,
0x82
,
0xc8
,
0x58
,
0xd4
,
0x98
,
0x19
,
0x69
,
0x71
,
0x11
,
0x2c
,
0x82
,
0x0e
,
0xe1
,
0xb8
,
0x1b
,
0xb5
,
0x58
,
0x8e
,
0x8d
,
0x25
,
0x8e
,
0xec
,
0xd8
,
0x8e
,
0xee
,
0xf8
,
0x8e
,
0xf0
,
0x18
,
0x8f
,
0xf2
,
0x38
,
0x8f
,
0xf4
,
0x58
,
0x8f
,
0xf6
,
0x78
,
0x8f
,
0xf8
,
0x98
,
0x8f
,
0xfa
,
0xb8
,
0x8f
,
0xfc
,
0xd8
,
0x8f
,
0xfe
,
0xf8
,
0x8f
,
0x00
,
0x19
,
0x90
,
0x02
,
0x39
,
0x90
,
0x04
,
0xb9
,
0x8f
,
0x01
,
0x01
,
0x00
,
0x3b
0x47
,
0x49
,
0x46
,
0x38
,
0x39
,
0x61
,
0x6e
,
0x00
,
0x35
,
0x00
,
0xe7
,
0x00
,
0x00
,
0xff
,
0xff
,
0xe2
,
0x9f
,
0x20
,
0x20
,
0xb6
,
0x25
,
0x25
,
0xff
,
0xff
,
0xe0
,
0xff
,
0xff
,
0xdc
,
0xdf
,
0xdf
,
0xc6
,
0xff
,
0xcc
,
0xcc
,
0xdf
,
0xb2
,
0xb2
,
0xfe
,
0xfc
,
0xd3
,
0xbf
,
0xbf
,
0xa9
,
0xff
,
0xff
,
0xe3
,
0xf8
,
0xe6
,
0x93
,
0xff
,
0xff
,
0xdb
,
0xdf
,
0xdf
,
0xc0
,
0xf5
,
0xdc
,
0x76
,
0xdf
,
0xdf
,
0xc4
,
0xf8
,
0xe6
,
0x92
,
0xde
,
0xdc
,
0xb9
,
0xee
,
0xc3
,
0x2c
,
0xfc
,
0xf4
,
0xbd
,
0xfc
,
0xf4
,
0xbc
,
0xfd
,
0xf8
,
0xc9
,
0xdf
,
0xdf
,
0xc5
,
0xf3
,
0xd6
,
0x64
,
0xfb
,
0xf0
,
0xaf
,
0xd5
,
0xbb
,
0x57
,
0xf9
,
0xeb
,
0xa1
,
0xf6
,
0xe2
,
0x86
,
0xd9
,
0xc9
,
0x81
,
0xf7
,
0xe1
,
0x86
,
0xbf
,
0xbf
,
0xa4
,
0xff
,
0xff
,
0xdf
,
0xf4
,
0xd6
,
0x64
,
0x3d
,
0x36
,
0x19
,
0xfd
,
0xf8
,
0xc8
,
0xfa
,
0xef
,
0xaf
,
0x20
,
0x1f
,
0x18
,
0xf9
,
0xeb
,
0xa0
,
0xfd
,
0xf9
,
0xc9
,
0xdd
,
0xd9
,
0xb0
,
0xfc
,
0xf5
,
0xbc
,
0xb2
,
0x92
,
0x21
,
0xdc
,
0xd5
,
0xa4
,
0xdf
,
0xdf
,
0xc7
,
0x3f
,
0x3c
,
0x2c
,
0x1f
,
0x1c
,
0x0f
,
0xb8
,
0xa5
,
0x58
,
0xf7
,
0xe2
,
0x85
,
0xf5
,
0xdc
,
0x75
,
0x20
,
0x1f
,
0x19
,
0xff
,
0xfe
,
0xdb
,
0xbf
,
0xbf
,
0xaa
,
0xf7
,
0xe1
,
0x85
,
0xf9
,
0xea
,
0xa1
,
0xd0
,
0xab
,
0x26
,
0xf2
,
0xd0
,
0x52
,
0xff
,
0xfc
,
0xd3
,
0xda
,
0xce
,
0x8d
,
0x40
,
0x3f
,
0x35
,
0xdc
,
0xd5
,
0xa5
,
0xf7
,
0xe2
,
0x86
,
0xfa
,
0xf0
,
0xaf
,
0x3e
,
0x3b
,
0x28
,
0x40
,
0x40
,
0x39
,
0x40
,
0x40
,
0x37
,
0xdb
,
0xd2
,
0x99
,
0xbb
,
0xb0
,
0x78
,
0xfb
,
0xef
,
0xaf
,
0xd6
,
0xc0
,
0x67
,
0xfa
,
0xeb
,
0xa1
,
0xdd
,
0xda
,
0xb0
,
0xf6
,
0xe1
,
0x86
,
0x04
,
0x04
,
0x03
,
0xfe
,
0xfc
,
0xd4
,
0x5c
,
0x51
,
0x26
,
0xba
,
0xac
,
0x6e
,
0xdf
,
0xdf
,
0xc3
,
0xef
,
0xc6
,
0x34
,
0xf0
,
0xca
,
0x42
,
0xb9
,
0xa9
,
0x64
,
0xff
,
0xfe
,
0xdc
,
0x1e
,
0x1b
,
0x0d
,
0x1f
,
0x1c
,
0x11
,
0x1f
,
0x1d
,
0x14
,
0xf5
,
0xdd
,
0x76
,
0x5b
,
0x51
,
0x26
,
0xdd
,
0xda
,
0xaf
,
0xf9
,
0xea
,
0xa0
,
0x3f
,
0x3d
,
0x2f
,
0xb5
,
0x9c
,
0x3d
,
0xd6
,
0xc1
,
0x67
,
0xdc
,
0xd2
,
0x99
,
0xfa
,
0xeb
,
0xa0
,
0xd5
,
0xbc
,
0x57
,
0xd9
,
0xc9
,
0x80
,
0x3f
,
0x3e
,
0x32
,
0x3e
,
0x3a
,
0x25
,
0xfe
,
0xf8
,
0xc8
,
0xda
,
0xce
,
0x8c
,
0x20
,
0x20
,
0x1c
,
0xf7
,
0xe6
,
0x93
,
0xd7
,
0xc6
,
0x75
,
0x3d
,
0x37
,
0x1e
,
0xfb
,
0xef
,
0xae
,
0xfd
,
0xf9
,
0xc8
,
0xbe
,
0xbd
,
0x9e
,
0xbb
,
0xb4
,
0x83
,
0xd7
,
0xc5
,
0x75
,
0x1f
,
0x1d
,
0x12
,
0xdc
,
0xd1
,
0x98
,
0x20
,
0x20
,
0x1b
,
0x1f
,
0x1e
,
0x16
,
0x1f
,
0x1b
,
0x0d
,
0xbf
,
0xbf
,
0xa5
,
0x40
,
0x40
,
0x38
,
0xdf
,
0xdc
,
0xb9
,
0xfc
,
0xf5
,
0xbd
,
0xf4
,
0xd6
,
0x65
,
0xfa
,
0xea
,
0xa1
,
0xd8
,
0xc9
,
0x81
,
0xf0
,
0xcb
,
0x42
,
0xdf
,
0xde
,
0xc0
,
0x1e
,
0x18
,
0x06
,
0xf6
,
0xdc
,
0x75
,
0xbf
,
0xbf
,
0xa8
,
0xd8
,
0xc6
,
0x75
,
0xd6
,
0xc0
,
0x66
,
0xf7
,
0xe6
,
0x92
,
0xf1
,
0xca
,
0x42
,
0xd2
,
0xb2
,
0x3a
,
0xbe
,
0xbe
,
0x9e
,
0x43
,
0x40
,
0x2f
,
0xd7
,
0xc6
,
0x74
,
0xb8
,
0xa6
,
0x58
,
0xbc
,
0xb4
,
0x83
,
0xda
,
0xcd
,
0x8d
,
0xf4
,
0xd7
,
0x64
,
0xbb
,
0xb0
,
0x79
,
0xfe
,
0xf9
,
0xc9
,
0x5e
,
0x5a
,
0x42
,
0xfa
,
0xea
,
0xa0
,
0x60
,
0x60
,
0x55
,
0x71
,
0x17
,
0x17
,
0xbc
,
0xb4
,
0x82
,
0x88
,
0x1c
,
0x1c
,
0xba
,
0xac
,
0x6d
,
0xbd
,
0xb7
,
0x8e
,
0xef
,
0xc5
,
0x34
,
0xd8
,
0xc5
,
0x75
,
0xff
,
0xff
,
0xdd
,
0xfb
,
0xf0
,
0xae
,
0x44
,
0x44
,
0x3a
,
0xff
,
0xff
,
0xe1
,
0xde
,
0xdf
,
0xc0
,
0x10
,
0x10
,
0x0d
,
0xf3
,
0xd7
,
0x64
,
0xd1
,
0xad
,
0x2d
,
0xbd
,
0xb8
,
0x8d
,
0xdf
,
0xdf
,
0xc2
,
0xbf
,
0x99
,
0x99
,
0x3e
,
0x39
,
0x22
,
0x5f
,
0x5c
,
0x47
,
0xef
,
0xc6
,
0x35
,
0xf6
,
0xdc
,
0x76
,
0xff
,
0xff
,
0xde
,
0x61
,
0x61
,
0x54
,
0x60
,
0x60
,
0x54
,
0xfb
,
0xf4
,
0xbc
,
0x3e
,
0x38
,
0x22
,
0x3f
,
0x3b
,
0x28
,
0x20
,
0x20
,
0x1a
,
0xdc
,
0xd6
,
0xa4
,
0x5f
,
0x5e
,
0x4c
,
0xbb
,
0xb3
,
0x82
,
0x5e
,
0x58
,
0x3c
,
0x10
,
0x0f
,
0x0b
,
0xde
,
0xd9
,
0xb0
,
0xe3
,
0xd9
,
0x9f
,
0xd2
,
0xb1
,
0x3a
,
0xbb
,
0xb4
,
0x82
,
0xcd
,
0xc6
,
0x99
,
0xa0
,
0x90
,
0x4d
,
0xe5
,
0xe2
,
0xb6
,
0xb8
,
0xa9
,
0x64
,
0xdf
,
0xdf
,
0xc1
,
0xda
,
0xcd
,
0x8c
,
0xfa
,
0xf0
,
0xae
,
0x08
,
0x07
,
0x05
,
0xfe
,
0xf8
,
0xc9
,
0xfa
,
0xef
,
0xae
,
0xbf
,
0xbe
,
0xa5
,
0x62
,
0x5c
,
0x3f
,
0xf1
,
0xd0
,
0x52
,
0x5e
,
0x58
,
0x3d
,
0xbe
,
0xba
,
0x97
,
0x8f
,
0x8f
,
0x7f
,
0x60
,
0x5f
,
0x50
,
0x28
,
0x26
,
0x1d
,
0xb9
,
0xac
,
0x6e
,
0x71
,
0x63
,
0x2e
,
0xdb
,
0xcd
,
0x8d
,
0xd8
,
0xc5
,
0x74
,
0xfe
,
0xfd
,
0xd4
,
0x98
,
0x8f
,
0x63
,
0x60
,
0x5e
,
0x4c
,
0xc2
,
0xb7
,
0x7e
,
0xf6
,
0xe1
,
0x85
,
0xf6
,
0xe2
,
0x85
,
0x0f
,
0x0d
,
0x06
,
0x42
,
0x3e
,
0x2b
,
0xbe
,
0xbb
,
0x97
,
0xdc
,
0xd1
,
0x99
,
0x3d
,
0x34
,
0x15
,
0xbd
,
0xb7
,
0x8d
,
0x98
,
0x86
,
0x3e
,
0x99
,
0x89
,
0x4a
,
0xee
,
0xc5
,
0x34
,
0x27
,
0x25
,
0x19
,
0xe1
,
0xd0
,
0x84
,
0x60
,
0x60
,
0x52
,
0x3e
,
0x39
,
0x21
,
0x3e
,
0x38
,
0x21
,
0x60
,
0x5f
,
0x4f
,
0x44
,
0x44
,
0x3b
,
0xee
,
0xc6
,
0x35
,
0x1e
,
0x1a
,
0x0a
,
0xf6
,
0xdd
,
0x76
,
0xdb
,
0xd2
,
0x98
,
0xb5
,
0x9c
,
0x3e
,
0xdc
,
0xd2
,
0x98
,
0x85
,
0x6d
,
0x19
,
0x18
,
0x17
,
0x10
,
0xd0
,
0xad
,
0x2e
,
0x93
,
0x7c
,
0x28
,
0xee
,
0xc6
,
0x34
,
0x3c
,
0x34
,
0x15
,
0xdd
,
0xd9
,
0xaf
,
0xe3
,
0xe3
,
0xc7
,
0x1f
,
0x1f
,
0x18
,
0xbf
,
0xbe
,
0xa4
,
0xbf
,
0xbd
,
0x9e
,
0x44
,
0x43
,
0x38
,
0x30
,
0x30
,
0x29
,
0xef
,
0xc5
,
0x35
,
0x48
,
0x47
,
0x3c
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0x21
,
0xf9
,
0x04
,
0x01
,
0x00
,
0x00
,
0xff
,
0x00
,
0x2c
,
0x00
,
0x00
,
0x00
,
0x00
,
0x6e
,
0x00
,
0x35
,
0x00
,
0x00
,
0x08
,
0xfe
,
0x00
,
0xff
,
0x09
,
0x1c
,
0x48
,
0xb0
,
0xa0
,
0xc1
,
0x83
,
0x08
,
0x13
,
0x2a
,
0x5c
,
0xc8
,
0xb0
,
0xa1
,
0xc3
,
0x87
,
0x10
,
0x23
,
0x4a
,
0x9c
,
0x48
,
0xb1
,
0xa2
,
0xc5
,
0x8b
,
0x18
,
0x33
,
0x56
,
0xac
,
0xc7
,
0xb1
,
0x63
,
0x3d
,
0x8d
,
0x20
,
0x43
,
0x5a
,
0xac
,
0x17
,
0xa7
,
0x81
,
0xc9
,
0x38
,
0x1f
,
0x45
,
0xaa
,
0x5c
,
0xc9
,
0xb0
,
0x5e
,
0x03
,
0x02
,
0x30
,
0x1b
,
0xa4
,
0x64
,
0x49
,
0xb3
,
0xa6
,
0x40
,
0x97
,
0x30
,
0x09
,
0xc8
,
0xb4
,
0xc9
,
0x93
,
0x25
,
0xce
,
0x98
,
0x33
,
0x7b
,
0x0a
,
0xcd
,
0xf8
,
0x53
,
0x67
,
0xd0
,
0xa1
,
0x48
,
0x29
,
0x16
,
0xdd
,
0x99
,
0xb4
,
0xe9
,
0xc4
,
0xa5
,
0x47
,
0x9d
,
0x4a
,
0x5d
,
0x08
,
0x75
,
0xaa
,
0xd5
,
0x96
,
0x0d
,
0x2a
,
0xc1
,
0xc4
,
0x15
,
0xf5
,
0xaa
,
0xd7
,
0x9b
,
0x9e
,
0x3e
,
0x7c
,
0x20
,
0xe5
,
0xa9
,
0xeb
,
0xd7
,
0xa4
,
0x1e
,
0x3b
,
0x3e
,
0x18
,
0xc0
,
0xf6
,
0x41
,
0xca
,
0xb4
,
0x1e
,
0x07
,
0xc6
,
0xbd
,
0xd9
,
0xf1
,
0xdf
,
0x5c
,
0x82
,
0x77
,
0xe1
,
0xde
,
0xb5
,
0xab
,
0x97
,
0xae
,
0x5e
,
0x8e
,
0x11
,
0x39
,
0x26
,
0x28
,
0x60
,
0xa1
,
0x00
,
0xe1
,
0x02
,
0x98
,
0x00
,
0x28
,
0x2e
,
0xf0
,
0xb1
,
0xde
,
0xe0
,
0xc2
,
0x86
,
0x0b
,
0xac
,
0x98
,
0xd1
,
0x38
,
0x81
,
0x05
,
0x0b
,
0x09
,
0x2a
,
0x17
,
0x48
,
0xd0
,
0xa8
,
0x5e
,
0xa3
,
0xc1
,
0x99
,
0xf1
,
0x5a
,
0xde
,
0xdc
,
0x71
,
0xb0
,
0xe1
,
0xc2
,
0x90
,
0x43
,
0x0b
,
0x3e
,
0x7d
,
0x3a
,
0xb3
,
0xe3
,
0xcb
,
0x90
,
0x51
,
0x93
,
0x7e
,
0xe8
,
0xb8
,
0x80
,
0x02
,
0xc5
,
0xb8
,
0x6f
,
0x2b
,
0x56
,
0xb0
,
0xa2
,
0xde
,
0x8f
,
0x04
,
0xb7
,
0x83
,
0xe3
,
0x9e
,
0xfc
,
0x63
,
0x06
,
0x80
,
0xdb
,
0x05
,
0x7e
,
0x8c
,
0xf9
,
0x51
,
0xe0
,
0x78
,
0xef
,
0xc1
,
0x00
,
0x18
,
0xcb
,
0x35
,
0xae
,
0x80
,
0xf7
,
0xef
,
0x15
,
0xbb
,
0x75
,
0x57
,
0xe7
,
0xcd
,
0x71
,
0x46
,
0xf3
,
0xe3
,
0xda
,
0x15
,
0xfe
,
0x50
,
0xc6
,
0xae
,
0x3b
,
0x7b
,
0xf5
,
0xd0
,
0x0d
,
0xeb
,
0x7d
,
0xc7
,
0xbd
,
0x9b
,
0x3d
,
0xe3
,
0x04
,
0xec
,
0xe3
,
0x2b
,
0xce
,
0xcc
,
0x9e
,
0xf3
,
0x7a
,
0xc6
,
0xd8
,
0xe7
,
0x37
,
0x1e
,
0x96
,
0x1f
,
0xc0
,
0x0c
,
0xe6
,
0xf2
,
0xd5
,
0xe7
,
0x58
,
0x79
,
0x86
,
0xb9
,
0xa7
,
0x5e
,
0x80
,
0x02
,
0xb6
,
0xc4
,
0x07
,
0x5b
,
0x03
,
0x7c
,
0x30
,
0xc0
,
0x03
,
0x10
,
0x36
,
0xc8
,
0xd6
,
0x07
,
0x6e
,
0x31
,
0xc1
,
0xe0
,
0x00
,
0x4c
,
0x44
,
0x28
,
0x21
,
0x13
,
0xf5
,
0x2c
,
0xc8
,
0xe0
,
0x5a
,
0x6c
,
0x31
,
0x61
,
0x4a
,
0x3d
,
0x33
,
0x30
,
0xc8
,
0xa1
,
0x5d
,
0x6b
,
0x89
,
0xf5
,
0x80
,
0x1c
,
0x72
,
0x80
,
0xf8
,
0x60
,
0x3b
,
0x29
,
0x3e
,
0xc8
,
0x91
,
0x8b
,
0x7c
,
0xd4
,
0x63
,
0x0a
,
0x88
,
0x14
,
0xd6
,
0xe3
,
0x62
,
0x88
,
0x0c
,
0x3a
,
0xe8
,
0x56
,
0x4b
,
0x79
,
0x10
,
0xc0
,
0x80
,
0x0c
,
0x0c
,
0x78
,
0x00
,
0x84
,
0x1b
,
0x97
,
0x78
,
0xc0
,
0xc0
,
0x92
,
0x0c
,
0xc8
,
0x04
,
0x13
,
0x14
,
0x45
,
0x1e
,
0x09
,
0x84
,
0x92
,
0x50
,
0xc8
,
0x40
,
0x80
,
0x91
,
0x0d
,
0x10
,
0xc9
,
0x24
,
0x01
,
0x32
,
0x78
,
0x30
,
0x46
,
0x3d
,
0x72
,
0xbc
,
0xb4
,
0xe4
,
0x3b
,
0xf5
,
0x78
,
0x20
,
0x83
,
0x95
,
0x04
,
0xf8
,
0x02
,
0x44
,
0x1c
,
0x0c
,
0x10
,
0x00
,
0x85
,
0x07
,
0x97
,
0xc8
,
0xf3
,
0x4d
,
0x26
,
0x42
,
0xca
,
0x64
,
0x26
,
0x50
,
0x65
,
0x42
,
0x21
,
0x24
,
0x03
,
0x79
,
0xd4
,
0x93
,
0xc9
,
0x92
,
0x50
,
0x7a
,
0xb0
,
0x4d
,
0x03
,
0x4c
,
0x36
,
0x69
,
0x96
,
0x5c
,
0x69
,
0x20
,
0xa0
,
0x28
,
0x02
,
0x11
,
0xe8
,
0x50
,
0x0f
,
0x12
,
0x9a
,
0xc4
,
0x13
,
0x01
,
0x0e
,
0x8a
,
0x46
,
0x50
,
0x0f
,
0x02
,
0x49
,
0x30
,
0xea
,
0x28
,
0x47
,
0x3a
,
0x44
,
0xb0
,
0xe8
,
0x1c
,
0xf5
,
0x08
,
0xa2
,
0x28
,
0xa5
,
0x8a
,
0xa6
,
0xb1
,
0x69
,
0x3d
,
0x69
,
0x64
,
0xca
,
0xa8
,
0x37
,
0x93
,
0x2a
,
0xa3
,
0xa9
,
0x2a
,
0xfe
,
0x9e
,
0x32
,
0x4a
,
0xcf
,
0xa3
,
0x6e
,
0x48
,
0x82
,
0x03
,
0x0e
,
0x96
,
0x7a
,
0x4a
,
0x69
,
0x04
,
0xc4
,
0x88
,
0x8a
,
0x29
,
0xa3
,
0xf0
,
0xd4
,
0x13
,
0x41
,
0x12
,
0x99
,
0xce
,
0xa1
,
0x83
,
0x2a
,
0x73
,
0x20
,
0x40
,
0xaa
,
0xa5
,
0x54
,
0x59
,
0x51
,
0x81
,
0x08
,
0x15
,
0x98
,
0x70
,
0x42
,
0x0c
,
0x1c
,
0x21
,
0x11
,
0xc3
,
0x09
,
0xd1
,
0x8a
,
0x70
,
0x42
,
0x3d
,
0xd0
,
0x86
,
0x31
,
0x6d
,
0x47
,
0x31
,
0x58
,
0xc1
,
0x8b
,
0x08
,
0x22
,
0xb0
,
0x53
,
0xcf
,
0x17
,
0x27
,
0x40
,
0xab
,
0x48
,
0x05
,
0xb0
,
0x30
,
0xe3
,
0x11
,
0xba
,
0xd9
,
0x1a
,
0x01
,
0xad
,
0x09
,
0x68
,
0x48
,
0xc3
,
0x91
,
0xbc
,
0x15
,
0xd8
,
0xc2
,
0x8a
,
0x26
,
0xf5
,
0xc4
,
0x20
,
0x09
,
0xb4
,
0x96
,
0x1a
,
0x41
,
0x6f
,
0x05
,
0x15
,
0x60
,
0x6b
,
0x82
,
0x09
,
0x61
,
0x08
,
0xf3
,
0x05
,
0x47
,
0x06
,
0xa3
,
0x61
,
0x45
,
0x0c
,
0xd7
,
0x22
,
0x0c
,
0xad
,
0x11
,
0x87
,
0xde
,
0x64
,
0x05
,
0x0a
,
0x28
,
0x4c
,
0x30
,
0x81
,
0x0a
,
0x24
,
0x74
,
0xe4
,
0xce
,
0x0e
,
0x13
,
0x50
,
0x40
,
0xc1
,
0x0e
,
0xf5
,
0x50
,
0xa0
,
0xf1
,
0x0e
,
0x24
,
0x20
,
0xf1
,
0x28
,
0x09
,
0x2a
,
0x88
,
0x4c
,
0xc1
,
0x2a
,
0xf5
,
0x60
,
0xb1
,
0x83
,
0xc9
,
0x28
,
0xd0
,
0x41
,
0x81
,
0x24
,
0x1d
,
0x73
,
0x44
,
0x82
,
0x24
,
0xa7
,
0x4c
,
0x90
,
0x31
,
0xcd
,
0xab
,
0x60
,
0xc1
,
0x51
,
0x27
,
0x3e
,
0x53
,
0x40
,
0x4b
,
0x28
,
0xc5
,
0xc8
,
0x6c
,
0x32
,
0xc5
,
0x2a
,
0x64
,
0x5c
,
0xb3
,
0xc9
,
0x23
,
0x57
,
0x13
,
0x4a
,
0xce
,
0x2a
,
0x84
,
0x4c
,
0x01
,
0xc7
,
0x2c
,
0x53
,
0x40
,
0x87
,
0xc6
,
0x2a
,
0x54
,
0x6c
,
0x57
,
0x27
,
0x18
,
0x60
,
0xd0
,
0x43
,
0x0f
,
0x41
,
0xb0
,
0xd0
,
0x11
,
0x0b
,
0x5b
,
0x0c
,
0xd1
,
0x03
,
0x06
,
0x41
,
0xd4
,
0x83
,
0xc1
,
0x08
,
0x23
,
0x6c
,
0x31
,
0xc8
,
0x39
,
0xbb
,
0xbc
,
0x32
,
0xc8
,
0x16
,
0x23
,
0x0c
,
0x81
,
0xc1
,
0xfe
,
0x2c
,
0x2c
,
0xb4
,
0x02
,
0xb7
,
0xde
,
0x67
,
0xb0
,
0x6d
,
0xf6
,
0xd9
,
0xe5
,
0x58
,
0x82
,
0x81
,
0x25
,
0x79
,
0x63
,
0x60
,
0xc8
,
0xd9
,
0x6a
,
0x88
,
0x3d
,
0x42
,
0x2c
,
0x41
,
0xb4
,
0x01
,
0x78
,
0xd7
,
0x8f
,
0x84
,
0xad
,
0x37
,
0xdb
,
0x86
,
0x2c
,
0xb2
,
0x88
,
0x1a
,
0x6a
,
0x98
,
0x3d
,
0x4d
,
0x2f
,
0x23
,
0xf4
,
0x30
,
0xce
,
0x1b
,
0x6f
,
0xb4
,
0xa1
,
0x4b
,
0x0f
,
0x67
,
0x9c
,
0xb1
,
0x85
,
0xd7
,
0x76
,
0x89
,
0xc1
,
0x48
,
0x09
,
0x25
,
0xd4
,
0x20
,
0x44
,
0x2a
,
0x53
,
0xf8
,
0x20
,
0x84
,
0x06
,
0x57
,
0x94
,
0x70
,
0x45
,
0x0e
,
0xf5
,
0x20
,
0x53
,
0x43
,
0x0d
,
0x1a
,
0x34
,
0xf3
,
0x4b
,
0x36
,
0xd1
,
0x08
,
0x51
,
0x02
,
0x17
,
0x76
,
0x20
,
0x93
,
0xca
,
0xed
,
0x45
,
0x70
,
0x51
,
0x82
,
0x1d
,
0x76
,
0xe0
,
0x2e
,
0x84
,
0x0f
,
0x1d
,
0x4d
,
0x91
,
0x08
,
0xf0
,
0x5c
,
0xd4
,
0xb0
,
0x7b
,
0x5a
,
0x3e
,
0xe4
,
0x50
,
0x82
,
0x06
,
0x25
,
0x14
,
0x21
,
0xbe
,
0x06
,
0x1a
,
0xac
,
0xde
,
0xbd
,
0x06
,
0x45
,
0xd4
,
0x70
,
0x88
,
0x2b
,
0xc1
,
0x24
,
0x92
,
0x0b
,
0xfa
,
0x42
,
0xd4
,
0x93
,
0xc3
,
0xeb
,
0x1a
,
0x1c
,
0x32
,
0xc5
,
0x14
,
0x62
,
0x1c
,
0x0f
,
0x3c
,
0xef
,
0x2d
,
0x45
,
0x02
,
0xc1
,
0x02
,
0x0b
,
0x20
,
0xc3
,
0x02
,
0x38
,
0xc0
,
0x01
,
0x2f
,
0x08
,
0x10
,
0x02
,
0xff
,
0xbb
,
0x43
,
0x3d
,
0x96
,
0x00
,
0xc0
,
0x05
,
0xfc
,
0x41
,
0x1b
,
0x5e
,
0xf0
,
0x02
,
0x02
,
0xff
,
0xb7
,
0x04
,
0x30
,
0x20
,
0xf0
,
0x0f
,
0x03
,
0xe4
,
0x00
,
0x00
,
0x31
,
0x58
,
0xc1
,
0x8e
,
0x80
,
0xc1
,
0x0b
,
0x0b
,
0xf8
,
0x1f
,
0x04
,
0x96
,
0x00
,
0x97
,
0x48
,
0xdc
,
0x21
,
0x84
,
0x22
,
0x04
,
0x20
,
0xef
,
0xd8
,
0xc0
,
0x40
,
0x11
,
0xde
,
0x41
,
0x83
,
0x64
,
0x40
,
0x20
,
0x07
,
0xea
,
0xa1
,
0xc1
,
0xff
,
0x71
,
0x80
,
0x0d
,
0x6c
,
0xd0
,
0x60
,
0x03
,
0x67
,
0x98
,
0x9e
,
0x27
,
0x6c
,
0x80
,
0x07
,
0xfe
,
0x1b
,
0x78
,
0x01
,
0x0f
,
0x3a
,
0xc0
,
0x03
,
0x67
,
0x74
,
0xe0
,
0x87
,
0x34
,
0x48
,
0x46
,
0x3d
,
0xaa
,
0x70
,
0x84
,
0x23
,
0xd2
,
0xa0
,
0x03
,
0x47
,
0x38
,
0x82
,
0x03
,
0xa6
,
0xe8
,
0x87
,
0x2a
,
0xf4
,
0xe1
,
0x89
,
0x2f
,
0x58
,
0x03
,
0x37
,
0xba
,
0x51
,
0x86
,
0x17
,
0xbc
,
0xe0
,
0x08
,
0x1b
,
0x78
,
0x42
,
0x3d
,
0xa4
,
0x30
,
0xc6
,
0x35
,
0x08
,
0x91
,
0x07
,
0x6b
,
0xf8
,
0x0b
,
0x2a
,
0x9e
,
0xd0
,
0x07
,
0x4a
,
0x3c
,
0x31
,
0x88
,
0x33
,
0xe4
,
0xc8
,
0x13
,
0x9c
,
0xd8
,
0x01
,
0x1a
,
0xfc
,
0x30
,
0x88
,
0x65
,
0xa8
,
0x47
,
0x1f
,
0x8e
,
0xf8
,
0x0c
,
0x42
,
0x48
,
0x41
,
0x0a
,
0x84
,
0x78
,
0xc1
,
0x06
,
0x3a
,
0xf0
,
0x82
,
0x3c
,
0x3a
,
0xa4
,
0x1e
,
0x85
,
0x70
,
0x00
,
0x0c
,
0xa6
,
0x28
,
0x0e
,
0x07
,
0x8c
,
0x62
,
0x8a
,
0x0e
,
0x20
,
0x82
,
0x0b
,
0xea
,
0x61
,
0x06
,
0x17
,
0x68
,
0x41
,
0x91
,
0x90
,
0x9c
,
0xa2
,
0x16
,
0xaa
,
0x00
,
0x0d
,
0x22
,
0x60
,
0xd2
,
0x05
,
0x2d
,
0x68
,
0x81
,
0x0b
,
0xa6
,
0x08
,
0x03
,
0x2d
,
0xa4
,
0xa3
,
0x1e
,
0x2d
,
0x40
,
0xa5
,
0x27
,
0x61
,
0x40
,
0x85
,
0x49
,
0xfe
,
0x85
,
0x23
,
0x95
,
0x74
,
0x00
,
0x15
,
0x1c
,
0xe0
,
0x07
,
0x8f
,
0x14
,
0xc2
,
0x0f
,
0x7b
,
0xa0
,
0xc2
,
0x23
,
0x1d
,
0xb0
,
0x07
,
0x49
,
0xd6
,
0x83
,
0x08
,
0x7b
,
0x50
,
0xa4
,
0x16
,
0x42
,
0x79
,
0x49
,
0x2a
,
0x2c
,
0x92
,
0x08
,
0xac
,
0xbb
,
0x89
,
0x12
,
0x52
,
0x90
,
0x01
,
0x10
,
0x5c
,
0x00
,
0x11
,
0xce
,
0x04
,
0x41
,
0x06
,
0x52
,
0xa0
,
0x84
,
0x10
,
0xc0
,
0x21
,
0x0a
,
0x21
,
0xa8
,
0x42
,
0x17
,
0x2e
,
0xc0
,
0xcd
,
0x0b
,
0x6c
,
0x22
,
0x03
,
0x55
,
0x88
,
0x02
,
0x1c
,
0x94
,
0xd0
,
0x05
,
0x69
,
0x2a
,
0x21
,
0x0a
,
0x51
,
0xd0
,
0xa6
,
0x34
,
0xd3
,
0x11
,
0x82
,
0x7a
,
0xc0
,
0xa1
,
0x1e
,
0x21
,
0xc8
,
0x40
,
0x1d
,
0x10
,
0x91
,
0x01
,
0xbd
,
0x84
,
0xc0
,
0x1a
,
0xed
,
0xfe
,
0xe4
,
0x88
,
0x12
,
0x32
,
0xc0
,
0x4d
,
0x22
,
0x1c
,
0xa3
,
0x23
,
0xd9
,
0xec
,
0x42
,
0x1d
,
0xb8
,
0x29
,
0xcd
,
0x8e
,
0xf0
,
0xd3
,
0x9b
,
0x19
,
0x08
,
0x41
,
0x3c
,
0x2f
,
0x50
,
0x07
,
0x67
,
0xd6
,
0xb3
,
0x25
,
0xf5
,
0xf8
,
0x84
,
0x01
,
0x26
,
0x4a
,
0xd1
,
0x8a
,
0x1a
,
0xe0
,
0x00
,
0x18
,
0xcd
,
0xa8
,
0x45
,
0x33
,
0xca
,
0x51
,
0x8a
,
0x76
,
0x74
,
0xa2
,
0x18
,
0xfd
,
0x44
,
0x3d
,
0xb2
,
0x00
,
0x8c
,
0x1b
,
0xdc
,
0x80
,
0x1c
,
0xf5
,
0xc0
,
0xe8
,
0x45
,
0x0f
,
0x30
,
0xd2
,
0x1b
,
0x64
,
0x61
,
0x1d
,
0xe1
,
0xa0
,
0x46
,
0x16
,
0x4c
,
0x7a
,
0x83
,
0x7a
,
0x72
,
0xf4
,
0x00
,
0x16
,
0x5d
,
0x29
,
0x4e
,
0x2b
,
0xaa
,
0x52
,
0x9e
,
0x7a
,
0xad
,
0x1e
,
0x8e
,
0x08
,
0x80
,
0x00
,
0x86
,
0x4a
,
0xd4
,
0xa2
,
0x1a
,
0xf5
,
0xa8
,
0x48
,
0x4d
,
0xea
,
0x51
,
0x03
,
0x50
,
0x8f
,
0x40
,
0xe0
,
0x01
,
0x0f
,
0x4e
,
0xa8
,
0x87
,
0x51
,
0x99
,
0xea
,
0x04
,
0x40
,
0x38
,
0x21
,
0x10
,
0xb2
,
0x08
,
0x84
,
0x13
,
0xa0
,
0x0a
,
0x88
,
0x7a
,
0x2a
,
0xf5
,
0xab
,
0x4b
,
0x85
,
0x04
,
0x60
,
0x12
,
0xc2
,
0x11
,
0x48
,
0x04
,
0xe0
,
0xac
,
0x68
,
0x4d
,
0xab
,
0x5a
,
0xd7
,
0xca
,
0xd6
,
0xb6
,
0xae
,
0xb5
,
0x1e
,
0x9c
,
0x10
,
0x05
,
0x36
,
0x26
,
0x81
,
0x8e
,
0x7a
,
0xbc
,
0xb5
,
0x09
,
0xa2
,
0x98
,
0x47
,
0x13
,
0xf6
,
0x0a
,
0x0e
,
0x75
,
0x4c
,
0xa2
,
0x09
,
0x9c
,
0xb0
,
0xab
,
0x5b
,
0x07
,
0xcb
,
0x56
,
0x47
,
0xfc
,
0xf4
,
0x95
,
0x88
,
0x4d
,
0xac
,
0x62
,
0x39
,
0x62
,
0x03
,
0x09
,
0x38
,
0xd6
,
0x1c
,
0x7f
,
0x49
,
0x81
,
0x63
,
0x27
,
0x3b
,
0xd9
,
0x14
,
0x2c
,
0xf6
,
0xb2
,
0x7b
,
0x39
,
0x8b
,
0x5d
,
0x24
,
0x2b
,
0x01
,
0x1b
,
0x98
,
0xa5
,
0x1e
,
0x29
,
0x68
,
0xec
,
0x64
,
0x6d
,
0x60
,
0x59
,
0xcd
,
0xf2
,
0x04
,
0xb4
,
0xa4
,
0x3d
,
0x14
,
0x47
,
0x42
,
0x9b
,
0xda
,
0x64
,
0x9a
,
0x16
,
0x23
,
0x7a
,
0x88
,
0x2d
,
0x2d
,
0x44
,
0xc7
,
0xfa
,
0xda
,
0xda
,
0xda
,
0xf6
,
0xb6
,
0xb8
,
0xcd
,
0xad
,
0x6e
,
0x77
,
0xcb
,
0xdb
,
0xde
,
0xfa
,
0xf6
,
0xb7
,
0xc0
,
0x0d
,
0xae
,
0x70
,
0x87
,
0x4b
,
0xdc
,
0xe2
,
0x1a
,
0xf7
,
0xb8
,
0xc8
,
0x4d
,
0xae
,
0x72
,
0x97
,
0xcb
,
0xdc
,
0xe6
,
0x3a
,
0xf7
,
0xb9
,
0x53
,
0x09
,
0x08
,
0x00
,
0x3b
};
const
unsigned
int
logo_len
=
3536
;
const
unsigned
int
logo_len
=
2378
;
unsigned
char
search_data
[]
=
{
0x47
,
0x49
,
0x46
,
0x38
,
0x39
,
0x61
,
0x78
,
0x00
,
0x1a
,
0x00
,
0xe7
,
0x00
,
...
...
src/memberdef.cpp
View file @
f38608d4
...
...
@@ -225,12 +225,13 @@ static void writeTemplatePrefix(OutputList &ol,ArgumentList *al,bool br=TRUE)
* all types.
*/
MemberDef
::
MemberDef
(
const
char
*
t
,
const
char
*
na
,
const
char
*
a
,
const
char
*
e
,
MemberDef
::
MemberDef
(
const
char
*
df
,
int
dl
,
const
char
*
t
,
const
char
*
na
,
const
char
*
a
,
const
char
*
e
,
Protection
p
,
Specifier
v
,
bool
s
,
bool
r
,
MemberType
mt
,
const
ArgumentList
*
tal
,
const
ArgumentList
*
al
)
:
Definition
(
substituteClassNames
(
na
))
)
:
Definition
(
df
,
dl
,
substituteClassNames
(
na
))
{
//printf("++++++ MemberDef(%s
,%s,%s) ++++++ \n",t,na,a
);
//printf("++++++ MemberDef(%s
file=%s,line=%d) ++++++ \n",na,df,dl
);
classDef
=
0
;
fileDef
=
0
;
fileDec
=
0
;
...
...
@@ -251,7 +252,6 @@ MemberDef::MemberDef(const char *t,const char *na,const char *a,const char *e,
args
=
substituteClassNames
(
a
);
if
(
type
.
isNull
())
decl
=
name
()
+
args
;
else
decl
=
type
+
" "
+
name
()
+
args
;
declLine
=
0
;
defLine
=
0
;
memberGroup
=
0
;
virt
=
v
;
prot
=
p
;
...
...
@@ -395,8 +395,10 @@ QCString MemberDef::getOutputFileBase() const
{
return
nspace
->
getOutputFileBase
();
}
warn
(
"Warning: Internal inconsistency: member %s does not belong to any
\n
"
" container!
\n
"
,
name
().
data
());
warn
(
defFileName
,
defLine
,
"Warning: Internal inconsistency: member %s does not belong to any"
" container!"
,
name
().
data
()
);
return
"dummy"
;
}
...
...
@@ -773,7 +775,7 @@ void MemberDef::writeDeclaration(OutputList &ol,
if
(
!
briefDescription
().
isEmpty
()
&&
Config
::
briefMemDescFlag
&&
!
annMemb
)
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
cname
,
name
(),
briefDescription
());
parseDoc
(
ol
,
defFileName
,
defLine
,
cname
,
name
(),
briefDescription
());
if
(
/*!documentation().isEmpty()*/
detailsAreVisible
())
{
ol
.
disableAllBut
(
OutputGenerator
::
Html
);
...
...
@@ -1044,14 +1046,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
)
/* || !annMemb */
)
{
parseDoc
(
ol
,
scopeName
,
name
(),
briefDescription
());
parseDoc
(
ol
,
defFileName
,
defLine
,
scopeName
,
name
(),
briefDescription
());
ol
.
newParagraph
();
}
/* write detailed description */
if
(
!
documentation
().
isEmpty
())
{
parseDoc
(
ol
,
scopeName
,
name
(),
documentation
()
+
"
\n
"
);
parseDoc
(
ol
,
defFileName
,
defLine
,
scopeName
,
name
(),
documentation
()
+
"
\n
"
);
ol
.
pushGeneratorState
();
ol
.
disableAllBut
(
OutputGenerator
::
RTF
);
ol
.
newParagraph
();
...
...
@@ -1083,7 +1085,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ol
.
endEmphasis
();
ol
.
endDescTableTitle
();
ol
.
startDescTableData
();
parseDoc
(
ol
,
scopeName
,
name
(),
a
->
docs
);
parseDoc
(
ol
,
defFileName
,
defLine
,
scopeName
,
name
(),
a
->
docs
);
ol
.
endDescTableData
();
}
}
...
...
@@ -1138,7 +1140,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if
(
!
fmd
->
briefDescription
().
isEmpty
())
{
parseDoc
(
ol
,
scopeName
,
fmd
->
name
(),
fmd
->
briefDescription
());
parseDoc
(
ol
,
defFileName
,
defLine
,
scopeName
,
fmd
->
name
(),
fmd
->
briefDescription
());
//ol.newParagraph();
}
if
(
!
fmd
->
briefDescription
().
isEmpty
()
&&
...
...
@@ -1148,7 +1150,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
if
(
!
fmd
->
documentation
().
isEmpty
())
{
parseDoc
(
ol
,
scopeName
,
fmd
->
name
(),
fmd
->
documentation
()
+
"
\n
"
);
parseDoc
(
ol
,
defFileName
,
defLine
,
scopeName
,
fmd
->
name
(),
fmd
->
documentation
()
+
"
\n
"
);
}
ol
.
endDescTableData
();
}
...
...
@@ -1329,7 +1331,7 @@ void MemberDef::warnIfUndocumented()
t
=
"group"
,
d
=
gd
;
if
(
d
&&
d
->
isLinkable
()
&&
!
isLinkable
()
&&
name
().
find
(
'@'
)
==-
1
)
warn
(
"Warning: Member %s of %s %s is not documented
\n
"
,
warn
_undoc
(
defFileName
,
defLine
,
"Warning: Member %s of %s %s is not documented.
"
,
name
().
data
(),
t
,
d
->
name
().
data
());
}
...
...
src/memberdef.h
View file @
f38608d4
...
...
@@ -59,7 +59,8 @@ class MemberDef : public Definition
// initialization
};
MemberDef
(
const
char
*
type
,
const
char
*
name
,
const
char
*
args
,
MemberDef
(
const
char
*
defFileName
,
int
defLine
,
const
char
*
type
,
const
char
*
name
,
const
char
*
args
,
const
char
*
excp
,
Protection
prot
,
Specifier
virt
,
bool
stat
,
bool
related
,
MemberType
t
,
const
ArgumentList
*
tal
,
const
ArgumentList
*
al
);
...
...
@@ -96,8 +97,8 @@ class MemberDef : public Definition
MemberList
*
getSectionList
()
const
{
return
section
;
}
void
setMemberType
(
MemberType
t
)
{
mtype
=
t
;
}
void
setDefinition
(
const
char
*
d
)
{
def
=
d
;
}
void
setDefFile
(
const
char
*
f
)
{
defFile
=
f
;
}
void
setDefLine
(
int
l
)
{
defLine
=
l
;
}
//
void setDefFile(const char *f) { defFile=f; }
//
void setDefLine(int l) { defLine=l; }
void
setFileDef
(
FileDef
*
fd
)
{
fileDef
=
fd
;
}
void
setFileDec
(
FileDef
*
fd
)
{
fileDec
=
fd
;
}
void
setAnchor
(
const
char
*
a
)
{
anc
=
a
;
}
...
...
@@ -143,10 +144,8 @@ class MemberDef : public Definition
ExampleList
*
getExampleList
()
const
{
return
exampleList
;
}
// prototype related members
const
char
*
getDefFile
()
{
return
defFile
;
}
int
getDefLine
()
{
return
defLine
;
}
void
setDecFile
(
const
char
*
f
)
{
declFile
=
f
;
}
void
setDecLine
(
int
l
)
{
defLine
=
l
;
}
//void setDecFile(const char *f) { declFile=f; }
//void setDecLine(int l) { defLine=l; }
// convenience members
bool
isSignal
()
const
{
return
mtype
==
Signal
;
}
...
...
@@ -219,8 +218,8 @@ class MemberDef : public Definition
QCString
declFile
;
// file where the declaration was found
int
declLine
;
// line where the declaration was found
QCString
def
;
// member definition in code (fully qualified name)
QCString
defFile
;
// file where the definition was found
int
defLine
;
// line where the definition was found
//
QCString defFile; // file where the definition was found
//
int defLine; // line where the definition was found
QCString
anc
;
// HTML anchor name
Specifier
virt
;
// normal/virtual/pure virtual
Protection
prot
;
// protection type [Public/Protected/Private]
...
...
src/membergroup.cpp
View file @
f38608d4
...
...
@@ -75,7 +75,7 @@ void MemberGroup::setAnchors()
void
MemberGroup
::
writeDeclarations
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
)
{
memberList
->
writeDeclarations
(
ol
,
cd
,
nd
,
fd
,
gd
,
grpHeader
,
doc
,
TRUE
);
memberList
->
writeDeclarations
(
ol
,
cd
,
nd
,
fd
,
gd
,
grpHeader
,
doc
,
TRUE
,
TRUE
);
}
void
MemberGroup
::
writePlainDeclarations
(
OutputList
&
ol
,
...
...
@@ -101,8 +101,26 @@ int MemberGroup::countDecMembers()
{
if
(
numDeclMembers
==-
1
)
/* number of member not cached */
{
memberList
->
countDecMembers
(
TRUE
);
memberList
->
countDecMembers
(
TRUE
,
TRUE
);
numDeclMembers
=
memberList
->
totalCount
();
}
return
numDeclMembers
;
}
void
MemberGroup
::
distributeMemberGroupDocumentation
()
{
MemberDef
*
md
=
memberList
->
first
();
if
(
md
&&
md
->
hasDocumentation
())
{
MemberDef
*
omd
=
memberList
->
next
();
while
(
omd
)
{
if
(
!
omd
->
hasDocumentation
())
{
omd
->
setBriefDescription
(
md
->
briefDescription
());
omd
->
setDocumentation
(
md
->
documentation
());
}
omd
=
memberList
->
next
();
}
}
}
src/membergroup.h
View file @
f38608d4
...
...
@@ -53,6 +53,7 @@ class MemberGroup /* : public Definition */
bool
allMembersInSameSection
()
{
return
inSameSection
;
}
void
addToDeclarationSection
();
int
countDecMembers
();
void
distributeMemberGroupDocumentation
();
private
:
MemberList
*
memberList
;
// list of all members in the group
...
...
src/memberlist.cpp
View file @
f38608d4
...
...
@@ -44,13 +44,16 @@ int MemberList::compareItems(GCI item1, GCI item2)
return
strcmp
(
c1
->
name
(),
c2
->
name
());
}
void
MemberList
::
countDecMembers
(
bool
inGroup
)
void
MemberList
::
countDecMembers
(
bool
inGroup
,
bool
countSubGroups
)
{
//printf("----- countDecMembers ----\n");
varCnt
=
funcCnt
=
enumCnt
=
enumValCnt
=
typeCnt
=
protoCnt
=
defCnt
=
friendCnt
=
0
;
m_count
=
0
;
MemberDef
*
md
=
first
();
while
(
md
)
{
//printf("md=%p md->name()=`%s' inGroup=%d getMemberGroup()=%p\n",
// md,md->name().data(),inGroup,md->getMemberGroup());
if
(
!
(
md
->
memberClass
()
==
0
&&
md
->
isStatic
()
&&
!
Config
::
extractPrivateFlag
)
&&
(
!
Config
::
hideMemberFlag
||
md
->
hasDocumentation
())
&&
(
...
...
@@ -60,7 +63,8 @@ void MemberList::countDecMembers(bool inGroup)
(
md
->
isEnumerate
()
&&
md
->
hasDocumentedEnumValues
()
)
)
&&
inGroup
==
(
md
->
getMemberGroup
()
!=
0
)
&&
)
&&
inGroup
==
(
md
->
getMemberGroup
()
!=
0
)
&&
!
(
inGroup
&&
md
->
protection
()
==
Private
&&
!
Config
::
extractPrivateFlag
)
)
{
...
...
@@ -88,17 +92,18 @@ void MemberList::countDecMembers(bool inGroup)
}
md
=
next
();
}
if
(
memberGroupList
&&
!
inGroup
)
if
(
memberGroupList
&&
countSubGroups
)
{
MemberGroupListIterator
mgli
(
*
memberGroupList
);
MemberGroup
*
mg
;
for
(;(
mg
=
mgli
.
current
());
++
mgli
)
{
//printf("memberGroupList adding %d inGroup=%d\n",
//
mg->countDecMembers(),m_count
);
m_count
+=
mg
->
countDecMembers
()
;
int
mgCount
=
mg
->
countDecMembers
();
//
printf("memberGroupList adding %d inGroup=%d\n",mgCount,inGroup
);
m_count
+=
mg
Count
;
}
}
//printf("----- end countDecMembers ----\n");
//printf("MemberList::countDecMembers(%d)=%d\n",inGroup,m_count);
}
...
...
@@ -147,12 +152,13 @@ MemberListIterator::MemberListIterator(const QList<MemberDef> &l) :
void
MemberList
::
writePlainDeclarations
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
,
bool
inGroup
bool
inGroup
,
bool
countSubGroups
)
{
countDecMembers
(
inGroup
);
//printf("writePlainDeclaration() totalCount()=%d defineCount()=%d\n",totalCount(),defineCount()
);
//printf("----- writePlainDeclaration() ----\n"
);
countDecMembers
(
inGroup
,
countSubGroups
);
if
(
totalCount
()
==
0
)
return
;
// no members in this list
//printf("----> writePlainDeclaration() inGroup=%d totalCount()=%d\n",inGroup,totalCount());
ol
.
pushGeneratorState
();
...
...
@@ -163,6 +169,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
defineCount
()
>
0
)
{
//printf("There are %d defines\n",defineCount());
if
(
sectionPerType
)
{
ol
.
startMemberHeader
();
...
...
@@ -191,6 +198,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
protoCount
()
>
0
)
{
//printf("There are %d prototypes\n",protoCount());
if
(
sectionPerType
)
{
ol
.
startMemberHeader
();
...
...
@@ -214,6 +222,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
typedefCount
()
>
0
)
{
//printf("There are %d typedefs\n",typedefCount());
if
(
sectionPerType
)
{
ol
.
startMemberHeader
();
...
...
@@ -236,6 +245,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
// write enums
if
(
enumCount
()
>
0
)
{
//printf("There are %d enums\n",enumCount());
if
(
sectionPerType
)
{
ol
.
startMemberHeader
();
...
...
@@ -357,6 +367,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{
ol
.
startMemberDescription
();
parseDoc
(
ol
,
md
->
getDefFileName
(),
md
->
getDefLine
(),
cd
?
cd
->
name
().
data
()
:
0
,
md
->
name
().
data
(),
md
->
briefDescription
()
);
...
...
@@ -384,6 +395,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
// write functions
if
(
funcCount
()
>
0
)
{
//printf("There are %d functions\n",funcCount());
if
(
sectionPerType
)
{
ol
.
startMemberHeader
();
...
...
@@ -408,6 +420,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
friendCount
()
>
0
)
{
//printf("There are %d friends\n",friendCount());
MemberListIterator
mli
(
*
this
);
for
(
;
(
md
=
mli
.
current
())
;
++
mli
)
{
...
...
@@ -455,6 +468,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
// write variables
if
(
varCount
()
>
0
)
{
//printf("There are %d variables\n",varCount());
if
(
sectionPerType
)
{
ol
.
startMemberHeader
();
...
...
@@ -483,6 +497,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
md
->
fromAnnonymousScope
()
&&
!
md
->
annonymousDeclShown
()
&&
inGroup
==
(
md
->
getMemberGroup
()
!=
0
))
{
//printf("annonymous compound members\n");
md
->
setFromAnnonymousScope
(
FALSE
);
md
->
writeDeclaration
(
ol
,
cd
,
nd
,
fd
,
gd
,
inGroup
);
md
->
setFromAnnonymousScope
(
TRUE
);
...
...
@@ -493,16 +508,28 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if
(
!
sectionPerType
)
{
ol
.
endMemberList
();
/*ol.writeChar('\n');*/
}
ol
.
popGeneratorState
();
//printf("----- end writePlainDeclaration() ----\n");
}
void
MemberList
::
writeDeclarations
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
,
const
char
*
title
,
const
char
*
subtitle
,
bool
inGroup
)
const
char
*
title
,
const
char
*
subtitle
,
bool
inGroup
,
bool
countSubGroups
)
{
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')\n",
// title,subtitle);
countDecMembers
(
inGroup
);
if
(
totalCount
()
==
0
)
return
;
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')\n",title,subtitle);
//printf("----- writeDeclaration() ----\n");
countDecMembers
(
FALSE
,
countSubGroups
);
// count member not in group
int
normalMembers
=
totalCount
();
int
ingroupMembers
=
0
;
//printf("Normal members %d\n",normalMembers);
if
(
inGroup
)
{
countDecMembers
(
TRUE
,
countSubGroups
);
// count member inside group
ingroupMembers
=
totalCount
();
}
int
totalMembers
=
normalMembers
+
ingroupMembers
;
//printf("Total members %d\n",totalMembers);
if
(
totalMembers
==
0
)
return
;
if
(
title
)
{
ol
.
startMemberHeader
();
...
...
@@ -514,13 +541,13 @@ void MemberList::writeDeclarations(OutputList &ol,
//printf("subtitle=`%s'\n",subtitle);
ol
.
startMemberSubtitle
();
if
(
inGroup
)
parseDoc
(
ol
,
0
,
0
,
subtitle
);
parseDoc
(
ol
,
"<generated>"
,
1
,
0
,
0
,
subtitle
);
else
parseText
(
ol
,
subtitle
);
ol
.
endMemberSubtitle
();
}
writePlainDeclarations
(
ol
,
cd
,
nd
,
fd
,
gd
,
inGroup
);
writePlainDeclarations
(
ol
,
cd
,
nd
,
fd
,
gd
,
inGroup
,
FALSE
);
if
(
memberGroupList
)
{
...
...
@@ -530,13 +557,17 @@ void MemberList::writeDeclarations(OutputList &ol,
while
((
mg
=
mgli
.
current
()))
{
ol
.
startMemberGroupHeader
();
parseText
(
ol
,
mg
->
header
());
if
(
mg
->
header
()
!=
"[NOHEADER]"
)
{
parseText
(
ol
,
mg
->
header
());
}
ol
.
endMemberGroupHeader
();
if
(
!
mg
->
documentation
().
isEmpty
())
{
//printf("Member group has docs!\n");
ol
.
startMemberGroupDocs
();
parseDoc
(
ol
,
0
,
0
,
mg
->
documentation
());
parseDoc
(
ol
,
"<generated>"
,
1
,
0
,
0
,
mg
->
documentation
());
ol
.
endMemberGroupDocs
();
}
ol
.
startMemberGroup
();
...
...
@@ -545,6 +576,7 @@ void MemberList::writeDeclarations(OutputList &ol,
ol
.
endMemberGroup
(
mgli
.
current
()
==
0
);
}
}
//printf("----- end writeDeclaration() ----\n");
}
...
...
src/memberlist.h
View file @
f38608d4
...
...
@@ -41,7 +41,7 @@ class MemberList : public QList<MemberDef>
int
protoCount
()
const
{
return
protoCnt
;
}
int
defineCount
()
const
{
return
defCnt
;
}
int
friendCount
()
const
{
return
friendCnt
;
}
void
countDecMembers
(
bool
inGroup
);
void
countDecMembers
(
bool
inGroup
,
bool
countSubGroups
);
void
countDocMembers
();
int
totalCount
()
const
{
return
//varCnt+funcCnt+enumCnt+enumValCnt+typeCnt+
...
...
@@ -50,10 +50,11 @@ class MemberList : public QList<MemberDef>
}
void
writePlainDeclarations
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
,
bool
inGroup
=
FALSE
);
bool
inGroup
=
FALSE
,
bool
countSubGroups
=
TRUE
);
void
writeDeclarations
(
OutputList
&
ol
,
ClassDef
*
cd
,
NamespaceDef
*
nd
,
FileDef
*
fd
,
GroupDef
*
gd
,
const
char
*
title
,
const
char
*
subtitle
,
bool
inGroup
=
FALSE
);
const
char
*
title
,
const
char
*
subtitle
,
bool
inGroup
=
FALSE
,
bool
countSubGroups
=
TRUE
);
void
writeDocumentation
(
OutputList
&
ol
,
const
char
*
scopeName
/*,MemberDef::MemberType m*/
);
void
addMemberGroup
(
MemberGroup
*
mg
);
...
...
src/message.cpp
View file @
f38608d4
...
...
@@ -18,6 +18,57 @@
#include <stdarg.h>
#include <stdio.h>
#include "config.h"
#include <qregexp.h>
static
QCString
outputFormat
;
static
int
warnFormatOrder
;
// 1 = $file,$line,$text
// 2 = $text,$line,$file
// 3 = $line,$text,$file
// 4 = $file,$text,$line
// 5 = $text,$file,$line
// 6 = $line,$file,$text
void
initWarningFormat
()
{
int
filePos
=
Config
::
warnFormat
.
find
(
"$file"
);
int
linePos
=
Config
::
warnFormat
.
find
(
"$line"
);
int
textPos
=
Config
::
warnFormat
.
find
(
"$text"
);
// sort items on position (there are 6 cases)
warnFormatOrder
=
1
;
if
(
filePos
>
linePos
&&
filePos
>
textPos
)
{
if
(
linePos
>
textPos
)
// $text,$line,$file
{
warnFormatOrder
=
2
;
}
else
// $line,$text,$file
{
warnFormatOrder
=
3
;
}
}
else
if
(
filePos
<
linePos
&&
filePos
<
textPos
)
{
if
(
linePos
>
textPos
)
// $file,$text,$line
{
warnFormatOrder
=
4
;
}
}
else
if
(
filePos
<
linePos
&&
filePos
>
textPos
)
// $text,$file,$line
{
warnFormatOrder
=
5
;
}
else
// $line,$file,$text
{
warnFormatOrder
=
6
;
}
outputFormat
=
Config
::
warnFormat
.
replace
(
QRegExp
(
"
\\
$file"
),
"%s"
).
replace
(
QRegExp
(
"
\\
$text"
),
"%s"
).
replace
(
QRegExp
(
"
\\
$line"
),
"%d"
)
+
'\n'
;
}
void
msg
(
const
char
*
fmt
,
...)
{
...
...
@@ -30,7 +81,31 @@ void msg(const char *fmt, ...)
}
}
void
warn
(
const
char
*
fmt
,
...)
void
warn
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...)
{
if
(
Config
::
warningFlag
)
{
if
(
file
==
0
)
file
=
"<unknwon>"
;
char
text
[
4096
];
va_list
args
;
va_start
(
args
,
fmt
);
vsprintf
(
text
,
fmt
,
args
);
va_end
(
args
);
switch
(
warnFormatOrder
)
{
case
1
:
fprintf
(
stderr
,
outputFormat
,
file
,
line
,
text
);
break
;
case
2
:
fprintf
(
stderr
,
outputFormat
,
text
,
line
,
file
);
break
;
case
3
:
fprintf
(
stderr
,
outputFormat
,
line
,
text
,
file
);
break
;
case
4
:
fprintf
(
stderr
,
outputFormat
,
file
,
text
,
line
);
break
;
case
5
:
fprintf
(
stderr
,
outputFormat
,
text
,
file
,
line
);
break
;
case
6
:
fprintf
(
stderr
,
outputFormat
,
line
,
file
,
text
);
break
;
default:
printf
(
"Error: warning format has not been initialized!
\n
"
);
}
}
}
void
warn_cont
(
const
char
*
fmt
,
...)
{
if
(
Config
::
warningFlag
)
{
...
...
@@ -41,6 +116,30 @@ void warn(const char *fmt, ...)
}
}
void
warn_undoc
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...)
{
if
(
Config
::
warningUndocFlag
)
{
if
(
file
==
0
)
file
=
"<unknwon>"
;
char
text
[
4096
];
va_list
args
;
va_start
(
args
,
fmt
);
vsprintf
(
text
,
fmt
,
args
);
va_end
(
args
);
switch
(
warnFormatOrder
)
{
case
1
:
fprintf
(
stderr
,
outputFormat
,
file
,
line
,
text
);
break
;
case
2
:
fprintf
(
stderr
,
outputFormat
,
text
,
line
,
file
);
break
;
case
3
:
fprintf
(
stderr
,
outputFormat
,
line
,
text
,
file
);
break
;
case
4
:
fprintf
(
stderr
,
outputFormat
,
file
,
text
,
line
);
break
;
case
5
:
fprintf
(
stderr
,
outputFormat
,
text
,
file
,
line
);
break
;
case
6
:
fprintf
(
stderr
,
outputFormat
,
line
,
file
,
text
);
break
;
default:
printf
(
"Error: warning format has not been initialized!
\n
"
);
}
}
}
void
err
(
const
char
*
fmt
,
...)
{
va_list
args
;
...
...
src/message.h
View file @
f38608d4
...
...
@@ -19,7 +19,10 @@
#define MESSAGE_H
extern
void
msg
(
const
char
*
fmt
,
...);
extern
void
warn
(
const
char
*
fmt
,
...);
extern
void
warn
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
warn_cont
(
const
char
*
fmt
,
...);
extern
void
warn_undoc
(
const
char
*
file
,
int
line
,
const
char
*
fmt
,
...);
extern
void
err
(
const
char
*
fmt
,
...);
void
initWarningFormat
();
#endif
src/namespacedef.cpp
View file @
f38608d4
...
...
@@ -27,7 +27,9 @@
#include "doxygen.h"
#include "message.h"
NamespaceDef
::
NamespaceDef
(
const
char
*
name
,
const
char
*
ref
)
:
Definition
(
name
)
NamespaceDef
::
NamespaceDef
(
const
char
*
df
,
int
dl
,
const
char
*
name
,
const
char
*
ref
)
:
Definition
(
df
,
dl
,
name
)
{
fileName
=
"namespace_"
+
nameToFile
(
name
);
classList
=
new
ClassList
;
...
...
@@ -38,6 +40,8 @@ NamespaceDef::NamespaceDef(const char *name,const char *ref) : Definition(name)
memberGroupList
=
new
MemberGroupList
;
memberGroupList
->
setAutoDelete
(
TRUE
);
memberGroupDict
=
new
MemberGroupDict
(
1009
);
defFileName
=
df
;
defLine
=
dl
;
}
NamespaceDef
::~
NamespaceDef
()
...
...
@@ -49,6 +53,15 @@ NamespaceDef::~NamespaceDef()
delete
memberGroupDict
;
}
void
NamespaceDef
::
distributeMemberGroupDocumentation
()
{
MemberGroupListIterator
mgli
(
*
memberGroupList
);
MemberGroup
*
mg
;
for
(;(
mg
=
mgli
.
current
());
++
mgli
)
{
mg
->
distributeMemberGroupDocumentation
();
}
}
void
NamespaceDef
::
insertUsedFile
(
const
char
*
f
)
{
if
(
files
.
find
(
f
)
==-
1
)
files
.
append
(
f
);
...
...
@@ -130,7 +143,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
OutputList
briefOutput
(
&
ol
);
if
(
!
briefDescription
().
isEmpty
())
{
parseDoc
(
briefOutput
,
name
(),
0
,
briefDescription
());
parseDoc
(
briefOutput
,
defFileName
,
defLine
,
name
(),
0
,
briefDescription
());
ol
+=
briefOutput
;
ol
.
writeString
(
"
\n
"
);
ol
.
pushGeneratorState
();
...
...
@@ -183,7 +196,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
}
if
(
!
documentation
().
isEmpty
())
{
parseDoc
(
ol
,
name
(),
0
,
documentation
()
+
"
\n
"
);
parseDoc
(
ol
,
defFileName
,
defLine
,
name
(),
0
,
documentation
()
+
"
\n
"
);
ol
.
newParagraph
();
}
ol
.
endTextBlock
();
...
...
src/namespacedef.h
View file @
f38608d4
...
...
@@ -36,7 +36,8 @@ class MemberGroupList;
class
NamespaceDef
:
public
Definition
{
public
:
NamespaceDef
(
const
char
*
name
,
const
char
*
ref
=
0
);
NamespaceDef
(
const
char
*
defFileName
,
int
defLine
,
const
char
*
name
,
const
char
*
ref
=
0
);
~
NamespaceDef
();
//QCString namespaceFile() const { return fileName; }
QCString
getOutputFileBase
()
const
{
return
fileName
;
}
...
...
@@ -72,6 +73,7 @@ class NamespaceDef : public Definition
{
return
isLinkableInProject
()
||
isReference
();
}
void
distributeMemberGroupDocumentation
();
private
:
//QCString reference;
...
...
src/pre.l
View file @
f38608d4
...
...
@@ -171,12 +171,12 @@ static FILE *findFile(const char *fileName)
{
QCString cmd = Config::inputFilter+" "+absName;
f=popen(cmd,"r");
if (!f)
warn("Warning
: could not execute filter %s\n",cmd.data());
if (!f)
err("Error
: could not execute filter %s\n",cmd.data());
}
else
{
f=fopen(absName,"r");
if (!f)
warn("Warning
: could not open file %s for reading\n",absName.data());
if (!f)
err("Error
: could not open file %s for reading\n",absName.data());
}
if (f)
{
...
...
@@ -761,7 +761,9 @@ void addDefine()
{
//bool ambig;
//FileDef *fd=findFileDef(&inputNameDict,g_yyFileName,ambig);
MemberDef *md=new MemberDef("#define",g_defName,g_defArgsStr,0,
MemberDef *md=new MemberDef(
g_yyFileName,g_yyLineNr,
"#define",g_defName,g_defArgsStr,0,
Public,Normal,FALSE,FALSE,MemberDef::Define,0,0);
if (!g_defArgsStr.isEmpty())
{
...
...
@@ -773,8 +775,8 @@ void addDefine()
//printf("Setting initializer for `%s' to `%s'\n",g_defName.data(),g_defText.data());
md->setInitializer(g_defLitText);
md->setDefFile(g_yyFileName);
md->setDefLine(g_yyLineNr);
//
md->setDefFile(g_yyFileName);
//
md->setDefLine(g_yyLineNr);
md->setFileDef(g_yyFileDef);
md->setDefinition("#define "+g_defName);
...
...
src/rtfgen.cpp
View file @
f38608d4
...
...
@@ -1665,7 +1665,7 @@ void RTFGenerator::incrementIndentLevel()
m_listLevel
++
;
if
(
m_listLevel
>
indentLevels
-
1
)
{
warn
(
"Warning: Maximum indent level (%d) exceeded while generating RTF output!
\n
"
,
indentLevels
);
warn
_cont
(
"Warning: Maximum indent level (%d) exceeded while generating RTF output!
\n
"
,
indentLevels
);
m_listLevel
=
indentLevels
-
1
;
}
}
...
...
@@ -1675,7 +1675,7 @@ void RTFGenerator::decrementIndentLevel()
m_listLevel
--
;
if
(
m_listLevel
<
0
)
{
warn
(
"Warning: Negative indent level while generating RTF output!
\n
"
);
warn
_cont
(
"Warning: Negative indent level while generating RTF output!
\n
"
);
m_listLevel
=
0
;
}
}
...
...
src/scanner.h
View file @
f38608d4
...
...
@@ -29,8 +29,10 @@
class
OutputList
;
extern
void
parseMain
(
Entry
*
);
extern
void
parseDoc
(
OutputList
&
ol
,
const
char
*
clName
,
const
char
*
memName
,
const
QCString
&
docString
);
extern
void
parseDoc
(
OutputList
&
ol
,
const
char
*
fileName
,
int
startLine
,
const
char
*
clName
,
const
char
*
memName
,
const
QCString
&
docString
);
extern
void
parseExample
(
OutputList
&
ol
,
const
QCString
&
docString
,
const
char
*
fileName
);
extern
void
parseText
(
OutputList
&
ol
,
const
QCString
&
txtString
);
...
...
src/scanner.l
View file @
f38608d4
...
...
@@ -56,7 +56,6 @@
static bool insideArgumentList;
static QCString className;
static QCString memberName;
static QCString refName;
static OutputList * outDoc;
static QCString code;
static QCString linkRef;
...
...
@@ -98,9 +97,9 @@ static Entry* global_root = 0 ;
static Entry* current = 0 ;
static Entry* previous = 0 ;
static Entry* tempEntry = 0 ;
static int yyLineNr =
0
;
static int yyLineNr =
1
;
static int anonCount = 0 ;
static char yyFileName[
2048
] ;
static char yyFileName[
4096
] ;
static int lastMemberGroupLine;
static bool sig;
static bool slot;
...
...
@@ -179,7 +178,6 @@ static void initParser()
insideArgumentList=FALSE;
className.resize(0);
memberName.resize(0);
refName="<unknown>";
code.resize(0);
linkRef.resize(0);
linkText.resize(0);
...
...
@@ -415,15 +413,18 @@ static void includeFile(OutputList &ol,const char *fileName,bool quiet)
}
else if (ambig)
{
warn("Include file name %s is ambigious.\n",fileName);
warn("Possible candidates:\n");
//includeFileList.writeMatches(fileName);
showFileDefMatches(&exampleNameDict,fileName);
QCString text;
text.sprintf("Include file name %s is ambigious.\n",fileName);
text+="Possible candidates:\n";
text+=showFileDefMatches(&exampleNameDict,fileName);
warn(yyFileName,yyLineNr,text);
}
else
{
warn("Warning: example file %s is not found. ",fileName);
warn("Check your EXAMPLE_PATH\n");
warn(yyFileName,yyLineNr,
"Warning: example file %s is not found. "
"Check your EXAMPLE_PATH",fileName
);
}
}
...
...
@@ -440,14 +441,17 @@ static void verbIncludeFile(OutputList &ol,const char *name)
}
else if (ambig)
{
warn("Include file name %s is ambigious.\n",name);
warn("Possible candidates:\n");
showFileDefMatches(&exampleNameDict,name);
QCString text;
text.sprintf("Include file name %s is ambigious.\n",name);
text+=("Possible candidates:\n");
text+=showFileDefMatches(&exampleNameDict,name);
warn(yyFileName,yyLineNr,text);
}
else
{
warn("Warning: example file %s is not found. ",name);
warn("Check your EXAMPLE_PATH\n");
warn(yyFileName,yyLineNr,
"Warning: example file %s is not found. "
"Check your EXAMPLE_PATH",name);
}
}
...
...
@@ -619,7 +623,8 @@ static void addListItemMarker(const char *marker)
if (listIndentStack.isEmpty())
{
insideItemList=FALSE;
warn("Warning: list item with invalid indent found!\n");
warn(yyFileName,yyLineNr,
"Warning: list item with invalid indent found!");
}
else
{
...
...
@@ -690,7 +695,8 @@ static void addSection()
}
else
{
warn("Warning: Duplicate label %s found!\n",sectionLabel.data());
warn(yyFileName,yyLineNr,
"Warning: Duplicate label %s found!",sectionLabel.data());
}
}
...
...
@@ -731,7 +737,7 @@ static void checkDocs()
)
{
warn("Warning: Found lonely '<' symbol at the start of the documentation "
"at line %d of %s
\n
",yyLineNr,yyFileName);
"at line %d of %s",yyLineNr,yyFileName);
}
}
...
...
@@ -810,28 +816,33 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
}
else
{
warn("Warning: could not write output image %s\n",outputFile.data());
warn(yyFileName,yyLineNr,
"Warning: could not write output image %s",outputFile.data());
}
}
else
{
warn("Warning: could not open image %s\n",fileName);
warn(yyFileName,yyLineNr,
"Warning: could not open image %s",fileName);
}
}
else if (ambig)
{
warn("Warning: image file name %s is ambigious.\n",fileName);
warn("Possible candidates:\n");
//includeFileList.writeMatches(fileName);
showFileDefMatches(&imageNameDict,fileName);
QCString text;
text.sprintf("Warning: image file name %s is ambigious.\n",fileName);
text+="Possible candidates:\n";
text+=showFileDefMatches(&imageNameDict,fileName);
warn(yyFileName,yyLineNr,text);
}
else
{
result=fileName;
if (result.left(5)!="http:")
{
warn("Warning: image file %s is not found in IMAGE_PATH: "
"assuming external image.\n",fileName);
warn(yyFileName,yyLineNr,
"Warning: image file %s is not found in IMAGE_PATH: "
"assuming external image.",fileName
);
}
}
return result;
...
...
@@ -930,7 +941,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
%x DefineArg
%x DefineEnd
%x Include
%x C
lass
Name
%x C
ompound
Name
%x ClassVar
%x ClassTemplSpec
%x Bases
...
...
@@ -1084,7 +1095,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<*>\x06[^\x06]*\x06 { // new file
if (memberGroupId!=NOGROUP)
{
warn(
"Warning: Missing //@} in file %s\n",yyFileName
);
warn(
yyFileName,yyLineNr,"Warning: Missing //@}"
);
memberGroupId=NOGROUP;
}
yyLineNr= 0 ; // there is always an extra newline at the start of the file
...
...
@@ -1246,8 +1257,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
BEGIN( DocScan );
}
*/
<DocScan>{CMD}"endlink"/[^a-z_A-Z0-9] { warn("Warning: \\endlink without \\link "
"in documentation of %s\n", refName.data());
<DocScan>{CMD}"endlink"/[^a-z_A-Z0-9] { warn(yyFileName,yyLineNr,
"Warning: \\endlink without \\link "
"in documentation."
);
}
<DocScan>{CMD}"addindex"/{BN} {
BEGIN(DocIndexWord);
...
...
@@ -1620,8 +1633,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>{CMD}"endif"/[^a-z_A-Z0-9] {
if (--depthIf<0)
{
warn("Warning: documentation block contains \\endif without "
"matching \\if found in documentation of %s!",refName.data());
warn(yyFileName,yyLineNr,
"Warning: documentation block contains \\endif without "
"matching \\if found in documentation."
);
}
else
{
...
...
@@ -1657,8 +1672,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
else if (!generateLink(*outDoc,className,yytext,TRUE,0))
{
warn(
"Warning: reference to unknown section %s!\n
",yytext);
outDoc->writeBoldString(" unknown reference!");
warn(
yyFileName,yyLineNr,"Warning: reference to unknown section %s!
",yytext);
outDoc->writeBoldString(" unknown reference!
");
}
BEGIN(DocScan);
}
...
...
@@ -1687,8 +1702,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
else if (!generateLink(*outDoc,className,sectionRef,TRUE,text))
{
warn(
"Warning: reference to unknown section %s!\n
",sectionRef.data());
outDoc->writeBoldString("
unknown reference!
");
warn(
yyFileName,yyLineNr,"Warning: reference to unknown section %s!
",sectionRef.data());
outDoc->writeBoldString("
unknown reference!
");
}
BEGIN(DocScan);
}
...
...
@@ -1705,8 +1720,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
else
{
warn(
"Warning: reference to unknown section %s!\n
",sectionRef.data());
outDoc->writeBoldString("
unknown reference!
");
warn(
yyFileName,yyLineNr,"Warning: reference to unknown section %s!
",sectionRef.data());
outDoc->writeBoldString("
unknown reference!
");
}
BEGIN(DocScan);
}
...
...
@@ -1767,10 +1782,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
BEGIN(DocScan);
}
<DocImage>[a-z_A-Z0-9\.\-]+ {
warn(
"Warning: %s is an unsupported output format for \\image\n
",yytext);
warn(
yyFileName,yyLineNr,"Warning: %s is an unsupported output format for \\image
",yytext);
}
<DocImage,DocHtmlImageName,DocLatexImageName>\n {
warn(
"Warning: invalid \\image command found!\n
");
warn(
yyFileName,yyLineNr,"Warning: invalid \\image command found!
");
outDoc->enableAll();
BEGIN(DocScan);
}
...
...
@@ -1780,8 +1795,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
BEGIN( DocCodeBlock );
}
<DocScan>{CMD}"endcode"/[^a-z_A-Z0-9] {
warn("Warning: \\endcode without <PRE> or \\code "
"in the documentation
of %s\n",refName.data()
);
warn(
yyFileName,yyLineNr,
"Warning: \\endcode without <PRE> or \\code "
"in the documentation
."
);
}
<DocScan>{SCOPEMASK}"("[a-z_A-Z0-9,:\<\> \t\*\&]+")" {
generateRef(*outDoc,className,yytext,inSeeBlock);
...
...
@@ -1891,13 +1906,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>"</"{STRONG}{ATTR}">" { outDoc->endBold(); }
<DocScan>"<"{CENTER}{ATTR}">" { outDoc->startCenter(); }
<DocScan>"</"{CENTER}{ATTR}">" { outDoc->endCenter(); }
<DocScan>"<"{TABLE}{ATTR}">" {
startTable();
/*outDoc->startTable();*/ }
<DocScan>"</"{TABLE}{ATTR}">" {
endTable();
/*outDoc->endTable();*/
}
<DocScan>"<"{TABLE}{ATTR}">" { startTable(); }
<DocScan>"</"{TABLE}{ATTR}">" { endTable(); }
<DocScan>"<"{INPUT}{ATTR}">"
<DocScan>"<"{SMALL}{ATTR}">" { outDoc->startSmall(); }
<DocScan>"</"{SMALL}{ATTR}">" { outDoc->endSmall(); }
...
...
@@ -1928,8 +1938,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
BEGIN( DocCodeBlock );
}
<DocScan>"</"{PRE}{ATTR}">" {
warn("Warning: </PRE> without <PRE> or \\code"
"in the documentation of %s\n",refName.data());
warn(yyFileName,yyLineNr,
"Warning: </PRE> without <PRE> or \\code"
"in the documentation."
);
}
<DocScan>"<"{SUB}{ATTR}">" { outDoc->startSubscript(); }
<DocScan>"</"{SUB}{ATTR}">" { outDoc->endSubscript(); }
...
...
@@ -1945,7 +1957,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>"</"{OL}{ATTR}">" {
if (currentListIndentLevel<=0)
{
warn("Warning: more </ol> tags than <ol> tags in the documentation of %s\n",yyFileName);
warn(yyFileName,yyLineNr,
"Warning: more </ol> tags than <ol> tags in the documentation."
);
}
else
{
...
...
@@ -1959,7 +1973,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>"</"{UL}{ATTR}">" {
if (currentListIndentLevel<=0)
{
warn("Warning: more </ul> tags than <ul> tags in the documentation of %s\n",yyFileName);
warn(yyFileName,yyLineNr,
"Warning: more </ul> tags than <ul> tags in the documentation."
);
}
else
{
...
...
@@ -1980,7 +1996,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>"</"{DL}{ATTR}">" {
if (currentListIndentLevel<=0)
{
warn("Warning: more </dl> tags than <dl> tags in the documentation of %s\n",yyFileName);
warn(yyFileName,yyLineNr,
"Warning: more </dl> tags than <dl> tags in the documentation."
);
}
else
{
...
...
@@ -2278,7 +2296,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( C
lass
Name );
BEGIN( C
ompound
Name );
}
<FindMembers>{B}*"module"{BN}+ {
isTypedef=FALSE;
...
...
@@ -2288,7 +2306,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( C
lass
Name );
BEGIN( C
ompound
Name );
}
<FindMembers>{B}*"interface"{BN}+ { // M$/Corba IDL interface
isTypedef=FALSE;
...
...
@@ -2299,7 +2317,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( C
lass
Name );
BEGIN( C
ompound
Name );
}
<FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception
isTypedef=FALSE;
...
...
@@ -2310,7 +2328,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount();
BEGIN( C
lass
Name );
BEGIN( C
ompound
Name );
}
<FindMembers>{B}*(("typedef"{BN}+)?)"class"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
...
...
@@ -2321,7 +2339,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount() ;
BEGIN( C
lass
Name ) ;
BEGIN( C
ompound
Name ) ;
}
<FindMembers>{B}*(("typedef"{BN}+)?)"struct"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
...
...
@@ -2332,7 +2350,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount() ;
BEGIN( C
lass
Name ) ;
BEGIN( C
ompound
Name ) ;
}
<FindMembers>{B}*(("typedef"{BN}+)?)"union"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
...
...
@@ -2343,7 +2361,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount() ;
BEGIN( C
lass
Name ) ;
BEGIN( C
ompound
Name ) ;
}
<FindMembers>{B}*(("typedef"{BN}+)?)"enum"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
...
...
@@ -2354,7 +2372,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
current->bodyLine = yyLineNr;
lineCount() ;
BEGIN( C
lass
Name ) ;
BEGIN( C
ompound
Name ) ;
}
<Operator>"("{BN}*")"{BN}*/"(" {
lineCount();
...
...
@@ -2689,15 +2707,17 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<FindMembers>"//@{"|"/*@{*/" {
if (memberGroupId!=NOGROUP)
{
warn("Warning: ignoring nested member group "
"at line %d of %s. Previous command was found at line %d\n",
yyLineNr,yyFileName,lastMemberGroupLine);
warn(yyFileName,yyLineNr,"Warning: ignoring nested member group. "
"Previous command was found at line %d.",lastMemberGroupLine);
}
else if (memberGroupHeader.isEmpty())
{
warn("Warning: member group has empty header "
"at line %d of %s.\n",yyLineNr,yyFileName);
memberGroupHeader="[No header specified!]";
//warn("Warning: member group does not have a header "
// "at line %d of %s.\n",yyLineNr,yyFileName);
memberGroupHeader="[NOHEADER]";
memberGroupId = newMemberGroupId();
current->mGrpId = memberGroupId;
lastMemberGroupLine = yyLineNr;
}
else
{
...
...
@@ -2709,8 +2729,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<FindMembers>"//@}"|"/*@}*/" {
if (memberGroupId==NOGROUP)
{
warn(
"Warning: end of member group without matching begin "
"at line %d of %s.\n",yyLineNr,yyFileName
);
warn(
yyFileName,yyLineNr,
"Warning: end of member group without matching begin."
);
}
else
{
...
...
@@ -3708,7 +3728,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<SkipString>. {
//addToBodyCond(yytext);
}
<Bases,C
lass
Name>";" {
<Bases,C
ompound
Name>";" {
current->section = Entry::EMPTY_SEC ;
current->type.resize(0) ;
current->name.resize(0) ;
...
...
@@ -3716,7 +3736,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->argList->clear();
BEGIN( FindMembers ) ;
}
<C
lass
Name>{SCOPENAME}{BN}*/"<" {
<C
ompound
Name>{SCOPENAME}{BN}*/"<" {
sharpCount = 0;
current->name = yytext ;
lineCount();
...
...
@@ -3739,7 +3759,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<ClassTemplSpec>. {
current->name += yytext;
}
<C
lass
Name>{SCOPENAME} {
<C
ompound
Name>{SCOPENAME} {
current->name = yytext ;
lineCount();
BEGIN( ClassVar );
...
...
@@ -3790,7 +3810,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
BEGIN( FindMembers );
}
<C
lassName,ClassVar>{B}*"{"{B}*
{ current->fileName = yyFileName ;
<C
ompoundName,ClassVar>{B}*"{"{B}*
{ current->fileName = yyFileName ;
current->startLine = yyLineNr ;
current->name = removeRedundantWhiteSpace(current->name);
if (current->name.isEmpty() && !isTypedef) // anonymous compound
...
...
@@ -4014,7 +4034,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
BEGIN( tmpDocType );
}
<JavaDoc>"<"{TABLE}{ATTR}">" {
current->doc+=yytext;
//
current->doc+=yytext;
int i;
for (i=yyleng-1;i>=0;i--)
{
...
...
@@ -4131,6 +4151,15 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
current->startLine = yyLineNr;
BEGIN( ExampleDocArg1 );
}
<LineDoc>{CMD}"name"[^\n]*\n {
memberGroupHeader=&yytext[5];
memberGroupHeader=memberGroupHeader.stripWhiteSpace();
current->section = Entry::MEMBERGRP_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
yyLineNr++;
BEGIN( lastDocContext );
}
<Doc,JavaDoc>{CMD}"name"{B}+ {
//printf("--> mgroup found!\n");
current->section = Entry::MEMBERGRP_SEC;
...
...
@@ -4160,8 +4189,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<NameSpaceDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<NameSpaceDocArg1>"\n" {
warn("Warning: missing argument after "
"\\namespace at line %d of %s.\n",yyLineNr,yyFileName);
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\namespace."
);
yyLineNr++;
}
<ClassDocArg1>{SCOPENAME}/"<" {
...
...
@@ -4185,8 +4216,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<ClassDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<ClassDocArg1>"\n" {
warn("Warning: missing argument after "
"\\class at line %d of %s.\n",yyLineNr,yyFileName);
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\class."
);
yyLineNr++;
}
...
...
@@ -4198,8 +4231,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<GroupDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<GroupDocArg1>"\n" {
warn("Warning: missing argument after "
"\\defgroup at line %d of %s.\n",yyLineNr,yyFileName);
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\defgroup."
);
yyLineNr++;
BEGIN( Doc );
}
...
...
@@ -4252,8 +4287,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<PageDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<PageDocArg1>"\n" {
warn("Warning: missing argument after "
"\\page at line %d of %s.\n",yyLineNr,yyFileName);
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\page."
);
yyLineNr++;
BEGIN( Doc );
}
...
...
@@ -4272,8 +4309,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<EnumDocArg1>"\\"{B}*"\n" { yyLineNr++; }
<EnumDocArg1>"\n" {
warn("Warning: missing argument after "
"\\enum at line %d of %s.\n",yyLineNr,yyFileName);
warn(yyFileName,yyLineNr,
"Warning: missing argument after \\enum."
);
yyLineNr++;
BEGIN( Doc );
}
...
...
@@ -4507,6 +4545,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
lineCount();
BEGIN( GroupName );
}
<ClassDoc,LineDoc,Doc,JavaDoc>{CMD}"nosubgrouping"/[^a-z_A-Z0-9] {
current->subGrouping = FALSE;
}
<GroupName>{ID} {
current->groups->append(
new QCString(yytext)
...
...
@@ -4696,9 +4737,10 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs,GroupName>"*/" {
current->doc += "\n\n";
err("Warning: unexpected end of "
"documentation block found in "
"file %s at line %d\n",yyFileName,yyLineNr);
warn(yyFileName,yyLineNr,
"Warning: unexpected end of "
"documentation block."
);
BEGIN( lastDocContext );
}
<FileDocArg1>"*/" {
...
...
@@ -4905,27 +4947,13 @@ void parseDocument(OutputList &ol,const QCString &docString)
if (inBlock()) endBlock();
if (currentListIndentLevel>0)
{
if (!refName.isEmpty())
{
warn("Warning: Documentation block of %s ended in the middle "
"of a list (indent level %d)!\n",refName.data(),
currentListIndentLevel);
}
else if (!exampleName.isEmpty())
{
warn("Warning: Documentation block of %s ended in the middle "
"of a list (indent level %d)!\n",exampleName.data(),
currentListIndentLevel);
}
else
{
warn("Warning: Documentation block ended in the middle "
"of a list (indent level %d)!\n",currentListIndentLevel);
}
warn(yyFileName,yyLineNr,"Warning: Documentation ended in the middle "
"of a list (indent level %d)!",currentListIndentLevel);
}
if (depthIf!=0)
{
warn("Warning: Documentation block contains \\if without matching \\endif: %d\n",depthIf);
warn(yyFileName,yyLineNr,"Warning: Documentation block contains \\if "
"without matching \\endif: nesting level is %d",depthIf);
}
if (!tableStack.isEmpty())
{
...
...
@@ -4933,7 +4961,9 @@ void parseDocument(OutputList &ol,const QCString &docString)
}
if (insideVerbatim)
{
warn("Warning: file ended inside a \\verbatim block!\n");
warn(yyFileName,yyLineNr,
"Warning: file ended inside a \\verbatim block!"
);
}
ol+=*outDoc;
delete outDoc; outDoc=0;
...
...
@@ -4942,27 +4972,17 @@ void parseDocument(OutputList &ol,const QCString &docString)
//----------------------------------------------------------------------------
void parseDoc(OutputList &ol,const char *
clNam
e,
const char *memName,const QCString &docString)
void parseDoc(OutputList &ol,const char *
fileName,int startLin
e,
const char *
clName,const char *
memName,const QCString &docString)
{
//printf("
Doc---------\n%s\n---------\n",docString.data()
);
//printf("
parseDoc(file=`%s',line=%d)\n",fileName,startLine
);
initParser();
initParseCodeContext();
exampleDoc=FALSE; // do not cross reference with member docs
className=clName;
memberName=memName;
if (memName)
{
refName=className+"::"+memberName;
}
else if (clName)
{
refName=className;
}
else
{
refName="<unknown>";
}
strcpy(yyFileName,fileName);
yyLineNr = startLine;
parseDocument(ol,docString);
}
...
...
@@ -4992,7 +5012,7 @@ void parseExample(OutputList &ol,const QCString &docString,
initParseCodeContext();
exampleDoc=TRUE; // cross reference with member docs
exampleName=fileName;
refName="example "+exampleName
;
strcpy(yyFileName,fileName)
;
parseDocument(ol,docString);
}
...
...
src/tag.l
View file @
f38608d4
...
...
@@ -54,7 +54,7 @@ static void addClass(const char *name,const char *fileName)
//printf("adding class %s\n",name);
if (name!=0 && strlen(name)>0 && classDict[name]==0)
{
cd = new ClassDef(name,ClassDef::Class,tagName,fileName);
cd = new ClassDef(
fileName,1,
name,ClassDef::Class,tagName,fileName);
fd = 0;
nd = 0;
classList.inSort(cd);
...
...
@@ -92,7 +92,7 @@ static void addNamespace(const char *name)
// since namespace are open, this need not to be the case. As a result
// namespace may contain members that are located in
// different namespaces!
nd = new NamespaceDef(name,tagName);
nd = new NamespaceDef(
"<tagfile>",1,
name,tagName);
namespaceList.inSort(nd);
namespaceDict.insert(name,nd);
}
...
...
@@ -110,7 +110,8 @@ static void addMember(const char *name,const char *anchor,const char *args)
MemberDef *md;
ArgumentList *argList = new ArgumentList;
stringToArgumentList(args,argList);
md=new MemberDef(0,name,args,0,Public,Normal,FALSE,FALSE,
md=new MemberDef("<tagfile>",1,
0,name,args,0,Public,Normal,FALSE,FALSE,
MemberDef::Function,0,argList);
delete argList;
md->setAnchor(anchor);
...
...
src/translator.h
View file @
f38608d4
...
...
@@ -793,7 +793,7 @@ class Translator
/*! Text shown before a multi-line variable/enum initialization */
virtual
QCString
trInitialValue
()
{
return
"Initial
value
:"
;
return
"Initial
izer
:"
;
}
/*! Text used the source code in the file index */
virtual
QCString
trCode
()
...
...
src/util.cpp
View file @
f38608d4
...
...
@@ -221,7 +221,7 @@ ClassDef *getResolvedClass(const char *name)
}
if
(
count
==
10
)
{
warn
(
"Warning: possible recursive typedef dependency detected for %s!
\n
"
,
name
);
warn
_cont
(
"Warning: possible recursive typedef dependency detected for %s!
\n
"
,
name
);
return
classDict
[
name
];
}
else
...
...
@@ -734,7 +734,7 @@ QCString fileToString(const char *name)
QFileInfo
fi
(
name
);
if
(
!
fi
.
exists
()
||
!
fi
.
isFile
())
{
warn
(
"Error: file `%s' not found
\n
"
,
name
);
err
(
"Error: file `%s' not found
\n
"
,
name
);
return
""
;
}
f
.
setName
(
name
);
...
...
@@ -742,7 +742,7 @@ QCString fileToString(const char *name)
}
if
(
!
fileOpened
)
{
warn
(
"Error: cannot open file `%s' for reading
\n
"
,
name
);
err
(
"Error: cannot open file `%s' for reading
\n
"
,
name
);
return
""
;
}
int
fsize
=
f
.
size
();
...
...
@@ -2086,8 +2086,9 @@ FileDef *findFileDef(const FileNameDict *fnDict,const char *n,bool &ambig)
//----------------------------------------------------------------------
void
showFileDefMatches
(
const
FileNameDict
*
fnDict
,
const
char
*
n
)
QCString
showFileDefMatches
(
const
FileNameDict
*
fnDict
,
const
char
*
n
)
{
QCString
result
;
QCString
name
=
n
;
QCString
path
;
int
slashPos
=
QMAX
(
name
.
findRev
(
'/'
),
name
.
findRev
(
'\\'
));
...
...
@@ -2104,11 +2105,12 @@ void showFileDefMatches(const FileNameDict *fnDict,const char *n)
{
if
(
path
.
isEmpty
()
||
fd
->
getPath
().
right
(
path
.
length
())
==
path
)
{
msg
(
" %s
\n
"
,
fd
->
absFilePath
().
data
()
);
result
+=
" %s
\n
"
,
fd
->
absFilePath
().
data
(
);
}
fd
=
fn
->
next
();
}
}
return
result
;
}
//----------------------------------------------------------------------
...
...
@@ -2281,11 +2283,15 @@ QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &te
if
(
!
templ
.
isEmpty
()
&&
scope
.
find
(
'<'
)
==-
1
)
{
int
si
,
pi
=
0
;
while
((
si
=
scope
.
find
(
"::"
,
pi
))
!=-
1
&&
!
getClass
(
scope
.
left
(
si
)
+
templ
)
&&
!
getClass
(
scope
.
left
(
si
)))
{
//printf("Tried `%s'\n",(scope.left(si)+templ).data());
pi
=
si
+
2
;
}
ClassDef
*
cd
=
0
;
while
(
(
si
=
scope
.
find
(
"::"
,
pi
))
!=-
1
&&
!
getClass
(
scope
.
left
(
si
)
+
templ
)
&&
((
cd
=
getClass
(
scope
.
left
(
si
)))
==
0
||
cd
->
templateArguments
()
==
0
)
)
{
//printf("Tried `%s'\n",(scope.left(si)+templ).data());
pi
=
si
+
2
;
}
if
(
si
==-
1
)
// not nested => append template specifier
{
result
+=
templ
;
...
...
src/util.h
View file @
f38608d4
...
...
@@ -65,7 +65,7 @@ extern ClassDef *getClass(const char *key);
extern
ClassDef
*
getResolvedClass
(
const
char
*
key
);
extern
FileDef
*
findFileDef
(
const
FileNameDict
*
fnDict
,
const
char
*
n
,
bool
&
ambig
);
extern
void
showFileDefMatches
(
const
FileNameDict
*
fnDict
,
const
char
*
n
);
extern
QCString
showFileDefMatches
(
const
FileNameDict
*
fnDict
,
const
char
*
n
);
extern
int
guessSection
(
const
char
*
name
);
extern
bool
isId
(
char
c
);
extern
QCString
removeRedundantWhiteSpace
(
const
QCString
&
s
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment