/////////////////////////////////////////////////////////////////////////////
// Name:        tex2any.h
// Purpose:     tex2RTF conversion header
// Author:      Julian Smart
// Modified by: Wlodzimiez ABX Skiba 2003/2004 Unicode support
// Created:     7.9.93
// RCS-ID:      $Id: tex2rtf.h 41020 2006-09-05 20:47:48Z VZ $
// Copyright:   (c) Julian Smart
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#include "wx/app.h"

#ifndef NO_GUI
    #include "wx/frame.h"
    #include "wx/textctrl.h"

#ifdef __WXMSW__
    #include "wx/dde.h"
#endif

#endif

// Define a new application type
class MyApp: public
                    #ifndef NO_GUI
                        wxApp
                    #else
                        wxAppConsole
                    #endif
{ public:
    bool OnInit();
#ifdef NO_GUI
    int OnRun() { return EXIT_SUCCESS; }
#else
    int OnExit();
#endif
};

#ifndef NO_GUI

// Define a new frame type
class MyFrame: public wxFrame
{ public:
    wxTextCtrl *textWindow;
    MyFrame(wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size);

    void OnCloseWindow(wxCloseEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnGo(wxCommandEvent& event);
    void OnSetInput(wxCommandEvent& event);
    void OnSetOutput(wxCommandEvent& event);
    void OnSaveFile(wxCommandEvent& event);
    void OnViewOutput(wxCommandEvent& event);
    void OnViewLatex(wxCommandEvent& event);
    void OnLoadMacros(wxCommandEvent& event);
    void OnShowMacros(wxCommandEvent& event);
    void OnModeRTF(wxCommandEvent& event);
    void OnModeWinHelp(wxCommandEvent& event);
    void OnModeHTML(wxCommandEvent& event);
    void OnModeXLP(wxCommandEvent& event);
    void OnOptionsCurlyBrace(wxCommandEvent& event);
    void OnOptionsSyntaxChecking(wxCommandEvent& event);
    void OnHelp(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);

DECLARE_EVENT_TABLE()
};

#ifdef __WXMSW__

class Tex2RTFConnection: public wxDDEConnection
{
 public:
  Tex2RTFConnection(wxChar *buf, int size);
  virtual ~Tex2RTFConnection(void){}
  bool OnExecute(const wxString& topic, wxChar *data, int size, wxIPCFormat format);
  wxChar *OnRequest(const wxString& topic, const wxString& item, int *size, wxIPCFormat format);
};

class Tex2RTFServer: public wxDDEServer
{
 public:
  wxConnectionBase *OnAcceptConnection(const wxString& topic);
};

#endif // __WXMSW__

#endif // NO_GUI

/*
 * Itemize/enumerate structure: put on a stack for
 * getting the indentation right
 *
 */

#define LATEX_ENUMERATE   1
#define LATEX_ITEMIZE     2
#define LATEX_DESCRIPTION 3
#define LATEX_TWOCOL      5
#define LATEX_INDENT      6

class ItemizeStruc: public wxObject
{
  public:
    int listType;
    int currentItem;
    int indentation;
    int labelIndentation;
    inline ItemizeStruc(int lType, int indent = 0, int labIndent = 0)
    { listType = lType; currentItem = 0;
      indentation = indent; labelIndentation = labIndent; }
};

// ID for the menu quit command
#define TEX_QUIT wxID_EXIT
#define TEX_GO   2

#define TEX_SET_INPUT   3
#define TEX_SET_OUTPUT  4

#define TEX_VIEW_LATEX  5
#define TEX_VIEW_OUTPUT 6

#define TEX_VIEW_CUSTOM_MACROS 7
#define TEX_LOAD_CUSTOM_MACROS 8

#define TEX_MODE_RTF    9
#define TEX_MODE_WINHELP 10
#define TEX_MODE_HTML   11
#define TEX_MODE_XLP    12

#define TEX_OPTIONS_CURLY_BRACE 13
#define TEX_OPTIONS_SYNTAX_CHECKING 14

#define TEX_HELP        15
#define TEX_ABOUT       wxID_ABOUT
#define TEX_SAVE_FILE   17

extern TexChunk *currentMember;
extern bool startedSections;
extern wxChar *contentsString;
extern bool suppressNameDecoration;
extern wxList itemizeStack;

extern FILE *Contents;
extern FILE *Chapters;
extern FILE *Sections;
extern FILE *Subsections;
extern FILE *Subsubsections;

extern wxString InputFile;
extern wxString OutputFile;
extern wxChar *MacroFile;

extern wxChar *FileRoot;
extern wxChar *ContentsName;    // Contents page from last time around
extern wxChar *TmpContentsName; // Current contents page
extern wxChar *TmpFrameContentsName; // Current frame contents page
extern wxChar *WinHelpContentsFileName; // WinHelp .cnt file
extern wxChar *RefName;         // Reference file name
extern wxChar *bulletFile;

#ifndef NO_GUI
void ChooseOutputFile(bool force = false);
void ChooseInputFile(bool force = false);
#endif

void RTFOnMacro(int macroId, int no_args, bool start);
bool RTFOnArgument(int macroId, int arg_no, bool start);

void HTMLOnMacro(int macroId, int no_args, bool start);
bool HTMLOnArgument(int macroId, int arg_no, bool start);

void XLPOnMacro(int macroId, int no_args, bool start);
bool XLPOnArgument(int macroId, int arg_no, bool start);

bool RTFGo(void);
bool HTMLGo(void);
bool XLPGo(void);

#define ltHARDY         10000
