/* 12. zadatak - Nikola Trajkovic, 232/2000 */
#include <stdio.h>

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 , "<kbd>", i)) i+=4;
   else if (strcomp(line , "</kbd>", i)) i+=5;
   else if (strcomp(line , "<address>", i)) i+=8;
   else if (strcomp(line , "</address>", i)) i+=9;
   else if (strcomp(line , "<em>", i)) i+=3;
   else if (strcomp(line , "</em>", i)) i+=4;
   else if (strcomp(line , "<var>", i)) i+=4;
   else if (strcomp(line , "</var>", i)) i+=5;
   else if (strcomp(line , "<strong>", i)) i+=7;
   else if (strcomp(line , "</strong>", 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 , "&hellip;", i))
    {
     for(k=0 ; k<3 ; k++) out[j++]='.';
     i+=7;
    }
   else if (strcomp(line , "&mdash;", 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 <BODY> se u izlaznu liniju pored same etikete*/
   /* kopiraju i atributi komandne linije koje se nalaze u promenljivoj at */

   else if (strcomp(line, "<BODY", i))
    {
     for (k=0 ; k<5 ; k++) out[j++]=line[i+k];
     out[j++]=' ';
     for(k=0 ; at[k] ; k++) out[j++]=at[k];
     out[j++]='>';
     i+=5;
    }

   /* ako nije pronadjena nijedna etiketa koja treba da se ukloni */
   /* onda se znak kopira u izlaznu liniju */

   else out[j++]=line[i];
  out[j]='\0';
  puts(out);
 }
}

/* funkcija strcomp proverava da li se u stringu s1 */
/* na poziciji i nalazi string s2 i ako je tako */
/* vraca 1 u suprotnom 0 */

int strcomp(char s1[], char s2[], int i)
{
 int j,p=1;
 char a,b;

 for (j=0 ; s2[j] && p ; i++, j++)
 {
  /* ako je znak malo slovo onda se umanjuje za razliku 'a'-'A' */
  /* tako da se u promenljivoj a cuva uvek veliko slovo */
  /* ako znak nije slovo onda se on ne menja */
  if (s1[i]>='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);
}