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)


Czemu u’\\b(a|i|o|u|w|z)\\b\\s+’ a nie r’\b([aiouwz])\b\s+’? Wersja przyjmująca HTML na wejściu powinna chyba robić reg.sub(r’\1 ’, val) i pomijać niektóre tagi (jak np. ).
1) Po to, żeby sobie móc prosto dopisać dwuliterowe wersje w miarę potrzeb.
2) Sugerujesz, że jest krótsze, czy bardziej przenośne (tekst, HTML, XML)?
3) Co to znaczy ?
Ha. Do sub-a podajesz jednak dobry argument, co jednak (podobnie jak w moim poprzednim komentarzu) zostało zinterpretowane przez przeglądarkę (encja nie została „wyeskejpowana”).
Nie wiedziałem, że pozwalasz w komentarzach na niektóre tagi HTML.
Mówiąc o tagach miałem na myśli m.in.
<pre>.Do
subpodajęu'\u00a0', co oznacza niełamliwą spację (wcześniej faktycznie niechcący została rozwinięta). to jej bardzo długi, nieprzenośny zapis.Ponieważ nie podmieniam białych znaków na encje HTML, nie miałem dotąd problemów z żadnymi znacznikami. Jedyny problem, jaki mogę sobie wyobrazić, to spójnik poprzedzający znak końca wiersza w elementach z
white-space: pre.Tak, wiem jaki kod ma niełamliwa spacja w unikodzie. Wcześniejsze moje „czepialstwa” wynikały z tego, że przeglądarka zintepretowała część kodu.
Zamiana ta może być problematyczna faktycznie wewnątrz znaczków z
white-space: prejeśli np. po spójniku występuje znak tabulacja (który łapie się pod\s).A SynPrezesa się nie odzywał?
Chyba jestem zboczony, bo „do_sierotki” śmierdzi mi więzieniem.