24#ifndef WXMAXIMA_MAXIMA_H
25#define WXMAXIMA_MAXIMA_H
35#include <wx/sckstrm.h>
36#include <wx/txtstrm.h>
44#include "Configuration.h"
52void WxmShutdownTrace(
const char *where);
84 static wxString
InvertCase(
const wxString &var);
88 wxSocketBase *Socket()
const {
return m_socket.get(); }
97 static bool GetPipeToStdErr() {
return m_pipeToStderr; }
107 bool Write(
const void *buffer, std::size_t length);
126 XML_WATCH_VARIABLES_ADD,
128 XML_HTML_MANUAL_KEYWORDS,
138 STRING_FOR_XMLINSPECTOR,
140 void XmlInspectorActive(
bool active){m_xmlInspector = active;}
143 std::atomic_bool m_xmlInspector{
false};
151 std::atomic_bool m_readPendingQueued;
154 void SocketEvent(wxSocketEvent &event);
156 void TimerEvent(wxTimerEvent &event);
158 void OnIdle(wxIdleEvent &event);
160 std::unique_ptr<wxSocketBase> m_socket;
162 std::mutex m_socketMutex;
164 wxSocketInputStream m_socketInput;
173 wxTextInputStream m_textInput;
179 wxString m_socketInputData;
184 wxString m_processingBuffer;
189 std::vector<std::vector<char>> m_outputQueue;
190 std::mutex m_outputQueueMutex;
194 struct InterpretedItem {
198 std::vector<InterpretedItem> m_interpretedQueue;
199 std::mutex m_interpretedQueueMutex;
206 wxMemoryBuffer m_socketOutputData;
209 bool m_firstPrompt =
true;
211 static bool m_pipeToStderr;
239 wxTimer m_readIdleTimer{
this};
241 static std::unordered_map<wxString, EventCause, wxStringHash> m_knownTags;
242 static std::mutex m_knownTagsMutex;
245wxDECLARE_EVENT(EVT_MAXIMA, wxThreadEvent);
Small C++ standard-library compatibility shims.
The configuration storage for the current worksheet.
Definition: Configuration.h:88
Interface to the Maxima process.
Definition: Maxima.h:70
EventCause
Definition: Maxima.h:117
@ WRITE_PENDING
A write to Maxima is still ongoing. We use this event to keep the traffic indicator alive.
Definition: Maxima.h:135
@ READ_PENDING
There's still pending data coming from Maxima. The Data member is empty at the moment.
Definition: Maxima.h:119
@ WRITE_ERROR
The transmission has failed - this is an unrecoverable error, most likely.
Definition: Maxima.h:137
@ DISCONNECTED
Maxima has disconnected (possibly because the process had died).
Definition: Maxima.h:133
@ READ_MISC_TEXT
Maxima has sent non-XML text.
Definition: Maxima.h:121
void ReadSocket()
Read whatever data is in the socket. This is normally handled by the event handler,...
Definition: Maxima.cpp:140
static void GetPipeToStdErr(bool pipe)
Tells if the user wants all data to maxima to be copied to StdErr.
Definition: Maxima.h:96
static wxString MaximaVarnameToLisp(wxString var)
Convert a human-readable maxima variable name to one lisp understands.
Definition: Maxima.cpp:397
static wxString InvertCase(const wxString &var)
Invert case of chars that have inverted case in lisp.
Definition: Maxima.cpp:320
static void SetPipeToStdErr(bool pipe)
Tells us if the user wants all data to maxima to be copied to StdErr.
Definition: Maxima.h:94
bool IsConnected() const
Are we connected to Maxima?
Definition: Maxima.h:91
static wxString EscapeVarnameForMaxima(wxString var)
Convert a human-readable maxima variable name to one maxima understands.
Definition: Maxima.cpp:335
bool Write(const void *buffer, std::size_t length)
Write more data to be sent to maxima.
Definition: Maxima.cpp:123
void ClearFirstPrompt()
Clear the first prompt state, based on what was read from maxima. This is called from prompt recogniz...
Definition: Maxima.h:115