14 #ifndef smtk_io_XmlV2StringWriter_h
15 #define smtk_io_XmlV2StringWriter_h
16 #include "smtk/CoreExports.h"
18 #include "smtk/io/XmlStringWriter.h"
22 #include "smtk/attribute/Resource.h"
23 #include "smtk/model/EntityTypeBits.h"
24 #include "smtk/view/Configuration.h"
45 std::string convertToString(
bool no_declaration =
false)
override;
46 std::string getString(std::size_t ith,
bool no_declaration =
false)
override;
48 void generateXml()
override;
50 template<
typename Container>
52 concatenate(
const Container& v, std::string& sep,
smtk::io::Logger* logger =
nullptr);
56 std::string className()
const override;
57 std::string rootNodeName()
const override;
58 unsigned int fileVersion()
const override;
60 void processAttributeInformation();
63 void processAssociationRules(std::size_t index);
64 void processModelInfo();
65 void processEvaluators();
68 virtual void processDefinitionInternal(
69 pugi::xml_node& definition,
78 virtual void processItemDefinitionAttributes(
81 virtual void processItemDefinitionType(
92 void processFileSystemDef(
102 void processModelEntityDef(
103 pugi::xml_node& node,
111 virtual void processViewComponent(
113 pugi::xml_node& node);
115 static std::string encodeColor(
const double* color);
122 pugi::xml_node& topDefinitionsNode()
const;
123 pugi::xml_node& topRootNode()
const;
124 pugi::xml_node& topAttributesNode()
const;
125 pugi::xml_node& topViewsNode()
const;
129 Internals* m_internals;
134 template<
typename Container>
135 std::string XmlV2StringWriter::concatenate(
136 const Container& container,
140 std::ostringstream token;
141 if (container.empty())
144 typename Container::const_iterator it;
145 std::set<char> notSep;
154 for (it = container.begin(); it != container.end(); ++it)
158 std::string::const_iterator sit;
159 std::string entry = token.str();
160 for (sit = entry.begin(); sit != entry.end(); ++sit)
162 token.str(std::string());
166 static const char preferredSeps[] =
",;|:#@!.-=_`?+/\\";
167 int preferredSepsLen =
sizeof(preferredSeps) /
sizeof(preferredSeps[0]);
168 char finalSep =
'\0';
169 for (
int i = 0; i < preferredSepsLen; ++i)
170 if (notSep.find(preferredSeps[i]) == notSep.end())
172 finalSep = preferredSeps[i];
177 for (
int i = 1; i < 255; ++i)
178 if (notSep.find(preferredSeps[i]) == notSep.end())
180 finalSep = preferredSeps[i];
185 if (logger !=
nullptr)
189 "Tokens use every single possible character; no separator found. Using comma.");
199 it = container.begin();
202 for (; it != container.end(); ++it)
213 #endif // smtk_io_XmlV2StringWriter_h