00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189 #if !defined(XMLSTRING_HPP)
00190 #define XMLSTRING_HPP
00191
00192 #include <xercesc/util/XercesDefs.hpp>
00193 #include <xercesc/util/RefVectorOf.hpp>
00194
00195 class XMLLCPTranscoder;
00196
00208 class XMLString
00209 {
00210 public:
00211
00214
00225 static void binToText
00226 (
00227 const unsigned int toFormat
00228 , char* const toFill
00229 , const unsigned int maxChars
00230 , const unsigned int radix
00231 );
00232
00243 static void binToText
00244 (
00245 const unsigned int toFormat
00246 , XMLCh* const toFill
00247 , const unsigned int maxChars
00248 , const unsigned int radix
00249 );
00250
00261 static void binToText
00262 (
00263 const unsigned long toFormat
00264 , char* const toFill
00265 , const unsigned int maxChars
00266 , const unsigned int radix
00267 );
00268
00279 static void binToText
00280 (
00281 const unsigned long toFormat
00282 , XMLCh* const toFill
00283 , const unsigned int maxChars
00284 , const unsigned int radix
00285 );
00286
00297 static void binToText
00298 (
00299 const long toFormat
00300 , char* const toFill
00301 , const unsigned int maxChars
00302 , const unsigned int radix
00303 );
00304
00315 static void binToText
00316 (
00317 const long toFormat
00318 , XMLCh* const toFill
00319 , const unsigned int maxChars
00320 , const unsigned int radix
00321 );
00322
00333 static void binToText
00334 (
00335 const int toFormat
00336 , char* const toFill
00337 , const unsigned int maxChars
00338 , const unsigned int radix
00339 );
00340
00351 static void binToText
00352 (
00353 const int toFormat
00354 , XMLCh* const toFill
00355 , const unsigned int maxChars
00356 , const unsigned int radix
00357 );
00358
00369 static bool textToBin
00370 (
00371 const XMLCh* const toConvert
00372 , unsigned int& toFill
00373 );
00374
00387 static int parseInt
00388 (
00389 const XMLCh* const toConvert
00390 );
00391
00393
00396
00410 static void catString
00411 (
00412 char* const target
00413 , const char* const src
00414 );
00415
00428 static void catString
00429 (
00430 XMLCh* const target
00431 , const XMLCh* const src
00432 );
00434
00437
00448 static int compareIString
00449 (
00450 const char* const str1
00451 , const char* const str2
00452 );
00453
00464 static int compareIString
00465 (
00466 const XMLCh* const str1
00467 , const XMLCh* const str2
00468 );
00469
00470
00484 static int compareNString
00485 (
00486 const char* const str1
00487 , const char* const str2
00488 , const unsigned int count
00489 );
00490
00504 static int compareNString
00505 (
00506 const XMLCh* const str1
00507 , const XMLCh* const str2
00508 , const unsigned int count
00509 );
00510
00511
00525 static int compareNIString
00526 (
00527 const char* const str1
00528 , const char* const str2
00529 , const unsigned int count
00530 );
00531
00546 static int compareNIString
00547 (
00548 const XMLCh* const str1
00549 , const XMLCh* const str2
00550 , const unsigned int count
00551 );
00552
00565 static int compareString
00566 (
00567 const char* const str1
00568 , const char* const str2
00569 );
00570
00582 static int compareString
00583 (
00584 const XMLCh* const str1
00585 , const XMLCh* const str2
00586 );
00587
00614 static bool regionMatches
00615 (
00616 const XMLCh* const str1
00617 , const int offset1
00618 , const XMLCh* const str2
00619 , const int offset2
00620 , const unsigned int charCount
00621 );
00622
00650 static bool regionIMatches
00651 (
00652 const XMLCh* const str1
00653 , const int offset1
00654 , const XMLCh* const str2
00655 , const int offset2
00656 , const unsigned int charCount
00657 );
00659
00662
00672 static void copyString
00673 (
00674 char* const target
00675 , const char* const src
00676 );
00677
00688 static void copyString
00689 (
00690 XMLCh* const target
00691 , const XMLCh* const src
00692 );
00693
00706 static bool copyNString
00707 (
00708 XMLCh* const target
00709 , const XMLCh* const src
00710 , const unsigned int maxChars
00711 );
00713
00716
00722 static unsigned int hash
00723 (
00724 const char* const toHash
00725 , const unsigned int hashModulus
00726 );
00727
00734 static unsigned int hash
00735 (
00736 const XMLCh* const toHash
00737 , const unsigned int hashModulus
00738 );
00739
00749 static unsigned int hashN
00750 (
00751 const XMLCh* const toHash
00752 , const unsigned int numChars
00753 , const unsigned int hashModulus
00754 );
00755
00757
00760
00768 static int indexOf(const char* const toSearch, const char ch);
00769
00778 static int indexOf(const XMLCh* const toSearch, const XMLCh ch);
00779
00790 static int indexOf
00791 (
00792 const char* const toSearch
00793 , const char chToFind
00794 , const unsigned int fromIndex
00795 );
00796
00807 static int indexOf
00808 (
00809 const XMLCh* const toSearch
00810 , const XMLCh chToFind
00811 , const unsigned int fromIndex
00812 );
00813
00822 static int lastIndexOf(const char* const toSearch, const char ch);
00823
00832 static int lastIndexOf(const XMLCh* const toSearch, const XMLCh ch);
00833
00844 static int lastIndexOf
00845 (
00846 const char* const toSearch
00847 , const char chToFind
00848 , const unsigned int fromIndex
00849 );
00850
00861 static int lastIndexOf
00862 (
00863 const XMLCh* const toSearch
00864 , const XMLCh ch
00865 , const unsigned int fromIndex
00866 );
00868
00871
00876 static void moveChars
00877 (
00878 XMLCh* const targetStr
00879 , const XMLCh* const srcStr
00880 , const unsigned int count
00881 );
00882
00884
00887
00895 static void subString
00896 (
00897 char* const targetStr
00898 , const char* const srcStr
00899 , const int startIndex
00900 , const int endIndex
00901 );
00902
00911 static void subString
00912 (
00913 XMLCh* const targetStr
00914 , const XMLCh* const srcStr
00915 , const int startIndex
00916 , const int endIndex
00917 );
00918
00920
00923
00927 static char* replicate(const char* const toRep);
00928
00933 static XMLCh* replicate(const XMLCh* const toRep);
00934
00936
00939
00945 static bool startsWith
00946 (
00947 const char* const toTest
00948 , const char* const prefix
00949 );
00950
00957 static bool startsWith
00958 (
00959 const XMLCh* const toTest
00960 , const XMLCh* const prefix
00961 );
00962
00971 static bool startsWithI
00972 (
00973 const char* const toTest
00974 , const char* const prefix
00975 );
00976
00986 static bool startsWithI
00987 (
00988 const XMLCh* const toTest
00989 , const XMLCh* const prefix
00990 );
00991
00998 static bool endsWith
00999 (
01000 const XMLCh* const toTest
01001 , const XMLCh* const suffix
01002 );
01003
01004
01011 static const XMLCh* findAny
01012 (
01013 const XMLCh* const toSearch
01014 , const XMLCh* const searchList
01015 );
01016
01023 static XMLCh* findAny
01024 (
01025 XMLCh* const toSearch
01026 , const XMLCh* const searchList
01027 );
01028
01035 static int patternMatch
01036 (
01037 XMLCh* const toSearch
01038 , const XMLCh* const pattern
01039 );
01040
01045 static unsigned int stringLen(const char* const src);
01046
01051 static unsigned int stringLen(const XMLCh* const src);
01052
01058 static bool isValidNCName(const XMLCh* const name);
01059
01065 static bool isValidName(const XMLCh* const name);
01066
01072 static bool isValidEncName(const XMLCh* const name);
01073
01079 static bool isValidQName(const XMLCh* const name);
01080
01086
01087 static bool isAlpha(XMLCh const theChar);
01088
01094 static bool isDigit(XMLCh const theChar);
01095
01101 static bool isAlphaNum(XMLCh const theChar);
01102
01108 static bool isHex(XMLCh const theChar);
01109
01115 static bool isAllWhiteSpace(const XMLCh* const toCheck);
01116
01118
01121
01127 static void cut
01128 (
01129 XMLCh* const toCutFrom
01130 , const unsigned int count
01131 );
01132
01141 static char* transcode
01142 (
01143 const XMLCh* const toTranscode
01144 );
01145
01162 static bool transcode
01163 (
01164 const XMLCh* const toTranscode
01165 , char* const toFill
01166 , const unsigned int maxChars
01167 );
01168
01177 static XMLCh* transcode
01178 (
01179 const char* const toTranscode
01180 );
01181
01193 static bool transcode
01194 (
01195 const char* const toTranscode
01196 , XMLCh* const toFill
01197 , const unsigned int maxChars
01198 );
01199
01205 static void trim(char* const toTrim);
01206
01212 static void trim(XMLCh* const toTrim);
01213
01220 static RefVectorOf<XMLCh>* tokenizeString(const XMLCh* const tokenizeSrc);
01221
01227 static bool isInList(const XMLCh* const toFind, const XMLCh* const enumList);
01228
01230
01233
01241 static XMLCh* makeUName
01242 (
01243 const XMLCh* const pszURI
01244 , const XMLCh* const pszName
01245 );
01246
01262 static unsigned int replaceTokens
01263 (
01264 XMLCh* const errText
01265 , const unsigned int maxChars
01266 , const XMLCh* const text1
01267 , const XMLCh* const text2
01268 , const XMLCh* const text3
01269 , const XMLCh* const text4
01270 );
01271
01276 static void upperCase(XMLCh* const toUpperCase);
01277
01282 static void lowerCase(XMLCh* const toLowerCase);
01283
01287 static bool isWSReplaced(const XMLCh* const toCheck);
01288
01292 static bool isWSCollapsed(const XMLCh* const toCheck);
01293
01298 static void replaceWS(XMLCh* const toConvert);
01299
01304 static void collapseWS(XMLCh* const toConvert);
01306
01307
01308 private :
01309
01312
01313 XMLString();
01315 ~XMLString();
01317
01318
01321
01322 static void initString(XMLLCPTranscoder* const defToUse);
01323 static void termString();
01325
01330 static bool validateRegion(const XMLCh* const str1, const int offset1,
01331 const XMLCh* const str2, const int offset2,
01332 const unsigned int charCount);
01333
01334 friend class XMLPlatformUtils;
01335 };
01336
01337
01338
01339
01340
01341
01342 inline void XMLString::moveChars( XMLCh* const targetStr
01343 , const XMLCh* const srcStr
01344 , const unsigned int count)
01345 {
01346 XMLCh* outPtr = targetStr;
01347 const XMLCh* inPtr = srcStr;
01348 for (unsigned int index = 0; index < count; index++)
01349 *outPtr++ = *inPtr++;
01350 }
01351
01352 inline unsigned int XMLString::stringLen(const XMLCh* const src)
01353 {
01354 if (src == 0 || *src == 0)
01355 {
01356 return 0;
01357 }
01358 else
01359 {
01360 const XMLCh* pszTmp = src + 1;
01361
01362 while (*pszTmp)
01363 ++pszTmp;
01364
01365 return (unsigned int)(pszTmp - src);
01366 }
01367 }
01368
01369 inline bool XMLString::startsWith( const XMLCh* const toTest
01370 , const XMLCh* const prefix)
01371 {
01372 return (compareNString(toTest, prefix, stringLen(prefix)) == 0);
01373 }
01374
01375 inline bool XMLString::startsWithI( const XMLCh* const toTest
01376 , const XMLCh* const prefix)
01377 {
01378 return (compareNIString(toTest, prefix, stringLen(prefix)) == 0);
01379 }
01380
01381 inline bool XMLString::endsWith(const XMLCh* const toTest,
01382 const XMLCh* const suffix)
01383 {
01384
01385 unsigned int suffixLen = XMLString::stringLen(suffix);
01386
01387 return regionMatches(toTest, XMLString::stringLen(toTest) - suffixLen,
01388 suffix, 0, suffixLen);
01389 }
01390
01391 inline XMLCh* XMLString::replicate(const XMLCh* const toRep)
01392 {
01393
01394 XMLCh* ret = 0;
01395 if (toRep)
01396 {
01397 const unsigned int len = stringLen(toRep);
01398 ret = new XMLCh[len + 1];
01399 XMLCh* outPtr = ret;
01400 const XMLCh* inPtr = toRep;
01401 for (unsigned int index = 0; index <= len; index++)
01402 *outPtr++ = *inPtr++;
01403 }
01404 return ret;
01405 }
01406
01407 inline bool XMLString::validateRegion(const XMLCh* const str1,
01408 const int offset1,
01409 const XMLCh* const str2,
01410 const int offset2,
01411 const unsigned int charCount)
01412 {
01413
01414 if (offset1 < 0 || offset2 < 0 ||
01415 (offset1 + charCount) > XMLString::stringLen(str1) ||
01416 (offset2 + charCount) > XMLString::stringLen(str2) )
01417 return false;
01418
01419 return true;
01420 }
01421
01422 #endif