Author: robbinspg
Date: Tue Dec 4 03:49:39 2007
New Revision: 600900
URL: http://svn.apache.org/viewvc?rev=600900&view=rev
Log:
TUSCANY-1553 Apply Caroline's patch
Minor modification to patch to avoid VC8 compile errors
Modified:
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.cpp
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.h
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp
Modified:
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.cpp?rev=600900&r1=600899&r2=600900&view=diff
==============================================================================
---
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.cpp
(original)
+++
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.cpp
Tue Dec 4 03:49:39 2007
@@ -44,6 +44,8 @@
std::map<std::string,std::string> SDOUtils::XsdToSdo;
+ std::map<char,std::string> SDOUtils::HtmlEntities;
+
bool SDOUtils::populated = false;
bool SDOUtils::populate()
@@ -84,6 +86,12 @@
SDOUtils::SdoToXsd["Bytes"] = "base64Binary";
SDOUtils::SdoToXsd["URI"] = "anyURI";
+ SDOUtils::HtmlEntities['&'] = "&";
+ SDOUtils::HtmlEntities['<'] = "<";
+ SDOUtils::HtmlEntities['>'] = ">";
+ SDOUtils::HtmlEntities['\''] = "'";
+ SDOUtils::HtmlEntities['"'] = """;
+
SDOUtils::populated = true;
return true;
}
@@ -316,6 +324,115 @@
return returnString;
}
+
+
+ /*
+ * Processes a string, substituting entities (such as &)
for special characters
+ * Does not double-encode, that is, & is not converted to
&amp;
+ */
+ SDOString SDOUtils::escapeHtmlEntities(SDOString inputString)
+ {
+ if (inputString.size() == 0)
+ return inputString;
+
+ if (!SDOUtils::populated) SDOUtils::populate();
+
+ SDOString returnString = SDOString();
+
+ SDOString::iterator start = inputString.begin();
+ SDOString::iterator end = inputString.end();
+ SDOString::iterator cur = start;
+
+ while(cur < end) {
+ //cout << SDOString(cur) <<endl;
+ if ((*cur) == '&') {
+ bool skip = false;
+ /*
+ * Don't want to double-encode, so skip
recognised entities
+ */
+ for (map<char, SDOString>::iterator
iter = HtmlEntities.begin();
+ iter != HtmlEntities.end();
iter++ ) {
+ if (SDOString(cur,
end).compare(0, (*iter).second.length(), (*iter).second) == 0) {
+ cur +=
(*iter).second.length();
+ skip = true;
+ break;
+ }
+ }
+
+ if (skip) continue;
+ }
+
+ /*
+ * look for characters which need encoding
+ */
+ for (map<char, SDOString>::iterator iter =
HtmlEntities.begin();
+ iter != HtmlEntities.end(); iter++ ) {
+ if ((*cur) == (*iter).first) {
+ returnString +=
SDOString(start, cur);
+ // cout << returnString
<<endl;
+ returnString += (*iter).second;
+ // cout << returnString
<<endl;
+ start = cur + 1;
+ break;
+ }
+ }
+
+ cur++;
+ }
+
+ returnString += SDOString(start, end);
+ // cout << returnString <<endl;
+ return returnString;
+ }
+
+
+ /*
+ * Processes a string substituting entities (such as &) for
special characters
+ * CDATA sections within the string are left untouched
+ */
+ SDOString SDOUtils::escapeHtmlEntitiesExcludingCData(SDOString
inputString)
+ {
+ if (inputString.size() == 0)
+ return inputString;
+
+ if (!SDOUtils::populated) SDOUtils::populate();
+
+ SDOString returnString = SDOString();
+
+ SDOString::const_iterator start = inputString.begin();
+ SDOString::const_iterator end = inputString.end();
+ SDOString::const_iterator cur = start;
+
+ bool inCdataSection = false;
+ while(cur < end) {
+ if (!inCdataSection && SDOString(cur,
end).compare(0, strlen(XMLCDataStartMarker), XMLCDataStartMarker) == 0) {
+ inCdataSection = true;
+ returnString +=
escapeHtmlEntities(SDOString(start, cur));
+ start = cur;
+ cur += strlen(XMLCDataStartMarker);
+ continue;
+ }
+
+ if (inCdataSection && SDOString(cur,
end).compare(0, strlen(XMLCDataEndMarker), XMLCDataEndMarker) == 0) {
+ inCdataSection = false;
+ cur += strlen(XMLCDataEndMarker);
+ /* don't escape inside the cdata
section */
+ returnString += SDOString(start, cur);
+ start = cur;
+ continue;
+ }
+
+ ++cur;
+ }
+
+ if (inCdataSection) {
+ returnString += SDOString(start, end);
+ } else {
+ returnString +=
escapeHtmlEntities(SDOString(start, end));
+ }
+
+ return returnString;
+ }
};
Modified:
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.h
URL:
http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.h?rev=600900&r1=600899&r2=600900&view=diff
==============================================================================
---
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.h
(original)
+++
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOUtils.h
Tue Dec 4 03:49:39 2007
@@ -47,6 +47,8 @@
static SDO_API const char* XSDToSDO(const char* xsdname);
static SDO_API void printTypes(std::ostream& out, DataFactoryPtr
df);
static SDOString replace(SDOString hostString, const char
*fromString, const char *toString);
+ static SDOString escapeHtmlEntities(SDOString
inputString);
+ static SDOString
escapeHtmlEntitiesExcludingCData(SDOString inputString);
/*
* Markers used to represent the start and end of CDATA sections in
the
@@ -68,6 +70,7 @@
static std::map<std::string,std::string> XsdToSdo;
static std::map<std::string,std::string> SdoToXsd;
+ static std::map<char, std::string> HtmlEntities;
};
} // End - namespace sdo
Modified:
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp
URL:
http://svn.apache.org/viewvc/incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp?rev=600900&r1=600899&r2=600900&view=diff
==============================================================================
---
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp
(original)
+++
incubator/tuscany/branches/sdo-cpp-pre2.1/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp
Tue Dec 4 03:49:39 2007
@@ -34,6 +34,7 @@
#include "commonj/sdo/DataObjectImpl.h"
#include "commonj/sdo/DataFactoryImpl.h"
#include "commonj/sdo/PropertySetting.h"
+#include "commonj/sdo/SDOUtils.h"
namespace commonj
{
@@ -1255,7 +1256,7 @@
const SDOXMLString& content)
{
int rc = 0;
- rc = xmlTextWriterWriteRaw(writer, content);
+ rc = xmlTextWriterWriteRaw(writer,
SDOXMLString(SDOUtils::escapeHtmlEntitiesExcludingCData(content).c_str()));
/* A more complex version that doesn't work!
* I've left it here just in case we need to go back and separate out
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]