Project

Profile

Help

Download (3.03 KB) Statistics View on GitHub Reload from mirrored respository
| Branch: | Tag: | Revision:

github / src / scripting / alias.py @ 13e86181

1 13e86181 Vincent Le Goff
# Copyright (c) 2016, LE GOFF Vincent
2
# All rights reserved.
3
4
# Redistribution and use in source and binary forms, with or without
5
# modification, are permitted provided that the following conditions are met:
6
7
# * Redistributions of source code must retain the above copyright notice, this
8
#   list of conditions and the following disclaimer.
9
10
# * Redistributions in binary form must reproduce the above copyright notice,
11
#   this list of conditions and the following disclaimer in the documentation
12
#   and/or other materials provided with the distribution.
13
14
# * Neither the name of ytranslate nor the names of its
15
#   contributors may be used to endorse or promote products derived from
16
#   this software without specific prior written permission.
17
18
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29
"""Class containing the Alias class."""
30
31
import re
32
33
class Alias:
34
35
    """An alias object.
36

37
    In a MUD client terminology, an alias is here to speed up command
38
    inputs by associating a certain (short) command with a desired
39
    input.  For instance, "co" could be associated with "crew order".
40

41
    """
42
43
    def __init__(self, sharp, alias, action):
44
        self.sharp_engine = sharp
45
        self.alias = alias
46
        self.re_alias = self.find_regex(alias)
47
        self.action = action
48
49
        # Set the alias's level
50
        self.level = sharp.engine.level
51
52
    def __repr__(self):
53
        return "<Alias for {} (level={})>".format(
54
                repr(self.alias), self.level.name)
55
56
    def find_regex(self, alias):
57
        """Find and compile the alias given as argument.
58

59
        If the alias begins with '^', the alias is already a
60
        regular expression that just needs to be compiled.  Otherwise,
61
        some automatic actions will be performed on it.
62

63
        """
64
        if alias.startswith("^"):
65
            return re.compile(alias)
66
67
        alias = re.escape(alias)
68
69
        # The '*' sign will be replaced by a group
70
        alias = alias.replace("\\*", "(.*?)")
71
        alias = "^" + alias + "$"
72
73
        return re.compile(alias, re.IGNORECASE)
74
75
    def test(self, command):
76
        """Should the alias be triggered by the text?"""
77
        if self.re_alias.search(command):
78
            self.execute()
79
            return True
80
81
        return False
82
83
    def execute(self):
84
        """Execute the alias."""
85
        self.sharp_engine.execute(self.action)