Release 0.2, 80% rewrite, nothing left intact ... Daniel
diff --git a/error.c b/error.c
new file mode 100644
index 0000000..4c4bac5
--- /dev/null
+++ b/error.c
@@ -0,0 +1,93 @@
+/*
+ * error.c: module displaying errors
+ */
+
+#include <stdio.h>
+#include <stdarg.h>
+#include "parser.h"
+
+/*
+ * Display and format error messages.
+ */
+void xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...) {
+ const CHAR *cur, *base;
+ va_list args;
+ int n;
+
+ va_start(args, msg);
+ if (ctxt->input->filename)
+ fprintf(stderr, "%s:%d: ", ctxt->input->filename,
+ ctxt->input->line);
+ else
+ fprintf(stderr, "line %d: ", ctxt->input->line);
+
+ fprintf(stderr, "error: ");
+ vfprintf(stderr, msg, args);
+ va_end(ap);
+ cur = ctxt->input->cur;
+ base = ctxt->input->base;
+ while ((*cur == '\n') || (*cur == '\r')) {
+ cur--;
+ base--;
+ }
+ n = 0;
+ while ((n++ < 60) && (cur >= base) && (*cur != '\n') && (*cur != '\r'))
+ cur--;
+ if ((*cur == '\n') || (*cur == '\r')) cur++;
+ base = cur;
+ n = 0;
+ while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
+ fprintf(stderr, "%c", (unsigned char) *cur++);
+ n++;
+ }
+ fprintf(stderr, "\n");
+ cur = ctxt->input->cur;
+ while ((*cur == '\n') || (*cur == '\r'))
+ cur--;
+ n = 0;
+ while ((cur != base) && (n++ < 60)) {
+ fprintf(stderr, " ");
+ base++;
+ }
+ fprintf(stderr,"^\n");
+}
+
+/*
+ * Display and format error messages.
+ */
+void xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...) {
+ const CHAR *cur, *base;
+ va_list args;
+ int n;
+
+ va_start(args, msg);
+ if (ctxt->input->filename)
+ fprintf(stderr, "%s:%d: ", ctxt->input->filename,
+ ctxt->input->line);
+ else
+ fprintf(stderr, "line %d: ", ctxt->input->line);
+
+ fprintf(stderr, "warning: ");
+ vfprintf(stderr, msg, args);
+ va_end(ap);
+ cur = ctxt->input->cur;
+ base = ctxt->input->base;
+ n = 0;
+ while ((n++ < 60) && (cur >= base) && (*cur != '\n') && (*cur != '\r'))
+ cur--;
+ if ((*cur != '\n') || (*cur != '\r')) cur++;
+ base = cur;
+ n = 0;
+ while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
+ fprintf(stderr, "%c", (unsigned char) *cur++);
+ n++;
+ }
+ fprintf(stderr, "\n");
+ cur = ctxt->input->cur;
+ n = 0;
+ while ((cur != base) && (n++ < 60)) {
+ fprintf(stderr, " ");
+ base++;
+ }
+ fprintf(stderr,"^\n");
+}