From 956db4a059f5151b883f8d6febea3d2a7fd56104 Mon Sep 17 00:00:00 2001 From: Stefan Radomski Date: Thu, 23 Jan 2014 17:27:01 +0100 Subject: Separate special chars in data key into separate compound terms --- .../plugins/datamodel/prolog/swi/SWIDataModel.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp b/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp index b32fecf..78b6a6f 100644 --- a/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp +++ b/src/uscxml/plugins/datamodel/prolog/swi/SWIDataModel.cpp @@ -351,8 +351,21 @@ void SWIDataModel::assertFromData(const Data& data, const std::string& expr, siz if (data.compound.size() > 0) { std::map::const_iterator compIter = data.compound.begin(); while(compIter != data.compound.end()) { - assert(compIter->first.length() > 0); - assertFromData(compIter->second, expr + compIter->first + "(", nesting + 1); +// std::cout << compIter->first << std::endl; + std::stringstream prefix; + size_t prefixNesting = 0; + size_t oldPos = 0; + size_t pos = 0; + while((pos = compIter->first.find_first_of(",.(-", oldPos)) != std::string::npos) { + prefix << compIter->first.substr(oldPos, pos - oldPos) << "("; + prefixNesting++; + oldPos = pos + 1; + } + if (oldPos != compIter->first.size()) { + prefix << compIter->first.substr(oldPos, compIter->first.size() - oldPos) << "("; + prefixNesting++; + } + assertFromData(compIter->second, expr + prefix.str(), nesting + prefixNesting); compIter++; } } -- cgit v0.12