Textový editor

Vytvorte textový editor ktorý funguje na princípe command a response.

Pri spustení dostane na vstup argument – meno súboru. Ak súbor neexistuje, tak ho vytvoríte.

Editor pracuje v dvoch režímoch, buď od používateľa očakáva príkaz, alebo vstup. Rozdiel môžete vidieť na nasledujúcom priklade.  Ak chceme na koniec súboru pripísať dva riadky, spravíme to nasledovne.

V prvom riadku sme sputili program a otvorili súbor email.txt

V druhom od nás program požadoval príkaz (to je vidieť podľa hviezdičky, ktorou je identifikovaný príkazový mód), v tomto prípade to bol append – a.

Následne sme sa dostali do vstupného módu. Tento nezačína hviezdičkou. Čokoľvek tu napíšeme, bude appendnuté na koniec súboru. Z tohto módu sa dostaneme von tak, že na posledný riadok dáme iba bodku. Následne sem opäť v príkazovom móde.

Na riadku 6 sme použíli príkaz write -w . Tento zapísal zmeny do vstupného súboru a vypísal celkovú veľkosť súboru.

Na riadku 8 sme použíli príkaz quit – q.

Vstup je vždy ukončený riadkom s bodkou.        

Váš editor musí podporovať nasledujúce príkazy. Niektoré z nich môžu akceptovať aj rozsah riadkov na ktorých pracujú. Rozsah je definovaný nasledovne.

, - všetky riadky

,10 – riadky 1 až 10

5,10 – riadky 5, 6, 7, 8, 9, 10

3, - od riadka 3 až po koniec súboru

3,3 – riadok 3

3 – riadok 3

4,3 - chyba

Príkazy

Nasledujúce príkazy musí podporovať každá implementácia editora. Bez tejto základnej funkcionality nebudú hodnotené ani bonusy.

Write

Príkaz w. Zapíše aktuálny stav súboru na disk. Vypíš veľkosť súboru v bajtoch.

Quit

Príkaz q.

Ukončí program, pokiaľ nie je rozdiel medzi aktuálnym stavom a tým, čo je zapísané na disku. Inak vypíše chybovú  hlášku a vráti sa do príkazového stavu, čiže zmeny zostanú zachované.

Príkaz q!.

Ukončí program bez ohľadu na to, či došlo k zmenám, alebo nie.

Append

Príkaz a.

Dopíše na koniec súboru to, čo mu bude zadané na vstupe.

Príkaz a [číslo riadku].

Dopíše to čo bude zadané na vstupe za daný riadok. Ostatné riadky posunie nižšie. Ak je zadané neexistujúce číslo riadku, neexistujúce riadky vytvoríme a budú prázdne.

Print

Príkaz p.

Vypíš celý obsah súboru na výstup.

Príkaz p [range].

Vypíše iba range na výstup.

Change

Príkaz c.

Nahradí celý súbor dátami zo vstupu.

Príkaz c [range]

Nahradí daný rozsah dátami zo vstupu.

Delete

Príkaz d.

Zmaže všetky riadky.

Príkaz d [range].

Zmaže riadky v danom rozsahu.

 Bonusy

Human readable size 2.5 boda

Pri príkaze write, bude výpis veľkosti súboru human readable. Výpis bude tiež zaokrúhlený na max 2 desatinné miesta. Podporujte (Byte, KiloByte, MegaByte, GigaByte) B, KB, MB, GB.

Napr.

 

1 2 *w 10.52 KB

Shell 2.5 boda

Ak zadáme príkaz, ktorý začína výkričníkom, tento príkaz bude spustený ako zvlášť program

Napr.

 

1 2 3 4 5 6 7 8 * !echo aa aa !cat abc.txt Abc Abc Stale obsah suboru abc Posledny riadok *

Multi language & fuzzy support 10 bodov

Chceme aby náš editor podporoval viacero jazykov, takže sa môže stať, že niektoré príkazy budú mať aliasy. Napríklad príkaz print môže byť zadaný ako p, print, pri atď. Ale rovnako aj ako view, vie, vi.

Niekedy môžu vzniknúť problémy, keďže príkaz write má alias zapis a prikaz print zobraz. Ak zadáme na vstupe iba z, editor sa nebude vediet rozhodnúť, ktorý príkaz sme mysleli a preto nevykoná žiadnu akciu, ale namiesto toho, nám zobrazí, čo je nejednoznačné.

Napr.

1 2 * z 12 Ambiguous command z, could be {zapis, zobraz}

Aliasy:

Print: print, vypis, ukaz, show, vytlac

Delete: delete, zmazat, odstran, wipe

Change: change, zmenit, modify, vymen

Write: write, zapis, save, uloz

Append: append, paste, dopis

Quit: quit, odist, ukoncit, exit

Substitute (Iba ak implementujete tento bonus): substitute

Substitute 15 bodov

Podpora pre nový príkaz s.

S môže mať jeden alebo dva argumenty. Druhým (doborvoľným) argumentom je rozsah na ktorom sa má operácia vykonať.

Prvý argument je výraz ktorý hovorí čo sa má nahradiť čím. Hľadanie a nahrádzanie funguje aj nad viacerými riadkami naraz!

Napr nasledujúci príkaz zmení na riadku 4 všetky abc na def.  Vypíš aj koľko zhôd našiel

1 2 * s /abc/def/ 4 3 matches

Pri hľadaní zhody, berieme do úvahy špeciálne znaky

  • / ak chceme hladať lomku, zadáme ju ako \/

  • \ zadáme ako \\

  • * znamená 0 až nekonečno hociakých znakov. Ak ale chceme nájsť hviezdičku zadáme ju ako \*. Tento operátor dokáže nahrádzať aj nové riadky

  • \n - nový riadok

Oneliners 4 body

Príkazy append a change teraz majú možnosť zapisovať zmeny bez vstupného módu. Ak za príkazom nasledujú iné znaky, tieto budú použité ako riadok, ktorý bude použítý namiesto vstupu zo vstupného módu.

Pozor na to, že používateľ môže ale aj nemusí definovať rozsah.

Napr.

1 * a 12 ahoj

Vloží medzi riadky 12 a 13 riadok ahoj, zatiaľ čo

1 * a 12aa

Zapíše na koniec riadok 12aa

Bodovanie

Editor bez bonusov je za 20 bodov. Maximum bodov ktoré môžte získať je 50. Ak by vám editor bodovo vyšiel aj za viac než 50, viac bodov ako 50 nebude, ale môže vám to dať priestor na získanie bodov, ak ste spravili chyby.