⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tex2rtf.cpp

📁 很牛的GUI源码wxWidgets-2.8.0.zip 可在多种平台下运行.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/////////////////////////////////////////////////////////////////////////////// Name:        tex2rtf.cpp// Purpose:     Converts Latex to linear/WinHelp RTF, HTML, wxHelp.// Author:      Julian Smart// Modified by: Wlodzimiez ABX Skiba 2003/2004 Unicode support//              Ron Lee// Created:     7.9.93// RCS-ID:      $Id: tex2rtf.cpp,v 1.58 2006/08/28 10:29:23 VZ Exp $// Copyright:   (c) Julian Smart// Licence:     wxWindows licence/////////////////////////////////////////////////////////////////////////////// For compilers that support precompilation, includes "wx.h".#include "wx/wxprec.h"#ifdef __BORLANDC__#pragma hdrstop#endif#if defined(__WXMSW__)    #include "wx/msw/wrapwin.h"#endif#ifndef WX_PRECOMP    #ifndef NO_GUI        #include "wx/menu.h"        #include "wx/textctrl.h"        #include "wx/filedlg.h"        #include "wx/msgdlg.h"        #include "wx/icon.h"    #endif#endif#include "wx/log.h"#ifndef NO_GUI    #include "wx/timer.h"    #include "wx/help.h"    #include "wx/cshelp.h"    #include "wx/helphtml.h"    #ifdef __WXMSW__        #include "wx/msw/helpchm.h"    #else        #include "wx/html/helpctrl.h"    #endif#endif // !NO_GUI#include "wx/utils.h"#if wxUSE_IOSTREAMH#include <iostream.h>#include <fstream.h>#else#include <iostream>#include <fstream>#endif#include <ctype.h>#include <stdlib.h>#include "tex2any.h"#include "tex2rtf.h"#include "rtfutils.h"#include "symbols.h"#if (defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXX11__) || defined(__WXMGL__)) && !defined(NO_GUI)#include "tex2rtf.xpm"#endif#if !WXWIN_COMPATIBILITY_2_4static inline wxChar* copystring(const wxChar* s)    { return wxStrcpy(new wxChar[wxStrlen(s) + 1], s); }#endifconst float versionNo = float(TEX2RTF_VERSION_NUMBER);TexChunk *currentMember = NULL;bool startedSections = false;wxChar *contentsString = NULL;bool suppressNameDecoration = false;bool OkToClose = true;int passNumber = 1;unsigned long errorCount = 0;#ifndef NO_GUIextern wxChar *BigBuffer;extern wxChar *TexFileRoot;extern wxChar *TexBibName;         // Bibliography output file nameextern wxChar *TexTmpBibName;      // Temporary bibliography output file nameextern wxList ColourTable;extern TexChunk *TopLevel;#if wxUSE_HELPwxHelpControllerBase *HelpInstance = NULL;#endif // wxUSE_HELP#ifdef __WXMSW__static wxChar *ipc_buffer = NULL;static wxChar Tex2RTFLastStatus[100];Tex2RTFServer *TheTex2RTFServer = NULL;#endif // __WXMSW__#endif // !NO_GUIwxChar *bulletFile = NULL;FILE *Contents = NULL;   // Contents pageFILE *Chapters = NULL;   // Chapters (WinHelp RTF) or rest of file (linear RTF)FILE *Sections = NULL;FILE *Subsections = NULL;FILE *Subsubsections = NULL;FILE *Popups = NULL;FILE *WinHelpContentsFile = NULL;wxString InputFile;wxString OutputFile;wxChar *MacroFile = copystring(_T("tex2rtf.ini"));wxChar *FileRoot = NULL;wxChar *ContentsName = NULL;    // Contents page from last time aroundwxChar *TmpContentsName = NULL; // Current contents pagewxChar *TmpFrameContentsName = NULL; // Current frame contents pagewxChar *WinHelpContentsFileName = NULL; // WinHelp .cnt filewxChar *RefFileName = NULL;         // Reference file namewxChar *RTFCharset = copystring(_T("ansi"));#ifdef __WXMSW__int BufSize = 100;             // Size of buffer in K#elseint BufSize = 500;#endifbool Go(void);void ShowOptions(void);wxChar wxTex2RTFBuffer[1500];#ifdef NO_GUI    IMPLEMENT_APP_CONSOLE(MyApp)#else    wxMenuBar *menuBar = NULL;    MyFrame *frame = NULL;    // DECLARE_APP(MyApp)    IMPLEMENT_APP(MyApp)#endif// `Main program' equivalent, creating windows and returning main app framebool MyApp::OnInit(){  // Use default list of macros defined in tex2any.cc  DefineDefaultMacros();  AddMacroDef(ltHARDY, _T("hardy"), 0);  FileRoot = new wxChar[300];  ContentsName = new wxChar[300];  TmpContentsName = new wxChar[300];  TmpFrameContentsName = new wxChar[300];  WinHelpContentsFileName = new wxChar[300];  RefFileName = new wxChar[300];  WX_CLEAR_LIST(wxList,ColourTable);  int n = 1;  // Read input/output files  if (argc > 1)  {      if (argv[1][0] != _T('-'))      {          InputFile = argv[1];          n ++;          if (argc > 2)          {              if (argv[2][0] != _T('-'))              {                  OutputFile = argv[2];                  n ++;              }          }      }  }  TexPathList.Add(::wxGetCwd());#ifdef NO_GUI  if (InputFile.empty() || OutputFile.empty())  {      wxSTD cout << "Tex2RTF: input or output file is missing.\n";      ShowOptions();      exit(1);  }#endif  if (!InputFile.empty())  {      TexPathList.EnsureFileAccessible(InputFile);  }  if (InputFile.empty() || OutputFile.empty())      isInteractive = true;  int i;  for (i = n; i < argc;)  {    if (wxStrcmp(argv[i], _T("-winhelp")) == 0)    {      i ++;      convertMode = TEX_RTF;      winHelp = true;    }#ifndef NO_GUI    else if (wxStrcmp(argv[i], _T("-interactive")) == 0)    {      i ++;      isInteractive = true;    }#endif    else if (wxStrcmp(argv[i], _T("-sync")) == 0)  // Don't yield    {      i ++;      isSync = true;    }    else if (wxStrcmp(argv[i], _T("-rtf")) == 0)    {      i ++;      convertMode = TEX_RTF;    }    else if (wxStrcmp(argv[i], _T("-html")) == 0)    {      i ++;      convertMode = TEX_HTML;    }    else if (wxStrcmp(argv[i], _T("-xlp")) == 0)    {      i ++;      convertMode = TEX_XLP;    }    else if (wxStrcmp(argv[i], _T("-twice")) == 0)    {      i ++;      runTwice = true;    }    else if (wxStrcmp(argv[i], _T("-macros")) == 0)    {      i ++;      if (i < argc)      {        MacroFile = copystring(argv[i]);        i ++;      }    }    else if (wxStrcmp(argv[i], _T("-bufsize")) == 0)    {      i ++;      if (i < argc)      {        BufSize = wxAtoi(argv[i]);        i ++;      }    }    else if (wxStrcmp(argv[i], _T("-charset")) == 0)    {      i ++;      if (i < argc)      {        wxChar *s = argv[i];        i ++;        if (wxStrcmp(s, _T("ansi")) == 0 || wxStrcmp(s, _T("pc")) == 0 || wxStrcmp(s, _T("mac")) == 0 ||            wxStrcmp(s, _T("pca")) == 0)          RTFCharset = copystring(s);        else        {          OnError(_T("Incorrect argument for -charset"));          return false;        }      }    }    else if (wxStrcmp(argv[i], _T("-checkcurlybraces")) == 0)    {      i ++;      checkCurlyBraces = true;    }    else if (wxStrcmp(argv[i], _T("-checkcurleybraces")) == 0)    {      // Support the old, incorrectly spelled version of -checkcurlybraces      // so that old scripts which run tex2rtf -checkcurleybraces still work.      i ++;      checkCurlyBraces = true;    }    else if (wxStrcmp(argv[i], _T("-checksyntax")) == 0)    {      i ++;      checkSyntax = true;    }    else    {      wxString buf;      buf.Printf(_T("Invalid switch %s.\n"), argv[i]);      OnError((wxChar *)buf.c_str());#ifdef NO_GUI      ShowOptions();      exit(1);#else      return false;#endif    }  }#if defined(__WXMSW__) && !defined(NO_GUI)  wxDDEInitialize();  Tex2RTFLastStatus[0] = 0; // DDE connection return value  TheTex2RTFServer = new Tex2RTFServer;  TheTex2RTFServer->Create(_T("TEX2RTF"));#endif  TexInitialize(BufSize);  ResetContentsLevels(0);#ifndef NO_GUI  if (isInteractive)  {    // Create the main frame window    frame = new MyFrame(NULL, wxID_ANY, _T("Tex2RTF"), wxDefaultPosition, wxSize(400, 300));#if wxUSE_STATUSBAR    frame->CreateStatusBar(2);#endif // wxUSE_STATUSBAR    // Give it an icon    // TODO: uncomment this when we have tex2rtf.xpm    frame->SetIcon(wxICON(tex2rtf));    if (!InputFile.empty())    {        wxString title;        title.Printf( _T("Tex2RTF [%s]"), wxFileNameFromPath(InputFile).c_str());        frame->SetTitle(title);    }    // Make a menubar    wxMenu *file_menu = new wxMenu;    file_menu->Append(TEX_GO, _T("&Go"), _T("Run converter"));    file_menu->Append(TEX_SET_INPUT, _T("Set &Input File"), _T("Set the LaTeX input file"));    file_menu->Append(TEX_SET_OUTPUT, _T("Set &Output File"), _T("Set the output file"));    file_menu->AppendSeparator();    file_menu->Append(TEX_VIEW_LATEX, _T("View &LaTeX File"), _T("View the LaTeX input file"));    file_menu->Append(TEX_VIEW_OUTPUT, _T("View Output &File"), _T("View output file"));    file_menu->Append(TEX_SAVE_FILE, _T("&Save log file"), _T("Save displayed text into file"));    file_menu->AppendSeparator();    file_menu->Append(TEX_QUIT, _T("E&xit"), _T("Exit Tex2RTF"));    wxMenu *macro_menu = new wxMenu;    macro_menu->Append(TEX_LOAD_CUSTOM_MACROS, _T("&Load Custom Macros"), _T("Load custom LaTeX macro file"));    macro_menu->Append(TEX_VIEW_CUSTOM_MACROS, _T("View &Custom Macros"), _T("View custom LaTeX macros"));    wxMenu *mode_menu = new wxMenu;    mode_menu->Append(TEX_MODE_RTF, _T("Output linear &RTF"), _T("Wordprocessor-compatible RTF"));    mode_menu->Append(TEX_MODE_WINHELP, _T("Output &WinHelp RTF"), _T("WinHelp-compatible RTF"));    mode_menu->Append(TEX_MODE_HTML, _T("Output &HTML"), _T("HTML World Wide Web hypertext file"));    mode_menu->Append(TEX_MODE_XLP, _T("Output &XLP"), _T("wxHelp hypertext help file"));    wxMenu *options_menu = new wxMenu;    options_menu->Append(TEX_OPTIONS_CURLY_BRACE, _T("Curly brace matching"), _T("Checks for mismatched curly braces"),true);    options_menu->Append(TEX_OPTIONS_SYNTAX_CHECKING, _T("Syntax checking"), _T("Syntax checking for common errors"),true);    options_menu->Check(TEX_OPTIONS_CURLY_BRACE, checkCurlyBraces);    options_menu->Check(TEX_OPTIONS_SYNTAX_CHECKING, checkSyntax);    wxMenu *help_menu = new wxMenu;    help_menu->Append(TEX_HELP, _T("&Help"), _T("Tex2RTF Contents Page"));    help_menu->Append(TEX_ABOUT, _T("&About Tex2RTF"), _T("About Tex2RTF"));    menuBar = new wxMenuBar;    menuBar->Append(file_menu, _T("&File"));    menuBar->Append(macro_menu, _T("&Macros"));    menuBar->Append(mode_menu, _T("&Conversion Mode"));    menuBar->Append(options_menu, _T("&Options"));    menuBar->Append(help_menu, _T("&Help"));    frame->SetMenuBar(menuBar);    frame->textWindow = new wxTextCtrl(frame, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_MULTILINE);    (*frame->textWindow) << _T("Welcome to Tex2RTF.\n");//    ShowOptions();#if wxUSE_HELP#if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)    HelpInstance = new wxCHMHelpController;#else    HelpInstance = new wxHelpController;#endif    HelpInstance->Initialize(_T("tex2rtf"));#endif // wxUSE_HELP    /*     * Read macro/initialisation file     *     */    wxString path = TexPathList.FindValidPath(MacroFile);    if (!path.empty())        ReadCustomMacros(path);#if wxUSE_STATUSBAR    wxString inStr(_T("In "));    switch (convertMode)    {        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;    }    inStr += _T(" mode.");    frame->SetStatusText(inStr, 1);#endif // wxUSE_STATUSBAR    frame->Show(true);    return true;  }  else#endif // NO_GUI  {    /*     * Read macro/initialisation file     *     */    wxString path = TexPathList.FindValidPath(MacroFile);    if (!path.empty())        ReadCustomMacros(path);    bool rc = Go();    if ( rc && runTwice )    {        rc = Go();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -