示例#1
0
文件: CLI.py 项目: kdart/pycopia3
    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
示例#2
0
    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
示例#3
0
 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
示例#4
0
 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
示例#5
0
 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
示例#6
0
 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
示例#7
0
 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
示例#8
0
 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