📄 tex2rtf.cpp
字号:
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; } }#if wxUSE_FILEDLG if (force || OutputFile.empty()) { wxString s = wxFileSelector(_T("Choose output file"), path, wxFileNameFromPath(OutputFile), extensionBuf, wildBuf); if (!s.empty()) OutputFile = s; }#else wxUnusedVar(force);#endif // wxUSE_FILEDLG}#endifbool Go(void){#ifndef NO_GUI ChooseInputFile(); ChooseOutputFile();#endif if (InputFile.empty() || OutputFile.empty() || stopRunning) return false;#ifndef NO_GUI if (isInteractive) { wxChar buf[300]; wxString str = wxFileNameFromPath(InputFile); wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str); frame->SetTitle(buf); } wxLongLong localTime = wxGetLocalTimeMillis();#endif // Find extension-less filename wxStrcpy(FileRoot, OutputFile.c_str()); StripExtension(FileRoot); if (truncateFilenames && convertMode == TEX_HTML) { // Truncate to five characters. This ensures that // we can generate DOS filenames such as thing999. But 1000 files // may not be enough, of course... wxChar* sName = wxFileNameFromPath( FileRoot); // this Julian's method is non-destructive reference if(sName) if(wxStrlen( sName) > 5) sName[5] = '\0'; // that should do! } wxSnprintf(ContentsName, 300, _T("%s.con"), FileRoot); wxSnprintf(TmpContentsName, 300, _T("%s.cn1"), FileRoot); wxSnprintf(TmpFrameContentsName, 300, _T("%s.frc"), FileRoot); wxSnprintf(WinHelpContentsFileName, 300, _T("%s.cnt"), FileRoot); wxSnprintf(RefFileName, 300, _T("%s.ref"), FileRoot); TexPathList.EnsureFileAccessible(InputFile); if (!bulletFile) { wxString s = TexPathList.FindValidPath(_T("bullet.bmp")); if (!s.empty()) { wxString str = wxFileNameFromPath(s); bulletFile = copystring(str); } } if (wxFileExists(RefFileName)) ReadTexReferences(RefFileName); bool success = false; if (!InputFile.empty() && !OutputFile.empty()) { if (!wxFileExists(InputFile)) { OnError(_T("Cannot open input file!")); TexCleanUp(); return false; }#if !defined(NO_GUI) && wxUSE_STATUSBAR if (isInteractive) { wxString buf; buf.Printf(_T("Working, pass %d...Click CLOSE to abort"), passNumber); frame->SetStatusText((wxChar *)buf.c_str()); }#endif OkToClose = false; OnInform(_T("Reading LaTeX file...")); TexLoadFile(InputFile); if (stopRunning) { OkToClose = true; return false; } switch (convertMode) { case TEX_RTF: { success = RTFGo(); break; } case TEX_XLP: { success = XLPGo(); break; } case TEX_HTML: { success = HTMLGo(); break; } } } if (stopRunning) { OnInform(_T("*** Aborted by user.")); success = false; stopRunning = false; OkToClose = true; } if (success) { WriteTexReferences(RefFileName); TexCleanUp(); startedSections = false; wxString buf;#ifndef NO_GUI 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) { buf.Printf(_T("Errors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)buf.c_str()); }#if wxUSE_STATUSBAR if (isInteractive) { buf.Printf(_T("Done, %d %s."), passNumber, (passNumber > 1) ? _T("passes") : _T("pass")); frame->SetStatusText((wxChar *)buf.c_str()); }#endif // wxUSE_STATUSBAR#else buf.Printf(_T("Done, %d %s."), passNumber, (passNumber > 1) ? _T("passes") : _T("pass")); OnInform((wxChar *)buf.c_str()); if (errorCount) { buf.Printf(_T("Errors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)buf.c_str()); }#endif passNumber ++; errorCount = 0; OkToClose = true; return true; } TexCleanUp(); startedSections = false;#if !defined(NO_GUI) && wxUSE_STATUSBAR frame->SetStatusText(_T("Aborted by user."));#endif // GUI OnInform(_T("Sorry, unsuccessful.")); OkToClose = true; return false;}void OnError(const wxChar *msg){ 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 {#if defined(__UNIX__) wxSTD cerr << "Error: " << msg_string.mb_str() << "\n"; wxSTD cerr.flush();#elif defined(__WXMSW__) wxLogError(msg);#endif } Tex2RTFYield(true);#endif // NO_GUI}void OnInform(const wxChar *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"); } else {#if defined(__UNIX__) wxSTD cout << msg_string.mb_str() << "\n"; wxSTD cout.flush();#elif defined(__WXMSW__) wxLogInfo(msg);#endif } if (isInteractive) { Tex2RTFYield(true); }#endif // NO_GUI}void OnMacro(int macroId, int no_args, bool start){ switch (convertMode) { case TEX_RTF: { RTFOnMacro(macroId, no_args, start); break; } case TEX_XLP: { XLPOnMacro(macroId, no_args, start); break; } case TEX_HTML: { HTMLOnMacro(macroId, no_args, start); break; } }}bool OnArgument(int macroId, int arg_no, bool start){ switch (convertMode) { case TEX_RTF: { return RTFOnArgument(macroId, arg_no, start); // break; } case TEX_XLP: { return XLPOnArgument(macroId, arg_no, start); // break; } case TEX_HTML: { return HTMLOnArgument(macroId, arg_no, start); // break; } } return true;}/* * DDE Stuff */#if defined(__WXMSW__) && !defined(NO_GUI)/* * Server */wxConnectionBase *Tex2RTFServer::OnAcceptConnection(const wxString& topic){ if (topic == _T("TEX2RTF")) { if (!ipc_buffer) ipc_buffer = new wxChar[1000]; return new Tex2RTFConnection(ipc_buffer, 4000); } else return NULL;} /* * Connection */Tex2RTFConnection::Tex2RTFConnection(wxChar *buf, int size):wxDDEConnection(buf, size){}bool SplitCommand(wxChar *data, wxChar *firstArg, wxChar *secondArg){ firstArg[0] = 0; secondArg[0] = 0; int i = 0; bool stop = false; // Find first argument (command name) while (!stop) { if (data[i] == ' ' || data[i] == 0) stop = true; else { firstArg[i] = data[i]; i ++; } } firstArg[i] = 0; if (data[i] == ' ') { // Find second argument i ++; int j = 0; while (data[i] != 0) { secondArg[j] = data[i]; i ++; j ++; } secondArg[j] = 0; } return true;}bool Tex2RTFConnection::OnExecute(const wxString& WXUNUSED(topic), wxChar *data, int WXUNUSED(size), wxIPCFormat WXUNUSED(format)){ wxStrcpy(Tex2RTFLastStatus, _T("OK")); wxChar firstArg[50]; wxChar secondArg[300]; if (SplitCommand(data, firstArg, secondArg)) { bool hasArg = (wxStrlen(secondArg) > 0); if (wxStrcmp(firstArg, _T("INPUT")) == 0 && hasArg) { 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) { OutputFile = secondArg; } else if (wxStrcmp(firstArg, _T("GO")) == 0) { wxStrcpy(Tex2RTFLastStatus, _T("WORKING")); if (!Go()) wxStrcpy(Tex2RTFLastStatus, _T("CONVERSION ERROR")); else wxStrcpy(Tex2RTFLastStatus, _T("OK")); } else if (wxStrcmp(firstArg, _T("EXIT")) == 0) { if (frame) frame->Close(); } else if (wxStrcmp(firstArg, _T("MINIMIZE")) == 0 || wxStrcmp(firstArg, _T("ICONIZE")) == 0) { if (frame) frame->Iconize(true); } else if (wxStrcmp(firstArg, _T("SHOW")) == 0 || wxStrcmp(firstArg, _T("RESTORE")) == 0) { if (frame) { frame->Iconize(false); frame->Show(true); } } else { // Try for a setting wxStrcpy(Tex2RTFLastStatus, RegisterSetting(firstArg, secondArg, false));#if !defined(NO_GUI) && wxUSE_STATUSBAR if (frame && wxStrcmp(firstArg, _T("conversionMode")) == 0) { wxChar buf[100]; wxStrcpy(buf, _T("In ")); if (winHelp && (convertMode == TEX_RTF)) wxStrcat(buf, _T("WinHelp RTF")); else if (!winHelp && (convertMode == TEX_RTF)) wxStrcat(buf, _T("linear RTF")); else if (convertMode == TEX_HTML) wxStrcat(buf, _T("HTML")); else if (convertMode == TEX_XLP) wxStrcat(buf, _T("XLP")); wxStrcat(buf, _T(" mode.")); frame->SetStatusText(buf, 1); }#endif } } return true;}wxChar *Tex2RTFConnection::OnRequest(const wxString& WXUNUSED(topic), const wxString& WXUNUSED(item), int *WXUNUSED(size), wxIPCFormat WXUNUSED(format)){ return Tex2RTFLastStatus;}#endif#ifndef NO_GUI#ifndef __WXGTK__//void wxObject::Dump(wxSTD ostream& str)//{// if (GetClassInfo() && GetClassInfo()->GetClassName())// str << GetClassInfo()->GetClassName();// else// str << "unknown object class";//}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -