Općenito
Svaki sustav predložaka (template-a) radi zamjenu predefiniranih oznaka (ključnih riječi). Predefinirane oznake obično su zatvorene u delimitere (znakove koji ograđuju ključnu riječ, kako bi se razlikovala od normalnog teksta). Zamjenski niz (obično je to tekst) može biti fiksiran ili ga program dobiva ne neki način (bilo računanjem, čitanjem iz baze, konzultiranjem web site-ova ili na neki drugi način).
Jednostavni template sustav
Jednostavni template sustav namijenjen je, originalno, za izradu XHTML stranica iz template-a, a napisan je u Perl-u 5.8.2 na Windows XP-u. Perl je, prvenstveno, izabran zbog svoje podrške za regularne izraze (iako bi sustav mogao biti napisan u bilo kojem jeziku s pristojnom podrškom za regularne izraze). Sustav može, opcionalno, verificirati XHTML kod putem Joe Clark-ovog nsgmls-a. Dobar dio posla prepušten je Dave Ragett-ovom programu tidy koji treba "popraviti" neispravan kod.
Ovisno o parametrima, program obrađuje jednu datoteku ili prolazi kroz direktorije (hijerarhijski).
Obrada direktorija
Navedemo li parametre --source-dir (kraće -s) i --destination-dir (kraće -d) radi se na direktorijima. Postupak starta iz "source-dir" direktorija i prolazi kroz cijelu strukturu poddirektorija. U svakom direktoriju obrađuju se sve datoteke (izuzev onih navedenih u --exclude-files (kraće -e) parametru).
Identična struktura stvara se u "destination-dir" direktoriju. Normalno, korisnik mora imati prava na datotečnom sustavu (file system-u).
Obrada jedne datoteke
Navedemo li parametre --input (kraće -i) i --output (kraće -o) radi se na pojedinačnoj datoteci. Obrada se sastoji od:
- GenoPro filter-a (opcija "g")
- zamjene "naših" slova
- tidy filter-a (opcija "t")
- HTML filter-a (opcija "h")
- zamjene header-a i footer-a
- provjere validatorom (opcija "v")
Pokretanje opcionalnih dijelova definira se --filters (kraće -f) parametrom programa. Svaka opcija može biti isključena ako se ispred nje stavi znak minus. Opcije koje se ne navedu, neće biti aktivirane (preddefinirano, default stanje).
Filteri
Rad filtera definira se u vanjskim datotekama. Filter GenoPro traži datoteku 'genopro-regexps.txt', filter HTML datoteku 'html-regexps.txt', a tidy filter datoteke 'tidy-config.txt' i 'after-tidy-regexps.txt'. Datoteke se nalaze u direktoriju resursa (po definiciji, isti direktorij u kojem se nalazi skripta). i iz nje pročita akcije koje treba napraviti.
Datoteke naziva '*-regexps.txt' imaju jednostavan format: znak # (hash, taraba) je oznaka komentara (do kraja reda), a akcije su regularni izrazi napisani prema Perl pravilima, samo je delimiter definiran s dva uskličnika (jer nije vjerojatna pojava takvog niza u realnom tekstu; vidi funkciju load_regexps).
Rad tidy filtera definiran je 'tidy-config.txt' datotekom. Sadržaj datoteke direktno se prosljeđuje programu tidy (tako da je format određen u tom programu). Oznaka za komentar do kraja reda je '//', a opcije se navode u formatu:
naziv: vrijednost
Po završetku rada tidy programa, rade se akcije definirane u 'after-tidy-regexps.txt' datoteci.
Validacija
Uvijek postoji mogućnost previda ili pogreške, a kad radimo na strukturi direktorija s mnoštvom datoteka, ona se multiplicira. Nije praktično pregledavati pojedinačne rezultate: to je zamorno, dugotrajno i podložno greškama. Bolje je imati automatizirani sustav za validaciju napravljenog posla.
Za validaciju možemo upotrijebiti CSE HTML Validator, ali to zapravo nije praktično kod velikog broja datoteka.
Zamjena naših slova
U verziji 0.10 radi se samo zamjena neispravno generiranih numeričkih entiteta. Numerički entiteti definirani su kao sekvence oblika $#nnn; gdje je nnn kod entiteta. Za naša slova entiteti su:
| Slovo | Entitet | Slovo | Entitet |
|---|---|---|---|
| Č | Č | č | č |
| Ć | Ć | ć | ć |
| Đ | Đ | đ | đ |
| Š | Š | š | š |
| Ž | Ž | ž | ž |
Zamjena header-a i footer-a
Vrlo česta operacija na html datotekama je zamjena header-a i footer-a. Header je mjesto na prijelazu glave i tijela stranice (dakle </head>\s*<body>), dok je footer na dnu stranice (</body>), a zamjenjuju se sadržajem datoteka header.txt i footer.txt. Predefinirane datoteke nalaze se u direktoriju resursa, ali se mogu nalaziti i u svakom direktoriju koji se obrađuje. Ako program pronađe datoteke u direktoriju, primjenjivat će ih na sve datoteke tog direktorija i u svim poddirektorijima koji nemaju svoje vlastite datoteke.
Instalacija
Pretpostavljam kako imate neku verziju perl-a instaliranu. Za Windows strojve koji standardno nemaju perl instaliran, preporučam instalaciju zadnje verzije ActiveState ActivePerl-a.
Na *nix strojevima, potrebno je podesiti prvu liniji (she-bang) prema Vašoj instalaciji perl-a.
Program koristi module File::Spec, File::Copy i File::Basename. Kako su to standardni moduli, očekujem da ih imate (za Windows korisnike: standardna instalacija ActivePerl ih instalira).
Sadržaj unzipirajte u zaseban direktorij. U konfiguraciji (hash %config) treba promijeniti:- u dijelu 'tidy', opciju 'program'
- u dijelu 'nsgmls', opciju 'instalation_dir'
Naravno, ako nemate instalirane tidy i/ili nsgmls, program možete koristiti, ali bez tih "naprednijih" mogućnosti. Posebno preporučam instalaciju tidy-ja koja je krajnje pojednostavljena 2005-te godine (samo treba skinuti tidy-nnnnnn-setup.exe i pokrenuti ga; u trenutku pisanja ovog teksta zadnja verzija bila je tidy-050223-setup.exe).
Primjeri pokretanja
Ulaznu datoteku index.names.htm u poddirektoriju cacic-stipe pretvori u korektni XHTML kod i spremi rezultata u aktualni direktorij pod imenom index.html. Opcija -f=G je kratica za -f=ghtv što se koristi kod GenoPro datoteka:
dlj_template -f=G -i cacic-stipe\index.names.htm -o index.html
Nemoj ništa raditi, nego prikaži parametre programa prije nego što se akcija započne (primijetite -c parametar na kraju):
dlj_template -f=G -i cacic-stipe\index.names.htm -o index.html -c
U situaciji kad nemamo instaliran ni tidy ni nsgmls, radimo s html datotekom, primjenjujemo samo HTML filter (opcija -h):
dlj_template -f=h -i cacic-stipe\index.names.htm -o index.html
Obrada svih datoteka u direktoriju traži se navođenjem ulaznog direktorija (opcija -s) i direktorija u koji treba smjestiti rezultate obrade (opcija -d). U ovom primjeru, program neće obrađivati datoteke s txt ekstenzijom(opcija -e):
dlj_template -f=G -s cacic-stipe -d ../data/cacic-stipe -e "*.txt"
Po potrebi, možemo više puta navesti opciju -e.