📄 tex2rtf.cpp
字号:
}#ifdef NO_GUI return rc;#else OnExit(); // Do cleanup since OnExit won't be called now return false;#endif }}#ifndef NO_GUIint MyApp::OnExit(){ wxNode *node = CustomMacroList.GetFirst(); while (node) { CustomMacro *macro = (CustomMacro *)node->GetData(); delete macro; delete node; node = CustomMacroList.GetFirst(); } MacroDefs.BeginFind(); wxHashTable::Node* mNode = MacroDefs.Next(); while (mNode) { TexMacroDef* def = (TexMacroDef*) mNode->GetData(); delete def; mNode = MacroDefs.Next(); } MacroDefs.Clear();#ifdef __WXMSW__ delete TheTex2RTFServer; wxDDECleanUp();#endif#if wxUSE_HELP delete HelpInstance;#endif // wxUSE_HELP if (BigBuffer) { delete BigBuffer; BigBuffer = NULL; } if (currentArgData) { delete currentArgData; currentArgData = NULL; } if (TexFileRoot) { delete TexFileRoot; TexFileRoot = NULL; } if (TexBibName) { delete TexBibName; TexBibName = NULL; } if (TexTmpBibName) { delete TexTmpBibName; TexTmpBibName = NULL; } if (FileRoot) { delete FileRoot; FileRoot = NULL; } if (ContentsName) { delete ContentsName; ContentsName = NULL; } if (TmpContentsName) { delete TmpContentsName; TmpContentsName = NULL; } if (TmpFrameContentsName) { delete TmpFrameContentsName; TmpFrameContentsName = NULL; } if (WinHelpContentsFileName) { delete WinHelpContentsFileName; WinHelpContentsFileName = NULL; } if (RefFileName) { delete RefFileName; RefFileName = NULL; } if (TopLevel) { delete TopLevel; TopLevel = NULL; } if (MacroFile) { delete MacroFile; MacroFile = NULL; } if (RTFCharset) { delete RTFCharset; RTFCharset = NULL; } delete [] PageStyle; delete [] BibliographyStyleString; delete [] DocumentStyleString; delete [] bitmapMethod; delete [] backgroundColourString; delete [] ContentsNameString; delete [] AbstractNameString; delete [] GlossaryNameString; delete [] ReferencesNameString; delete [] FiguresNameString; delete [] TablesNameString; delete [] FigureNameString; delete [] TableNameString; delete [] IndexNameString; delete [] ChapterNameString; delete [] SectionNameString; delete [] SubsectionNameString; delete [] SubsubsectionNameString; delete [] UpNameString; if (winHelpTitle) delete[] winHelpTitle; // TODO: this simulates zero-memory leaks! // Otherwise there are just too many...#ifndef __WXGTK__#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT wxDebugContext::SetCheckpoint();#endif#endif return 0;}#endifvoid ShowOptions(void){ wxChar buf[100]; wxSnprintf(buf, sizeof(buf), _T("Tex2RTF version %.2f"), versionNo); OnInform(buf); OnInform(_T("Usage: tex2rtf [input] [output] [switches]\n")); OnInform(_T("where valid switches are"));#ifndef NO_GUI OnInform(_T(" -interactive"));#endif OnInform(_T(" -bufsize <size in K>")); OnInform(_T(" -charset <pc | pca | ansi | mac> (default ansi)")); OnInform(_T(" -twice")); OnInform(_T(" -sync")); OnInform(_T(" -checkcurlybraces")); OnInform(_T(" -checksyntax")); OnInform(_T(" -macros <filename>")); OnInform(_T(" -winhelp")); OnInform(_T(" -rtf")); OnInform(_T(" -html")); OnInform(_T(" -xlp\n"));}#ifndef NO_GUIBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_CLOSE(MyFrame::OnCloseWindow) EVT_MENU(TEX_QUIT, MyFrame::OnExit) EVT_MENU(TEX_GO, MyFrame::OnGo) EVT_MENU(TEX_SET_INPUT, MyFrame::OnSetInput) EVT_MENU(TEX_SET_OUTPUT, MyFrame::OnSetOutput) EVT_MENU(TEX_SAVE_FILE, MyFrame::OnSaveFile) EVT_MENU(TEX_VIEW_LATEX, MyFrame::OnViewLatex) EVT_MENU(TEX_VIEW_OUTPUT, MyFrame::OnViewOutput) EVT_MENU(TEX_VIEW_CUSTOM_MACROS, MyFrame::OnShowMacros) EVT_MENU(TEX_LOAD_CUSTOM_MACROS, MyFrame::OnLoadMacros) EVT_MENU(TEX_MODE_RTF, MyFrame::OnModeRTF) EVT_MENU(TEX_MODE_WINHELP, MyFrame::OnModeWinHelp) EVT_MENU(TEX_MODE_HTML, MyFrame::OnModeHTML) EVT_MENU(TEX_MODE_XLP, MyFrame::OnModeXLP) EVT_MENU(TEX_OPTIONS_CURLY_BRACE, MyFrame::OnOptionsCurlyBrace) EVT_MENU(TEX_OPTIONS_SYNTAX_CHECKING, MyFrame::OnOptionsSyntaxChecking) EVT_MENU(TEX_HELP, MyFrame::OnHelp) EVT_MENU(TEX_ABOUT, MyFrame::OnAbout)END_EVENT_TABLE()// My frame constructorMyFrame::MyFrame(wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame(frame, id, title, pos, size){}void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)){ if (!stopRunning && !OkToClose) { stopRunning = true; runTwice = false; return; } else if (OkToClose) { this->Destroy(); }}void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event)){ Close();// this->Destroy();}void MyFrame::OnGo(wxCommandEvent& WXUNUSED(event)){ passNumber = 1; errorCount = 0; menuBar->EnableTop(0, false); menuBar->EnableTop(1, false); menuBar->EnableTop(2, false); menuBar->EnableTop(3, false); textWindow->Clear(); Tex2RTFYield(true); Go(); if (stopRunning) {#if wxUSE_STATUSBAR SetStatusText(_T("Build aborted!"));#endif // wxUSE_STATUSBAR wxString errBuf; errBuf.Printf(_T("\nErrors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)errBuf.c_str()); } if (runTwice && !stopRunning) { Tex2RTFYield(true); Go(); } menuBar->EnableTop(0, true); menuBar->EnableTop(1, true); menuBar->EnableTop(2, true); menuBar->EnableTop(3, true);}void MyFrame::OnSetInput(wxCommandEvent& WXUNUSED(event)){ ChooseInputFile(true);}void MyFrame::OnSetOutput(wxCommandEvent& WXUNUSED(event)){ ChooseOutputFile(true);}void MyFrame::OnSaveFile(wxCommandEvent& WXUNUSED(event)){#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.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.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();#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(s); ShowCustomMacros(); }#endif // wxUSE_FILEDLG}void MyFrame::OnShowMacros(wxCommandEvent& WXUNUSED(event)){ textWindow->Clear(); Tex2RTFYield(true); ShowCustomMacros();}void MyFrame::OnModeRTF(wxCommandEvent& WXUNUSED(event)){ convertMode = TEX_RTF; winHelp = false; InputFile = wxEmptyString; OutputFile = wxEmptyString;#if wxUSE_STATUSBAR SetStatusText(_T("In linear RTF mode."), 1);#endif // wxUSE_STATUSBAR}void MyFrame::OnModeWinHelp(wxCommandEvent& WXUNUSED(event)){ convertMode = TEX_RTF; winHelp = true; InputFile = wxEmptyString; OutputFile = wxEmptyString;#if wxUSE_STATUSBAR SetStatusText(_T("In WinHelp RTF mode."), 1);#endif // wxUSE_STATUSBAR}void MyFrame::OnModeHTML(wxCommandEvent& WXUNUSED(event)){ convertMode = TEX_HTML; winHelp = false; InputFile = wxEmptyString; OutputFile = wxEmptyString;#if wxUSE_STATUSBAR SetStatusText(_T("In HTML mode."), 1);#endif // wxUSE_STATUSBAR}void MyFrame::OnModeXLP(wxCommandEvent& WXUNUSED(event)){ convertMode = TEX_XLP; InputFile = wxEmptyString; OutputFile = wxEmptyString;#if wxUSE_STATUSBAR SetStatusText(_T("In XLP mode."), 1);#endif // wxUSE_STATUSBAR}void MyFrame::OnOptionsCurlyBrace(wxCommandEvent& WXUNUSED(event)){ checkCurlyBraces = !checkCurlyBraces;#if wxUSE_STATUSBAR if (checkCurlyBraces) { SetStatusText(_T("Checking curly braces: YES"), 1); } else { SetStatusText(_T("Checking curly braces: NO"), 1); }#endif // wxUSE_STATUSBAR}void MyFrame::OnOptionsSyntaxChecking(wxCommandEvent& WXUNUSED(event)){ checkSyntax = !checkSyntax;#if wxUSE_STATUSBAR if (checkSyntax) { SetStatusText(_T("Checking syntax: YES"), 1); } else { SetStatusText(_T("Checking syntax: NO"), 1); }#endif // wxUSE_STATUSBAR}void MyFrame::OnHelp(wxCommandEvent& WXUNUSED(event)){#if wxUSE_HELP HelpInstance->LoadFile(); HelpInstance->DisplayContents();#endif // wxUSE_HELP}void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)){ wxChar buf[300]; 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 wxUSE_FILEDLG if (force || InputFile.empty()) { 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.empty()) path = wxPathOnly(OutputFile); else if (!InputFile.empty()) path = wxPathOnly(InputFile); switch (convertMode) { case TEX_RTF: {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -