diff --git a/src/scenedit/scen.fileio.cpp b/src/scenedit/scen.fileio.cpp index 8cb2dcd8..b9502b59 100644 --- a/src/scenedit/scen.fileio.cpp +++ b/src/scenedit/scen.fileio.cpp @@ -310,6 +310,12 @@ void writeScenarioToXml(ticpp::Printer&& data, cScenario& scenario) { data.PushText(scenario.spec_strs[i], true); data.CloseElement("string"); } + // Preserve trailing empty strings + if(!scenario.spec_strs.empty() && scenario.spec_strs.back().empty()) { + data.OpenElement("string"); + data.PushAttribute("id", scenario.spec_strs.size() - 1); + data.CloseElement("string"); + } for(size_t i = 0; i < scenario.journal_strs.size(); i++) { if(scenario.journal_strs[i].empty()) continue; data.OpenElement("journal"); @@ -317,6 +323,12 @@ void writeScenarioToXml(ticpp::Printer&& data, cScenario& scenario) { data.PushText(scenario.journal_strs[i], true); data.CloseElement("journal"); } + // Preserve trailing empty journals + if(!scenario.journal_strs.empty() && scenario.journal_strs.back().empty()) { + data.OpenElement("journal"); + data.PushAttribute("id", scenario.journal_strs.size() - 1); + data.CloseElement("journal"); + } data.CloseElement("game"); data.OpenElement("editor"); data.PushElement("default-ground", scenario.default_ground); @@ -640,6 +652,12 @@ void writeOutdoorsToXml(ticpp::Printer&& data, cOutdoors& sector) { data.PushText(sector.sign_locs[i].text, true); data.CloseElement("sign"); } + // Preserve trailing empty signs + if(!sector.sign_locs.empty() && sector.sign_locs.back().text.empty()) { + data.OpenElement("sign"); + data.PushAttribute("id", sector.sign_locs.size() - 1); + data.CloseElement("sign"); + } for(auto& area : sector.area_desc) { if(!area.descr.empty() && area.top < area.bottom && area.left < area.right) data.PushElement("area", area); @@ -651,6 +669,12 @@ void writeOutdoorsToXml(ticpp::Printer&& data, cOutdoors& sector) { data.PushText(sector.spec_strs[i], true); data.CloseElement("string"); } + // Preserve trailing empty strings + if(!sector.spec_strs.empty() && sector.spec_strs.back().empty()) { + data.OpenElement("string"); + data.PushAttribute("id", sector.spec_strs.size() - 1); + data.CloseElement("string"); + } data.CloseElement("sector"); } @@ -788,6 +812,12 @@ void writeTownToXml(ticpp::Printer&& data, cTown& town) { data.PushText(town.sign_locs[i].text, true); data.CloseElement("sign"); } + // Preserve trailing empty signs + if(!town.sign_locs.empty() && town.sign_locs.back().text.empty()) { + data.OpenElement("sign"); + data.PushAttribute("id", town.sign_locs.size() - 1); + data.CloseElement("sign"); + } for(size_t i = 0; i < town.spec_strs.size(); i++) { if(town.spec_strs[i].empty()) continue; data.OpenElement("string"); @@ -795,6 +825,12 @@ void writeTownToXml(ticpp::Printer&& data, cTown& town) { data.PushText(town.spec_strs[i], true); data.CloseElement("string"); } + // Preserve trailing empty strings + if(!town.spec_strs.empty() && town.spec_strs.back().empty()) { + data.OpenElement("string"); + data.PushAttribute("id", town.spec_strs.size() - 1); + data.CloseElement("string"); + } data.CloseElement("town"); }