1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Converts Latex to linear/WinHelp RTF, HTML, wxHelp.
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation
16 // For compilers that support precompilation, includes "wx.h".
17 #include "wx/wxprec.h"
32 #if defined(NO_GUI) || defined(__UNIX__)
48 #if (defined(__WXGTK__) || defined(__WXMOTIF__)) && !defined(NO_GUI)
49 #include "tex2rtf.xpm"
52 const float versionNo
= 2.0;
54 TexChunk
*currentMember
= NULL
;
55 bool startedSections
= FALSE
;
56 char *contentsString
= NULL
;
57 bool suppressNameDecoration
= FALSE
;
58 bool OkToClose
= TRUE
;
64 extern char *BigBuffer
;
65 extern char *TexFileRoot
;
66 extern char *TexBibName
; // Bibliography output file name
67 extern char *TexTmpBibName
; // Temporary bibliography output file name
68 extern wxList ColourTable
;
69 extern TexChunk
*TopLevel
;
70 extern char *PageStyle
;
71 extern char *BibliographyStyleString
;
72 extern char *DocumentStyleString
;
73 extern char *bitmapMethod
;
74 extern char *backgroundColourString
;
75 extern char *ContentsNameString
;
76 extern char *AbstractNameString
;
77 extern char *GlossaryNameString
;
78 extern char *ReferencesNameString
;
79 extern char *FiguresNameString
;
80 extern char *TablesNameString
;
81 extern char *FigureNameString
;
82 extern char *TableNameString
;
83 extern char *IndexNameString
;
84 extern char *ChapterNameString
;
85 extern char *SectionNameString
;
86 extern char *SubsectionNameString
;
87 extern char *SubsubsectionNameString
;
88 extern char *UpNameString
;
93 wxHelpController
*HelpInstance
= NULL
;
97 static char *ipc_buffer
= NULL
;
98 static char Tex2RTFLastStatus
[100];
99 Tex2RTFServer
*TheTex2RTFServer
= NULL
;
103 char *bulletFile
= NULL
;
105 FILE *Contents
= NULL
; // Contents page
106 FILE *Chapters
= NULL
; // Chapters (WinHelp RTF) or rest of file (linear RTF)
107 FILE *Sections
= NULL
;
108 FILE *Subsections
= NULL
;
109 FILE *Subsubsections
= NULL
;
111 FILE *WinHelpContentsFile
= NULL
;
113 char *InputFile
= NULL
;
114 char *OutputFile
= NULL
;
115 char *MacroFile
= copystring("tex2rtf.ini");
117 char *FileRoot
= NULL
;
118 char *ContentsName
= NULL
; // Contents page from last time around
119 char *TmpContentsName
= NULL
; // Current contents page
120 char *TmpFrameContentsName
= NULL
; // Current frame contents page
121 char *WinHelpContentsFileName
= NULL
; // WinHelp .cnt file
122 char *RefName
= NULL
; // Reference file name
124 char *RTFCharset
= copystring("ansi");
127 int BufSize
= 100; // Size of buffer in K
133 void ShowOptions(void);
137 #if wxUSE_GUI || !defined(__UNIX__)
138 // wxBase for Unix does not have wxBuffer
141 char *wxBuffer
; // we must init it, otherwise tex2rtf will crash
143 int main(int argc
, char **argv
)
145 wxMenuBar
*menuBar
= NULL
;
146 MyFrame
*frame
= NULL
;
148 // DECLARE_APP(MyApp)
151 // `Main program' equivalent, creating windows and returning main app frame
155 // Use default list of macros defined in tex2any.cc
156 DefineDefaultMacros();
157 AddMacroDef(ltHARDY
, "hardy", 0);
159 FileRoot
= new char[300];
160 ContentsName
= new char[300];
161 TmpContentsName
= new char[300];
162 TmpFrameContentsName
= new char[300];
163 WinHelpContentsFileName
= new char[300];
164 RefName
= new char[300];
166 ColourTable
.DeleteContents(TRUE
);
170 // Read input/output files
173 if (argv
[1][0] != '-')
180 if (argv
[2][0] != '-')
182 OutputFile
= argv
[2];
190 wxBuffer
= new char[1500];
191 // this is done in wxApp, but NO_GUI version doesn't call it :-(
193 if (!InputFile
|| !OutputFile
)
195 cout
<< "Tex2RTF: input or output file is missing.\n";
203 TexPathList
.EnsureFileAccessible(InputFile
);
205 if (!InputFile
|| !OutputFile
)
206 isInteractive
= TRUE
;
209 for (i
= n
; i
< argc
;)
211 if (strcmp(argv
[i
], "-winhelp") == 0)
214 convertMode
= TEX_RTF
;
218 else if (strcmp(argv
[i
], "-interactive") == 0)
221 isInteractive
= TRUE
;
224 else if (strcmp(argv
[i
], "-sync") == 0) // Don't yield
229 else if (strcmp(argv
[i
], "-rtf") == 0)
232 convertMode
= TEX_RTF
;
234 else if (strcmp(argv
[i
], "-html") == 0)
237 convertMode
= TEX_HTML
;
239 else if (strcmp(argv
[i
], "-xlp") == 0)
242 convertMode
= TEX_XLP
;
244 else if (strcmp(argv
[i
], "-twice") == 0)
249 else if (strcmp(argv
[i
], "-macros") == 0)
254 MacroFile
= copystring(argv
[i
]);
258 else if (strcmp(argv
[i
], "-bufsize") == 0)
263 BufSize
= atoi(argv
[i
]);
267 else if (strcmp(argv
[i
], "-charset") == 0)
274 if (strcmp(s
, "ansi") == 0 || strcmp(s
, "pc") == 0 || strcmp(s
, "mac") == 0 ||
275 strcmp(s
, "pca") == 0)
276 RTFCharset
= copystring(s
);
279 OnError("Incorrect argument for -charset");
284 else if (strcmp(argv
[i
], "-checkcurleybraces") == 0)
287 checkCurleyBraces
= TRUE
;
289 else if (strcmp(argv
[i
], "-checksyntax") == 0)
297 buf
.Printf("Invalid switch %s.\n", argv
[i
]);
298 OnError((char *)buf
.c_str());
308 #if defined(__WXMSW__) && !defined(NO_GUI)
310 Tex2RTFLastStatus
[0] = 0; // DDE connection return value
311 TheTex2RTFServer
= new Tex2RTFServer
;
312 TheTex2RTFServer
->Create("TEX2RTF");
315 #if defined(__WXMSW__) && defined(__WIN16__)
316 // Limit to max Windows array size
317 if (BufSize
> 64) BufSize
= 64;
320 TexInitialize(BufSize
);
321 ResetContentsLevels(0);
329 // Create the main frame window
330 frame
= new MyFrame(NULL
, -1, "Tex2RTF", wxPoint(-1, -1), wxSize(400, 300));
331 frame
->CreateStatusBar(2);
334 // TODO: uncomment this when we have tex2rtf.xpm
335 frame
->SetIcon(wxICON(tex2rtf
));
339 sprintf(buf
, "Tex2RTF [%s]", FileNameFromPath(InputFile
));
340 frame
->SetTitle(buf
);
344 wxMenu
*file_menu
= new wxMenu
;
345 file_menu
->Append(TEX_GO
, "&Go", "Run converter");
346 file_menu
->Append(TEX_SET_INPUT
, "Set &Input File", "Set the LaTeX input file");
347 file_menu
->Append(TEX_SET_OUTPUT
, "Set &Output File", "Set the output file");
348 file_menu
->AppendSeparator();
349 file_menu
->Append(TEX_VIEW_LATEX
, "View &LaTeX File", "View the LaTeX input file");
350 file_menu
->Append(TEX_VIEW_OUTPUT
, "View Output &File", "View output file");
351 file_menu
->Append(TEX_SAVE_FILE
, "&Save log file", "Save displayed text into file");
352 file_menu
->AppendSeparator();
353 file_menu
->Append(TEX_QUIT
, "E&xit", "Exit Tex2RTF");
355 wxMenu
*macro_menu
= new wxMenu
;
357 macro_menu
->Append(TEX_LOAD_CUSTOM_MACROS
, "&Load Custom Macros", "Load custom LaTeX macro file");
358 macro_menu
->Append(TEX_VIEW_CUSTOM_MACROS
, "View &Custom Macros", "View custom LaTeX macros");
360 wxMenu
*mode_menu
= new wxMenu
;
362 mode_menu
->Append(TEX_MODE_RTF
, "Output linear &RTF", "Wordprocessor-compatible RTF");
363 mode_menu
->Append(TEX_MODE_WINHELP
, "Output &WinHelp RTF", "WinHelp-compatible RTF");
364 mode_menu
->Append(TEX_MODE_HTML
, "Output &HTML", "HTML World Wide Web hypertext file");
365 mode_menu
->Append(TEX_MODE_XLP
, "Output &XLP", "wxHelp hypertext help file");
367 wxMenu
*options_menu
= new wxMenu
;
369 options_menu
->Append(TEX_OPTIONS_CURELY_BRACE
, "Curley brace matching", "Checks for mismatched curley braces",TRUE
);
370 options_menu
->Append(TEX_OPTIONS_SYNTAX_CHECKING
, "Syntax checking", "Syntax checking for common errors",TRUE
);
372 options_menu
->Check(TEX_OPTIONS_CURELY_BRACE
, checkCurleyBraces
);
373 options_menu
->Check(TEX_OPTIONS_SYNTAX_CHECKING
, checkSyntax
);
375 wxMenu
*help_menu
= new wxMenu
;
377 help_menu
->Append(TEX_HELP
, "&Help", "Tex2RTF Contents Page");
378 help_menu
->Append(TEX_ABOUT
, "&About Tex2RTF", "About Tex2RTF");
380 menuBar
= new wxMenuBar
;
381 menuBar
->Append(file_menu
, "&File");
382 menuBar
->Append(macro_menu
, "&Macros");
383 menuBar
->Append(mode_menu
, "&Conversion Mode");
384 menuBar
->Append(options_menu
, "&Options");
385 menuBar
->Append(help_menu
, "&Help");
387 frame
->SetMenuBar(menuBar
);
388 frame
->textWindow
= new wxTextCtrl(frame
, -1, "", wxPoint(-1, -1), wxSize(-1, -1), wxTE_READONLY
|wxTE_MULTILINE
);
390 (*frame
->textWindow
) << "Welcome to Julian Smart's LaTeX to RTF converter.\n";
394 HelpInstance
= new wxHelpController();
395 HelpInstance
->Initialize("tex2rtf");
399 * Read macro/initialisation file
404 if ((path
= TexPathList
.FindValidPath(MacroFile
)) != "")
405 ReadCustomMacros((char*) (const char*) path
);
409 if (winHelp
&& (convertMode
== TEX_RTF
))
410 strcat(buf
, "WinHelp RTF");
411 else if (!winHelp
&& (convertMode
== TEX_RTF
))
412 strcat(buf
, "linear RTF");
413 else if (convertMode
== TEX_HTML
) strcat(buf
, "HTML");
414 else if (convertMode
== TEX_XLP
) strcat(buf
, "XLP");
415 strcat(buf
, " mode.");
416 frame
->SetStatusText(buf
, 1);
425 * Read macro/initialisation file
430 if ((path
= TexPathList
.FindValidPath(MacroFile
)) != "")
431 ReadCustomMacros((char*) (const char*) path
);
446 // Return the main frame window
457 wxNode
*node
= CustomMacroList
.First();
460 CustomMacro
*macro
= (CustomMacro
*)node
->Data();
463 node
= CustomMacroList
.First();
465 MacroDefs
.BeginFind();
466 node
= MacroDefs
.Next();
469 TexMacroDef
* def
= (TexMacroDef
*) node
->Data();
471 node
= MacroDefs
.Next();
475 delete TheTex2RTFServer
;
490 delete currentArgData
;
491 currentArgData
= NULL
;
505 delete TexTmpBibName
;
506 TexTmpBibName
= NULL
;
520 delete TmpContentsName
;
521 TmpContentsName
= NULL
;
523 if (TmpFrameContentsName
)
525 delete TmpFrameContentsName
;
526 TmpFrameContentsName
= NULL
;
528 if (WinHelpContentsFileName
)
530 delete WinHelpContentsFileName
;
531 WinHelpContentsFileName
= NULL
;
555 delete [] BibliographyStyleString
;
556 delete [] DocumentStyleString
;
557 delete [] bitmapMethod
;
558 delete [] backgroundColourString
;
559 delete [] ContentsNameString
;
560 delete [] AbstractNameString
;
561 delete [] GlossaryNameString
;
562 delete [] ReferencesNameString
;
563 delete [] FiguresNameString
;
564 delete [] TablesNameString
;
565 delete [] FigureNameString
;
566 delete [] TableNameString
;
567 delete [] IndexNameString
;
568 delete [] ChapterNameString
;
569 delete [] SectionNameString
;
570 delete [] SubsectionNameString
;
571 delete [] SubsubsectionNameString
;
572 delete [] UpNameString
;
574 delete[] winHelpTitle
;
576 // TODO: this simulates zero-memory leaks!
577 // Otherwise there are just too many...
579 #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
580 wxDebugContext::SetCheckpoint();
587 void ShowOptions(void)
590 sprintf(buf
, "Tex2RTF version %.2f", versionNo
);
592 OnInform("Usage: tex2rtf [input] [output] [switches]\n");
593 OnInform("where valid switches are");
594 OnInform(" -interactive");
595 OnInform(" -bufsize <size in K>");
596 OnInform(" -charset <pc | pca | ansi | mac> (default ansi)");
599 OnInform(" -checkcurleybraces");
600 OnInform(" -checksyntax");
601 OnInform(" -macros <filename>");
602 OnInform(" -winhelp");
610 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
611 EVT_CLOSE(MyFrame::OnCloseWindow
)
612 EVT_MENU(TEX_QUIT
, MyFrame::OnExit
)
613 EVT_MENU(TEX_GO
, MyFrame::OnGo
)
614 EVT_MENU(TEX_SET_INPUT
, MyFrame::OnSetInput
)
615 EVT_MENU(TEX_SET_OUTPUT
, MyFrame::OnSetOutput
)
616 EVT_MENU(TEX_SAVE_FILE
, MyFrame::OnSaveFile
)
617 EVT_MENU(TEX_VIEW_LATEX
, MyFrame::OnViewLatex
)
618 EVT_MENU(TEX_VIEW_OUTPUT
, MyFrame::OnViewOutput
)
619 EVT_MENU(TEX_VIEW_CUSTOM_MACROS
, MyFrame::OnShowMacros
)
620 EVT_MENU(TEX_LOAD_CUSTOM_MACROS
, MyFrame::OnLoadMacros
)
621 EVT_MENU(TEX_MODE_RTF
, MyFrame::OnModeRTF
)
622 EVT_MENU(TEX_MODE_WINHELP
, MyFrame::OnModeWinHelp
)
623 EVT_MENU(TEX_MODE_HTML
, MyFrame::OnModeHTML
)
624 EVT_MENU(TEX_MODE_XLP
, MyFrame::OnModeXLP
)
625 EVT_MENU(TEX_OPTIONS_CURELY_BRACE
, MyFrame::OnOptionsCurleyBrace
)
626 EVT_MENU(TEX_OPTIONS_SYNTAX_CHECKING
, MyFrame::OnOptionsSyntaxChecking
)
627 EVT_MENU(TEX_HELP
, MyFrame::OnHelp
)
628 EVT_MENU(TEX_ABOUT
, MyFrame::OnAbout
)
631 // My frame constructor
632 MyFrame::MyFrame(wxFrame
*frame
, wxWindowID id
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
):
633 wxFrame(frame
, id
, title
, pos
, size
)
636 void MyFrame::OnCloseWindow(wxCloseEvent
& event
)
638 if (!stopRunning
&& !OkToClose
)
650 void MyFrame::OnExit(wxCommandEvent
& event
)
656 void MyFrame::OnGo(wxCommandEvent
& event
)
660 menuBar
->EnableTop(0, FALSE
);
661 menuBar
->EnableTop(1, FALSE
);
662 menuBar
->EnableTop(2, FALSE
);
663 menuBar
->EnableTop(3, FALSE
);
670 SetStatusText("Build aborted!");
672 errBuf
.Printf("\nErrors encountered during this pass: %lu\n", errorCount
);
673 OnInform((char *)errBuf
.c_str());
677 if (runTwice
&& !stopRunning
)
682 menuBar
->EnableTop(0, TRUE
);
683 menuBar
->EnableTop(1, TRUE
);
684 menuBar
->EnableTop(2, TRUE
);
685 menuBar
->EnableTop(3, TRUE
);
688 void MyFrame::OnSetInput(wxCommandEvent
& event
)
690 ChooseInputFile(TRUE
);
693 void MyFrame::OnSetOutput(wxCommandEvent
& event
)
695 ChooseOutputFile(TRUE
);
698 void MyFrame::OnSaveFile(wxCommandEvent
& event
)
700 wxString s
= wxFileSelector("Save text to file", "", "", "txt", "*.txt");
703 textWindow
->SaveFile(s
);
705 sprintf(buf
, "Saved text to %s", (const char*) s
);
706 frame
->SetStatusText(buf
, 0);
710 void MyFrame::OnViewOutput(wxCommandEvent
& event
)
713 if (OutputFile
&& wxFileExists(OutputFile
))
715 textWindow
->LoadFile(OutputFile
);
717 wxString
str(wxFileNameFromPath(OutputFile
));
718 sprintf(buf
, "Tex2RTF [%s]", (const char*) str
);
719 frame
->SetTitle(buf
);
723 void MyFrame::OnViewLatex(wxCommandEvent
& event
)
726 if (InputFile
&& wxFileExists(InputFile
))
728 textWindow
->LoadFile(InputFile
);
730 wxString
str(wxFileNameFromPath(OutputFile
));
731 sprintf(buf
, "Tex2RTF [%s]", (const char*) str
);
732 frame
->SetTitle(buf
);
736 void MyFrame::OnLoadMacros(wxCommandEvent
& event
)
739 wxString s
= wxFileSelector("Choose custom macro file", wxPathOnly(MacroFile
), wxFileNameFromPath(MacroFile
), "ini", "*.ini");
740 if (s
!= "" && wxFileExists(s
))
742 MacroFile
= copystring(s
);
743 ReadCustomMacros((char*) (const char*) s
);
748 void MyFrame::OnShowMacros(wxCommandEvent
& event
)
755 void MyFrame::OnModeRTF(wxCommandEvent
& event
)
757 convertMode
= TEX_RTF
;
761 SetStatusText("In linear RTF mode.", 1);
764 void MyFrame::OnModeWinHelp(wxCommandEvent
& event
)
766 convertMode
= TEX_RTF
;
770 SetStatusText("In WinHelp RTF mode.", 1);
773 void MyFrame::OnModeHTML(wxCommandEvent
& event
)
775 convertMode
= TEX_HTML
;
779 SetStatusText("In HTML mode.", 1);
782 void MyFrame::OnModeXLP(wxCommandEvent
& event
)
784 convertMode
= TEX_XLP
;
787 SetStatusText("In XLP mode.", 1);
790 void MyFrame::OnOptionsCurleyBrace(wxCommandEvent
& event
)
792 checkCurleyBraces
= !checkCurleyBraces
;
793 if (checkCurleyBraces
)
795 SetStatusText("Checking curley braces: YES", 1);
799 SetStatusText("Checking curley braces: NO", 1);
804 void MyFrame::OnOptionsSyntaxChecking(wxCommandEvent
& event
)
806 checkSyntax
= !checkSyntax
;
809 SetStatusText("Checking syntax: YES", 1);
813 SetStatusText("Checking syntax: NO", 1);
818 void MyFrame::OnHelp(wxCommandEvent
& event
)
821 HelpInstance
->LoadFile();
822 HelpInstance
->DisplayContents();
826 void MyFrame::OnAbout(wxCommandEvent
& event
)
830 char *platform
= " (32-bit)";
833 char *platform
= " (16-bit)";
838 sprintf(buf
, "Tex2RTF Version %.2f%s\nLaTeX to RTF, WinHelp, HTML and wxHelp Conversion\n\n(c) Julian Smart 1999", versionNo
, platform
);
839 wxMessageBox(buf
, "About Tex2RTF");
842 void ChooseInputFile(bool force
)
844 if (force
|| !InputFile
)
846 wxString s
= wxFileSelector("Choose LaTeX input file", wxPathOnly(InputFile
), wxFileNameFromPath(InputFile
), "tex", "*.tex");
849 // Different file, so clear index entries.
851 ResetContentsLevels(0);
855 InputFile
= copystring(s
);
856 wxString str
= wxFileNameFromPath(InputFile
);
858 buf
.Printf("Tex2RTF [%s]", str
.c_str());
859 frame
->SetTitle((char *)buf
.c_str());
865 void ChooseOutputFile(bool force
)
867 char extensionBuf
[10];
869 strcpy(wildBuf
, "*.");
872 path
= wxPathOnly(OutputFile
);
874 path
= wxPathOnly(InputFile
);
880 strcpy(extensionBuf
, "rtf");
881 strcat(wildBuf
, "rtf");
886 strcpy(extensionBuf
, "xlp");
887 strcat(wildBuf
, "xlp");
892 #if defined(__WXMSW__) && defined(__WIN16__)
893 strcpy(extensionBuf
, "htm");
894 strcat(wildBuf
, "htm");
896 strcpy(extensionBuf
, "html");
897 strcat(wildBuf
, "html");
902 if (force
|| !OutputFile
)
904 wxString s
= wxFileSelector("Choose output file", path
, wxFileNameFromPath(OutputFile
),
905 extensionBuf
, wildBuf
);
907 OutputFile
= copystring(s
);
919 if (!InputFile
|| !OutputFile
|| stopRunning
)
926 wxString str
= wxFileNameFromPath(InputFile
);
928 sprintf(buf
, "Tex2RTF [%s]", (const char*) str
);
929 frame
->SetTitle(buf
);
935 // Find extension-less filename
936 strcpy(FileRoot
, OutputFile
);
937 StripExtension(FileRoot
);
939 if (truncateFilenames
&& convertMode
== TEX_HTML
)
941 // Truncate to five characters. This ensures that
942 // we can generate DOS filenames such as thing999. But 1000 files
943 // may not be enough, of course...
944 char* sName
= wxFileNameFromPath( FileRoot
); // this Julian's method is non-destructive reference
947 if(strlen( sName
) > 5)
948 sName
[5] = '\0'; // that should do!
951 sprintf(ContentsName
, "%s.con", FileRoot
);
952 sprintf(TmpContentsName
, "%s.cn1", FileRoot
);
953 sprintf(TmpFrameContentsName
, "%s.frc", FileRoot
);
954 sprintf(WinHelpContentsFileName
, "%s.cnt", FileRoot
);
955 sprintf(RefName
, "%s.ref", FileRoot
);
957 TexPathList
.EnsureFileAccessible(InputFile
);
960 wxString s
= TexPathList
.FindValidPath("bullet.bmp");
963 wxString str
= wxFileNameFromPath(s
);
964 bulletFile
= copystring(str
);
968 if (wxFileExists(RefName
))
969 ReadTexReferences(RefName
);
971 bool success
= FALSE
;
973 if (InputFile
&& OutputFile
)
975 if (!FileExists(InputFile
))
977 OnError("Cannot open input file!");
985 buf
.Printf("Working, pass %d...Click CLOSE to abort", passNumber
);
986 frame
->SetStatusText((char *)buf
.c_str());
990 OnInform("Reading LaTeX file...");
991 TexLoadFile(InputFile
);
1020 OnInform("*** Aborted by user.");
1022 stopRunning
= FALSE
;
1028 WriteTexReferences(RefName
);
1030 startedSections
= FALSE
;
1034 long tim
= wxGetElapsedTime();
1035 buf
.Printf("Finished PASS #%d in %ld seconds.\n", passNumber
, (long)(tim
/1000.0));
1036 OnInform((char *)buf
.c_str());
1040 buf
.Printf("Errors encountered during this pass: %lu\n", errorCount
);
1041 OnInform((char *)buf
.c_str());
1046 buf
.Printf("Done, %d %s.", passNumber
, (passNumber
> 1) ? "passes" : "pass");
1047 frame
->SetStatusText((char *)buf
.c_str());
1050 buf
.Printf("Done, %d %s.", passNumber
, (passNumber
> 1) ? "passes" : "pass");
1051 OnInform((char *)buf
.c_str());
1054 buf
.Printf("Errors encountered during this pass: %lu\n", errorCount
);
1055 OnInform((char *)buf
.c_str());
1065 startedSections
= FALSE
;
1068 frame
->SetStatusText("Aborted by user.");
1071 OnInform("Sorry, unsuccessful.");
1076 void OnError(char *msg
)
1081 cerr
<< "Error: " << msg
<< "\n";
1084 if (isInteractive
&& frame
)
1085 (*frame
->textWindow
) << "Error: " << msg
<< "\n";
1089 cerr
<< "Error: " << msg
<< "\n";
1101 void OnInform(char *msg
)
1104 cout
<< msg
<< "\n";
1107 if (isInteractive
&& frame
)
1108 (*frame
->textWindow
) << msg
<< "\n";
1109 /* This whole block of code is just wrong I think. It would behave
1110 completely wrong under anything other than MSW due to the ELSE
1111 with no statement, and the cout calls would fail under MSW, as
1112 the code in this block is compiled if !NO_GUI This code has been
1113 here since v1.1 of this file too. - gt
1117 cout << msg << "\n";
1132 void OnMacro(int macroId
, int no_args
, bool start
)
1134 switch (convertMode
)
1138 RTFOnMacro(macroId
, no_args
, start
);
1143 XLPOnMacro(macroId
, no_args
, start
);
1148 HTMLOnMacro(macroId
, no_args
, start
);
1154 bool OnArgument(int macroId
, int arg_no
, bool start
)
1156 switch (convertMode
)
1160 return RTFOnArgument(macroId
, arg_no
, start
);
1165 return XLPOnArgument(macroId
, arg_no
, start
);
1170 return HTMLOnArgument(macroId
, arg_no
, start
);
1180 #if defined(__WXMSW__) && !defined(NO_GUI)
1186 wxConnectionBase
*Tex2RTFServer::OnAcceptConnection(const wxString
& topic
)
1188 if (topic
== "TEX2RTF")
1191 ipc_buffer
= new char[1000];
1193 return new Tex2RTFConnection(ipc_buffer
, 4000);
1203 Tex2RTFConnection::Tex2RTFConnection(char *buf
, int size
):wxDDEConnection(buf
, size
)
1207 Tex2RTFConnection::~Tex2RTFConnection(void)
1211 bool SplitCommand(char *data
, char *firstArg
, char *secondArg
)
1216 int len
= strlen(data
);
1218 // Find first argument (command name)
1221 if (data
[i
] == ' ' || data
[i
] == 0)
1225 firstArg
[i
] = data
[i
];
1232 // Find second argument
1235 while (data
[i
] != 0)
1237 secondArg
[j
] = data
[i
];
1246 bool Tex2RTFConnection::OnExecute(const wxString
& topic
, char *data
, int size
, int format
)
1248 strcpy(Tex2RTFLastStatus
, "OK");
1251 char secondArg
[300];
1252 if (SplitCommand(data
, firstArg
, secondArg
))
1254 bool hasArg
= (strlen(secondArg
) > 0);
1255 if (strcmp(firstArg
, "INPUT") == 0 && hasArg
)
1257 if (InputFile
) delete[] InputFile
;
1258 InputFile
= copystring(secondArg
);
1262 wxString str
= wxFileNameFromPath(InputFile
);
1263 sprintf(buf
, "Tex2RTF [%s]", (const char*) str
);
1264 frame
->SetTitle(buf
);
1267 else if (strcmp(firstArg
, "OUTPUT") == 0 && hasArg
)
1269 if (OutputFile
) delete[] OutputFile
;
1270 OutputFile
= copystring(secondArg
);
1272 else if (strcmp(firstArg
, "GO") == 0)
1274 strcpy(Tex2RTFLastStatus
, "WORKING");
1276 strcpy(Tex2RTFLastStatus
, "CONVERSION ERROR");
1278 strcpy(Tex2RTFLastStatus
, "OK");
1280 else if (strcmp(firstArg
, "EXIT") == 0)
1282 if (frame
) frame
->Close();
1284 else if (strcmp(firstArg
, "MINIMIZE") == 0 || strcmp(firstArg
, "ICONIZE") == 0)
1287 frame
->Iconize(TRUE
);
1289 else if (strcmp(firstArg
, "SHOW") == 0 || strcmp(firstArg
, "RESTORE") == 0)
1293 frame
->Iconize(FALSE
);
1299 // Try for a setting
1300 strcpy(Tex2RTFLastStatus
, RegisterSetting(firstArg
, secondArg
, FALSE
));
1302 if (frame
&& strcmp(firstArg
, "conversionMode") == 0)
1307 if (winHelp
&& (convertMode
== TEX_RTF
))
1308 strcat(buf
, "WinHelp RTF");
1309 else if (!winHelp
&& (convertMode
== TEX_RTF
))
1310 strcat(buf
, "linear RTF");
1311 else if (convertMode
== TEX_HTML
) strcat(buf
, "HTML");
1312 else if (convertMode
== TEX_XLP
) strcat(buf
, "XLP");
1313 strcat(buf
, " mode.");
1314 frame
->SetStatusText(buf
, 1);
1322 char *Tex2RTFConnection::OnRequest(const wxString
& topic
, const wxString
& item
, int *size
, int format
)
1324 return Tex2RTFLastStatus
;
1331 //void wxObject::Dump(wxSTD ostream& str)
1333 // if (GetClassInfo() && GetClassInfo()->GetClassName())
1334 // str << GetClassInfo()->GetClassName();
1336 // str << "unknown object class";