Exemplo n.º 1
0
    def checkPeriods(name):
        words = wordList(name)
        for word in words:
            if word[-1] == ',':
                word = word[:-1]
            numPeriods = word.count('.')
            if not numPeriods:
                continue
            letters = justLetters(word)
            numLetters = len(letters)
            if word[-1] != '.':
                notify.info('word "%s" does not end in a period' %
                            TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCPeriodUsage
            if numPeriods > 2:
                notify.info('word "%s" has too many periods' %
                            TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCPeriodUsage
            if numPeriods == 2:
                if not (word[1] == '.' and word[3] == '.'):
                    notify.info('word "%s" does not fit the J.T. pattern' %
                                TextEncoder().encodeWtext(word))
                    return OTPLocalizer.NCPeriodUsage

        return None
Exemplo n.º 2
0
def test_text_encode_utf16be():
    encoder = TextEncoder()
    encoder.set_encoding(TextEncoder.E_utf16be)

    for c in valid_characters():
        enc = encoder.encode_wtext(c)
        assert enc == c.encode('utf-16-be')
Exemplo n.º 3
0
    def checkJapanese(name):
        asciiSpace = range(32, 33)
        asciiDigits = range(48, 64)
        hiragana = range(12353, 12448)
        katakana = range(12449, 12544)
        halfwidthKatakana = range(65381, 65440)
        halfwidthCharacter = set(asciiSpace + halfwidthKatakana)
        allowedUtf8 = set(asciiSpace + hiragana + katakana + halfwidthKatakana)

        te = TextEncoder()
        dc = 0.0

        for char in (ord(char) for char in te.decodeText(name)):
            if char not in allowedUtf8:
                if char in asciiDigits:
                    notify.info('name contains not allowed ascii digits')
                    return OTPLocalizer.NCNoDigits
                else:
                    notify.info('name contains not allowed utf8 char: 0x%04x' % char)
                    return OTPLocalizer.NCBadCharacter % te.encodeWtext(unichr(char))
            elif char in halfwidthCharacter:
                dc += 0.5
            else:
                dc += 1

        if dc < 2:
            notify.info('name is too short: %0.1f' % dc)
            return OTPLocalizer.NCTooShort
        elif dc > 8:
            notify.info('name has been occupied more than eight display cells: %0.1f' % dc)
            return OTPLocalizer.NCGeneric
Exemplo n.º 4
0
    def checkJapanese(name):
        asciiSpace = range(32, 33)
        asciiDigits = range(48, 64)
        hiragana = range(12353, 12448)
        katakana = range(12449, 12544)
        halfwidthKatakana = range(65381, 65440)
        halfwidthCharacter = set(asciiSpace + halfwidthKatakana)
        allowedUtf8 = set(asciiSpace + hiragana + katakana + halfwidthKatakana)

        te = TextEncoder()
        dc = 0.0

        for char in (ord(char) for char in te.decodeText(name)):
            if char not in allowedUtf8:
                if char in asciiDigits:
                    notify.info('name contains not allowed ascii digits')
                    return OTPLocalizer.NCNoDigits
                else:
                    notify.info('name contains not allowed utf8 char: 0x%04x' %
                                char)
                    return OTPLocalizer.NCBadCharacter % te.encodeWtext(
                        unichr(char))
            elif char in halfwidthCharacter:
                dc += 0.5
            else:
                dc += 1

        if dc < 2:
            notify.info('name is too short: %0.1f' % dc)
            return OTPLocalizer.NCTooShort
        elif dc > 8:
            notify.info(
                'name has been occupied more than eight display cells: %0.1f' %
                dc)
            return OTPLocalizer.NCGeneric
Exemplo n.º 5
0
def test_text_encode_iso8859():
    encoder = TextEncoder()
    encoder.set_encoding(TextEncoder.E_iso8859)

    for i in xrange(255):
        c = unichr(i)
        enc = encoder.encode_wtext(c)
        assert enc == c.encode('latin-1')
Exemplo n.º 6
0
 def badCharacters(name, _validCharacter=_validCharacter):
     for char in name:
         if not _validCharacter(char):
             if char in string.digits:
                 notify.info('name contains digits')
                 return OTPLocalizer.NCNoDigits
             notify.info('name contains bad char: %s' % TextEncoder().encodeWtext(char))
             return OTPLocalizer.NCBadCharacter % TextEncoder().encodeWtext(char)
Exemplo n.º 7
0
 def perWord(word):
     word = word
     letters = justLetters(word)
     if len(letters) > 2:
         letters = TextEncoder().decodeText(TextEncoder.lower(TextEncoder().encodeWtext(letters)))
         filtered = filterString(letters, letters[0])
         if filtered == letters:
             notify.info('word "%s" uses only one letter' % TextEncoder().encodeWtext(word))
             return OTPLocalizer.NCGeneric
Exemplo n.º 8
0
 def fontHasCharacters(name, font = font):
     if font:
         tn = TextNode('NameCheck')
         tn.setFont(font)
         for c in name:
             # Define c as unicode
             if not tn.hasCharacter(chr(ord(c))):
                 notify.info('name contains bad char: %s' % TextEncoder().encodeWtext(c))
                 return OTPLocalizer.NCBadCharacter % TextEncoder().encodeWtext(c)
Exemplo n.º 9
0
def test_text_decode_utf16be():
    encoder = TextEncoder()
    encoder.set_encoding(TextEncoder.E_utf16be)

    for c in valid_characters():
        enc = c.encode('utf-16be')

        dec = encoder.decode_text(enc)
        assert len(c) == len(dec)
        assert c == dec
Exemplo n.º 10
0
    def allCaps(name):
        letters = justLetters(name)
        if len(letters) > 2:
            upperLetters = TextEncoder().decodeText(TextEncoder.upper(TextEncoder().encodeWtext(letters)))
            for i in xrange(len(upperLetters)):
                if not upperLetters[0].isupper():
                    return

            if upperLetters == letters:
                notify.info('name is all caps')
                return OTPLocalizer.NCAllCaps
Exemplo n.º 11
0
def test_text_decode_iso8859():
    encoder = TextEncoder()
    encoder.set_encoding(TextEncoder.E_iso8859)

    for i in xrange(255):
        enc = unichr(i).encode('latin-1')
        assert len(enc) == 1

        dec = encoder.decode_text(enc)
        assert len(dec) == 1
        assert ord(dec) == i
Exemplo n.º 12
0
def test_text_decode_utf8():
    encoder = TextEncoder()
    encoder.set_encoding(TextEncoder.E_utf8)

    for c in valid_characters():
        enc = c.encode('utf-8')
        assert len(enc) <= 4

        dec = encoder.decode_text(enc)
        assert len(dec) == 1
        assert dec == c
Exemplo n.º 13
0
 def __typedAName(self, *args):
     self.notify.debug('__typedAName')
     self.nameEntry['focus'] = 0
     name = self.nameEntry.get()
     name = TextEncoder().decodeText(name)
     name = name.strip()
     name = TextEncoder().encodeWtext(name)
     self.nameEntry.enterText(name)
     problem = self.nameIsValid(self.nameEntry.get())
     if problem:
         self.rejectName(problem)
         return
     self.checkNameTyped(justCheck=True)
Exemplo n.º 14
0
 def __typedAName(self, *args):
     self.notify.debug('__typedAName')
     self.nameEntry['focus'] = 0
     name = self.nameEntry.get()
     name = TextEncoder().decodeText(name)
     name = name.strip()
     name = TextEncoder().encodeWtext(name)
     self.nameEntry.enterText(name)
     problem = self.nameIsValid(self.nameEntry.get())
     if problem:
         self.rejectName(problem)
         return
     self.checkNameTyped(justCheck=True)
Exemplo n.º 15
0
 def hasLetters(name):
     words = wordList(name)
     for word in words:
         letters = justLetters(word)
         if len(letters) == 0:
             notify.info('word "%s" has no letters' % TextEncoder().encodeWtext(word))
             return OTPLocalizer.NCNeedLetters
Exemplo n.º 16
0
 def makeSign(topStr, signStr, textId):
     top = self.geom.find('**/' + topStr)
     sign = top.find('**/' + signStr)
     locator = top.find('**/sign_origin')
     signText = DirectGui.OnscreenText(text=TextEncoder.upper(TTLocalizer.GlobalStreetNames[textId][-1]), font=ToontownGlobals.getSuitFont(), scale=TTLocalizer.BCHQLsignText, fg=(0, 0, 0, 1), parent=sign)
     signText.setPosHpr(locator, 0, -0.1, -0.25, 0, 0, 0)
     signText.setDepthWrite(0)
Exemplo n.º 17
0
    def repeatedChars(name):
        count = 1
        lastChar = None
        i = 0
        while i < len(name):
            char = name[i]
            i += 1
            if char == lastChar:
                count += 1
            else:
                count = 1
            lastChar = char
            if count > 2:
                notify.info('character %s is repeated too many times' % TextEncoder().encodeWtext(char))
                return OTPLocalizer.NCRepeatedChar % TextEncoder().encodeWtext(char)

        return
Exemplo n.º 18
0
 def perWord(word):
     word = word
     letters = justLetters(word)
     if len(letters) > 2:
         letters = TextEncoder().decodeText(TextEncoder.lower(TextEncoder().encodeWtext(letters)))
         filtered = filterString(letters, letters[0])
         if filtered == letters:
             notify.info('word "%s" uses only one letter' % TextEncoder().encodeWtext(word))
             return OTPLocalizer.NCGeneric
Exemplo n.º 19
0
    def allCaps(name):
        letters = justLetters(name)
        if len(letters) > 2:
            upperLetters = TextEncoder().decodeText(TextEncoder.upper(TextEncoder().encodeWtext(letters)))
            for i in xrange(len(upperLetters)):
                if not upperLetters[0].isupper():
                    return

            if upperLetters == letters:
                notify.info('name is all caps')
                return OTPLocalizer.NCAllCaps
Exemplo n.º 20
0
    def checkApostrophes(name):
        words = wordList(name)
        for word in words:
            numApos = word.count("'")
            if numApos > 2:
                notify.info('word "%s" has too many apostrophes.' % TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCApostrophes

        numApos = name.count("'")
        if numApos > 3:
            notify.info('name has too many apostrophes.')
            return OTPLocalizer.NCApostrophes
Exemplo n.º 21
0
        def perWord(word):
            if '.' in word:
                return
            for char in word:
                if ord(char) >= 128:
                    return

            letters = filterString(word, string.letters)
            if len(letters) > 2:
                vowels = filterString(letters, 'aeiouyAEIOUY')
                if len(vowels) == 0:
                    notify.info('word "%s" has no vowels' % TextEncoder().encodeWtext(word))
                    return OTPLocalizer.NCNeedVowels
            return
Exemplo n.º 22
0
def test_text_append_unicode_char():
    encoder = TextEncoder()
    encoder.set_encoding(TextEncoder.E_iso8859)

    code_points = []
    for code_point in [0, 1, 127, 128, 255, 256, 0xfffd, 0x10000, 0x10ffff]:
        if code_point <= sys.maxunicode:
            code_points.append(code_point)
            encoder.append_unicode_char(code_point)

    encoded = encoder.get_wtext()
    assert len(encoded) == len(code_points)

    for a, b in zip(code_points, encoded):
        assert a == ord(b)
Exemplo n.º 23
0
 def match(npcName, name = name):
     name = TextEncoder().encodeWtext(name)
     name = string.strip(name)
     return TextEncoder.upper(npcName) == TextEncoder.upper(name)
Exemplo n.º 24
0
 def match(npcName, name = name):
     name = TextEncoder().encodeWtext(name)
     name = name.strip()
     return TextEncoder.upper(npcName) == TextEncoder.upper(name)
Exemplo n.º 25
0
def checkName(name, otherCheckFuncs=[], font=None):
    def longEnough(name):
        if len(name) < 2:
            notify.info('name is too short')
            return OTPLocalizer.NCTooShort

    def emptyName(name):
        if name.strip() == '':
            notify.info('name is empty')
            return OTPLocalizer.NCTooShort

    def printableChars(name):
        for char in name:
            if ord(char) < 128 and char not in string.printable:
                notify.info('name contains non-printable char #%s' % ord(char))
                return OTPLocalizer.NCGeneric

    validAsciiChars = set(".,'-" + string.letters + string.whitespace)

    def _validCharacter(c, validAsciiChars=validAsciiChars, font=font):
        if c in validAsciiChars:
            return True
        if c.isalpha() or c.isspace():
            return True
        return False

    def badCharacters(name, _validCharacter=_validCharacter):
        for char in name:
            if not _validCharacter(char):
                if char in string.digits:
                    notify.info('name contains digits')
                    return OTPLocalizer.NCNoDigits
                else:
                    notify.info('name contains bad char: %s' %
                                TextEncoder().encodeWtext(char))
                    return OTPLocalizer.NCBadCharacter % TextEncoder(
                    ).encodeWtext(char)

    def fontHasCharacters(name, font=font):
        if font:
            tn = TextNode('NameCheck')
            tn.setFont(font)
            for c in name:
                # Define c as unicode
                if not tn.hasCharacter(unichr(ord(c))):
                    notify.info('name contains bad char: %s' %
                                TextEncoder().encodeWtext(c))
                    return OTPLocalizer.NCBadCharacter % TextEncoder(
                    ).encodeWtext(c)

    def hasLetters(name):
        words = wordList(name)
        for word in words:
            letters = justLetters(word)
            if len(letters) == 0:
                notify.info('word "%s" has no letters' %
                            TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCNeedLetters

    def hasVowels(name):
        def perWord(word):
            if '.' in word:
                return None
            for char in word:
                if ord(char) >= 128:
                    return None

            letters = filterString(word, string.letters)
            if len(letters) > 2:
                vowels = filterString(letters, 'aeiouyAEIOUY')
                if len(vowels) == 0:
                    notify.info('word "%s" has no vowels' %
                                TextEncoder().encodeWtext(word))
                    return OTPLocalizer.NCNeedVowels
            return None

        for word in wordList(name):
            problem = perWord(word)
            if problem:
                return problem

    def monoLetter(name):
        def perWord(word):
            word = word
            letters = justLetters(word)
            if len(letters) > 2:
                letters = TextEncoder().decodeText(
                    TextEncoder.lower(TextEncoder().encodeWtext(letters)))
                filtered = filterString(letters, letters[0])
                if filtered == letters:
                    notify.info('word "%s" uses only one letter' %
                                TextEncoder().encodeWtext(word))
                    return OTPLocalizer.NCGeneric

        for word in wordList(name):
            problem = perWord(word)
            if problem:
                return problem

    def checkDashes(name):
        def validDash(index, name=name):
            if index == 0 or i == len(name) - 1:
                return 0
            if not name[i - 1].isalpha():
                return 0
            if not name[i + 1].isalpha():
                return 0
            return 1

        i = 0
        while 1:
            i = name.find('-', i, len(name))
            if i < 0:
                return None
            if not validDash(i):
                notify.info('name makes invalid use of dashes')
                return OTPLocalizer.NCDashUsage
            i += 1

    def checkCommas(name):
        def validComma(index, name=name):
            if index == 0 or i == len(name) - 1:
                return OTPLocalizer.NCCommaEdge
            if name[i - 1].isspace():
                return OTPLocalizer.NCCommaAfterWord
            if not name[i + 1].isspace():
                return OTPLocalizer.NCCommaUsage
            return None

        i = 0
        while 1:
            i = name.find(',', i, len(name))
            if i < 0:
                return None
            problem = validComma(i)
            if problem:
                notify.info('name makes invalid use of commas')
                return problem
            i += 1

    def checkPeriods(name):
        words = wordList(name)
        for word in words:
            if word[-1] == ',':
                word = word[:-1]
            numPeriods = word.count('.')
            if not numPeriods:
                continue
            letters = justLetters(word)
            numLetters = len(letters)
            if word[-1] != '.':
                notify.info('word "%s" does not end in a period' %
                            TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCPeriodUsage
            if numPeriods > 2:
                notify.info('word "%s" has too many periods' %
                            TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCPeriodUsage
            if numPeriods == 2:
                if not (word[1] == '.' and word[3] == '.'):
                    notify.info('word "%s" does not fit the J.T. pattern' %
                                TextEncoder().encodeWtext(word))
                    return OTPLocalizer.NCPeriodUsage

        return None

    def checkApostrophes(name):
        words = wordList(name)
        for word in words:
            numApos = word.count("'")
            if numApos > 2:
                notify.info('word "%s" has too many apostrophes.' %
                            TextEncoder().encodeWtext(word))
                return OTPLocalizer.NCApostrophes

        numApos = name.count("'")
        if numApos > 3:
            notify.info('name has too many apostrophes.')
            return OTPLocalizer.NCApostrophes

    def tooManyWords(name):
        if len(wordList(name)) > 4:
            notify.info('name has too many words')
            return OTPLocalizer.NCTooManyWords

    def allCaps(name):
        letters = justLetters(name)
        if len(letters) > 2:
            upperLetters = TextEncoder().decodeText(
                TextEncoder.upper(TextEncoder().encodeWtext(letters)))
            for i in xrange(len(upperLetters)):
                if not upperLetters[0].isupper():
                    return

            if upperLetters == letters:
                notify.info('name is all caps')
                return OTPLocalizer.NCAllCaps

    def mixedCase(name):
        words = wordList(name)
        for word in words:
            if len(word) > 2:
                capitals = justUpper(word)
                if len(capitals) > 2:
                    notify.info('name has mixed case')
                    return OTPLocalizer.NCMixedCase

    def checkJapanese(name):
        asciiSpace = range(32, 33)
        asciiDigits = range(48, 64)
        hiragana = range(12353, 12448)
        katakana = range(12449, 12544)
        halfwidthKatakana = range(65381, 65440)
        halfwidthCharacter = set(asciiSpace + halfwidthKatakana)
        allowedUtf8 = set(asciiSpace + hiragana + katakana + halfwidthKatakana)

        te = TextEncoder()
        dc = 0.0

        for char in (ord(char) for char in te.decodeText(name)):
            if char not in allowedUtf8:
                if char in asciiDigits:
                    notify.info('name contains not allowed ascii digits')
                    return OTPLocalizer.NCNoDigits
                else:
                    notify.info('name contains not allowed utf8 char: 0x%04x' %
                                char)
                    return OTPLocalizer.NCBadCharacter % te.encodeWtext(
                        unichr(char))
            elif char in halfwidthCharacter:
                dc += 0.5
            else:
                dc += 1

        if dc < 2:
            notify.info('name is too short: %0.1f' % dc)
            return OTPLocalizer.NCTooShort
        elif dc > 8:
            notify.info(
                'name has been occupied more than eight display cells: %0.1f' %
                dc)
            return OTPLocalizer.NCGeneric

    def repeatedChars(name):
        count = 1
        lastChar = None
        i = 0
        while i < len(name):
            char = name[i]
            i += 1
            if char == lastChar:
                count += 1
            else:
                count = 1
            lastChar = char
            if count > 2:
                notify.info('character %s is repeated too many times' %
                            TextEncoder().encodeWtext(char))
                return OTPLocalizer.NCRepeatedChar % TextEncoder().encodeWtext(
                    char)

        return

    checks = [
        printableChars, badCharacters, fontHasCharacters, longEnough,
        emptyName, hasLetters, hasVowels, monoLetter, checkDashes, checkCommas,
        checkPeriods, checkApostrophes, tooManyWords, allCaps, mixedCase,
        repeatedChars
    ] + otherCheckFuncs
    symmetricChecks = []
    name = TextEncoder().decodeText(name)
    notify.info('checking name "%s"...' % TextEncoder().encodeWtext(name))
    for check in checks:
        problem = check(name[:])
        if not problem and check in symmetricChecks:
            nName = name[:]
            bName.reverse()
            problem = check(bName)
            print 'problem = %s' % problem
        if problem:
            return problem

    return None