/* autor: Milan Ruzic 394/2000 */ /*Napomena: program prijavljuje gresku u slucaju preklopljenih etikete kao na pr: xxxxxxxxx ; tekstovi i ne bi trebali da sadrze ovako nesto */ #include #define opTagNum 3 /* broj otvorenih tagova, koje treba izbegavati */ #define opTag1 "META" #define opTag2 "BR" #define opTag3 "HR" int strcmp(char *s1,char *s2) { for (;*s1==*s2 && *s2;s1++,s2++); if (*s1==*s2) return 0; else if (*s1>*s2) return 1; else return -1; } int toUpCase(int ch) { if (ch>=97 && ch<=122) return ch-32; else return ch;} void main() {char taglist[10000]={0}; /* cuva tagove visih nivoa - sluzi za proveru tacnosti; oznake tagova su razdovjene 0-om */ char *opTags[opTagNum]={opTag1,opTag2,opTag3}; int brreda=1, /* broj trenutnog reda - omogucava otklon greske */ pok=1, /* index trenutnog mesta u taglist */ indent=-2; /* trenutni pomak - indentation */ char c; for (c=getc(stdin);c!=EOF;c=getc(stdin)) if (c=='<') { c=getc(stdin); if (c=='/') /* ako se tag zatvara */ { int i, oldpok=pok-1; /*izdvoj oznaku taga */ for (c=getc(stdin);c!=' '&& c!='>'&& c!=10 && c!=13&& c!=EOF; taglist[pok++]=toUpCase(c), c=getc(stdin)); /*dodji do kraja taga; usput broj redove */ for (;c!='>'&&c!=EOF;(c=='\n')?(brreda++):1,c=(getc(stdin))); if (c==EOF||oldpok==0) { printf(" Pogresno oznacena etiketa u %d.om redu!",brreda);return; } taglist[pok]=0; /*uporedi sa predhodnim */ for (i=-1;taglist[pok+i]==taglist[oldpok+i]&&taglist[pok+i];i--); if (taglist[pok+i]!=taglist[oldpok+i]) {printf(" Neocekivana etiketa u %d.om redu",brreda);return;} printf("%*s",indent+2,"\n",&taglist[oldpok+1]); indent-=2; pok=oldpok+i+1; } else if (c!='!'&& c!=EOF) { int i,oldpok=pok; while (c!=' '&&c!='>'&&c!=10&&c!=13&&c!=EOF) { taglist[pok++]=toUpCase(c), c=getc(stdin);} for (;c!='>'&& c!=EOF;(c=='\n')?(brreda++):1,c=(getc(stdin))); if (c==EOF||pok==oldpok) { printf(" Pogresno oznacena etiketa u %d.om redu!",brreda);return; } taglist[pok++]=0; /*oznaci kraj imena taga */ /*proveri da nije jedan od otvorenih tagova */ for (i=0; i\n",&taglist[oldpok]);} } } /* if c=='<' */ else if (c=='\n') brreda++; /* ako nismo u tagu */ /* ako je ostala neka neuparena etiketa */ if (pok>1) printf(" Etiketa nije zatvorena!"); }