Line data Source code
1 : /* 2 : Mosh: the mobile shell 3 : Copyright 2012 Keith Winstein 4 : 5 : This program is free software: you can redistribute it and/or modify 6 : it under the terms of the GNU General Public License as published by 7 : the Free Software Foundation, either version 3 of the License, or 8 : (at your option) any later version. 9 : 10 : This program is distributed in the hope that it will be useful, 11 : but WITHOUT ANY WARRANTY; without even the implied warranty of 12 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 : GNU General Public License for more details. 14 : 15 : You should have received a copy of the GNU General Public License 16 : along with this program. If not, see <http://www.gnu.org/licenses/>. 17 : 18 : In addition, as a special exception, the copyright holders give 19 : permission to link the code of portions of this program with the 20 : OpenSSL library under certain conditions as described in each 21 : individual source file, and distribute linked combinations including 22 : the two. 23 : 24 : You must obey the GNU General Public License in all respects for all 25 : of the code used other than OpenSSL. If you modify file(s) with this 26 : exception, you may extend this exception to your version of the 27 : file(s), but you are not obligated to do so. If you do not wish to do 28 : so, delete this exception statement from your version. If you delete 29 : this exception statement from all source files in the program, then 30 : also delete it here. 31 : */ 32 : 33 : #ifndef PARSERSTATE_HPP 34 : #define PARSERSTATE_HPP 35 : 36 : #include "parsertransition.h" 37 : 38 : namespace Parser { 39 : class StateFamily; 40 : 41 : class State 42 : { 43 : protected: 44 : virtual Transition input_state_rule( wchar_t ch ) const = 0; 45 : StateFamily *family; 46 : 47 : private: 48 : Transition anywhere_rule( wchar_t ch ) const; 49 : 50 : public: 51 1352 : void setfamily( StateFamily *s_family ) { family = s_family; } 52 : Transition input( wchar_t ch ) const; 53 54744 : virtual ActionPointer enter( void ) const { return shared::make_shared< Ignore >(); } 54 114782 : virtual ActionPointer exit( void ) const { return shared::make_shared< Ignore >(); } 55 : 56 1352 : State() : family( NULL ) {}; 57 : virtual ~State() {}; 58 : 59 : State( const State & ); 60 : State & operator=( const State & ); 61 : }; 62 : 63 1352 : class Ground : public State { 64 : Transition input_state_rule( wchar_t ch ) const; 65 : }; 66 : 67 1352 : class Escape : public State { 68 : ActionPointer enter( void ) const; 69 : Transition input_state_rule( wchar_t ch ) const; 70 : }; 71 : 72 1352 : class Escape_Intermediate : public State { 73 : Transition input_state_rule( wchar_t ch ) const; 74 : }; 75 : 76 1352 : class CSI_Entry : public State { 77 : ActionPointer enter( void ) const; 78 : Transition input_state_rule( wchar_t ch ) const; 79 : }; 80 1352 : class CSI_Param : public State { 81 : Transition input_state_rule( wchar_t ch ) const; 82 : }; 83 1352 : class CSI_Intermediate : public State { 84 : Transition input_state_rule( wchar_t ch ) const; 85 : }; 86 1352 : class CSI_Ignore : public State { 87 : Transition input_state_rule( wchar_t ch ) const; 88 : }; 89 : 90 1352 : class DCS_Entry : public State { 91 : ActionPointer enter( void ) const; 92 : Transition input_state_rule( wchar_t ch ) const; 93 : }; 94 1352 : class DCS_Param : public State { 95 : Transition input_state_rule( wchar_t ch ) const; 96 : }; 97 1352 : class DCS_Intermediate : public State { 98 : Transition input_state_rule( wchar_t ch ) const; 99 : }; 100 1352 : class DCS_Passthrough : public State { 101 : ActionPointer enter( void ) const; 102 : Transition input_state_rule( wchar_t ch ) const; 103 : ActionPointer exit( void ) const; 104 : }; 105 1352 : class DCS_Ignore : public State { 106 : Transition input_state_rule( wchar_t ch ) const; 107 : }; 108 : 109 1352 : class OSC_String : public State { 110 : ActionPointer enter( void ) const; 111 : Transition input_state_rule( wchar_t ch ) const; 112 : ActionPointer exit( void ) const; 113 : }; 114 1352 : class SOS_PM_APC_String : public State { 115 : Transition input_state_rule( wchar_t ch ) const; 116 : }; 117 : } 118 : 119 : #endif