def _char_ranges(chars, as_hex=False):
intervals = []
min_ = max_ = None
for c in chars:
point = ord(c)
if max_ == point - 1:
max_ = point
else:
if min_ is not None:
intervals.append((min_, max_))
min_ = max_ = point
if min_ is not None:
intervals.append((min_, max_))
if as_hex:
show = lambda point: u'%#04x' % point
else:
show = six.unichr
return [
(u'%s' % show(p1)) if p1 == p2 else (u'%s–%s' % (show(p1), show(p2)))
for (p1, p2) in intervals]
评论列表
文章目录