Source code for bokeh.util.string
''' Functions useful for string manipulations or encoding.
'''
from __future__ import absolute_import
import re
[docs]def encode_utf8(u):
''' Encode a UTF-8 string to a sequence of bytes.
Args:
u (str) : the string to encode
Returns:
bytes
'''
import sys
if sys.version_info[0] == 2:
u = u.encode('utf-8')
return u
[docs]def decode_utf8(u):
''' Decode a sequence of bytes to a UTF-8 string
Args:
u (str) : the bytes to decode
Returns:
UTF-8 string
'''
import sys
if sys.version_info[0] == 2:
u = u.decode('utf-8')
return u
[docs]def indent(text, n=2, ch=" "):
''' Indent all the lines in a given block of text by a specified ammount.
Args:
text (str) :
The text to indent
n (int, optional) :
The amount to indent each line by (default: 2)
ch (char, optional) :
What character to fill the indentation with (default: " ")
'''
padding = ch * n
return "\n".join([padding+line for line in text.split("\n")])
[docs]def nice_join(seq, sep=", "):
''' Join together sequences of strings into English-friendly phrases using
the conjunction ``or`` when appropriate.
Args:
seq (seq[str]) : a sequence of strings to nicely join
sep (str, optional) : a sequence delimiter to use (default: ", ")
Returns:
a joined string
Examples:
>>> nice_join(["a", "b", "c"])
'a, b or c'
'''
seq = [str(x) for x in seq]
if len(seq) <= 1:
return sep.join(seq)
else:
return "%s or %s" % (sep.join(seq[:-1]), seq[-1])
[docs]def snakify(name, sep='_'):
''' Convert CamelCase to snake_case. '''
name = re.sub("([A-Z]+)([A-Z][a-z])", r"\1%s\2" % sep, name)
name = re.sub("([a-z\\d])([A-Z])", r"\1%s\2" % sep, name)
return name.lower()