Cadabra
Computer algebra system for field theory problems
cadabra2-cli.hh
Go to the documentation of this file.
1 #include <string>
2 #include <memory>
3 
4 // Work around MSVC linking problem
5 #ifdef _DEBUG
6 #define CADABRA_CLI_DEBUG_MARKER
7 #undef _DEBUG
8 #endif
9 #include <Python.h>
10 #ifdef CADABRA_CLI_DEBUG_MARKER
11 #define _DEBUG
12 #undef CADABRA_CLI_DEBUG_MARKER
13 #endif
14 
15 
16 class Shell
17 {
18 public:
19  enum class Flags : unsigned int
20  {
21  None = 0x00,
22  NoBanner = 0x01,
23  IgnoreSemicolons = 0x02,
24  NoColour = 0x04,
25  NoReadline = 0x08,
26  };
27 
28  Shell(Flags flags);
29  ~Shell();
30 
31  void restart();
32  void interact();
33  void interact_file(const std::string& filename, bool preprocess = true);
34  bool execute_file(const std::string& filename, bool preprocess = true);
35  bool execute(const std::string& code, const std::string& filename = "<stdin>");
36  PyObject* evaluate(const std::string& code, const std::string& filename = "<stdin>");
37  std::string evaluate_to_string(const std::string& code, const std::string& err_val = "<error>");
38 
39  void write(const std::string& text, const char* end = "\n", const char* stream = "stdout", bool flush = false);
40  void write(PyObject* obj, const char* end = "\n", const char* stream = "stdout", bool flush = false);
41 
42 private:
43  void set_histfile();
44  std::string histfile;
45  std::string site_path;
46 
47  std::string to_string(PyObject* obj);
48  std::string sanitize(std::string s);
49 
50  bool process_ps1(const std::string& line);
51  bool process_ps2(const std::string& line);
52  void set_completion_callback(const char* buffer, std::vector<std::string>& completions);
53 
54  std::string get_ps1();
55  std::string get_ps2();
56 
57  bool is_syntax_error();
58  bool is_eof_error();
59  void handle_error();
60  void clear_error();
61 
62  PyObject* globals;
63  PyObject* sys;
64  std::string collect;
65 
66  const char* colour_error;
67  const char* colour_warning;
68  const char* colour_info;
69  const char* colour_success;
70  const char* colour_reset;
72  };
73 
74 class ExitRequest : public std::exception
75 {
76 public:
77  ExitRequest();
78  ExitRequest(int code);
79  ExitRequest(const std::string& message);
80 
81  virtual const char* what() const noexcept override;
82 
83  int code;
84  std::string message;
85 };
86 
87 
Shell::Flags & operator|=(Shell::Flags &lhs, Shell::Flags rhs)
Definition: cadabra2-cli.cc:534
int code
Definition: cadabra2-cli.hh:83
void write(const std::string &text, const char *end="\, const char *stream="stdout", bool flush=false)
Definition: cadabra2-cli.cc:258
const char * colour_error
Definition: cadabra2-cli.hh:66
void clear_error()
Definition: cadabra2-cli.cc:515
void set_histfile()
Definition: cadabra2-cli.cc:93
std::string site_path
Definition: cadabra2-cli.hh:45
bool operator&(Shell::Flags lhs, Shell::Flags rhs)
Definition: cadabra2-cli.cc:547
std::string message
Definition: cadabra2-cli.hh:84
bool process_ps1(const std::string &line)
Definition: cadabra2-cli.cc:361
std::string get_ps1()
Definition: cadabra2-cli.cc:411
~Shell()
Definition: cadabra2-cli.cc:87
void interact_file(const std::string &filename, bool preprocess=true)
Definition: cadabra2-cli.cc:215
Flags
Definition: cadabra2-cli.hh:19
ExitRequest()
Definition: cadabra2-cli.cc:520
void interact()
Definition: cadabra2-cli.cc:153
Ex rhs(Ex_ptr ex)
Definition: py_ex.cc:305
Flags flags
Definition: cadabra2-cli.hh:71
bool is_eof_error()
Definition: cadabra2-cli.cc:467
std::string evaluate_to_string(const std::string &code, const std::string &err_val="<error>")
Definition: cadabra2-cli.cc:307
bool execute(const std::string &code, const std::string &filename="<stdin>")
Definition: cadabra2-cli.cc:321
PyObject * sys
Definition: cadabra2-cli.hh:63
std::string histfile
Definition: cadabra2-cli.hh:44
bool execute_file(const std::string &filename, bool preprocess=true)
Definition: cadabra2-cli.cc:333
std::string get_ps2()
Definition: cadabra2-cli.cc:423
const char * colour_reset
Definition: cadabra2-cli.hh:70
PyObject * globals
Definition: cadabra2-cli.hh:62
void set_completion_callback(const char *buffer, std::vector< std::string > &completions)
Definition: cadabra2-cli.cc:435
void handle_error()
Definition: cadabra2-cli.cc:480
const char * colour_success
Definition: cadabra2-cli.hh:69
std::string to_string(PyObject *obj)
Definition: cadabra2-cli.cc:278
Flush flush
Definition: Snoop.cc:63
std::string collect
Definition: cadabra2-cli.hh:64
bool is_syntax_error()
Definition: cadabra2-cli.cc:460
Definition: cadabra2-cli.hh:74
std::string sanitize(std::string s)
Definition: cadabra2-cli.cc:288
const char * colour_warning
Definition: cadabra2-cli.hh:67
bool process_ps2(const std::string &line)
Definition: cadabra2-cli.cc:396
Definition: cadabra2-cli.hh:16
Shell(Flags flags)
Definition: cadabra2-cli.cc:66
virtual const char * what() const noexcept override
Definition: cadabra2-cli.cc:529
Shell::Flags operator|(Shell::Flags lhs, Shell::Flags rhs)
Definition: cadabra2-cli.cc:542
PyObject * evaluate(const std::string &code, const std::string &filename="<stdin>")
Definition: cadabra2-cli.cc:295
Ex lhs(Ex_ptr ex)
Definition: py_ex.cc:293
const char * colour_info
Definition: cadabra2-cli.hh:68
void restart()
Definition: cadabra2-cli.cc:128