X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eb7aa89b04707bc5334f78f5ab357fe96866e476..17fe68bd2399933e4418d914e07a8300d84e22a1:/utils/tex2rtf/src/texutils.cpp diff --git a/utils/tex2rtf/src/texutils.cpp b/utils/tex2rtf/src/texutils.cpp index ea888383fe..be0c83a28c 100644 --- a/utils/tex2rtf/src/texutils.cpp +++ b/utils/tex2rtf/src/texutils.cpp @@ -24,7 +24,11 @@ #include "wx/wx.h" #endif -#include +#include "wx/hash.h" + +#ifdef new +#undef new +#endif #if wxUSE_IOSTREAMH #include @@ -32,6 +36,7 @@ #else #include #include +using namespace std; #endif #include @@ -146,7 +151,7 @@ void ResetTopicCounter(void) static char *forceTopicName = NULL; -void ForceTopicName(char *name) +void ForceTopicName(const char *name) { if (forceTopicName) delete[] forceTopicName; @@ -239,9 +244,9 @@ int ParseUnitArgument(char *unitArg) if (strcmp(units, "in") == 0) conversionFactor = 72.0; else if (strcmp(units, "cm") == 0) - conversionFactor = 72.0/2.51; + conversionFactor = (float)72.0/(float)2.51; else if (strcmp(units, "mm") == 0) - conversionFactor = 72.0/25.1; + conversionFactor = (float)72.0/(float)25.1; else if (strcmp(units, "pt") == 0) conversionFactor = 1; } @@ -378,7 +383,7 @@ void AddTexRef(char *name, char *file, char *sectionName, void WriteTexReferences(char *filename) { - ofstream ostr(filename); + wxSTD ofstream ostr(filename); if (ostr.bad()) return; char buf[200]; @@ -402,11 +407,11 @@ void WriteTexReferences(char *filename) void ReadTexReferences(char *filename) { -#if !wxUSE_IOSTREAMH && __WXMSW__ - ifstream istr(filename, ios::in); -#else - ifstream istr(filename, ios::nocreate | ios::in); -#endif + if (!wxFileExists(filename)) + return; + + wxSTD ifstream istr(filename, wxSTD ios::in); + if (istr.bad()) return; char label[100]; @@ -432,7 +437,14 @@ void ReadTexReferences(char *filename) istr.get(ch); } section[i] = 0; + + // gt - needed to trick the hash table "TexReferences" into deleting the key + // strings it creates in the Put() function, but not the item that is + // created here, as that is destroyed elsewhere. Without doing this, there + // were massive memory leaks + TexReferences.DeleteContents(TRUE); TexReferences.Put(label, new TexRef(label, file, section, sectionName)); + TexReferences.DeleteContents(FALSE); } } } @@ -443,7 +455,7 @@ void ReadTexReferences(char *filename) * */ -void BibEatWhiteSpace(istream& str) +void BibEatWhiteSpace(wxSTD istream& str) { char ch = str.peek(); @@ -471,7 +483,7 @@ void BibEatWhiteSpace(istream& str) } // Read word up to { or , or space -void BibReadWord(istream& istr, char *buffer) +void BibReadWord(wxSTD istream& istr, char *buffer) { int i = 0; buffer[i] = 0; @@ -488,7 +500,7 @@ void BibReadWord(istream& istr, char *buffer) } // Read string (double-quoted or not) to end quote or EOL -void BibReadToEOL(istream& istr, char *buffer) +void BibReadToEOL(wxSTD istream& istr, char *buffer) { int i = 0; buffer[i] = 0; @@ -517,7 +529,7 @@ void BibReadToEOL(istream& istr, char *buffer) } // Read }-terminated value, taking nested braces into account. -void BibReadValue(istream& istr, char *buffer, bool ignoreBraces = TRUE, +void BibReadValue(wxSTD istream& istr, char *buffer, bool ignoreBraces = TRUE, bool quotesMayTerminate = TRUE) { int braceCount = 1; @@ -528,11 +540,12 @@ void BibReadValue(istream& istr, char *buffer, bool ignoreBraces = TRUE, while (!istr.eof() && !stopping) { // i ++; - if (i >= 2000) + if (i >= 4000) { char buf[100]; - sprintf(buf, "Sorry, value > 2000 chars in bib file at line %ld, terminating.", BibLine); - wxFatalError(buf, "Tex2RTF Fatal Error"); + sprintf(buf, "Sorry, value > 4000 chars in bib file at line %ld.", BibLine); + wxLogError(buf, "Tex2RTF Fatal Error"); + return; } istr.get(ch); @@ -569,12 +582,11 @@ void BibReadValue(istream& istr, char *buffer, bool ignoreBraces = TRUE, bool ReadBib(char *filename) { + if (!wxFileExists(filename)) + return FALSE; + char buf[300]; -#if !wxUSE_IOSTREAMH && __WXMSW__ - ifstream istr(filename, ios::in); -#else - ifstream istr(filename, ios::nocreate | ios::in); -#endif + wxSTD ifstream istr(filename, wxSTD ios::in); if (istr.bad()) return FALSE; BibLine = 1; @@ -582,7 +594,7 @@ bool ReadBib(char *filename) OnInform("Reading .bib file..."); char ch; - char fieldValue[2000]; + char fieldValue[4000]; char recordType[100]; char recordKey[100]; char recordField[100]; @@ -1132,7 +1144,7 @@ char *RegisterSetting(char *settingName, char *settingValue, bool interactive) else if (StringMatch(settingName, "authorFontSize", FALSE, TRUE)) StringToInt(settingValue, &authorFont); else if (StringMatch(settingName, "ignoreInput", FALSE, TRUE)) - IgnorableInputFiles.Add(FileNameFromPath(settingValue)); + IgnorableInputFiles.Add(wxFileNameFromPath(settingValue)); else if (StringMatch(settingName, "mirrorMargins", FALSE, TRUE)) mirrorMargins = StringTobool(settingValue); else if (StringMatch(settingName, "runTwice", FALSE, TRUE)) @@ -1167,10 +1179,24 @@ char *RegisterSetting(char *settingName, char *settingValue, bool interactive) winHelpContents = StringTobool(settingValue); else if (StringMatch(settingName, "htmlIndex", FALSE, TRUE)) htmlIndex = StringTobool(settingValue); + else if (StringMatch(settingName, "htmlWorkshopFiles", FALSE, TRUE)) + htmlWorkshopFiles = StringTobool(settingValue); else if (StringMatch(settingName, "htmlFrameContents", FALSE, TRUE)) htmlFrameContents = StringTobool(settingValue); + else if (StringMatch(settingName, "htmlStylesheet", FALSE, TRUE)) + { + if (htmlStylesheet) delete[] htmlStylesheet; + htmlStylesheet = copystring(settingValue); + } else if (StringMatch(settingName, "upperCaseNames", FALSE, TRUE)) upperCaseNames = StringTobool(settingValue); + else if (StringMatch(settingName, "ignoreBadRefs", FALSE, TRUE)) + ignoreBadRefs = StringTobool(settingValue); + else if (StringMatch(settingName, "htmlFaceName", FALSE, TRUE)) + { + delete[] htmlFaceName; + htmlFaceName = copystring(settingValue); + } else if (StringMatch(settingName, "winHelpTitle", FALSE, TRUE)) { if (winHelpTitle) @@ -1291,11 +1317,11 @@ char *RegisterSetting(char *settingName, char *settingValue, bool interactive) bool ReadCustomMacros(char *filename) { -#if !wxUSE_IOSTREAMH && __WXMSW__ - ifstream istr(filename, ios::in); -#else - ifstream istr(filename, ios::nocreate | ios::in); -#endif + if (!wxFileExists(filename)) + return FALSE; + + wxSTD ifstream istr(filename, wxSTD ios::in); + if (istr.bad()) return FALSE; CustomMacroList.Clear(); @@ -1451,7 +1477,7 @@ char *ParseMultifieldString(char *allFields, int *pos) * */ -ColourTableEntry::ColourTableEntry(char *theName, unsigned int r, unsigned int g, unsigned int b) +ColourTableEntry::ColourTableEntry(const char *theName, unsigned int r, unsigned int g, unsigned int b) { name = copystring(theName); red = r; @@ -1464,7 +1490,7 @@ ColourTableEntry::~ColourTableEntry(void) delete[] name; } -void AddColour(char *theName, unsigned int r, unsigned int g, unsigned int b) +void AddColour(const char *theName, unsigned int r, unsigned int g, unsigned int b) { wxNode *node = ColourTable.Find(theName); if (node) @@ -1555,23 +1581,24 @@ void InitialiseColourTable(void) * The purpose of this is to reduce the number of times wxYield is * called, since under Windows this can slow things down. */ - -static int yieldCount = 0; void Tex2RTFYield(bool force) { #ifdef __WXMSW__ - if (isSync) - return; + static int yieldCount = 0; - if (force) - yieldCount = 0; - if (yieldCount == 0) - { - wxYield(); - yieldCount = 10; - } - yieldCount --; + if (isSync) + return; + + if (force) + yieldCount = 0; + if (yieldCount == 0) + { + if (wxTheApp) + wxYield(); + yieldCount = 10; + } + yieldCount --; #endif } @@ -1638,10 +1665,32 @@ char *ConvertCase(char *s) int i; if (upperCaseNames) for (i = 0; i < len; i ++) - buf[i] = wxToUpper(s[i]); + buf[i] = toupper(s[i]); else for (i = 0; i < len; i ++) - buf[i] = wxToLower(s[i]); + buf[i] = tolower(s[i]); buf[i] = 0; return buf; } + +#if !WXWIN_COMPATIBILITY_2 +// if substring is TRUE, search for str1 in str2 +bool StringMatch(const wxChar *str1, const wxChar *str2, bool subString, + bool exact) +{ + if (subString) + { + wxString Sstr1(str1); + wxString Sstr2(str2); + if (!exact) + { + Sstr1.MakeUpper(); + Sstr2.MakeUpper(); + } + return Sstr2.Index(Sstr1) != wxNOT_FOUND; + } + else + return exact ? wxString(str2).Cmp(str1) == 0 : + wxString(str2).CmpNoCase(str1) == 0; +} +#endif