// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#pragma hdrstop
#endif
+#if defined(__WXMSW__)
+ #include "wx/msw/wrapwin.h"
+#endif
+
#ifndef WX_PRECOMP
#ifndef NO_GUI
#include "wx/menu.h"
#endif
#endif
+#include "wx/log.h"
+
#ifndef NO_GUI
#include "wx/timer.h"
#include "wx/help.h"
#endif
#endif // !NO_GUI
+#include "wx/utils.h"
+
#if wxUSE_IOSTREAMH
#include <iostream.h>
#include <fstream.h>
#include "rtfutils.h"
#include "symbols.h"
-#if (defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXX11__)) && !defined(NO_GUI)
+#if (defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXX11__) || defined(__WXMGL__)) && !defined(NO_GUI)
#include "tex2rtf.xpm"
#endif
{ return wxStrcpy(new wxChar[wxStrlen(s) + 1], s); }
#endif
-const float versionNo = (float)TEX2RTF_VERSION_NUMBER;
+const float versionNo = float(TEX2RTF_VERSION_NUMBER);
TexChunk *currentMember = NULL;
bool startedSections = false;
FILE *Popups = NULL;
FILE *WinHelpContentsFile = NULL;
-wxChar *InputFile = NULL;
-wxChar *OutputFile = NULL;
+wxString InputFile;
+wxString OutputFile;
wxChar *MacroFile = copystring(_T("tex2rtf.ini"));
wxChar *FileRoot = NULL;
bool Go(void);
void ShowOptions(void);
+void ShowVersion(void);
wxChar wxTex2RTFBuffer[1500];
// Read input/output files
if (argc > 1)
{
- if (argv[1][0] != '-')
- {
- InputFile = argv[1];
- n ++;
-
- if (argc > 2)
+ if (argv[1][0] != _T('-'))
{
- if (argv[2][0] != '-')
- {
- OutputFile = argv[2];
+ InputFile = argv[1];
n ++;
- }
+
+ if (argc > 2)
+ {
+ if (argv[2][0] != _T('-'))
+ {
+ OutputFile = argv[2];
+ n ++;
+ }
+ }
}
- }
}
+ TexPathList.Add(::wxGetCwd());
+
#ifdef NO_GUI
- if (!InputFile || !OutputFile)
+ if (InputFile.empty() || OutputFile.empty())
{
- wxSTD cout << "Tex2RTF: input or output file is missing.\n";
- ShowOptions();
- exit(1);
+ wxSTD cout << "Tex2RTF: input or output file is missing.\n";
+ ShowOptions();
+ exit(1);
}
#endif
- if (InputFile)
+ if (!InputFile.empty())
{
- TexPathList.EnsureFileAccessible(InputFile);
+ TexPathList.EnsureFileAccessible(InputFile);
}
- if (!InputFile || !OutputFile)
- isInteractive = true;
+ if (InputFile.empty() || OutputFile.empty())
+ isInteractive = true;
int i;
for (i = n; i < argc;)
i ++;
checkSyntax = true;
}
+ else if (wxStrcmp(argv[i], _T("-version")) == 0)
+ {
+ i ++;
+ ShowVersion();
+ }
else
{
wxString buf;
if (isInteractive)
{
- wxChar buf[100];
-
// Create the main frame window
frame = new MyFrame(NULL, wxID_ANY, _T("Tex2RTF"), wxDefaultPosition, wxSize(400, 300));
#if wxUSE_STATUSBAR
// TODO: uncomment this when we have tex2rtf.xpm
frame->SetIcon(wxICON(tex2rtf));
- if (InputFile)
+ if (!InputFile.empty())
{
- wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), wxFileNameFromPath(InputFile));
- frame->SetTitle(buf);
+ wxString title;
+ title.Printf( _T("Tex2RTF [%s]"), wxFileNameFromPath(InputFile).c_str());
+ frame->SetTitle(title);
}
// Make a menubar
menuBar->Append(help_menu, _T("&Help"));
frame->SetMenuBar(menuBar);
- frame->textWindow = new wxTextCtrl(frame, wxID_ANY, _T(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_MULTILINE);
+ frame->textWindow = new wxTextCtrl(frame, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_MULTILINE);
(*frame->textWindow) << _T("Welcome to Tex2RTF.\n");
// ShowOptions();
#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
HelpInstance = new wxCHMHelpController;
#else
- HelpInstance = new wxHtmlHelpController;
+ HelpInstance = new wxHelpController;
#endif
HelpInstance->Initialize(_T("tex2rtf"));
#endif // wxUSE_HELP
*/
wxString path = TexPathList.FindValidPath(MacroFile);
- if (path != _T(""))
- ReadCustomMacros((wxChar *)path.c_str());
+ if (!path.empty())
+ ReadCustomMacros(path);
#if wxUSE_STATUSBAR
- wxStrcpy(buf, _T("In "));
+ wxString inStr(_T("In "));
switch (convertMode)
{
- case TEX_RTF:
- wxStrcat(buf, (winHelp) ? _T("WinHelp RTF") : _T("linear RTF"));
- break;
- case TEX_HTML:
- wxStrcat(buf, _T("HTML"));
- break;
- case TEX_XLP:
- wxStrcat(buf, _T("XLP"));
- break;
- default:
- wxStrcat(buf, _T("unknown"));
- break;
+ case TEX_RTF:
+ if(winHelp)
+ inStr += _T("WinHelp RTF");
+ else
+ inStr += _T("linear RTF");
+ break;
+
+ case TEX_HTML:
+ inStr += _T("HTML");
+ break;
+
+ case TEX_XLP:
+ inStr += _T("XLP");
+ break;
+
+ default:
+ inStr += _T("unknown");
+ break;
}
- wxStrcat(buf, _T(" mode."));
- frame->SetStatusText(buf, 1);
+ inStr += _T(" mode.");
+ frame->SetStatusText(inStr, 1);
#endif // wxUSE_STATUSBAR
frame->Show(true);
*/
wxString path = TexPathList.FindValidPath(MacroFile);
- if (path != _T(""))
- ReadCustomMacros((wxChar*)path.c_str());
+ if (!path.empty())
+ ReadCustomMacros(path);
- Go();
- if (runTwice)
+ bool rc = Go();
+ if ( rc && runTwice )
{
- Go();
+ rc = Go();
}
#ifdef NO_GUI
- return true;
+ return rc;
#else
OnExit(); // Do cleanup since OnExit won't be called now
return false;
return 0;
}
#endif
-void ShowOptions(void)
+
+void ShowVersion(void)
{
wxChar buf[100];
wxSnprintf(buf, sizeof(buf), _T("Tex2RTF version %.2f"), versionNo);
OnInform(buf);
+}
+
+void ShowOptions(void)
+{
+ ShowVersion();
OnInform(_T("Usage: tex2rtf [input] [output] [switches]\n"));
OnInform(_T("where valid switches are"));
#ifndef NO_GUI
void MyFrame::OnSaveFile(wxCommandEvent& WXUNUSED(event))
{
- wxString s = wxFileSelector(_T("Save text to file"), _T(""), _T(""), _T("txt"), _T("*.txt"));
- if (s != _T(""))
- {
+#if wxUSE_FILEDLG
+ wxString s = wxFileSelector(_T("Save text to file"), wxEmptyString, wxEmptyString, _T("txt"), _T("*.txt"));
+ if (!s.empty())
+ {
textWindow->SaveFile(s);
#if wxUSE_STATUSBAR
wxChar buf[350];
wxSnprintf(buf, sizeof(buf), _T("Saved text to %s"), (const wxChar*) s.c_str());
frame->SetStatusText(buf, 0);
#endif // wxUSE_STATUSBAR
- }
+ }
+#endif // wxUSE_FILEDLG
}
void MyFrame::OnViewOutput(wxCommandEvent& WXUNUSED(event))
{
- ChooseOutputFile();
- if (OutputFile && wxFileExists(OutputFile))
- {
+ ChooseOutputFile();
+ if (!OutputFile.empty() && wxFileExists(OutputFile))
+ {
textWindow->LoadFile(OutputFile);
wxChar buf[300];
wxString str(wxFileNameFromPath(OutputFile));
wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str.c_str());
frame->SetTitle(buf);
- }
+ }
}
void MyFrame::OnViewLatex(wxCommandEvent& WXUNUSED(event))
{
- ChooseInputFile();
- if (InputFile && wxFileExists(InputFile))
- {
+ ChooseInputFile();
+ if (!InputFile.empty() && wxFileExists(InputFile))
+ {
textWindow->LoadFile(InputFile);
wxChar buf[300];
wxString str(wxFileNameFromPath(OutputFile));
wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str.c_str());
frame->SetTitle(buf);
- }
+ }
}
void MyFrame::OnLoadMacros(wxCommandEvent& WXUNUSED(event))
{
- textWindow->Clear();
- wxString s = wxFileSelector(_T("Choose custom macro file"), wxPathOnly(MacroFile), wxFileNameFromPath(MacroFile), _T("ini"), _T("*.ini"));
- if (s != _T("") && wxFileExists(s))
- {
+ textWindow->Clear();
+#if wxUSE_FILEDLG
+ wxString s = wxFileSelector(_T("Choose custom macro file"), wxPathOnly(MacroFile), wxFileNameFromPath(MacroFile), _T("ini"), _T("*.ini"));
+ if (!s.empty() && wxFileExists(s))
+ {
MacroFile = copystring(s);
- ReadCustomMacros((wxChar *)s.c_str());
+ ReadCustomMacros(s);
ShowCustomMacros();
- }
+ }
+#endif // wxUSE_FILEDLG
}
void MyFrame::OnShowMacros(wxCommandEvent& WXUNUSED(event))
{
- textWindow->Clear();
- Tex2RTFYield(true);
- ShowCustomMacros();
+ textWindow->Clear();
+ Tex2RTFYield(true);
+ ShowCustomMacros();
}
void MyFrame::OnModeRTF(wxCommandEvent& WXUNUSED(event))
{
- convertMode = TEX_RTF;
- winHelp = false;
- InputFile = NULL;
- OutputFile = NULL;
+ convertMode = TEX_RTF;
+ winHelp = false;
+ InputFile = wxEmptyString;
+ OutputFile = wxEmptyString;
#if wxUSE_STATUSBAR
- SetStatusText(_T("In linear RTF mode."), 1);
+ SetStatusText(_T("In linear RTF mode."), 1);
#endif // wxUSE_STATUSBAR
}
void MyFrame::OnModeWinHelp(wxCommandEvent& WXUNUSED(event))
{
- convertMode = TEX_RTF;
- winHelp = true;
- InputFile = NULL;
- OutputFile = NULL;
+ convertMode = TEX_RTF;
+ winHelp = true;
+ InputFile = wxEmptyString;
+ OutputFile = wxEmptyString;
#if wxUSE_STATUSBAR
- SetStatusText(_T("In WinHelp RTF mode."), 1);
+ SetStatusText(_T("In WinHelp RTF mode."), 1);
#endif // wxUSE_STATUSBAR
}
void MyFrame::OnModeHTML(wxCommandEvent& WXUNUSED(event))
{
- convertMode = TEX_HTML;
- winHelp = false;
- InputFile = NULL;
- OutputFile = NULL;
+ convertMode = TEX_HTML;
+ winHelp = false;
+ InputFile = wxEmptyString;
+ OutputFile = wxEmptyString;
#if wxUSE_STATUSBAR
- SetStatusText(_T("In HTML mode."), 1);
+ SetStatusText(_T("In HTML mode."), 1);
#endif // wxUSE_STATUSBAR
}
void MyFrame::OnModeXLP(wxCommandEvent& WXUNUSED(event))
{
- convertMode = TEX_XLP;
- InputFile = NULL;
- OutputFile = NULL;
+ convertMode = TEX_XLP;
+ InputFile = wxEmptyString;
+ OutputFile = wxEmptyString;
#if wxUSE_STATUSBAR
- SetStatusText(_T("In XLP mode."), 1);
+ SetStatusText(_T("In XLP mode."), 1);
#endif // wxUSE_STATUSBAR
}
void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxChar buf[300];
-#ifdef __WIN32__
- wxChar *platform = _T(" (32-bit)");
-#else
-#ifdef __WXMSW__
- wxChar *platform = _T(" (16-bit)");
-#else
- wxChar *platform = _T("");
-#endif
-#endif
- wxSnprintf(buf, sizeof(buf), _T("Tex2RTF Version %.2f%s\nLaTeX to RTF, WinHelp, and HTML Conversion\n\n(c) Julian Smart, George Tasker and others, 1999-2002"), versionNo, platform);
+ wxString platform = wxGetOsDescription();
+ wxSnprintf(buf, sizeof(buf), _T("Tex2RTF Version %.2f %s\nLaTeX to RTF, WinHelp, and HTML Conversion\n\n(c) Julian Smart, George Tasker and others, 1999-2005"), versionNo, platform.c_str());
wxMessageBox(buf, _T("About Tex2RTF"));
}
void ChooseInputFile(bool force)
{
- if (force || !InputFile)
- {
- wxString s = wxFileSelector(_T("Choose LaTeX input file"), wxPathOnly(InputFile), wxFileNameFromPath(InputFile), _T("tex"), _T("*.tex"));
- if (s != _T(""))
+#if wxUSE_FILEDLG
+ if (force || InputFile.empty())
{
- // Different file, so clear index entries.
- ClearKeyWordTable();
- ResetContentsLevels(0);
- passNumber = 1;
- errorCount = 0;
-
- InputFile = copystring(s);
- wxString str = wxFileNameFromPath(InputFile);
- wxString buf;
- buf.Printf(_T("Tex2RTF [%s]"), str.c_str());
- frame->SetTitle((wxChar *)buf.c_str());
- OutputFile = NULL;
+ wxString s = wxFileSelector(_T("Choose LaTeX input file"), wxPathOnly(InputFile), wxFileNameFromPath(InputFile), _T("tex"), _T("*.tex"));
+ if (!s.empty())
+ {
+ // Different file, so clear index entries.
+ ClearKeyWordTable();
+ ResetContentsLevels(0);
+ passNumber = 1;
+ errorCount = 0;
+
+ InputFile = s;
+ wxString str = wxFileNameFromPath(InputFile);
+ wxString buf;
+ buf.Printf(_T("Tex2RTF [%s]"), str.c_str());
+ frame->SetTitle((wxChar *)buf.c_str());
+ OutputFile = wxEmptyString;
+ }
}
- }
+#else
+ wxUnusedVar(force);
+#endif // wxUSE_FILEDLG
}
void ChooseOutputFile(bool force)
{
- wxChar extensionBuf[10];
- wxChar wildBuf[10];
- wxStrcpy(wildBuf, _T("*."));
- wxString path;
- if (OutputFile)
- path = wxPathOnly(OutputFile);
- else if (InputFile)
- path = wxPathOnly(InputFile);
+ wxChar extensionBuf[10];
+ wxChar wildBuf[10];
+ wxStrcpy(wildBuf, _T("*."));
+ wxString path;
+ if (!OutputFile.empty())
+ path = wxPathOnly(OutputFile);
+ else if (!InputFile.empty())
+ path = wxPathOnly(InputFile);
- switch (convertMode)
- {
- case TEX_RTF:
- {
- wxStrcpy(extensionBuf, _T("rtf"));
- wxStrcat(wildBuf, _T("rtf"));
- break;
- }
- case TEX_XLP:
+ switch (convertMode)
{
- wxStrcpy(extensionBuf, _T("xlp"));
- wxStrcat(wildBuf, _T("xlp"));
- break;
+ case TEX_RTF:
+ {
+ wxStrcpy(extensionBuf, _T("rtf"));
+ wxStrcat(wildBuf, _T("rtf"));
+ break;
+ }
+ case TEX_XLP:
+ {
+ wxStrcpy(extensionBuf, _T("xlp"));
+ wxStrcat(wildBuf, _T("xlp"));
+ break;
+ }
+ case TEX_HTML:
+ {
+ wxStrcpy(extensionBuf, _T("html"));
+ wxStrcat(wildBuf, _T("html"));
+ break;
+ }
}
- case TEX_HTML:
+#if wxUSE_FILEDLG
+ if (force || OutputFile.empty())
{
- wxStrcpy(extensionBuf, _T("html"));
- wxStrcat(wildBuf, _T("html"));
- break;
+ wxString s = wxFileSelector(_T("Choose output file"), path, wxFileNameFromPath(OutputFile),
+ extensionBuf, wildBuf);
+ if (!s.empty())
+ OutputFile = s;
}
- }
- if (force || !OutputFile)
- {
- wxString s = wxFileSelector(_T("Choose output file"), path, wxFileNameFromPath(OutputFile),
- extensionBuf, wildBuf);
- if (s != _T(""))
- OutputFile = copystring(s);
- }
+#else
+ wxUnusedVar(force);
+#endif // wxUSE_FILEDLG
}
#endif
ChooseOutputFile();
#endif
- if (!InputFile || !OutputFile || stopRunning)
+ if (InputFile.empty() || OutputFile.empty() || stopRunning)
return false;
#ifndef NO_GUI
frame->SetTitle(buf);
}
- wxStartTimer();
+ wxLongLong localTime = wxGetLocalTimeMillis();
#endif
// Find extension-less filename
- wxStrcpy(FileRoot, OutputFile);
+ wxStrcpy(FileRoot, OutputFile.c_str());
StripExtension(FileRoot);
if (truncateFilenames && convertMode == TEX_HTML)
if (!bulletFile)
{
wxString s = TexPathList.FindValidPath(_T("bullet.bmp"));
- if (s != _T(""))
+ if (!s.empty())
{
wxString str = wxFileNameFromPath(s);
bulletFile = copystring(str);
bool success = false;
- if (InputFile && OutputFile)
+ if (!InputFile.empty() && !OutputFile.empty())
{
if (!wxFileExists(InputFile))
{
wxString buf;
#ifndef NO_GUI
- long tim = wxGetElapsedTime();
- buf.Printf(_T("Finished PASS #%d in %ld seconds.\n"), passNumber, (long)(tim/1000.0));
+ wxLongLong elapsed = wxGetLocalTimeMillis() - localTime;
+ buf.Printf(_T("Finished PASS #%d in %ld seconds.\n"), passNumber, (long)(elapsed.GetLo()/1000.0));
OnInform((wxChar *)buf.c_str());
if (errorCount)
void OnError(const wxChar *msg)
{
- wxString msg_string = msg;
- errorCount++;
+ wxString msg_string = msg;
+ errorCount++;
#ifdef NO_GUI
- wxSTD cerr << "Error: " << msg_string.mb_str() << "\n";
- wxSTD cerr.flush();
-#else
- if (isInteractive && frame)
- (*frame->textWindow) << _T("Error: ") << msg << _T("\n");
- else
-#ifdef __UNIX__
- {
wxSTD cerr << "Error: " << msg_string.mb_str() << "\n";
wxSTD cerr.flush();
- }
+#else
+ if (isInteractive && frame)
+ {
+ (*frame->textWindow) << _T("Error: ") << msg << _T("\n");
+ }
+ else
+ {
+#if defined(__UNIX__)
+ wxSTD cerr << "Error: " << msg_string.mb_str() << "\n";
+ wxSTD cerr.flush();
+#elif defined(__WXMSW__)
+ wxLogError(msg);
#endif
+ }
-#ifdef __WXMSW__
- wxLogError(msg);
-#endif
- Tex2RTFYield(true);
+ Tex2RTFYield(true);
#endif // NO_GUI
}
void OnInform(const wxChar *msg)
{
- wxString msg_string = msg;
+ wxString msg_string = msg;
#ifdef NO_GUI
- wxSTD cout << msg_string.mb_str() << "\n";
- wxSTD cout.flush();
-#else
- if (isInteractive && frame)
- (*frame->textWindow) << msg << _T("\n");
-/* This whole block of code is just wrong I think. It would behave
- completely wrong under anything other than MSW due to the ELSE
- with no statement, and the cout calls would fail under MSW, as
- the code in this block is compiled if !NO_GUI This code has been
- here since v1.1 of this file too. - gt
- else
-#ifdef __WXMSW__
- {
wxSTD cout << msg_string.mb_str() << "\n";
wxSTD cout.flush();
- }
-#endif
-#ifdef __WXMSW__
- {}
+#else
+ if (isInteractive && frame)
+ {
+ (*frame->textWindow) << msg << _T("\n");
+ }
+ else
+ {
+#if defined(__UNIX__)
+ wxSTD cout << msg_string.mb_str() << "\n";
+ wxSTD cout.flush();
+#elif defined(__WXMSW__)
+ wxLogInfo(msg);
#endif
-*/
- if (isInteractive)
- {
- Tex2RTFYield(true);
- }
+ }
+
+ if (isInteractive)
+ {
+ Tex2RTFYield(true);
+ }
#endif // NO_GUI
}
bool hasArg = (wxStrlen(secondArg) > 0);
if (wxStrcmp(firstArg, _T("INPUT")) == 0 && hasArg)
{
- if (InputFile) delete[] InputFile;
- InputFile = copystring(secondArg);
- if (frame)
- {
- wxChar buf[100];
- wxString str = wxFileNameFromPath(InputFile);
- wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str);
- frame->SetTitle(buf);
- }
+ InputFile = secondArg;
+ if (frame)
+ {
+ wxChar buf[100];
+ wxString str = wxFileNameFromPath(InputFile);
+ wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str);
+ frame->SetTitle(buf);
+ }
}
else if (wxStrcmp(firstArg, _T("OUTPUT")) == 0 && hasArg)
{
- if (OutputFile) delete[] OutputFile;
- OutputFile = copystring(secondArg);
+ OutputFile = secondArg;
}
else if (wxStrcmp(firstArg, _T("GO")) == 0)
{