source: proto/parabix2/src/xml_error.c @ 1445

Last change on this file since 1445 was 1445, checked in by ksherdy, 8 years ago

Modularize pablo_template.cpp.

File size: 4.3 KB
Line 
1/*  xml_error.c - Error reporting for XML parsing/validation.
2    Copyright (c) 2008, Robert D. Cameron and Dan Lin.
3    Licensed to the public under the Open Software License 3.0.
4    Licensed to International Characters, Inc., under the Academic
5    Free License 3.0.
6*/
7
8#include "xml_error.h"
9#include <stdio.h>
10#include <stdlib.h>
11
12const char * XML_Constraint_Strings[] = {
13                "wfc-PEinInternalSubset",
14                "ExtSubset",
15                "PE-between-Decls",
16                "GIMatch",
17                "uniqattspec",
18                "NoExternalRefs",
19                "CleanAttrVals",
20                "wf-Legalchar",
21                "wf-entdeclared",
22                "textent",
23                "norecursion",
24                "indtd",
25                "vc-roottype",
26                "vc-PEinMarkupDecl",
27                "vc-check-rmd",
28                "elementvalid",
29                "ValueType",
30                "EDUnique",
31                "vc-PEinGroup",
32                "vc-MixedChildrenUnique",
33                "id",
34                "one-id-per-el",
35                "id-default",
36                "idref",
37                "entname",
38                "nmtok",
39                "notatn",
40                "OneNotationPer",
41                "NoNotationEmpty",
42                "NoDuplicateTokens",
43                "enum",
44                "RequiredAttr",
45                "defattrvalid",
46                "FixedAttr",
47                "condsec-nesting",
48                "vc-entdeclared",
49                "not-declared",
50                "UniqueNotationName"};
51
52const char * XML_NonTerminal_Names[] = {
53                "document  [1]",
54                "Char  [2]",
55                "S  [3]",
56                "NameChar  [4]",
57                "Name  [5]",
58                "Names  [6]",
59                "Nmtoken  [7]",
60                "Nmtokens  [8]",
61                "EntityValue  [9]",
62                "AttValue  [10]",
63                "SystemLiteral  [11]",
64                "PubidLiteral  [12]",
65                "PubidChar  [13]",
66                "CharData  [14]",
67                "Comment  [15]",
68                "PI  [16]",
69                "PITarget  [17]",
70                "CDSect  [18]",
71                "CDStart  [19]",
72                "CData  [20]",
73                "CDEnd  [21]",
74                "prolog  [22]",
75                "XMLDecl  [23]",
76                "VersionInfo  [24]",
77                "Eq  [25]",
78                "VersionNum  [26]",
79                "Misc  [27]",
80                "doctypedecl  [28]",
81                "DeclSep  [28a]",
82                "intSubset  [28b]",
83                "markupdecl  [29]",
84                "extSubset  [30]",
85                "extSubsetDecl  [31]",
86                "SDDecl  [32]",
87                "element  [39]",
88                "STag  [40]",
89                "Attribute  [41]",
90                "ETag  [42]",
91                "content  [43]",
92                "EmptyElemTag  [44]",
93                "elementdecl  [45]",
94                "contentspec  [46]",
95                "children  [47]",
96                "cp  [48]",
97                "choice  [49]",
98                "seq  [50]",
99                "Mixed  [51]",
100                "AttlistDecl  [52]",
101                "AttDef  [53]",
102                "AttType  [54]",
103                "StringType  [55]",
104                "TokenizedType  [56]",
105                "EnumeratedType  [57]",
106                "NotationType  [58]",
107                "Enumeration  [59]",
108                "DefaultDecl  [60]",
109                "conditionalSect  [61]",
110                "includeSect  [62]",
111                "ignoreSect  [63]",
112                "ignoreSectContents  [64]",
113                "Ignore  [65]",
114                "CharRef  [66]",
115                "Reference  [67]",
116                "EntityRef  [68]",
117                "PEReference  [69]",
118                "EntityDecl  [70]",
119                "GEDecl  [71]",
120                "PEDecl  [72]",
121                "EntityDef  [73]",
122                "PEDef  [74]",
123                "ExternalID  [75]",
124                "NDataDecl  [76]",
125                "TextDecl  [77]",
126                "extParsedEnt  [78]",
127                "EncodingDecl  [80]",
128                "EncName  [81]",
129                "NotationDecl  [82]",
130                "PublicID  [83]",
131                "Letter  [84]",
132                "BaseChar  [85]",
133                "Ideographic  [86]",
134                "CombiningChar  [87]",
135                "Digit  [88]",
136                "Extender  [89]"};
137
138
139void ShowConstraintError(enum XML_Constraint errCode) {
140        if (errCode < vErr_vc_roottype) {
141                fprintf(stderr, "Violation of well-formedness constraint: %s\n", XML_Constraint_Strings[errCode]);
142                exit(-1);
143        }
144        else {
145                fprintf(stderr, "Violation of validity constraint: %s\n", XML_Constraint_Strings[errCode]);
146                exit(-1);
147        }
148}
149
150void ShowSyntaxError(enum XML_NonTerminal errCode) {
151        fprintf(stderr, "Syntax error in production: %s\n", XML_NonTerminal_Names[errCode]);
152}
153
154
155void NoEncodingError(char * msg) {
156        fprintf(stderr, "Error : %s\n", msg);
157        exit(-1);
158}
159
160void EncodingError(char * msg, unsigned char * encoding, int lgth) {
161        fprintf(stderr, "Error : Illegal/unsupported %s encoding of length %i: \"", msg, lgth);
162        for (int i = 0; i < lgth; i++) fprintf(stderr, "%c", encoding[i]);
163        fprintf(stderr, "\"\n"); 
164        exit(-1);
165}
166
167void CharSetValidationError(char * encoding, int err_pos) {
168        fprintf(stderr, "Error: Invalid %s character in input stream at position %i\n", encoding, err_pos);
169        exit(-1);
170}
171
172void XMLCharacterError(int err_pos) {
173        fprintf(stderr, "Illegal control character in XML input stream at position %i\n", err_pos);
174        exit(-1);
175}
176
177void IncompleteCodeUnitError() {
178        fprintf(stderr, "Error: Incomplete code unit at end of file.\n");
179        exit(-1);
180}
181
182void DeclarationError(int pos) {
183        fprintf(stderr, "Parsing error at position %i in XML or Text declaration.\n", pos);
184        exit(-1);
185}
186
187void ImplementationLimitError(char * msg) {
188        fprintf(stderr, "Fatal implementation limit - %s\n", msg);
189        exit(-1);
190}
191
192void ContentModelError() {
193        fprintf(stderr, "Error: nondeterminism in content model.\n");
194        exit(-1);
195}
196
Note: See TracBrowser for help on using the repository browser.