00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #if !defined(XMLCHAR_HPP)
00022 #define XMLCHAR_HPP
00023
00024 #include <xercesc/util/XMLUniDefs.hpp>
00025
00026 XERCES_CPP_NAMESPACE_BEGIN
00027
00028
00029
00030
00031
00032 const XMLByte gNCNameCharMask = 0x1;
00033 const XMLByte gFirstNameCharMask = 0x2;
00034 const XMLByte gNameCharMask = 0x4;
00035 const XMLByte gPlainContentCharMask = 0x8;
00036 const XMLByte gSpecialStartTagCharMask = 0x10;
00037 const XMLByte gControlCharMask = 0x20;
00038 const XMLByte gXMLCharMask = 0x40;
00039 const XMLByte gWhitespaceCharMask = 0x80;
00040
00041
00042
00043
00044 class XMLChar1_0
00045 {
00046 public:
00047
00048
00049
00050 static bool isAllSpaces
00051 (
00052 const XMLCh* const toCheck
00053 , const unsigned int count
00054 );
00055
00056 static bool containsWhiteSpace
00057 (
00058 const XMLCh* const toCheck
00059 , const unsigned int count
00060 );
00061
00062 static bool isValidNmtoken
00063 (
00064 const XMLCh* const toCheck
00065 , const unsigned int count
00066 );
00067
00068 static bool isValidName
00069 (
00070 const XMLCh* const toCheck
00071 , const unsigned int count
00072 );
00073
00074 static bool isValidNCName
00075 (
00076 const XMLCh* const toCheck
00077 , const unsigned int count
00078 );
00079
00080 static bool isValidQName
00081 (
00082 const XMLCh* const toCheck
00083 , const unsigned int count
00084 );
00085
00086
00087
00088
00089
00090 static bool isXMLLetter(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00091 static bool isFirstNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00092 static bool isNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00093 static bool isPlainContentChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00094 static bool isSpecialStartTagChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00095 static bool isXMLChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00096 static bool isWhitespace(const XMLCh toCheck);
00097 static bool isWhitespace(const XMLCh toCheck, const XMLCh toCheck2);
00098 static bool isControlChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00099
00100 static bool isPublicIdChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00101 static bool isFirstNCNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00102 static bool isNCNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00103
00104
00105
00106
00110 static bool isNELRecognized();
00111
00115 static void enableNELWS();
00116
00117 private:
00118
00119
00120
00121 XMLChar1_0();
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 static XMLByte fgCharCharsTable1_0[0x10000];
00136 static bool enableNEL;
00137
00138 friend class XMLReader;
00139 };
00140
00141
00142
00143
00144
00145 inline bool XMLChar1_0::isXMLLetter(const XMLCh toCheck, const XMLCh toCheck2)
00146 {
00147
00148 if (!toCheck2) {
00149 return (((fgCharCharsTable1_0[toCheck] & gFirstNameCharMask) != 0)
00150 && (toCheck != chColon) && (toCheck != chUnderscore));
00151 }
00152 return false;
00153 }
00154
00155 inline bool XMLChar1_0::isFirstNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00156 {
00157 if (!toCheck2)
00158 return ((fgCharCharsTable1_0[toCheck] & gFirstNameCharMask) != 0);
00159 return false;
00160 }
00161
00162 inline bool XMLChar1_0::isFirstNCNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00163 {
00164 if (!toCheck2) {
00165 return (((fgCharCharsTable1_0[toCheck] & gFirstNameCharMask) != 0) && (toCheck != chColon));
00166 }
00167
00168 return false;
00169 }
00170
00171 inline bool XMLChar1_0::isNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00172 {
00173 if (!toCheck2)
00174 return ((fgCharCharsTable1_0[toCheck] & gNameCharMask) != 0);
00175 return false;
00176 }
00177
00178 inline bool XMLChar1_0::isNCNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00179 {
00180 if (!toCheck2)
00181 return ((fgCharCharsTable1_0[toCheck] & gNCNameCharMask) != 0);
00182 return false;
00183 }
00184
00185 inline bool XMLChar1_0::isPlainContentChar(const XMLCh toCheck, const XMLCh toCheck2)
00186 {
00187 if (!toCheck2)
00188 return ((fgCharCharsTable1_0[toCheck] & gPlainContentCharMask) != 0);
00189 else {
00190 if ((toCheck >= 0xD800) && (toCheck <= 0xDBFF))
00191 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00192 return true;
00193 }
00194 return false;
00195 }
00196
00197
00198 inline bool XMLChar1_0::isSpecialStartTagChar(const XMLCh toCheck, const XMLCh toCheck2)
00199 {
00200 if (!toCheck2)
00201 return ((fgCharCharsTable1_0[toCheck] & gSpecialStartTagCharMask) != 0);
00202 return false;
00203 }
00204
00205 inline bool XMLChar1_0::isXMLChar(const XMLCh toCheck, const XMLCh toCheck2)
00206 {
00207 if (!toCheck2)
00208 return ((fgCharCharsTable1_0[toCheck] & gXMLCharMask) != 0);
00209 else {
00210 if ((toCheck >= 0xD800) && (toCheck <= 0xDBFF))
00211 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00212 return true;
00213 }
00214 return false;
00215 }
00216
00217 inline bool XMLChar1_0::isWhitespace(const XMLCh toCheck)
00218 {
00219 return ((fgCharCharsTable1_0[toCheck] & gWhitespaceCharMask) != 0);
00220 }
00221
00222 inline bool XMLChar1_0::isWhitespace(const XMLCh toCheck, const XMLCh toCheck2)
00223 {
00224 if (!toCheck2)
00225 return ((fgCharCharsTable1_0[toCheck] & gWhitespaceCharMask) != 0);
00226 return false;
00227 }
00228
00229 inline bool XMLChar1_0::isControlChar(const XMLCh toCheck, const XMLCh toCheck2)
00230 {
00231 if (!toCheck2)
00232 return ((fgCharCharsTable1_0[toCheck] & gControlCharMask) != 0);
00233 return false;
00234 }
00235
00236 inline bool XMLChar1_0::isNELRecognized() {
00237
00238 return enableNEL;
00239 }
00240
00241
00242
00243
00244
00245 class XMLChar1_1
00246 {
00247 public:
00248
00249
00250
00251 static bool isAllSpaces
00252 (
00253 const XMLCh* const toCheck
00254 , const unsigned int count
00255 );
00256
00257 static bool containsWhiteSpace
00258 (
00259 const XMLCh* const toCheck
00260 , const unsigned int count
00261 );
00262
00263 static bool isValidNmtoken
00264 (
00265 const XMLCh* const toCheck
00266 , const unsigned int count
00267 );
00268
00269 static bool isValidName
00270 (
00271 const XMLCh* const toCheck
00272 , const unsigned int count
00273 );
00274
00275 static bool isValidNCName
00276 (
00277 const XMLCh* const toCheck
00278 , const unsigned int count
00279 );
00280
00281 static bool isValidQName
00282 (
00283 const XMLCh* const toCheck
00284 , const unsigned int count
00285 );
00286
00287
00288
00289
00290 static bool isXMLLetter(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00291 static bool isFirstNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00292 static bool isNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00293 static bool isPlainContentChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00294 static bool isSpecialStartTagChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00295 static bool isXMLChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00296 static bool isWhitespace(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00297 static bool isControlChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00298
00299 static bool isPublicIdChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00300 static bool isFirstNCNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00301 static bool isNCNameChar(const XMLCh toCheck, const XMLCh toCheck2 = 0);
00302
00303 private:
00304
00305
00306
00307 XMLChar1_1();
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318 static XMLByte fgCharCharsTable1_1[0x10000];
00319
00320 friend class XMLReader;
00321 };
00322
00323
00324
00325
00326
00327 inline bool XMLChar1_1::isXMLLetter(const XMLCh toCheck, const XMLCh toCheck2)
00328 {
00330 return XMLChar1_0::isXMLLetter(toCheck, toCheck2);
00331 }
00332
00333 inline bool XMLChar1_1::isFirstNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00334 {
00335 if (!toCheck2)
00336 return ((fgCharCharsTable1_1[toCheck] & gFirstNameCharMask) != 0);
00337 else {
00338 if ((toCheck >= 0xD800) && (toCheck <= 0xDB7F))
00339 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00340 return true;
00341 }
00342 return false;
00343 }
00344
00345 inline bool XMLChar1_1::isFirstNCNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00346 {
00347 if (!toCheck2) {
00348 return (((fgCharCharsTable1_1[toCheck] & gFirstNameCharMask) != 0) && (toCheck != chColon));
00349 }
00350 else {
00351 if ((toCheck >= 0xD800) && (toCheck <= 0xDB7F))
00352 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00353 return true;
00354 }
00355 return false;
00356 }
00357
00358 inline bool XMLChar1_1::isNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00359 {
00360 if (!toCheck2)
00361 return ((fgCharCharsTable1_1[toCheck] & gNameCharMask) != 0);
00362 else {
00363 if ((toCheck >= 0xD800) && (toCheck <= 0xDB7F))
00364 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00365 return true;
00366 }
00367 return false;
00368 }
00369
00370 inline bool XMLChar1_1::isNCNameChar(const XMLCh toCheck, const XMLCh toCheck2)
00371 {
00372 if (!toCheck2)
00373 return ((fgCharCharsTable1_1[toCheck] & gNCNameCharMask) != 0);
00374 else {
00375 if ((toCheck >= 0xD800) && (toCheck <= 0xDB7F))
00376 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00377 return true;
00378 }
00379 return false;
00380 }
00381
00382 inline bool XMLChar1_1::isPlainContentChar(const XMLCh toCheck, const XMLCh toCheck2)
00383 {
00384 if (!toCheck2)
00385 return ((fgCharCharsTable1_1[toCheck] & gPlainContentCharMask) != 0);
00386 else {
00387 if ((toCheck >= 0xD800) && (toCheck <= 0xDBFF))
00388 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00389 return true;
00390 }
00391 return false;
00392 }
00393
00394
00395 inline bool XMLChar1_1::isSpecialStartTagChar(const XMLCh toCheck, const XMLCh toCheck2)
00396 {
00397 if (!toCheck2)
00398 return ((fgCharCharsTable1_1[toCheck] & gSpecialStartTagCharMask) != 0);
00399 return false;
00400 }
00401
00402 inline bool XMLChar1_1::isXMLChar(const XMLCh toCheck, const XMLCh toCheck2)
00403 {
00404 if (!toCheck2)
00405 return ((fgCharCharsTable1_1[toCheck] & gXMLCharMask) != 0);
00406 else {
00407 if ((toCheck >= 0xD800) && (toCheck <= 0xDBFF))
00408 if ((toCheck2 >= 0xDC00) && (toCheck2 <= 0xDFFF))
00409 return true;
00410 }
00411 return false;
00412 }
00413
00414 inline bool XMLChar1_1::isWhitespace(const XMLCh toCheck, const XMLCh toCheck2)
00415 {
00416 if (!toCheck2)
00417 return ((fgCharCharsTable1_1[toCheck] & gWhitespaceCharMask) != 0);
00418 return false;
00419 }
00420
00421 inline bool XMLChar1_1::isControlChar(const XMLCh toCheck, const XMLCh toCheck2)
00422 {
00423 if (!toCheck2)
00424 return ((fgCharCharsTable1_1[toCheck] & gControlCharMask) != 0);
00425 return false;
00426 }
00427
00428
00429 XERCES_CPP_NAMESPACE_END
00430
00431 #endif