diff options
| author | Simon Tatham <anakin@pobox.com> | 2004-11-17 18:11:12 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2004-11-17 18:11:12 +0000 |
| commit | 310cf5b5cbbe492a67a0a54fbf0b985db455b92c (patch) | |
| tree | bb895c7409b2fc9a0afaed97269af9dffc5879dc | |
| parent | 765f04a95ddec81a89734749071cc41a0f784e21 (diff) | |
| download | halibut-310cf5b5cbbe492a67a0a54fbf0b985db455b92c.zip halibut-310cf5b5cbbe492a67a0a54fbf0b985db455b92c.tar.gz halibut-310cf5b5cbbe492a67a0a54fbf0b985db455b92c.tar.bz2 halibut-310cf5b5cbbe492a67a0a54fbf0b985db455b92c.tar.xz | |
Allow macros to work (a) at the very start of a paragraph, and (b)
across files (defining a macro in one source file and invoking it in
a later one).
[originally from svn r4803]
| -rw-r--r-- | input.c | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -591,11 +591,11 @@ static paragraph *addpara(paragraph newpara, paragraph ***hptrptr) { /* * Reads a single file (ie until get() returns EOF) */ -static void read_file(paragraph ***ret, input *in, indexdata *idx) { +static void read_file(paragraph ***ret, input *in, indexdata *idx, + tree234 *macros) { token t; paragraph par; word wd, **whptr, **idximplicit; - tree234 *macros; wchar_t utext[2], *wdtext; int style, spcstyle; int already; @@ -631,7 +631,6 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx) { t.text = NULL; t.origtext = NULL; - macros = newtree234(macrocmp); already = FALSE; crossparastk = stk_new(); @@ -808,6 +807,11 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx) { continue; } + while (t.type == tok_cmd && + macrolookup(macros, in, t.text, &t.pos)) { + dtor(t), t = get_token(in); + } + /* * This token begins a paragraph. See if it's one of the * special commands that define a paragraph type. @@ -1542,7 +1546,6 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx) { * this cleanup doesn't happen. */ dtor(t); - macrocleanup(macros); stk_free(crossparastk); } @@ -1550,6 +1553,9 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx) { paragraph *read_input(input *in, indexdata *idx) { paragraph *head = NULL; paragraph **hptr = &head; + tree234 *macros; + + macros = newtree234(macrocmp); while (in->currindex < in->nfiles) { in->currfp = fopen(in->filenames[in->currindex], "r"); @@ -1559,10 +1565,12 @@ paragraph *read_input(input *in, indexdata *idx) { in->csstate = charset_init_state; in->wcpos = in->nwc = 0; in->pushback_chars = NULL; - read_file(&hptr, in, idx); + read_file(&hptr, in, idx, macros); } in->currindex++; } + macrocleanup(macros); + return head; } |