You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by ne...@apache.org on 2003/10/10 04:06:09 UTC
cvs commit: xml-xerces/c/src/xercesc/framework XMLFormatter.cpp XMLFormatter.hpp
neilg 2003/10/09 19:06:09
Modified: c/src/xercesc/framework XMLFormatter.cpp XMLFormatter.hpp
Log:
fix for bug 21780; thanks to David Cargill
Revision Changes Path
1.16 +35 -2 xml-xerces/c/src/xercesc/framework/XMLFormatter.cpp
Index: XMLFormatter.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/XMLFormatter.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- XMLFormatter.cpp 8 Sep 2003 21:48:36 -0000 1.15
+++ XMLFormatter.cpp 10 Oct 2003 02:06:09 -0000 1.16
@@ -537,6 +537,28 @@
}
+void XMLFormatter::writeCharRef(unsigned long toWrite)
+{
+ XMLCh tmpBuf[32];
+ tmpBuf[0] = chAmpersand;
+ tmpBuf[1] = chPound;
+ tmpBuf[2] = chLatin_x;
+
+ // Build a char ref for the current char
+ XMLString::binToText(toWrite, &tmpBuf[3], 8, 16);
+ const unsigned int bufLen = XMLString::stringLen(tmpBuf);
+ tmpBuf[bufLen] = chSemiColon;
+ tmpBuf[bufLen+1] = chNull;
+
+ // write it out
+ formatBuf(tmpBuf
+ , bufLen + 1
+ , XMLFormatter::NoEscapes
+ , XMLFormatter::UnRep_Fail);
+
+}
+
+
const XMLByte* XMLFormatter::getCharRef(unsigned int & count,
XMLByte* &ref,
const XMLCh * stdRef)
@@ -614,7 +636,18 @@
//
while (srcPtr < endPtr)
{
- writeCharRef(*srcPtr);
+ if ((*srcPtr & 0xFC00) == 0xD800) {
+ // we have encountered a surrogate, need to recombine before printing out
+ // use writeCharRef that takes unsigned long to get values larger than
+ // hex 0xFFFF printed.
+ tmpPtr = srcPtr;
+ tmpPtr++; // point at low surrogate
+ writeCharRef((unsigned long) (0x10000+((*srcPtr-0xD800)<<10)+*tmpPtr-0xDC00));
+ srcPtr++; // advance to low surrogate (will advance again below)
+ }
+ else {
+ writeCharRef(*srcPtr);
+ }
// Move up the source pointer and break out if needed
srcPtr++;
1.18 +5 -1 xml-xerces/c/src/xercesc/framework/XMLFormatter.hpp
Index: XMLFormatter.hpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/framework/XMLFormatter.hpp,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- XMLFormatter.hpp 22 Sep 2003 08:50:04 -0000 1.17
+++ XMLFormatter.hpp 10 Oct 2003 02:06:09 -0000 1.18
@@ -56,6 +56,9 @@
/*
* $Log$
+ * Revision 1.18 2003/10/10 02:06:09 neilg
+ * fix for bug 21780; thanks to David Cargill
+ *
* Revision 1.17 2003/09/22 08:50:04 gareth
* doc fix
*
@@ -456,6 +459,7 @@
const XMLCh * stdRef);
void writeCharRef(const XMLCh &toWrite);
+ void writeCharRef(unsigned long toWrite);
bool inEscapeList(const XMLFormatter::EscapeFlags escStyle
, const XMLCh toCheck);
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org