Esempio n. 1
0
def smart_text(s, encoding='utf-8', strings_only=False, errors='strict'):
    """Returns a unicode object representing 's'. Treats bytes using the
    'encoding' codec.

    If strings_only is True, don't convert (some) non-string-like objects.
    """
    if isinstance(s, six.text_type):
        return s
    if strings_only and not isinstance(s, six.string_types):
        return s
    if not isinstance(s, six.string_types):
        if hasattr(s, '__unicode__'):
            s = s.__unicode__()
        else:
            if six.PY3:
                if isinstance(s, six.binary_type):
                    s = six.text_type(s, encoding, errors)
                else:
                    s = six.text_type(s)
            else:
                s = six.text_type(six.binary_type(s), encoding, errors)
    else:
        # Note: We use .decode() here, instead of six.text_type(s, encoding,
        # errors), so that if s is a SafeBytes, it ends up being a
        # SafeText at the end.
        s = s.decode(encoding, errors)
    return s
Esempio n. 2
0
 def format(self, data):
     """Use this method for formatting data"""
     if self.lexer is None:
         self.format_text(self.style.get(Token.Text), six.text_type(data))
     else:
         for token, text in self.lexer.tokenize(data):
             self.format_text(self.style.get(token), text)
Esempio n. 3
0
 def lex(self, data):
     text   = u'%s\n' % six.text_type(data['object']).strip('\n\r')
     status = data['status']
     if status in self.config:
         yield self.config[status], text
     else:
         yield Token.Failed, text
Esempio n. 4
0
 def lex(self, data):
     # Merge statuses into config
     if 'statuses' not in self.config:
         self.config['statuses'] = HgLexer.config['statuses']
     text   = u'%s\n' % six.text_type(data['object']).strip('\n\r')
     status = data['status']
     if status in self.config['statuses']:
         token = self.config['statuses'][status]
     else:
         token = Token.Failed
     yield token, text
     if token not in (Token.Ok, Token.NoChanges, Token.Changed):
         error = data['data']['error'].strip()
         if error:
             yield Token.Text, indent(error) + '\n'
     elif self.config.get('parse', False):
         output = data['data']['output'].strip()
         if output:
             indent_size = self.config.get('indent', 2)
             if 'parser' in self.config:
                 lexer = RegexLexer()
                 lexer.push_config(self.config['parser'])
                 for token, text in lexer.tokenize(indent(output, indent_size) + '\n'):
                     yield token, text
             else:
                 yield Token.Text, indent(output) + '\n'
Esempio n. 5
0
 def lex(self, data):
     # Merge statuses into config
     if 'statuses' not in self.config:
         self.config['statuses'] = HgLexer.config['statuses']
     text   = u'%s\n' % six.text_type(data['object']).strip('\n\r')
     status = data['status']
     if status in self.config['statuses']:
         token = self.config['statuses'][status]
     else:
         token = Token.Failed
     yield token, text
     if token not in (Token.Ok, Token.NoChanges, Token.Changed):
         error = data['data']['error'].strip()
         if error:
             yield Token.Text, indent(error) + '\n'
     elif self.config.get('parse', False):
         output = data['data']['output'].strip()
         if output:
             indent_size = self.config.get('indent', 2)
             if 'parser' in self.config:
                 lexer = RegexLexer()
                 lexer.push_config(self.config['parser'])
                 for token, text in lexer.tokenize(indent(output, indent_size) + '\n'):
                     yield token, text
             else:
                 yield Token.Text, indent(output) + '\n'
Esempio n. 6
0
def smart_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
    """Returns a bytes version of 's', encoded as specified in 'encoding'.

    If strings_only is True, don't convert (some) non-string-like objects.
    """
    if isinstance(s, six.binary_type):
        if encoding == 'utf-8':
            return s
        else:
            return s.decode('utf-8', errors).encode(encoding, errors)
    if strings_only and not isinstance(s, six.text_type):
        return s
    if not isinstance(s, six.string_types):
        try:
            if six.PY3:
                return six.text_type(s).encode(encoding)
            else:
                return six.binary_type(s)
        except UnicodeEncodeError:
            return six.text_type(s).encode(encoding, errors)
    else:
        return s.encode(encoding, errors)