[TD]encode Xml characters in spreadsheet
This commit is contained in:
@@ -854,7 +854,37 @@ int DrawUtil::countSubShapes(TopoDS_Shape shape, TopAbs_ShapeEnum subShape)
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
//https://stackoverflow.com/questions/5665231/most-efficient-way-to-escape-xml-html-in-c-string
|
||||
//for every character in inoutText, check if it is on the list of characters to be substituted and
|
||||
//replace it with the encoding string
|
||||
void DrawUtil::encodeXmlSpecialChars(std::string& inoutText)
|
||||
{
|
||||
std::string buffer;
|
||||
buffer.reserve(inoutText.size());
|
||||
for(size_t cursor = 0; cursor != inoutText.size(); ++cursor) {
|
||||
switch(inoutText.at(cursor)) {
|
||||
case '&':
|
||||
buffer.append("&");
|
||||
break;
|
||||
case '\"':
|
||||
buffer.append(""");
|
||||
break;
|
||||
case '\'':
|
||||
buffer.append("'");
|
||||
break;
|
||||
case '<':
|
||||
buffer.append("<");
|
||||
break;
|
||||
case '>':
|
||||
buffer.append(">");
|
||||
break;
|
||||
default:
|
||||
buffer.append(&inoutText.at(cursor), 1); //not a special character
|
||||
break;
|
||||
}
|
||||
}
|
||||
inoutText.swap(buffer);
|
||||
}
|
||||
|
||||
// Supplementary mathematical functions
|
||||
// ====================================
|
||||
|
||||
@@ -140,6 +140,7 @@ class TechDrawExport DrawUtil {
|
||||
static Base::Vector3d getFaceCenter(TopoDS_Face f);
|
||||
static bool circulation(Base::Vector3d A, Base::Vector3d B, Base::Vector3d C);
|
||||
static int countSubShapes(TopoDS_Shape shape, TopAbs_ShapeEnum subShape);
|
||||
static void encodeXmlSpecialChars(std::string& inoutText);
|
||||
|
||||
|
||||
// Supplementary mathematical functions
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <Base/Parameter.h>
|
||||
|
||||
#include "Preferences.h"
|
||||
#include "DrawUtil.h"
|
||||
#include "DrawViewSpreadsheet.h"
|
||||
|
||||
#include <Mod/Spreadsheet/App/Cell.h>
|
||||
@@ -287,9 +288,13 @@ std::string DrawViewSpreadsheet::getSheetImage()
|
||||
prop->isDerivedFrom(App::PropertyFloat::getClassTypeId()) ||
|
||||
prop->isDerivedFrom(App::PropertyInteger::getClassTypeId())
|
||||
) {
|
||||
field << cell->getFormattedQuantity();
|
||||
std::string temp = cell->getFormattedQuantity(); //writable
|
||||
DrawUtil::encodeXmlSpecialChars(temp);
|
||||
field << temp;
|
||||
} else if (prop->isDerivedFrom(App::PropertyString::getClassTypeId())) {
|
||||
field << static_cast<App::PropertyString*>(prop)->getValue();
|
||||
std::string temp = static_cast<App::PropertyString*>(prop)->getValue();
|
||||
DrawUtil::encodeXmlSpecialChars(temp);
|
||||
field << temp;
|
||||
} else {
|
||||
Base::Console().Error("DVSS: Unknown property type\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user