Annotation of XML/error.c, revision 1.8

1.1       daniel      1: /*
1.8     ! daniel      2:  * error.c: module displaying/handling XML parser errors
        !             3:  *
        !             4:  * Daniel Veillard <Daniel.Veillard@w3.org>
1.1       daniel      5:  */
                      6: 
                      7: #include <stdio.h>
                      8: #include <stdarg.h>
                      9: #include "parser.h"
                     10: 
1.8     ! daniel     11: /**
        !            12:  * xmlParserError:
        !            13:  * @ctxt:  an XML parser context
        !            14:  * @msg:  the message to display/transmit
        !            15:  * @...:  extra parameters for the message display
        !            16:  * 
        !            17:  * Display and format an error messages, gives file, line, position and
        !            18:  * extra parameters.
1.1       daniel     19:  */
1.8     ! daniel     20: void
        !            21: xmlParserError(xmlParserCtxtPtr ctxt, const char *msg, ...)
        !            22: {
1.1       daniel     23:     const CHAR *cur, *base;
                     24:     va_list args;
                     25:     int n;
                     26: 
                     27:     va_start(args, msg);
1.4       daniel     28:     if (ctxt->input->filename)
                     29:         fprintf(stderr, "%s:%d: ", ctxt->input->filename,
                     30:                ctxt->input->line);
                     31:     else
                     32:         fprintf(stderr, "line %d: ", ctxt->input->line);
                     33:         
1.1       daniel     34:     fprintf(stderr, "error: ");
                     35:     vfprintf(stderr, msg, args);
                     36:     va_end(ap);
1.3       daniel     37:     cur = ctxt->input->cur;
                     38:     base = ctxt->input->base;
1.7       daniel     39:     while ((*cur == '\n') || (*cur == '\r')) {
                     40:        cur--;
                     41:        base--;
                     42:     }
1.2       daniel     43:     n = 0;
                     44:     while ((n++ < 60) && (cur >= base) && (*cur != '\n') && (*cur != '\r'))
                     45:         cur--;
1.7       daniel     46:     if ((*cur == '\n') || (*cur == '\r')) cur++;
1.1       daniel     47:     base = cur;
1.2       daniel     48:     n = 0;
1.1       daniel     49:     while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
                     50:         fprintf(stderr, "%c", (unsigned char) *cur++);
                     51:        n++;
                     52:     }
                     53:     fprintf(stderr, "\n");
1.3       daniel     54:     cur = ctxt->input->cur;
1.7       daniel     55:     while ((*cur == '\n') || (*cur == '\r'))
                     56:        cur--;
1.5       daniel     57:     n = 0;
                     58:     while ((cur != base) && (n++ < 60)) {
1.1       daniel     59:         fprintf(stderr, " ");
                     60:         base++;
                     61:     }
                     62:     fprintf(stderr,"^\n");
                     63: }
1.6       daniel     64: 
1.8     ! daniel     65: /**
        !            66:  * xmlParserWarning:
        !            67:  * @ctxt:  an XML parser context
        !            68:  * @msg:  the message to display/transmit
        !            69:  * @...:  extra parameters for the message display
        !            70:  * 
        !            71:  * Display and format a warning messages, gives file, line, position and
        !            72:  * extra parameters.
1.6       daniel     73:  */
1.8     ! daniel     74: void
        !            75: xmlParserWarning(xmlParserCtxtPtr ctxt, const char *msg, ...)
        !            76: {
1.6       daniel     77:     const CHAR *cur, *base;
                     78:     va_list args;
                     79:     int n;
                     80: 
                     81:     va_start(args, msg);
                     82:     if (ctxt->input->filename)
                     83:         fprintf(stderr, "%s:%d: ", ctxt->input->filename,
                     84:                ctxt->input->line);
                     85:     else
                     86:         fprintf(stderr, "line %d: ", ctxt->input->line);
                     87:         
                     88:     fprintf(stderr, "warning: ");
                     89:     vfprintf(stderr, msg, args);
                     90:     va_end(ap);
                     91:     cur = ctxt->input->cur;
                     92:     base = ctxt->input->base;
                     93:     n = 0;
                     94:     while ((n++ < 60) && (cur >= base) && (*cur != '\n') && (*cur != '\r'))
                     95:         cur--;
                     96:     if ((*cur != '\n') || (*cur != '\r')) cur++;
                     97:     base = cur;
                     98:     n = 0;
                     99:     while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
                    100:         fprintf(stderr, "%c", (unsigned char) *cur++);
                    101:        n++;
                    102:     }
                    103:     fprintf(stderr, "\n");
                    104:     cur = ctxt->input->cur;
                    105:     n = 0;
                    106:     while ((cur != base) && (n++ < 60)) {
                    107:         fprintf(stderr, " ");
                    108:         base++;
                    109:     }
                    110:     fprintf(stderr,"^\n");
                    111: }
1.8     ! daniel    112: 

Webmaster