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
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)
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
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'
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)