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 #if !defined(XMLSTRING_HPP)
00184 #define XMLSTRING_HPP
00185
00186 #include <util/XercesDefs.hpp>
00187 #include <util/RefVectorOf.hpp>
00188
00189 class XMLLCPTranscoder;
00190
00202 class XMLString
00203 {
00204 public:
00205
00208
00219 static void binToText
00220 (
00221 const unsigned int toFormat
00222 , char* const toFill
00223 , const unsigned int maxChars
00224 , const unsigned int radix
00225 );
00226
00237 static void binToText
00238 (
00239 const unsigned int toFormat
00240 , XMLCh* const toFill
00241 , const unsigned int maxChars
00242 , const unsigned int radix
00243 );
00244
00255 static void binToText
00256 (
00257 const unsigned long toFormat
00258 , char* const toFill
00259 , const unsigned int maxChars
00260 , const unsigned int radix
00261 );
00262
00273 static void binToText
00274 (
00275 const unsigned long toFormat
00276 , XMLCh* const toFill
00277 , const unsigned int maxChars
00278 , const unsigned int radix
00279 );
00280
00291 static void binToText
00292 (
00293 const long toFormat
00294 , char* const toFill
00295 , const unsigned int maxChars
00296 , const unsigned int radix
00297 );
00298
00309 static void binToText
00310 (
00311 const long toFormat
00312 , XMLCh* const toFill
00313 , const unsigned int maxChars
00314 , const unsigned int radix
00315 );
00316
00327 static void binToText
00328 (
00329 const int toFormat
00330 , char* const toFill
00331 , const unsigned int maxChars
00332 , const unsigned int radix
00333 );
00334
00345 static void binToText
00346 (
00347 const int toFormat
00348 , XMLCh* const toFill
00349 , const unsigned int maxChars
00350 , const unsigned int radix
00351 );
00352
00363 static bool textToBin
00364 (
00365 const XMLCh* const toConvert
00366 , unsigned int& toFill
00367 );
00368
00381 static int parseInt
00382 (
00383 const XMLCh* const toConvert
00384 );
00385
00387
00390
00404 static void catString
00405 (
00406 char* const target
00407 , const char* const src
00408 );
00409
00422 static void catString
00423 (
00424 XMLCh* const target
00425 , const XMLCh* const src
00426 );
00428
00431
00442 static int compareIString
00443 (
00444 const char* const str1
00445 , const char* const str2
00446 );
00447
00458 static int compareIString
00459 (
00460 const XMLCh* const str1
00461 , const XMLCh* const str2
00462 );
00463
00464
00478 static int compareNString
00479 (
00480 const char* const str1
00481 , const char* const str2
00482 , const unsigned int count
00483 );
00484
00498 static int compareNString
00499 (
00500 const XMLCh* const str1
00501 , const XMLCh* const str2
00502 , const unsigned int count
00503 );
00504
00505
00519 static int compareNIString
00520 (
00521 const char* const str1
00522 , const char* const str2
00523 , const unsigned int count
00524 );
00525
00540 static int compareNIString
00541 (
00542 const XMLCh* const str1
00543 , const XMLCh* const str2
00544 , const unsigned int count
00545 );
00546
00559 static int compareString
00560 (
00561 const char* const str1
00562 , const char* const str2
00563 );
00564
00576 static int compareString
00577 (
00578 const XMLCh* const str1
00579 , const XMLCh* const str2
00580 );
00581
00608 static bool regionMatches
00609 (
00610 const XMLCh* const str1
00611 , const int offset1
00612 , const XMLCh* const str2
00613 , const int offset2
00614 , const unsigned int charCount
00615 );
00616
00644 static bool regionIMatches
00645 (
00646 const XMLCh* const str1
00647 , const int offset1
00648 , const XMLCh* const str2
00649 , const int offset2
00650 , const unsigned int charCount
00651 );
00653
00656
00666 static void copyString
00667 (
00668 char* const target
00669 , const char* const src
00670 );
00671
00682 static void copyString
00683 (
00684 XMLCh* const target
00685 , const XMLCh* const src
00686 );
00687
00700 static bool copyNString
00701 (
00702 XMLCh* const target
00703 , const XMLCh* const src
00704 , const unsigned int maxChars
00705 );
00707
00710
00716 static unsigned int hash
00717 (
00718 const char* const tohash
00719 , const unsigned int hashModulus
00720 );
00721
00728 static unsigned int hash
00729 (
00730 const XMLCh* const toHash
00731 , const unsigned int hashModulus
00732 );
00733
00743 static unsigned int hashN
00744 (
00745 const XMLCh* const toHash
00746 , const unsigned int numChars
00747 , const unsigned int hashModulus
00748 );
00749
00751
00754
00762 static int indexOf(const char* const toSearch, const char ch);
00763
00772 static int indexOf(const XMLCh* const toSearch, const XMLCh ch);
00773
00784 static int indexOf
00785 (
00786 const char* const toSearch
00787 , const char chToFind
00788 , const unsigned int fromIndex
00789 );
00790
00801 static int indexOf
00802 (
00803 const XMLCh* const toSearch
00804 , const XMLCh chToFind
00805 , const unsigned int fromIndex
00806 );
00807
00816 static int lastIndexOf(const char* const toSearch, const char ch);
00817
00826 static int lastIndexOf(const XMLCh* const toSearch, const XMLCh ch);
00827
00838 static int lastIndexOf
00839 (
00840 const char* const toSearch
00841 , const char chToFind
00842 , const unsigned int fromIndex
00843 );
00844
00855 static int lastIndexOf
00856 (
00857 const XMLCh* const toSearch
00858 , const XMLCh ch
00859 , const unsigned int fromIndex
00860 );
00862
00865
00870 static void moveChars
00871 (
00872 XMLCh* const targetStr
00873 , const XMLCh* const srcStr
00874 , const unsigned int count
00875 );
00876
00878
00881
00889 static void subString
00890 (
00891 char* const targetStr
00892 , const char* const srcStr
00893 , const int startIndex
00894 , const int endIndex
00895 );
00896
00905 static void subString
00906 (
00907 XMLCh* const targetStr
00908 , const XMLCh* const srcStr
00909 , const int startIndex
00910 , const int endIndex
00911 );
00912
00914
00917
00921 static char* replicate(const char* const toRep);
00922
00927 static XMLCh* replicate(const XMLCh* const toRep);
00928
00930
00933
00939 static bool startsWith
00940 (
00941 const char* const toTest
00942 , const char* const prefix
00943 );
00944
00951 static bool startsWith
00952 (
00953 const XMLCh* const toTest
00954 , const XMLCh* const prefix
00955 );
00956
00965 static bool startsWithI
00966 (
00967 const char* const toTest
00968 , const char* const prefix
00969 );
00970
00980 static bool startsWithI
00981 (
00982 const XMLCh* const toTest
00983 , const XMLCh* const prefix
00984 );
00985
00992 static bool endsWith
00993 (
00994 const XMLCh* const toTest
00995 , const XMLCh* const prefix
00996 );
00997
00998
01005 static const XMLCh* findAny
01006 (
01007 const XMLCh* const toSearch
01008 , const XMLCh* const searchList
01009 );
01010
01017 static XMLCh* findAny
01018 (
01019 XMLCh* const toSearch
01020 , const XMLCh* const searchList
01021 );
01022
01029 static int patternMatch
01030 (
01031 XMLCh* const toSearch
01032 , const XMLCh* const pattern
01033 );
01034
01039 static unsigned int stringLen(const char* const src);
01040
01045 static unsigned int stringLen(const XMLCh* const src);
01046
01052 static bool isValidNCName(const XMLCh* const name);
01053
01059 static bool isValidName(const XMLCh* const name);
01060
01066 static bool isValidEncName(const XMLCh* const name);
01067
01073 static bool isValidQName(const XMLCh* const name);
01074
01080
01081 static bool isAlpha(XMLCh const theChar);
01082
01088 static bool isDigit(XMLCh const theChar);
01089
01095 static bool isAlphaNum(XMLCh const theChar);
01096
01102 static bool isHex(XMLCh const theChar);
01103
01109 static bool isAllWhiteSpace(const XMLCh* const toCheck);
01110
01112
01115
01121 static void cut
01122 (
01123 XMLCh* const toCutFrom
01124 , const unsigned int count
01125 );
01126
01135 static char* transcode
01136 (
01137 const XMLCh* const toTranscode
01138 );
01139
01156 static bool transcode
01157 (
01158 const XMLCh* const toTranscode
01159 , char* const toFill
01160 , const unsigned int maxChars
01161 );
01162
01171 static XMLCh* transcode
01172 (
01173 const char* const toTranscode
01174 );
01175
01187 static bool transcode
01188 (
01189 const char* const toTranscode
01190 , XMLCh* const toFill
01191 , const unsigned int maxChars
01192 );
01193
01199 static void trim(char* const toTrim);
01200
01206 static void trim(XMLCh* const toTrim);
01207
01214 static RefVectorOf<XMLCh>* tokenizeString(const XMLCh* const tokenizeSrc);
01215
01221 static bool isInList(const XMLCh* const toFind, const XMLCh* const enumList);
01222
01224
01227
01235 static XMLCh* makeUName
01236 (
01237 const XMLCh* const pszURI
01238 , const XMLCh* const pszName
01239 );
01240
01256 static unsigned int replaceTokens
01257 (
01258 XMLCh* const errText
01259 , const unsigned int maxChars
01260 , const XMLCh* const text1
01261 , const XMLCh* const text2
01262 , const XMLCh* const text3
01263 , const XMLCh* const text4
01264 );
01265
01270 static void upperCase(XMLCh* const toUpperCase);
01271
01276 static void lowerCase(XMLCh* const toLowerCase);
01277
01281 static bool isWSReplaced(const XMLCh* const toCheck);
01282
01286 static bool isWSCollapsed(const XMLCh* const toCheck);
01287
01292 static void replaceWS(XMLCh* const toConvert);
01293
01298 static void collapseWS(XMLCh* const toConvert);
01300
01301
01302 private :
01303
01306
01307 XMLString();
01309 ~XMLString();
01311
01312
01315
01316 static void initString(XMLLCPTranscoder* const defToUse);
01317 static void termString();
01319
01324 static bool validateRegion(const XMLCh* const str1, const int offset1,
01325 const XMLCh* const str2, const int offset2,
01326 const unsigned int charsCount);
01327
01328 friend class XMLPlatformUtils;
01329 };
01330
01331
01332
01333
01334
01335
01336 inline void XMLString::moveChars( XMLCh* const targetStr
01337 , const XMLCh* const srcStr
01338 , const unsigned int count)
01339 {
01340 XMLCh* outPtr = targetStr;
01341 const XMLCh* inPtr = srcStr;
01342 for (unsigned int index = 0; index < count; index++)
01343 *outPtr++ = *inPtr++;
01344 }
01345
01346 inline unsigned int XMLString::stringLen(const XMLCh* const src)
01347 {
01348 if (src == 0 || *src == 0)
01349 {
01350 return 0;
01351 }
01352 else
01353 {
01354 const XMLCh* pszTmp = src + 1;
01355
01356 while (*pszTmp)
01357 ++pszTmp;
01358
01359 return (unsigned int)(pszTmp - src);
01360 }
01361 }
01362
01363 inline bool XMLString::startsWith( const XMLCh* const toTest
01364 , const XMLCh* const prefix)
01365 {
01366 return (compareNString(toTest, prefix, stringLen(prefix)) == 0);
01367 }
01368
01369 inline bool XMLString::startsWithI( const XMLCh* const toTest
01370 , const XMLCh* const prefix)
01371 {
01372 return (compareNIString(toTest, prefix, stringLen(prefix)) == 0);
01373 }
01374
01375 inline bool XMLString::endsWith(const XMLCh* const toTest,
01376 const XMLCh* const suffix)
01377 {
01378
01379 unsigned int suffixLen = XMLString::stringLen(suffix);
01380
01381 return regionMatches(toTest, XMLString::stringLen(toTest) - suffixLen,
01382 suffix, 0, suffixLen);
01383 }
01384
01385 inline XMLCh* XMLString::replicate(const XMLCh* const toRep)
01386 {
01387
01388 XMLCh* ret = 0;
01389 if (toRep)
01390 {
01391 const unsigned int len = stringLen(toRep);
01392 ret = new XMLCh[len + 1];
01393 XMLCh* outPtr = ret;
01394 const XMLCh* inPtr = toRep;
01395 for (unsigned int index = 0; index <= len; index++)
01396 *outPtr++ = *inPtr++;
01397 }
01398 return ret;
01399 }
01400
01401 inline bool XMLString::validateRegion(const XMLCh* const str1,
01402 const int offset1,
01403 const XMLCh* const str2,
01404 const int offset2,
01405 const unsigned int charsCount)
01406 {
01407
01408 if (offset1 < 0 || offset2 < 0 ||
01409 (offset1 + charsCount) > XMLString::stringLen(str1) ||
01410 (offset2 + charsCount) > XMLString::stringLen(str2) )
01411 return false;
01412
01413 return true;
01414 }
01415
01416 #endif