aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-03-28 20:04:12 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-03-28 20:04:12 +0200
commitc964e1d8c0ff4e645691386ff92b41440223649b (patch)
tree4af5073b56e761f870c89694e6a96f01bcc3ec02
parentb8749d41c4ded030201744f321b4e38a9093fd98 (diff)
Add facet support for other string-based types (serializer)
-rw-r--r--libxsde/xsde/cxx/parser/validating/string-common.cxx12
-rw-r--r--libxsde/xsde/cxx/parser/validating/string-common.hxx2
-rw-r--r--libxsde/xsde/cxx/serializer/validating/id-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/id.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/idref-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/idref.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/language-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/language.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/name-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/name.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/ncname-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/ncname.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/nmtoken-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/nmtoken.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/normalized-string-stl.cxx15
-rw-r--r--libxsde/xsde/cxx/serializer/validating/normalized-string.cxx10
-rw-r--r--libxsde/xsde/cxx/serializer/validating/string-common.cxx18
-rw-r--r--libxsde/xsde/cxx/serializer/validating/string-common.hxx4
-rw-r--r--libxsde/xsde/cxx/serializer/validating/string-stl.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/string.cxx8
-rw-r--r--libxsde/xsde/cxx/serializer/validating/token-stl.cxx14
-rw-r--r--libxsde/xsde/cxx/serializer/validating/token.cxx9
-rw-r--r--libxsde/xsde/cxx/serializer/validating/uri-stl.cxx7
-rw-r--r--libxsde/xsde/cxx/serializer/validating/uri.cxx7
-rw-r--r--libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx11
-rw-r--r--libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx12
-rw-r--r--xsde/cxx/hybrid/serializer-source.cxx7
27 files changed, 216 insertions, 67 deletions
diff --git a/libxsde/xsde/cxx/parser/validating/string-common.cxx b/libxsde/xsde/cxx/parser/validating/string-common.cxx
index 15956f6..e226766 100644
--- a/libxsde/xsde/cxx/parser/validating/string-common.cxx
+++ b/libxsde/xsde/cxx/parser/validating/string-common.cxx
@@ -14,7 +14,7 @@ namespace xsde
{
namespace validating
{
- void string_common::
+ bool string_common::
validate_facets (const char* s,
size_t n,
const string_facets::facets& f,
@@ -23,19 +23,19 @@ namespace xsde
if (f.length_set_ && n != f.length_)
{
ctx.schema_error (schema_error::length_not_equal_prescribed);
- return;
+ return false;
}
if (f.min_length_set_ && n < f.min_length_)
{
ctx.schema_error (schema_error::length_less_than_min);
- return;
+ return false;
}
if (f.max_length_set_ && n > f.max_length_)
{
ctx.schema_error (schema_error::length_greater_than_max);
- return;
+ return false;
}
if (f.enum_count_ != 0)
@@ -51,9 +51,11 @@ namespace xsde
if (i == f.enum_count_)
{
ctx.schema_error (schema_error::value_not_in_enumeration);
- return;
+ return false;
}
}
+
+ return true;
}
}
}
diff --git a/libxsde/xsde/cxx/parser/validating/string-common.hxx b/libxsde/xsde/cxx/parser/validating/string-common.hxx
index 52ea0c5..3191a3c 100644
--- a/libxsde/xsde/cxx/parser/validating/string-common.hxx
+++ b/libxsde/xsde/cxx/parser/validating/string-common.hxx
@@ -18,7 +18,7 @@ namespace xsde
{
struct string_common
{
- static void
+ static bool
validate_facets (const char* s,
size_t n,
const string_facets::facets&,
diff --git a/libxsde/xsde/cxx/serializer/validating/id-stl.cxx b/libxsde/xsde/cxx/serializer/validating/id-stl.cxx
index 974b8e2..f7ba57c 100644
--- a/libxsde/xsde/cxx/serializer/validating/id-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/id-stl.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/ncname.hxx>
#include <xsde/cxx/serializer/validating/id-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -27,10 +28,17 @@ namespace xsde
std::string tmp;
tmp.swap (value_);
- if (xml::valid_ncname (tmp.c_str (), tmp.size ()))
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!xml::valid_ncname (tmp.c_str (), tmp.size ()))
+ {
_schema_error (schema_error::invalid_id_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/id.cxx b/libxsde/xsde/cxx/serializer/validating/id.cxx
index 94198a4..55e91ef 100644
--- a/libxsde/xsde/cxx/serializer/validating/id.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/id.cxx
@@ -8,6 +8,7 @@
#include <xsde/cxx/xml/ncname.hxx>
#include <xsde/cxx/serializer/validating/id.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -36,7 +37,13 @@ namespace xsde
size_t n = strlen (value_);
if (xml::valid_ncname (value_, n))
- _characters (value_, n);
+ {
+ if (string_common::validate_facets (
+ value_, n, _facets (), _context ()))
+ {
+ _characters (value_, n);
+ }
+ }
else
_schema_error (schema_error::invalid_id_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/idref-stl.cxx b/libxsde/xsde/cxx/serializer/validating/idref-stl.cxx
index a4aee50..3fdc2de 100644
--- a/libxsde/xsde/cxx/serializer/validating/idref-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/idref-stl.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/ncname.hxx>
#include <xsde/cxx/serializer/validating/idref-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -27,10 +28,17 @@ namespace xsde
std::string tmp;
tmp.swap (value_);
- if (xml::valid_ncname (tmp.c_str (), tmp.size ()))
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!xml::valid_ncname (tmp.c_str (), tmp.size ()))
+ {
_schema_error (schema_error::invalid_idref_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/idref.cxx b/libxsde/xsde/cxx/serializer/validating/idref.cxx
index f87bd76..93e4228 100644
--- a/libxsde/xsde/cxx/serializer/validating/idref.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/idref.cxx
@@ -8,6 +8,7 @@
#include <xsde/cxx/xml/ncname.hxx>
#include <xsde/cxx/serializer/validating/idref.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -36,7 +37,13 @@ namespace xsde
size_t n = strlen (value_);
if (xml::valid_ncname (value_, n))
- _characters (value_, n);
+ {
+ if (string_common::validate_facets (
+ value_, n, _facets (), _context ()))
+ {
+ _characters (value_, n);
+ }
+ }
else
_schema_error (schema_error::invalid_idref_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/language-stl.cxx b/libxsde/xsde/cxx/serializer/validating/language-stl.cxx
index 55e3b9b..ae16931 100644
--- a/libxsde/xsde/cxx/serializer/validating/language-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/language-stl.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/language-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -62,10 +63,17 @@ namespace xsde
}
}
- if (ok)
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!ok)
+ {
_schema_error (schema_error::invalid_language_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/language.cxx b/libxsde/xsde/cxx/serializer/validating/language.cxx
index 05ecd15..662c512 100644
--- a/libxsde/xsde/cxx/serializer/validating/language.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/language.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/language.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -65,7 +66,13 @@ namespace xsde
}
if (ok)
- _characters (value_);
+ {
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
+ }
else
_schema_error (schema_error::invalid_language_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/name-stl.cxx b/libxsde/xsde/cxx/serializer/validating/name-stl.cxx
index 4541a21..97b0381 100644
--- a/libxsde/xsde/cxx/serializer/validating/name-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/name-stl.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/char-table.hxx>
#include <xsde/cxx/serializer/validating/name-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -51,10 +52,17 @@ namespace xsde
}
}
- if (ok)
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!ok)
+ {
_schema_error (schema_error::invalid_name_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/name.cxx b/libxsde/xsde/cxx/serializer/validating/name.cxx
index eec2a94..c1fec6e 100644
--- a/libxsde/xsde/cxx/serializer/validating/name.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/name.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/char-table.hxx>
#include <xsde/cxx/serializer/validating/name.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -54,7 +55,13 @@ namespace xsde
}
if (ok)
- _characters (value_);
+ {
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
+ }
else
_schema_error (schema_error::invalid_name_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/ncname-stl.cxx b/libxsde/xsde/cxx/serializer/validating/ncname-stl.cxx
index a8b7b7c..74a6584 100644
--- a/libxsde/xsde/cxx/serializer/validating/ncname-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/ncname-stl.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/ncname.hxx>
#include <xsde/cxx/serializer/validating/ncname-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -27,10 +28,17 @@ namespace xsde
std::string tmp;
tmp.swap (value_);
- if (xml::valid_ncname (tmp.c_str (), tmp.size ()))
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!xml::valid_ncname (tmp.c_str (), tmp.size ()))
+ {
_schema_error (schema_error::invalid_ncname_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/ncname.cxx b/libxsde/xsde/cxx/serializer/validating/ncname.cxx
index 38ee90f..ee6079b 100644
--- a/libxsde/xsde/cxx/serializer/validating/ncname.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/ncname.cxx
@@ -8,6 +8,7 @@
#include <xsde/cxx/xml/ncname.hxx>
#include <xsde/cxx/serializer/validating/ncname.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -36,7 +37,13 @@ namespace xsde
size_t n = strlen (value_);
if (xml::valid_ncname (value_, n))
- _characters (value_, n);
+ {
+ if (string_common::validate_facets (
+ value_, n, _facets (), _context ()))
+ {
+ _characters (value_, n);
+ }
+ }
else
_schema_error (schema_error::invalid_ncname_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/nmtoken-stl.cxx b/libxsde/xsde/cxx/serializer/validating/nmtoken-stl.cxx
index e417b98..f336620 100644
--- a/libxsde/xsde/cxx/serializer/validating/nmtoken-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/nmtoken-stl.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/char-table.hxx>
#include <xsde/cxx/serializer/validating/nmtoken-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -42,10 +43,17 @@ namespace xsde
ok = false;
}
- if (ok)
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!ok)
+ {
_schema_error (schema_error::invalid_nmtoken_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/nmtoken.cxx b/libxsde/xsde/cxx/serializer/validating/nmtoken.cxx
index 10acf64..a230b57 100644
--- a/libxsde/xsde/cxx/serializer/validating/nmtoken.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/nmtoken.cxx
@@ -6,6 +6,7 @@
#include <xsde/cxx/xml/char-table.hxx>
#include <xsde/cxx/serializer/validating/nmtoken.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -45,7 +46,13 @@ namespace xsde
}
if (ok)
- _characters (value_);
+ {
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
+ }
else
_schema_error (schema_error::invalid_nmtoken_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/normalized-string-stl.cxx b/libxsde/xsde/cxx/serializer/validating/normalized-string-stl.cxx
index b7ccde7..cf1bbc0 100644
--- a/libxsde/xsde/cxx/serializer/validating/normalized-string-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/normalized-string-stl.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/normalized-string-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -35,13 +36,19 @@ namespace xsde
break;
}
- if (*s == '\0')
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (*s != '\0')
+ {
_schema_error (schema_error::invalid_normalized_string_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
}
}
-
diff --git a/libxsde/xsde/cxx/serializer/validating/normalized-string.cxx b/libxsde/xsde/cxx/serializer/validating/normalized-string.cxx
index 72ade2e..89bb32c 100644
--- a/libxsde/xsde/cxx/serializer/validating/normalized-string.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/normalized-string.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/normalized-string.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -38,7 +39,13 @@ namespace xsde
}
if (*s == '\0')
- _characters (value_);
+ {
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
+ }
else
_schema_error (schema_error::invalid_normalized_string_value);
@@ -52,4 +59,3 @@ namespace xsde
}
}
}
-
diff --git a/libxsde/xsde/cxx/serializer/validating/string-common.cxx b/libxsde/xsde/cxx/serializer/validating/string-common.cxx
index c9c70b8..f7d49b6 100644
--- a/libxsde/xsde/cxx/serializer/validating/string-common.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/string-common.cxx
@@ -14,7 +14,7 @@ namespace xsde
{
namespace validating
{
- void string_common::
+ bool string_common::
validate_facets (const char* s,
const string_facets::facets& f,
context& ctx)
@@ -24,11 +24,13 @@ namespace xsde
f.max_length_set_ ||
f.enum_count_ != 0)
{
- validate_facets (s, strlen (s), f, ctx);
+ return validate_facets (s, strlen (s), f, ctx);
}
+
+ return true;
}
- void string_common::
+ bool string_common::
validate_facets (const char* s,
size_t n,
const string_facets::facets& f,
@@ -37,19 +39,19 @@ namespace xsde
if (f.length_set_ && n != f.length_)
{
ctx.schema_error (schema_error::length_not_equal_prescribed);
- return;
+ return false;
}
if (f.min_length_set_ && n < f.min_length_)
{
ctx.schema_error (schema_error::length_less_than_min);
- return;
+ return false;
}
if (f.max_length_set_ && n > f.max_length_)
{
ctx.schema_error (schema_error::length_greater_than_max);
- return;
+ return false;
}
if (f.enum_count_ != 0)
@@ -65,9 +67,11 @@ namespace xsde
if (i == f.enum_count_)
{
ctx.schema_error (schema_error::value_not_in_enumeration);
- return;
+ return false;
}
}
+
+ return true;
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/string-common.hxx b/libxsde/xsde/cxx/serializer/validating/string-common.hxx
index b49ef5a..118ecea 100644
--- a/libxsde/xsde/cxx/serializer/validating/string-common.hxx
+++ b/libxsde/xsde/cxx/serializer/validating/string-common.hxx
@@ -18,12 +18,12 @@ namespace xsde
{
struct string_common
{
- static void
+ static bool
validate_facets (const char* s,
const string_facets::facets&,
context&);
- static void
+ static bool
validate_facets (const char* s,
size_t n,
const string_facets::facets&,
diff --git a/libxsde/xsde/cxx/serializer/validating/string-stl.cxx b/libxsde/xsde/cxx/serializer/validating/string-stl.cxx
index ef13746..13822b0 100644
--- a/libxsde/xsde/cxx/serializer/validating/string-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/string-stl.cxx
@@ -23,15 +23,16 @@ namespace xsde
void string_simpl::
_serialize_content ()
{
- string_common::validate_facets (
- value_.c_str (), value_.size (), _facets (), _context ());
-
// Make sure we don't hold any references to the string.
//
std::string tmp;
tmp.swap (value_);
- _characters (tmp.c_str (), tmp.size ());
+ if (string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ {
+ _characters (tmp.c_str (), tmp.size ());
+ }
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/string.cxx b/libxsde/xsde/cxx/serializer/validating/string.cxx
index befe450..a8d287e 100644
--- a/libxsde/xsde/cxx/serializer/validating/string.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/string.cxx
@@ -30,9 +30,11 @@ namespace xsde
void string_simpl::
_serialize_content ()
{
- string_common::validate_facets (value_, _facets (), _context ());
-
- _characters (value_);
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
if (free_)
{
diff --git a/libxsde/xsde/cxx/serializer/validating/token-stl.cxx b/libxsde/xsde/cxx/serializer/validating/token-stl.cxx
index 9d91640..8fd524c 100644
--- a/libxsde/xsde/cxx/serializer/validating/token-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/token-stl.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/token-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -47,10 +48,17 @@ namespace xsde
if (ok && s != tmp.c_str () && *(s - 1) == 0x20)
ok = false;
- if (ok)
- _characters (tmp.c_str (), tmp.size ());
- else
+ if (!ok)
+ {
_schema_error (schema_error::invalid_token_value);
+ return;
+ }
+
+ if (!string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ return;
+
+ _characters (tmp.c_str (), tmp.size ());
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/token.cxx b/libxsde/xsde/cxx/serializer/validating/token.cxx
index a008034..30e98f8 100644
--- a/libxsde/xsde/cxx/serializer/validating/token.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/token.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/token.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -50,7 +51,13 @@ namespace xsde
ok = false;
if (ok)
- _characters (value_);
+ {
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
+ }
else
_schema_error (schema_error::invalid_token_value);
diff --git a/libxsde/xsde/cxx/serializer/validating/uri-stl.cxx b/libxsde/xsde/cxx/serializer/validating/uri-stl.cxx
index b0b0d03..8a13a22 100644
--- a/libxsde/xsde/cxx/serializer/validating/uri-stl.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/uri-stl.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/uri-stl.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -31,7 +32,11 @@ namespace xsde
// can be a URI and conforming processors do not need to figure
// out and verify particular URI schemes.
//
- _characters (tmp.c_str (), tmp.size ());
+ if (string_common::validate_facets (
+ tmp.c_str (), tmp.size (), _facets (), _context ()))
+ {
+ _characters (tmp.c_str (), tmp.size ());
+ }
}
}
}
diff --git a/libxsde/xsde/cxx/serializer/validating/uri.cxx b/libxsde/xsde/cxx/serializer/validating/uri.cxx
index fee3eed..a1b7a86 100644
--- a/libxsde/xsde/cxx/serializer/validating/uri.cxx
+++ b/libxsde/xsde/cxx/serializer/validating/uri.cxx
@@ -4,6 +4,7 @@
// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
#include <xsde/cxx/serializer/validating/uri.hxx>
+#include <xsde/cxx/serializer/validating/string-common.hxx>
namespace xsde
{
@@ -33,7 +34,11 @@ namespace xsde
// can be a URI and conforming processors do not need to figure
// out and verify particular URI schemes.
//
- _characters (value_);
+ if (string_common::validate_facets (
+ value_, _facets (), _context ()))
+ {
+ _characters (value_);
+ }
if (free_)
{
diff --git a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx
index c206e78..a97742a 100644
--- a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx
+++ b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.hxx
@@ -699,9 +699,9 @@ namespace xsde
protected:
string_sskel* string_impl_;
#endif
- // Facets.
- //
- const facets&
+
+ protected:
+ const string_facets::facets&
_facets () const;
};
@@ -933,7 +933,7 @@ namespace xsde
#endif
};
- struct uri_sskel: simple_content
+ struct uri_sskel: simple_content, string_facets
{
virtual void
#ifdef XSDE_STL
@@ -957,6 +957,9 @@ namespace xsde
protected:
uri_sskel* uri_impl_;
#endif
+ protected:
+ const string_facets::facets&
+ _facets () const;
};
struct qname_sskel: simple_content
diff --git a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx
index b2eb40f..d62fdd4 100644
--- a/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx
+++ b/libxsde/xsde/cxx/serializer/validating/xml-schema-sskel.ixx
@@ -504,7 +504,7 @@ namespace xsde
}
#endif
- inline const string_sskel::facets& string_sskel::
+ inline const string_facets::facets& string_sskel::
_facets () const
{
#ifdef XSDE_REUSE_STYLE_TIEIN
@@ -690,6 +690,16 @@ namespace xsde
{
}
#endif
+ inline const string_facets::facets& uri_sskel::
+ _facets () const
+ {
+#ifdef XSDE_REUSE_STYLE_TIEIN
+ if (parent_ != 0)
+ return static_cast<const uri_sskel&> (*parent_).facets_;
+ else
+#endif
+ return facets_;
+ }
// qname_sskel
//
diff --git a/xsde/cxx/hybrid/serializer-source.cxx b/xsde/cxx/hybrid/serializer-source.cxx
index b15a3bf..b9099f6 100644
--- a/xsde/cxx/hybrid/serializer-source.cxx
+++ b/xsde/cxx/hybrid/serializer-source.cxx
@@ -211,12 +211,11 @@ namespace CXX
{
// Do facet validation.
//
- os << "::xsde::cxx::serializer::validating::string_common::" <<
- "validate_facets (" << endl
+ os << "if (::xsde::cxx::serializer::validating::" <<
+ "string_common::validate_facets (" << endl
<< "this->" << state << "->" << string << " ()," << endl
<< "this->_facets ()," << endl
- << "this->_context ());"
- << endl;
+ << "this->_context ()))" << endl;
}
os << "this->_characters (this->" << state << "->" <<