#include #include #include #define DBG(x) FILE *input; int kase=0; char a,last=-1; char tag[4]; char buffer[4]; int bufpointer=0; int bufcount=0; char wordbuffer[81]; int wordpointer=0; /* int wordcount=0; */ int charcount=0; int myfgetc(FILE *in){ int i; if(bufcount){ bufcount--; return buffer[bufpointer=(bufpointer+3)%4]; } else return fgetc(in); } void myfungetc(char a){ bufcount++; buffer[bufpointer++]=a; bufpointer%=4; } void write_last_word(){ if(charcount+wordpointer>80){ printf("\n"); charcount=0; write_last_word(); return; } wordbuffer[wordpointer]='\0'; printf("%s",wordbuffer); charcount+=wordpointer; wordpointer=0; } int max(int a,int b){ return a>b?a:b; } int read_case(){ a=myfgetc(input); if(a==EOF) return 0; return 1; } void print_char(char a){ if(a=='\n'){ write_last_word(); if(last!=' '&&last!='\n'){ /* printf(" "); */ charcount++; } last='\n'; return; } if(a==' '){ write_last_word(); if(last==' '||last=='\n') return; else{ last=' '; /* printf(" "); */ /* charcount++; */ return; } } last=a; wordbuffer[wordpointer++]=a; } void read_tag(){ int i; tag[0]='<'; for(i=1;i<4;i++) tag[i]=myfgetc(input); tag[4]='\0'; if(!strcmp(tag,"
")){ printf("\n"); last='\n'; charcount=0; return; } else if(!strcmp(tag,"
")){ if(last!='\n') printf("\n"); printf("----------------------------------------" "----------------------------------------\n"); last='\n'; charcount=0; return; } else{ printf("<"); for(i=3;i>0;i--) myfungetc(tag[i]); } } void solve_case(){ switch(a){ case('<'): read_tag(); break; default: print_char(a); } } int main(){ input=fopen("html.in","r"); assert(input!=NULL); while(read_case()) solve_case(); printf("\n"); fclose(input); return 0; }