From b2153c83fb0f99d51e0615656de1fcd59e40b47e Mon Sep 17 00:00:00 2001 From: James Vega Date: Fri, 9 Apr 2004 03:59:12 +0000 Subject: [PATCH] unColor is now working. Added a colorstrip outfilter to Filter to close RFE #863599 --- plugins/Filter.py | 10 +++++++++- src/ircutils.py | 2 +- test/test_Filter.py | 7 +++++-- test/test_ircutils.py | 11 +++++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/plugins/Filter.py b/plugins/Filter.py index 946337dbf..f83a8fa4e 100644 --- a/plugins/Filter.py +++ b/plugins/Filter.py @@ -78,7 +78,7 @@ class Filter(callbacks.Privmsg): _filterCommands = ['jeffk', 'leet', 'rot13', 'hexlify', 'binary', 'lithp', 'scramble', 'morse', 'reverse', 'colorize', 'squish', - 'supa1337'] + 'supa1337', 'colorstrip'] def outfilter(self, irc, msg, args, channel): """[] [] @@ -344,6 +344,14 @@ class Filter(callbacks.Privmsg): L = [self._color(c) for c in text] irc.reply(''.join(L)) + def colorstrip(self, irc, msg, args): + """ + + Returns stripped of all color codes. + """ + text = privmsgs.getArgs(args) + irc.reply(ircutils.unColor(text)) + def jeffk(self, irc, msg, args): """ diff --git a/src/ircutils.py b/src/ircutils.py index 3f5ce53f0..2a595db12 100644 --- a/src/ircutils.py +++ b/src/ircutils.py @@ -315,7 +315,7 @@ def canonicalColor(s, bg=False, shift=0): else: return (fg, None) -_unColorRe = re.compile('(?:\x03\\d{1,2},\\d{1,2})|\x03\\d{1,2}|\x03|\x0F') +_unColorRe = re.compile(r'\x03(?:\d{1,2},\d{1,2}|\d{1,2}|,\d{1,2}|)') def unColor(s): """Removes the color from a string.""" return _unColorRe.sub('', s) diff --git a/test/test_Filter.py b/test/test_Filter.py index fc1cdef41..dd30bf68f 100644 --- a/test/test_Filter.py +++ b/test/test_Filter.py @@ -81,6 +81,11 @@ class FilterTest(ChannelPluginTestCase, PluginDocumentation): self.assertNotRegexp('colorize foobar', r'\s+') self.assertRegexp('colorize foobar', r'\x03') + _strings = ('Supybot pwns!', '123456', 'A string with \x02bold\x15') + def testColorstrip(self): + for s in self._strings: + self.assertResponse('colorstrip [colorize %s]' % s, s) + def testOutfilter(self): s = self.nick.encode('rot13') self.assertNotError('outfilter rot13') @@ -102,7 +107,5 @@ class FilterTest(ChannelPluginTestCase, PluginDocumentation): self.failUnless(ircmsgs.isAction(m)) s = ircmsgs.unAction(m) self.assertEqual(s, 'sbbone') - - # vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78: diff --git a/test/test_ircutils.py b/test/test_ircutils.py index b3f06567f..85dcd6f37 100644 --- a/test/test_ircutils.py +++ b/test/test_ircutils.py @@ -176,12 +176,23 @@ class FunctionsTestCase(SupyTestCase): ['+be-l', plusB[1], plusE[1]]) def testUnColor(self): + self.assertEqual(ircutils.unColor('\x02bold\x0302,04foo\x03bar\x0f'), + '\x02boldfoobar\x0f') self.assertEqual(ircutils.unColor('\x03foo\x03'), 'foo') self.assertEqual(ircutils.unColor('\x03foo\x0F'), 'foo') self.assertEqual(ircutils.unColor('\x0312foo\x03'), 'foo') self.assertEqual(ircutils.unColor('\x0312,14foo\x03'), 'foo') + self.assertEqual(ircutils.unColor('\x03,14foo\x03'), 'foo') + self.assertEqual(ircutils.unColor('\x03,foo\x03'), ',foo') + # These tests aren't going to pass until I decide how to handle + # stripping of \x0f. We don't want to just rampantly remove \x0f + # because it may be a clear code from some other formatting. Leaving + # it in doesn't adversely affect anything, so for now I'm not removing + # it. self.assertEqual(ircutils.unColor('\x0312foo\x0F'), 'foo') self.assertEqual(ircutils.unColor('\x0312,14foo\x0F'), 'foo') + self.assertEqual(ircutils.unColor('\x03,14foo\x0F'), 'foo') + self.assertEqual(ircutils.unColor('\x03,foo\x0F'), ',foo') def testDccIpStuff(self): def randomIP():