Python - HTML generatorius, 2 dalis

Turinys
Pirmoje pamokos dalyje mums pavyko priversti programą paimti tekstinį failą ir sugeneruoti blokus su joje esančiomis pastraipomis, taip pat sugebėjome suteikti galimybę eksportuoti tai, ką sukūrėme išoriniame faile.
Antroji iteracija
Kaip sakėme pradžioje, turime tai padaryti moduliškiausia programa ir kad tai pasiektume, turime vykdyti savo į objektą orientuotas kodas.
Tam turime padaryti reikiamas abstrakcijas, kad galėtume sukurti klases, kuriose būtų mūsų tikslų pasiekimo metodai.
Reikalavimai
Sudarykime komponentų, kuriuos turime sukurti, sąrašą, todėl žinosime, ką turime turėti, kad mūsų programa būtų išsamesnė:
  • A analizatorius, šis objektas leis mums skaityti tekstą ir tvarkyti kitas klases.
  • Taisyklės, Mes sudarysime taisyklę kiekvienam blokų tipui, tai leis mums nustatyti, kokio tipo bloką turime ir kokį formatą turėtume jam taikyti.
  • Filtrai, su jais mes įtrauksime reguliarias išraiškas, kad galėtume valdyti kai kuriuos vidinius elementus.
  • Tvarkytojai, šiuos tvarkykles naudos analizatorius generuoti apdorotą produkciją. Kas tvarkytojas jis galės tvarkyti kitokio tipo etiketes.
Tvarkytojas
Ši klasė leis mums tvarkyti tam tikrų tipų išvesties etiketes, pažiūrėkime kodą, kurį jis gali turėti:

Tada mes turime sukurti super klasę Tvarkytojai, tai leis mums valdyti skirtingus tvarkytojai kad mums reikia. Norėdami tai padaryti, pamatysime šį kodą:
 klasių tvarkytojas: def callback (self, prefiksas, vardas, * args): method = getattr (self, prefiksas + pavadinimas, None) if callable (method): return method ( * args) def start (self, name): self. atgalinis skambutis ('start_', name) def end (self, name): self.callback ('end_', name) def sub (self, name): def substitution (match): result = self.callback ('sub_', vardas, atitiktis) numatytasis = atitiktis.group (0) grąžinimo rezultatas arba numatytasis grąžinimo pakeitimas 

Jei dabar atliksime nedidelį pratimą, pamatysime savo pažangą:
 >>> iš tvarkytojų importuoti HTMLRenderer >>> tvarkytojas = HTMLRenderer () >>> importuoti re >>> re.sub (r '\ * (. +?) \ *', handler.sub ('paryškinimas'), ' Tai * yra * testas ')' Tai yra įrodymas “ 

Kaip matome ankstesniame kvietime, pirmiausia importuojame savo klasę HTMLRenderer kas yra mūsų tvarkytojas, tada importuojame re su kuria mes tvarkysime reguliarius posakius, tada einame į re.sub išraiška ir metodas, kuriuo ji turėtų būti taikoma, tada tekstas ir galiausiai matome, kad išvestis sugeneravo reikiamą HTML kodą.
Taisyklės
Kai turėsime tvarkytojus, atėjo laikas sudaryti taisykles, jie padės mums nurodyti paskirties vietą įvairiems blokams, tačiau ji turi būti orientuota į objektą, kad nesulauktume daug blokų įdėtas, jei patvirtinti visus atvejus.
Mes taip pat turime turėti super klasę, kuri valdo mūsų taisykles, pažiūrėkime šį kodą, kuriame yra super klasė.
 klasės taisyklė: def veiksmas (savarankiškas, blokas, tvarkytojas): handler.start (self.type) handler.feed (block) handler.end (self.type) return True 

Kaip matome metodą veiksmas () gauna bloką ir tvarkytojo tipą, kurį jis turi naudoti, tokiu būdu jis pagal parametrus galės atskirti, kurį bloką jis turi pritaikyti gaunamam, ir taip užbaigti kodą, kuris turi būti atspausdintas.
Tuo mes baigiame mokymo programą ir paliekame visiems tęsti, kol projektas bus paruoštas pagal gaires, pateiktas šios pamokos pirmosios dalies pradžioje.Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave