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 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): 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
def _initfsm(self): # maps percent-expansion items to some value. self._EXPANSIONS = { "I": self._theme.BRIGHT, "N": self._theme.NORMAL, "D": self._theme.DEFAULT, "R": self._theme.BRIGHTRED, "G": self._theme.BRIGHTGREEN, "Y": self._theme.BRIGHTYELLOW, "B": self._theme.BRIGHTBLUE, "M": self._theme.BRIGHTMAGENTA, "C": self._theme.BRIGHTCYAN, "W": self._theme.BRIGHTWHITE, "r": self._theme.RED, "g": self._theme.GREEN, "y": self._theme.YELLOW, "b": self._theme.BLUE, "m": self._theme.MAGENTA, "c": self._theme.CYAN, "w": self._theme.WHITE, "n": "\n", "l": self._tty, "h": self._hostname, "u": self._username, "$": self._priv, "d": self._cwd, "L": self._shlvl, "t": self._time, "T": self._date } f = FSM(0) f.add_default_transition(self._error, 0) # add text to args f.add_transition(ANY, 0, self._addtext, 0) # percent escapes f.add_transition("%", 0, None, 1) f.add_transition("%", 1, self._addtext, 0) f.add_transition("{", 1, self._startvar, 2) f.add_transition("}", 2, self._endvar, 0) f.add_transition(ANY, 2, self._vartext, 2) f.add_transition(ANY, 1, self._expand, 0) f.arg = '' self._fsm = f
def _initfsm(self): # maps percent-expansion items to some value. self._EXPANSIONS = { "I":self._theme.BRIGHT, "N":self._theme.NORMAL, "D":self._theme.DEFAULT, "R":self._theme.BRIGHTRED, "G":self._theme.BRIGHTGREEN, "Y":self._theme.BRIGHTYELLOW, "B":self._theme.BRIGHTBLUE, "M":self._theme.BRIGHTMAGENTA, "C":self._theme.BRIGHTCYAN, "W":self._theme.BRIGHTWHITE, "r":self._theme.RED, "g":self._theme.GREEN, "y":self._theme.YELLOW, "b":self._theme.BLUE, "m":self._theme.MAGENTA, "c":self._theme.CYAN, "w":self._theme.WHITE, "n":"\n", "h":self._hostname, "u":self._username, "$": self._priv, "d":self._cwd, "L": self._shlvl, "t":self._time, "T":self._date} f = FSM(0) f.add_default_transition(self._error, 0) # add text to args f.add_transition(ANY, 0, self._addtext, 0) # percent escapes f.add_transition("%", 0, None, 1) f.add_transition("%", 1, self._addtext, 0) f.add_transition("{", 1, self._startvar, 2) f.add_transition("}", 2, self._endvar, 0) f.add_transition(ANY, 2, self._vartext, 2) f.add_transition(ANY, 1, self._expand, 0) f.arg = '' 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 _initfsm(self): # maps percent-expansion items to some value. theme = self._theme # Used in prompt strings given to readline library. self._PROMPT_EXPANSIONS = { "I": PROMPT_START_IGNORE + theme.BRIGHT + PROMPT_END_IGNORE, "N": PROMPT_START_IGNORE + theme.NORMAL + PROMPT_END_IGNORE, "D": PROMPT_START_IGNORE + theme.DEFAULT + PROMPT_END_IGNORE, "R": PROMPT_START_IGNORE + theme.BRIGHTRED + PROMPT_END_IGNORE, "G": PROMPT_START_IGNORE + theme.BRIGHTGREEN + PROMPT_END_IGNORE, "Y": PROMPT_START_IGNORE + theme.BRIGHTYELLOW + PROMPT_END_IGNORE, "B": PROMPT_START_IGNORE + theme.BRIGHTBLUE + PROMPT_END_IGNORE, "M": PROMPT_START_IGNORE + theme.BRIGHTMAGENTA + PROMPT_END_IGNORE, "C": PROMPT_START_IGNORE + theme.BRIGHTCYAN + PROMPT_END_IGNORE, "W": PROMPT_START_IGNORE + theme.BRIGHTWHITE + PROMPT_END_IGNORE, "r": PROMPT_START_IGNORE + theme.RED + PROMPT_END_IGNORE, "g": PROMPT_START_IGNORE + theme.GREEN + PROMPT_END_IGNORE, "y": PROMPT_START_IGNORE + theme.YELLOW + PROMPT_END_IGNORE, "b": PROMPT_START_IGNORE + theme.BLUE + PROMPT_END_IGNORE, "m": PROMPT_START_IGNORE + theme.MAGENTA + PROMPT_END_IGNORE, "c": PROMPT_START_IGNORE + theme.CYAN + PROMPT_END_IGNORE, "w": PROMPT_START_IGNORE + theme.WHITE + PROMPT_END_IGNORE, "n": "\n", "l": self._tty, "h": self._hostname, "u": self._username, "$": self._priv, "d": self._cwd, "L": self._shlvl, "t": self._time, "T": self._date, } self._FORMAT_EXPANSIONS = { "I": theme.BRIGHT, "N": theme.NORMAL, "D": theme.DEFAULT, "R": theme.BRIGHTRED, "G": theme.BRIGHTGREEN, "Y": theme.BRIGHTYELLOW, "B": theme.BRIGHTBLUE, "M": theme.BRIGHTMAGENTA, "C": theme.BRIGHTCYAN, "W": theme.BRIGHTWHITE, "r": theme.RED, "g": theme.GREEN, "y": theme.YELLOW, "b": theme.BLUE, "m": theme.MAGENTA, "c": theme.CYAN, "w": theme.WHITE, "n": "\n", "l": self._tty, "h": self._hostname, "u": self._username, "$": self._priv, "d": self._cwd, "L": self._shlvl, "t": self._time, "T": self._date, } fp = FSM(0) fp.add_default_transition(self._error, 0) # add text to args fp.add_transition(ANY, 0, self._addtext, 0) # percent escapes fp.add_transition("%", 0, None, 1) fp.add_transition("%", 1, self._addtext, 0) fp.add_transition("{", 1, self._startvar, 2) fp.add_transition("}", 2, self._endvar, 0) fp.add_transition(ANY, 2, self._vartext, 2) fp.add_transition(ANY, 1, self._prompt_expand, 0) fp.arg = '' self._fsm = fp ff = FSM(0) ff.add_default_transition(self._error, 0) # add text to args ff.add_transition(ANY, 0, self._addtext, 0) # percent escapes ff.add_transition("%", 0, None, 1) ff.add_transition("%", 1, self._addtext, 0) ff.add_transition("{", 1, self._startvar, 2) ff.add_transition("}", 2, self._endvar, 0) ff.add_transition(ANY, 2, self._vartext, 2) ff.add_transition(ANY, 1, self._format_expand, 0) ff.arg = '' self._ffsm = ff