From 0b30d2559ecdeb1db95d745c6f4a4c0724e5ded9 Mon Sep 17 00:00:00 2001 From: rootcoma Date: Mon, 18 Nov 2013 11:26:13 -0800 Subject: [PATCH 1/5] Unicoding hints --- plugin.py | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/plugin.py b/plugin.py index b2c77c6..5db07b0 100644 --- a/plugin.py +++ b/plugin.py @@ -21,6 +21,7 @@ import sqlite3 import random import time import datetime +import unicodedata class TriviaTime(callbacks.Plugin): """ @@ -885,14 +886,14 @@ class TriviaTime(callbacks.Plugin): # was a correct answer guessed? for ans in self.alternativeAnswers: - normalizedAns = self.removeAccents(ircutils.toLower(ans)) - normalizedAns = self.removeExtraSpaces(ircutils.toLower(ans)) + normalizedAns = self.removeAccents(str.lower(ans)) + normalizedAns = self.removeExtraSpaces(normalizedAns) if normalizedAns == attempt and normalizedAns not in self.guessedAnswers: correctAnswerFound = True correctAnswer = ans for ans in self.answers: - normalizedAns = self.removeAccents(ircutils.toLower(ans)) - normalizedAns = self.removeExtraSpaces(ircutils.toLower(ans)) + normalizedAns = self.removeAccents(str.lower(ans)) + normalizedAns = self.removeExtraSpaces(normalizedAns) if normalizedAns == attempt and normalizedAns not in self.guessedAnswers: correctAnswerFound = True correctAnswer = ans @@ -1018,6 +1019,7 @@ class TriviaTime(callbacks.Plugin): for ans in self.answers: if ircutils.toLower(ans) in self.guessedAnswers: continue + ans = unicode(ans.decode('utf-8')) if hints != '': hints += ' ' if len(self.answers) > 1: @@ -1060,24 +1062,25 @@ class TriviaTime(callbacks.Plugin): hints+= self.getMaskedRandom(ansend, divider-1) if len(self.answers) > 1: hints += ']' - return hints + return hints.encode('utf-8') def getMaskedVowels(self, letters): charMask = self.registryValue('general.charMask', self.channel) - hints = '' + hintsList = [''] unmasked = 0 lettersInARow = 0 for i in range(len(letters)): masked = letters[i] if masked in " -'\"_=+&%$#@!~`[]{}?.,<>|\\/": - hints += masked - elif masked in 'aeiou' and unmasked < (len(letters)-1) and lettersInARow < 3: - hints += masked + hintsList.append(masked) + elif self.removeAccents(masked.encode('utf-8')) in 'aeiou' and unmasked < (len(letters)-1) and lettersInARow < 3: + hintsList.append(masked) lettersInARow += 1 unmasked += 1 else: - hints += charMask + hintsList.append(charMask) lettersInARow = 0 + hints = ''.join(hintsList) return hints def getMaskedRandom(self, letters, sizeOfUnmasked): @@ -1337,10 +1340,10 @@ class TriviaTime(callbacks.Plugin): schedule.addEvent(event, hintTime, '%s.trivia' % self.channel) def removeAccents(self, text): - replacements = [('á', 'a'),('é','e'),('í', 'i'),('ó','o'),('ú','u'),('ü','u'),('ñ','n')] - for a,b in replacements: - text = text.replace(a,b) - return text + text = unicode(text.decode('utf-8')) + normalized = unicodedata.normalize('NFKD', text) + normalized = u''.join([c for c in normalized if not unicodedata.combining(c)]) + return normalized.encode('utf-8') def removeExtraSpaces(self, text): return utils.str.normalizeWhitespace(text) @@ -1388,10 +1391,10 @@ class TriviaTime(callbacks.Plugin): alternativeAnswers = [] if ircutils.toLower(question[:4]) == 'kaos': for ans in answers: - answer.append(self.removeAccents(ans.strip())) + answer.append(str(ans).strip()) elif ircutils.toLower(question[:5]) == 'uword': for ans in answers: - answer.append(self.removeAccents(ans)) + answer.append(str(ans).strip()) question = 'Unscramble the letters: ' shuffledLetters = list(ans) random.shuffle(shuffledLetters) @@ -1402,9 +1405,9 @@ class TriviaTime(callbacks.Plugin): else: for ans in answers: if answer == []: - answer.append(self.removeAccents(str(ans).strip())) + answer.append(str(ans).strip()) else: - alternativeAnswers.append(self.removeAccents(str(ans).strip())) + alternativeAnswers.append(str(ans).strip()) points = self.registryValue('questions.defaultPoints', self.channel) if len(answer) > 1: From e45f4d1d91f6a1b4e383670103fb9751de244ed6 Mon Sep 17 00:00:00 2001 From: rootcoma Date: Mon, 18 Nov 2013 11:39:20 -0800 Subject: [PATCH 2/5] order of opperations on lowercasing after normalizing --- plugin.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugin.py b/plugin.py index 5db07b0..25fa356 100644 --- a/plugin.py +++ b/plugin.py @@ -886,14 +886,16 @@ class TriviaTime(callbacks.Plugin): # was a correct answer guessed? for ans in self.alternativeAnswers: - normalizedAns = self.removeAccents(str.lower(ans)) + normalizedAns = self.removeAccents(ans) normalizedAns = self.removeExtraSpaces(normalizedAns) + normalizedAns = str.lower(normalizedAns) if normalizedAns == attempt and normalizedAns not in self.guessedAnswers: correctAnswerFound = True correctAnswer = ans for ans in self.answers: - normalizedAns = self.removeAccents(str.lower(ans)) + normalizedAns = self.removeAccents(ans) normalizedAns = self.removeExtraSpaces(normalizedAns) + normalizedAns = str.lower(normalizedAns) if normalizedAns == attempt and normalizedAns not in self.guessedAnswers: correctAnswerFound = True correctAnswer = ans From 4297e0c99f9b2b9a576b23a84baa004863afe8d1 Mon Sep 17 00:00:00 2001 From: rootcoma Date: Mon, 18 Nov 2013 11:48:10 -0800 Subject: [PATCH 3/5] changing ircutils.toLower to str.lower on user answer, to match lowercasing done to answers --- plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.py b/plugin.py index 25fa356..5d60877 100644 --- a/plugin.py +++ b/plugin.py @@ -880,7 +880,7 @@ class TriviaTime(callbacks.Plugin): correctAnswerFound = False correctAnswer = '' - attempt = ircutils.toLower(msg.args[1]) + attempt = str.lower(msg.args[1]) attempt = self.removeAccents(attempt) attempt = self.removeExtraSpaces(attempt) From 65f415d980050fc316b3a5c503a4fcb89c38e453 Mon Sep 17 00:00:00 2001 From: rootcoma Date: Mon, 18 Nov 2013 12:02:03 -0800 Subject: [PATCH 4/5] pass sizeOfUnmasked to getMaskedVowels, lowercase before looking for vowels --- plugin.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin.py b/plugin.py index 5d60877..0e6ee7f 100644 --- a/plugin.py +++ b/plugin.py @@ -1059,23 +1059,23 @@ class TriviaTime(callbacks.Plugin): hintsend = '' unmasked = 0 if self.registryValue('general.vowelsHint', self.channel): - hints+= self.getMaskedVowels(ansend) + hints+= self.getMaskedVowels(ansend, divider-1) else: hints+= self.getMaskedRandom(ansend, divider-1) if len(self.answers) > 1: hints += ']' return hints.encode('utf-8') - def getMaskedVowels(self, letters): + def getMaskedVowels(self, letters, sizeOfUnmasked): charMask = self.registryValue('general.charMask', self.channel) hintsList = [''] unmasked = 0 - lettersInARow = 0 + lettersInARow = sizeOfUnmasked for i in range(len(letters)): masked = letters[i] if masked in " -'\"_=+&%$#@!~`[]{}?.,<>|\\/": hintsList.append(masked) - elif self.removeAccents(masked.encode('utf-8')) in 'aeiou' and unmasked < (len(letters)-1) and lettersInARow < 3: + elif str.lower(self.removeAccents(masked.encode('utf-8'))) in 'aeiou' and unmasked < (len(letters)-1) and lettersInARow < 3: hintsList.append(masked) lettersInARow += 1 unmasked += 1 From 0697e3c2afb54a1697e7e1416839894d62573c30 Mon Sep 17 00:00:00 2001 From: rootcoma Date: Mon, 18 Nov 2013 14:00:26 -0800 Subject: [PATCH 5/5] Converting to unicode for scrambling --- plugin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin.py b/plugin.py index 0e6ee7f..afaeffc 100644 --- a/plugin.py +++ b/plugin.py @@ -1398,11 +1398,12 @@ class TriviaTime(callbacks.Plugin): for ans in answers: answer.append(str(ans).strip()) question = 'Unscramble the letters: ' - shuffledLetters = list(ans) + shuffledLetters = list(unicode(ans.decode('utf-8'))) random.shuffle(shuffledLetters) for letter in shuffledLetters: question += letter question += ' ' + question = question.encode('utf-8') break else: for ans in answers: