Memory leak hunting, export more interfaces, updated the doc, Daniel.
diff --git a/error.c b/error.c
index 3a479ea..a00c2a4 100644
--- a/error.c
+++ b/error.c
@@ -40,10 +40,9 @@
     base = ctxt->input->base;
     while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
 	cur--;
-	base--;
     }
     n = 0;
-    while ((n++ < 60) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
+    while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
         cur--;
     if ((*cur == '\n') || (*cur == '\r')) cur++;
     base = cur;
@@ -57,7 +56,7 @@
     while ((*cur == '\n') || (*cur == '\r'))
 	cur--;
     n = 0;
-    while ((cur != base) && (n++ < 60)) {
+    while ((cur != base) && (n++ < 80)) {
         fprintf(stderr, " ");
         base++;
     }
@@ -92,10 +91,13 @@
     va_end(ap);
     cur = ctxt->input->cur;
     base = ctxt->input->base;
+    while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
+	cur--;
+    }
     n = 0;
-    while ((n++ < 60) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
+    while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
         cur--;
-    if ((*cur != '\n') || (*cur != '\r')) cur++;
+    if ((*cur == '\n') || (*cur == '\r')) cur++;
     base = cur;
     n = 0;
     while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
@@ -104,8 +106,10 @@
     }
     fprintf(stderr, "\n");
     cur = ctxt->input->cur;
+    while ((*cur == '\n') || (*cur == '\r'))
+	cur--;
     n = 0;
-    while ((cur != base) && (n++ < 60)) {
+    while ((cur != base) && (n++ < 80)) {
         fprintf(stderr, " ");
         base++;
     }