#line 885 "nuweb.w" #include "global.h" #line 1414 "nuweb.w" void pass1(char *file_name) { if (verbose_flag) fprintf(stderr, "reading %s\n", file_name); source_open(file_name); init_scraps(); macro_names = NULL; file_names = NULL; user_names = NULL; /* Scan the source file, looking for at-sequences */ #line 1433 "nuweb.w" { int c = source_get(); while (c != EOF) { if (c == nw_char) /* Scan at-sequence */ #line 1446 "nuweb.w" { char quoted = 0; c = source_get(); switch (c) { case 'r': c = source_get(); nw_char = c; update_delimit_scrap(); break; case 'O': case 'o': #line 1524 "nuweb.w" { Name *name = collect_file_name(); /* returns a pointer to the name entry */ int scrap = collect_scrap(); /* returns an index to the scrap */ /* Add \verb|scrap| to \verb|name|'s definition list */ #line 1543 "nuweb.w" { Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node)); def->scrap = scrap; def->quoted = quoted; def->next = name->defs; name->defs = def; } #line 1527 "nuweb.w" } #line 1457 "nuweb.w" break; case 'Q': case 'q': quoted = 1; case 'D': case 'd': #line 1532 "nuweb.w" { Name *name = collect_macro_name(); int scrap = collect_scrap(); /* Add \verb|scrap| to \verb|name|'s definition list */ #line 1543 "nuweb.w" { Scrap_Node *def = (Scrap_Node *) arena_getmem(sizeof(Scrap_Node)); def->scrap = scrap; def->quoted = quoted; def->next = name->defs; name->defs = def; } #line 1535 "nuweb.w" } #line 1462 "nuweb.w" break; case 's': /* Step to next sector */ #line 1493 "nuweb.w" prev_sector += 1; current_sector = prev_sector; c = source_get(); #line 1465 "nuweb.w" break; case 'S': /* Close the current sector */ #line 1500 "nuweb.w" current_sector = 1; c = source_get(); #line 1468 "nuweb.w" break; case '<': case '(': case '[': case '{': #line 1552 "nuweb.w" { int c; int depth = 1; while ((c = source_get()) != EOF) { if (c == nw_char) /* Skip over at-sign or go to skipped */ #line 1569 "nuweb.w" { c = source_get(); switch (c) { case '{': case '[': case '(': case '<': depth += 1; break; case '}': case ']': case ')': case '>': if (--depth == 0) goto skipped; case 'x': case '|': case ',': case '%': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '_': case 'f': case '#': case '+': case '-': case 'v': case '*': case 'c': case '\'': case 's': break; default: if (c != nw_char) { fprintf(stderr, "%s: unexpected %c%c in text at (%s, %d)\n", command_name, nw_char, c, source_name, source_line); exit(-1); } break; } } #line 1558 "nuweb.w" } fprintf(stderr, "%s: unexpected EOF in text at (%s, %d)\n", command_name, source_name, source_line); exit(-1); skipped: ; } #line 1473 "nuweb.w" break; case 'c': #line 1600 "nuweb.w" { char * p = blockBuff; char * e = blockBuff + (sizeof(blockBuff)/sizeof(blockBuff[0])) - 1; /* Skip whitespace */ #line 1618 "nuweb.w" while (source_peek == ' ' || source_peek == '\t' || source_peek == '\n') (void)source_get(); #line 1604 "nuweb.w" while (p < e) { /* Add one char to the block buffer */ #line 1625 "nuweb.w" int c = source_get(); if (c == nw_char) { /* Add an at character to the block or break */ #line 1643 "nuweb.w" int cc = source_peek; if (cc == 'c') { do c = source_get(); while (c <= ' '); break; } else if (cc == 'd' || cc == 'D' || cc == 'q' || cc == 'Q' || cc == 'o' || cc == 'O' || cc == EOF) { source_ungetc(&c); break; } else { *p++ = c; *p++ = source_get(); } #line 1629 "nuweb.w" } else if (c == EOF) { source_ungetc(&c); break; } else { /* Add any other character to the block */ #line 1672 "nuweb.w" /* Perhaps skip white-space */ #line 1678 "nuweb.w" if (c == ' ') { while (source_peek == ' ') c = source_get(); } if (c == '\n') { if (source_peek == '\n') { do c = source_get(); while (source_peek == '\n'); } else c = ' '; } #line 1673 "nuweb.w" *p++ = c; #line 1638 "nuweb.w" } #line 1607 "nuweb.w" } if (p == e) { /* Skip to the next nw-char */ #line 1697 "nuweb.w" int c; while ((c = source_get()), c != nw_char && c != EOF)/* Skip */ source_ungetc(&c); #line 1611 "nuweb.w" } *p = '\000'; } #line 1475 "nuweb.w" break; case 'x': case 'v': case 'u': case 'm': case 'f': /* ignore during this pass */ break; default: if (c==nw_char) /* ignore during this pass */ break; fprintf(stderr, "%s: unexpected %c sequence ignored (%s, line %d)\n", command_name, nw_char, source_name, source_line); break; } } #line 1437 "nuweb.w" c = source_get(); } } #line 1423 "nuweb.w" if (tex_flag) search(); /* Reverse cross-reference lists */ #line 1802 "nuweb.w" { reverse_lists(file_names); reverse_lists(macro_names); reverse_lists(user_names); } #line 1426 "nuweb.w" }