App: fix subname encoding when saving property links

This commit is contained in:
Zheng, Lei
2021-11-22 12:21:26 +08:00
committed by Chris Hennes
parent 31bbabe817
commit 32e3eaa01b

View File

@@ -1321,20 +1321,20 @@ void PropertyLinkSub::Save (Base::Writer &writer) const
writer.Stream() << writer.ind() << "<Sub value=\"";
if(exporting) {
std::string exportName;
writer.Stream() << exportSubName(exportName,_pcLinkSub,sub.c_str());
writer.Stream() << encodeAttribute(exportSubName(exportName,_pcLinkSub,sub.c_str()));
if(shadow.second.size() && shadow.first == _cSubList[i])
writer.Stream() << "\" " ATTR_MAPPED "=\"1";
} else {
writer.Stream() << sub;
writer.Stream() << encodeAttribute(sub);
if(_cSubList[i].size()) {
if(sub!=_cSubList[i]) {
// Stores the actual value that is shadowed. For new version FC,
// we will restore this shadowed value instead.
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << _cSubList[i];
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << encodeAttribute(_cSubList[i]);
}else if(shadow.first.size()){
// Here means the user set value is old style element name.
// We shall then store the shadow somewhere else.
writer.Stream() << "\" " ATTR_SHADOW "=\"" << shadow.first;
writer.Stream() << "\" " ATTR_SHADOW "=\"" << encodeAttribute(shadow.first);
}
}
}
@@ -2164,20 +2164,20 @@ void PropertyLinkSubList::Save (Base::Writer &writer) const
writer.Stream() << writer.ind() << "<Link obj=\"" << obj->getExportName() << "\" sub=\"";
if(exporting) {
std::string exportName;
writer.Stream() << exportSubName(exportName,obj,sub.c_str());
writer.Stream() << encodeAttribute(exportSubName(exportName,obj,sub.c_str()));
if(shadow.second.size() && _lSubList[i]==shadow.first)
writer.Stream() << "\" " ATTR_MAPPED "=\"1";
} else {
writer.Stream() << sub;
writer.Stream() << encodeAttribute(sub);
if(_lSubList[i].size()) {
if(sub!=_lSubList[i]) {
// Stores the actual value that is shadowed. For new version FC,
// we will restore this shadowed value instead.
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << _lSubList[i];
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << encodeAttribute(_lSubList[i]);
}else if(shadow.first.size()) {
// Here means the user set value is old style element name.
// We shall then store the shadow somewhere else.
writer.Stream() << "\" " ATTR_SHADOW "=\"" << shadow.first;
writer.Stream() << "\" " ATTR_SHADOW "=\"" << encodeAttribute(shadow.first);
}
}
}
@@ -3316,16 +3316,17 @@ void PropertyXLink::Save (Base::Writer &writer) const {
const auto &sub = shadowSub.second.empty()?subName:shadowSub.second;
if(exporting) {
std::string exportName;
writer.Stream() << "\" sub=\"" << exportSubName(exportName,_pcLink,sub.c_str());
writer.Stream() << "\" sub=\"" <<
encodeAttribute(exportSubName(exportName,_pcLink,sub.c_str()));
if(shadowSub.second.size() && shadowSub.first==subName)
writer.Stream() << "\" " ATTR_MAPPED "=\"1";
}else{
writer.Stream() << "\" sub=\"" << sub;
writer.Stream() << "\" sub=\"" << encodeAttribute(sub);
if(sub.size()) {
if(sub!=subName)
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << subName;
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << encodeAttribute(subName);
else if(shadowSub.first.size())
writer.Stream() << "\" " ATTR_SHADOW "=\"" << shadowSub.first;
writer.Stream() << "\" " ATTR_SHADOW "=\"" << encodeAttribute(shadowSub.first);
}
}
writer.Stream() << "\"/>" << std::endl;
@@ -3341,16 +3342,16 @@ void PropertyXLink::Save (Base::Writer &writer) const {
writer.Stream() << writer.ind() << "<Sub value=\"";
if(exporting) {
std::string exportName;
writer.Stream() << exportSubName(exportName,_pcLink,sub.c_str());
writer.Stream() << encodeAttribute(exportSubName(exportName,_pcLink,sub.c_str()));
if(shadow.second.size() && shadow.first == _SubList[i])
writer.Stream() << "\" " ATTR_MAPPED "=\"1";
} else {
writer.Stream() << sub;
writer.Stream() << encodeAttribute(sub);
if(_SubList[i].size()) {
if(sub!=_SubList[i])
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << _SubList[i];
writer.Stream() << "\" " ATTR_SHADOWED "=\"" << encodeAttribute(_SubList[i]);
else if(shadow.first.size())
writer.Stream() << "\" " ATTR_SHADOW "=\"" << shadow.first;
writer.Stream() << "\" " ATTR_SHADOW "=\"" << encodeAttribute(shadow.first);
}
}
writer.Stream()<<"\"/>" << endl;