~mdw
/
sgt
/
halibut
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Comment in template code
[sgt/halibut]
/
input.c
diff --git
a/input.c
b/input.c
index
365fec0
..
493449c
100644
(file)
--- a/
input.c
+++ b/
input.c
@@
-103,6
+103,8
@@
static int get(input *in, filepos *pos, rdstringc *rsc) {
}
else if (in->stack) {
wchar_t c = in->stack->text[in->stack->ptr];
}
else if (in->stack) {
wchar_t c = in->stack->text[in->stack->ptr];
+ if (pos)
+ *pos = in->stack->pos;
if (in->stack->text[++in->stack->ptr] == L'\0') {
macrostack *tmp = in->stack;
in->stack = tmp->next;
if (in->stack->text[++in->stack->ptr] == L'\0') {
macrostack *tmp = in->stack;
in->stack = tmp->next;
@@
-424,6
+426,7
@@
token get_token(input *in) {
c == '#' || c == '{' || c == '}' || c == '.') {
/* single-char command */
rdadd(&rs, c);
c == '#' || c == '{' || c == '}' || c == '.') {
/* single-char command */
rdadd(&rs, c);
+ prevpos = rsc.pos;
} else if (c == 'u') {
int len = 0;
do {
} else if (c == 'u') {
int len = 0;
do {
@@
-589,11
+592,11
@@
static paragraph *addpara(paragraph newpara, paragraph ***hptrptr) {
/*
* Reads a single file (ie until get() returns EOF)
*/
/*
* 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;
token t;
paragraph par;
word wd, **whptr, **idximplicit;
- tree234 *macros;
wchar_t utext[2], *wdtext;
int style, spcstyle;
int already;
wchar_t utext[2], *wdtext;
int style, spcstyle;
int already;
@@
-629,7
+632,6
@@
static void read_file(paragraph ***ret, input *in, indexdata *idx) {
t.text = NULL;
t.origtext = NULL;
t.text = NULL;
t.origtext = NULL;
- macros = newtree234(macrocmp);
already = FALSE;
crossparastk = stk_new();
already = FALSE;
crossparastk = stk_new();
@@
-806,6
+808,11
@@
static void read_file(paragraph ***ret, input *in, indexdata *idx) {
continue;
}
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.
/*
* This token begins a paragraph. See if it's one of the
* special commands that define a paragraph type.
@@
-1540,7
+1547,6
@@
static void read_file(paragraph ***ret, input *in, indexdata *idx) {
* this cleanup doesn't happen.
*/
dtor(t);
* this cleanup doesn't happen.
*/
dtor(t);
- macrocleanup(macros);
stk_free(crossparastk);
}
stk_free(crossparastk);
}
@@
-1548,6
+1554,9
@@
static void read_file(paragraph ***ret, input *in, indexdata *idx) {
paragraph *read_input(input *in, indexdata *idx) {
paragraph *head = NULL;
paragraph **hptr = &head;
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");
while (in->currindex < in->nfiles) {
in->currfp = fopen(in->filenames[in->currindex], "r");
@@
-1557,10
+1566,12
@@
paragraph *read_input(input *in, indexdata *idx) {
in->csstate = charset_init_state;
in->wcpos = in->nwc = 0;
in->pushback_chars = NULL;
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++;
}
}
in->currindex++;
}
+ macrocleanup(macros);
+
return head;
}
return head;
}