static void do_paragraph(deark *c, lctx *d, struct para_info *pinfo) { if(pinfo->papflags&0x10) { de_dbg(c, "picture at %d, len=%d", (int)pinfo->thisparapos, (int)pinfo->thisparalen); de_dbg_indent(c, 1); do_picture(c, d, pinfo); de_dbg_indent(c, -1); } else { de_dbg(c, "text paragraph at %d, len=%d", (int)pinfo->thisparapos, (int)pinfo->thisparalen); do_text_paragraph(c, d, pinfo); } }
int main(int argc, char *argv[]) { const char *usage = "usage: test_pictures path_prefix\n"; if(argc > 1 && 0 == strcmp(argv[1], "-h")) { puts(usage); return 0; } if(argc != 2) { fputs(usage, stderr); return 255; } return do_picture(argv[1])? 0 : 1; }
void do_file(const char *filename) { FILE *fp; if (strcmp(filename, "-") == 0) fp = stdin; else { errno = 0; fp = fopen(filename, "r"); if (fp == 0) { delete out; fatal("can't open `%1': %2", filename, strerror(errno)); } } out->set_location(filename, 1); current_filename = filename; current_lineno = 1; enum { START, MIDDLE, HAD_DOT, HAD_P, HAD_PS, HAD_l, HAD_lf } state = START; for (;;) { int c = getc(fp); if (c == EOF) break; switch (state) { case START: if (c == '.') state = HAD_DOT; else { putchar(c); if (c == '\n') { current_lineno++; state = START; } else state = MIDDLE; } break; case MIDDLE: putchar(c); if (c == '\n') { current_lineno++; state = START; } break; case HAD_DOT: if (c == 'P') state = HAD_P; else if (lf_flag && c == 'l') state = HAD_l; else { putchar('.'); putchar(c); if (c == '\n') { current_lineno++; state = START; } else state = MIDDLE; } break; case HAD_P: if (c == 'S') state = HAD_PS; else { putchar('.'); putchar('P'); putchar(c); if (c == '\n') { current_lineno++; state = START; } else state = MIDDLE; } break; case HAD_PS: if (c == ' ' || c == '\n' || compatible_flag) { ungetc(c, fp); do_picture(fp); state = START; } else { fputs(".PS", stdout); putchar(c); state = MIDDLE; } break; case HAD_l: if (c == 'f') state = HAD_lf; else { putchar('.'); putchar('l'); putchar(c); if (c == '\n') { current_lineno++; state = START; } else state = MIDDLE; } break; case HAD_lf: if (c == ' ' || c == '\n' || compatible_flag) { string line; while (c != EOF) { line += c; if (c == '\n') { current_lineno++; break; } c = getc(fp); } line += '\0'; interpret_lf_args(line.contents()); printf(".lf%s", line.contents()); state = START; } else { fputs(".lf", stdout); putchar(c); state = MIDDLE; } break; default: assert(0); } } switch (state) { case START: break; case MIDDLE: putchar('\n'); break; case HAD_DOT: fputs(".\n", stdout); break; case HAD_P: fputs(".P\n", stdout); break; case HAD_PS: fputs(".PS\n", stdout); break; case HAD_l: fputs(".l\n", stdout); break; case HAD_lf: fputs(".lf\n", stdout); break; } if (fp != stdin) fclose(fp); }