Table of Contents

Tema 2: SD Editor 2014

Responsabili

Deadline soft: 8 aprilie, ora 23:55

Depunctare întârziere după depășirea deadline-ului soft: -10p/zi

Deadline hard: 11 aprilie, ora 23:55

Modificări și actualizări

Obiective

În urma realizării acestei teme studentul:

Gigel este absolvent al Facultăii de Automatică si Calculatoare. Înca de la primul laborator de USO Gigel folosește editorul vim, în mare parte pentru că nu știe cum să iasă din el. Acum că a absolvit, Gigel s-a gândit că e momentul să-și implementeze singur propriul editor. Însa cum acesta nu are destulă experiența cu editoarele, s-a lovit de cateva probleme.

Motivație

Gigel s-a pus pe lucru si in scurt timp a scris interfata cu utilizatorul pentru editorul sau. Si-a dat seama insa ca functionalitatile editorului sunt mai greu de implementat decat credea, asa ca a decis ca are nevoie de ajutorul unor profesionisti. Ca sa fie sigur, Gigel s-a decis sa ceara tuturor studentilor sa implementeze cate o versiune a functionalitatilor.

Astfel, editorul text se alcatuieste din partea scrisa de Gigel - care reprezinta interfata cu utilizatorul (front-end) - si partea scrisa de fiecare student in parte - care reprezinta functionalitatile (back-end).

Pentru a putea lucra in continuare la front-end si pentru a putea testa diverse implementari ale functionalitatilor editorului fara a modifica partea lui din aplicatie, Gigel a conceput o interfata prin care cele doua parti ale aplicatiei pot sa comunice, adica o descriere a operatiilor pe care back-end-ul stie sa le faca si front-end-ul le poate folosi.

Back-end-ul se leaga la aplicatia lui Gigel sub forma unei biblioteci partajate (shared object), iar pentru testare Gigel poate schimba bibliotecile intre ele fara a modifica partea sa din aplicatie.

Cum funcționează

Editorul lui Gigel este special. Din motive de simplitate (sau plictiseala) tanarul absolvent s-a gandit ca ar fi o idee buna daca editorul sau ar avea ca unitate de baza cuvantul si nu litera. Asta inseamna ca cea mai mica unitate pe care o poti adauga sau sterge este un cuvant.

Cuvantul se defineste ca fiind orice insiruire de caractere alfanumerice (fara orice fel de caractere speciale) urmate de un spatiu. La fiecare apasare a tastei “space” editorul trimite la back-end ultimul cuvant cuprins intre doua spatii pornind de la pozitia curenta a cursorului. Astfel, odata adaugat un cuvant acesta nu mai poate fi modificat, doar sters.

Cuvintele pot fi sterse apasand tasta “backspace”. Daca cuvantul pe care incercam sa-l stergem a fost deja trimis la back-end (are spatiu dupa el) atunci prima apasare selecteaza cuvantul, iar urmatoarea apasare il sterge. Cuvintele ce nu au fost inca trimise (nu au spatiu dupa ele) poti fi sterse litera cu litera (cum se intampla in mod normal in editoare).

Dupa fiecare operatie a editorului se face o actualizare a textului afisat, astfel incat sa nu existe neconcordante intre textul afisat de editor si cel aflat in back-end.

Butoanele cut / copy / paste au efect asupra textului selectat cu mouse-ul.

Atentie la modificarile pe care le faceti in editor. Acestea nu se transmit neaparat si back-end-ului. De exemplu cut / copy / paste folosind tastele, butonul de Delete si suprascrierea unui text selectat nu se transmit back-end-ului. Acestea vor ramane vizibile pana la urmatorul update al textului pe front-end.

Update-ul textului se face dupa fiecare operatie. Aceasta operatie presupune inlocuirea intregului text de pe ecran cu cel continut de back-end.

Intrucat comportamentul editorului sau nu este mereu cel mai intuitiv, Gigel s-a gandit ca este bine sa aiba specificatii mai clare legate de implementarea back-end-ului.

Interfata bibliotecii

Precizari:

Cerințe

Sa se implementeze o biblioteca shared object care sa expuna un obiect ce contine functiile prezentate. Un schelet de cod de la care sa plecati este disponibil in arhiva, in directorul backend_src.

Scopul temei este acela de a implementa functionalitatile bibliotecii. Front-end-ul va este pus la dispozitie pentru a avea un mijloc intuitiv de testare a functionalitatilor implementate. Testarea temelor nu se va face cu acest front-end, ci cu testele publice descrise in sectiunea corespunzatoare de mai jos

Indicatii de implementare

Cum se compileaza

Descarcati arhiva

O să aveți nevoie de biblioteca libqt4-dev

sudo apt-get install libqt4-dev

Extrageți arhiva si rulați qmake în rădăcina arhivei (acolo unde se afla Conf.pro).

Mutați-vă in backend_src si rulați make. Se va genera lib-backend.so care este necesară pentru front-end.

Mutați-vă înapoi în rădăcina arhivei și rulați make. Se va genera executabilul sd_editor.

./sd_editor

Teste publice

Checker

Reguli pentru trimitere

Temele vor trebui trimise pe vmchecker. Atenție! Temele trebuie trimise în secțiunea Structuri de Date (CA).

Arhiva trebuie să conțină:

Pentru a putea genera un shared object este nevoie ca sursele sa fie compilate cu flag-ul '-fPIC'. Pentru un exemplu, inspectati Makefile-ul din backend_src

Punctaj

Coding style-ul trebuie sa fie consistent și ușor de citit. Ca ghid vă recomandăm:

sau

Citiți cu atenție Regulamentul General de Trimitere a Temelor.

Nu copiați! Toate soluțiile vor fi verificate folosind o unealtă de detectare a plagiatului. În cazul detectării unui astfel de caz, atât plagiatorul cât și autorul original (nu contează cine care e) vor primi punctaj 0 pe toate temele!

De aceea, vă sfătuim să nu vă lăsați rezolvări ale temelor pe calculatoare partajate (la laborator etc), pe mail/liste de discuții/grupuri etc.

FAQ

Q: Se poate folosi STL?

A: Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL nu este permisă

Resurse

C++ Tutorial