##// END OF EJS Templates
show UsageError for cell magics mid-cell
show UsageError for cell magics mid-cell

File last commit:

r11302:fdb4d7d0
r11465:80925c77
Show More
strings.py
151 lines | 3.6 KiB | text/x-python | PythonLexer
MinRK
add html_text and add_anchor filters...
r11302 # coding: utf-8
Jonathan Frederic
Cleanup and refactor of filters
r10676 """String filters.
Jonathan Frederic
Moved wrap code into Strings utility file.
r10433
Jonathan Frederic
Cleanup and refactor of filters
r10676 Contains a collection of useful string manipulation filters for use in Jinja
templates.
Jonathan Frederic
Moved wrap code into Strings utility file.
r10433 """
#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
MinRK
fix `file/` URL replacements in nbconvert
r11202 import re
Jonathan Frederic
Cleanup and refactor of filters
r10676 import textwrap
MinRK
add html_text and add_anchor filters...
r11302 from xml.etree import ElementTree
from IPython.utils import py3compat
Brian E. Granger
Fixing import for nbconvert.
r11089
Jonathan Frederic
Moved wrap code into Strings utility file.
r10433 #-----------------------------------------------------------------------------
# Functions
#-----------------------------------------------------------------------------
Jonathan Frederic
Cleanup and refactor of filters
r10676
Brian E. Granger
Fixing import logic.
r11088 __all__ = [
'wrap',
MinRK
add html_text and add_anchor filters...
r11302 'html_text',
'add_anchor',
Brian E. Granger
Fixing import logic.
r11088 'strip_dollars',
'rm_fake',
'python_comment',
'get_lines'
]
Jonathan Frederic
Moved wrap code into Strings utility file.
r10433 def wrap(text, width=100):
Jonathan Frederic
Cleanup and refactor of filters
r10676 """
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.
"""
Jonathan Frederic
Moved wrap code into Strings utility file.
r10433
Jonathan Frederic
Cleanup and refactor of filters
r10676 split_text = text.split('\n')
wrp = map(lambda x:textwrap.wrap(x,width), split_text)
Jonathan Frederic
Moved wrap code into Strings utility file.
r10433 wrpd = map('\n'.join, wrp)
Jonathan Frederic
Moved more code to Strings utilities file
r10434 return '\n'.join(wrpd)
MinRK
add html_text and add_anchor filters...
r11302
def html_text(element):
"""extract inner text from html
Analog of jQuery's $(element).text()
"""
if not isinstance(element, (ElementTree.ElementTree, ElementTree.Element)):
element = ElementTree.fromstring(element)
text = element.text or ""
for child in element:
text += html_text(child)
text += (element.tail or "")
return text
def add_anchor(html):
"""Add an anchor-link to an html header tag
MinRK
allow extra pandoc args
r11293
MinRK
add html_text and add_anchor filters...
r11302 For use in heading cells
MinRK
allow extra pandoc args
r11293 """
MinRK
add html_text and add_anchor filters...
r11302 h = ElementTree.fromstring(py3compat.cast_bytes_py2(html))
link = html_text(h).replace(' ', '-')
h.set('id', link)
a = ElementTree.Element("a", {"class" : "anchor-link", "href" : "#" + link})
a.text = u'¶'
h.append(a)
return ElementTree.tostring(h)
MinRK
allow extra pandoc args
r11293
Jonathan Frederic
Moved more code to Strings utilities file
r10434
def strip_dollars(text):
Jonathan Frederic
Cleanup and refactor of filters
r10676 """
Remove all dollar symbols from text
Parameters
----------
text : str
Text to remove dollars from
"""
Jonathan Frederic
Moved more code to Strings utilities file
r10434
Jonathan Frederic
Post code-review, extended refactor.
r10485 return text.strip('$')
jakobgager
Small latex mods: Escapes, Headings, Equations...
r10882
MinRK
fix `file/` URL replacements in nbconvert
r11202 files_url_pattern = re.compile(r'(src|href)\=([\'"]?)files/')
Jonathan Frederic
Cleanup and refactor of filters
r10676 def rm_fake(text):
"""
MinRK
fix `file/` URL replacements in nbconvert
r11202 Fix all fake URLs that start with `files/`,
stripping out the `files/` prefix.
Jonathan Frederic
Cleanup and refactor of filters
r10676
Parameters
----------
text : str
MinRK
fix `file/` URL replacements in nbconvert
r11202 Text in which to replace 'src="files/real...' with 'src="real...'
Jonathan Frederic
Cleanup and refactor of filters
r10676 """
MinRK
fix `file/` URL replacements in nbconvert
r11202 return files_url_pattern.sub(r"\1=\2", text)
Jonathan Frederic
Post code-review, extended refactor.
r10485
Jonathan Frederic
Cleanup and refactor of filters
r10676 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'))
Jonathan Frederic
Post code-review, extended refactor.
r10485
Jonathan Frederic
Cleanup and refactor of filters
r10676 def get_lines(text, start=None,end=None):
Jonathan Frederic
Post code-review, extended refactor.
r10485 """
Split the input text into separate lines and then return the
lines that the caller is interested in.
Jonathan Frederic
Cleanup and refactor of filters
r10676
Parameters
----------
text : str
Text to parse lines from.
start : int, optional
First line to grab from.
end : int, optional
Last line to grab from.
Jonathan Frederic
Post code-review, extended refactor.
r10485 """
# Split the input into lines.
Jonathan Frederic
Cleanup and refactor of filters
r10676 lines = text.split("\n")
Jonathan Frederic
Post code-review, extended refactor.
r10485
# Return the right lines.
return "\n".join(lines[start:end]) #re-join