Imported from archive.
[mudpy.git] / lib / muff / muffmisc.py
1 """Miscellaneous objects for the MUFF Engine"""
2
3 # Copyright (c) 2005 mudpy, Jeremy Stanley <fungi@yuggoth.org>
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 #
10 #    - Redistributions of source code must retain the above copyright
11 #      notice, this list of conditions and the following disclaimer.
12 #    - Redistributions in binary form must reproduce the above
13 #      copyright notice, this list of conditions and the following
14 #      disclaimer in the documentation and/or other materials provided
15 #      with the distribution.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20 # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
21 # COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
23 # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 # POSSIBILITY OF SUCH DAMAGE.
29
30 import string
31
32 import muff
33 for module in muff.__all__:
34         exec("import " + module)
35
36 def broadcast(output):
37         for each_user in muffvars.userlist:
38                 each_user.send(output)
39
40 def wrap_ansi_text(text, width):
41         relative_position = 0
42         absolute_position = 0
43         escape = 0
44         for each_character in text:
45                 if each_character == chr(27):
46                         escape = 1
47                 elif escape:
48                         if each_character == "m":
49                                 escape = 0
50                 elif each_character == "\n":
51                         relative_position = 0
52                 elif relative_position == width:
53                         wrap_offset = 0
54                         while text[absolute_position - wrap_offset] != " ":
55                                 wrap_offset += 1
56                         text = text[:absolute_position - wrap_offset] + "\r\n" + text[absolute_position - wrap_offset + 1:]
57                         absolute_position += 1
58                         relative_position = wrap_offset
59                 elif each_character != "\r":
60                         relative_position += 1
61                 absolute_position += 1
62         return text
63