Web_compile
Opos generátor súborovej štruktúry
1. Všeobecne
Program web_compile slúži na vytvorenie adresárovej štruktúry (web-u) na základe konfiguračného súboru a šablónových súborov.
2. Konfiguračný súbor
2.1. Syntax
Konfiguračný súbor sa skladá zo sekcií, ktoré tvoria stromovú štruktúru. Na najvyššej úrovni môže byť len jedna sekcia. Sekcia má takýto formát:
názov { obsah }
Obsah sekcie tvoria buď ďalšie sekcie, alebo nastavenia premenných. Ak sa na jednom riadku nachádza viac sekcií alebo nastavení premenných, tak ich doporučujem oddelovať bodkočiarkou ';' ,alebo zátvorkami '(', ')'.
Nastavenia premenných majú takýto formát:
názov = hodnota
alebo aj viachodnotové
názov = hodnota1,hodnota2,hodnota3 ...
Ak je v jednej sekcii viackrát nastavovaná tá istá premenná, tak sa to chápe ako nastavenie ďalšej hodnoty. Okrem premenných začínajúcich znakom '@'.
Hodnota môže byť jedna z:
- "text" - hodnotou je text, po aplikácii náhrad.
- %premenna% - hodnotou je hodnota premennej premenna.
- <súbor> - hodnotou je obsah súboru. Meno súboru sa získa algoritmom:
- 1) Ak existuje premenna @premenna, kde premenna je názov premennej, ktorej túto hodnotu priraďujeme. Tak na ňu aplikuj náhradu, pričom %premenna% sa nahradí za súbor napisany v <> - názov, nie obsah. Hodnota potom predstavuje obsah súboru s takto vzniknutým názvom.
- 2) Inak vykonaj náhradu v názve súboru.
- { obsah sekcie } - hodnotou bude vysledok spracovania sekcie, kotrý sa nezapíše do súboru, ale do hodnoty premennej.
Hodnotu premennej je možné zreťaziť pomocou operátora bodka '.' . Príklad: text= "text1" . "text2" . <subor>;
Hodnotu premennej je možné tiež spracovať externým programom pomocou operátora '|' . Príklad použitia: text= "abc" | "tr [:lower:] [:upper:]"; alebo aj zložitejšie použitie: text= <subor1> . <subor2> | "egrep -v ^#" | "fold -s -w80";
Ak program začína znakom '@', tak bude prípadné zlyhanie programu ignorované.
V konfiguračnom súbore nezáleží na bielych znakoch. Ak sa na riadku vyskytne znak '#' tak bude zvyšok riadku ignorovaný.
2.2. Vyhodotenie sekcie
Za normálnych okolností je v sekcii definovaná premenná sablona, ktorá obsahuje šablonu. V tejto šablone sa aplikujú náhrady premenných. Ak má nejaká premenna viac hodnôt, tak výsledkom bude spojenie aplikácii šablony cez všetky hodoty.
Takto vygenerovaný výstup sa uloží do súboru, ktorý je definovaný premennou subor do adresára definovaného premennou adresar. Ak premenná subor nieje definovaná tak sa názov súboru vytvorí automaticky skombinovaním názvu sekcie a premennej pripona. Ak premenná pripona nieje definovaná, tak sa ako prípona použije ".html".
V sekcii nemusí byť definovaná šablona. Namiesto šablony môže byť nastavená premenná link, ktorá udáva cestu k súboru, alebo adresáru, ktorý bude symbolicky prilinkonavý pod názvom podľa premennej subor.
Namiesto premennej link môže byť nastavená premenná url, ktorá udáva url, ktoré bude použité v menu namiesto tejto sekcie.
Ak nieje definovaná ani šablona ani link ani url, môže byť definovaná premenná copy, ktorá udáva cestu k súboru, ktorý bude prekopírovaný pod názvom podľa premennej subor.
Ak je názov sekcie hidden, tak sa táto sekcia neobjaví v menu.
2.3. Náhrada premenných
V šablone sa všetky výskyty "%premenna%" nahradia za obsah premennej premenna. Pre každú hodnotu premennej sa zreťazí-zopakuje celá šablóna. Výskyt "%*premenna%" sa nahradí za zreťazenie všetkých hodnôt premennej premenna. Okrem nastavených premenných môžu byť použité implicitné premenné:
- sekcia - obsahuje názov aktuálnej sekcie.
- # - poradové číslo pri viacnásobnom zreťazení šablony, keď má niektorá premenná viac hodnôt.
- menu - nahradí sa za menu vygenerované špecialne pre php.
2.4. Menu
Menu sa generuje iba keď je použitá premenná menu. V menu budú zahrnuté všetky podsekcie aktuálnej sekcie. Aktuálna sekcia v menu zahrnutá nebude. Výnimkou je ak je menu generované v hidden sekcii. V takom prípade bude menu generované ako keby bolo v nadradenej sekcii a bude doň zahrnutá teda aj nadradaná sekcia.
Názov pod kotrým bude sekcia vystupovať v menu je daný premennou nazov. Ak táto premenná nieje nastavená potom bude sekcia v menu vystupovať pod svojim názvom.
Ak sekcia generuje viac súborov, tak v menu bude iba prvý.
2.5. Textová verzia
Ak je definovaná premenná textova_verzia potom bude spolu s normálnou verziou generovaná aj textová verzia. Súbory nebudú zapisované do adresára podľa premennej adresar, ale podľa premennej textova_verzia.
Pri generovaní textovej verzie sa nespracuváva šablóna. Namiesto nej je súbor, ktorého názov je v premennej zdroj bez zmien prekopírovaný na cieľové miesto pod svojim názvom.
Ak bol pri spustení programu zadaný prepínač -t <prog> , tak sa namiesto kopírovania spustí externý program ktorý dostane dva argumenty: zdrojový súbor a cieľový súbor.
2.6. Prehľad dôležitých premenných
- sablona - šablóna sekcie
- link - ak nieje zadaná šablóna, tak sa vytvorí symlink na link
- url - ak nieje zadaná šablóna ani link, tak sa vytvorí v menu položka s url
- copy - ak nieje zadaná šablóna ani link ani url, tak sa na výstup skopíruje obsah súboru copy
- sekcia - obsahuje názov sekcie (defaultne skutočný názov sekcie)
- adresar - adresár do ktorého sa sekcia uloží
- textova_verzia - adresár do ktorého sa uloží textová verzia sekcie
- pripona - prípona ktorá sa použije pre meno súboru (def: html)
- subor - súbor do ktorého sa zapíše sekcia (def: sekcia.pripona)
- @x - pri x=<...> to nahradí podľa @x. %x% je hodnota v <>
- nazov - pod týmto názvom bude vystupovať sekcia v menu
- # - poradové číslo iterácie 1-n
- menu - vygenerované php menu
- zdroj - silne odporúčaná premenná, ktorá obsahuje názov súboru z ktorého sekcia čerpá informácie. Kvôli textovej verzii.
3. Autor
Marek Zelem (c)1999
e-mail: marek@fornax.elf.stuba.sk
4. Poďakovanie
Špeciálne ďakujem Branislavovi Steinmüllerovi za podnetné nápady, ktoré síce niekedy nie celkom v súlade s mojou predstavou smerovali k špecializácii na generovanie web-u ale zato vyrazne zjednodušili písanie konfiguračného súboru.
Prajem príjemné používanie.
Marek Zelem
Ak máte nejaké otázky alebo návrhy, pošlite mi ich na adresu marek@terminus.sk
|