+void err_optnoarg(const char *sp)
+{
+ do_error(NULL, "option `-%s' requires an argument", sp);
+}
+
+void err_nosuchopt(const char *sp)
+{
+ do_error(NULL, "unrecognised option `-%s'", sp);
+}
+
+void err_cmdcharset(const char *sp)
+{
+ do_error(NULL, "character set `%s' not recognised", sp);
+}
+
+void err_futileopt(const char *sp, const char *sp2)
+{
+ do_error(NULL, "warning: option `-%s' has no effect%s", sp, sp2);
+}
+
+void err_noinput(void)
+{
+ do_error(NULL, "no input files");
+}
+
+void err_cantopen(const char *sp)
+{
+ do_error(NULL, "unable to open input file `%s'", sp);
+}
+
+void err_nodata(void)
+{
+ do_error(NULL, "no data in input files");
+}
+
+void err_brokencodepara(const filepos *fpos)
+{
+ do_error(fpos, "every line of a code paragraph should begin `\\c'");
+}
+
+void err_kwunclosed(const filepos *fpos)
+{
+ do_error(fpos, "expected `}' after paragraph keyword");
+}
+
+void err_kwexpected(const filepos *fpos)
+{
+ do_error(fpos, "expected a paragraph keyword");
+}
+
+void err_kwillegal(const filepos *fpos)
+{
+ do_error(fpos, "expected no paragraph keyword");
+}
+
+void err_kwtoomany(const filepos *fpos)
+{
+ do_error(fpos, "expected only one paragraph keyword");
+}
+
+void err_bodyillegal(const filepos *fpos)
+{
+ do_error(fpos, "expected no text after paragraph keyword");
+}
+
+void err_badparatype(const wchar_t *wsp, const filepos *fpos)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "command `%s' unrecognised at start of paragraph", sp);
+ sfree(sp);
+}
+
+void err_badmidcmd(const wchar_t *wsp, const filepos *fpos)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "command `%s' unexpected in mid-paragraph", sp);
+ sfree(sp);
+}
+
+void err_unexbrace(const filepos *fpos)
+{
+ do_error(fpos, "brace character unexpected in mid-paragraph");
+}
+
+void err_explbr(const filepos *fpos)
+{
+ do_error(fpos, "expected `{' after command");
+}
+
+void err_commenteof(const filepos *fpos)
+{
+ do_error(fpos, "end of file unexpected inside `\\#{...}' comment");
+}
+
+void err_kwexprbr(const filepos *fpos)
+{
+ do_error(fpos, "expected `}' after cross-reference");
+}
+
+void err_codequote(const filepos *fpos)
+{
+ do_error(fpos, "unable to nest \\q{...} within \\c{...} or \\cw{...}");
+}
+
+void err_missingrbrace(const filepos *fpos)
+{
+ do_error(fpos, "unclosed braces at end of paragraph");
+}
+
+void err_missingrbrace2(const filepos *fpos)
+{
+ do_error(fpos, "unclosed braces at end of input file");
+}
+
+void err_nestedstyles(const filepos *fpos)
+{
+ do_error(fpos, "unable to nest text styles");
+}
+
+void err_nestedindex(const filepos *fpos)
+{
+ do_error(fpos, "unable to nest index markings");
+}
+
+void err_indexcase(const filepos *fpos, const wchar_t *wsp,
+ const filepos *fpos2, const wchar_t *wsp2)
+{
+ char *sp = utoa_locale_dup(wsp), *sp2 = utoa_locale_dup(wsp2);
+ do_error(fpos, "warning: index tag `%s' used with different "
+ "case (`%s') at %s:%d",
+ sp, sp2, fpos2->filename, fpos2->line);
+ sfree(sp);
+ sfree(sp2);
+}
+
+void err_nosuchkw(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "unable to resolve cross-reference to `%s'", sp);
+ sfree(sp);
+}
+
+void err_multiBR(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "multiple `\\BR' entries given for `%s'", sp);
+ sfree(sp);
+}
+
+void err_nosuchidxtag(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "`\\IM' on unknown index tag `%s'", sp);
+ sfree(sp);
+}
+
+void err_cantopenw(const char *sp)
+{
+ do_error(NULL, "unable to open output file `%s'", sp);
+}
+
+void err_macroexists(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "macro `%s' already defined", sp);
+ sfree(sp);
+}
+
+void err_sectjump(const filepos *fpos)
+{
+ do_error(fpos, "expected higher heading levels before this one");
+}
+
+void err_winhelp_ctxclash(const filepos *fpos, const char *sp, const char *sp2)
+{
+ do_error(fpos, "Windows Help context id `%s' clashes with "
+ "previously defined `%s'", sp, sp2);
+}
+
+void err_multikw(const filepos *fpos, const filepos *fpos2, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "paragraph keyword `%s' already defined at %s:%d",
+ sp, fpos2->filename, fpos2->line);
+ sfree(sp);
+}
+
+void err_misplacedlcont(const filepos *fpos)
+{
+ do_error(fpos, "\\lcont is only expected after a list item");
+}
+
+void err_sectmarkerinblock(const filepos *fpos, const char *sp)
+{
+ do_error(fpos, "section headings are not supported within \\%s", sp);
+}
+
+void err_cfginsufarg(const filepos *fpos, const char *sp, int i)
+{
+ do_error(fpos, "\\cfg{%s} expects at least %d parameter%s",
+ sp, i, (i==1)?"":"s");
+}
+
+void err_infonodechar(const filepos *fpos, char c) /* fpos might be NULL */
+{
+ do_error(fpos, "info output format does not support '%c' in"
+ " node names; removing", c);
+}
+
+void err_text_codeline(const filepos *fpos, int i, int j)
+{
+ do_error(fpos, "warning: code paragraph line is %d chars wide, wider"
+ " than body width %d", i, j);
+}
+
+void err_htmlver(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "unrecognised HTML version keyword `%s'", sp);
+ sfree(sp);
+}
+
+void err_charset(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "character set `%s' not recognised", sp);
+ sfree(sp);
+}
+
+void err_nofont(const filepos *fpos, const wchar_t *wsp)
+{
+ char *sp = utoa_locale_dup(wsp);
+ do_error(fpos, "font `%s' not recognised", sp);
+ sfree(sp);
+}
+
+void err_afmeof(const filepos *fpos)
+{
+ do_error(fpos, "AFM file ended unexpectedly");
+}
+
+void err_afmkey(const filepos *fpos, const char *sp)
+{
+ do_error(fpos, "required AFM key '%s' missing", sp);
+}
+
+void err_afmvers(const filepos *fpos)
+{
+ do_error(fpos, "unsupported AFM version");
+}
+
+void err_afmval(const filepos *fpos, const char *sp, int i)
+{
+ if (i == 1)
+ do_error(fpos, "AFM key '%s' requires a value", sp);
+ else
+ do_error(fpos, "AFM key '%s' requires %d values", sp, i);
+}
+
+void err_pfeof(const filepos *fpos)
+{
+ do_error(fpos, "Type 1 font file ended unexpectedly");
+}
+
+void err_pfhead(const filepos *fpos)
+{
+ do_error(fpos, "Type 1 font file header line invalid");
+}
+
+void err_pfbad(const filepos *fpos)
+{
+ do_error(fpos, "Type 1 font file invalid");
+}
+
+void err_pfnoafm(const filepos *fpos, const char *sp)
+{
+ do_error(fpos, "no metrics available for Type 1 font '%s'", sp);
+}
+
+void err_chmnames(void)
+{
+ do_error(NULL, "only one of html-mshtmlhelp-chm and "
+ "html-mshtmlhelp-hhp found");
+}
+
+void err_sfntnotable(const filepos *fpos, const char *sp)
+{
+ do_error(fpos, "font has no '%s' table", sp);
+}
+
+void err_sfntnopsname(const filepos *fpos)
+{
+ do_error(fpos, "font has no PostScript name");
+}
+
+void err_sfntbadtable(const filepos *fpos, const char *sp)
+{
+ do_error(fpos, "font has an invalid '%s' table", sp);
+}
+
+void err_sfntnounicmap(const filepos *fpos)
+{
+ do_error(fpos, "font has no UCS-2 character map");
+}
+
+void err_sfnttablevers(const filepos *fpos, const char *sp)
+{
+ do_error(fpos, "font has an unsupported '%s' table version", sp);
+}
+
+void err_sfntbadhdr(const filepos *fpos)
+{
+ do_error(fpos, "font has an invalid header");
+}
+
+void err_sfntbadglyph(const filepos *fpos, unsigned wc)
+{
+ do_error(fpos,
+ "warning: character U+%04X references a non-existent glyph",
+ wc);