Project

Profile

Help

Revision 13e86181

Added by Vincent Le Goff over 4 years ago

Add the aliases

View differences:

src/client.py
100 100
        if text.startswith("#"):
101 101
            self.sharp_engine.execute(text)
102 102
        else:
103
            self.client.write(text)
103
            # Test the aliases
104
            for alias in self.world.aliases:
105
                if alias.test(text):
106
                    return
107

  
108
            self.client.write(text + "\r\n")
104 109

  
105 110

  
106 111
class GUIClient(Client):
src/scripting/alias.py
1
# 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)
src/sharp/__init__.py
1 1
"""Package containing the sharp script."""
2 2

  
3 3
from sharp.function import Function
4
from sharp.functions.alias import Alias
4 5
from sharp.functions.macro import Macro
5 6
from sharp.functions.play import Play
6 7
from sharp.functions.say import Say
......
8 9
from sharp.functions.tts import TTS
9 10

  
10 11
FUNCTIONS = {
12
    "alias": Alias,
11 13
    "macro": Macro,
12 14
    "play": Play,
13 15
    "say": Say,
src/sharp/functions/alias.py
1
# 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
"""Module containing the Alias function class."""
30

  
31
from scripting.alias import Alias as ObjAlias
32
from sharp import Function
33

  
34
class Alias(Function):
35

  
36
    """Function SharpScript 'alias'."""
37

  
38
    def run(self, alias, action):
39
        """Create an alias."""
40
        alias = ObjAlias(self.sharp_engine, alias, action)
41
        if self.world:
42
            self.world.aliases.append(alias)
src/ui/window.py
215 215
        self.password.Clear()
216 216
        encoding = self.engine.settings["options.general.encoding"]
217 217
        msg = event.GetString().encode(encoding, "replace")
218
        self.client.write(msg + "\r\n")
218
        self.client.write(msg)
219 219

  
220 220
        # Write in the history
221 221
        if event.GetEventObject() == self.input:
src/world.py
56 56
        self.sharp_engine = None
57 57

  
58 58
        # World's configuration
59
        self.aliases = []
59 60
        self.macros = []
60 61
        self.triggers = []
61 62

  

Also available in: Unified diff