|
|
"""String filters.
|
|
|
|
|
|
Contains a collection of useful string manipulation filters for use in Jinja
|
|
|
templates.
|
|
|
"""
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Copyright (c) 2013, the IPython Development Team.
|
|
|
#
|
|
|
# Distributed under the terms of the Modified BSD License.
|
|
|
#
|
|
|
# The full license is in the file COPYING.txt, distributed with this software.
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Imports
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
import re
|
|
|
import textwrap
|
|
|
|
|
|
#-----------------------------------------------------------------------------
|
|
|
# Functions
|
|
|
#-----------------------------------------------------------------------------
|
|
|
|
|
|
__all__ = [
|
|
|
'wrap',
|
|
|
'strip_dollars',
|
|
|
'rm_fake',
|
|
|
'python_comment',
|
|
|
'get_lines'
|
|
|
]
|
|
|
|
|
|
|
|
|
def wrap(text, width=100):
|
|
|
"""
|
|
|
Intelligently wrap text.
|
|
|
Wrap text without breaking words if possible.
|
|
|
|
|
|
Parameters
|
|
|
----------
|
|
|
text : str
|
|
|
Text to wrap.
|
|
|
width : int, optional
|
|
|
Number of characters to wrap to, default 100.
|
|
|
"""
|
|
|
|
|
|
split_text = text.split('\n')
|
|
|
wrp = map(lambda x:textwrap.wrap(x,width), split_text)
|
|
|
wrpd = map('\n'.join, wrp)
|
|
|
return '\n'.join(wrpd)
|
|
|
|
|
|
|
|
|
def strip_dollars(text):
|
|
|
"""
|
|
|
Remove all dollar symbols from text
|
|
|
|
|
|
Parameters
|
|
|
----------
|
|
|
text : str
|
|
|
Text to remove dollars from
|
|
|
"""
|
|
|
|
|
|
return text.strip('$')
|
|
|
|
|
|
|
|
|
files_url_pattern = re.compile(r'(src|href)\=([\'"]?)files/')
|
|
|
|
|
|
def rm_fake(text):
|
|
|
"""
|
|
|
Fix all fake URLs that start with `files/`,
|
|
|
stripping out the `files/` prefix.
|
|
|
|
|
|
Parameters
|
|
|
----------
|
|
|
text : str
|
|
|
Text in which to replace 'src="files/real...' with 'src="real...'
|
|
|
"""
|
|
|
return files_url_pattern.sub(r"\1=\2", text)
|
|
|
|
|
|
|
|
|
def python_comment(text):
|
|
|
"""
|
|
|
Build a Python comment line from input text.
|
|
|
|
|
|
Parameters
|
|
|
----------
|
|
|
text : str
|
|
|
Text to comment out.
|
|
|
"""
|
|
|
|
|
|
#Replace line breaks with line breaks and comment symbols.
|
|
|
#Also add a comment symbol at the beginning to comment out
|
|
|
#the first line.
|
|
|
return '# '+'\n# '.join(text.split('\n'))
|
|
|
|
|
|
|
|
|
def get_lines(text, start=None,end=None):
|
|
|
"""
|
|
|
Split the input text into separate lines and then return the
|
|
|
lines that the caller is interested in.
|
|
|
|
|
|
Parameters
|
|
|
----------
|
|
|
text : str
|
|
|
Text to parse lines from.
|
|
|
start : int, optional
|
|
|
First line to grab from.
|
|
|
end : int, optional
|
|
|
Last line to grab from.
|
|
|
"""
|
|
|
|
|
|
# Split the input into lines.
|
|
|
lines = text.split("\n")
|
|
|
|
|
|
# Return the right lines.
|
|
|
return "\n".join(lines[start:end]) #re-join
|
|
|
|