/* 12. zadatak - Nikola Trajkovic, 232/2000 */ #include int strcomp(char s1[], char s2[], int i); main(int argc, char *argv[]) { char line[150], out[150], at[100]=""; char txt[5][10]={"BGCOLOR", "TEXT", "LINK", "ALINK", "VLINK"}; int i,j,k; /* ako postoji vise od 5 argumenata, ostali se ignorisu */ if (argc>6) argc=6; /* u promenljivu at se postavljaju atributi iz komandne */ /* linije zajedno sa odgovarajucim tekstom */ for(i=1, j=0, --argc ; i<=argc ; i++) { for(k=0 ; txt[i-1][k] ; k++) at[j++]=txt[i-1][k]; /* kopiranje odgovarajuceg teksta iz niza stringova txt */ at[j++]='='; at[j++]='"'; for(k=0 ; argv[i][k] ; k++) at[j++]=argv[i][k]; /* kopiranje odgovarajuceg atributa iz komandne linije */ at[j++]='"'; at[j++]=' '; } at[--j]='\0'; while (gets(line)!=NULL) { for(i=0,j=0 ; line[i] ; i++) /* ako se u ulaznoj liniji nadje etiketa koja treba da se */ /* izbaci onda se ona ne kopira u izlaznu liniju, vec se */ /* preskace tako sto se promeljiva i uveca za duzinu etikete */ if (strcomp(line, "[S]", i)) i+=2; else if (strcomp(line , "[/S]", i)) i+=3; else if (strcomp(line , "", i)) i+=4; else if (strcomp(line , "", i)) i+=5; else if (strcomp(line , "
", i)) i+=8; else if (strcomp(line , "
", i)) i+=9; else if (strcomp(line , "", i)) i+=3; else if (strcomp(line , "", i)) i+=4; else if (strcomp(line , "", i)) i+=4; else if (strcomp(line , "", i)) i+=5; else if (strcomp(line , "", i)) i+=7; else if (strcomp(line , "", i)) i+=8; /* etikete koje treba ne samo izbaciti nego i zamenti */ /* nekim znakom (nizom znakova) se preskacu na isti nacin */ /* kao i predhodne samo ste se u izlaznoj liniji postave */ /* znaci koji menjaju etiketu */ else if (strcomp(line , "…", i)) { for(k=0 ; k<3 ; k++) out[j++]='.'; i+=7; } else if (strcomp(line , "—", i)) { for(k=0 ; k<2 ; k++) out[j++]='-'; i+=6; } else if (strcomp(line , "[QU]", i)) { out[j++]='"'; i+=3; } else if (strcomp(line , "[SQ]", i)) { out[j++]='\''; i+=3; } else if (line[i]=='[') for( ; line[i]!=']' ; i++); /* kod etikete se u izlaznu liniju pored same etikete*/ /* kopiraju i atributi komandne linije koje se nalaze u promenljivoj at */ else if (strcomp(line, "='a' && s1[i]<='z') a=s1[i]-('a'-'A'); else a=s1[i]; /* ekivalentno kao gore */ if (s2[j]>='a' && s2[j]<='z') b=s2[j]-('a'-'A'); else b=s2[j]; p=(a==b); } /* ako je posle prolaska kroz petlju "logicka" promenljiva p */ /* jednaka 1 onda je uslov ispunjen i f-ja vraca 1 u suprotnom 0 */ if (p) return (1); else return (0); }