]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/tex2rtf/src/texutils.cpp
more code simplification
[wxWidgets.git] / utils / tex2rtf / src / texutils.cpp
index 3812ba7e40182f41b8d332acafcb7d1da9c0ad9a..5bf4838829c9f6b69a579667e6b44a9b832fc5ea 100644 (file)
@@ -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"
 
 
 #include "wx/app.h"
 #include "wx/hash.h"
+#include "wx/textfile.h"
 
 #ifdef new
 #undef new
 #endif
 
+#include "wx/beforestd.h"
 #if wxUSE_IOSTREAMH
 #include <iostream.h>
 #include <fstream.h>
 #include <fstream>
 using namespace std;
 #endif
+#include "wx/afterstd.h"
 
 #include <ctype.h>
 #include "tex2any.h"
 
-#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);
 wxList BibList(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)
+
+void StartSimulateArgument(const wxChar *data)
 {
   wxStrcpy(currentArgData, data);
-  haveArgData = TRUE;
+  haveArgData = true;
 }
 
 void EndSimulateArgument(void)
 {
-  haveArgData = FALSE;
+  haveArgData = false;
 }
 
 /*
@@ -232,8 +225,11 @@ void EndSimulateArgument(void)
  *
  */
 
-int ParseUnitArgument(wxChar *unitArg)
+int ParseUnitArgument(const wxChar *unitArg_)
 {
+  wxWxCharBuffer unitBuf(unitArg_);
+  wxChar *unitArg = unitBuf.data();
+
   float conversionFactor = 1.0;
   float unitValue = 0.0;
   int len = wxStrlen(unitArg);
@@ -242,13 +238,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 +267,7 @@ int ParseUnitArgument(wxChar *unitArg)
  * IF one exists. Inserts zero into buffer.
  *
  */
+
 void StripExtension(wxChar *buffer)
 {
   int len = wxStrlen(buffer);
@@ -338,18 +334,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 +358,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 +367,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 +390,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;
-
-  wxSTD ifstream istr(filename, wxSTD ios::in);
+    wxString name = filename;
 
-  if (istr.bad()) return;
+    if (!wxFileExists(name))
+        return;
 
-  wxChar label[100];
-  wxChar file[400];
-  wxChar section[100];
-  wxChar sectionName[100];
+    wxTextFile file;
+    if (!file.Open(name))
+        return;
 
-  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,
+            new TexRef(
+                labelStr.c_str(),
+                fileStr.c_str(),
+                sectionStr.c_str(),
+                sectionNameStr.c_str()
+            )
+        );
+        TexReferences.DeleteContents(false);
     }
-  }
 }
 
 
@@ -466,140 +471,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] == '\r')
+            BibLine ++;
+        line = line.substr(1);
+    }
+
+    // Ignore end-of-line comments
+    if ( !line.empty() && (line[0] == _T('%') || line[0] == _T(';') || line[0] == _T('#')))
+    {
+        line.clear();
+    }
+}
+
 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] != '\t') &&
+                          (line[0] != _T(';')) && (line[0] != _T('%')) && (line[0] != _T('#')))))
+    {
+        val << line[0];
+        line = line.substr(1);
+    }
+    if (!line.empty() && 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;
+}
 
-    if (ch == '}')
+// 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 (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)
+
+bool ReadBib(const 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 +736,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 +788,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 +805,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 +824,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 +890,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 +928,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 +937,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 +965,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 +1014,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 +1026,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 +1055,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 +1089,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 +1100,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 +1147,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();
@@ -1043,7 +1161,7 @@ void ResolveBibReferences(void)
 }
 
 // Remember we need to resolve this citation
-void AddCitation(wxChar *citeKey)
+void AddCitation(const wxChar *citeKey)
 {
   if (!CitationList.Member(citeKey))
     CitationList.Add(citeKey);
@@ -1054,7 +1172,7 @@ void AddCitation(wxChar *citeKey)
   }
 }
 
-TexRef *FindReference(wxChar *key)
+TexRef *FindReference(const wxChar *key)
 {
   return (TexRef *)TexReferences.Get(key);
 }
@@ -1064,352 +1182,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, &sectionFont);
-  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, &sectionFont);
+    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, 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 +1559,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 +1579,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 +1590,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 +1607,7 @@ wxChar *ParseMultifieldString(wxChar *allFields, int *pos)
   buffer[i] = 0;
   if (oldPos == (*pos))
     *pos = len + 1;
-    
+
   if (i == 0)
     return NULL;
   else
@@ -1489,7 +1618,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 +1676,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 +1685,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 +1703,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 +1724,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 +1758,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 +1766,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 +1780,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 +1807,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 +1831,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