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 #if !defined(XMLSTRING_HPP)
00181 #define XMLSTRING_HPP
00182
00183 #include <util/XercesDefs.hpp>
00184 #include <util/RefVectorOf.hpp>
00185
00186 class XMLLCPTranscoder;
00187
00199 class XMLString
00200 {
00201 public:
00202
00205
00216 static void binToText
00217 (
00218 const unsigned int toFormat
00219 , char* const toFill
00220 , const unsigned int maxChars
00221 , const unsigned int radix
00222 );
00223
00234 static void binToText
00235 (
00236 const unsigned int toFormat
00237 , XMLCh* const toFill
00238 , const unsigned int maxChars
00239 , const unsigned int radix
00240 );
00241
00252 static void binToText
00253 (
00254 const unsigned long toFormat
00255 , char* const toFill
00256 , const unsigned int maxChars
00257 , const unsigned int radix
00258 );
00259
00270 static void binToText
00271 (
00272 const unsigned long toFormat
00273 , XMLCh* const toFill
00274 , const unsigned int maxChars
00275 , const unsigned int radix
00276 );
00277
00288 static void binToText
00289 (
00290 const long toFormat
00291 , char* const toFill
00292 , const unsigned int maxChars
00293 , const unsigned int radix
00294 );
00295
00306 static void binToText
00307 (
00308 const long toFormat
00309 , XMLCh* const toFill
00310 , const unsigned int maxChars
00311 , const unsigned int radix
00312 );
00313
00324 static void binToText
00325 (
00326 const int toFormat
00327 , char* const toFill
00328 , const unsigned int maxChars
00329 , const unsigned int radix
00330 );
00331
00342 static void binToText
00343 (
00344 const int toFormat
00345 , XMLCh* const toFill
00346 , const unsigned int maxChars
00347 , const unsigned int radix
00348 );
00349
00360 static bool textToBin
00361 (
00362 const XMLCh* const toConvert
00363 , unsigned int& toFill
00364 );
00365
00378 static int parseInt
00379 (
00380 const XMLCh* const toConvert
00381 );
00382
00384
00387
00401 static void catString
00402 (
00403 char* const target
00404 , const char* const src
00405 );
00406
00419 static void catString
00420 (
00421 XMLCh* const target
00422 , const XMLCh* const src
00423 );
00425
00428
00439 static int compareIString
00440 (
00441 const char* const str1
00442 , const char* const str2
00443 );
00444
00455 static int compareIString
00456 (
00457 const XMLCh* const str1
00458 , const XMLCh* const str2
00459 );
00460
00461
00475 static int compareNString
00476 (
00477 const char* const str1
00478 , const char* const str2
00479 , const unsigned int count
00480 );
00481
00495 static int compareNString
00496 (
00497 const XMLCh* const str1
00498 , const XMLCh* const str2
00499 , const unsigned int count
00500 );
00501
00502
00516 static int compareNIString
00517 (
00518 const char* const str1
00519 , const char* const str2
00520 , const unsigned int count
00521 );
00522
00537 static int compareNIString
00538 (
00539 const XMLCh* const str1
00540 , const XMLCh* const str2
00541 , const unsigned int count
00542 );
00543
00556 static int compareString
00557 (
00558 const char* const str1
00559 , const char* const str2
00560 );
00561
00573 static int compareString
00574 (
00575 const XMLCh* const str1
00576 , const XMLCh* const str2
00577 );
00578
00605 static bool regionMatches
00606 (
00607 const XMLCh* const str1
00608 , const int offset1
00609 , const XMLCh* const str2
00610 , const int offset2
00611 , const unsigned int charCount
00612 );
00613
00641 static bool regionIMatches
00642 (
00643 const XMLCh* const str1
00644 , const int offset1
00645 , const XMLCh* const str2
00646 , const int offset2
00647 , const unsigned int charCount
00648 );
00650
00653
00663 static void copyString
00664 (
00665 char* const target
00666 , const char* const src
00667 );
00668
00679 static void copyString
00680 (
00681 XMLCh* const target
00682 , const XMLCh* const src
00683 );
00684
00697 static bool copyNString
00698 (
00699 XMLCh* const target
00700 , const XMLCh* const src
00701 , const unsigned int maxChars
00702 );
00704
00707
00713 static unsigned int hash
00714 (
00715 const char* const tohash
00716 , const unsigned int hashModulus
00717 );
00718
00725 static unsigned int hash
00726 (
00727 const XMLCh* const toHash
00728 , const unsigned int hashModulus
00729 );
00730
00740 static unsigned int hashN
00741 (
00742 const XMLCh* const toHash
00743 , const unsigned int numChars
00744 , const unsigned int hashModulus
00745 );
00746
00748
00751
00759 static int indexOf(const char* const toSearch, const char ch);
00760
00769 static int indexOf(const XMLCh* const toSearch, const XMLCh ch);
00770
00781 static int indexOf
00782 (
00783 const char* const toSearch
00784 , const char chToFind
00785 , const unsigned int fromIndex
00786 );
00787
00798 static int indexOf
00799 (
00800 const XMLCh* const toSearch
00801 , const XMLCh chToFind
00802 , const unsigned int fromIndex
00803 );
00804
00813 static int lastIndexOf(const char* const toSearch, const char ch);
00814
00823 static int lastIndexOf(const XMLCh* const toSearch, const XMLCh ch);
00824
00835 static int lastIndexOf
00836 (
00837 const char* const toSearch
00838 , const char chToFind
00839 , const unsigned int fromIndex
00840 );
00841
00852 static int lastIndexOf
00853 (
00854 const XMLCh* const toSearch
00855 , const XMLCh ch
00856 , const unsigned int fromIndex
00857 );
00859
00862
00867 static void moveChars
00868 (
00869 XMLCh* const targetStr
00870 , const XMLCh* const srcStr
00871 , const unsigned int count
00872 );
00873
00875
00878
00886 static void subString
00887 (
00888 char* const targetStr
00889 , const char* const srcStr
00890 , const int startIndex
00891 , const int endIndex
00892 );
00893
00902 static void subString
00903 (
00904 XMLCh* const targetStr
00905 , const XMLCh* const srcStr
00906 , const int startIndex
00907 , const int endIndex
00908 );
00909
00911
00914
00918 static char* replicate(const char* const toRep);
00919
00924 static XMLCh* replicate(const XMLCh* const toRep);
00925
00927
00930
00936 static bool startsWith
00937 (
00938 const char* const toTest
00939 , const char* const prefix
00940 );
00941
00948 static bool startsWith
00949 (
00950 const XMLCh* const toTest
00951 , const XMLCh* const prefix
00952 );
00953
00962 static bool startsWithI
00963 (
00964 const char* const toTest
00965 , const char* const prefix
00966 );
00967
00977 static bool startsWithI
00978 (
00979 const XMLCh* const toTest
00980 , const XMLCh* const prefix
00981 );
00982
00989 static bool endsWith
00990 (
00991 const XMLCh* const toTest
00992 , const XMLCh* const prefix
00993 );
00994
00995
01002 static const XMLCh* findAny
01003 (
01004 const XMLCh* const toSearch
01005 , const XMLCh* const searchList
01006 );
01007
01014 static XMLCh* findAny
01015 (
01016 XMLCh* const toSearch
01017 , const XMLCh* const searchList
01018 );
01019
01024 static unsigned int stringLen(const char* const src);
01025
01030 static unsigned int stringLen(const XMLCh* const src);
01031
01037 static bool isValidNCName(const XMLCh* const name);
01038
01044 static bool isValidName(const XMLCh* const name);
01045
01051 static bool isValidEncName(const XMLCh* const name);
01052
01058 static bool isValidQName(const XMLCh* const name);
01059
01065
01066 static bool isAlpha(XMLCh const theChar);
01067
01073 static bool isDigit(XMLCh const theChar);
01074
01076
01079
01085 static void cut
01086 (
01087 XMLCh* const toCutFrom
01088 , const unsigned int count
01089 );
01090
01099 static char* transcode
01100 (
01101 const XMLCh* const toTranscode
01102 );
01103
01120 static bool transcode
01121 (
01122 const XMLCh* const toTranscode
01123 , char* const toFill
01124 , const unsigned int maxChars
01125 );
01126
01135 static XMLCh* transcode
01136 (
01137 const char* const toTranscode
01138 );
01139
01151 static bool transcode
01152 (
01153 const char* const toTranscode
01154 , XMLCh* const toFill
01155 , const unsigned int maxChars
01156 );
01157
01163 static void trim(char* const toTrim);
01164
01170 static void trim(XMLCh* const toTrim);
01171
01178 static RefVectorOf<XMLCh>* tokenizeString(const XMLCh* const tokenizeSrc);
01179
01185 static bool isInList(const XMLCh* const toFind, const XMLCh* const enumList);
01186
01188
01191
01199 static XMLCh* makeUName
01200 (
01201 const XMLCh* const pszURI
01202 , const XMLCh* const pszName
01203 );
01204
01220 static unsigned int replaceTokens
01221 (
01222 XMLCh* const errText
01223 , const unsigned int maxChars
01224 , const XMLCh* const text1
01225 , const XMLCh* const text2
01226 , const XMLCh* const text3
01227 , const XMLCh* const text4
01228 );
01229
01234 static void upperCase(XMLCh* const toUpperCase);
01235
01240 static void lowerCase(XMLCh* const toLowerCase);
01241
01245 static bool isWSReplaced(const XMLCh* const toCheck);
01246
01250 static bool isWSCollapsed(const XMLCh* const toCheck);
01251
01256 static void replaceWS(XMLCh* const toConvert);
01257
01262 static void collapseWS(XMLCh* const toConvert);
01264
01265
01266 private :
01267
01270
01271 XMLString();
01273 ~XMLString();
01275
01276
01279
01280 static void initString(XMLLCPTranscoder* const defToUse);
01281 static void termString();
01283
01288 static bool validateRegion(const XMLCh* const str1, const int offset1,
01289 const XMLCh* const str2, const int offset2,
01290 const unsigned int charsCount);
01291
01292 friend class XMLPlatformUtils;
01293 };
01294
01295
01296
01297
01298
01299
01300 inline void XMLString::moveChars( XMLCh* const targetStr
01301 , const XMLCh* const srcStr
01302 , const unsigned int count)
01303 {
01304 XMLCh* outPtr = targetStr;
01305 const XMLCh* inPtr = srcStr;
01306 for (unsigned int index = 0; index < count; index++)
01307 *outPtr++ = *inPtr++;
01308 }
01309
01310 inline unsigned int XMLString::stringLen(const XMLCh* const src)
01311 {
01312 if (src == 0 || *src == 0)
01313 {
01314 return 0;
01315 }
01316 else
01317 {
01318 const XMLCh* pszTmp = src + 1;
01319
01320 while (*pszTmp)
01321 ++pszTmp;
01322
01323 return (unsigned int)(pszTmp - src);
01324 }
01325 }
01326
01327 inline bool XMLString::startsWith( const XMLCh* const toTest
01328 , const XMLCh* const prefix)
01329 {
01330 return (compareNString(toTest, prefix, stringLen(prefix)) == 0);
01331 }
01332
01333 inline bool XMLString::startsWithI( const XMLCh* const toTest
01334 , const XMLCh* const prefix)
01335 {
01336 return (compareNIString(toTest, prefix, stringLen(prefix)) == 0);
01337 }
01338
01339 inline bool XMLString::endsWith(const XMLCh* const toTest,
01340 const XMLCh* const suffix)
01341 {
01342
01343 unsigned int suffixLen = XMLString::stringLen(suffix);
01344
01345 return regionMatches(toTest, XMLString::stringLen(toTest) - suffixLen,
01346 suffix, 0, suffixLen);
01347 }
01348
01349 inline XMLCh* XMLString::replicate(const XMLCh* const toRep)
01350 {
01351
01352 XMLCh* ret = 0;
01353 if (toRep)
01354 {
01355 const unsigned int len = stringLen(toRep);
01356 ret = new XMLCh[len + 1];
01357 XMLCh* outPtr = ret;
01358 const XMLCh* inPtr = toRep;
01359 for (unsigned int index = 0; index <= len; index++)
01360 *outPtr++ = *inPtr++;
01361 }
01362 return ret;
01363 }
01364
01365 inline bool XMLString::validateRegion(const XMLCh* const str1,
01366 const int offset1,
01367 const XMLCh* const str2,
01368 const int offset2,
01369 const unsigned int charsCount)
01370 {
01371
01372 if (offset1 < 0 || offset2 < 0 ||
01373 (offset1 + charsCount) > XMLString::stringLen(str1) ||
01374 (offset2 + charsCount) > XMLString::stringLen(str2) )
01375 return false;
01376
01377 return true;
01378 }
01379
01380 #endif