X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6c155d33875eb3641bf845fbac186c1b5470708e..a3c8c017cf6cf74dbc89b6c93f6f872e45c74cad:/utils/tex2rtf/src/texutils.cpp diff --git a/utils/tex2rtf/src/texutils.cpp b/utils/tex2rtf/src/texutils.cpp index 3812ba7e40..0735b06994 100644 --- a/utils/tex2rtf/src/texutils.cpp +++ b/utils/tex2rtf/src/texutils.cpp @@ -2,17 +2,14 @@ // Name: texutils.cpp // Purpose: Miscellaneous utilities // Author: Julian Smart -// Modified by: +// Modified by: Wlodzimiez ABX Skiba 2003/2004 Unicode support +// Ron Lee // Created: 7.9.93 // RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -26,6 +23,7 @@ #include "wx/app.h" #include "wx/hash.h" +#include "wx/textfile.h" #ifdef new #undef new @@ -46,11 +44,6 @@ using namespace std; #if !WXWIN_COMPATIBILITY_2_4 static inline wxChar* copystring(const wxChar* s) { return wxStrcpy(new wxChar[wxStrlen(s) + 1], s); } -static inline void StringToInt (const wxChar *s, int *number) -{ - if (s && *s && number) - *number = (int) wxStrtol (s, (wxChar **) NULL, 10); -} #endif wxHashTable TexReferences(wxKEY_STRING); @@ -87,20 +80,20 @@ void OutputChunkToString(TexChunk *chunk, wxChar *buf) FILE *tempfd = wxFopen(_T("tmp.tmp"), _T("w")); if (!tempfd) return; - + FILE *old1 = CurrentOutput1; FILE *old2 = CurrentOutput2; - + CurrentOutput1 = tempfd; CurrentOutput2 = NULL; - + TraverseChildrenFromChunk(chunk); - + CurrentOutput1 = old1; CurrentOutput2 = old2; - + fclose(tempfd); - + // Read from file into string tempfd = wxFopen(_T("tmp.tmp"), _T("r")); if (!tempfd) @@ -116,7 +109,7 @@ void OutputChunkToString(TexChunk *chunk, wxChar *buf) buf[i] = 0; else { - buf[i] = ch; + buf[i] = (wxChar)ch; i ++; } } @@ -136,16 +129,16 @@ void FakeCurrentSection(wxChar *fakeSection, bool addToContents) int mac = ltSECTIONHEADING; if (!addToContents) mac = ltSECTIONHEADINGSTAR; - OnMacro(mac, 0, TRUE); - OnMacro(mac, 0, FALSE); + OnMacro(mac, 0, true); + OnMacro(mac, 0, false); } else { int mac = ltCHAPTERHEADING; if (!addToContents) mac = ltCHAPTERHEADINGSTAR; - OnMacro(mac, 0, TRUE); - OnMacro(mac, 0, FALSE); + OnMacro(mac, 0, true); + OnMacro(mac, 0, false); } if (fakeCurrentSection) delete[] fakeCurrentSection; fakeCurrentSection = NULL; @@ -176,7 +169,7 @@ wxChar *FindTopicName(TexChunk *chunk) { if (forceTopicName) return forceTopicName; - + wxChar *topicName = NULL; static wxChar topicBuf[100]; @@ -203,7 +196,7 @@ wxChar *FindTopicName(TexChunk *chunk) return topicName; else { - wxSprintf(topicBuf, _T("topic%ld"), topicCounter); + wxSnprintf(topicBuf, sizeof(topicBuf), _T("topic%ld"), topicCounter); topicCounter ++; return topicBuf; } @@ -215,16 +208,16 @@ wxChar *FindTopicName(TexChunk *chunk) * Snag is that some save a TexChunk, so don't use yet... * */ - + void StartSimulateArgument(wxChar *data) { wxStrcpy(currentArgData, data); - haveArgData = TRUE; + haveArgData = true; } void EndSimulateArgument(void) { - haveArgData = FALSE; + haveArgData = false; } /* @@ -242,13 +235,13 @@ int ParseUnitArgument(wxChar *unitArg) if (unitArg[i] == '\\') unitArg[i] = 0; len = wxStrlen(unitArg); - + if (unitArg && (len > 0) && (isdigit(unitArg[0]) || unitArg[0] == '-')) { wxSscanf(unitArg, _T("%f"), &unitValue); if (len > 1) { - wxChar units[3]; + wxChar units[3]; units[0] = unitArg[len-2]; units[1] = unitArg[len-1]; units[2] = 0; @@ -271,7 +264,7 @@ int ParseUnitArgument(wxChar *unitArg) * IF one exists. Inserts zero into buffer. * */ - + void StripExtension(wxChar *buffer) { int len = wxStrlen(buffer); @@ -338,18 +331,18 @@ void SetFontSizes(int pointSize) } } - + /* * Latex references * */ - + void AddTexRef(wxChar *name, wxChar *file, wxChar *sectionName, int chapter, int section, int subsection, int subsubsection) { TexRef *texRef = (TexRef *)TexReferences.Get(name); if (texRef) TexReferences.Delete(name); - + wxChar buf[100]; buf[0] = 0; /* @@ -362,7 +355,7 @@ void AddTexRef(wxChar *name, wxChar *file, wxChar *sectionName, if (chapter) { wxChar buf2[10]; - wxSprintf(buf2, _T("%d"), chapter); + wxSnprintf(buf2, sizeof(buf2), _T("%d"), chapter); wxStrcat(buf, buf2); } if (section) @@ -371,21 +364,21 @@ void AddTexRef(wxChar *name, wxChar *file, wxChar *sectionName, if (chapter) wxStrcat(buf, _T(".")); - wxSprintf(buf2, _T("%d"), section); + wxSnprintf(buf2, sizeof(buf2), _T("%d"), section); wxStrcat(buf, buf2); } if (subsection) { wxChar buf2[10]; wxStrcat(buf, _T(".")); - wxSprintf(buf2, _T("%d"), subsection); + wxSnprintf(buf2, sizeof(buf2), _T("%d"), subsection); wxStrcat(buf, buf2); } if (subsubsection) { wxChar buf2[10]; wxStrcat(buf, _T(".")); - wxSprintf(buf2, _T("%d"), subsubsection); + wxSnprintf(buf2, sizeof(buf2), _T("%d"), subsubsection); wxStrcat(buf, buf2); } wxChar *tmp = ((wxStrlen(buf) > 0) ? buf : (wxChar *)NULL); @@ -394,70 +387,79 @@ void AddTexRef(wxChar *name, wxChar *file, wxChar *sectionName, void WriteTexReferences(wxChar *filename) { - wxSTD ofstream ostr(filename); - if (ostr.bad()) return; - wxChar buf[200]; - - TexReferences.BeginFind(); - wxNode *node = TexReferences.Next(); - while (node) - { - Tex2RTFYield(); - TexRef *ref = (TexRef *)node->GetData(); - ostr << ref->refLabel << _T(" ") << (ref->refFile ? ref->refFile : _T("??")) << _T(" "); - ostr << (ref->sectionName ? ref->sectionName : _T("??")) << _T(" "); - ostr << (ref->sectionNumber ? ref->sectionNumber : _T("??")) << _T("\n"); - if (!ref->sectionNumber || (wxStrcmp(ref->sectionNumber, _T("??")) == 0 && wxStrcmp(ref->sectionName, _T("??")) == 0)) + wxString name = filename; + wxTextFile file; + + if (!(wxFileExists(name)?file.Open(name):file.Create(name))) + return; + + file.Clear(); + + TexReferences.BeginFind(); + wxHashTable::Node *node = TexReferences.Next(); + while (node) { - wxSprintf(buf, _T("Warning: reference %s not resolved."), ref->refLabel); - OnInform(buf); + Tex2RTFYield(); + TexRef *ref = (TexRef *)node->GetData(); + wxString converter = ref->refLabel; + converter << wxT(" "); + converter << (ref->refFile ? ref->refFile : _T("??")); + converter << wxT(" "); + converter << (ref->sectionName ? ref->sectionName : _T("??")) ; + converter << wxT(" "); + converter << (ref->sectionNumber ? ref->sectionNumber : _T("??")) ; + file.AddLine(converter); + + if (!ref->sectionNumber || (wxStrcmp(ref->sectionNumber, _T("??")) == 0 && wxStrcmp(ref->sectionName, _T("??")) == 0)) + { + wxChar buf[200]; + wxSnprintf(buf, sizeof(buf), _T("Warning: reference %s not resolved."), ref->refLabel); + OnInform(buf); + } + node = TexReferences.Next(); } - node = TexReferences.Next(); - } + + file.Write(); + file.Close(); } void ReadTexReferences(wxChar *filename) { - if (!wxFileExists(filename)) - return; + wxString name = filename; - wxSTD ifstream istr(filename, wxSTD ios::in); + if (!wxFileExists(name)) + return; - if (istr.bad()) return; + wxTextFile file; + if (!file.Open(name)) + return; - wxChar label[100]; - wxChar file[400]; - wxChar section[100]; - wxChar sectionName[100]; - - while (!istr.eof()) - { - istr >> label; - if (!istr.eof()) + wxString line; + for ( line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine() ) { - istr >> file; - istr >> sectionName; - char ch; - istr.get(ch); // Read past space - istr.get(ch); - int i = 0; - while (ch != '\n' && !istr.eof()) - { - section[i] = ch; - i ++; - 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); + wxString labelStr = line.BeforeFirst(wxT(' ')); + line = line.AfterFirst(wxT(' ')); + wxString fileStr = line.BeforeFirst(wxT(' ')); + line = line.AfterFirst(wxT(' ')); + wxString sectionNameStr = line.BeforeFirst(wxT(' ')); + wxString sectionStr = line.AfterFirst(wxT(' ')); + + // 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( + labelStr.c_str(), + new TexRef( + labelStr.c_str(), + fileStr.c_str(), + sectionStr.c_str(), + sectionNameStr.c_str() + ) + ); + TexReferences.DeleteContents(false); } - } } @@ -466,140 +468,253 @@ void ReadTexReferences(wxChar *filename) * */ +void BibEatWhiteSpace(wxString& line) +{ + while(!line.empty() && (line[0] == _T(' ') || line[0] == _T('\t') || line[0] == (wxChar)EOF)) + { + if (line[0] == 10) + BibLine ++; + line = line.substr(1); + } + + // Ignore end-of-line comments + if (line[0] == _T('%') || line[0] == _T(';') || line[0] == _T('#')) + { + line = wxEmptyString; + } +} + void BibEatWhiteSpace(wxSTD istream& str) { - char ch = str.peek(); - - while (!str.eof() && (ch == ' ' || ch == '\t' || ch == 13 || ch == 10 || ch == EOF)) + char ch = (char)str.peek(); + + while (!str.eof() && (ch == ' ' || ch == '\t' || ch == 13 || ch == 10 || ch == (char)EOF)) { if (ch == 10) BibLine ++; str.get(ch); - if ((ch == EOF) || str.eof()) return; - ch = str.peek(); + if ((ch == (char)EOF) || str.eof()) return; + ch = (char)str.peek(); } // Ignore end-of-line comments if (ch == '%' || ch == ';' || ch == '#') { str.get(ch); - ch = str.peek(); + ch = (char)str.peek(); while (ch != 10 && ch != 13 && !str.eof()) { str.get(ch); - ch = str.peek(); + ch = (char)str.peek(); } BibEatWhiteSpace(str); } } // Read word up to { or , or space +wxString BibReadWord(wxString& line) +{ + wxString val; + + while (!line.empty() && + line[0] != _T('\t') && + line[0] != _T(' ') && + line[0] != _T('{') && + line[0] != _T('(') && + line[0] != _T(',') && + line[0] != _T('=')) + { + val << line[0]; + line = line.substr(1); + } + return val; +} + void BibReadWord(wxSTD istream& istr, wxChar *buffer) { int i = 0; buffer[i] = 0; - char ch = istr.peek(); + char ch = (char)istr.peek(); while (!istr.eof() && ch != ' ' && ch != '{' && ch != '(' && ch != 13 && ch != 10 && ch != '\t' && ch != ',' && ch != '=') { istr.get(ch); buffer[i] = ch; i ++; - ch = istr.peek(); + ch = (char)istr.peek(); } buffer[i] = 0; } // Read string (double-quoted or not) to end quote or EOL -void BibReadToEOL(wxSTD istream& istr, wxChar *buffer) +wxString BibReadToEOL(wxString& line) { - int i = 0; - buffer[i] = 0; - wxChar ch = istr.peek(); - bool inQuotes = FALSE; - if (ch == _T('"')) - { - istr.get(ch); - ch = istr.peek(); - inQuotes = TRUE; - } - // If in quotes, read white space too. If not, - // stop at white space or comment. - while (!istr.eof() && ch != 13 && ch != 10 && ch != _T('"') && - (inQuotes || ((ch != _T(' ')) && (ch != 9) && - (ch != _T(';')) && (ch != _T('%')) && (ch != _T('#'))))) - { - istr.get(ch); - buffer[i] = ch; - i ++; - ch = istr.peek(); - } - if (ch == '"') - istr.get(ch); - buffer[i] = 0; + if(line.empty()) + return wxEmptyString; + + wxString val; + bool inQuotes = false; + if (line[0] == _T('"')) + { + line = line.substr(1); + inQuotes = true; + } + // If in quotes, read white space too. If not, + // stop at white space or comment. + while (!line.empty() && line[0] != _T('"') && + (inQuotes || ((line[0] != _T(' ')) && (line[0] != 9) && + (line[0] != _T(';')) && (line[0] != _T('%')) && (line[0] != _T('#'))))) + { + val << line[0]; + line = line.substr(1); + } + if (line[0] == '"') + line = line.substr(1); + + return val; } -// Read }-terminated value, taking nested braces into account. -void BibReadValue(wxSTD istream& istr, wxChar *buffer, bool ignoreBraces = TRUE, - bool quotesMayTerminate = TRUE) +void BibReadToEOL(wxSTD istream& istr, wxChar *buffer) { - int braceCount = 1; - int i = 0; - buffer[i] = 0; - char ch = istr.peek(); - bool stopping = FALSE; - while (!istr.eof() && !stopping) - { -// i ++; - if (i >= 4000) + int i = 0; + buffer[i] = 0; + char ch = (char)istr.peek(); + bool inQuotes = false; + if (ch == '"') { - wxChar buf[100]; - wxSprintf(buf, _T("Sorry, value > 4000 chars in bib file at line %ld."), BibLine); - wxLogError(buf, "Tex2RTF Fatal Error"); - return; + istr.get(ch); + ch = (char)istr.peek(); + inQuotes = true; } - istr.get(ch); - - if (ch == '{') - braceCount ++; + // If in quotes, read white space too. If not, + // stop at white space or comment. + while (!istr.eof() && ch != 13 && ch != 10 && ch != _T('"') && + (inQuotes || ((ch != _T(' ')) && (ch != 9) && + (ch != _T(';')) && (ch != _T('%')) && (ch != _T('#'))))) + { + istr.get(ch); + buffer[i] = ch; + i ++; + ch = (char)istr.peek(); + } + if (ch == '"') + istr.get(ch); + buffer[i] = 0; +} + +// Read }-terminated value, taking nested braces into account. +wxString BibReadValue(wxString& line, + bool ignoreBraces = true, + bool quotesMayTerminate = true) +{ + wxString val; + int braceCount = 1; + bool stopping = false; - if (ch == '}') + if (line.length() >= 4000) { - braceCount --; - if (braceCount == 0) - { - stopping = TRUE; - break; - } + wxChar buf[100]; + wxSnprintf(buf, sizeof(buf), _T("Sorry, value > 4000 chars in bib file at line %ld."), BibLine); + wxLogError(buf, "Tex2RTF Fatal Error"); + return wxEmptyString; } - else if (quotesMayTerminate && ch == '"') + + while (!line.empty() && !stopping) { - stopping = TRUE; - break; + wxChar ch = line[0]; + line = line.substr(1); + + if (ch == _T('{')) + braceCount ++; + + if (ch == _T('}')) + { + braceCount --; + if (braceCount == 0) + { + stopping = true; + break; + } + } + else if (quotesMayTerminate && ch == _T('"')) + { + stopping = true; + break; + } + + if (!stopping) + { + if (!ignoreBraces || (ch != _T('{') && ch != _T('}'))) + { + val << ch; + } + } } - if (!stopping) + + return val; +} + +void BibReadValue(wxSTD istream& istr, wxChar *buffer, bool ignoreBraces = true, + bool quotesMayTerminate = true) +{ + int braceCount = 1; + int i = 0; + buffer[i] = 0; + char ch = (char)istr.peek(); + bool stopping = false; + while (!istr.eof() && !stopping) { - if (!ignoreBraces || (ch != '{' && ch != '}')) - { - buffer[i] = ch; - i ++; - } +// i ++; + if (i >= 4000) + { + wxChar buf[100]; + wxSnprintf(buf, sizeof(buf), _T("Sorry, value > 4000 chars in bib file at line %ld."), BibLine); + wxLogError(buf, "Tex2RTF Fatal Error"); + return; + } + istr.get(ch); + + if (ch == '{') + braceCount ++; + + if (ch == '}') + { + braceCount --; + if (braceCount == 0) + { + stopping = true; + break; + } + } + else if (quotesMayTerminate && ch == '"') + { + stopping = true; + break; + } + if (!stopping) + { + if (!ignoreBraces || (ch != '{' && ch != '}')) + { + buffer[i] = ch; + i ++; + } + } + if (ch == 10) + BibLine ++; } - if (ch == 10) - BibLine ++; - } - buffer[i] = 0; - wxUnusedVar(stopping); + buffer[i] = 0; + wxUnusedVar(stopping); } - + bool ReadBib(wxChar *filename) { if (!wxFileExists(filename)) - return FALSE; + return false; + wxString name = filename; wxChar buf[300]; - wxSTD ifstream istr(filename, wxSTD ios::in); - if (istr.bad()) return FALSE; + wxSTD ifstream istr((char const *)name.fn_str(), wxSTD ios::in); + if (istr.bad()) return false; BibLine = 1; @@ -618,38 +733,38 @@ bool ReadBib(wxChar *filename) istr.get(ch); if (ch != '@') { - wxSprintf(buf, _T("Expected @: malformed bib file at line %ld (%s)"), BibLine, filename); + wxSnprintf(buf, sizeof(buf), _T("Expected @: malformed bib file at line %ld (%s)"), BibLine, filename); OnError(buf); - return FALSE; + return false; } BibReadWord(istr, recordType); BibEatWhiteSpace(istr); istr.get(ch); if (ch != '{' && ch != '(') { - wxSprintf(buf, _T("Expected { or ( after record type: malformed .bib file at line %ld (%s)"), BibLine, filename); + wxSnprintf(buf, sizeof(buf), _T("Expected { or ( after record type: malformed .bib file at line %ld (%s)"), BibLine, filename); OnError(buf); - return FALSE; + return false; } BibEatWhiteSpace(istr); - if (StringMatch(recordType, _T("string"), FALSE, TRUE)) + if (StringMatch(recordType, _T("string"), false, true)) { BibReadWord(istr, recordType); BibEatWhiteSpace(istr); istr.get(ch); if (ch != '=') { - wxSprintf(buf, _T("Expected = after string key: malformed .bib file at line %ld (%s)"), BibLine, filename); + wxSnprintf(buf, sizeof(buf), _T("Expected = after string key: malformed .bib file at line %ld (%s)"), BibLine, filename); OnError(buf); - return FALSE; + return false; } BibEatWhiteSpace(istr); istr.get(ch); if (ch != '"' && ch != '{') { - wxSprintf(buf, _T("Expected = after string key: malformed .bib file at line %ld (%s)"), BibLine, filename); + wxSnprintf(buf, sizeof(buf), _T("Expected = after string key: malformed .bib file at line %ld (%s)"), BibLine, filename); OnError(buf); - return FALSE; + return false; } BibReadValue(istr, fieldValue); @@ -670,14 +785,14 @@ bool ReadBib(wxChar *filename) bibEntry->key = copystring(recordKey); bibEntry->type = copystring(recordType); - bool moreRecords = TRUE; + bool moreRecords = true; while (moreRecords && !istr.eof()) { BibEatWhiteSpace(istr); istr.get(ch); if (ch == '}' || ch == ')') { - moreRecords = FALSE; + moreRecords = false; } else if (ch == ',') { @@ -687,9 +802,9 @@ bool ReadBib(wxChar *filename) istr.get(ch); if (ch != '=') { - wxSprintf(buf, _T("Expected = after field type: malformed .bib file at line %ld (%s)"), BibLine, filename); + wxSnprintf(buf, sizeof(buf), _T("Expected = after field type: malformed .bib file at line %ld (%s)"), BibLine, filename); OnError(buf); - return FALSE; + return false; } BibEatWhiteSpace(istr); istr.get(ch); @@ -706,64 +821,64 @@ bool ReadBib(wxChar *filename) } } else - BibReadValue(istr, fieldValue, TRUE, (ch == _T('"') ? TRUE : FALSE)); + BibReadValue(istr, fieldValue, true, (ch == _T('"') ? true : false)); // Now we can add a field - if (StringMatch(recordField, _T("author"), FALSE, TRUE)) + if (StringMatch(recordField, _T("author"), false, true)) bibEntry->author = copystring(fieldValue); - else if (StringMatch(recordField, _T("key"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("key"), false, true)) {} - else if (StringMatch(recordField, _T("annotate"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("annotate"), false, true)) {} - else if (StringMatch(recordField, _T("abstract"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("abstract"), false, true)) {} - else if (StringMatch(recordField, _T("edition"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("edition"), false, true)) {} - else if (StringMatch(recordField, _T("howpublished"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("howpublished"), false, true)) {} - else if (StringMatch(recordField, _T("note"), FALSE, TRUE) || StringMatch(recordField, _T("notes"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("note"), false, true) || StringMatch(recordField, _T("notes"), false, true)) {} - else if (StringMatch(recordField, _T("series"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("series"), false, true)) {} - else if (StringMatch(recordField, _T("type"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("type"), false, true)) {} - else if (StringMatch(recordField, _T("keywords"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("keywords"), false, true)) {} - else if (StringMatch(recordField, _T("editor"), FALSE, TRUE) || StringMatch(recordField, _T("editors"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("editor"), false, true) || StringMatch(recordField, _T("editors"), false, true)) bibEntry->editor= copystring(fieldValue); - else if (StringMatch(recordField, _T("title"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("title"), false, true)) bibEntry->title= copystring(fieldValue); - else if (StringMatch(recordField, _T("booktitle"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("booktitle"), false, true)) bibEntry->booktitle= copystring(fieldValue); - else if (StringMatch(recordField, _T("journal"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("journal"), false, true)) bibEntry->journal= copystring(fieldValue); - else if (StringMatch(recordField, _T("volume"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("volume"), false, true)) bibEntry->volume= copystring(fieldValue); - else if (StringMatch(recordField, _T("number"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("number"), false, true)) bibEntry->number= copystring(fieldValue); - else if (StringMatch(recordField, _T("year"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("year"), false, true)) bibEntry->year= copystring(fieldValue); - else if (StringMatch(recordField, _T("month"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("month"), false, true)) bibEntry->month= copystring(fieldValue); - else if (StringMatch(recordField, _T("pages"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("pages"), false, true)) bibEntry->pages= copystring(fieldValue); - else if (StringMatch(recordField, _T("publisher"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("publisher"), false, true)) bibEntry->publisher= copystring(fieldValue); - else if (StringMatch(recordField, _T("address"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("address"), false, true)) bibEntry->address= copystring(fieldValue); - else if (StringMatch(recordField, _T("institution"), FALSE, TRUE) || StringMatch(recordField, _T("school"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("institution"), false, true) || StringMatch(recordField, _T("school"), false, true)) bibEntry->institution= copystring(fieldValue); - else if (StringMatch(recordField, _T("organization"), FALSE, TRUE) || StringMatch(recordField, _T("organisation"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("organization"), false, true) || StringMatch(recordField, _T("organisation"), false, true)) bibEntry->organization= copystring(fieldValue); - else if (StringMatch(recordField, _T("comment"), FALSE, TRUE) || StringMatch(recordField, _T("comments"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("comment"), false, true) || StringMatch(recordField, _T("comments"), false, true)) bibEntry->comment= copystring(fieldValue); - else if (StringMatch(recordField, _T("annote"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("annote"), false, true)) bibEntry->comment= copystring(fieldValue); - else if (StringMatch(recordField, _T("chapter"), FALSE, TRUE)) + else if (StringMatch(recordField, _T("chapter"), false, true)) bibEntry->chapter= copystring(fieldValue); else { - wxSprintf(buf, _T("Unrecognised bib field type %s at line %ld (%s)"), recordField, BibLine, filename); + wxSnprintf(buf, sizeof(buf), _T("Unrecognised bib field type %s at line %ld (%s)"), recordField, BibLine, filename); OnError(buf); } } @@ -772,26 +887,26 @@ bool ReadBib(wxChar *filename) BibEatWhiteSpace(istr); } } - return TRUE; + return true; } void OutputBibItem(TexRef *ref, BibEntry *bib) { Tex2RTFYield(); - OnMacro(ltNUMBEREDBIBITEM, 2, TRUE); - OnArgument(ltNUMBEREDBIBITEM, 1, TRUE); + OnMacro(ltNUMBEREDBIBITEM, 2, true); + OnArgument(ltNUMBEREDBIBITEM, 1, true); TexOutput(ref->sectionNumber); - OnArgument(ltNUMBEREDBIBITEM, 1, FALSE); - OnArgument(ltNUMBEREDBIBITEM, 2, TRUE); + OnArgument(ltNUMBEREDBIBITEM, 1, false); + OnArgument(ltNUMBEREDBIBITEM, 2, true); TexOutput(_T(" ")); - OnMacro(ltBF, 1, TRUE); - OnArgument(ltBF, 1, TRUE); + OnMacro(ltBF, 1, true); + OnArgument(ltBF, 1, true); if (bib->author) TexOutput(bib->author); - OnArgument(ltBF, 1, FALSE); - OnMacro(ltBF, 1, FALSE); + OnArgument(ltBF, 1, false); + OnMacro(ltBF, 1, false); if (bib->author && (wxStrlen(bib->author) > 0) && (bib->author[wxStrlen(bib->author) - 1] != '.')) TexOutput(_T(". ")); else @@ -810,7 +925,7 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) if (bib->year || bib->month) TexOutput(_T(". ")); - if (StringMatch(bib->type, _T("article"), FALSE, TRUE)) + if (StringMatch(bib->type, _T("article"), false, true)) { if (bib->title) { @@ -819,20 +934,20 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) } if (bib->journal) { - OnMacro(ltIT, 1, TRUE); - OnArgument(ltIT, 1, TRUE); + OnMacro(ltIT, 1, true); + OnArgument(ltIT, 1, true); TexOutput(bib->journal); - OnArgument(ltIT, 1, FALSE); - OnMacro(ltIT, 1, FALSE); + OnArgument(ltIT, 1, false); + OnMacro(ltIT, 1, false); } if (bib->volume) { TexOutput(_T(", ")); - OnMacro(ltBF, 1, TRUE); - OnArgument(ltBF, 1, TRUE); + OnMacro(ltBF, 1, true); + OnArgument(ltBF, 1, true); TexOutput(bib->volume); - OnArgument(ltBF, 1, FALSE); - OnMacro(ltBF, 1, FALSE); + OnArgument(ltBF, 1, false); + OnMacro(ltBF, 1, false); } if (bib->number) { @@ -847,27 +962,27 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) } TexOutput(_T(".")); } - else if (StringMatch(bib->type, _T("book"), FALSE, TRUE) || - StringMatch(bib->type, _T("unpublished"), FALSE, TRUE) || - StringMatch(bib->type, _T("manual"), FALSE, TRUE) || - StringMatch(bib->type, _T("phdthesis"), FALSE, TRUE) || - StringMatch(bib->type, _T("mastersthesis"), FALSE, TRUE) || - StringMatch(bib->type, _T("misc"), FALSE, TRUE) || - StringMatch(bib->type, _T("techreport"), FALSE, TRUE) || - StringMatch(bib->type, _T("booklet"), FALSE, TRUE)) + else if (StringMatch(bib->type, _T("book"), false, true) || + StringMatch(bib->type, _T("unpublished"), false, true) || + StringMatch(bib->type, _T("manual"), false, true) || + StringMatch(bib->type, _T("phdthesis"), false, true) || + StringMatch(bib->type, _T("mastersthesis"), false, true) || + StringMatch(bib->type, _T("misc"), false, true) || + StringMatch(bib->type, _T("techreport"), false, true) || + StringMatch(bib->type, _T("booklet"), false, true)) { if (bib->title || bib->booktitle) { - OnMacro(ltIT, 1, TRUE); - OnArgument(ltIT, 1, TRUE); + OnMacro(ltIT, 1, true); + OnArgument(ltIT, 1, true); TexOutput(bib->title ? bib->title : bib->booktitle); TexOutput(_T(". ")); - OnArgument(ltIT, 1, FALSE); - OnMacro(ltIT, 1, FALSE); + OnArgument(ltIT, 1, false); + OnMacro(ltIT, 1, false); } - if (StringMatch(bib->type, _T("phdthesis"), FALSE, TRUE)) + if (StringMatch(bib->type, _T("phdthesis"), false, true)) TexOutput(_T("PhD thesis. ")); - if (StringMatch(bib->type, _T("techreport"), FALSE, TRUE)) + if (StringMatch(bib->type, _T("techreport"), false, true)) TexOutput(_T("Technical report. ")); if (bib->editor) { @@ -896,10 +1011,10 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) TexOutput(_T(". ")); } } - else if (StringMatch(bib->type, _T("inbook"), FALSE, TRUE) || - StringMatch(bib->type, _T("inproceedings"), FALSE, TRUE) || - StringMatch(bib->type, _T("incollection"), FALSE, TRUE) || - StringMatch(bib->type, _T("conference"), FALSE, TRUE)) + else if (StringMatch(bib->type, _T("inbook"), false, true) || + StringMatch(bib->type, _T("inproceedings"), false, true) || + StringMatch(bib->type, _T("incollection"), false, true) || + StringMatch(bib->type, _T("conference"), false, true)) { if (bib->title) { @@ -908,12 +1023,12 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) if (bib->booktitle) { TexOutput(_T(", from ")); - OnMacro(ltIT, 1, TRUE); - OnArgument(ltIT, 1, TRUE); + OnMacro(ltIT, 1, true); + OnArgument(ltIT, 1, true); TexOutput(bib->booktitle); TexOutput(_T(".")); - OnArgument(ltIT, 1, FALSE); - OnMacro(ltIT, 1, FALSE); + OnArgument(ltIT, 1, false); + OnMacro(ltIT, 1, false); } if (bib->editor) { @@ -937,11 +1052,11 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) if (bib->volume) { TexOutput(_T(" ")); - OnMacro(ltBF, 1, TRUE); - OnArgument(ltBF, 1, TRUE); + OnMacro(ltBF, 1, true); + OnArgument(ltBF, 1, true); TexOutput(bib->volume); - OnArgument(ltBF, 1, FALSE); - OnMacro(ltBF, 1, FALSE); + OnArgument(ltBF, 1, false); + OnMacro(ltBF, 1, false); } if (bib->number) { @@ -971,8 +1086,8 @@ void OutputBibItem(TexRef *ref, BibEntry *bib) TexOutput(_T(".")); } } - OnArgument(ltNUMBEREDBIBITEM, 2, FALSE); - OnMacro(ltNUMBEREDBIBITEM, 2, FALSE); + OnArgument(ltNUMBEREDBIBITEM, 2, false); + OnMacro(ltNUMBEREDBIBITEM, 2, false); } void OutputBib(void) @@ -982,13 +1097,13 @@ void OutputBib(void) FakeCurrentSection(ReferencesNameString); ForceTopicName(NULL); - OnMacro(ltPAR, 0, TRUE); - OnMacro(ltPAR, 0, FALSE); + OnMacro(ltPAR, 0, true); + OnMacro(ltPAR, 0, false); if ((convertMode == TEX_RTF) && !winHelp) { - OnMacro(ltPAR, 0, TRUE); - OnMacro(ltPAR, 0, FALSE); + OnMacro(ltPAR, 0, true); + OnMacro(ltPAR, 0, false); } wxStringListNode *node = CitationList.GetFirst(); @@ -1029,13 +1144,13 @@ void ResolveBibReferences(void) // Unused Variable //BibEntry *entry = (BibEntry *)bibNode->GetData(); if (ref->sectionNumber) delete[] ref->sectionNumber; - wxSprintf(buf, _T("[%d]"), citeCount); + wxSnprintf(buf, sizeof(buf), _T("[%d]"), citeCount); ref->sectionNumber = copystring(buf); citeCount ++; } else { - wxSprintf(buf, _T("Warning: bib ref %s not resolved."), citeKey); + wxSnprintf(buf, sizeof(buf), _T("Warning: bib ref %s not resolved."), citeKey); OnInform(buf); } node = node->GetNext(); @@ -1064,352 +1179,363 @@ TexRef *FindReference(wxChar *key) * */ -bool StringTobool(wxChar *val) +bool StringTobool(const wxString& val) { - if (wxStrncmp(val, _T("yes"), 3) == 0 || wxStrncmp(val, _T("YES"), 3) == 0 || - wxStrncmp(val, _T("on"), 2) == 0 || wxStrncmp(val, _T("ON"), 2) == 0 || - wxStrncmp(val, _T("true"), 4) == 0 || wxStrncmp(val, _T("TRUE"), 4) == 0 || - wxStrncmp(val, _T("ok"), 2) == 0 || wxStrncmp(val, _T("OK"), 2) == 0 || - wxStrncmp(val, _T("1"), 1) == 0) - return TRUE; - else - return FALSE; + wxString up(val); + up.MakeUpper(); + + if (up.IsSameAs(_T("YES")) || + up.IsSameAs(_T("TRUE")) || + up.IsSameAs(_T("ON")) || + up.IsSameAs(_T("OK")) | + up.IsSameAs(_T("1"))) + return true; + + return false; +} + +void RegisterIntSetting (const wxString& s, int *number) +{ + if (number) + { + long val; + s.ToLong(&val); + *number = (int)val; + } } // Define a variable value from the .ini file -wxChar *RegisterSetting(wxChar *settingName, wxChar *settingValue, bool interactive) +wxChar *RegisterSetting(const wxString& settingName, const wxString& settingValue, bool interactive) { - static wxChar errorCode[100]; - wxStrcpy(errorCode, _T("OK")); - if (StringMatch(settingName, _T("chapterName"), FALSE, TRUE)) - { - delete[] ChapterNameString; - ChapterNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("sectionName"), FALSE, TRUE)) - { - delete[] SectionNameString; - SectionNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("subsectionName"), FALSE, TRUE)) - { - delete[] SubsectionNameString; - SubsectionNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("subsubsectionName"), FALSE, TRUE)) - { - delete[] SubsubsectionNameString; - SubsubsectionNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("indexName"), FALSE, TRUE)) - { - delete[] IndexNameString; - IndexNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("contentsName"), FALSE, TRUE)) - { - delete[] ContentsNameString; - ContentsNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("glossaryName"), FALSE, TRUE)) - { - delete[] GlossaryNameString; - GlossaryNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("referencesName"), FALSE, TRUE)) - { - delete[] ReferencesNameString; - ReferencesNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("tablesName"), FALSE, TRUE)) - { - delete[] TablesNameString; - TablesNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("figuresName"), FALSE, TRUE)) - { - delete[] FiguresNameString; - FiguresNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("tableName"), FALSE, TRUE)) - { - delete[] TableNameString; - TableNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("figureName"), FALSE, TRUE)) - { - delete[] FigureNameString; - FigureNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("abstractName"), FALSE, TRUE)) - { - delete[] AbstractNameString; - AbstractNameString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("chapterFontSize"), FALSE, TRUE)) - StringToInt(settingValue, &chapterFont); - else if (StringMatch(settingName, _T("sectionFontSize"), FALSE, TRUE)) - StringToInt(settingValue, §ionFont); - else if (StringMatch(settingName, _T("subsectionFontSize"), FALSE, TRUE)) - StringToInt(settingValue, &subsectionFont); - else if (StringMatch(settingName, _T("titleFontSize"), FALSE, TRUE)) - StringToInt(settingValue, &titleFont); - else if (StringMatch(settingName, _T("authorFontSize"), FALSE, TRUE)) - StringToInt(settingValue, &authorFont); - else if (StringMatch(settingName, _T("ignoreInput"), FALSE, TRUE)) - IgnorableInputFiles.Add(wxFileNameFromPath(settingValue)); - else if (StringMatch(settingName, _T("mirrorMargins"), FALSE, TRUE)) - mirrorMargins = StringTobool(settingValue); - else if (StringMatch(settingName, _T("runTwice"), FALSE, TRUE)) - runTwice = StringTobool(settingValue); - else if (StringMatch(settingName, _T("isInteractive"), FALSE, TRUE)) - isInteractive = StringTobool(settingValue); - else if (StringMatch(settingName, _T("headerRule"), FALSE, TRUE)) - headerRule = StringTobool(settingValue); - else if (StringMatch(settingName, _T("footerRule"), FALSE, TRUE)) - footerRule = StringTobool(settingValue); - else if (StringMatch(settingName, _T("combineSubSections"), FALSE, TRUE)) - combineSubSections = StringTobool(settingValue); - else if (StringMatch(settingName, _T("listLabelIndent"), FALSE, TRUE)) - StringToInt(settingValue, &labelIndentTab); - else if (StringMatch(settingName, _T("listItemIndent"), FALSE, TRUE)) - StringToInt(settingValue, &itemIndentTab); - else if (StringMatch(settingName, _T("useUpButton"), FALSE, TRUE)) - useUpButton = StringTobool(settingValue); - else if (StringMatch(settingName, _T("useHeadingStyles"), FALSE, TRUE)) - useHeadingStyles = StringTobool(settingValue); - else if (StringMatch(settingName, _T("useWord"), FALSE, TRUE)) - useWord = StringTobool(settingValue); - else if (StringMatch(settingName, _T("contentsDepth"), FALSE, TRUE)) - StringToInt(settingValue, &contentsDepth); - else if (StringMatch(settingName, _T("generateHPJ"), FALSE, TRUE)) - generateHPJ = StringTobool(settingValue); - else if (StringMatch(settingName, _T("truncateFilenames"), FALSE, TRUE)) - truncateFilenames = StringTobool(settingValue); - else if (StringMatch(settingName, _T("winHelpVersion"), FALSE, TRUE)) - StringToInt(settingValue, &winHelpVersion); - else if (StringMatch(settingName, _T("winHelpContents"), FALSE, TRUE)) - winHelpContents = StringTobool(settingValue); - else if (StringMatch(settingName, _T("htmlIndex"), FALSE, TRUE)) - htmlIndex = StringTobool(settingValue); - else if (StringMatch(settingName, _T("htmlWorkshopFiles"), FALSE, TRUE)) - htmlWorkshopFiles = StringTobool(settingValue); - else if (StringMatch(settingName, _T("htmlFrameContents"), FALSE, TRUE)) - htmlFrameContents = StringTobool(settingValue); - else if (StringMatch(settingName, _T("htmlStylesheet"), FALSE, TRUE)) - { - if (htmlStylesheet) delete[] htmlStylesheet; - htmlStylesheet = copystring(settingValue); - } - else if (StringMatch(settingName, _T("upperCaseNames"), FALSE, TRUE)) - upperCaseNames = StringTobool(settingValue); - else if (StringMatch(settingName, _T("ignoreBadRefs"), FALSE, TRUE)) - ignoreBadRefs = StringTobool(settingValue); - else if (StringMatch(settingName, _T("htmlFaceName"), FALSE, TRUE)) - { - delete[] htmlFaceName; - htmlFaceName = copystring(settingValue); - } - else if (StringMatch(settingName, _T("winHelpTitle"), FALSE, TRUE)) - { - if (winHelpTitle) - delete[] winHelpTitle; - winHelpTitle = copystring(settingValue); - } - else if (StringMatch(settingName, _T("indexSubsections"), FALSE, TRUE)) - indexSubsections = StringTobool(settingValue); - else if (StringMatch(settingName, _T("compatibility"), FALSE, TRUE)) - compatibilityMode = StringTobool(settingValue); - else if (StringMatch(settingName, _T("defaultColumnWidth"), FALSE, TRUE)) - { - StringToInt(settingValue, &defaultTableColumnWidth); - defaultTableColumnWidth = 20*defaultTableColumnWidth; - } - else if (StringMatch(settingName, _T("bitmapMethod"), FALSE, TRUE)) - { - if ((wxStrcmp(settingValue, _T("includepicture")) != 0) && (wxStrcmp(settingValue, _T("hex")) != 0) && - (wxStrcmp(settingValue, _T("import")) != 0)) + wxString settingValueStr( settingValue ); + + static wxChar errorCode[100]; + wxStrcpy(errorCode, _T("OK")); + if (StringMatch(settingName, _T("chapterName"), false, true)) { - if (interactive) - OnError(_T("Unknown bitmapMethod")); - wxStrcpy(errorCode, _T("Unknown bitmapMethod")); + delete[] ChapterNameString; + ChapterNameString = copystring(settingValue); } - else + else if (StringMatch(settingName, _T("sectionName"), false, true)) { - delete[] bitmapMethod; - bitmapMethod = copystring(settingValue); + delete[] SectionNameString; + SectionNameString = copystring(settingValue); } - } - else if (StringMatch(settingName, _T("htmlBrowseButtons"), FALSE, TRUE)) - { - if (wxStrcmp(settingValue, _T("none")) == 0) - htmlBrowseButtons = HTML_BUTTONS_NONE; - else if (wxStrcmp(settingValue, _T("bitmap")) == 0) - htmlBrowseButtons = HTML_BUTTONS_BITMAP; - else if (wxStrcmp(settingValue, _T("text")) == 0) - htmlBrowseButtons = HTML_BUTTONS_TEXT; - else + else if (StringMatch(settingName, _T("subsectionName"), false, true)) { - if (interactive) - OnInform(_T("Initialisation file error: htmlBrowseButtons must be one of none, bitmap, or text.")); - wxStrcpy(errorCode, _T("Initialisation file error: htmlBrowseButtons must be one of none, bitmap, or text.")); + delete[] SubsectionNameString; + SubsectionNameString = copystring(settingValue); } - } - else if (StringMatch(settingName, _T("backgroundImage"), FALSE, TRUE)) - { - backgroundImageString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("backgroundColour"), FALSE, TRUE)) - { - delete[] backgroundColourString; - backgroundColourString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("textColour"), FALSE, TRUE)) - { - textColourString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("linkColour"), FALSE, TRUE)) - { - linkColourString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("followedLinkColour"), FALSE, TRUE)) - { - followedLinkColourString = copystring(settingValue); - } - else if (StringMatch(settingName, _T("conversionMode"), FALSE, TRUE)) - { - if (StringMatch(settingValue, _T("RTF"), FALSE, TRUE)) + else if (StringMatch(settingName, _T("subsubsectionName"), false, true)) { - winHelp = FALSE; convertMode = TEX_RTF; + delete[] SubsubsectionNameString; + SubsubsectionNameString = copystring(settingValue); } - else if (StringMatch(settingValue, _T("WinHelp"), FALSE, TRUE)) + else if (StringMatch(settingName, _T("indexName"), false, true)) { - winHelp = TRUE; convertMode = TEX_RTF; + delete[] IndexNameString; + IndexNameString = copystring(settingValue); } - else if (StringMatch(settingValue, _T("XLP"), FALSE, TRUE) || - StringMatch(settingValue, _T("wxHelp"), FALSE, TRUE)) + else if (StringMatch(settingName, _T("contentsName"), false, true)) { - convertMode = TEX_XLP; + delete[] ContentsNameString; + ContentsNameString = copystring(settingValue); } - else if (StringMatch(settingValue, _T("HTML"), FALSE, TRUE)) + else if (StringMatch(settingName, _T("glossaryName"), false, true)) { - convertMode = TEX_HTML; + delete[] GlossaryNameString; + GlossaryNameString = copystring(settingValue); } - else + else if (StringMatch(settingName, _T("referencesName"), false, true)) { - if (interactive) - OnInform(_T("Initialisation file error: conversionMode must be one of\nRTF, WinHelp, XLP (or wxHelp), HTML.")); - wxStrcpy(errorCode, _T("Initialisation file error: conversionMode must be one of\nRTF, WinHelp, XLP (or wxHelp), HTML.")); + delete[] ReferencesNameString; + ReferencesNameString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("tablesName"), false, true)) + { + delete[] TablesNameString; + TablesNameString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("figuresName"), false, true)) + { + delete[] FiguresNameString; + FiguresNameString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("tableName"), false, true)) + { + delete[] TableNameString; + TableNameString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("figureName"), false, true)) + { + delete[] FigureNameString; + FigureNameString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("abstractName"), false, true)) + { + delete[] AbstractNameString; + AbstractNameString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("chapterFontSize"), false, true)) + RegisterIntSetting(settingValueStr, &chapterFont); + else if (StringMatch(settingName, _T("sectionFontSize"), false, true)) + RegisterIntSetting(settingValueStr, §ionFont); + else if (StringMatch(settingName, _T("subsectionFontSize"), false, true)) + RegisterIntSetting(settingValueStr, &subsectionFont); + else if (StringMatch(settingName, _T("titleFontSize"), false, true)) + RegisterIntSetting(settingValueStr, &titleFont); + else if (StringMatch(settingName, _T("authorFontSize"), false, true)) + RegisterIntSetting(settingValueStr, &authorFont); + else if (StringMatch(settingName, _T("ignoreInput"), false, true)) + IgnorableInputFiles.Add(wxFileNameFromPath(settingValue)); + else if (StringMatch(settingName, _T("mirrorMargins"), false, true)) + mirrorMargins = StringTobool(settingValue); + else if (StringMatch(settingName, _T("runTwice"), false, true)) + runTwice = StringTobool(settingValue); + else if (StringMatch(settingName, _T("isInteractive"), false, true)) + isInteractive = StringTobool(settingValue); + else if (StringMatch(settingName, _T("headerRule"), false, true)) + headerRule = StringTobool(settingValue); + else if (StringMatch(settingName, _T("footerRule"), false, true)) + footerRule = StringTobool(settingValue); + else if (StringMatch(settingName, _T("combineSubSections"), false, true)) + combineSubSections = StringTobool(settingValue); + else if (StringMatch(settingName, _T("listLabelIndent"), false, true)) + RegisterIntSetting(settingValueStr, &labelIndentTab); + else if (StringMatch(settingName, _T("listItemIndent"), false, true)) + RegisterIntSetting(settingValueStr, &itemIndentTab); + else if (StringMatch(settingName, _T("useUpButton"), false, true)) + useUpButton = StringTobool(settingValue); + else if (StringMatch(settingName, _T("useHeadingStyles"), false, true)) + useHeadingStyles = StringTobool(settingValue); + else if (StringMatch(settingName, _T("useWord"), false, true)) + useWord = StringTobool(settingValue); + else if (StringMatch(settingName, _T("contentsDepth"), false, true)) + RegisterIntSetting(settingValueStr, &contentsDepth); + else if (StringMatch(settingName, _T("generateHPJ"), false, true)) + generateHPJ = StringTobool(settingValue); + else if (StringMatch(settingName, _T("truncateFilenames"), false, true)) + truncateFilenames = StringTobool(settingValue); + else if (StringMatch(settingName, _T("winHelpVersion"), false, true)) + RegisterIntSetting(settingValueStr, &winHelpVersion); + else if (StringMatch(settingName, _T("winHelpContents"), false, true)) + winHelpContents = StringTobool(settingValue); + else if (StringMatch(settingName, _T("htmlIndex"), false, true)) + htmlIndex = StringTobool(settingValue); + else if (StringMatch(settingName, _T("htmlWorkshopFiles"), false, true)) + htmlWorkshopFiles = StringTobool(settingValue); + else if (StringMatch(settingName, _T("htmlFrameContents"), false, true)) + htmlFrameContents = StringTobool(settingValue); + else if (StringMatch(settingName, _T("htmlStylesheet"), false, true)) + { + if (htmlStylesheet) + delete[] htmlStylesheet; + htmlStylesheet = copystring(settingValue); + } + else if (StringMatch(settingName, _T("upperCaseNames"), false, true)) + upperCaseNames = StringTobool(settingValue); + else if (StringMatch(settingName, _T("ignoreBadRefs"), false, true)) + ignoreBadRefs = StringTobool(settingValue); + else if (StringMatch(settingName, _T("htmlFaceName"), false, true)) + { + delete[] htmlFaceName; + htmlFaceName = copystring(settingValue); + } + else if (StringMatch(settingName, _T("winHelpTitle"), false, true)) + { + if (winHelpTitle) + delete[] winHelpTitle; + winHelpTitle = copystring(settingValue); + } + else if (StringMatch(settingName, _T("indexSubsections"), false, true)) + indexSubsections = StringTobool(settingValue); + else if (StringMatch(settingName, _T("compatibility"), false, true)) + compatibilityMode = StringTobool(settingValue); + else if (StringMatch(settingName, _T("defaultColumnWidth"), false, true)) + { + RegisterIntSetting(settingValueStr, &defaultTableColumnWidth); + defaultTableColumnWidth = 20*defaultTableColumnWidth; + } + else if (StringMatch(settingName, _T("bitmapMethod"), false, true)) + { + if ((wxStrcmp(settingValue, _T("includepicture")) != 0) && (wxStrcmp(settingValue, _T("hex")) != 0) && + (wxStrcmp(settingValue, _T("import")) != 0)) + { + if (interactive) + OnError(_T("Unknown bitmapMethod")); + wxStrcpy(errorCode, _T("Unknown bitmapMethod")); + } + else + { + delete[] bitmapMethod; + bitmapMethod = copystring(settingValue); + } + } + else if (StringMatch(settingName, _T("htmlBrowseButtons"), false, true)) + { + if (wxStrcmp(settingValue, _T("none")) == 0) + htmlBrowseButtons = HTML_BUTTONS_NONE; + else if (wxStrcmp(settingValue, _T("bitmap")) == 0) + htmlBrowseButtons = HTML_BUTTONS_BITMAP; + else if (wxStrcmp(settingValue, _T("text")) == 0) + htmlBrowseButtons = HTML_BUTTONS_TEXT; + else + { + if (interactive) + OnInform(_T("Initialisation file error: htmlBrowseButtons must be one of none, bitmap, or text.")); + wxStrcpy(errorCode, _T("Initialisation file error: htmlBrowseButtons must be one of none, bitmap, or text.")); + } + } + else if (StringMatch(settingName, _T("backgroundImage"), false, true)) + { + backgroundImageString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("backgroundColour"), false, true)) + { + delete[] backgroundColourString; + backgroundColourString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("textColour"), false, true)) + { + textColourString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("linkColour"), false, true)) + { + linkColourString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("followedLinkColour"), false, true)) + { + followedLinkColourString = copystring(settingValue); + } + else if (StringMatch(settingName, _T("conversionMode"), false, true)) + { + if (StringMatch(settingValue, _T("RTF"), false, true)) + { + winHelp = false; convertMode = TEX_RTF; + } + else if (StringMatch(settingValue, _T("WinHelp"), false, true)) + { + winHelp = true; convertMode = TEX_RTF; + } + else if (StringMatch(settingValue, _T("XLP"), false, true) || + StringMatch(settingValue, _T("wxHelp"), false, true)) + { + convertMode = TEX_XLP; + } + else if (StringMatch(settingValue, _T("HTML"), false, true)) + { + convertMode = TEX_HTML; + } + else + { + if (interactive) + OnInform(_T("Initialisation file error: conversionMode must be one of\nRTF, WinHelp, XLP (or wxHelp), HTML.")); + wxStrcpy(errorCode, _T("Initialisation file error: conversionMode must be one of\nRTF, WinHelp, XLP (or wxHelp), HTML.")); + } + } + else if (StringMatch(settingName, _T("documentFontSize"), false, true)) + { + int n; + RegisterIntSetting(settingValueStr, &n); + if (n == 10 || n == 11 || n == 12) + SetFontSizes(n); + else + { + wxChar buf[200]; + wxSnprintf(buf, sizeof(buf), _T("Initialisation file error: nonstandard document font size %d."), n); + if (interactive) + OnInform(buf); + wxStrcpy(errorCode, buf); + } } - } - else if (StringMatch(settingName, _T("documentFontSize"), FALSE, TRUE)) - { - int n; - StringToInt(settingValue, &n); - if (n == 10 || n == 11 || n == 12) - SetFontSizes(n); else { - wxChar buf[200]; - wxSprintf(buf, _T("Initialisation file error: nonstandard document font size %d."), n); - if (interactive) - OnInform(buf); - wxStrcpy(errorCode, buf); + wxChar buf[200]; + wxSnprintf(buf, sizeof(buf), _T("Initialisation file error: unrecognised setting %s."), settingName.c_str()); + if (interactive) + OnInform(buf); + wxStrcpy(errorCode, buf); } - } - else - { - wxChar buf[200]; - wxSprintf(buf, _T("Initialisation file error: unrecognised setting %s."), settingName); - if (interactive) - OnInform(buf); - wxStrcpy(errorCode, buf); - } - return errorCode; + return errorCode; } -bool ReadCustomMacros(wxChar *filename) +bool ReadCustomMacros(const wxString& filename) { - if (!wxFileExists(filename)) - return FALSE; + if (!wxFileExists(filename)) + return false; - wxSTD ifstream istr(filename, wxSTD ios::in); + wxFileInputStream input( filename ); + if(!input.Ok()) return false; + wxTextInputStream ini( input ); - if (istr.bad()) return FALSE; + CustomMacroList.Clear(); - CustomMacroList.Clear(); - char ch; - wxChar macroName[100]; - wxChar macroBody[1000]; - int noArgs; - - while (!istr.eof()) - { - BibEatWhiteSpace(istr); - istr.get(ch); - if (istr.eof()) - break; - - if (ch != '\\') // Not a macro definition, so must be NAME=VALUE - { - wxChar settingName[100]; - settingName[0] = ch; - BibReadWord(istr, (settingName+1)); - BibEatWhiteSpace(istr); - istr.get(ch); - if (ch != '=') - { - OnError(_T("Expected = following name: malformed tex2rtf.ini file.")); - return FALSE; - } - else - { - wxChar settingValue[200]; - BibEatWhiteSpace(istr); - BibReadToEOL(istr, settingValue); - RegisterSetting(settingName, settingValue); - } - } - else + while (!input.Eof()) { - BibReadWord(istr, macroName); - BibEatWhiteSpace(istr); - istr.get(ch); - if (ch != '[') - { - OnError(_T("Expected [ followed by number of arguments: malformed tex2rtf.ini file.")); - return FALSE; - } - istr >> noArgs; - istr.get(ch); - if (ch != ']') - { - OnError(_T("Expected ] following number of arguments: malformed tex2rtf.ini file.")); - return FALSE; - } - BibEatWhiteSpace(istr); - istr.get(ch); - if (ch != '{') - { - OnError(_T("Expected { followed by macro body: malformed tex2rtf.ini file.")); - return FALSE; - } - CustomMacro *macro = new CustomMacro(macroName, noArgs, NULL); - BibReadValue(istr, macroBody, FALSE, FALSE); // Don't ignore extra braces - if (wxStrlen(macroBody) > 0) - macro->macroBody = copystring(macroBody); - - BibEatWhiteSpace(istr); - CustomMacroList.Append(macroName, macro); - AddMacroDef(ltCUSTOM_MACRO, macroName, noArgs); + wxString line = ini.ReadLine(); + BibEatWhiteSpace(line); + if (line.empty()) continue; + + if (line[0] != _T('\\')) // Not a macro definition, so must be NAME=VALUE + { + wxString settingName = BibReadWord(line); + BibEatWhiteSpace(line); + if (line.empty() || line[0] != _T('=')) + { + OnError(_T("Expected = following name: malformed tex2rtf.ini file.")); + return false; + } + else + { + line = line.substr(1); + BibEatWhiteSpace(line); + wxString settingValue = BibReadToEOL(line); + RegisterSetting(settingName, settingValue); + } + } + else + { + line = line.substr(1); + wxString macroName = BibReadWord(line); + BibEatWhiteSpace(line); + if (line[0] != _T('[')) + { + OnError(_T("Expected [ followed by number of arguments: malformed tex2rtf.ini file.")); + return false; + } + line = line.substr(1); + wxString noAargStr = line.BeforeFirst(_T(']')); + line = line.AfterFirst(_T(']')); + long noArgs; + if (!noAargStr.ToLong(&noArgs) || line.empty()) + { + OnError(_T("Expected ] following number of arguments: malformed tex2rtf.ini file.")); + return false; + } + BibEatWhiteSpace(line); + if (line[0] != _T('{')) + { + OnError(_T("Expected { followed by macro body: malformed tex2rtf.ini file.")); + return false; + } + + CustomMacro *macro = new CustomMacro(macroName.c_str(), noArgs, NULL); + wxString macroBody = BibReadValue(line, false, false); // Don't ignore extra braces + if (!macroBody.empty()) + macro->macroBody = copystring(macroBody.c_str()); + + BibEatWhiteSpace(line); + CustomMacroList.Append(macroName.c_str(), macro); + AddMacroDef(ltCUSTOM_MACRO, macroName.c_str(), noArgs); + } + } - } - wxChar mbuf[200]; - wxSprintf(mbuf, _T("Read initialization file %s."), filename); - OnInform(mbuf); - return TRUE; + wxChar mbuf[200]; + wxSnprintf(mbuf, sizeof(mbuf), _T("Read initialization file %s."), filename.c_str()); + OnInform(mbuf); + return true; } - + CustomMacro *FindCustomMacro(wxChar *name) { wxNode *node = CustomMacroList.Find(name); @@ -1430,12 +1556,12 @@ void ShowCustomMacros(void) OnInform(_T("No custom macros loaded.\n")); return; } - + wxChar buf[400]; while (node) { CustomMacro *macro = (CustomMacro *)node->GetData(); - wxSprintf(buf, _T("\\%s[%d]\n {%s}"), macro->macroName, macro->noArgs, + wxSnprintf(buf, sizeof(buf), _T("\\%s[%d]\n {%s}"), macro->macroName, macro->noArgs, macro->macroBody ? macro->macroBody : _T("")); OnInform(buf); node = node->GetNext(); @@ -1450,7 +1576,7 @@ wxChar *ParseMultifieldString(wxChar *allFields, int *pos) int fieldIndex = *pos; int len = wxStrlen(allFields); int oldPos = *pos; - bool keepGoing = TRUE; + bool keepGoing = true; while ((fieldIndex <= len) && keepGoing) { if (allFields[fieldIndex] == _T(' ')) @@ -1461,12 +1587,12 @@ wxChar *ParseMultifieldString(wxChar *allFields, int *pos) else if (allFields[fieldIndex] == _T(',')) { *pos = fieldIndex + 1; - keepGoing = FALSE; + keepGoing = false; } else if (allFields[fieldIndex] == 0) { *pos = fieldIndex + 1; - keepGoing = FALSE; + keepGoing = false; } else { @@ -1478,7 +1604,7 @@ wxChar *ParseMultifieldString(wxChar *allFields, int *pos) buffer[i] = 0; if (oldPos == (*pos)) *pos = len + 1; - + if (i == 0) return NULL; else @@ -1489,7 +1615,7 @@ wxChar *ParseMultifieldString(wxChar *allFields, int *pos) * Colour tables * */ - + ColourTableEntry::ColourTableEntry(const wxChar *theName, unsigned int r, unsigned int g, unsigned int b) { name = copystring(theName); @@ -1547,7 +1673,7 @@ bool FindColourHTMLString(wxChar *theName, wxChar *buf) if (wxStrcmp(theName, entry->name) == 0) { wxStrcpy(buf, _T("#")); - + wxChar buf2[3]; DecToHex(entry->red, buf2); wxStrcat(buf, buf2); @@ -1556,14 +1682,14 @@ bool FindColourHTMLString(wxChar *theName, wxChar *buf) DecToHex(entry->blue, buf2); wxStrcat(buf, buf2); - return TRUE; + return true; } node = node->GetNext(); } - return FALSE; + return false; } - + void InitialiseColourTable(void) { // \\red0\\green0\\blue0; @@ -1574,16 +1700,16 @@ void InitialiseColourTable(void) // \\red0\\green255\\blue0; AddColour(_T("green"), 0,255,0); - + // \\red255\\green0\\blue255; AddColour(_T("magenta"), 255,0,255); // \\red255\\green0\\blue0; AddColour(_T("red"), 255,0,0); - + // \\red255\\green255\\blue0; AddColour(_T("yellow"), 255,255,0); - + // \\red255\\green255\\blue255;}"); AddColour(_T("white"), 255,255,255); } @@ -1595,21 +1721,23 @@ void InitialiseColourTable(void) void Tex2RTFYield(bool force) { -#ifdef __WXMSW__ +#ifdef __WINDOWS__ static int yieldCount = 0; - + if (isSync) - return; - + return; + if (force) - yieldCount = 0; + yieldCount = 0; if (yieldCount == 0) { - if (wxTheApp) - wxYield(); - yieldCount = 10; + if (wxTheApp) + wxYield(); + yieldCount = 10; } yieldCount --; +#else + wxUnusedVar(force); #endif } @@ -1627,7 +1755,7 @@ void AddKeyWordForTopic(wxChar *topic, wxChar *entry, wxChar *filename) texTopic->keywords = new wxStringList; TopicTable.Put(topic, texTopic); } - + if (!texTopic->keywords->Member(entry)) texTopic->keywords->Add(entry); } @@ -1635,7 +1763,7 @@ void AddKeyWordForTopic(wxChar *topic, wxChar *entry, wxChar *filename) void ClearKeyWordTable(void) { TopicTable.BeginFind(); - wxNode *node = TopicTable.Next(); + wxHashTable::Node *node = TopicTable.Next(); while (node) { TexTopic *texTopic = (TexTopic *)node->GetData(); @@ -1649,14 +1777,14 @@ void ClearKeyWordTable(void) /* * TexTopic structure */ - + TexTopic::TexTopic(wxChar *f) { if (f) filename = copystring(f); else filename = NULL; - hasChildren = FALSE; + hasChildren = false; keywords = NULL; } @@ -1676,17 +1804,16 @@ wxChar *ConvertCase(wxChar *s) int i; if (upperCaseNames) for (i = 0; i < len; i ++) - buf[i] = wxToupper(s[i]); + buf[i] = (wxChar)wxToupper(s[i]); else for (i = 0; i < len; i ++) - buf[i] = wxTolower(s[i]); + buf[i] = (wxChar)wxTolower(s[i]); buf[i] = 0; - return buf; + 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, +// if substring is true, search for str1 in str2 +bool StringMatch(const wxChar *str1, const wxChar *str2, bool subString, bool exact) { if (subString) @@ -1701,7 +1828,6 @@ bool StringMatch(const wxChar *str1, const wxChar *str2, bool subString, return Sstr2.Index(Sstr1) != (size_t)wxNOT_FOUND; } else - return exact ? wxString(str2).Cmp(str1) == 0 : + return exact ? wxString(str2).Cmp(str1) == 0 : wxString(str2).CmpNoCase(str1) == 0; } -#endif