mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-02-03 16:14:10 +01:00
String: Add unicodename and unicodesearch commands.
This commit is contained in:
parent
0919b9f58a
commit
f1a5ab4866
@ -34,6 +34,7 @@ import types
|
|||||||
import codecs
|
import codecs
|
||||||
import base64
|
import base64
|
||||||
import binascii
|
import binascii
|
||||||
|
import unicodedata
|
||||||
|
|
||||||
import supybot.utils as utils
|
import supybot.utils as utils
|
||||||
from supybot.commands import *
|
from supybot.commands import *
|
||||||
@ -42,14 +43,13 @@ import supybot.plugins as plugins
|
|||||||
import supybot.commands as commands
|
import supybot.commands as commands
|
||||||
import supybot.ircutils as ircutils
|
import supybot.ircutils as ircutils
|
||||||
import supybot.callbacks as callbacks
|
import supybot.callbacks as callbacks
|
||||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
from supybot.i18n import PluginInternationalization
|
||||||
_ = PluginInternationalization('String')
|
_ = PluginInternationalization('String')
|
||||||
|
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
|
|
||||||
class String(callbacks.Plugin):
|
class String(callbacks.Plugin):
|
||||||
"""Provides useful commands for manipulating characters and strings."""
|
"""Provides useful commands for manipulating characters and strings."""
|
||||||
@internationalizeDocstring
|
|
||||||
def ord(self, irc, msg, args, letter):
|
def ord(self, irc, msg, args, letter):
|
||||||
"""<letter>
|
"""<letter>
|
||||||
|
|
||||||
@ -58,7 +58,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(str(ord(letter)))
|
irc.reply(str(ord(letter)))
|
||||||
ord = wrap(ord, ['letter'])
|
ord = wrap(ord, ['letter'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def chr(self, irc, msg, args, i):
|
def chr(self, irc, msg, args, i):
|
||||||
"""<number>
|
"""<number>
|
||||||
|
|
||||||
@ -70,7 +69,28 @@ class String(callbacks.Plugin):
|
|||||||
irc.error(_('That number doesn\'t map to a unicode character.'))
|
irc.error(_('That number doesn\'t map to a unicode character.'))
|
||||||
chr = wrap(chr, ['int'])
|
chr = wrap(chr, ['int'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
def unicodename(self, irc, msg, args, character):
|
||||||
|
"""<character>
|
||||||
|
|
||||||
|
Returns the name of the given unicode <character>."""
|
||||||
|
if len(character) != 1:
|
||||||
|
irc.errorInvalid('character', character)
|
||||||
|
try:
|
||||||
|
irc.reply(unicodedata.name(character))
|
||||||
|
except ValueError:
|
||||||
|
irc.error(_('No name found for this character.'))
|
||||||
|
unicodename = wrap(unicodename, ['something'])
|
||||||
|
|
||||||
|
def unicodesearch(self, irc, msg, args, name):
|
||||||
|
"""<name>
|
||||||
|
|
||||||
|
Searches for a unicode character from its <name>."""
|
||||||
|
try:
|
||||||
|
irc.reply(unicodedata.lookup(name))
|
||||||
|
except KeyError:
|
||||||
|
irc.error(_('No character found with this name.'))
|
||||||
|
unicodesearch = wrap(unicodesearch, ['text'])
|
||||||
|
|
||||||
def encode(self, irc, msg, args, encoding, text):
|
def encode(self, irc, msg, args, encoding, text):
|
||||||
"""<encoding> <text>
|
"""<encoding> <text>
|
||||||
|
|
||||||
@ -108,7 +128,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(text.rstrip('\n'))
|
irc.reply(text.rstrip('\n'))
|
||||||
encode = wrap(encode, ['something', 'text'])
|
encode = wrap(encode, ['something', 'text'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def decode(self, irc, msg, args, encoding, text):
|
def decode(self, irc, msg, args, encoding, text):
|
||||||
"""<encoding> <text>
|
"""<encoding> <text>
|
||||||
|
|
||||||
@ -152,7 +171,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(text)
|
irc.reply(text)
|
||||||
decode = wrap(decode, ['something', 'text'])
|
decode = wrap(decode, ['something', 'text'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def levenshtein(self, irc, msg, args, s1, s2):
|
def levenshtein(self, irc, msg, args, s1, s2):
|
||||||
"""<string1> <string2>
|
"""<string1> <string2>
|
||||||
|
|
||||||
@ -167,7 +185,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(str(utils.str.distance(s1, s2)))
|
irc.reply(str(utils.str.distance(s1, s2)))
|
||||||
levenshtein = thread(wrap(levenshtein, ['something', 'text']))
|
levenshtein = thread(wrap(levenshtein, ['something', 'text']))
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def soundex(self, irc, msg, args, text, length):
|
def soundex(self, irc, msg, args, text, length):
|
||||||
"""<string> [<length>]
|
"""<string> [<length>]
|
||||||
|
|
||||||
@ -181,7 +198,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(utils.str.soundex(text, length))
|
irc.reply(utils.str.soundex(text, length))
|
||||||
soundex = wrap(soundex, ['somethingWithoutSpaces', additional('int', 4)])
|
soundex = wrap(soundex, ['somethingWithoutSpaces', additional('int', 4)])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def len(self, irc, msg, args, text):
|
def len(self, irc, msg, args, text):
|
||||||
"""<text>
|
"""<text>
|
||||||
|
|
||||||
@ -190,7 +206,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(str(len(text)))
|
irc.reply(str(len(text)))
|
||||||
len = wrap(len, ['text'])
|
len = wrap(len, ['text'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def re(self, irc, msg, args, f, text):
|
def re(self, irc, msg, args, f, text):
|
||||||
"""<regexp> <text>
|
"""<regexp> <text>
|
||||||
|
|
||||||
@ -226,7 +241,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(''.join(ret))
|
irc.reply(''.join(ret))
|
||||||
xor = wrap(xor, ['something', 'text'])
|
xor = wrap(xor, ['something', 'text'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def md5(self, irc, msg, args, text):
|
def md5(self, irc, msg, args, text):
|
||||||
"""<text>
|
"""<text>
|
||||||
|
|
||||||
@ -235,7 +249,6 @@ class String(callbacks.Plugin):
|
|||||||
irc.reply(utils.crypt.md5(text.encode('utf8')).hexdigest())
|
irc.reply(utils.crypt.md5(text.encode('utf8')).hexdigest())
|
||||||
md5 = wrap(md5, ['text'])
|
md5 = wrap(md5, ['text'])
|
||||||
|
|
||||||
@internationalizeDocstring
|
|
||||||
def sha(self, irc, msg, args, text):
|
def sha(self, irc, msg, args, text):
|
||||||
"""<text>
|
"""<text>
|
||||||
|
|
||||||
|
@ -98,6 +98,15 @@ class StringTestCase(PluginTestCase):
|
|||||||
i = ord(c)
|
i = ord(c)
|
||||||
self.assertResponse('ord %s' % utils.str.dqrepr(c), str(i))
|
self.assertResponse('ord %s' % utils.str.dqrepr(c), str(i))
|
||||||
|
|
||||||
|
|
||||||
|
def testUnicode(self):
|
||||||
|
self.assertResponse('unicodename ☃', 'SNOWMAN')
|
||||||
|
self.assertResponse('unicodesearch SNOWMAN', '☃')
|
||||||
|
#self.assertResponse('unicodename ?',
|
||||||
|
# 'No name found for this character.')
|
||||||
|
self.assertResponse('unicodesearch FOO',
|
||||||
|
'Error: No character found with this name.')
|
||||||
|
|
||||||
def testMd5(self):
|
def testMd5(self):
|
||||||
self.assertResponse('md5 supybot', '1360578d1276e945cc235654a53f9c65')
|
self.assertResponse('md5 supybot', '1360578d1276e945cc235654a53f9c65')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user