Ot, taki znak, że nie umarłem. Dziś w programie dość popularny błąd składu, choć wielu uważa, że internetu reguły nie dotyczą. A sierotki wykończymy tak:
import re
def sierotki(text):
reg = re.compile(u'\\b(a|i|o|u|w|z)\\b\\s+')
return reg.sub(u'\\1\u00a0', text)
Niestety, na ogół mamy do czynienia z tekstem zawierającym znaczniki:
import re
from BeautifulSoup import BeautifulSoup
def sierotki(text):
soup = BeautifulSoup(text)
reg = re.compile(u'\\b(a|i|o|u|w|z)\\b\\s+')
for val in soup.findAll(text=reg):
val.replaceWith(reg.sub(u'\\1\u00a0', val))
return unicode(soup)
I na koniec bonus, blok dla Django:
from django import template
register = template.Library()
@register.tag(name='sierotki')
def do_sierotki(parser, token):
nodelist = parser.parse(('endsierotki',))
parser.delete_first_token()
return SierotkiNode(nodelist)
class SierotkiNode(template.Node):
def __init__(self, nodelist):
self.nodelist = nodelist
def render(self, context):
output = self.nodelist.render(context)
return sierotki(output)