Python - generator HTML, część 2

Spisie treści
W pierwszej części naszego samouczka udało nam się sprawić, by nasz program pobierał plik tekstowy i generował bloki z zawartymi w nim paragrafami, udało nam się również sprawić, by miał możliwość eksportu tego, co zbudowaliśmy w zewnętrznym pliku.
Druga iteracja
Jak powiedzieliśmy na początku, musimy zrobić najbardziej modułowy program i aby to osiągnąć, musimy przeprowadzić nasze kod obiektowy.
W tym celu musimy dokonać niezbędnych abstrakcji, aby móc budować klasy zawierające metody, które osiągają nasze cele.
Wymagania
Zróbmy listę komponentów, które musimy zbudować, dzięki temu będziemy wiedzieć, co musimy mieć, aby nasz program był pełniejszy:
  • A parser, ten obiekt pozwoli nam na odczytanie tekstu i obsługę pozostałych klas.
  • Zasady, Stworzymy regułę dla każdego typu bloku, dzięki temu będziemy w stanie wykryć jaki typ bloku posiadamy i jaki format powinniśmy do niego zastosować.
  • Filtry, wraz z nimi wprowadzimy wyrażenia regularne, aby móc obsłużyć niektóre elementy wewnętrzne.
  • Przewoźnicy, te programy obsługi będą używane przez parser do generowania przetworzonych danych wyjściowych. Każdy treser będzie w stanie obsłużyć różne rodzaje etykiet.
Treser
Ta klasa pozwoli nam obsłużyć pewne typy etykiet dla wyjść, zobaczmy kod, który może zawierać:

Następnie musimy zbudować super klasę Przewoźnicy, które pozwolą nam zarządzać innym treserzy czego potrzebujemy. W tym celu zobaczymy następujący kod:
 class Handler: def callback (self, prefix, name, * args): metoda = getattr (self, prefix + name, None) if callable (metoda): return metoda (* args) def start (self, name): self. callback ('start_', nazwa) def end (self, nazwa): self.callback ('end_', nazwa) def sub (self, nazwa): def substitution (match): wynik = self.callback ('sub_', nazwa, dopasowanie) default = match.group (0) zwróć wynik lub zwróć domyślne podstawienie 

Jeśli teraz wykonamy małe ćwiczenie, możemy zobaczyć nasze dotychczasowe postępy:
 >>> from handlers import HTMLRenderer >>> handler = HTMLRenderer () >>> import re >>> re.sub (r '\ * (. +?) \ *', handler.sub ('emfaza'),' To * jest * testem ')' To jest dowód' 

Jak widzimy w poprzednim wywołaniu, najpierw importujemy naszą klasę HTMLRenderer co jest nasze? treser, następnie importujemy odnośnie z którym będziemy obsługiwać wyrażenia regularne, następnie przechodzimy do re.sub wyrażenie i metoda, z jaką należy je zastosować, następnie tekst i wreszcie widzimy, że wynik wygenerował niezbędny kod HTML.
Zasady
Kiedy już mamy obsługę, nadszedł czas, aby stworzyć reguły, pomogą nam one określić miejsce docelowe dla różnych bloków, jednak musi to być zorientowane obiektowo, abyśmy nie skończyli z dużą liczbą bloków zagnieżdżone, jeśli aby zweryfikować wszystkie przypadki.
Musimy też mieć superklasę, która zarządza naszymi regułami, zobaczmy poniższy kod, który zawiera superklasę.
 class Reguła: akcja def (self, block, handler): handler.start (self.type) handler.feed (block) handler.end (self.type) return True 

Jak widzimy metodę akcja () otrzymuje blok i typ programu obsługi, którego musi użyć, dzięki czemu będzie w stanie odróżnić, który blok musi zastosować do tego, co otrzymuje, poprzez parametry, a tym samym sfinalizować kod, który musi zostać wydrukowany.
Na tym kończymy samouczek i pozostawiamy wszystkim kontynuację, dopóki nie będziemy mieli gotowego projektu zgodnie ze wskazówkami podanymi na początku w pierwszej części tego samouczka.Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave