Warning fixes. Code cleanup. Whitespaces and tabs removed.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27857 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -191,17 +191,17 @@ public:
|
|||||||
bool FlushAll()
|
bool FlushAll()
|
||||||
{
|
{
|
||||||
if ( m_text.empty() )
|
if ( m_text.empty() )
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
if ( !Write(m_text) ) {
|
if ( !Write(m_text) ) {
|
||||||
wxLogError("Failed to output generated documentation.");
|
wxLogError("Failed to output generated documentation.");
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_text.clear();
|
m_text.clear();
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -223,19 +223,19 @@ public:
|
|||||||
// already have)
|
// already have)
|
||||||
bool AddNamesFromFile(const wxString& filename);
|
bool AddNamesFromFile(const wxString& filename);
|
||||||
|
|
||||||
// return TRUE if we ignore this function
|
// return true if we ignore this function
|
||||||
bool IgnoreMethod(const wxString& classname,
|
bool IgnoreMethod(const wxString& classname,
|
||||||
const wxString& funcname) const
|
const wxString& funcname) const
|
||||||
{
|
{
|
||||||
if ( IgnoreClass(classname) )
|
if ( IgnoreClass(classname) )
|
||||||
return TRUE;
|
return true;
|
||||||
|
|
||||||
IgnoreListEntry ignore(classname, funcname);
|
IgnoreListEntry ignore(classname, funcname);
|
||||||
|
|
||||||
return m_ignore.Index(&ignore) != wxNOT_FOUND;
|
return m_ignore.Index(&ignore) != wxNOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
// return TRUE if we ignore this class entirely
|
// return true if we ignore this class entirely
|
||||||
bool IgnoreClass(const wxString& classname) const
|
bool IgnoreClass(const wxString& classname) const
|
||||||
{
|
{
|
||||||
IgnoreListEntry ignore(classname, "");
|
IgnoreListEntry ignore(classname, "");
|
||||||
@@ -321,7 +321,7 @@ protected:
|
|||||||
wxTeXFile m_file; // file we're writing to now
|
wxTeXFile m_file; // file we're writing to now
|
||||||
|
|
||||||
// state variables
|
// state variables
|
||||||
bool m_inClass, // TRUE after file successfully opened
|
bool m_inClass, // true after file successfully opened
|
||||||
m_inTypesSection, // enums & typedefs go there
|
m_inTypesSection, // enums & typedefs go there
|
||||||
m_inMethodSection, // functions go here
|
m_inMethodSection, // functions go here
|
||||||
m_isFirstParam; // first parameter of current function?
|
m_isFirstParam; // first parameter of current function?
|
||||||
@@ -367,10 +367,10 @@ public:
|
|||||||
DocManager(bool checkParamNames);
|
DocManager(bool checkParamNames);
|
||||||
~DocManager();
|
~DocManager();
|
||||||
|
|
||||||
// returns FALSE on failure
|
// returns false on failure
|
||||||
bool ParseTeXFile(const wxString& filename);
|
bool ParseTeXFile(const wxString& filename);
|
||||||
|
|
||||||
// returns FALSE if there were any differences
|
// returns false if there were any differences
|
||||||
bool DumpDifferences(spContext *ctxTop) const;
|
bool DumpDifferences(spContext *ctxTop) const;
|
||||||
|
|
||||||
// get our `ignore' object
|
// get our `ignore' object
|
||||||
@@ -397,12 +397,12 @@ protected:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// skips characters until the next 'c' in '*pp' unless it ends before in
|
// skips characters until the next 'c' in '*pp' unless it ends before in
|
||||||
// which case FALSE is returned and pp points to '\0', otherwise TRUE is
|
// which case false is returned and pp points to '\0', otherwise true is
|
||||||
// returned and pp points to 'c'
|
// returned and pp points to 'c'
|
||||||
bool SkipUntil(const char **pp, char c);
|
bool SkipUntil(const char **pp, char c);
|
||||||
|
|
||||||
// the same as SkipUntil() but only spaces are skipped: on first non space
|
// the same as SkipUntil() but only spaces are skipped: on first non space
|
||||||
// character different from 'c' the function stops and returns FALSE
|
// character different from 'c' the function stops and returns false
|
||||||
bool SkipSpaceUntil(const char **pp, char c);
|
bool SkipSpaceUntil(const char **pp, char c);
|
||||||
|
|
||||||
// extract the string between {} and modify '*pp' to point at the
|
// extract the string between {} and modify '*pp' to point at the
|
||||||
@@ -463,7 +463,7 @@ protected:
|
|||||||
};
|
};
|
||||||
|
|
||||||
public: // FIXME: macro requires it
|
public: // FIXME: macro requires it
|
||||||
WX_DEFINE_ARRAY(ParamInfo *, ArrayParamInfo);
|
WX_DEFINE_ARRAY_PTR(ParamInfo *, ArrayParamInfo);
|
||||||
|
|
||||||
// info about a function
|
// info about a function
|
||||||
struct MethodInfo
|
struct MethodInfo
|
||||||
@@ -505,8 +505,8 @@ public: // FIXME: macro requires it
|
|||||||
ArrayParamInfo m_params;
|
ArrayParamInfo m_params;
|
||||||
};
|
};
|
||||||
|
|
||||||
WX_DEFINE_ARRAY(MethodInfo *, ArrayMethodInfo);
|
WX_DEFINE_ARRAY_PTR(MethodInfo *, ArrayMethodInfo);
|
||||||
WX_DEFINE_ARRAY(ArrayMethodInfo *, ArrayMethodInfos);
|
WX_DEFINE_ARRAY_PTR(ArrayMethodInfo *, ArrayMethodInfos);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// first array contains the names of all classes we found, the second has a
|
// first array contains the names of all classes we found, the second has a
|
||||||
@@ -594,8 +594,8 @@ int main(int argc, char **argv)
|
|||||||
wxArrayString filesH, filesTeX;
|
wxArrayString filesH, filesTeX;
|
||||||
wxString directoryOut, // directory for 'dmup' output
|
wxString directoryOut, // directory for 'dmup' output
|
||||||
ignoreFile; // file with classes/functions to ignore
|
ignoreFile; // file with classes/functions to ignore
|
||||||
bool overwrite = FALSE, // overwrite existing files during 'dump'?
|
bool overwrite = false, // overwrite existing files during 'dump'?
|
||||||
paramNames = FALSE; // check param names during 'diff'?
|
paramNames = false; // check param names during 'diff'?
|
||||||
|
|
||||||
for ( int current = 1; current < argc ; current++ ) {
|
for ( int current = 1; current < argc ; current++ ) {
|
||||||
// all options have one letter
|
// all options have one letter
|
||||||
@@ -609,7 +609,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
case 'q':
|
case 'q':
|
||||||
// be quiet
|
// be quiet
|
||||||
wxLog::GetActiveTarget()->SetVerbose(FALSE);
|
wxLog::GetActiveTarget()->SetVerbose(false);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'H':
|
case 'H':
|
||||||
@@ -642,7 +642,7 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
paramNames = TRUE;
|
paramNames = true;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
@@ -652,7 +652,7 @@ int main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
overwrite = TRUE;
|
overwrite = true;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case 'o':
|
case 'o':
|
||||||
@@ -762,7 +762,7 @@ int main(int argc, char **argv)
|
|||||||
wxLogError("Can't complete diff.");
|
wxLogError("Can't complete diff.");
|
||||||
|
|
||||||
// failure
|
// failure
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
DocManager docman(paramNames);
|
DocManager docman(paramNames);
|
||||||
@@ -802,7 +802,7 @@ void HelpGenVisitor::Reset()
|
|||||||
{
|
{
|
||||||
m_inClass =
|
m_inClass =
|
||||||
m_inTypesSection =
|
m_inTypesSection =
|
||||||
m_inMethodSection = FALSE;
|
m_inMethodSection = false;
|
||||||
|
|
||||||
m_classname =
|
m_classname =
|
||||||
m_funcName =
|
m_funcName =
|
||||||
@@ -839,7 +839,7 @@ void HelpGenVisitor::InsertEnumDocs()
|
|||||||
void HelpGenVisitor::InsertDataStructuresHeader()
|
void HelpGenVisitor::InsertDataStructuresHeader()
|
||||||
{
|
{
|
||||||
if ( !m_inTypesSection ) {
|
if ( !m_inTypesSection ) {
|
||||||
m_inTypesSection = TRUE;
|
m_inTypesSection = true;
|
||||||
|
|
||||||
m_file.WriteVerbatim("\\wxheading{Data structures}\n\n");
|
m_file.WriteVerbatim("\\wxheading{Data structures}\n\n");
|
||||||
}
|
}
|
||||||
@@ -848,7 +848,7 @@ void HelpGenVisitor::InsertDataStructuresHeader()
|
|||||||
void HelpGenVisitor::InsertMethodsHeader()
|
void HelpGenVisitor::InsertMethodsHeader()
|
||||||
{
|
{
|
||||||
if ( !m_inMethodSection ) {
|
if ( !m_inMethodSection ) {
|
||||||
m_inMethodSection = TRUE;
|
m_inMethodSection = true;
|
||||||
|
|
||||||
m_file.WriteVerbatim( "\\latexignore{\\rtfignore{\\wxheading{Members}}}\n\n");
|
m_file.WriteVerbatim( "\\latexignore{\\rtfignore{\\wxheading{Members}}}\n\n");
|
||||||
}
|
}
|
||||||
@@ -876,40 +876,42 @@ void HelpGenVisitor::CloseFunction()
|
|||||||
|
|
||||||
void HelpGenVisitor::CloseClass()
|
void HelpGenVisitor::CloseClass()
|
||||||
{
|
{
|
||||||
CloseFunction();
|
CloseFunction();
|
||||||
|
|
||||||
if ( m_inClass ) {
|
if ( m_inClass )
|
||||||
|
{
|
||||||
size_t count = m_arrayFuncDocs.GetCount();
|
size_t count = m_arrayFuncDocs.GetCount();
|
||||||
if ( count ) {
|
if ( count )
|
||||||
size_t n;
|
{
|
||||||
|
size_t n;
|
||||||
FunctionDocEntry::classname = m_classname;
|
FunctionDocEntry::classname = m_classname;
|
||||||
|
|
||||||
m_arrayFuncDocs.Sort(FunctionDocEntry::Compare);
|
m_arrayFuncDocs.Sort(FunctionDocEntry::Compare);
|
||||||
|
|
||||||
// Now examine each first line and if it's been seen, cut it
|
// Now examine each first line and if it's been seen, cut it
|
||||||
// off (it's a duplicate \membersection)
|
// off (it's a duplicate \membersection)
|
||||||
wxHashTable membersections(wxKEY_STRING);
|
wxHashTable membersections(wxKEY_STRING);
|
||||||
|
|
||||||
for ( n = 0; n < count; n++ )
|
for ( n = 0; n < count; n++ )
|
||||||
{
|
{
|
||||||
wxString section(m_arrayFuncDocs[n].text);
|
wxString section(m_arrayFuncDocs[n].text);
|
||||||
|
|
||||||
// Strip leading whitespace
|
// Strip leading whitespace
|
||||||
int pos = section.Find("\\membersection");
|
int pos = section.Find("\\membersection");
|
||||||
if (pos > -1)
|
if (pos > -1)
|
||||||
{
|
{
|
||||||
section = section.Mid(pos);
|
section = section.Mid(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString ms(section.BeforeFirst(wxT('\n')));
|
wxString ms(section.BeforeFirst(wxT('\n')));
|
||||||
if (membersections.Get(ms))
|
if (membersections.Get(ms))
|
||||||
{
|
{
|
||||||
m_arrayFuncDocs[n].text = section.AfterFirst(wxT('\n'));
|
m_arrayFuncDocs[n].text = section.AfterFirst(wxT('\n'));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
membersections.Put(ms, & membersections);
|
membersections.Put(ms, & membersections);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( n = 0; n < count; n++ ) {
|
for ( n = 0; n < count; n++ ) {
|
||||||
@@ -919,10 +921,10 @@ void HelpGenVisitor::CloseClass()
|
|||||||
m_arrayFuncDocs.Empty();
|
m_arrayFuncDocs.Empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_inClass = FALSE;
|
m_inClass = false;
|
||||||
m_classname.clear();
|
m_classname.clear();
|
||||||
}
|
}
|
||||||
m_file.FlushAll();
|
m_file.FlushAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpGenVisitor::EndVisit()
|
void HelpGenVisitor::EndVisit()
|
||||||
@@ -934,11 +936,11 @@ void HelpGenVisitor::EndVisit()
|
|||||||
m_fileHeader.Empty();
|
m_fileHeader.Empty();
|
||||||
|
|
||||||
m_file.FlushAll();
|
m_file.FlushAll();
|
||||||
if (m_file.IsOpened())
|
if (m_file.IsOpened())
|
||||||
{
|
{
|
||||||
m_file.Flush();
|
m_file.Flush();
|
||||||
m_file.Close();
|
m_file.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxLogVerbose("%s: finished generating for the current file.",
|
wxLogVerbose("%s: finished generating for the current file.",
|
||||||
GetCurrentTime("%H:%M:%S"));
|
GetCurrentTime("%H:%M:%S"));
|
||||||
@@ -955,11 +957,11 @@ void HelpGenVisitor::VisitClass( spClass& cl )
|
|||||||
{
|
{
|
||||||
CloseClass();
|
CloseClass();
|
||||||
|
|
||||||
if (m_file.IsOpened())
|
if (m_file.IsOpened())
|
||||||
{
|
{
|
||||||
m_file.Flush();
|
m_file.Flush();
|
||||||
m_file.Close();
|
m_file.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString name = cl.GetName();
|
wxString name = cl.GetName();
|
||||||
|
|
||||||
@@ -999,7 +1001,7 @@ void HelpGenVisitor::VisitClass( spClass& cl )
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_inMethodSection =
|
m_inMethodSection =
|
||||||
m_inTypesSection = FALSE;
|
m_inTypesSection = false;
|
||||||
|
|
||||||
wxLogInfo("Created new file '%s' for class '%s'.",
|
wxLogInfo("Created new file '%s' for class '%s'.",
|
||||||
filename.c_str(), name.c_str());
|
filename.c_str(), name.c_str());
|
||||||
@@ -1103,7 +1105,7 @@ void HelpGenVisitor::VisitClass( spClass& cl )
|
|||||||
derived << "No base class";
|
derived << "No base class";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bool first = TRUE;
|
bool first = true;
|
||||||
for ( StrListT::const_iterator i = baseClasses.begin();
|
for ( StrListT::const_iterator i = baseClasses.begin();
|
||||||
i != baseClasses.end();
|
i != baseClasses.end();
|
||||||
i++ ) {
|
i++ ) {
|
||||||
@@ -1112,7 +1114,7 @@ void HelpGenVisitor::VisitClass( spClass& cl )
|
|||||||
derived << "\\\\\n";
|
derived << "\\\\\n";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
first = FALSE;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString baseclass = *i;
|
wxString baseclass = *i;
|
||||||
@@ -1136,7 +1138,7 @@ void HelpGenVisitor::VisitClass( spClass& cl )
|
|||||||
InsertTypedefDocs();
|
InsertTypedefDocs();
|
||||||
InsertEnumDocs();
|
InsertEnumDocs();
|
||||||
|
|
||||||
//m_file.Flush();
|
//m_file.Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpGenVisitor::VisitEnumeration( spEnumeration& en )
|
void HelpGenVisitor::VisitEnumeration( spEnumeration& en )
|
||||||
@@ -1269,7 +1271,7 @@ void HelpGenVisitor::VisitOperation( spOperation& op )
|
|||||||
|
|
||||||
// save state info
|
// save state info
|
||||||
m_funcName = funcname;
|
m_funcName = funcname;
|
||||||
m_isFirstParam = TRUE;
|
m_isFirstParam = true;
|
||||||
|
|
||||||
m_textStoredFunctionComment = GetAllComments(op);
|
m_textStoredFunctionComment = GetAllComments(op);
|
||||||
|
|
||||||
@@ -1283,19 +1285,19 @@ void HelpGenVisitor::VisitOperation( spOperation& op )
|
|||||||
funcname = dtor;
|
funcname = dtor;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_textFunc.Printf("\n"
|
m_textFunc.Printf("\n"
|
||||||
"\\membersection{%s::%s}\\label{%s}\n",
|
"\\membersection{%s::%s}\\label{%s}\n",
|
||||||
m_classname.c_str(), funcname.c_str(),
|
m_classname.c_str(), funcname.c_str(),
|
||||||
MakeLabel(m_classname, funcname).c_str());
|
MakeLabel(m_classname, funcname).c_str());
|
||||||
|
|
||||||
wxString func;
|
wxString func;
|
||||||
func.Printf("\n"
|
func.Printf("\n"
|
||||||
"\\%sfunc{%s%s}{%s}{",
|
"\\%sfunc{%s%s}{%s}{",
|
||||||
op.mIsConstant ? "const" : "",
|
op.mIsConstant ? "const" : "",
|
||||||
op.mIsVirtual ? "virtual " : "",
|
op.mIsVirtual ? "virtual " : "",
|
||||||
op.mRetType.c_str(),
|
op.mRetType.c_str(),
|
||||||
funcname.c_str());
|
funcname.c_str());
|
||||||
m_textFunc += func;
|
m_textFunc += func;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HelpGenVisitor::VisitParameter( spParameter& param )
|
void HelpGenVisitor::VisitParameter( spParameter& param )
|
||||||
@@ -1304,7 +1306,7 @@ void HelpGenVisitor::VisitParameter( spParameter& param )
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if ( m_isFirstParam ) {
|
if ( m_isFirstParam ) {
|
||||||
m_isFirstParam = FALSE;
|
m_isFirstParam = false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
m_textFunc << ", ";
|
m_textFunc << ", ";
|
||||||
@@ -1407,11 +1409,11 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
|
|
||||||
wxFile file(m_filename, wxFile::read);
|
wxFile file(m_filename, wxFile::read);
|
||||||
if ( !file.IsOpened() )
|
if ( !file.IsOpened() )
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
off_t len = file.Length();
|
off_t len = file.Length();
|
||||||
if ( len == wxInvalidOffset )
|
if ( len == wxInvalidOffset )
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
char *buf = new char[len + 1];
|
char *buf = new char[len + 1];
|
||||||
buf[len] = '\0';
|
buf[len] = '\0';
|
||||||
@@ -1419,7 +1421,7 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
if ( file.Read(buf, len) == wxInvalidOffset ) {
|
if ( file.Read(buf, len) == wxInvalidOffset ) {
|
||||||
delete [] buf;
|
delete [] buf;
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// reinit everything
|
// reinit everything
|
||||||
@@ -1525,7 +1527,7 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
TeXUnfilter(&returnType);
|
TeXUnfilter(&returnType);
|
||||||
|
|
||||||
current++;
|
current++;
|
||||||
if ( !SkipSpaceUntil(¤t, '{') ) {
|
if ( !SkipSpaceUntil(¤t, '{') ) {
|
||||||
wxLogWarning("file %s(%d): '{' expected after return type",
|
wxLogWarning("file %s(%d): '{' expected after return type",
|
||||||
m_filename.c_str(), m_line);
|
m_filename.c_str(), m_line);
|
||||||
|
|
||||||
@@ -1545,8 +1547,8 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
current = funcEnd + 1;
|
current = funcEnd + 1;
|
||||||
|
|
||||||
// trim spaces from both sides
|
// trim spaces from both sides
|
||||||
funcName.Trim(FALSE);
|
funcName.Trim(false);
|
||||||
funcName.Trim(TRUE);
|
funcName.Trim(true);
|
||||||
|
|
||||||
// special cases: '$...$' may be used for LaTeX inline math, remove the
|
// special cases: '$...$' may be used for LaTeX inline math, remove the
|
||||||
// '$'s
|
// '$'s
|
||||||
@@ -1597,7 +1599,7 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
|
|
||||||
wxArrayString paramNames, paramTypes, paramValues;
|
wxArrayString paramNames, paramTypes, paramValues;
|
||||||
|
|
||||||
bool isVararg = FALSE;
|
bool isVararg = false;
|
||||||
|
|
||||||
current++; // skip '\\'
|
current++; // skip '\\'
|
||||||
lenMatch = TryMatch(current, "void");
|
lenMatch = TryMatch(current, "void");
|
||||||
@@ -1629,7 +1631,7 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
// vararg function?
|
// vararg function?
|
||||||
wxString paramText = ExtractStringBetweenBraces(¤t);
|
wxString paramText = ExtractStringBetweenBraces(¤t);
|
||||||
if ( paramText == "..." ) {
|
if ( paramText == "..." ) {
|
||||||
isVararg = TRUE;
|
isVararg = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
wxLogWarning("Parameters of '%s::%s' are in "
|
wxLogWarning("Parameters of '%s::%s' are in "
|
||||||
@@ -1715,20 +1717,20 @@ bool DocManager::ParseTeXFile(const wxString& filename)
|
|||||||
wxLogVerbose("%s: finished parsing doc file '%s'.\n",
|
wxLogVerbose("%s: finished parsing doc file '%s'.\n",
|
||||||
GetCurrentTime("%H:%M:%S"), m_filename.c_str());
|
GetCurrentTime("%H:%M:%S"), m_filename.c_str());
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DocManager::DumpDifferences(spContext *ctxTop) const
|
bool DocManager::DumpDifferences(spContext *ctxTop) const
|
||||||
{
|
{
|
||||||
typedef MMemberListT::const_iterator MemberIndex;
|
typedef MMemberListT::const_iterator MemberIndex;
|
||||||
|
|
||||||
bool foundDiff = FALSE;
|
bool foundDiff = false;
|
||||||
|
|
||||||
// flag telling us whether the given class was found at all in the header
|
// flag telling us whether the given class was found at all in the header
|
||||||
size_t nClass, countClassesInDocs = m_classes.GetCount();
|
size_t nClass, countClassesInDocs = m_classes.GetCount();
|
||||||
bool *classExists = new bool[countClassesInDocs];
|
bool *classExists = new bool[countClassesInDocs];
|
||||||
for ( nClass = 0; nClass < countClassesInDocs; nClass++ ) {
|
for ( nClass = 0; nClass < countClassesInDocs; nClass++ ) {
|
||||||
classExists[nClass] = FALSE;
|
classExists[nClass] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ctxTop is normally an spFile
|
// ctxTop is normally an spFile
|
||||||
@@ -1747,7 +1749,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
int index = m_classes.Index(nameClass);
|
int index = m_classes.Index(nameClass);
|
||||||
if ( index == wxNOT_FOUND ) {
|
if ( index == wxNOT_FOUND ) {
|
||||||
if ( !m_ignoreNames.IgnoreClass(nameClass) ) {
|
if ( !m_ignoreNames.IgnoreClass(nameClass) ) {
|
||||||
foundDiff = TRUE;
|
foundDiff = true;
|
||||||
|
|
||||||
wxLogError("Class '%s' is not documented at all.",
|
wxLogError("Class '%s' is not documented at all.",
|
||||||
nameClass.c_str());
|
nameClass.c_str());
|
||||||
@@ -1757,7 +1759,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
classExists[index] = TRUE;
|
classExists[index] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// array of method descriptions for this class
|
// array of method descriptions for this class
|
||||||
@@ -1767,7 +1769,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
// flags telling if we already processed given function
|
// flags telling if we already processed given function
|
||||||
bool *methodExists = new bool[countMethods];
|
bool *methodExists = new bool[countMethods];
|
||||||
for ( nMethod = 0; nMethod < countMethods; nMethod++ ) {
|
for ( nMethod = 0; nMethod < countMethods; nMethod++ ) {
|
||||||
methodExists[nMethod] = FALSE;
|
methodExists[nMethod] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxArrayString aOverloadedMethods;
|
wxArrayString aOverloadedMethods;
|
||||||
@@ -1790,7 +1792,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
|
|
||||||
if ( aMethodsWithSameName.IsEmpty() && ctxMethod->IsPublic() ) {
|
if ( aMethodsWithSameName.IsEmpty() && ctxMethod->IsPublic() ) {
|
||||||
if ( !m_ignoreNames.IgnoreMethod(nameClass, nameMethod) ) {
|
if ( !m_ignoreNames.IgnoreMethod(nameClass, nameMethod) ) {
|
||||||
foundDiff = TRUE;
|
foundDiff = true;
|
||||||
|
|
||||||
wxLogError("'%s::%s' is not documented.",
|
wxLogError("'%s::%s' is not documented.",
|
||||||
nameClass.c_str(),
|
nameClass.c_str(),
|
||||||
@@ -1802,7 +1804,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
}
|
}
|
||||||
else if ( aMethodsWithSameName.GetCount() == 1 ) {
|
else if ( aMethodsWithSameName.GetCount() == 1 ) {
|
||||||
index = (size_t)aMethodsWithSameName[0u];
|
index = (size_t)aMethodsWithSameName[0u];
|
||||||
methodExists[index] = TRUE;
|
methodExists[index] = true;
|
||||||
|
|
||||||
if ( m_ignoreNames.IgnoreMethod(nameClass, nameMethod) )
|
if ( m_ignoreNames.IgnoreMethod(nameClass, nameMethod) )
|
||||||
continue;
|
continue;
|
||||||
@@ -1858,7 +1860,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
const ParamInfo& param = method.GetParam(nParam);
|
const ParamInfo& param = method.GetParam(nParam);
|
||||||
if ( m_checkParamNames &&
|
if ( m_checkParamNames &&
|
||||||
(param.GetName() != ctxParam->mName) ) {
|
(param.GetName() != ctxParam->mName) ) {
|
||||||
foundDiff = TRUE;
|
foundDiff = true;
|
||||||
|
|
||||||
wxLogError("Parameter #%d of '%s::%s' should be "
|
wxLogError("Parameter #%d of '%s::%s' should be "
|
||||||
"'%s' and not '%s'.",
|
"'%s' and not '%s'.",
|
||||||
@@ -1872,7 +1874,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( param.GetType() != ctxParam->mType ) {
|
if ( param.GetType() != ctxParam->mType ) {
|
||||||
foundDiff = TRUE;
|
foundDiff = true;
|
||||||
|
|
||||||
wxLogError("Type of parameter '%s' of '%s::%s' "
|
wxLogError("Type of parameter '%s' of '%s::%s' "
|
||||||
"should be '%s' and not '%s'.",
|
"should be '%s' and not '%s'.",
|
||||||
@@ -1908,7 +1910,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
// mark all methods with this name as existing
|
// mark all methods with this name as existing
|
||||||
for ( nMethod = 0; nMethod < countMethods; nMethod++ ) {
|
for ( nMethod = 0; nMethod < countMethods; nMethod++ ) {
|
||||||
if ( methods[nMethod]->GetName() == nameMethod )
|
if ( methods[nMethod]->GetName() == nameMethod )
|
||||||
methodExists[nMethod] = TRUE;
|
methodExists[nMethod] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
aOverloadedMethods.Add(nameMethod);
|
aOverloadedMethods.Add(nameMethod);
|
||||||
@@ -1927,7 +1929,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
if ( !methodExists[nMethod] ) {
|
if ( !methodExists[nMethod] ) {
|
||||||
const wxString& nameMethod = methods[nMethod]->GetName();
|
const wxString& nameMethod = methods[nMethod]->GetName();
|
||||||
if ( !m_ignoreNames.IgnoreMethod(nameClass, nameMethod) ) {
|
if ( !m_ignoreNames.IgnoreMethod(nameClass, nameMethod) ) {
|
||||||
foundDiff = TRUE;
|
foundDiff = true;
|
||||||
|
|
||||||
wxLogError("'%s::%s' is documented but doesn't exist.",
|
wxLogError("'%s::%s' is documented but doesn't exist.",
|
||||||
nameClass.c_str(),
|
nameClass.c_str(),
|
||||||
@@ -1942,7 +1944,7 @@ bool DocManager::DumpDifferences(spContext *ctxTop) const
|
|||||||
// check that all classes we found in the docs really exist
|
// check that all classes we found in the docs really exist
|
||||||
for ( nClass = 0; nClass < countClassesInDocs; nClass++ ) {
|
for ( nClass = 0; nClass < countClassesInDocs; nClass++ ) {
|
||||||
if ( !classExists[nClass] ) {
|
if ( !classExists[nClass] ) {
|
||||||
foundDiff = TRUE;
|
foundDiff = true;
|
||||||
|
|
||||||
wxLogError("Class '%s' is documented but doesn't exist.",
|
wxLogError("Class '%s' is documented but doesn't exist.",
|
||||||
m_classes[nClass].c_str());
|
m_classes[nClass].c_str());
|
||||||
@@ -1978,11 +1980,11 @@ bool IgnoreNamesHandler::AddNamesFromFile(const wxString& filename)
|
|||||||
{
|
{
|
||||||
wxFile file(filename, wxFile::read);
|
wxFile file(filename, wxFile::read);
|
||||||
if ( !file.IsOpened() )
|
if ( !file.IsOpened() )
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
off_t len = file.Length();
|
off_t len = file.Length();
|
||||||
if ( len == wxInvalidOffset )
|
if ( len == wxInvalidOffset )
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
char *buf = new char[len + 1];
|
char *buf = new char[len + 1];
|
||||||
buf[len] = '\0';
|
buf[len] = '\0';
|
||||||
@@ -1990,7 +1992,7 @@ bool IgnoreNamesHandler::AddNamesFromFile(const wxString& filename)
|
|||||||
if ( file.Read(buf, len) == wxInvalidOffset ) {
|
if ( file.Read(buf, len) == wxInvalidOffset ) {
|
||||||
delete [] buf;
|
delete [] buf;
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString line;
|
wxString line;
|
||||||
@@ -2027,7 +2029,7 @@ bool IgnoreNamesHandler::AddNamesFromFile(const wxString& filename)
|
|||||||
|
|
||||||
delete [] buf;
|
delete [] buf;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -2115,7 +2117,7 @@ static wxString MakeHelpref(const char *argument)
|
|||||||
static void TeXFilter(wxString* str)
|
static void TeXFilter(wxString* str)
|
||||||
{
|
{
|
||||||
// TeX special which can be quoted (don't include backslash nor braces as
|
// TeX special which can be quoted (don't include backslash nor braces as
|
||||||
// we generate them
|
// we generate them
|
||||||
static wxRegEx reNonSpecialSpecials("[#$%&_]"),
|
static wxRegEx reNonSpecialSpecials("[#$%&_]"),
|
||||||
reAccents("[~^]");
|
reAccents("[~^]");
|
||||||
|
|
||||||
@@ -2130,8 +2132,8 @@ static void TeXFilter(wxString* str)
|
|||||||
static void TeXUnfilter(wxString* str)
|
static void TeXUnfilter(wxString* str)
|
||||||
{
|
{
|
||||||
// FIXME may be done much more quickly
|
// FIXME may be done much more quickly
|
||||||
str->Trim(TRUE);
|
str->Trim(true);
|
||||||
str->Trim(FALSE);
|
str->Trim(false);
|
||||||
|
|
||||||
// undo TeXFilter
|
// undo TeXFilter
|
||||||
static wxRegEx reNonSpecialSpecials("\\\\([#$%&_{}])"),
|
static wxRegEx reNonSpecialSpecials("\\\\([#$%&_{}])"),
|
||||||
@@ -2151,7 +2153,7 @@ static wxString GetAllComments(const spContext& ctx)
|
|||||||
wxString comment = (*i)->GetText();
|
wxString comment = (*i)->GetText();
|
||||||
|
|
||||||
// don't take comments like "// ----------" &c
|
// don't take comments like "// ----------" &c
|
||||||
comment.Trim(FALSE);
|
comment.Trim(false);
|
||||||
if ( !!comment &&
|
if ( !!comment &&
|
||||||
comment == wxString(comment[0u], comment.length() - 1) + '\n' )
|
comment == wxString(comment[0u], comment.length() - 1) + '\n' )
|
||||||
comments << "\n";
|
comments << "\n";
|
||||||
@@ -2185,6 +2187,9 @@ static const wxString GetVersionString()
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
$Log$
|
$Log$
|
||||||
|
Revision 1.29 2004/06/17 19:00:22 ABX
|
||||||
|
Warning fixes. Code cleanup. Whitespaces and tabs removed.
|
||||||
|
|
||||||
Revision 1.28 2004/05/25 11:19:57 JS
|
Revision 1.28 2004/05/25 11:19:57 JS
|
||||||
More name changes
|
More name changes
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
// Created: 22/09/98
|
// Created: 22/09/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) Aleskandars Gluchovas
|
// Copyright: (c) Aleskandars Gluchovas
|
||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifdef __GNUG__
|
#ifdef __GNUG__
|
||||||
@@ -161,12 +161,12 @@ static inline bool skip_to_next_comment_in_the_line( char*& cur )
|
|||||||
*cur != '/'
|
*cur != '/'
|
||||||
) ++cur;
|
) ++cur;
|
||||||
|
|
||||||
if ( cur == _gSrcEnd ) return FALSE;
|
if ( cur == _gSrcEnd ) return false;
|
||||||
|
|
||||||
if ( *cur == '/' )
|
if ( *cur == '/' )
|
||||||
{
|
{
|
||||||
if ( (*(cur+1) == '*') ||
|
if ( (*(cur+1) == '*') ||
|
||||||
(*(cur+1) == '/') ) return TRUE;
|
(*(cur+1) == '/') ) return true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
++cur;
|
++cur;
|
||||||
@@ -174,7 +174,7 @@ static inline bool skip_to_next_comment_in_the_line( char*& cur )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
} while(1);
|
} while(1);
|
||||||
}
|
}
|
||||||
@@ -381,10 +381,9 @@ static inline bool get_next_token( char*& cur )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( cur >= _gSrcEnd )
|
if ( cur >= _gSrcEnd )
|
||||||
|
return false;
|
||||||
return FALSE;
|
|
||||||
else
|
else
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void skip_preprocessor_dir( char*& cur )
|
static inline void skip_preprocessor_dir( char*& cur )
|
||||||
@@ -497,13 +496,13 @@ static inline bool cmp_tokens( char* tok1, char* tok2 )
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( *(tok1++) != *(tok2++) )
|
if ( *(tok1++) != *(tok2++) )
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
--len;
|
--len;
|
||||||
|
|
||||||
} while ( --len );
|
} while ( --len );
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len )
|
static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len )
|
||||||
@@ -511,11 +510,11 @@ static inline bool cmp_tokens_fast( char* tok1, char* tok2, size_t len )
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( *(tok1++) != *(tok2++) )
|
if ( *(tok1++) != *(tok2++) )
|
||||||
return FALSE;
|
return false;
|
||||||
|
|
||||||
} while ( --len );
|
} while ( --len );
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void skip_tempalate_statement( char*& cur )
|
static inline void skip_tempalate_statement( char*& cur )
|
||||||
@@ -741,18 +740,18 @@ static inline bool skip_imp_block( char*& cur )
|
|||||||
while( *cur != '{' && cur < _gSrcEnd )
|
while( *cur != '{' && cur < _gSrcEnd )
|
||||||
{
|
{
|
||||||
skip_token( cur );
|
skip_token( cur );
|
||||||
if ( !get_next_token( cur ) ) return FALSE;
|
if ( !get_next_token( cur ) ) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
while( *cur != '}' && cur < _gSrcEnd )
|
while( *cur != '}' && cur < _gSrcEnd )
|
||||||
{
|
{
|
||||||
skip_token( cur );
|
skip_token( cur );
|
||||||
if ( !get_next_token( cur ) ) return FALSE;
|
if ( !get_next_token( cur ) ) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
++cur;
|
++cur;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_class_token( char*& cur )
|
static bool is_class_token( char*& cur )
|
||||||
@@ -779,7 +778,7 @@ static bool is_class_token( char*& cur )
|
|||||||
|
|
||||||
return cmp_tokens_fast( cur, "union", 5 );
|
return cmp_tokens_fast( cur, "union", 5 );
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static bool is_forward_decl( char* cur )
|
inline static bool is_forward_decl( char* cur )
|
||||||
@@ -788,11 +787,11 @@ inline static bool is_forward_decl( char* cur )
|
|||||||
{
|
{
|
||||||
switch( *cur )
|
switch( *cur )
|
||||||
{
|
{
|
||||||
case ':' : return FALSE;
|
case ':' : return false;
|
||||||
case '{' : return FALSE;
|
case '{' : return false;
|
||||||
case '(' : return FALSE;
|
case '(' : return false;
|
||||||
|
|
||||||
case ';' : return TRUE;
|
case ';' : return true;
|
||||||
|
|
||||||
default : break;
|
default : break;
|
||||||
};
|
};
|
||||||
@@ -801,12 +800,12 @@ inline static bool is_forward_decl( char* cur )
|
|||||||
|
|
||||||
} while (cur < _gSrcEnd); // prevent running out of bounds
|
} while (cur < _gSrcEnd); // prevent running out of bounds
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline static bool is_function( char* cur, bool& isAMacro )
|
inline static bool is_function( char* cur, bool& isAMacro )
|
||||||
{
|
{
|
||||||
isAMacro = FALSE;
|
isAMacro = false;
|
||||||
|
|
||||||
int tmpLnNo;
|
int tmpLnNo;
|
||||||
store_line_no( tmpLnNo );
|
store_line_no( tmpLnNo );
|
||||||
@@ -825,10 +824,10 @@ inline static bool is_function( char* cur, bool& isAMacro )
|
|||||||
|
|
||||||
if ( cur > eol )
|
if ( cur > eol )
|
||||||
{
|
{
|
||||||
isAMacro = TRUE;
|
isAMacro = true;
|
||||||
restore_line_no( tmpLnNo );
|
restore_line_no( tmpLnNo );
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// it's not a macro, go to the begining of arg. list
|
// it's not a macro, go to the begining of arg. list
|
||||||
@@ -840,7 +839,7 @@ inline static bool is_function( char* cur, bool& isAMacro )
|
|||||||
if ( *cur == '(' )
|
if ( *cur == '(' )
|
||||||
{
|
{
|
||||||
restore_line_no( tmpLnNo );
|
restore_line_no( tmpLnNo );
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// end of statement found without any brackets in it
|
// end of statement found without any brackets in it
|
||||||
@@ -849,7 +848,7 @@ inline static bool is_function( char* cur, bool& isAMacro )
|
|||||||
if ( *cur == ';' )
|
if ( *cur == ';' )
|
||||||
{
|
{
|
||||||
restore_line_no( tmpLnNo );
|
restore_line_no( tmpLnNo );
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
++cur;
|
++cur;
|
||||||
@@ -859,7 +858,7 @@ inline static bool is_function( char* cur, bool& isAMacro )
|
|||||||
isAMacro = 1;
|
isAMacro = 1;
|
||||||
restore_line_no( tmpLnNo );
|
restore_line_no( tmpLnNo );
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// upon return the cursor is positioned after the
|
// upon return the cursor is positioned after the
|
||||||
@@ -1018,8 +1017,8 @@ spFile* CJSourceParser::Parse( char* start, char* end )
|
|||||||
) == 0
|
) == 0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int o = 0;
|
// int o = 0;
|
||||||
++o;
|
// ++o;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (*cur)
|
switch (*cur)
|
||||||
@@ -1118,7 +1117,7 @@ spFile* CJSourceParser::Parse( char* start, char* end )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isAMacro = 0;
|
bool isAMacro = false;
|
||||||
|
|
||||||
if ( is_function( cur, isAMacro ) )
|
if ( is_function( cur, isAMacro ) )
|
||||||
{
|
{
|
||||||
@@ -1132,8 +1131,9 @@ spFile* CJSourceParser::Parse( char* start, char* end )
|
|||||||
|
|
||||||
int tmpLnNo;
|
int tmpLnNo;
|
||||||
store_line_no( tmpLnNo );
|
store_line_no( tmpLnNo );
|
||||||
|
wxUnusedVar( tmpLnNo );
|
||||||
|
|
||||||
isAMacro = FALSE;
|
isAMacro = false;
|
||||||
|
|
||||||
if ( !ParseNameAndRetVal( cur, isAMacro ) )
|
if ( !ParseNameAndRetVal( cur, isAMacro ) )
|
||||||
{
|
{
|
||||||
@@ -1219,11 +1219,11 @@ void CJSourceParser::AttachComments( spContext& ctx, char* cur )
|
|||||||
|
|
||||||
if ( i == 0 )
|
if ( i == 0 )
|
||||||
|
|
||||||
pComment->mStartsPar = TRUE;
|
pComment->mStartsPar = true;
|
||||||
else
|
else
|
||||||
if ( pComment->mIsMultiline )
|
if ( pComment->mIsMultiline )
|
||||||
|
|
||||||
pComment->mStartsPar = TRUE;
|
pComment->mStartsPar = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// find out wheather there is a new-line
|
// find out wheather there is a new-line
|
||||||
@@ -1235,9 +1235,9 @@ void CJSourceParser::AttachComments( spContext& ctx, char* cur )
|
|||||||
|
|
||||||
if ( prevLine >= prevComEnd )
|
if ( prevLine >= prevComEnd )
|
||||||
|
|
||||||
pComment->mStartsPar = TRUE;
|
pComment->mStartsPar = true;
|
||||||
else
|
else
|
||||||
pComment->mStartsPar = FALSE;
|
pComment->mStartsPar = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
prevComEnd = set_comment_text( pComment->mText, start );
|
prevComEnd = set_comment_text( pComment->mText, start );
|
||||||
@@ -1521,7 +1521,7 @@ void CJSourceParser::ParseKeyword( char*& cur )
|
|||||||
|
|
||||||
bool CJSourceParser::ParseNameAndRetVal( char*& cur, bool& isAMacro )
|
bool CJSourceParser::ParseNameAndRetVal( char*& cur, bool& isAMacro )
|
||||||
{
|
{
|
||||||
isAMacro = FALSE;
|
isAMacro = false;
|
||||||
|
|
||||||
// FOR NOW:: all functions in the global
|
// FOR NOW:: all functions in the global
|
||||||
// scope are ignored
|
// scope are ignored
|
||||||
@@ -1537,7 +1537,7 @@ bool CJSourceParser::ParseNameAndRetVal( char*& cur, bool& isAMacro )
|
|||||||
isVirtual = true;
|
isVirtual = true;
|
||||||
|
|
||||||
skip_token( cur );
|
skip_token( cur );
|
||||||
if ( !get_next_token( cur ) ) return FALSE;
|
if ( !get_next_token( cur ) ) return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* bracketPos = cur;
|
char* bracketPos = cur;
|
||||||
@@ -1564,9 +1564,9 @@ bool CJSourceParser::ParseNameAndRetVal( char*& cur, bool& isAMacro )
|
|||||||
|
|
||||||
mpPlugin->ParseContext( _gSrcStart, cur, _gSrcEnd, mpCurCtx );
|
mpPlugin->ParseContext( _gSrcStart, cur, _gSrcEnd, mpCurCtx );
|
||||||
|
|
||||||
isAMacro = TRUE;
|
isAMacro = true;
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1633,7 +1633,7 @@ bool CJSourceParser::ParseNameAndRetVal( char*& cur, bool& isAMacro )
|
|||||||
// now, enter operation context
|
// now, enter operation context
|
||||||
mpCurCtx = pOp;
|
mpCurCtx = pOp;
|
||||||
|
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CJSourceParser::ParseArguments( char*& cur )
|
bool CJSourceParser::ParseArguments( char*& cur )
|
||||||
@@ -1655,7 +1655,7 @@ bool CJSourceParser::ParseArguments( char*& cur )
|
|||||||
|
|
||||||
get_next_token( cur );
|
get_next_token( cur );
|
||||||
|
|
||||||
bool first_blk = 1;
|
bool first_blk = true;
|
||||||
|
|
||||||
while( *cur != ')' && *cur != ',' )
|
while( *cur != ')' && *cur != ',' )
|
||||||
{
|
{
|
||||||
@@ -1693,7 +1693,7 @@ bool CJSourceParser::ParseArguments( char*& cur )
|
|||||||
// if only one block enclosed, than it's probably
|
// if only one block enclosed, than it's probably
|
||||||
// some macro, there should be at least two blocks,
|
// some macro, there should be at least two blocks,
|
||||||
// one for argument type and another for it's identifier
|
// one for argument type and another for it's identifier
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( blocksSkipped == 0 )
|
if ( blocksSkipped == 0 )
|
||||||
@@ -1777,29 +1777,31 @@ bool CJSourceParser::ParseArguments( char*& cur )
|
|||||||
int tmpLnNo;
|
int tmpLnNo;
|
||||||
store_line_no( tmpLnNo );
|
store_line_no( tmpLnNo );
|
||||||
|
|
||||||
|
bool result = true;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ( *tok == '{' || *tok == ';' )
|
if ( *tok == '{' || *tok == ';' )
|
||||||
{
|
{
|
||||||
restore_line_no(tmpLnNo);
|
restore_line_no(tmpLnNo);
|
||||||
return TRUE;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for unexpected tokens
|
// check for unexpected tokens
|
||||||
if ( *tok == '=' || *tok == '0' )
|
if ( *tok == '=' || *tok == '0' )
|
||||||
{
|
{
|
||||||
skip_token(tok);
|
skip_token(tok);
|
||||||
if ( !get_next_token(tok) ) return FALSE;
|
if ( !get_next_token(tok) ) return false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( *tok == '}' ) return FALSE;
|
if ( *tok == '}' ) return false;
|
||||||
|
|
||||||
// if initialization list found
|
// if initialization list found
|
||||||
if ( *tok == ':' )
|
if ( *tok == ':' )
|
||||||
{
|
{
|
||||||
restore_line_no(tmpLnNo);
|
restore_line_no(tmpLnNo);
|
||||||
return TRUE;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cmp_tokens_fast( tok, "const", 5 ) )
|
if ( cmp_tokens_fast( tok, "const", 5 ) )
|
||||||
@@ -1807,30 +1809,28 @@ bool CJSourceParser::ParseArguments( char*& cur )
|
|||||||
((spOperation*)mpCurCtx)->mIsConstant = true;
|
((spOperation*)mpCurCtx)->mIsConstant = true;
|
||||||
|
|
||||||
skip_token(tok);
|
skip_token(tok);
|
||||||
if ( !get_next_token(tok) ) return FALSE;
|
if ( !get_next_token(tok) ) return false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( CheckVisibilty( tok ) ) return FALSE;
|
if ( CheckVisibilty( tok ) ) return false;
|
||||||
|
|
||||||
// if next context found
|
// if next context found
|
||||||
if ( is_keyword( tok ) ) return FALSE;
|
if ( is_keyword( tok ) ) return false;
|
||||||
|
|
||||||
skip_token(tok);
|
skip_token(tok);
|
||||||
if ( !get_next_token(tok) ) return FALSE;
|
if ( !get_next_token(tok) ) return false;
|
||||||
|
|
||||||
} while(1);
|
} while(1);
|
||||||
|
|
||||||
return TRUE;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CJSourceParser::ParseMemberVar( char*& cur )
|
void CJSourceParser::ParseMemberVar( char*& cur )
|
||||||
{
|
{
|
||||||
MMemberListT& members = mpCurCtx->GetMembers();
|
MMemberListT& members = mpCurCtx->GetMembers();
|
||||||
|
|
||||||
bool firstMember = 1;
|
bool firstMember = true;
|
||||||
|
|
||||||
size_t first = 0;
|
|
||||||
|
|
||||||
string type;
|
string type;
|
||||||
|
|
||||||
@@ -1860,7 +1860,6 @@ void CJSourceParser::ParseMemberVar( char*& cur )
|
|||||||
if ( firstMember )
|
if ( firstMember )
|
||||||
{
|
{
|
||||||
firstMember = 0;
|
firstMember = 0;
|
||||||
first = members.size() - 1;;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
skip_token_back( cur );
|
skip_token_back( cur );
|
||||||
@@ -1904,7 +1903,7 @@ void CJSourceParser::ParseMemberVar( char*& cur )
|
|||||||
|
|
||||||
} while(1);
|
} while(1);
|
||||||
|
|
||||||
first = 0;
|
size_t first = 0;
|
||||||
|
|
||||||
// set up types for all collected (same-type) attributes;
|
// set up types for all collected (same-type) attributes;
|
||||||
while ( first != members.size() - 1 )
|
while ( first != members.size() - 1 )
|
||||||
@@ -1950,7 +1949,7 @@ void CJSourceParser::SkipFunctionBody( char*& cur )
|
|||||||
{
|
{
|
||||||
// FIXME:: check for comments and quoted stirngs here
|
// FIXME:: check for comments and quoted stirngs here
|
||||||
|
|
||||||
bool hasDefinition = FALSE;
|
bool hasDefinition = false;
|
||||||
|
|
||||||
while( *cur != '{' && *cur != ';' )
|
while( *cur != '{' && *cur != ';' )
|
||||||
{
|
{
|
||||||
@@ -1964,7 +1963,7 @@ void CJSourceParser::SkipFunctionBody( char*& cur )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hasDefinition = TRUE;
|
hasDefinition = true;
|
||||||
|
|
||||||
skip_scope_block( cur ); // skip the whole imp.
|
skip_scope_block( cur ); // skip the whole imp.
|
||||||
}
|
}
|
||||||
@@ -2004,22 +2003,22 @@ bool CJSourceParser::CheckVisibilty( char*& cur )
|
|||||||
if ( cmp_tokens_fast( cur, "public:", len ) )
|
if ( cmp_tokens_fast( cur, "public:", len ) )
|
||||||
{
|
{
|
||||||
mCurVis = SP_VIS_PUBLIC;
|
mCurVis = SP_VIS_PUBLIC;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cmp_tokens_fast( cur, "protected:", len ) )
|
if ( cmp_tokens_fast( cur, "protected:", len ) )
|
||||||
{
|
{
|
||||||
mCurVis = SP_VIS_PROTECTED;
|
mCurVis = SP_VIS_PROTECTED;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cmp_tokens_fast( cur, "private:", len ) )
|
if ( cmp_tokens_fast( cur, "private:", len ) )
|
||||||
{
|
{
|
||||||
mCurVis = SP_VIS_PRIVATE;
|
mCurVis = SP_VIS_PRIVATE;
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CJSourceParser::AddClassNode( char*& cur )
|
void CJSourceParser::AddClassNode( char*& cur )
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
// Created: 22/09/98
|
// Created: 22/09/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) Aleskandars Gluchovas
|
// Copyright: (c) Aleskandars Gluchovas
|
||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// For compilers that support precompilation, includes "wx/wx.h".
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
// ***** currently only HTML versions of variouse templates available ***** //
|
// ***** currently only HTML versions of variouse templates available ***** //
|
||||||
|
|
||||||
static const char* HTM_TopTempl =
|
static const char* HTM_TopTempl =
|
||||||
|
|
||||||
"<html><body bgcolor=#FFFFFF>\n\
|
"<html><body bgcolor=#FFFFFF>\n\
|
||||||
\n\n<!------ Automatically Generated by \"wxDocRipper\"------->\n\n\n\
|
\n\n<!------ Automatically Generated by \"wxDocRipper\"------->\n\n\n\
|
||||||
@@ -42,7 +42,7 @@ $(REFLIST)\
|
|||||||
</ul><p>\n\n\
|
</ul><p>\n\n\
|
||||||
";
|
";
|
||||||
|
|
||||||
static const char* HTM_ContentIdxTempl =
|
static const char* HTM_ContentIdxTempl =
|
||||||
|
|
||||||
"\
|
"\
|
||||||
<a name=\"r$(ID)_$(NAME)\">\n\
|
<a name=\"r$(ID)_$(NAME)\">\n\
|
||||||
@@ -53,7 +53,7 @@ $(REFLIST)\
|
|||||||
</ul><p>\n\n\
|
</ul><p>\n\n\
|
||||||
";
|
";
|
||||||
|
|
||||||
static const char* HTM_SuperContentTempl =
|
static const char* HTM_SuperContentTempl =
|
||||||
|
|
||||||
"\
|
"\
|
||||||
<a name=\"r$(ID)_$(NAME)\">\n\
|
<a name=\"r$(ID)_$(NAME)\">\n\
|
||||||
@@ -62,7 +62,7 @@ static const char* HTM_SuperContentTempl =
|
|||||||
$(BODY)\n\
|
$(BODY)\n\
|
||||||
";
|
";
|
||||||
|
|
||||||
static const char* HTM_SubContentTempl =
|
static const char* HTM_SubContentTempl =
|
||||||
|
|
||||||
"\
|
"\
|
||||||
<a name=\"r$(ID)_$(NAME)\">\n\
|
<a name=\"r$(ID)_$(NAME)\">\n\
|
||||||
@@ -104,490 +104,456 @@ static const char* HTM_DeadRefTempl =
|
|||||||
|
|
||||||
RipperDocGen::RipperDocGen()
|
RipperDocGen::RipperDocGen()
|
||||||
|
|
||||||
: mTopTempl ( HTM_TopTempl ),
|
: mTopTempl ( HTM_TopTempl ),
|
||||||
mContentIdxTempl ( HTM_ContentIdxTempl ),
|
mContentIdxTempl ( HTM_ContentIdxTempl ),
|
||||||
mSuperContentTempl( HTM_SuperContentTempl ),
|
mSuperContentTempl( HTM_SuperContentTempl ),
|
||||||
mSubContentTempl ( HTM_SubContentTempl ),
|
mSubContentTempl ( HTM_SubContentTempl ),
|
||||||
mOutLineTempl ( HTM_OutLineTempl ),
|
mOutLineTempl ( HTM_OutLineTempl ),
|
||||||
mOutLine1Templ ( HTM_OutLine1Templ ),
|
mOutLine1Templ ( HTM_OutLine1Templ ),
|
||||||
|
|
||||||
mRefTempl ( HTM_RefTempl ),
|
mRefTempl ( HTM_RefTempl ),
|
||||||
mDeadRefTempl ( HTM_DeadRefTempl ),
|
mDeadRefTempl ( HTM_DeadRefTempl ),
|
||||||
|
|
||||||
mpCurClassSect(0)
|
mpCurClassSect(0)
|
||||||
{ // topIndex is not referenced
|
{
|
||||||
mpTopIdx = new ScriptSection( "Source Code Contents" , "", &mTopTempl , 0 );
|
// topIndex is not referenced
|
||||||
mpClassIdx = new ScriptSection( "Classes Reference" , "", &mContentIdxTempl, &mRefTempl );
|
mpTopIdx = new ScriptSection( "Source Code Contents" , "", &mTopTempl , 0 );
|
||||||
mpEnumIdx = new ScriptSection( "Enumerations Reference" , "", &mContentIdxTempl, &mRefTempl );
|
mpClassIdx = new ScriptSection( "Classes Reference" , "", &mContentIdxTempl, &mRefTempl );
|
||||||
mpTypeDefIdx = new ScriptSection( "Type Definitions Reference" , "", &mContentIdxTempl, &mRefTempl );
|
mpEnumIdx = new ScriptSection( "Enumerations Reference" , "", &mContentIdxTempl, &mRefTempl );
|
||||||
mpMacroIdx = new ScriptSection( "Macros Reference" , "", &mContentIdxTempl, &mRefTempl );
|
mpTypeDefIdx = new ScriptSection( "Type Definitions Reference" , "", &mContentIdxTempl, &mRefTempl );
|
||||||
mpGlobalVarsIdx = new ScriptSection( "Global Variables Reference" , "", &mContentIdxTempl, &mRefTempl );
|
mpMacroIdx = new ScriptSection( "Macros Reference" , "", &mContentIdxTempl, &mRefTempl );
|
||||||
mpGlobalFuncIdx = new ScriptSection( "Global Functions Reference", "", &mContentIdxTempl, &mRefTempl );
|
mpGlobalVarsIdx = new ScriptSection( "Global Variables Reference" , "", &mContentIdxTempl, &mRefTempl );
|
||||||
mpConstIdx = new ScriptSection( "Constants Reference" , "", &mContentIdxTempl, &mRefTempl );
|
mpGlobalFuncIdx = new ScriptSection( "Global Functions Reference", "", &mContentIdxTempl, &mRefTempl );
|
||||||
|
mpConstIdx = new ScriptSection( "Constants Reference" , "", &mContentIdxTempl, &mRefTempl );
|
||||||
|
|
||||||
// assemble top index
|
// assemble top index
|
||||||
mpTopIdx->AddSection( mpClassIdx , 1 );
|
mpTopIdx->AddSection( mpClassIdx , 1 );
|
||||||
mpTopIdx->AddSection( mpEnumIdx , 1 );
|
mpTopIdx->AddSection( mpEnumIdx , 1 );
|
||||||
mpTopIdx->AddSection( mpTypeDefIdx , 1 );
|
mpTopIdx->AddSection( mpTypeDefIdx , 1 );
|
||||||
mpTopIdx->AddSection( mpMacroIdx , 1 );
|
mpTopIdx->AddSection( mpMacroIdx , 1 );
|
||||||
mpTopIdx->AddSection( mpGlobalVarsIdx, 1 );
|
mpTopIdx->AddSection( mpGlobalVarsIdx, 1 );
|
||||||
mpTopIdx->AddSection( mpGlobalFuncIdx, 1 );
|
mpTopIdx->AddSection( mpGlobalFuncIdx, 1 );
|
||||||
mpTopIdx->AddSection( mpConstIdx , 1 );
|
mpTopIdx->AddSection( mpConstIdx , 1 );
|
||||||
|
|
||||||
// register reserved variables for index and description templates
|
// register reserved variables for index and description templates
|
||||||
ScriptSection::RegisterTemplate( mTopTempl );
|
ScriptSection::RegisterTemplate( mTopTempl );
|
||||||
ScriptSection::RegisterTemplate( mContentIdxTempl );
|
ScriptSection::RegisterTemplate( mContentIdxTempl );
|
||||||
ScriptSection::RegisterTemplate( mSuperContentTempl );
|
ScriptSection::RegisterTemplate( mSuperContentTempl );
|
||||||
ScriptSection::RegisterTemplate( mSubContentTempl );
|
ScriptSection::RegisterTemplate( mSubContentTempl );
|
||||||
ScriptSection::RegisterTemplate( mOutLineTempl );
|
ScriptSection::RegisterTemplate( mOutLineTempl );
|
||||||
ScriptSection::RegisterTemplate( mOutLine1Templ );
|
ScriptSection::RegisterTemplate( mOutLine1Templ );
|
||||||
ScriptSection::RegisterTemplate( mRefTempl );
|
ScriptSection::RegisterTemplate( mRefTempl );
|
||||||
ScriptSection::RegisterTemplate( mDeadRefTempl );
|
ScriptSection::RegisterTemplate( mDeadRefTempl );
|
||||||
|
|
||||||
// create the top-most (interfile) context
|
// create the top-most (interfile) context
|
||||||
mpFileBinderCtx = new spFile();
|
mpFileBinderCtx = new spFile();
|
||||||
|
|
||||||
// the default script is HTML
|
// the default script is HTML
|
||||||
mTags = get_HTML_markup_tags();
|
mTags = get_HTML_markup_tags();
|
||||||
|
|
||||||
mpParser = 0; // no default parser!
|
mpParser = 0; // no default parser!
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::Init( SourceParserBase* pParser )
|
void RipperDocGen::Init( SourceParserBase* pParser )
|
||||||
{
|
{
|
||||||
mpParser = pParser;
|
mpParser = pParser;
|
||||||
}
|
}
|
||||||
|
|
||||||
RipperDocGen::~RipperDocGen()
|
RipperDocGen::~RipperDocGen()
|
||||||
{
|
{
|
||||||
delete mpFileBinderCtx;
|
delete mpFileBinderCtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::AppendComments( spContext& fromContext, string& str )
|
void RipperDocGen::AppendComments( spContext& fromContext, string& str )
|
||||||
{
|
{
|
||||||
if ( !fromContext.HasComments() ) return;
|
if ( !fromContext.HasComments() ) return;
|
||||||
|
|
||||||
size_t start = str.length();
|
size_t start = str.length();
|
||||||
|
|
||||||
str += mTags[TAG_BOLD].end;
|
str += mTags[TAG_BOLD].end;
|
||||||
str += mTags[TAG_PARAGRAPH].start;
|
str += mTags[TAG_PARAGRAPH].start;
|
||||||
|
|
||||||
MCommentListT& lst = fromContext.GetCommentList();
|
MCommentListT& lst = fromContext.GetCommentList();
|
||||||
|
|
||||||
for( size_t i = 0; i != lst.size(); ++i )
|
for( size_t i = 0; i != lst.size(); ++i )
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( i != 0 )
|
|
||||||
|
|
||||||
if ( lst[i]->StartsParagraph() )
|
|
||||||
{
|
|
||||||
str += mTags[TAG_PARAGRAPH].start;
|
|
||||||
|
|
||||||
}
|
if ( i != 0 )
|
||||||
|
|
||||||
str += lst[i]->mText;
|
|
||||||
}
|
|
||||||
|
|
||||||
// remove new lines, and insert paragraph breaks
|
if ( lst[i]->StartsParagraph() )
|
||||||
|
{
|
||||||
|
str += mTags[TAG_PARAGRAPH].start;
|
||||||
|
}
|
||||||
|
|
||||||
// if empty lines found
|
str += lst[i]->mText;
|
||||||
|
}
|
||||||
|
|
||||||
size_t len = str.length();
|
// remove new lines, and insert paragraph breaks
|
||||||
|
|
||||||
for( size_t n = start; n != len; ++n )
|
// if empty lines found
|
||||||
|
|
||||||
if ( str[n] == 10 ||
|
|
||||||
str[n] == 13 )
|
|
||||||
|
|
||||||
{
|
size_t len = str.length();
|
||||||
|
|
||||||
if ( n + 2 < len )
|
for( size_t n = start; n != len; ++n )
|
||||||
|
|
||||||
{
|
if ( str[n] == 10 ||
|
||||||
|
str[n] == 13 )
|
||||||
if ( ( str[n] == 13 && str[n+1] == 10 && // FIXME:: quick-hack
|
{
|
||||||
|
if ( n + 2 < len )
|
||||||
str[n+2] == 13 ) ||
|
{
|
||||||
|
if ( ( str[n] == 13 && str[n+1] == 10 && // FIXME:: quick-hack
|
||||||
( str[n] == 10 && str[n+1] == 10 )
|
str[n+2] == 13 ) ||
|
||||||
|
( str[n] == 10 && str[n+1] == 10 )
|
||||||
)
|
)
|
||||||
|
{
|
||||||
{
|
str.insert( n + 1, "<p>" ); // FIXME:: quick-hack
|
||||||
|
len += 3;
|
||||||
str.insert( n + 1, "<p>" ); // FIXME:: quick-hack
|
}
|
||||||
|
}
|
||||||
len += 3;
|
str[n] = ' ';
|
||||||
|
}
|
||||||
}
|
str += mTags[TAG_PARAGRAPH].end;
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
str[n] = ' ';
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
str += mTags[TAG_PARAGRAPH].end;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::AppendMulitilineStr( string& st, string& mlStr )
|
void RipperDocGen::AppendMulitilineStr( string& st, string& mlStr )
|
||||||
{
|
{
|
||||||
st = mTags[TAG_FIXED_FONT].start;
|
st = mTags[TAG_FIXED_FONT].start;
|
||||||
st += mlStr;
|
st += mlStr;
|
||||||
st += mTags[TAG_FIXED_FONT].end;
|
st += mTags[TAG_FIXED_FONT].end;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::AppendHighlightedSource( string& st, string source )
|
void RipperDocGen::AppendHighlightedSource( string& st, string source )
|
||||||
{
|
{
|
||||||
// FIXME:: below should not be fixed :)
|
// FIXME:: below should not be fixed :)
|
||||||
char buf[1024*32];
|
char buf[1024*32];
|
||||||
|
|
||||||
// DBG:::
|
// DBG:::
|
||||||
// ASSERT( source.length() + 1 < sizeof(buf) );
|
// ASSERT( source.length() + 1 < sizeof(buf) );
|
||||||
|
|
||||||
strcpy( buf, source.c_str() );
|
strcpy( buf, source.c_str() );
|
||||||
|
|
||||||
// highlight things
|
// highlight things
|
||||||
mSrcPainter.Init();
|
mSrcPainter.Init();
|
||||||
mSrcPainter.ProcessSource( buf, strlen(buf) );
|
mSrcPainter.ProcessSource( buf, strlen(buf) );
|
||||||
mSrcPainter.GetResultString( st, mTags );
|
mSrcPainter.GetResultString( st, mTags );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RipperDocGen::CheckIfUncommented( spContext& ctx, ScriptSection& toSect )
|
bool RipperDocGen::CheckIfUncommented( spContext& ctx, ScriptSection& toSect )
|
||||||
{
|
{
|
||||||
if ( ctx.HasComments() ) return 0;
|
if ( ctx.HasComments() ) return 0;
|
||||||
|
|
||||||
toSect.AddReference(
|
toSect.AddReference(
|
||||||
new ScriptSection( GetScopedName( ctx ), "", 0, &mDeadRefTempl )
|
new ScriptSection( GetScopedName( ctx ), "", 0, &mDeadRefTempl )
|
||||||
);
|
);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptTemplate* RipperDocGen::GetRefTemplFor( spContext& ctx )
|
ScriptTemplate* RipperDocGen::GetRefTemplFor( spContext& ctx )
|
||||||
{
|
{
|
||||||
if ( ctx.HasComments() )
|
if ( ctx.HasComments() )
|
||||||
|
return &mRefTempl;
|
||||||
return &mRefTempl;
|
else
|
||||||
else
|
return &mDeadRefTempl;
|
||||||
return &mDeadRefTempl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string RipperDocGen::GetScopedName( spContext& ofCtx )
|
string RipperDocGen::GetScopedName( spContext& ofCtx )
|
||||||
{
|
{
|
||||||
if ( ofCtx.IsInFile() ) return ofCtx.GetName();
|
if ( ofCtx.IsInFile() )
|
||||||
else
|
return ofCtx.GetName();
|
||||||
return ofCtx.GetOutterContext()->GetName() +
|
else
|
||||||
"::" + ofCtx.GetName();
|
return ofCtx.GetOutterContext()->GetName() +
|
||||||
|
"::" + ofCtx.GetName();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::AddToCurrentClass( ScriptSection* pSection, spContext& ctx,
|
void RipperDocGen::AddToCurrentClass( ScriptSection* pSection, spContext& ctx,
|
||||||
const char* subSectionName )
|
const char* subSectionName )
|
||||||
{
|
{
|
||||||
string sName;
|
string sName;
|
||||||
|
|
||||||
if ( ctx.mVisibility == SP_VIS_PROTECTED )
|
if ( ctx.mVisibility == SP_VIS_PROTECTED )
|
||||||
|
sName = "Protected members/";
|
||||||
|
else
|
||||||
|
if ( ctx.mVisibility == SP_VIS_PRIVATE )
|
||||||
|
sName = "Private members/";
|
||||||
|
else
|
||||||
|
sName = "Public members/";
|
||||||
|
|
||||||
sName = "Protected members/";
|
sName += subSectionName;
|
||||||
else
|
|
||||||
if ( ctx.mVisibility == SP_VIS_PRIVATE )
|
|
||||||
|
|
||||||
sName = "Private members/";
|
ScriptSection* pSect = mpCurClassSect->GetSubsection( sName.c_str() );
|
||||||
else
|
|
||||||
sName = "Public members/";
|
|
||||||
|
|
||||||
sName += subSectionName;
|
if ( CheckIfUncommented( ctx, *pSect ) )
|
||||||
|
{
|
||||||
|
delete pSection;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ScriptSection* pSect = mpCurClassSect->GetSubsection( sName.c_str() );
|
pSect->AddReference( pSection );
|
||||||
|
|
||||||
if ( CheckIfUncommented( ctx, *pSect ) )
|
mpCurClassSect->AddSection( pSection );
|
||||||
{
|
|
||||||
delete pSection;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pSect->AddReference( pSection );
|
|
||||||
|
|
||||||
mpCurClassSect->AddSection( pSection );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::LinkSuperClassRefs()
|
void RipperDocGen::LinkSuperClassRefs()
|
||||||
{
|
{
|
||||||
MMemberListT clLst;
|
MMemberListT clLst;
|
||||||
|
|
||||||
// collect all classes in the context tree
|
// collect all classes in the context tree
|
||||||
mpFileBinderCtx->GetContextList( clLst, SP_CTX_CLASS );
|
mpFileBinderCtx->GetContextList( clLst, SP_CTX_CLASS );
|
||||||
|
|
||||||
for( size_t i = 0; i != clLst.size(); ++i )
|
for( size_t i = 0; i != clLst.size(); ++i )
|
||||||
{
|
{
|
||||||
spClass& cl = *((spClass*)clLst[i]);
|
spClass& cl = *((spClass*)clLst[i]);
|
||||||
|
|
||||||
// FIXME:: why sometimes GetUserData() returns NULL?
|
// FIXME:: why sometimes GetUserData() returns NULL?
|
||||||
if ( !cl.GetUserData() )
|
if ( !cl.GetUserData() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ScriptSection* pClSect = (ScriptSection*)cl.GetUserData();
|
ScriptSection* pClSect = (ScriptSection*)cl.GetUserData();
|
||||||
ScriptSection* pSuperSect = pClSect->GetSubsection("Derived from");
|
ScriptSection* pSuperSect = pClSect->GetSubsection("Derived from");
|
||||||
|
|
||||||
for( size_t n = 0; n != cl.mSuperClassNames.size(); ++n )
|
for( size_t n = 0; n != cl.mSuperClassNames.size(); ++n )
|
||||||
{
|
{
|
||||||
string& superClName = cl.mSuperClassNames[n];
|
string& superClName = cl.mSuperClassNames[n];
|
||||||
|
|
||||||
spClass* pFound = NULL;
|
spClass* pFound = NULL;
|
||||||
|
|
||||||
string* name;
|
for( size_t k = 0; k != clLst.size(); ++k )
|
||||||
|
{
|
||||||
|
if ( clLst[k]->GetName() == superClName )
|
||||||
|
{
|
||||||
|
pFound = (spClass*)clLst[k];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for( size_t k = 0; k != clLst.size(); ++k )
|
if ( !pFound )
|
||||||
{
|
{
|
||||||
name = &clLst[k]->GetName();
|
ScriptSection* pNotFound =
|
||||||
|
new ScriptSection( superClName, "", 0, &mDeadRefTempl );
|
||||||
|
|
||||||
if ( clLst[k]->GetName() == superClName )
|
pSuperSect->AddReference( pNotFound );
|
||||||
{
|
}
|
||||||
pFound = (spClass*)clLst[k];
|
else
|
||||||
break;
|
if ( pFound->GetUserData() )
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !pFound )
|
pSuperSect->AddReference(
|
||||||
{
|
(ScriptSection*)pFound->GetUserData() );
|
||||||
ScriptSection* pNotFound =
|
}
|
||||||
new ScriptSection( superClName, "", 0, &mDeadRefTempl );
|
}
|
||||||
|
|
||||||
pSuperSect->AddReference( pNotFound );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if ( pFound->GetUserData() )
|
|
||||||
|
|
||||||
pSuperSect->AddReference(
|
|
||||||
(ScriptSection*)pFound->GetUserData() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::ProcessFile( const char* sourceFile )
|
void RipperDocGen::ProcessFile( const char* sourceFile )
|
||||||
{
|
{
|
||||||
wxSTD cout << "Processing file " << sourceFile << "..." << wxSTD endl;
|
wxSTD cout << "Processing file " << sourceFile << "..." << wxSTD endl;
|
||||||
|
|
||||||
spFile* pCtx = mpParser->ParseFile( sourceFile );
|
spFile* pCtx = mpParser->ParseFile( sourceFile );
|
||||||
|
|
||||||
if ( pCtx == NULL )
|
if ( pCtx == NULL )
|
||||||
{
|
{
|
||||||
wxSTD cout << "Cannot open file " << sourceFile << ", skipped..." << wxSTD endl;
|
wxSTD cout << "Cannot open file " << sourceFile << ", skipped..." << wxSTD endl;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VisitAll( *pCtx, TRUE );
|
VisitAll( *pCtx, true );
|
||||||
|
|
||||||
mpFileBinderCtx->AddMember( pCtx );
|
mpFileBinderCtx->AddMember( pCtx );
|
||||||
}
|
}
|
||||||
|
|
||||||
// implementations of "visiting procedures"
|
// implementations of "visiting procedures"
|
||||||
|
|
||||||
void RipperDocGen::VisitEnumeration( spEnumeration& en )
|
void RipperDocGen::VisitEnumeration( spEnumeration& en )
|
||||||
{
|
{
|
||||||
// FOR NOW:: do not reference "nameless" enums
|
// FOR NOW:: do not reference "nameless" enums
|
||||||
if ( en.GetName() == "" ) return;
|
if ( en.GetName() == "" ) return;
|
||||||
|
|
||||||
if ( CheckIfUncommented( en, *mpEnumIdx ) )
|
if ( CheckIfUncommented( en, *mpEnumIdx ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
string body;
|
string body;
|
||||||
body += mTags[TAG_BOLD].start;
|
body += mTags[TAG_BOLD].start;
|
||||||
|
|
||||||
AppendMulitilineStr( body, en.mEnumContent );
|
AppendMulitilineStr( body, en.mEnumContent );
|
||||||
|
|
||||||
body += mTags[TAG_BOLD].end;
|
body += mTags[TAG_BOLD].end;
|
||||||
|
|
||||||
string line;
|
string line;
|
||||||
AppendHighlightedSource( line, body );
|
AppendHighlightedSource( line, body );
|
||||||
AppendComments( en, line );
|
AppendComments( en, line );
|
||||||
|
|
||||||
mpEnumIdx->AddSection(
|
mpEnumIdx->AddSection(
|
||||||
new ScriptSection( en.GetName(), line,
|
new ScriptSection( en.GetName(), line,
|
||||||
&mSubContentTempl,
|
&mSubContentTempl,
|
||||||
GetRefTemplFor( en ) ), 1
|
GetRefTemplFor( en ) ), 1
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::VisitTypeDef( spTypeDef& td )
|
void RipperDocGen::VisitTypeDef( spTypeDef& td )
|
||||||
{
|
{
|
||||||
if ( CheckIfUncommented( td, *mpTypeDefIdx ) )
|
if ( CheckIfUncommented( td, *mpTypeDefIdx ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
string body;
|
string body;
|
||||||
body += mTags[TAG_BOLD].start;
|
body += mTags[TAG_BOLD].start;
|
||||||
body += "typdef ";
|
body += "typdef ";
|
||||||
body += mTags[TAG_BOLD].end;
|
body += mTags[TAG_BOLD].end;
|
||||||
|
|
||||||
AppendMulitilineStr( body, td.mOriginalType );
|
AppendMulitilineStr( body, td.mOriginalType );
|
||||||
body += td.mOriginalType;
|
body += td.mOriginalType;
|
||||||
body += ' ';
|
body += ' ';
|
||||||
|
|
||||||
body += mTags[TAG_BOLD].start;
|
body += mTags[TAG_BOLD].start;
|
||||||
body += td.GetName();
|
body += td.GetName();
|
||||||
body += mTags[TAG_BOLD].end;
|
body += mTags[TAG_BOLD].end;
|
||||||
|
|
||||||
string line;
|
string line;
|
||||||
AppendHighlightedSource( line, body );
|
AppendHighlightedSource( line, body );
|
||||||
AppendComments( td, line );
|
AppendComments( td, line );
|
||||||
|
|
||||||
mpTypeDefIdx->AddSection(
|
mpTypeDefIdx->AddSection(
|
||||||
new ScriptSection( td.GetName(), line,
|
new ScriptSection( td.GetName(), line,
|
||||||
&mSubContentTempl,
|
&mSubContentTempl,
|
||||||
GetRefTemplFor( td ) ), TRUE
|
GetRefTemplFor( td ) ), true
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::VisitPreprocessorLine( spPreprocessorLine& pd )
|
void RipperDocGen::VisitPreprocessorLine( spPreprocessorLine& pd )
|
||||||
{
|
{
|
||||||
if ( pd.mDefType != SP_PREP_DEF_REDEFINE_SYMBOL )
|
if ( pd.mDefType != SP_PREP_DEF_REDEFINE_SYMBOL )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ( CheckIfUncommented( pd, *mpMacroIdx ) )
|
||||||
|
return;
|
||||||
|
|
||||||
return;
|
string body;
|
||||||
|
body += mTags[TAG_FIXED_FONT].start;
|
||||||
|
|
||||||
|
string coloredLine = pd.mLine;
|
||||||
|
AppendHighlightedSource( coloredLine, pd.mLine );
|
||||||
|
|
||||||
if ( CheckIfUncommented( pd, *mpMacroIdx ) )
|
AppendMulitilineStr( body, coloredLine );
|
||||||
return;
|
|
||||||
|
|
||||||
string body;
|
body += mTags[TAG_FIXED_FONT].end;
|
||||||
body += mTags[TAG_FIXED_FONT].start;
|
|
||||||
|
|
||||||
string coloredLine = pd.mLine;
|
AppendComments( pd, body );
|
||||||
AppendHighlightedSource( coloredLine, pd.mLine );
|
|
||||||
|
|
||||||
AppendMulitilineStr( body, coloredLine );
|
mpMacroIdx->AddSection(
|
||||||
|
new ScriptSection( pd.GetName(), body,
|
||||||
body += mTags[TAG_FIXED_FONT].end;
|
&mSubContentTempl,
|
||||||
|
GetRefTemplFor( pd ) ), true
|
||||||
AppendComments( pd, body );
|
);
|
||||||
|
|
||||||
mpMacroIdx->AddSection(
|
|
||||||
new ScriptSection( pd.GetName(), body,
|
|
||||||
&mSubContentTempl,
|
|
||||||
GetRefTemplFor( pd ) ), TRUE
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::VisitClass( spClass& cl )
|
void RipperDocGen::VisitClass( spClass& cl )
|
||||||
{
|
{
|
||||||
// FOR NOW:: do not document nested classes -
|
// FOR NOW:: do not document nested classes -
|
||||||
// nicier visiting method yet needed
|
// nicier visiting method yet needed
|
||||||
|
|
||||||
if ( cl.IsInClass() )
|
if ( cl.IsInClass() )
|
||||||
{
|
{
|
||||||
SkipChildren(); // spVisitor's method
|
SkipChildren(); // spVisitor's method
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string body;
|
string body;
|
||||||
AppendComments( cl, body );
|
AppendComments( cl, body );
|
||||||
|
|
||||||
mpCurClassSect =
|
mpCurClassSect =
|
||||||
new ScriptSection( cl.GetName(), body, &mSuperContentTempl, &mRefTempl );
|
new ScriptSection( cl.GetName(), body, &mSuperContentTempl, &mRefTempl );
|
||||||
|
|
||||||
// set up reference in the class context, pointing back
|
// set up reference in the class context, pointing back
|
||||||
// to the section where this class is represented
|
// to the section where this class is represented
|
||||||
cl.SetUserData( mpCurClassSect );
|
cl.SetUserData( mpCurClassSect );
|
||||||
|
|
||||||
ScriptSection* pSuper = new ScriptSection( "Derived from" ,"", &mOutLine1Templ,0, 1 );
|
ScriptSection* pSuper = new ScriptSection( "Derived from" ,"", &mOutLine1Templ,0, 1 );
|
||||||
|
|
||||||
ScriptSection* pPublic = new ScriptSection( "Public members" ,"", &mOutLineTempl,0, 1 );
|
ScriptSection* pPublic = new ScriptSection( "Public members" ,"", &mOutLineTempl,0, 1 );
|
||||||
ScriptSection* pProtected = new ScriptSection( "Protected members" ,"", &mOutLineTempl,0, 1 );
|
ScriptSection* pProtected = new ScriptSection( "Protected members" ,"", &mOutLineTempl,0, 1 );
|
||||||
ScriptSection* pPrivate = new ScriptSection( "Private members" ,"", &mOutLineTempl,0, 1 );
|
ScriptSection* pPrivate = new ScriptSection( "Private members" ,"", &mOutLineTempl,0, 1 );
|
||||||
|
|
||||||
pPublic->AddSection( new ScriptSection( "Operations", "", &mOutLine1Templ, 0, 1 ) );
|
pPublic->AddSection( new ScriptSection( "Operations", "", &mOutLine1Templ, 0, 1 ) );
|
||||||
pPublic->AddSection( new ScriptSection( "Attributes", "", &mOutLine1Templ, 0, 1 ) );
|
pPublic->AddSection( new ScriptSection( "Attributes", "", &mOutLine1Templ, 0, 1 ) );
|
||||||
|
|
||||||
|
pProtected->AddSection( new ScriptSection( "Operations", "", &mOutLine1Templ, 0, 1 ) );
|
||||||
|
pProtected->AddSection( new ScriptSection( "Attributes", "", &mOutLine1Templ, 0, 1 ) );
|
||||||
|
|
||||||
pProtected->AddSection( new ScriptSection( "Operations", "", &mOutLine1Templ, 0, 1 ) );
|
pPrivate->AddSection( new ScriptSection( "Operations", "", &mOutLine1Templ, 0, 1 ) );
|
||||||
pProtected->AddSection( new ScriptSection( "Attributes", "", &mOutLine1Templ, 0, 1 ) );
|
pPrivate->AddSection( new ScriptSection( "Attributes", "", &mOutLine1Templ, 0, 1 ) );
|
||||||
|
|
||||||
|
mpCurClassSect->AddSection( pSuper );
|
||||||
|
mpCurClassSect->AddSection( pPublic );
|
||||||
|
mpCurClassSect->AddSection( pProtected );
|
||||||
|
mpCurClassSect->AddSection( pPrivate );
|
||||||
|
|
||||||
pPrivate->AddSection( new ScriptSection( "Operations", "", &mOutLine1Templ, 0, 1 ) );
|
mpClassIdx->AddSection( mpCurClassSect, true );
|
||||||
pPrivate->AddSection( new ScriptSection( "Attributes", "", &mOutLine1Templ, 0, 1 ) );
|
|
||||||
|
|
||||||
mpCurClassSect->AddSection( pSuper );
|
|
||||||
mpCurClassSect->AddSection( pPublic );
|
|
||||||
mpCurClassSect->AddSection( pProtected );
|
|
||||||
mpCurClassSect->AddSection( pPrivate );
|
|
||||||
|
|
||||||
mpClassIdx->AddSection( mpCurClassSect, TRUE );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::VisitAttribute( spAttribute& attr )
|
void RipperDocGen::VisitAttribute( spAttribute& attr )
|
||||||
{
|
{
|
||||||
string body;
|
string body;
|
||||||
body += mTags[TAG_BOLD].start;
|
body += mTags[TAG_BOLD].start;
|
||||||
body += attr.mType;
|
body += attr.mType;
|
||||||
body += mTags[TAG_BOLD].end;
|
body += mTags[TAG_BOLD].end;
|
||||||
|
|
||||||
body += mTags[TAG_ITALIC].start;
|
body += mTags[TAG_ITALIC].start;
|
||||||
body += ' ';
|
body += ' ';
|
||||||
body += attr.GetName();
|
body += attr.GetName();
|
||||||
body += mTags[TAG_ITALIC].end;
|
body += mTags[TAG_ITALIC].end;
|
||||||
|
|
||||||
string line;
|
string line;
|
||||||
AppendHighlightedSource( line, body );
|
AppendHighlightedSource( line, body );
|
||||||
AppendComments( attr, line );
|
AppendComments( attr, line );
|
||||||
|
|
||||||
ScriptSection* pSection =
|
ScriptSection* pSection =
|
||||||
new ScriptSection( GetScopedName( attr ), line,
|
new ScriptSection( GetScopedName( attr ), line,
|
||||||
&mSubContentTempl,
|
&mSubContentTempl,
|
||||||
GetRefTemplFor( attr ) );
|
GetRefTemplFor( attr ) );
|
||||||
|
|
||||||
if ( attr.mIsConstant )
|
if ( attr.mIsConstant )
|
||||||
|
mpConstIdx->AddSection( pSection, true );
|
||||||
mpConstIdx->AddSection( pSection, TRUE );
|
else
|
||||||
|
if ( !attr.IsInClass() )
|
||||||
else
|
{
|
||||||
if ( !attr.IsInClass() )
|
if ( CheckIfUncommented( attr, *mpGlobalVarsIdx ) )
|
||||||
{
|
return;
|
||||||
if ( CheckIfUncommented( attr, *mpGlobalVarsIdx ) )
|
mpGlobalVarsIdx->AddSection( pSection, true );
|
||||||
return;
|
}
|
||||||
|
else
|
||||||
mpGlobalVarsIdx->AddSection( pSection, TRUE );
|
AddToCurrentClass( pSection, attr, "Attributes" );
|
||||||
}
|
|
||||||
else
|
|
||||||
|
|
||||||
AddToCurrentClass( pSection, attr, "Attributes" );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RipperDocGen::VisitOperation( spOperation& op )
|
void RipperDocGen::VisitOperation( spOperation& op )
|
||||||
{
|
{
|
||||||
string body;
|
string body;
|
||||||
|
|
||||||
AppendHighlightedSource( body, op.GetFullName(mTags) );
|
AppendHighlightedSource( body, op.GetFullName(mTags) );
|
||||||
|
|
||||||
AppendComments( op, body );
|
AppendComments( op, body );
|
||||||
|
|
||||||
ScriptSection* pSection =
|
ScriptSection* pSection =
|
||||||
new ScriptSection( GetScopedName( op ), body,
|
new ScriptSection( GetScopedName( op ), body,
|
||||||
&mSubContentTempl,
|
&mSubContentTempl,
|
||||||
GetRefTemplFor( op ) );
|
GetRefTemplFor( op ) );
|
||||||
|
|
||||||
if ( !op.IsInClass() )
|
if ( !op.IsInClass() )
|
||||||
{
|
{
|
||||||
if ( CheckIfUncommented( op, *mpGlobalFuncIdx ) )
|
if ( CheckIfUncommented( op, *mpGlobalFuncIdx ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mpGlobalFuncIdx->AddSection( pSection, 1 );
|
mpGlobalFuncIdx->AddSection( pSection, 1 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
AddToCurrentClass( pSection, op, "Operations" );
|
AddToCurrentClass( pSection, op, "Operations" );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RipperDocGen::OnSaveDocument( ScriptStream& stm )
|
bool RipperDocGen::OnSaveDocument( ScriptStream& WXUNUSED(stm) )
|
||||||
{
|
{
|
||||||
LinkSuperClassRefs();
|
LinkSuperClassRefs();
|
||||||
|
|
||||||
// FOR NOW:: doesn't work yet
|
// FOR NOW:: doesn't work yet
|
||||||
//mpTopIdx->RemoveEmptySections();
|
//mpTopIdx->RemoveEmptySections();
|
||||||
|
|
||||||
return 1; // saving can proceed now
|
return 1; // saving can proceed now
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
// Created: 22/09/98
|
// Created: 22/09/98
|
||||||
// RCS-ID: $Id$
|
// RCS-ID: $Id$
|
||||||
// Copyright: (c) Aleskandars Gluchovas
|
// Copyright: (c) Aleskandars Gluchovas
|
||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// For compilers that support precompilation, includes "wx/wx.h".
|
// For compilers that support precompilation, includes "wx/wx.h".
|
||||||
@@ -35,284 +35,284 @@
|
|||||||
|
|
||||||
static size_t log2(size_t nr)
|
static size_t log2(size_t nr)
|
||||||
{
|
{
|
||||||
size_t tmp = 0;
|
size_t tmp = 0;
|
||||||
while (nr >= 2 )
|
while (nr >= 2 )
|
||||||
{
|
{
|
||||||
nr /= 2;
|
nr /= 2;
|
||||||
++tmp;
|
++tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Implementation for class ScriptStream *****/
|
/***** Implementation for class ScriptStream *****/
|
||||||
|
|
||||||
ScriptStream::ScriptStream()
|
ScriptStream::ScriptStream()
|
||||||
: mpBuf(0),
|
: mpBuf(0),
|
||||||
mSize(0),
|
mSize(0),
|
||||||
mCapacity(0)
|
mCapacity(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ScriptStream::~ScriptStream()
|
ScriptStream::~ScriptStream()
|
||||||
{
|
{
|
||||||
if ( mpBuf ) delete mpBuf;
|
if ( mpBuf ) delete mpBuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptStream::WriteBytes( const void* srcBuf, size_t count )
|
void ScriptStream::WriteBytes( const void* srcBuf, size_t count )
|
||||||
{
|
{
|
||||||
if ( !count ) return;
|
if ( !count ) return;
|
||||||
|
|
||||||
// increase the capacity if necessary
|
// increase the capacity if necessary
|
||||||
if ( mSize + count > mCapacity )
|
if ( mSize + count > mCapacity )
|
||||||
{
|
{
|
||||||
mCapacity =
|
mCapacity =
|
||||||
( 0x2 << (log2( mSize + count ) + 1 ) );
|
( 0x2 << (log2( mSize + count ) + 1 ) );
|
||||||
|
|
||||||
if ( mCapacity < 128 ) mCapacity = 128;
|
if ( mCapacity < 128 ) mCapacity = 128;
|
||||||
|
|
||||||
char* oldBuf = mpBuf;
|
char* oldBuf = mpBuf;
|
||||||
|
|
||||||
mpBuf = new char[mCapacity];
|
mpBuf = new char[mCapacity];
|
||||||
|
|
||||||
if ( oldBuf )
|
if ( oldBuf )
|
||||||
{
|
{
|
||||||
memcpy( mpBuf, oldBuf, mSize );
|
memcpy( mpBuf, oldBuf, mSize );
|
||||||
delete oldBuf;
|
delete oldBuf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// append new data
|
// append new data
|
||||||
memcpy( &mpBuf[mSize], srcBuf, count );
|
memcpy( &mpBuf[mSize], srcBuf, count );
|
||||||
|
|
||||||
mSize += count;
|
mSize += count;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptStream& ScriptStream::operator<<( const char* str )
|
ScriptStream& ScriptStream::operator<<( const char* str )
|
||||||
{
|
{
|
||||||
WriteBytes( str, strlen( str ) );
|
WriteBytes( str, strlen( str ) );
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptStream& ScriptStream::operator<<( const string& str )
|
ScriptStream& ScriptStream::operator<<( const string& str )
|
||||||
{
|
{
|
||||||
if ( str.length() < 512 )
|
if ( str.length() < 512 )
|
||||||
{
|
{
|
||||||
char buf[512];
|
char buf[512];
|
||||||
size_t len = str.length();
|
size_t len = str.length();
|
||||||
|
|
||||||
for( size_t i = 0; i != len; ++i )
|
for( size_t i = 0; i != len; ++i )
|
||||||
buf[i] = str[i];
|
buf[i] = str[i];
|
||||||
|
|
||||||
WriteBytes( buf, len );
|
WriteBytes( buf, len );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
WriteBytes( str.c_str(), str.length() );
|
WriteBytes( str.c_str(), str.length() );
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptStream& ScriptStream::operator<<( char ch )
|
ScriptStream& ScriptStream::operator<<( char ch )
|
||||||
{
|
{
|
||||||
WriteBytes( &ch, 1 );
|
WriteBytes( &ch, 1 );
|
||||||
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptStream::endl()
|
void ScriptStream::endl()
|
||||||
{
|
{
|
||||||
char ch = '\n';
|
char ch = '\n';
|
||||||
WriteBytes( &ch, 1 );
|
WriteBytes( &ch, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Implementation for class ScriptTemplate *****/
|
/***** Implementation for class ScriptTemplate *****/
|
||||||
|
|
||||||
ScriptTemplate::ScriptTemplate( const string& templateText )
|
ScriptTemplate::ScriptTemplate( const string& templateText )
|
||||||
{
|
{
|
||||||
string tmp = templateText;
|
string tmp = templateText;
|
||||||
|
|
||||||
mTText = (char*)malloc( tmp.length() + 1 );
|
mTText = (char*)malloc( tmp.length() + 1 );
|
||||||
|
|
||||||
strcpy( mTText, tmp.c_str() );
|
strcpy( mTText, tmp.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptTemplate::~ScriptTemplate()
|
ScriptTemplate::~ScriptTemplate()
|
||||||
{
|
{
|
||||||
for( size_t i = 0; i != mVars.size(); ++i )
|
for( size_t i = 0; i != mVars.size(); ++i )
|
||||||
|
|
||||||
delete mVars[i];
|
delete mVars[i];
|
||||||
|
|
||||||
free( mTText );
|
free( mTText );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScriptTemplate::HasVar( const char* name )
|
bool ScriptTemplate::HasVar( const char* name )
|
||||||
{
|
{
|
||||||
for( size_t i = 0; i != mVars.size(); ++i )
|
for( size_t i = 0; i != mVars.size(); ++i )
|
||||||
|
|
||||||
if ( strcmp( mVars[i]->mName, name ) == 0 )
|
if ( strcmp( mVars[i]->mName, name ) == 0 )
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptTemplate::AddStringVar ( const char* name, int ofs )
|
void ScriptTemplate::AddStringVar ( const char* name, int ofs )
|
||||||
{
|
{
|
||||||
mVars.push_back( new TVarInfo( name, ofs, TVAR_STRING ) );
|
mVars.push_back( new TVarInfo( name, ofs, TVAR_STRING ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptTemplate::AddIntegerVar( const char* name, int ofs )
|
void ScriptTemplate::AddIntegerVar( const char* name, int ofs )
|
||||||
{
|
{
|
||||||
mVars.push_back( new TVarInfo( name, ofs, TVAR_INTEGER ) );
|
mVars.push_back( new TVarInfo( name, ofs, TVAR_INTEGER ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptTemplate::AddDoubleVar ( const char* name, int ofs )
|
void ScriptTemplate::AddDoubleVar ( const char* name, int ofs )
|
||||||
{
|
{
|
||||||
mVars.push_back( new TVarInfo( name, ofs, TVAR_DOUBLE ) );
|
mVars.push_back( new TVarInfo( name, ofs, TVAR_DOUBLE ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptTemplate::AddObjectRefArray( const char* name,
|
void ScriptTemplate::AddObjectRefArray( const char* name,
|
||||||
int ofsRefToFirstObj,
|
int ofsRefToFirstObj,
|
||||||
int ofsObjSizeInt,
|
int ofsObjSizeInt,
|
||||||
int ofsObjRefTempl
|
int ofsObjRefTempl
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
TArrayInfo* pInfo = new TArrayInfo( name );
|
TArrayInfo* pInfo = new TArrayInfo( name );
|
||||||
|
|
||||||
mVars.push_back( pInfo );
|
mVars.push_back( pInfo );
|
||||||
|
|
||||||
pInfo->mRefOfs = ofsRefToFirstObj;
|
pInfo->mRefOfs = ofsRefToFirstObj;
|
||||||
pInfo->mSizeIntOfs = ofsObjSizeInt;
|
pInfo->mSizeIntOfs = ofsObjSizeInt;
|
||||||
pInfo->mObjRefTemplOfs = ofsObjRefTempl;
|
pInfo->mObjRefTemplOfs = ofsObjRefTempl;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void ScriptTemplate::PrintVar( TVarInfo* pInfo,
|
inline void ScriptTemplate::PrintVar( TVarInfo* pInfo,
|
||||||
void* dataObj,
|
void* dataObj,
|
||||||
ScriptStream& stm )
|
ScriptStream& stm )
|
||||||
{
|
{
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
switch ( pInfo->mType )
|
switch ( pInfo->mType )
|
||||||
{
|
{
|
||||||
case TVAR_INTEGER :
|
case TVAR_INTEGER :
|
||||||
{
|
{
|
||||||
sprintf(buf, "%d",*( (int*) ((char*)dataObj + pInfo->mOfs) ) );
|
sprintf(buf, "%d",*( (int*) ((char*)dataObj + pInfo->mOfs) ) );
|
||||||
|
|
||||||
stm.WriteBytes( buf, strlen(buf ) );
|
stm.WriteBytes( buf, strlen(buf ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TVAR_STRING :
|
case TVAR_STRING :
|
||||||
{
|
{
|
||||||
string& str = *( (string*) ((char*)dataObj+pInfo->mOfs) );
|
string& str = *( (string*) ((char*)dataObj+pInfo->mOfs) );
|
||||||
|
|
||||||
const char* cs = str.c_str();
|
const char* cs = str.c_str();
|
||||||
#ifdef DEBUG_WEIRED_OFFSETS
|
#ifdef DEBUG_WEIRED_OFFSETS
|
||||||
cout << "DBG:: cs address is " << (int)cs << endl;
|
cout << "DBG:: cs address is " << (int)cs << endl;
|
||||||
cout << "DBG:: str address is " << (int)(&str) << endl;
|
cout << "DBG:: str address is " << (int)(&str) << endl;
|
||||||
cout << "DBG:: dataObj points to " << (int)dataObj << endl;
|
cout << "DBG:: dataObj points to " << (int)dataObj << endl;
|
||||||
cout << "DBG:: pInfo->mOfs value is " << (int)pInfo->mOfs << endl;
|
cout << "DBG:: pInfo->mOfs value is " << (int)pInfo->mOfs << endl;
|
||||||
cout << "DBG:: d+pInfo->mOfs is " << (int)((char*)dataObj + pInfo->mOfs) << endl;
|
cout << "DBG:: d+pInfo->mOfs is " << (int)((char*)dataObj + pInfo->mOfs) << endl;
|
||||||
cout << "DBG:: pInfo->mName is " << pInfo->mName << endl;
|
cout << "DBG:: pInfo->mName is " << pInfo->mName << endl;
|
||||||
cout << "DBG:: pInfo->mType is " << pInfo->mType << endl;
|
cout << "DBG:: pInfo->mType is " << pInfo->mType << endl;
|
||||||
cout << "DBG:: end of dump. " << endl;
|
cout << "DBG:: end of dump. " << endl;
|
||||||
|
|
||||||
cout << "DBG:: cs value is " << endl << cs << endl;
|
cout << "DBG:: cs value is " << endl << cs << endl;
|
||||||
#endif
|
#endif
|
||||||
stm.WriteBytes( cs, strlen(cs) );
|
stm.WriteBytes( cs, strlen(cs) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TVAR_DOUBLE :
|
case TVAR_DOUBLE :
|
||||||
{
|
{
|
||||||
sprintf( buf, "%f",
|
sprintf( buf, "%f",
|
||||||
*( (double*)( (char*)dataObj+pInfo->mOfs) ) );
|
*( (double*)( (char*)dataObj+pInfo->mOfs) ) );
|
||||||
|
|
||||||
stm.WriteBytes( buf, strlen(buf ) );
|
stm.WriteBytes( buf, strlen(buf ) );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case TVAR_REF_ARRAY :
|
case TVAR_REF_ARRAY :
|
||||||
{
|
{
|
||||||
TArrayInfo& info = *((TArrayInfo*)pInfo);
|
TArrayInfo& info = *((TArrayInfo*)pInfo);
|
||||||
|
|
||||||
int sz = *((int*) ( (char*)dataObj+info.mSizeIntOfs ));
|
int sz = *((int*) ( (char*)dataObj+info.mSizeIntOfs ));
|
||||||
if ( !sz )
|
if ( !sz )
|
||||||
{
|
{
|
||||||
// DBG::
|
// DBG::
|
||||||
int u = 0;
|
int u = 0;
|
||||||
++u;
|
++u;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int* array = *((int**)( (char*)dataObj+info.mRefOfs ));
|
int* array = *((int**)( (char*)dataObj+info.mRefOfs ));
|
||||||
|
|
||||||
ScriptTemplate* pRefTempl;
|
ScriptTemplate* pRefTempl;
|
||||||
|
|
||||||
for( int i = 0; i != sz; ++i )
|
for( int i = 0; i != sz; ++i )
|
||||||
{
|
{
|
||||||
pRefTempl =
|
pRefTempl =
|
||||||
*((ScriptTemplate**)((char*)(array[i])+info.mObjRefTemplOfs));
|
*((ScriptTemplate**)((char*)(array[i])+info.mObjRefTemplOfs));
|
||||||
|
|
||||||
pRefTempl->PrintScript( (void*)array[i], stm );
|
pRefTempl->PrintScript( (void*)array[i], stm );
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default : break;
|
default : break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptTemplate::PrintScript( void* dataObj, ScriptStream& stm )
|
void ScriptTemplate::PrintScript( void* dataObj, ScriptStream& stm )
|
||||||
{
|
{
|
||||||
char* cur = mTText;
|
char* cur = mTText;
|
||||||
|
|
||||||
// template parsing loop
|
// template parsing loop
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
char* start = cur;
|
char* start = cur;
|
||||||
|
|
||||||
while( *cur != '\0' && *cur != '$' ) ++cur;
|
while( *cur != '\0' && *cur != '$' ) ++cur;
|
||||||
|
|
||||||
// flush text collected between variables
|
// flush text collected between variables
|
||||||
stm.WriteBytes( start, cur - start );
|
stm.WriteBytes( start, cur - start );
|
||||||
|
|
||||||
if ( *cur == '\0' ) break;
|
if ( *cur == '\0' ) break;
|
||||||
|
|
||||||
cur += 2; // skip to the name of the var
|
cur += 2; // skip to the name of the var
|
||||||
|
|
||||||
start = cur;
|
start = cur;
|
||||||
|
|
||||||
while( *cur != ')' ) ++cur;
|
while( *cur != ')' ) ++cur;
|
||||||
|
|
||||||
// put terminating zero temorarely
|
// put terminating zero temorarely
|
||||||
|
|
||||||
*cur = '\0';
|
*cur = '\0';
|
||||||
|
|
||||||
// look up variable
|
// look up variable
|
||||||
|
|
||||||
size_t sz = mVars.size();
|
size_t sz = mVars.size();
|
||||||
bool found = 0;
|
// bool found = false;
|
||||||
|
|
||||||
for( size_t i = 0; i != sz; ++i )
|
for( size_t i = 0; i != sz; ++i )
|
||||||
{
|
{
|
||||||
if ( strcmp( mVars[i]->mName, start ) == 0 )
|
if ( strcmp( mVars[i]->mName, start ) == 0 )
|
||||||
{
|
{
|
||||||
PrintVar( mVars[i], dataObj, stm );
|
PrintVar( mVars[i], dataObj, stm );
|
||||||
|
|
||||||
*cur = ')'; // remove terminating zero
|
*cur = ')'; // remove terminating zero
|
||||||
++cur;
|
++cur;
|
||||||
found = 1;
|
// found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// variable referred by template script is not
|
// variable referred by template script is not
|
||||||
// registered to this tempalte object
|
// registered to this tempalte object
|
||||||
// ASSERT( found );
|
// ASSERT( found );
|
||||||
|
|
||||||
} while(1);
|
} while(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** implementation for class ScriptSection *****/
|
/***** implementation for class ScriptSection *****/
|
||||||
@@ -320,301 +320,301 @@ void ScriptTemplate::PrintScript( void* dataObj, ScriptStream& stm )
|
|||||||
int ScriptSection::mIdCounter = 0;
|
int ScriptSection::mIdCounter = 0;
|
||||||
|
|
||||||
ScriptSection::ScriptSection( const string& name,
|
ScriptSection::ScriptSection( const string& name,
|
||||||
const string& body,
|
const string& body,
|
||||||
ScriptTemplate* pSectionTemplate,
|
ScriptTemplate* pSectionTemplate,
|
||||||
ScriptTemplate* pReferenceTemplate,
|
ScriptTemplate* pReferenceTemplate,
|
||||||
bool autoHide,
|
bool autoHide,
|
||||||
bool sorted
|
bool sorted
|
||||||
)
|
)
|
||||||
: mpParent ( NULL ),
|
: mpParent ( NULL ),
|
||||||
|
|
||||||
mName ( name ),
|
mName ( name ),
|
||||||
mBody ( body ),
|
mBody ( body ),
|
||||||
|
|
||||||
mAutoHide( autoHide ),
|
mAutoHide( autoHide ),
|
||||||
mSortOn ( sorted ),
|
mSortOn ( sorted ),
|
||||||
|
|
||||||
mpSectTempl( pSectionTemplate ),
|
mpSectTempl( pSectionTemplate ),
|
||||||
mpRefTempl ( pReferenceTemplate ),
|
mpRefTempl ( pReferenceTemplate ),
|
||||||
|
|
||||||
mRefCount( 0 ),
|
mRefCount( 0 ),
|
||||||
mArrSize( 0 )
|
mArrSize( 0 )
|
||||||
{
|
{
|
||||||
// generate GUID
|
// generate GUID
|
||||||
|
|
||||||
char buf[32];
|
char buf[32];
|
||||||
sprintf( buf, "%d", ++mIdCounter );
|
sprintf( buf, "%d", ++mIdCounter );
|
||||||
mId = buf;
|
mId = buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptSection::~ScriptSection()
|
ScriptSection::~ScriptSection()
|
||||||
{
|
{
|
||||||
SectListT lst = mSubsections;
|
SectListT lst = mSubsections;
|
||||||
|
|
||||||
while( mSubsections.size() )
|
while( mSubsections.size() )
|
||||||
|
|
||||||
mSubsections[0]->RemoveRef();
|
mSubsections[0]->RemoveRef();
|
||||||
|
|
||||||
for( size_t i = 0; i != mReferences.size(); ++i )
|
for( size_t i = 0; i != mReferences.size(); ++i )
|
||||||
|
|
||||||
mReferences[i]->RemoveRef();
|
mReferences[i]->RemoveRef();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::AddRef()
|
void ScriptSection::AddRef()
|
||||||
{
|
{
|
||||||
++mRefCount;
|
++mRefCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::RemoveRef()
|
void ScriptSection::RemoveRef()
|
||||||
{
|
{
|
||||||
if ( !mRefCount || !(--mRefCount) )
|
if ( !mRefCount || !(--mRefCount) )
|
||||||
{
|
{
|
||||||
if (mpParent)
|
if (mpParent)
|
||||||
{
|
{
|
||||||
// remove ourselves from parent's list
|
// remove ourselves from parent's list
|
||||||
|
|
||||||
SectListT& lst = mpParent->mSubsections;
|
SectListT& lst = mpParent->mSubsections;
|
||||||
for( size_t i = 0; i != lst.size(); ++i )
|
for( size_t i = 0; i != lst.size(); ++i )
|
||||||
|
|
||||||
if ( lst[i] == this )
|
if ( lst[i] == this )
|
||||||
{
|
{
|
||||||
lst.erase( &lst[i] );
|
lst.erase( &lst[i] );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ScriptSection* ScriptSection::GetSubsection( const char* name )
|
ScriptSection* ScriptSection::GetSubsection( const char* name )
|
||||||
{
|
{
|
||||||
// FOR NOW:: fixed section name length
|
// FOR NOW:: fixed section name length
|
||||||
char buf[128];
|
char buf[128];
|
||||||
|
|
||||||
size_t cur = 0;
|
size_t cur = 0;
|
||||||
|
|
||||||
while( name[cur] && name[cur] != '/' )
|
while( name[cur] && name[cur] != '/' )
|
||||||
{
|
{
|
||||||
buf[cur] = name[cur];
|
buf[cur] = name[cur];
|
||||||
++cur;
|
++cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ASSERT( cur < sizeof(buf) );
|
// ASSERT( cur < sizeof(buf) );
|
||||||
|
|
||||||
buf[cur] = '\0';
|
buf[cur] = '\0';
|
||||||
|
|
||||||
size_t sz = mSubsections.size();
|
size_t sz = mSubsections.size();
|
||||||
|
|
||||||
for( size_t i = 0; i != sz; ++i )
|
for( size_t i = 0; i != sz; ++i )
|
||||||
{
|
{
|
||||||
// DBG::
|
// DBG::
|
||||||
//ScriptSection& sect = *mSubsections[i];
|
//ScriptSection& sect = *mSubsections[i];
|
||||||
|
|
||||||
if ( mSubsections[i]->mName == buf )
|
if ( mSubsections[i]->mName == buf )
|
||||||
{
|
{
|
||||||
if ( name[cur] == '/' )
|
if ( name[cur] == '/' )
|
||||||
|
|
||||||
// search recursivelly
|
// search recursivelly
|
||||||
return mSubsections[i]->GetSubsection( &name[cur+1] );
|
return mSubsections[i]->GetSubsection( &name[cur+1] );
|
||||||
else
|
else
|
||||||
return mSubsections[i];
|
return mSubsections[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::AddSection( ScriptSection* pSection,
|
void ScriptSection::AddSection( ScriptSection* pSection,
|
||||||
bool addToReferencesToo
|
bool addToReferencesToo
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mSubsections.push_back( pSection );
|
mSubsections.push_back( pSection );
|
||||||
|
|
||||||
pSection->AddRef();
|
pSection->AddRef();
|
||||||
|
|
||||||
// can add section to multiple containers
|
// can add section to multiple containers
|
||||||
// ASSERT( pSection->mpParent == 0 );
|
// ASSERT( pSection->mpParent == 0 );
|
||||||
|
|
||||||
pSection->mpParent = this;
|
pSection->mpParent = this;
|
||||||
|
|
||||||
if ( addToReferencesToo )
|
if ( addToReferencesToo )
|
||||||
|
|
||||||
AddReference( pSection );
|
AddReference( pSection );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::AddReference( ScriptSection* pReferredSection )
|
void ScriptSection::AddReference( ScriptSection* pReferredSection )
|
||||||
{
|
{
|
||||||
mReferences.push_back( pReferredSection );
|
mReferences.push_back( pReferredSection );
|
||||||
|
|
||||||
pReferredSection->AddRef();
|
pReferredSection->AddRef();
|
||||||
|
|
||||||
// set up mandatory fields used by ScriptTemplate
|
// set up mandatory fields used by ScriptTemplate
|
||||||
mArrSize = mReferences.size();
|
mArrSize = mReferences.size();
|
||||||
if ( mArrSize )
|
if ( mArrSize )
|
||||||
mRefFirst = (void*)&mReferences[0];
|
mRefFirst = (void*)&mReferences[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
SectListT& ScriptSection::GetSubsections()
|
SectListT& ScriptSection::GetSubsections()
|
||||||
{
|
{
|
||||||
return mSubsections;
|
return mSubsections;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static method:
|
// static method:
|
||||||
void ScriptSection::RegisterTemplate( ScriptTemplate& sectionTempalte )
|
void ScriptSection::RegisterTemplate( ScriptTemplate& sectionTempalte )
|
||||||
{
|
{
|
||||||
int nameOfs, bodyOfs, idOfs,
|
int nameOfs, bodyOfs, idOfs,
|
||||||
arrRefOfs, arrSizeOfs, refTemplOfs;
|
arrRefOfs, arrSizeOfs, refTemplOfs;
|
||||||
|
|
||||||
// obtaining offsets of member vars
|
// obtaining offsets of member vars
|
||||||
|
|
||||||
GET_VAR_OFS( ScriptSection, mName, &nameOfs )
|
GET_VAR_OFS( ScriptSection, mName, &nameOfs )
|
||||||
GET_VAR_OFS( ScriptSection, mBody, &bodyOfs )
|
GET_VAR_OFS( ScriptSection, mBody, &bodyOfs )
|
||||||
GET_VAR_OFS( ScriptSection, mId, &idOfs )
|
GET_VAR_OFS( ScriptSection, mId, &idOfs )
|
||||||
GET_VAR_OFS( ScriptSection, mRefFirst, &arrRefOfs )
|
GET_VAR_OFS( ScriptSection, mRefFirst, &arrRefOfs )
|
||||||
GET_VAR_OFS( ScriptSection, mArrSize, &arrSizeOfs )
|
GET_VAR_OFS( ScriptSection, mArrSize, &arrSizeOfs )
|
||||||
|
|
||||||
GET_VAR_OFS( ScriptSection, mpRefTempl, &refTemplOfs )
|
GET_VAR_OFS( ScriptSection, mpRefTempl, &refTemplOfs )
|
||||||
|
|
||||||
// registering member variables with given script template
|
// registering member variables with given script template
|
||||||
|
|
||||||
sectionTempalte.AddStringVar( "NAME", nameOfs );
|
sectionTempalte.AddStringVar( "NAME", nameOfs );
|
||||||
sectionTempalte.AddStringVar( "BODY", bodyOfs );
|
sectionTempalte.AddStringVar( "BODY", bodyOfs );
|
||||||
sectionTempalte.AddStringVar( "ID", idOfs );
|
sectionTempalte.AddStringVar( "ID", idOfs );
|
||||||
|
|
||||||
sectionTempalte.AddObjectRefArray( "REFLIST",
|
sectionTempalte.AddObjectRefArray( "REFLIST",
|
||||||
arrRefOfs, arrSizeOfs, refTemplOfs );
|
arrRefOfs, arrSizeOfs, refTemplOfs );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::Print( ScriptStream& stm )
|
void ScriptSection::Print( ScriptStream& stm )
|
||||||
{
|
{
|
||||||
// TBD:: sorting
|
// TBD:: sorting
|
||||||
|
|
||||||
// print out this content first
|
// print out this content first
|
||||||
if ( mpSectTempl )
|
if ( mpSectTempl )
|
||||||
|
|
||||||
mpSectTempl->PrintScript( this, stm );
|
mpSectTempl->PrintScript( this, stm );
|
||||||
|
|
||||||
// attach contents subsections at the end of this content
|
// attach contents subsections at the end of this content
|
||||||
|
|
||||||
for( size_t i = 0; i != mSubsections.size(); ++i )
|
for( size_t i = 0; i != mSubsections.size(); ++i )
|
||||||
|
|
||||||
mSubsections[i]->Print( stm );
|
mSubsections[i]->Print( stm );
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::DoRemoveEmptySections(int& nRemoved, SectListT& removedLst)
|
void ScriptSection::DoRemoveEmptySections(int& nRemoved, SectListT& removedLst)
|
||||||
{
|
{
|
||||||
for( size_t i = 0; i != mSubsections.size(); ++i )
|
for( size_t i = 0; i != mSubsections.size(); ++i )
|
||||||
{
|
{
|
||||||
ScriptSection& sect = *mSubsections[i];
|
ScriptSection& sect = *mSubsections[i];
|
||||||
|
|
||||||
sect.DoRemoveEmptySections( nRemoved, removedLst );
|
sect.DoRemoveEmptySections( nRemoved, removedLst );
|
||||||
|
|
||||||
if (sect.mAutoHide )
|
if (sect.mAutoHide )
|
||||||
|
|
||||||
if ( sect.mReferences.size() == 0 )
|
if ( sect.mReferences.size() == 0 )
|
||||||
{
|
{
|
||||||
bool found = 0;
|
bool found = false;
|
||||||
for( size_t k = 0; k != removedLst.size(); ++k )
|
for( size_t k = 0; k != removedLst.size(); ++k )
|
||||||
|
|
||||||
if ( removedLst[k] == § )
|
if ( removedLst[k] == § )
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !found )
|
if ( !found )
|
||||||
{
|
{
|
||||||
removedLst.push_back( § );
|
removedLst.push_back( § );
|
||||||
++nRemoved;
|
++nRemoved;
|
||||||
|
|
||||||
delete §
|
delete §
|
||||||
--i;
|
--i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScriptSection::DoRemoveDeadLinks( SectListT& removedLst)
|
void ScriptSection::DoRemoveDeadLinks( SectListT& removedLst)
|
||||||
{
|
{
|
||||||
size_t dsz = removedLst.size();
|
size_t dsz = removedLst.size();
|
||||||
|
|
||||||
for( size_t i = 0; i != mSubsections.size(); ++i )
|
for( size_t i = 0; i != mSubsections.size(); ++i )
|
||||||
{
|
{
|
||||||
mSubsections[i]->DoRemoveDeadLinks( removedLst );
|
mSubsections[i]->DoRemoveDeadLinks( removedLst );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( size_t n = 0; n != mReferences.size(); ++n )
|
for( size_t n = 0; n != mReferences.size(); ++n )
|
||||||
{
|
{
|
||||||
for( size_t k = 0; k != dsz; ++k )
|
for( size_t k = 0; k != dsz; ++k )
|
||||||
|
|
||||||
if ( removedLst[k] == mReferences[n] )
|
if ( removedLst[k] == mReferences[n] )
|
||||||
{
|
{
|
||||||
mReferences.erase( &mReferences[n] );
|
mReferences.erase( &mReferences[n] );
|
||||||
--n;
|
--n;
|
||||||
|
|
||||||
// set up mandatory fields used by ScriptTemplate
|
// set up mandatory fields used by ScriptTemplate
|
||||||
mArrSize = mReferences.size();
|
mArrSize = mReferences.size();
|
||||||
if ( mArrSize )
|
if ( mArrSize )
|
||||||
mRefFirst = (void*)&mReferences[0];
|
mRefFirst = (void*)&mReferences[0];
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ScriptSection::RemoveEmptySections()
|
void ScriptSection::RemoveEmptySections()
|
||||||
{
|
{
|
||||||
// FIXME:: this is very_very_very slow alg.! +"doesn't work"
|
// FIXME:: this is very_very_very slow alg.! +"doesn't work"
|
||||||
|
|
||||||
int nRemoved = 0;
|
int nRemoved = 0;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
SectListT removedLst;
|
SectListT removedLst;
|
||||||
nRemoved = 0;
|
nRemoved = 0;
|
||||||
|
|
||||||
DoRemoveEmptySections( nRemoved, removedLst );
|
DoRemoveEmptySections( nRemoved, removedLst );
|
||||||
|
|
||||||
DoRemoveDeadLinks( removedLst );
|
DoRemoveDeadLinks( removedLst );
|
||||||
}
|
}
|
||||||
while( nRemoved );
|
while( nRemoved );
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** Iimplementation for class DocGeneratorBase *****/
|
/***** Iimplementation for class DocGeneratorBase *****/
|
||||||
|
|
||||||
bool DocGeneratorBase::SaveDocument( const char* fname,
|
bool DocGeneratorBase::SaveDocument( const char* fname,
|
||||||
const char* fopenOptions,
|
const char* fopenOptions,
|
||||||
ScriptSection* pFromSection
|
ScriptSection* pFromSection
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
FILE* fp = fopen( fname, fopenOptions );
|
FILE* fp = fopen( fname, fopenOptions );
|
||||||
|
|
||||||
if ( (int)fp == -1 ) return 0;
|
if ( (int)fp == -1 ) return 0;
|
||||||
|
|
||||||
ScriptStream stm;
|
ScriptStream stm;
|
||||||
|
|
||||||
// check if derived class agrees about saving it
|
// check if derived class agrees about saving it
|
||||||
if ( !OnSaveDocument( stm ) ) return 0;
|
if ( !OnSaveDocument( stm ) ) return 0;
|
||||||
|
|
||||||
if ( pFromSection )
|
if ( pFromSection )
|
||||||
|
|
||||||
pFromSection->Print( stm );
|
pFromSection->Print( stm );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ScriptSection* pTopSect = GetTopSection();
|
ScriptSection* pTopSect = GetTopSection();
|
||||||
// ASSERT( pTopSect );
|
// ASSERT( pTopSect );
|
||||||
pTopSect->Print( stm );
|
pTopSect->Print( stm );
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t nWrite = fwrite( stm.GetBuf(), 1, stm.GetBufSize(), fp );
|
size_t nWrite = fwrite( stm.GetBuf(), 1, stm.GetBufSize(), fp );
|
||||||
|
|
||||||
if ( nWrite != stm.GetBufSize() ) return 0;
|
if ( nWrite != stm.GetBufSize() ) return 0;
|
||||||
|
|
||||||
fclose( fp );
|
fclose( fp );
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
// that^s it
|
// that^s it
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user