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:
Włodzimierz Skiba
2004-06-17 19:00:22 +00:00
parent e5a9c66398
commit 8ad74db31e
5 changed files with 1253 additions and 1280 deletions

View File

@@ -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(&current, '{') ) { if ( !SkipSpaceUntil(&current, '{') ) {
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(&current); wxString paramText = ExtractStringBetweenBraces(&current);
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

View File

@@ -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 )

View File

@@ -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
} }

View File

@@ -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] == &sect ) if ( removedLst[k] == &sect )
{ {
found = 1; found = 1;
break; break;
} }
if ( !found ) if ( !found )
{ {
removedLst.push_back( &sect ); removedLst.push_back( &sect );
++nRemoved; ++nRemoved;
delete &sect; delete &sect;
--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