mirror of
https://github.com/KevinMidboe/tableprint.git
synced 2025-10-29 18:00:16 +00:00
Properly handles ANSI escape sequences in table rows
This commit is contained in:
@@ -5,6 +5,7 @@ python:
|
|||||||
- "2.7"
|
- "2.7"
|
||||||
- "3.4"
|
- "3.4"
|
||||||
- "3.5"
|
- "3.5"
|
||||||
|
- "3.6"
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -8,7 +8,7 @@ upload:
|
|||||||
python setup.py sdist bdist_wininst upload
|
python setup.py sdist bdist_wininst upload
|
||||||
|
|
||||||
test2:
|
test2:
|
||||||
python2 /usr/local/bin/nosetests --logging-level=INFO
|
python2 /Users/nirum/anaconda/bin/nosetests --logging-level=INFO
|
||||||
|
|
||||||
test:
|
test:
|
||||||
nosetests -v --with-coverage --cover-package=tableprint --logging-level=INFO
|
nosetests -v --with-coverage --cover-package=tableprint --logging-level=INFO
|
||||||
|
|||||||
@@ -15,10 +15,11 @@ from six import string_types
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from numbers import Number
|
from numbers import Number
|
||||||
import sys
|
import sys
|
||||||
|
import re
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
__all__ = ['table', 'header', 'row', 'hr', 'top', 'bottom', 'banner', 'dataframe', 'humantime']
|
__all__ = ['table', 'header', 'row', 'hr', 'top', 'bottom', 'banner', 'dataframe', 'humantime']
|
||||||
__version__ = '0.4.3'
|
__version__ = '0.5.0'
|
||||||
|
|
||||||
# set up table styles
|
# set up table styles
|
||||||
LineStyle = namedtuple('LineStyle', ('begin', 'hline', 'sep', 'end'))
|
LineStyle = namedtuple('LineStyle', ('begin', 'hline', 'sep', 'end'))
|
||||||
@@ -149,7 +150,7 @@ def row(values, width=WIDTH, format_spec=FMT, style=STYLE):
|
|||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
values : array_like
|
values : array_like
|
||||||
An iterable array of data (numbers of strings), each value is printed in a separate column
|
An iterable array of data (numbers or strings), each value is printed in a separate column
|
||||||
|
|
||||||
width : int
|
width : int
|
||||||
The width of each column (Default: 11)
|
The width of each column (Default: 11)
|
||||||
@@ -180,7 +181,7 @@ def row(values, width=WIDTH, format_spec=FMT, style=STYLE):
|
|||||||
datum, prec = val
|
datum, prec = val
|
||||||
|
|
||||||
if isinstance(datum, string_types):
|
if isinstance(datum, string_types):
|
||||||
return ('{:>%i}' % width).format(datum)
|
return ('{:>%i}' % (width + _ansi_len(datum))).format(datum)
|
||||||
|
|
||||||
elif isinstance(datum, Number):
|
elif isinstance(datum, Number):
|
||||||
return ('{:>%i.%s}' % (width, prec)).format(datum)
|
return ('{:>%i.%s}' % (width, prec)).format(datum)
|
||||||
@@ -318,6 +319,11 @@ def humantime(t):
|
|||||||
return timestr
|
return timestr
|
||||||
|
|
||||||
|
|
||||||
|
def _ansi_len(string):
|
||||||
|
"""Extra length due to any ANSI sequences in the string."""
|
||||||
|
return len(string) - len(re.compile(r'\x1b[^m]*m').sub('', string))
|
||||||
|
|
||||||
|
|
||||||
def _format_line(data, linestyle):
|
def _format_line(data, linestyle):
|
||||||
"""Formats a list of elements using the given line style"""
|
"""Formats a list of elements using the given line style"""
|
||||||
return linestyle.begin + linestyle.sep.join(data) + linestyle.end
|
return linestyle.begin + linestyle.sep.join(data) + linestyle.end
|
||||||
|
|||||||
Reference in New Issue
Block a user