From 4332a60585a14ff51bc54d29a4a81d37b3b1df81 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 28 Mar 2010 16:53:35 +0200 Subject: Validate enumerations in the xsd:string parser/serializer --- xsde/cxx/serializer/serializer-source.cxx | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'xsde/cxx/serializer/serializer-source.cxx') diff --git a/xsde/cxx/serializer/serializer-source.cxx b/xsde/cxx/serializer/serializer-source.cxx index 509acf4..e4fd239 100644 --- a/xsde/cxx/serializer/serializer-source.cxx +++ b/xsde/cxx/serializer/serializer-source.cxx @@ -5,6 +5,8 @@ #include +#include + #include #include @@ -382,6 +384,13 @@ namespace CXX String const& arg (arg_type (e)); SemanticGraph::Type& base (e.inherits ().base ()); + Boolean facets (false); // Whether we need to set facets. + if (validation) + { + StringBasedType t (facets); + t.dispatch (e); + } + os << "// " << name << endl << "//" << endl << endl; @@ -470,6 +479,26 @@ namespace CXX BaseOverride t (*this, name); t.dispatch (base); } + + if (facets) + { + typedef Cult::Containers::Set Enums; + Enums enums; + + for (Type::NamesIterator i (e.names_begin ()), + end (e.names_end ()); i != end; ++i) + enums.insert (i->name ()); + + os << "const char* const " << name << "::" << "_xsde_" << name << + "_enums_[" << enums.size () << "UL] = " + << "{"; + + for (Enums::Iterator b (enums.begin ()), i (b), end (enums.end ()); + i != end; ++i) + os << (i != b ? ",\n" : "") << strlit (*i); + + os << "};"; + } } }; -- cgit v1.1