Differences between revisions 1 and 16 (spanning 15 versions)
Revision 1 as of 2009-03-25 12:45:29
Size: 1214
Editor: 147
Comment:
Revision 16 as of 2011-03-26 22:09:37
Size: 4473
Editor: jenca
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from OperacneSystemy/Zadanie1
= Zadanie 1 =
= Zadanie zo shellu : wiki syntax =
Line 4: Line 3:
Prvé domáce zadanie bude o spracovaní HTML. Na cvičení 30.10 ho budete ešte rozširovať
a výsledok odovzdáte.
== Úvod ==
Line 7: Line 5:
Prvý problém na ktorý narazíme pri vyťahovaní nejakých informácií z HTML je, že to nie
je riadkovo orientovaný jazyk. HTML tagy môžu začínať a končiť nezávisle od konca riadku.
Písať webové stránky priamo v HTML je
nepríjemná vec, preto sa ľudia tomu snažia vyhnúť.
Jeden zo spôsobov je napísať text s jednoduchými
a prehľadnými formátovacími značkami a previesť ho do HTML.
Line 10: Line 10:
Naproti tomu UNIXové utility na spracovanie textu sú riadkovo orientované. Wiki je jednoduchý a ľahko použiteľný jazyk,
ktorý sa používa ako zdrojový kód pre HTML.
Line 12: Line 13:
== Prvá časť == Príklad zdrojového kódu v jazyku wiki:
{{{
= Toto je nadpis =
== Toto je podnadpis ==
Line 14: Line 18:
Napíšte skript, ktorý ak dostane na štandartný vstup HTML kód, vráti ekvivalentný HTML kód ktorý je
ale vhodný na riadkové spracovanie - v každom riadku má práve jeden tag.
Obsah odstavca
Odstavec môže mať veľa riadkov
 
Line 17: Line 22:
[[attachment:priklad1_input.html.txt|Príklad vstupu]]
[[attachment:priklad1_output.html.txt|Príklad výstupu]]
Line 20: Line 23:
'''Pomôcka:''' Použite `tr` a `sed`. Riešenie má pár znakov.
Line 22: Line 24:
== Druhá časť == Ďalší odstavec
Odstavec nemusí končiť iba prázdným riadkom, aj nadpis
ukončí odstavec.
== Druhý podnadpis ==
Line 24: Line 29:
Rozšírte váš skript tak, aby vyhľadal a vypísal všetky tagy prislúchajúce obrázkom zobrazeným
na stránke. Zodpovedajúci tag je `<img src=`. Pozor na medzery, malé a veľké písmená.
Blabla
Line 27: Line 31:
[[attachment:priklad2_input.html.txt|Príklad vstupu]]
[[attachment:priklad2_output.html.txt|Príklad výstupu]]

   = Ahoj =

== Končíme ==

Posledný odstavec.

}}}

Príklad zodpovedajúceho HTML
{{{
<h1> Toto je nadpis </h1>
<h2> Toto je podnadpis </h2>
<p>
Obsah odstavca
Odstavec môže mať veľa riadkov
</p>
<p>
Ďalší odstavec
Odstavec nemusí končiť iba prázdným riadkom, aj nadpis
ukončí odstavec.
</p>
<h2> Druhý podnadpis </h2>
<p>
Blabla
</p>
<h1> Ahoj </h1>
<h2> Končíme </h2>
<p>
Posledný odstavec.
</p>
}}}

A takto to HTML vyzerá v browseri:


{{{#!HTML
<div style="border:2px dotted black;background-color:#FFA;padding:1em;">
<h1> Toto je nadpis </h1>
<h2> Toto je podnadpis </h2>
<p>
Obsah odstavca
Odstavec môže mať veľa riadkov
</p>
<p>
Ďalší odstavec
Odstavec nemusí končiť iba prázdným riadkom, aj nadpis
ukončí odstavec.
</p>
<h2> Druhý podnadpis </h2>
<p>
Blabla
</p>
<h1> Ahoj </h1>
<h2> Končíme </h2>
<p>
Posledný odstavec.
</p>
</div>
}}}

== Zadanie ==

Napíšte shellovský skript, ktorého úlohou je prečítať text vo wiki syntaxi
zo svojho štandartného vstupu a zapísať zodpovedajúcu HTML ''stránku'' na svoj štandartný výstup. Aby vznikla funkčná HTML stránka, musí byť na začiatku
vypísaná táto záhadná vec

{{{
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sk" lang="sk">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<body>
}}}

a na konci toto:

{{{
</body>
</html>
}}}

Medzi tými dvomi textami, samozrejme, musí byť štandartný vstup vo wiki syntaxi transformovaný do HTML. Predvediem to na cvičení, aby neboli nejasnosti.

Nechcem, aby váš skript ukladal svoj výstup sám od seba do súboru.
Má to byť textový filter, pretože tak je to flexibilnejšie a lepšie.
To znamená, že základné použitie je
{{{
vas_skript < vstupny_subor_vo_wiki_jazyku > subor_v_html
}}}

== Vzorový vstup a výstup ==

[[attachment:vzor_cviko1.zip]]


== Pomôcky ==

Toto nie je myslené ako predpis, ako to nevyhnutne má byť.
Ak to spravíte inak a lepšie, budem ešte šťastnejší a spokojnejší ako zvyčajne.

=== Základný cyklus ===

Základný cyklus v mojom riešení je
{{{
while read LINE
do
...
done
}}}

Vnútri prebieha spracovanie obsahu premennej LINE.

=== Testovanie na regulárne výrazy ===

V premennej LINE máme uložený aktuálny riadok,
bolo by dobre zistiť, či to je nadpis, podnadpis alebo trebárs prázdny
riadok.

Dá sa to robiť pomocou echa a grepu takto:
{{{
if test -n "`echo "$LINE" | grep 'regularny_vyraz_sem'`"
then
...
fi
}}}
To je proste testovanie neprázdnosti reťazca
Sú aj iné možnosti, jedna z nich je toto:

{{{
if echo "$LINE" | grep 'regularny_vyraz_sem' >/dev/null
then
...
fi
}}}

grep totiž dáva exit status 0 (t.j. pravda) iba ak regulárny výraz nájde
vo svojom štandartnom vstupe.

=== Transformácia textu ===

Ak potrebujem transformovať reťazec (povedzme z neho niečo
vystrihnúť) a priradiť ho do premennej, môžem použiť
idióm
{{{
TRANSFORMOVANY_TEXT=`echo "$NIECO" | sed 's/regularny_vyraz/cim_nahradit/'
}}}

=== Pasce a problémy ===

 * Dajte si pozor na to, ako sa vytvárajú nové odstavce. Ja som potreboval dve pomocné stavové premenné. Toto je trochu na premýšľanie ale pomáhať s tým nebudem.
 * Premenné radšej dereferencujte takto: {{{"$PREM"}}} a nie takto {{{$PREM}}}. Môžu totiž nastať problémy, ak je obsahom premennej reťazec obsahujúci medzery. Uznávam, že na cviku som nebol v tomto dosť dôsledný, mea culpa. Ak totiž ''viem'', že premenná neobsahuje medzery nemusím to robiť.

Zadanie zo shellu : wiki syntax

Úvod

Písať webové stránky priamo v HTML je nepríjemná vec, preto sa ľudia tomu snažia vyhnúť. Jeden zo spôsobov je napísať text s jednoduchými a prehľadnými formátovacími značkami a previesť ho do HTML.

Wiki je jednoduchý a ľahko použiteľný jazyk, ktorý sa používa ako zdrojový kód pre HTML.

Príklad zdrojového kódu v jazyku wiki:

= Toto je nadpis =
== Toto je podnadpis ==

Obsah odstavca
Odstavec môže mať veľa riadkov
 



Ďalší odstavec
Odstavec nemusí končiť iba prázdným riadkom, aj nadpis 
ukončí odstavec.
== Druhý podnadpis ==

Blabla


   = Ahoj =  

== Končíme ==

Posledný odstavec.

Príklad zodpovedajúceho HTML

<h1> Toto je nadpis </h1>
<h2> Toto je podnadpis </h2>
<p>
Obsah odstavca
Odstavec môže mať veľa riadkov
</p>
<p>
Ďalší odstavec
Odstavec nemusí končiť iba prázdným riadkom, aj nadpis
ukončí odstavec.
</p>
<h2> Druhý podnadpis </h2>
<p>
Blabla
</p>
<h1> Ahoj </h1>
<h2> Končíme </h2>
<p>
Posledný odstavec.
</p>

A takto to HTML vyzerá v browseri:

Toto je nadpis

Toto je podnadpis

Obsah odstavca Odstavec môže mať veľa riadkov

Ďalší odstavec Odstavec nemusí končiť iba prázdným riadkom, aj nadpis ukončí odstavec.

Druhý podnadpis

Blabla

Ahoj

Končíme

Posledný odstavec.

Zadanie

Napíšte shellovský skript, ktorého úlohou je prečítať text vo wiki syntaxi zo svojho štandartného vstupu a zapísať zodpovedajúcu HTML stránku na svoj štandartný výstup. Aby vznikla funkčná HTML stránka, musí byť na začiatku vypísaná táto záhadná vec

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sk" lang="sk">
<head>
<meta http-equiv="Content-type"  content="text/html;charset=UTF-8" />
<body>

a na konci toto:

</body>
</html>

Medzi tými dvomi textami, samozrejme, musí byť štandartný vstup vo wiki syntaxi transformovaný do HTML. Predvediem to na cvičení, aby neboli nejasnosti.

Nechcem, aby váš skript ukladal svoj výstup sám od seba do súboru. Má to byť textový filter, pretože tak je to flexibilnejšie a lepšie. To znamená, že základné použitie je

vas_skript < vstupny_subor_vo_wiki_jazyku > subor_v_html

Vzorový vstup a výstup

vzor_cviko1.zip

Pomôcky

Toto nie je myslené ako predpis, ako to nevyhnutne má byť. Ak to spravíte inak a lepšie, budem ešte šťastnejší a spokojnejší ako zvyčajne.

Základný cyklus

Základný cyklus v mojom riešení je

while read LINE
do
...
done

Vnútri prebieha spracovanie obsahu premennej LINE.

Testovanie na regulárne výrazy

V premennej LINE máme uložený aktuálny riadok, bolo by dobre zistiť, či to je nadpis, podnadpis alebo trebárs prázdny riadok.

Dá sa to robiť pomocou echa a grepu takto:

if test -n "`echo "$LINE" | grep 'regularny_vyraz_sem'`"
then
...
fi

To je proste testovanie neprázdnosti reťazca Sú aj iné možnosti, jedna z nich je toto:

if echo "$LINE" | grep 'regularny_vyraz_sem' >/dev/null
then
...
fi

grep totiž dáva exit status 0 (t.j. pravda) iba ak regulárny výraz nájde vo svojom štandartnom vstupe.

Transformácia textu

Ak potrebujem transformovať reťazec (povedzme z neho niečo vystrihnúť) a priradiť ho do premennej, môžem použiť idióm

TRANSFORMOVANY_TEXT=`echo "$NIECO" | sed 's/regularny_vyraz/cim_nahradit/'

Pasce a problémy

  • Dajte si pozor na to, ako sa vytvárajú nové odstavce. Ja som potreboval dve pomocné stavové premenné. Toto je trochu na premýšľanie ale pomáhať s tým nebudem.
  • Premenné radšej dereferencujte takto: "$PREM" a nie takto $PREM. Môžu totiž nastať problémy, ak je obsahom premennej reťazec obsahujúci medzery. Uznávam, že na cviku som nebol v tomto dosť dôsledný, mea culpa. Ak totiž viem, že premenná neobsahuje medzery nemusím to robiť.

KMaDGWiki: OperacneSystemy/Zadanie1 (last edited 2011-03-26 22:09:37 by jenca)