'Returns the text truncated to be no longer than the specified number
of characters.
Takes an optional argument of what should be used to notify that the
string has been truncated, defaulting to a translatable string of an
ellipsis (...).'

def chars(self, num, truncate=None):

    length = int(num)
    text = unicodedata.normalize(u'NFC', self._wrapped)
    truncate_len = length
    for char in self.add_truncation_text(u'', truncate):
        if (not unicodedata.combining(char)):
            truncate_len -= 1
            if (truncate_len == 0):
                break
    s_len = 0
    end_index = None
    for (i, char) in enumerate(text):
        if unicodedata.combining(char):
            continue
        s_len += 1
        if ((end_index is None) and (s_len > truncate_len)):
            end_index = i
        if (s_len > length):
            return self.add_truncation_text(text[:(end_index or 0)], truncate)
    return text
