peiyongz 2004/08/11 09:08:05
Modified: c/src/xercesc/util XMLChar.hpp XMLChar.cpp
Log:
isValidNmToken
Revision Changes Path
1.4 +15 -0 xml-xerces/c/src/xercesc/util/XMLChar.hpp
Index: XMLChar.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLChar.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XMLChar.hpp 29 Jan 2004 11:48:47 -0000 1.3
+++ XMLChar.hpp 11 Aug 2004 16:08:04 -0000 1.4
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.4 2004/08/11 16:08:04 peiyongz
+ * isValidNmToken
+ *
* Revision 1.3 2004/01/29 11:48:47 cargilld
* Code cleanup changes to get rid of various compiler diagnostic messages.
*
@@ -108,6 +111,12 @@
, const unsigned int count
);
+ static bool isValidNmtoken
+ (
+ const XMLCh* const toCheck
+ , const unsigned int count
+ );
+
static bool isValidName
(
const XMLCh* const toCheck
@@ -280,6 +289,12 @@
(
const XMLCh* const toCheck
, const unsigned int count
+ );
+
+ static bool isValidNmtoken
+ (
+ const XMLCh* const toCheck
+ , const unsigned int count
);
static bool isValidName
1.8 +68 -1 xml-xerces/c/src/xercesc/util/XMLChar.cpp
Index: XMLChar.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/util/XMLChar.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- XMLChar.cpp 14 Jun 2004 15:14:12 -0000 1.7
+++ XMLChar.cpp 11 Aug 2004 16:08:04 -0000 1.8
@@ -126,6 +126,20 @@
return true;
}
+bool XMLChar1_0::isValidNmtoken(const XMLCh* const toCheck
+ , const unsigned int count)
+{
+ const XMLCh* curCh = toCheck;
+ const XMLCh* endPtr = toCheck + count;
+
+ while (curCh < endPtr)
+ {
+ if (!(fgCharCharsTable1_0[*curCh++] & gNameCharMask))
+ return false;
+ }
+ return true;
+}
+
bool XMLChar1_0::isValidName(const XMLCh* const toCheck
, const unsigned int count)
{
@@ -4436,7 +4450,60 @@
return true;
}
+bool XMLChar1_1::isValidNmtoken(const XMLCh* const toCheck
+ , const unsigned int count)
+{
+ const XMLCh* curCh = toCheck;
+ const XMLCh* endPtr = toCheck + count;
+ XMLCh nextCh;
+ bool gotLeadingSurrogate = false;
+ while (curCh < endPtr)
+ {
+ nextCh = *curCh++;
+
+ // Deal with surrogate pairs
+ if ((nextCh >= 0xD800) && (nextCh <= 0xDBFF))
+ {
+ // Its a leading surrogate. If we already got one, then
+ // issue an error, else set leading flag to make sure that
+ // we look for a trailing next time.
+ if (nextCh > 0xDB7F || gotLeadingSurrogate)
+ {
+ return false;
+ }
+ else
+ gotLeadingSurrogate = true;
+ }
+ else
+ {
+ // If its a trailing surrogate, make sure that we are
+ // prepared for that. Else, its just a regular char so make
+ // sure that we were not expected a trailing surrogate.
+ if ((nextCh >= 0xDC00) && (nextCh <= 0xDFFF))
+ {
+ // Its trailing, so make sure we were expecting it
+ if (!gotLeadingSurrogate)
+ return false;
+ }
+ else
+ {
+ // Its just a char, so make sure we were not expecting a
+ // trailing surrogate.
+ if (gotLeadingSurrogate) {
+ return false;
+ }
+ // Its got to at least be a valid XML character
+ else if (!(fgCharCharsTable1_1[nextCh] & gNameCharMask))
+ {
+ return false;
+ }
+ }
+ gotLeadingSurrogate = false;
+ }
+ }
+ return true;
+}
bool XMLChar1_1::isValidName(const XMLCh* const toCheck
, const unsigned int count)
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]