#include char *stop[] = {"style", "tdstyle", "trstyle", "url", "page", "image", "rightimage", "rightthumb", "thumb"}; #define nstop (sizeof(stop)/sizeof(stop[0])) int level = 0; int suppresslevel = 0; int firstword = 1; char word[4096], *w; static inline void process_word() { if(firstword && !suppresslevel) { int i; for(i=0; i < nstop; i++) { if(strcmp(word, stop[i]) == 0) { suppresslevel = level; break; } } } if(!firstword && !suppresslevel && w != word) { puts(word); } firstword = 0; memset(word, 0, sizeof(word)); w = word; } int main(int argc, char **argv) { int c; FILE *f; if(argc > 1) f = fopen(argv[1], "r"); else f = stdin; w = word; while((c = getc(f)) != EOF) { if(c == '\\') { c = getc(f); } else if(c == '[') { process_word(); level ++; firstword = 1; } else if(c == ']') { process_word(); if(level == suppresslevel) suppresslevel = 0; if(level) level --; } else if(isspace(c)) { process_word(); } else { if(w-word < sizeof(word) - 1) { *w++ = c; } } } return 0; }