Nicely truncate text
====================
Intelligent truncation of text means that truncation does not take
place inside a word but only between words. So the required length is
only an approximation. The result text might be a bit longer than the
required length:
>>> from icemac.truncatetext import truncate
>>> 'I was here.'[:3]
'I w'
>>> truncate('I was here.', 3)
'I was ...'
What can get truncated?
-----------------------
Only instances of ``basestring`` (``str`` on Python 3) can be truncated:
>>> truncate(3, 3)
Traceback (most recent call last):
ValueError: 3 is no instance of basestring or None
>>> print(truncate(u'Lorem ipsum', 5))
Lorem ...
``None`` is handled nicely:
>>> truncate(None, 4)
''
What is returned?
-----------------
Always at least one word is returned even when it is longer than the
required length:
>>> truncate('Lorem ipsum', 1)
'Lorem ...'
If the text contains only of one word which is longer than the desired
length it is returned without an ellipsis:
>>> truncate('The-really-long-word', 5)
'The-really-long-word'
If the text is shorter than the desired length it is returned without
the ellipsis, too:
>>> truncate('Lorem ipsum', 11)
'Lorem ipsum'
Where gets the text truncated?
------------------------------
Truncation also takes place at tabs and linebreaks:
>>> truncate("I was here.\nNow I'm away", 11)
'I was here. ...'
>>> truncate("I was here.\rNow I'm away", 12)
'I was here.\rNow ...'
>>> truncate("I was here.\tNow I'm away", 11)
'I was here. ...'
I do not want `...` as ellipsis.
--------------------------------
``truncate`` takes an optional argument which defines the ellipsis string:
>>> print(truncate(u'Lorem ipsum', 5, ellipsis=u':::'))
Lorem :::