1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 ******************************************************************************
5 *
6 *   Copyright (C) 1997-2015, International Business Machines
7 *   Corporation and others.  All Rights Reserved.
8 *
9 ******************************************************************************
10 *
11 *  FILE NAME : utypes.c (previously putil.c)
12 *
13 *   Date        Name        Description
14 *   10/07/2004  grhoten     split from putil.c
15 ******************************************************************************
16 */
17 
18 #include "unicode/utypes.h"
19 
20 /* u_errorName() ------------------------------------------------------------ */
21 
22 static const char * const
23 _uErrorInfoName[U_ERROR_WARNING_LIMIT-U_ERROR_WARNING_START]={
24     "U_USING_FALLBACK_WARNING",
25     "U_USING_DEFAULT_WARNING",
26     "U_SAFECLONE_ALLOCATED_WARNING",
27     "U_STATE_OLD_WARNING",
28     "U_STRING_NOT_TERMINATED_WARNING",
29     "U_SORT_KEY_TOO_SHORT_WARNING",
30     "U_AMBIGUOUS_ALIAS_WARNING",
31     "U_DIFFERENT_UCA_VERSION",
32     "U_PLUGIN_CHANGED_LEVEL_WARNING",
33 };
34 
35 static const char * const
36 _uTransErrorName[U_PARSE_ERROR_LIMIT - U_PARSE_ERROR_START]={
37     "U_BAD_VARIABLE_DEFINITION",
38     "U_MALFORMED_RULE",
39     "U_MALFORMED_SET",
40     "U_MALFORMED_SYMBOL_REFERENCE",
41     "U_MALFORMED_UNICODE_ESCAPE",
42     "U_MALFORMED_VARIABLE_DEFINITION",
43     "U_MALFORMED_VARIABLE_REFERENCE",
44     "U_MISMATCHED_SEGMENT_DELIMITERS",
45     "U_MISPLACED_ANCHOR_START",
46     "U_MISPLACED_CURSOR_OFFSET",
47     "U_MISPLACED_QUANTIFIER",
48     "U_MISSING_OPERATOR",
49     "U_MISSING_SEGMENT_CLOSE",
50     "U_MULTIPLE_ANTE_CONTEXTS",
51     "U_MULTIPLE_CURSORS",
52     "U_MULTIPLE_POST_CONTEXTS",
53     "U_TRAILING_BACKSLASH",
54     "U_UNDEFINED_SEGMENT_REFERENCE",
55     "U_UNDEFINED_VARIABLE",
56     "U_UNQUOTED_SPECIAL",
57     "U_UNTERMINATED_QUOTE",
58     "U_RULE_MASK_ERROR",
59     "U_MISPLACED_COMPOUND_FILTER",
60     "U_MULTIPLE_COMPOUND_FILTERS",
61     "U_INVALID_RBT_SYNTAX",
62     "U_INVALID_PROPERTY_PATTERN",
63     "U_MALFORMED_PRAGMA",
64     "U_UNCLOSED_SEGMENT",
65     "U_ILLEGAL_CHAR_IN_SEGMENT",
66     "U_VARIABLE_RANGE_EXHAUSTED",
67     "U_VARIABLE_RANGE_OVERLAP",
68     "U_ILLEGAL_CHARACTER",
69     "U_INTERNAL_TRANSLITERATOR_ERROR",
70     "U_INVALID_ID",
71     "U_INVALID_FUNCTION"
72 };
73 
74 static const char * const
75 _uErrorName[U_STANDARD_ERROR_LIMIT]={
76     "U_ZERO_ERROR",
77 
78     "U_ILLEGAL_ARGUMENT_ERROR",
79     "U_MISSING_RESOURCE_ERROR",
80     "U_INVALID_FORMAT_ERROR",
81     "U_FILE_ACCESS_ERROR",
82     "U_INTERNAL_PROGRAM_ERROR",
83     "U_MESSAGE_PARSE_ERROR",
84     "U_MEMORY_ALLOCATION_ERROR",
85     "U_INDEX_OUTOFBOUNDS_ERROR",
86     "U_PARSE_ERROR",
87     "U_INVALID_CHAR_FOUND",
88     "U_TRUNCATED_CHAR_FOUND",
89     "U_ILLEGAL_CHAR_FOUND",
90     "U_INVALID_TABLE_FORMAT",
91     "U_INVALID_TABLE_FILE",
92     "U_BUFFER_OVERFLOW_ERROR",
93     "U_UNSUPPORTED_ERROR",
94     "U_RESOURCE_TYPE_MISMATCH",
95     "U_ILLEGAL_ESCAPE_SEQUENCE",
96     "U_UNSUPPORTED_ESCAPE_SEQUENCE",
97     "U_NO_SPACE_AVAILABLE",
98     "U_CE_NOT_FOUND_ERROR",
99     "U_PRIMARY_TOO_LONG_ERROR",
100     "U_STATE_TOO_OLD_ERROR",
101     "U_TOO_MANY_ALIASES_ERROR",
102     "U_ENUM_OUT_OF_SYNC_ERROR",
103     "U_INVARIANT_CONVERSION_ERROR",
104     "U_INVALID_STATE_ERROR",
105     "U_COLLATOR_VERSION_MISMATCH",
106     "U_USELESS_COLLATOR_ERROR",
107     "U_NO_WRITE_PERMISSION"
108 };
109 static const char * const
110 _uFmtErrorName[U_FMT_PARSE_ERROR_LIMIT - U_FMT_PARSE_ERROR_START] = {
111     "U_UNEXPECTED_TOKEN",
112     "U_MULTIPLE_DECIMAL_SEPARATORS",
113     "U_MULTIPLE_EXPONENTIAL_SYMBOLS",
114     "U_MALFORMED_EXPONENTIAL_PATTERN",
115     "U_MULTIPLE_PERCENT_SYMBOLS",
116     "U_MULTIPLE_PERMILL_SYMBOLS",
117     "U_MULTIPLE_PAD_SPECIFIERS",
118     "U_PATTERN_SYNTAX_ERROR",
119     "U_ILLEGAL_PAD_POSITION",
120     "U_UNMATCHED_BRACES",
121     "U_UNSUPPORTED_PROPERTY",
122     "U_UNSUPPORTED_ATTRIBUTE",
123     "U_ARGUMENT_TYPE_MISMATCH",
124     "U_DUPLICATE_KEYWORD",
125     "U_UNDEFINED_KEYWORD",
126     "U_DEFAULT_KEYWORD_MISSING",
127     "U_DECIMAL_NUMBER_SYNTAX_ERROR",
128     "U_FORMAT_INEXACT_ERROR",
129     "U_NUMBER_ARG_OUTOFBOUNDS_ERROR",
130     "U_NUMBER_SKELETON_SYNTAX_ERROR",
131 };
132 
133 static const char * const
134 _uBrkErrorName[U_BRK_ERROR_LIMIT - U_BRK_ERROR_START] = {
135     "U_BRK_INTERNAL_ERROR",
136     "U_BRK_HEX_DIGITS_EXPECTED",
137     "U_BRK_SEMICOLON_EXPECTED",
138     "U_BRK_RULE_SYNTAX",
139     "U_BRK_UNCLOSED_SET",
140     "U_BRK_ASSIGN_ERROR",
141     "U_BRK_VARIABLE_REDFINITION",
142     "U_BRK_MISMATCHED_PAREN",
143     "U_BRK_NEW_LINE_IN_QUOTED_STRING",
144     "U_BRK_UNDEFINED_VARIABLE",
145     "U_BRK_INIT_ERROR",
146     "U_BRK_RULE_EMPTY_SET",
147     "U_BRK_UNRECOGNIZED_OPTION",
148     "U_BRK_MALFORMED_RULE_TAG"
149 };
150 
151 static const char * const
152 _uRegexErrorName[U_REGEX_ERROR_LIMIT - U_REGEX_ERROR_START] = {
153     "U_REGEX_INTERNAL_ERROR",
154     "U_REGEX_RULE_SYNTAX",
155     "U_REGEX_INVALID_STATE",
156     "U_REGEX_BAD_ESCAPE_SEQUENCE",
157     "U_REGEX_PROPERTY_SYNTAX",
158     "U_REGEX_UNIMPLEMENTED",
159     "U_REGEX_MISMATCHED_PAREN",
160     "U_REGEX_NUMBER_TOO_BIG",
161     "U_REGEX_BAD_INTERVAL",
162     "U_REGEX_MAX_LT_MIN",
163     "U_REGEX_INVALID_BACK_REF",
164     "U_REGEX_INVALID_FLAG",
165     "U_REGEX_LOOK_BEHIND_LIMIT",
166     "U_REGEX_SET_CONTAINS_STRING",
167     "U_REGEX_OCTAL_TOO_BIG",
168     "U_REGEX_MISSING_CLOSE_BRACKET",
169     "U_REGEX_INVALID_RANGE",
170     "U_REGEX_STACK_OVERFLOW",
171     "U_REGEX_TIME_OUT",
172     "U_REGEX_STOPPED_BY_CALLER",
173     "U_REGEX_PATTERN_TOO_BIG",
174     "U_REGEX_INVALID_CAPTURE_GROUP_NAME"
175 };
176 
177 static const char * const
178 _uIDNAErrorName[U_IDNA_ERROR_LIMIT - U_IDNA_ERROR_START] = {
179      "U_STRINGPREP_PROHIBITED_ERROR",
180      "U_STRINGPREP_UNASSIGNED_ERROR",
181      "U_STRINGPREP_CHECK_BIDI_ERROR",
182      "U_IDNA_STD3_ASCII_RULES_ERROR",
183      "U_IDNA_ACE_PREFIX_ERROR",
184      "U_IDNA_VERIFICATION_ERROR",
185      "U_IDNA_LABEL_TOO_LONG_ERROR",
186      "U_IDNA_ZERO_LENGTH_LABEL_ERROR",
187      "U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR"
188 };
189 
190 static const char * const
191 _uPluginErrorName[U_PLUGIN_ERROR_LIMIT - U_PLUGIN_ERROR_START] = {
192      "U_PLUGIN_TOO_HIGH",
193      "U_PLUGIN_DIDNT_SET_LEVEL",
194 };
195 
196 U_CAPI const char * U_EXPORT2
u_errorName(UErrorCode code)197 u_errorName(UErrorCode code) {
198     if(U_ZERO_ERROR <= code && code < U_STANDARD_ERROR_LIMIT) {
199         return _uErrorName[code];
200     } else if(U_ERROR_WARNING_START <= code && code < U_ERROR_WARNING_LIMIT) {
201         return _uErrorInfoName[code - U_ERROR_WARNING_START];
202     } else if(U_PARSE_ERROR_START <= code && code < U_PARSE_ERROR_LIMIT){
203         return _uTransErrorName[code - U_PARSE_ERROR_START];
204     } else if(U_FMT_PARSE_ERROR_START <= code && code < U_FMT_PARSE_ERROR_LIMIT){
205         return _uFmtErrorName[code - U_FMT_PARSE_ERROR_START];
206     } else if (U_BRK_ERROR_START <= code  && code < U_BRK_ERROR_LIMIT){
207         return _uBrkErrorName[code - U_BRK_ERROR_START];
208     } else if (U_REGEX_ERROR_START <= code && code < U_REGEX_ERROR_LIMIT) {
209         return _uRegexErrorName[code - U_REGEX_ERROR_START];
210     } else if(U_IDNA_ERROR_START <= code && code < U_IDNA_ERROR_LIMIT) {
211         return _uIDNAErrorName[code - U_IDNA_ERROR_START];
212     } else if(U_PLUGIN_ERROR_START <= code && code < U_PLUGIN_ERROR_LIMIT) {
213         return _uPluginErrorName[code - U_PLUGIN_ERROR_START];
214     } else {
215         return "[BOGUS UErrorCode]";
216     }
217 }
218 
219 /*
220  * Hey, Emacs, please set the following:
221  *
222  * Local Variables:
223  * indent-tabs-mode: nil
224  * End:
225  *
226  */
227