=================================================================== RCS file: /cvs/texi2mdoc/util.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -p -r1.14 -r1.15 --- texi2mdoc/util.c 2015/02/25 14:37:17 1.14 +++ texi2mdoc/util.c 2015/02/25 14:49:14 1.15 @@ -1,4 +1,4 @@ -/* $Id: util.c,v 1.14 2015/02/25 14:37:17 kristaps Exp $ */ +/* $Id: util.c,v 1.15 2015/02/25 14:49:14 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -122,12 +122,19 @@ texiabort(struct texi *p, const char *errstring) void texiwarn(const struct texi *p, const char *fmt, ...) { - va_list ap; + va_list ap; + const struct texifile *f; - fprintf(stderr, "%s:%zu:%zu: warning: ", - p->files[p->filepos - 1].name, - p->files[p->filepos - 1].line + 1, - p->files[p->filepos - 1].col + 1); + f = &p->files[p->filepos - 1]; + + if (f->insplice) + fprintf(stderr, "%s:%zu:%zu (%zuB left in splice): " + "warning: ", f->name, f->line + 1, + f->col + 1, f->insplice); + else + fprintf(stderr, "%s:%zu:%zu: warning: ", + f->name, f->line + 1, f->col + 1); + va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); @@ -141,12 +148,19 @@ texiwarn(const struct texi *p, const char *fmt, ...) void texierr(struct texi *p, const char *fmt, ...) { - va_list ap; + va_list ap; + struct texifile *f; - fprintf(stderr, "%s:%zu:%zu: error: ", - p->files[p->filepos - 1].name, - p->files[p->filepos - 1].line + 1, - p->files[p->filepos - 1].col + 1); + f = &p->files[p->filepos - 1]; + + if (f->insplice) + fprintf(stderr, "%s:%zu:%zu: (%zuB left in splice): " + "error: ", f->name, f->line + 1, + f->col + 1, f->insplice); + else + fprintf(stderr, "%s:%zu:%zu: error: ", + f->name, f->line + 1, f->col + 1); + va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); @@ -306,12 +320,18 @@ texivspace(struct texi *p) void advance(struct texi *p, size_t *pos) { + struct texifile *f; - if ('\n' == BUF(p)[*pos]) { - p->files[p->filepos - 1].line++; - p->files[p->filepos - 1].col = 0; + f = &p->files[p->filepos - 1]; + + if (0 == f->insplice) { + if ('\n' == BUF(p)[*pos]) { + f->line++; + f->col = 0; + } else + f->col++; } else - p->files[p->filepos - 1].col++; + --f->insplice; (*pos)++; } @@ -871,6 +891,7 @@ texisplice(struct texi *p, const char *buf, size_t sz, f->map = cp; } + f->insplice += sz; memmove(f->map + *pos + sz, f->map + *pos, f->mapsz - *pos); memcpy(f->map + *pos, buf, sz); f->mapsz += sz;