Cadabra
Computer algebra system for field theory problems
Loading...
Searching...
No Matches
cadabra2-cli.hh
Go to the documentation of this file.
1#include <string>
2#include <memory>
3#include <fstream>
4
5// Work around MSVC linking problem
6#ifdef _DEBUG
7#define CADABRA_CLI_DEBUG_MARKER
8#undef _DEBUG
9#endif
10//#include <Python.h>
11#include <pybind11/pybind11.h>
12#include <pybind11/embed.h>
13#ifdef CADABRA_CLI_DEBUG_MARKER
14#define _DEBUG
15#undef CADABRA_CLI_DEBUG_MARKER
16#endif
17
18class Shell : public pybind11::scoped_interpreter {
19 public:
20 enum class Flags : unsigned int {
21 None = 0x00,
22 NoBanner = 0x01,
23 IgnoreSemicolons = 0x02,
24 NoColour = 0x04,
25 NoReadline = 0x08,
26 TeXmacs = 0x10
27 };
28
30 ~Shell();
31
32 void start();
33 void interact();
34 void interact_texmacs();
35 pybind11::object evaluate(const std::string& code, const std::string& filename = "<stdin>") const;
36 void execute(const std::string& code, const std::string& filename = "<stdin>");
37 void execute_file(const std::string& filename, bool preprocess = true);
38 void interact_file(const std::string& filename, bool preprocess = true);
39
40 void show_banner() const;
41 void write_stdout(const std::string& text, const std::string& end = "\n", bool flush = false);
42 void write_stderr(const std::string& text, const std::string& end = "\n", bool flush = false);
43
45 public:
48
49 void write(const std::string& txt);
50 void clear();
51 void flush();
52 std::string str() const;
53 private:
54 std::string collect;
55 };
56
58
59 private:
60 void set_histfile();
61 std::string histfile;
62 std::string site_path;
63 std::ofstream logf;
64
65 std::string str(const pybind11::handle& obj) const;
66 std::string repr(const pybind11::handle& obj);
67 std::string sanitize(std::string s);
68
69 void process_ps1(const std::string& line);
70 void process_ps2(const std::string& line);
71 void set_completion_callback(const char* buffer, std::vector<std::string>& completions);
72
73 std::string get_ps1();
74 std::string get_ps2();
75
76 void handle_error();
77 void handle_error(pybind11::error_already_set& err);
78
80
81 // These mimic what we do in Server.cc
82 pybind11::module main_module;
83 pybind11::object main_namespace;
84 // FIXME: Do we need globals?
85 pybind11::dict globals;
86 pybind11::object sys;
87 pybind11::object py_stdout, py_stderr;
88 std::string collect;
89
90 const char* colour_error;
91 const char* colour_warning;
92 const char* colour_info;
93 const char* colour_success;
94 const char* colour_reset;
95 const char* colour_bold;
97};
98
99class ExitRequest : public std::exception {
100 public:
101 ExitRequest();
102 ExitRequest(int code);
103 ExitRequest(const std::string& message);
104
105 virtual const char* what() const noexcept override;
106
107 int code;
108 std::string message;
109};
110
111
Shell::Flags & operator|=(Shell::Flags &lhs, Shell::Flags rhs)
Definition cadabra2-cli.cc:698
bool operator&(Shell::Flags lhs, Shell::Flags rhs)
Definition cadabra2-cli.cc:711
Shell::Flags operator|(Shell::Flags lhs, Shell::Flags rhs)
Definition cadabra2-cli.cc:706
Definition cadabra2-cli.hh:99
virtual const char * what() const noexcept override
Definition cadabra2-cli.cc:693
ExitRequest()
Definition cadabra2-cli.cc:684
std::string message
Definition cadabra2-cli.hh:108
int code
Definition cadabra2-cli.hh:107
Definition cadabra2-cli.hh:44
void write(const std::string &txt)
Definition cadabra2-cli.cc:56
void clear()
Definition cadabra2-cli.cc:62
CatchOutput()
Definition cadabra2-cli.cc:48
std::string str() const
Definition cadabra2-cli.cc:72
void flush()
Definition cadabra2-cli.cc:68
std::string collect
Definition cadabra2-cli.hh:54
Definition cadabra2-cli.hh:18
CatchOutput catchOut
Definition cadabra2-cli.hh:57
void interact()
Definition cadabra2-cli.cc:228
std::string site_path
Definition cadabra2-cli.hh:62
void process_ps2(const std::string &line)
Definition cadabra2-cli.cc:570
pybind11::module main_module
Definition cadabra2-cli.hh:82
std::string sanitize(std::string s)
Definition cadabra2-cli.cc:508
Flags flags
Definition cadabra2-cli.hh:96
void set_completion_callback(const char *buffer, std::vector< std::string > &completions)
Definition cadabra2-cli.cc:594
pybind11::object py_stderr
Definition cadabra2-cli.hh:87
void show_banner() const
Definition cadabra2-cli.cc:217
const char * colour_bold
Definition cadabra2-cli.hh:95
std::string collect
Definition cadabra2-cli.hh:88
void start()
const char * colour_reset
Definition cadabra2-cli.hh:94
const char * colour_info
Definition cadabra2-cli.hh:92
pybind11::object sys
Definition cadabra2-cli.hh:86
void interact_file(const std::string &filename, bool preprocess=true)
Definition cadabra2-cli.cc:369
std::string get_ps2()
Definition cadabra2-cli.cc:626
std::string repr(const pybind11::handle &obj)
Definition cadabra2-cli.cc:498
void set_histfile()
Definition cadabra2-cli.cc:458
~Shell()
Definition cadabra2-cli.cc:111
pybind11::object main_namespace
Definition cadabra2-cli.hh:83
CatchOutput catchErr
Definition cadabra2-cli.hh:57
Flags
Definition cadabra2-cli.hh:20
void interact_texmacs()
Definition cadabra2-cli.cc:140
std::ofstream logf
Definition cadabra2-cli.hh:63
const char * colour_warning
Definition cadabra2-cli.hh:91
void handle_error()
Definition cadabra2-cli.cc:637
std::string str(const pybind11::handle &obj) const
Definition cadabra2-cli.cc:493
void write_stderr(const std::string &text, const std::string &end="\n", bool flush=false)
Definition cadabra2-cli.cc:446
std::string histfile
Definition cadabra2-cli.hh:61
void execute_file(const std::string &filename, bool preprocess=true)
Definition cadabra2-cli.cc:325
const char * colour_success
Definition cadabra2-cli.hh:93
pybind11::object evaluate(const std::string &code, const std::string &filename="<stdin>") const
Definition cadabra2-cli.cc:300
pybind11::object py_stdout
Definition cadabra2-cli.hh:87
void execute(const std::string &code, const std::string &filename="<stdin>")
Definition cadabra2-cli.cc:313
const char * colour_error
Definition cadabra2-cli.hh:90
void write_stdout(const std::string &text, const std::string &end="\n", bool flush=false)
Definition cadabra2-cli.cc:434
void open_texmacs_logfile()
Definition cadabra2-cli.cc:117
pybind11::dict globals
Definition cadabra2-cli.hh:85
std::string get_ps1()
Definition cadabra2-cli.cc:614
void process_ps1(const std::string &line)
Definition cadabra2-cli.cc:514
void handle_error(pybind11::error_already_set &err)