def initialize(self): """initializer. Responsible for setting self._fsm to a parser FSM implementing the CLI syntax. """ f = FSM(0) f.arg = "" f.add_default_transition(self._error, 0) # normally add text to args f.add_transition(ANY, 0, self._addtext, 0) f.add_transition_list(" \t", 0, self._wordbreak, 0) f.add_transition_list(";\n", 0, self._doit, 0) # slashes f.add_transition("\\", 0, None, 1) f.add_transition("\\", 3, None, 6) f.add_transition(ANY, 1, self._slashescape, 0) f.add_transition(ANY, 6, self._slashescape, 3) # vars f.add_transition("$", 0, self._startvar, 7) f.add_transition("{", 7, self._vartext, 9) f.add_transition_list(self.VARCHARS, 7, self._vartext, 7) f.add_transition(ANY, 7, self._endvar, 0) f.add_transition("}", 9, self._endvar, 0) f.add_transition(ANY, 9, self._vartext, 9) # vars in singlequote f.add_transition("$", 3, self._startvar, 8) f.add_transition("{", 8, self._vartext, 10) f.add_transition_list(self.VARCHARS, 8, self._vartext, 8) f.add_transition(ANY, 8, self._endvar, 3) f.add_transition("}", 10, self._endvar, 3) f.add_transition(ANY, 10, self._vartext, 10) # single quotes quote all f.add_transition("'", 0, None, 2) f.add_transition("'", 2, self._singlequote, 0) f.add_transition(ANY, 2, self._addtext, 2) # double quotes allow embedding word breaks and such f.add_transition('"', 0, None, 3) f.add_transition('"', 3, self._doublequote, 0) f.add_transition(ANY, 3, self._addtext, 3) # single-quotes withing double quotes f.add_transition("'", 3, None, 5) f.add_transition("'", 5, self._singlequote, 3) f.add_transition(ANY, 5, self._addtext, 5) # back-tick substitution f.add_transition("`", 0, None, 12) f.add_transition(ANY, 12, self._addtext, 12) f.add_transition("`", 12, self._do_backtick, 0) self._fsm = f
def _init(self): f = FSM(0) f.arg = "" f.add_default_transition(self._error, 0) # normally add text to args f.add_transition(ANY, 0, self._addtext, 0) f.add_transition_list(" \t", 0, self._wordbreak, 0) f.add_transition_list(";\n", 0, self._doit, 0) # slashes f.add_transition("\\", 0, None, 1) f.add_transition("\\", 3, None, 6) f.add_transition(ANY, 1, self._slashescape, 0) f.add_transition(ANY, 6, self._slashescape, 3) # vars f.add_transition("$", 0, self._startvar, 7) f.add_transition("{", 7, self._vartext, 9) f.add_transition_list(self.VARNAME, 7, self._vartext, 7) f.add_transition(ANY, 7, self._endvar, 0) f.add_transition("}", 9, self._endvarbrace, 0) f.add_transition(ANY, 9, self._vartext, 9) # vars in singlequote f.add_transition("$", 3, self._startvar, 8) f.add_transition("{", 8, self._vartext, 10) f.add_transition_list(self.VARNAME, 8, self._vartext, 8) f.add_transition(ANY, 8, self._endvar, 3) f.add_transition("}", 10, self._endvarbrace, 3) f.add_transition(ANY, 10, self._vartext, 10) # quotes allow embedding word breaks and such. # Single quotes can quote double quotes, and vice versa. f.add_transition("'", 0, None, 2) f.add_transition("'", 2, self._singlequote, 0) f.add_transition(ANY, 2, self._addtext, 2) f.add_transition('"', 0, None, 3) f.add_transition('"', 3, self._doublequote, 0) f.add_transition(ANY, 3, self._addtext, 3) self._fsm = f
def _init(self, keymap): keysyms = "".join(keymap.keys()) f = FSM(0) f.add_default_transition(self._error, 0) # key code names are in angle brackets f.add_transition_list(ascii.lowercase, 0, self._lower, 0) f.add_transition_list(ascii.uppercase, 0, self._upper, 0) f.add_transition_list(ascii.digits, 0, self._digit, 0) f.add_transition_list(keysyms, 0, self._symbols, 0) f.add_transition_list(ascii.control, 0, self._control, 0) f.add_transition(" ", 0, self._space, 0) # Any key name may use the "<NAME>" syntax (without the "KEY_") f.add_transition('<', 0, self._startkeycode, 2) f.add_transition_list(ascii.uppercase, 2, self._keyname, 2) f.add_transition('>', 2, self._keycode, 0) # slashes escape any special character. f.add_transition("\\", 0, None, 1) f.add_transition("\\", 1, self._backslash, 0) f.add_transition_list("tnrbe", 1, self._specials, 0) f.add_transition_list(keysyms, 1, self._symbols, 0) # percent signals meta transitions. f.add_transition("%", 0, None, 3) f.add_transition("%", 3, self._symbols, 0) f.add_transition_list("CcSsAaMmOo", 3, self._stickies, 0) self._fsm = f
def __init__(self): self._seconds = 0.0 f = FSM(0) f.arg = "" f.add_default_transition(self._error, 0) f.add_transition_list(textutils.digits + "+-", 0, self._newdigit, 1) f.add_transition_list(textutils.digits, 1, self._addtext, 1) f.add_transition(".", 1, self._addtext, 2) f.add_transition_list(textutils.digits, 2, self._addtext, 2) f.add_transition_list("dhms", 1, self._multiplier, 3) f.add_transition_list("dhms", 2, self._multiplier, 3) f.add_transition_list(textutils.letters, 3, None, 3) f.add_transition_list(textutils.whitespace, 3, None, 3) f.add_transition_list(textutils.digits + "+-", 3, self._newdigit, 1) self._fsm = f