Python - HTML генератор, част 2

Съдържание
В първата част на нашия урок успяхме да накараме нашата програма да вземе текстов файл и да генерира блокове с параграфите, които съдържа, също така успяхме да я накараме да експортира това, което сме вградили във външен файл.
Втора итерация
Както казахме в началото, трябва да направим най -модулната програма и за да постигнем това, трябва да изпълним нашите обектно-ориентиран код.
За това трябва да направим необходимите абстракции, за да можем да изградим класове, които съдържат методите, които постигат нашите цели.
Изисквания
Нека направим списък на компонентите, които трябва да изградим, с това ще знаем какво трябва да имаме, за да бъде нашата програма по -пълна:
  • А анализатор, този обект ще ни позволи да четем текста и да обработваме останалите класове.
  • Правила, Ще направим правило за всеки тип блок, което ще ни позволи да открием какъв тип блок имаме и какъв формат трябва да приложим към него.
  • Филтри, с тях ще включим регулярни изрази, за да можем да обработваме някои вътрешни елементи.
  • Манипулатори, тези манипулатори ще се използват от анализатор за генериране на обработената продукция. Всеки манипулатор той ще може да обработва различен тип етикети.
Манипулатор
Този клас ще ни позволи да обработваме определени типове етикети за изходите, нека да видим кода, който може да съдържа:

След това трябва да изградим суперклас Манипулатори, което ще ни позволи да управляваме различните манипулатори че имаме нужда. За това ще видим следния код:
 class Handler: def callback (self, prefix, name, * args): method = getattr (self, prefix + name, None), ако се извиква (method): return method ( * args) def start (self, name): self. callback ('start_', name) def end (self, name): self.callback ('end_', name) def sub (self, name): def substitution (match): result = self.callback ('sub_', име, съвпадение) по подразбиране = match.group (0) връщане на резултат или заместване на връщане по подразбиране 

Ако сега направим малко упражнение, можем да видим напредъка си досега:
 >>> от манипулатори импортирайте HTMLRenderer >>> handler = HTMLRenderer () >>> импортирайте re >>> re.sub (r '\ * (. +?) \ *', handler.sub ('ударение'), ' Това * е * тест ')' Това е доказателство ' 

Както виждаме в предишното обаждане, първо импортираме нашия клас HTMLRenderer какво е нашето манипулатор, след това внасяме повторно с които ще се справим с регулярните изрази, след това отиваме на re.sub израза и метода, с който трябва да се приложи, след това текста и накрая виждаме, че изходът е генерирал необходимия HTML код.
Правила
След като имаме манипулаторите, е време да направим правилата, те ще ни помогнат да дадем дестинация на различните блокове, но тя трябва да бъде обектно-ориентирана, така че да не завършим с голям брой блокове вложено, ако за потвърждаване на всички случаи.
Трябва да имаме и супер клас, който управлява нашите правила, нека видим следния код, който съдържа супер класа.
 class Rule: def action (self, block, handler): handler.start (self.type) handler.feed (block) handler.end (self.type) return True 

Както виждаме метода действие () получава блока и вида на манипулатора, който трябва да използва, с това той ще може да различи кой блок трябва да приложи към това, което получава по параметри и по този начин да финализира кода, който трябва да бъде отпечатан.
С това завършваме урока и оставяме на всеки да продължи, докато не подготвим проекта съгласно указанията, дадени в началото в първата част на този урок.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave