diff options
| -rw-r--r-- | error.c | 5 | ||||
| -rw-r--r-- | halibut.h | 1 | ||||
| -rw-r--r-- | input.c | 14 |
3 files changed, 19 insertions, 1 deletions
@@ -278,6 +278,11 @@ static void do_error(int code, va_list ap) { flags = FILEPOS; sfree(sp); break; + case err_emptypara: + fpos = *va_arg(ap, filepos *); + sprintf(error, "found no text in paragraph"); + flags = FILEPOS; + break; case err_whatever: sp = va_arg(ap, char *); vsprintf(error, sp, ap); @@ -244,6 +244,7 @@ enum { err_text_codeline, /* \c line too long in text backend */ err_htmlver, /* unrecognised HTML version keyword */ err_charset, /* unrecognised character set name */ + err_emptypara, /* paragraph contains no actual text */ err_whatever /* random error of another type */ }; @@ -1529,7 +1529,19 @@ static void read_file(paragraph ***ret, input *in, indexdata *idx, } stk_free(parsestk); prev_para_type = par.type; - addpara(par, ret); + /* + * Before we add the paragraph to the output list, we + * should check that there was any text in it at all; there + * might not be if (for example) the paragraph contained + * nothing but an unrecognised command sequence, and if we + * put an empty paragraph on the list it may confuse the + * back ends later on. + */ + if (par.words) { + addpara(par, ret); + } else { + error(err_emptypara, &par.fpos); + } if (t.type == tok_eof) already = TRUE; } |