#ifndef TERMINALDISPATCHER_HPP #define TERMINALDISPATCHER_HPP #include #include #include namespace Parser { class Action; class Param; class Collect; class Clear; class Esc_Dispatch; class CSI_Dispatch; class Execute; class OSC_Start; class OSC_Put; class OSC_End; } namespace Terminal { class Framebuffer; class Dispatcher; enum Function_Type { ESCAPE, CSI, CONTROL }; class Function { public: Function() : function( NULL ), clears_wrap_state( true ) {} Function( Function_Type type, std::string dispatch_chars, void (*s_function)( Framebuffer *, Dispatcher * ), bool s_clears_wrap_state = true ); void (*function)( Framebuffer *, Dispatcher * ); bool clears_wrap_state; }; typedef std::map dispatch_map_t; class DispatchRegistry { public: dispatch_map_t escape; dispatch_map_t CSI; dispatch_map_t control; DispatchRegistry() : escape(), CSI(), control() {} }; DispatchRegistry & get_global_dispatch_registry( void ); class Dispatcher { private: std::string params; std::vector parsed_params; bool parsed; std::string dispatch_chars; std::vector OSC_string; /* only used to set the window title */ void parse_params( void ); public: std::string terminal_to_host; /* this is the reply string */ Dispatcher(); int getparam( size_t N, int defaultval ); int param_count( void ); void newparamchar( const Parser::Param *act ); void collect( const Parser::Collect *act ); void clear( const Parser::Clear *act ); std::string str( void ); void dispatch( Function_Type type, const Parser::Action *act, Framebuffer *fb ); std::string get_dispatch_chars( void ) { return dispatch_chars; } std::vector get_OSC_string( void ) { return OSC_string; } void OSC_put( const Parser::OSC_Put *act ); void OSC_start( const Parser::OSC_Start *act ); void OSC_dispatch( const Parser::OSC_End *act, Framebuffer *fb ); bool operator==( const Dispatcher &x ) const; }; } #endif