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 
46  std::string to_string(PyObject* obj);
47  std::string sanitize(std::string s);
48 
49  bool process_ps1(const std::string& line);
50  bool process_ps2(const std::string& line);
51  void set_completion_callback(const char* buffer, std::vector<std::string>& completions);
52 
53  std::string get_ps1();
54  std::string get_ps2();
55 
56  bool is_syntax_error();
57  bool is_eof_error();
58  void handle_error();
59  void clear_error();
60 
61  PyObject* globals;
62  PyObject* sys;
63  std::string collect;
64 
65  const char* colour_error;
66  const char* colour_warning;
67  const char* colour_info;
68  const char* colour_success;
69  const char* colour_reset;
71  };
72 
73 class ExitRequest : public std::exception
74 {
75 public:
76  ExitRequest();
77  ExitRequest(int code);
78  ExitRequest(const std::string& message);
79 
80  virtual const char* what() const noexcept override;
81 
82  int code;
83  std::string message;
84 };
85 
86 
Shell::execute_file
bool execute_file(const std::string &filename, bool preprocess=true)
Definition: cadabra2-cli.cc:302
Shell::~Shell
~Shell()
Definition: cadabra2-cli.cc:56
Shell::Flags::NoReadline
@ NoReadline
ExitRequest::code
int code
Definition: cadabra2-cli.hh:82
Shell::interact_file
void interact_file(const std::string &filename, bool preprocess=true)
Definition: cadabra2-cli.cc:184
Shell::process_ps2
bool process_ps2(const std::string &line)
Definition: cadabra2-cli.cc:365
Shell::flags
Flags flags
Definition: cadabra2-cli.hh:70
Shell::Flags::IgnoreSemicolons
@ IgnoreSemicolons
Shell::Flags
Flags
Definition: cadabra2-cli.hh:20
Shell::get_ps1
std::string get_ps1()
Definition: cadabra2-cli.cc:380
Shell::clear_error
void clear_error()
Definition: cadabra2-cli.cc:484
Shell::restart
void restart()
Definition: cadabra2-cli.cc:97
Shell::write
void write(const std::string &text, const char *end="\n", const char *stream="stdout", bool flush=false)
Definition: cadabra2-cli.cc:227
Shell
Definition: cadabra2-cli.hh:17
Shell::evaluate
PyObject * evaluate(const std::string &code, const std::string &filename="<stdin>")
Definition: cadabra2-cli.cc:264
Shell::histfile
std::string histfile
Definition: cadabra2-cli.hh:44
Shell::execute
bool execute(const std::string &code, const std::string &filename="<stdin>")
Definition: cadabra2-cli.cc:290
Shell::handle_error
void handle_error()
Definition: cadabra2-cli.cc:449
Shell::is_syntax_error
bool is_syntax_error()
Definition: cadabra2-cli.cc:429
Shell::colour_error
const char * colour_error
Definition: cadabra2-cli.hh:65
Shell::get_ps2
std::string get_ps2()
Definition: cadabra2-cli.cc:392
Shell::Shell
Shell(Flags flags)
Definition: cadabra2-cli.cc:35
cadabra::rhs
Ex rhs(Ex_ptr ex)
Definition: py_ex.cc:305
operator&
bool operator&(Shell::Flags lhs, Shell::Flags rhs)
Definition: cadabra2-cli.cc:516
Shell::colour_warning
const char * colour_warning
Definition: cadabra2-cli.hh:66
Shell::Flags::None
@ None
Shell::is_eof_error
bool is_eof_error()
Definition: cadabra2-cli.cc:436
Shell::set_completion_callback
void set_completion_callback(const char *buffer, std::vector< std::string > &completions)
Definition: cadabra2-cli.cc:404
Shell::to_string
std::string to_string(PyObject *obj)
Definition: cadabra2-cli.cc:247
Shell::colour_reset
const char * colour_reset
Definition: cadabra2-cli.hh:69
Shell::evaluate_to_string
std::string evaluate_to_string(const std::string &code, const std::string &err_val="<error>")
Definition: cadabra2-cli.cc:276
Shell::sanitize
std::string sanitize(std::string s)
Definition: cadabra2-cli.cc:257
Shell::colour_info
const char * colour_info
Definition: cadabra2-cli.hh:67
Shell::colour_success
const char * colour_success
Definition: cadabra2-cli.hh:68
snoop::flush
Flush flush
Definition: Snoop.cc:49
ExitRequest::what
virtual const char * what() const noexcept override
Definition: cadabra2-cli.cc:498
ExitRequest::message
std::string message
Definition: cadabra2-cli.hh:83
operator|
Shell::Flags operator|(Shell::Flags lhs, Shell::Flags rhs)
Definition: cadabra2-cli.cc:511
Shell::set_histfile
void set_histfile()
Definition: cadabra2-cli.cc:62
operator|=
Shell::Flags & operator|=(Shell::Flags &lhs, Shell::Flags rhs)
Definition: cadabra2-cli.cc:503
cadabra::lhs
Ex lhs(Ex_ptr ex)
Definition: py_ex.cc:293
Shell::globals
PyObject * globals
Definition: cadabra2-cli.hh:61
ExitRequest
Definition: cadabra2-cli.hh:74
Shell::collect
std::string collect
Definition: cadabra2-cli.hh:63
Shell::sys
PyObject * sys
Definition: cadabra2-cli.hh:62
Shell::interact
void interact()
Definition: cadabra2-cli.cc:122
ExitRequest::ExitRequest
ExitRequest()
Definition: cadabra2-cli.cc:489
Shell::Flags::NoBanner
@ NoBanner
Shell::Flags::NoColour
@ NoColour
Shell::process_ps1
bool process_ps1(const std::string &line)
Definition: cadabra2-cli.cc:330