From c23f3371d0ece2873a1cee171475e99e435fb635 Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Mon, 5 Feb 2018 14:04:36 -0800
Subject: [PATCH] v. 2.29.7 Fix for unicode error during validation of simple
 types

---
 README.rst                               |  11 +++-
 generateDS.html                          |   6 +--
 generateDS.py                            |  11 ++--
 generateDS.txt                           |   2 +-
 generateds_gui_notes.html                |   6 +--
 generateds_gui_notes.txt                 |   2 +-
 gui/generateds_gui.py                    |   2 +-
 librarytemplate_howto.html               |   6 +--
 librarytemplate_howto.txt                |   2 +-
 process_includes.py                      |   4 +-
 setup.py                                 |   2 +-
 tests/test.py                            |   1 +
 tests/validate_simpletypes.xml           |   2 +
 tests/validate_simpletypes.xsd           |   7 +++
 tests/validate_simpletypes1_out.xml      |   2 +
 tests/validate_simpletypes1_sub.py       |   9 ++--
 tests/validate_simpletypes1_sup.py       |  33 ++++++++++--
 tests/validate_simpletypes1_warnings.txt |  62 ++++++++++++-----------
 tests/validate_simpletypes2_sub.py       |   9 ++--
 tests/validate_simpletypes2_sup.py       |  33 ++++++++++--
 tutorial/generateds_tutorial.html        |   6 +--
 tutorial/generateds_tutorial.txt         |   2 +-
 tutorial/generateds_tutorial.zip         | Bin 48772 -> 48771 bytes
 23 files changed, 146 insertions(+), 74 deletions(-)

diff --git a/README.rst b/README.rst
index 89eef6d..6183e7f 100644
--- a/README.rst
+++ b/README.rst
@@ -141,7 +141,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
-Version 2.29.6 (01/22/2017)
+Version 2.29.7 (02/05/2018)
+
+- Fix for unicode error that occurs during simpleType validation
+  under Python 2.7.  Thanks to Juha Tuomala for reporting this issue.
+- Added a test for xs:simpleType validation that uses a pattern
+  containing a multi-byte character.
+
+Version 2.29.6 (01/22/2018)
 
 - Fix to generation of namespace prefix in export methods.  With
   this fix, process_includes.py collects information about which
@@ -151,7 +158,7 @@ Version 2.29.6 (01/22/2017)
   Calvert for identifying this problem and for helping me to
   understand it.
 
-Version 2.29.5 (01/17/2017)
+Version 2.29.5 (01/17/2018)
 
 - Fix to prevent infinite recursion that happens when a simple type
   is defined whose name is the same as it's restriction base type
diff --git a/generateDS.html b/generateDS.html
index a94408a..38fc6cc 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.7</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">February 05, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -3380,7 +3380,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2018-01-27 00:06 UTC.
+Generated on: 2018-02-05 22:01 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateDS.py b/generateDS.py
index b29c78d..b68e947 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -229,7 +229,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.6'
+VERSION = '2.29.7'
 ##VERSION##
 
 BaseStrTypes = six.string_types
@@ -2812,8 +2812,11 @@ def generateExportFn(wrt, prefix, element, namespace, nameSpacesDef):
     name = element.getName()
     base = element.getBase()
     ns_prefix = SchemaNamespaceDict.get(name)
-    if ns_prefix is not None:
-        namespace = ns_prefix + ':'
+    if ns_prefix is not None and ns_prefix[0] is not None:
+        namespace = ns_prefix[0] + ':'
+        ns_def = 'xmlns:{}'.format(ns_prefix[0])
+        if ns_def not in nameSpacesDef:
+            nameSpacesDef += ' {}="{}"'.format(ns_def, ns_prefix[1])
     wrt("    def export(self, outfile, level, namespace_='%s', "
         "name_='%s', namespacedef_='%s', pretty_print=True):\n" %
         (namespace, name, nameSpacesDef))
@@ -4349,7 +4352,7 @@ def processValidatorBodyRestrictions(
         pats1 = restriction.xpath(
             "./xs:pattern/@value", namespaces=ns)
         if pats1:
-            pats2 = ['^{}$'.format(replaceVbars(p1)) for p1 in pats1]
+            pats2 = [u'^{}$'.format(replaceVbars(p1)) for p1 in pats1]
             patterns1.append(pats2)
         #
         # Check for and generate code for each possible type of restriction.
diff --git a/generateDS.txt b/generateDS.txt
index 870ac5e..86be3c3 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.29.6
+:revision: 2.29.7
 
 .. version
 
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index e1920d1..f92b4b0 100644
--- a/generateds_gui_notes.html
+++ b/generateds_gui_notes.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.7</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">February 05, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -401,7 +401,7 @@ $ mv generateds_gui.mo locale/ru/LC_MESSAGES/
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_gui_notes.txt">View document source</a>.
-Generated on: 2018-01-27 00:06 UTC.
+Generated on: 2018-02-05 22:01 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt
index 51ed6e1..e509ff5 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.29.6
+:revision: 2.29.7
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index cabaf5b..59f7cd7 100644
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.6'
+VERSION = '2.29.7'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index b225b20..700cf0d 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.7</td>
 </tr>
 </tbody>
 </table>
@@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">February 05, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -380,7 +380,7 @@ this command for your needs.  For example, you may need to use
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="librarytemplate_howto.txt">View document source</a>.
-Generated on: 2018-01-27 00:06 UTC.
+Generated on: 2018-02-05 22:01 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 70618b2..93e2b37 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.29.6
+:revision: 2.29.7
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 1da1edf..57331e3 100755
--- a/process_includes.py
+++ b/process_includes.py
@@ -40,7 +40,7 @@ except ImportError:
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.6'
+VERSION = '2.29.7'
 ##VERSION##
 
 CatalogDict = {}
@@ -280,7 +280,7 @@ def update_ns_dict(root, ns_dict, options):
             names = ([item.get('name') for item in items1] +
                 [item.get('name') for item in items2])
             for name in names:
-                ns_dict[name] = prefix
+                ns_dict[name] = (prefix, namespace)
 
 
 def get_root_file_paths(node, params, rootPaths, shallow):
diff --git a/setup.py b/setup.py
index 4ea8b3d..4ed191c 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ setup(name="generateDS",
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.29.6",
+    version="2.29.7",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/test.py b/tests/test.py
index 0007f17..2c6c4e0 100755
--- a/tests/test.py
+++ b/tests/test.py
@@ -617,6 +617,7 @@ class GenTest(unittest.TestCase):
             '--member-specs=list -f '
             '-o tests/%s2_sup.py -s tests/%s2_sub.py '
             '--super=%s2_sup '
+            '--external-encoding="utf-8" '
             'tests/%s.xsd'
         )
         t_ = 'validate_simpletypes'
diff --git a/tests/validate_simpletypes.xml b/tests/validate_simpletypes.xml
index ba85927..4f95db3 100644
--- a/tests/validate_simpletypes.xml
+++ b/tests/validate_simpletypes.xml
@@ -30,6 +30,7 @@
         <primative_integer>765</primative_integer>
         <primative_float>54.321</primative_float>
         <vbar_pattern_value>abcd</vbar_pattern_value>
+        <unicode_pattern_value>abçd</unicode_pattern_value>
     </sample1>
     <sample2_bad>
         <integer_range_1_value>2</integer_range_1_value>
@@ -42,6 +43,7 @@
         <totaldigits_value>12.456789</totaldigits_value>
         <anonymous_float_value>0.2</anonymous_float_value>
         <vbar_pattern_value>efgh</vbar_pattern_value>
+        <unicode_pattern_value>efÄŸh</unicode_pattern_value>
     </sample2_bad>
     <sample3_bad>
         <integer_range_1_value>9</integer_range_1_value>
diff --git a/tests/validate_simpletypes.xsd b/tests/validate_simpletypes.xsd
index 17c0007..b6d1dc3 100644
--- a/tests/validate_simpletypes.xsd
+++ b/tests/validate_simpletypes.xsd
@@ -37,6 +37,7 @@
             <xs:element name="datetime_minexcl_value" type="datetime_minexcl_st"/>
             <xs:element name="datetime_maxexcl_value" type="datetime_maxexcl_st"/>
             <xs:element name="vbar_pattern_value" type="vbar_pattern_st"/>
+            <xs:element name="unicode_pattern_value" type="unicode_pattern_st"/>
 
             <!-- Test for use of anonymous simple type. -->
             <xs:element name="anonymous_float_value">
@@ -215,4 +216,10 @@
         </xs:restriction>
     </xs:simpleType>
 
+    <xs:simpleType name="unicode_pattern_st">
+        <xs:restriction base="xs:string">
+            <xs:pattern value="abçd|ef\|gh" />
+        </xs:restriction>
+    </xs:simpleType>
+
 </xs:schema>
diff --git a/tests/validate_simpletypes1_out.xml b/tests/validate_simpletypes1_out.xml
index 8193ffe..25c102e 100644
--- a/tests/validate_simpletypes1_out.xml
+++ b/tests/validate_simpletypes1_out.xml
@@ -21,6 +21,7 @@
         <datetime_minexcl_value>2015-07-01T14:20:10</datetime_minexcl_value>
         <datetime_maxexcl_value>2015-05-01T14:20:10</datetime_maxexcl_value>
         <vbar_pattern_value>abcd</vbar_pattern_value>
+        <unicode_pattern_value>abçd</unicode_pattern_value>
         <anonymous_float_value>2.2</anonymous_float_value>
         <primative_integer>765</primative_integer>
         <primative_float>54.320999999999998</primative_float>
@@ -34,6 +35,7 @@
         <min_max_length_value>mno pqr</min_max_length_value>
         <length_value>012345</length_value>
         <vbar_pattern_value>efgh</vbar_pattern_value>
+        <unicode_pattern_value>efÄŸh</unicode_pattern_value>
         <anonymous_float_value>0.2</anonymous_float_value>
     </sample2_bad>
     <sample3_bad integer_range_1_value_with_default="6">
diff --git a/tests/validate_simpletypes1_sub.py b/tests/validate_simpletypes1_sub.py
index 998fedf..2f67f90 100644
--- a/tests/validate_simpletypes1_sub.py
+++ b/tests/validate_simpletypes1_sub.py
@@ -12,12 +12,13 @@
 #   ('-o', 'tests/validate_simpletypes2_sup.py')
 #   ('-s', 'tests/validate_simpletypes2_sub.py')
 #   ('--super', 'validate_simpletypes2_sup')
+#   ('--external-encoding', 'utf-8')
 #
 # Command line arguments:
 #   tests/validate_simpletypes.xsd
 #
 # Command line:
-#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" tests/validate_simpletypes.xsd
+#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" --external-encoding="utf-8" tests/validate_simpletypes.xsd
 #
 # Current working directory (os.getcwd()):
 #   generateds
@@ -40,7 +41,7 @@ def parsexml_(infile, parser=None, **kwargs):
 # Globals
 #
 
-ExternalEncoding = 'ascii'
+ExternalEncoding = 'utf-8'
 
 #
 # Data representation classes
@@ -55,8 +56,8 @@ supermod.containerType.subclass = containerTypeSub
 
 
 class simpleOneTypeSub(supermod.simpleOneType):
-    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
-        super(simpleOneTypeSub, self).__init__(integer_range_1_value_with_default, integer_range_1_value, pattern_value, token_enum_value, integer_range_incl_value, integer_range_excl_value, min_max_length_value, length_value, totalDigits_value, date_minincl_value, date_maxincl_value, date_minexcl_value, date_maxexcl_value, time_minincl_value, time_maxincl_value, time_minexcl_value, time_maxexcl_value, datetime_minincl_value, datetime_maxincl_value, datetime_minexcl_value, datetime_maxexcl_value, vbar_pattern_value, anonymous_float_value, primative_integer, primative_float, )
+    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, unicode_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
+        super(simpleOneTypeSub, self).__init__(integer_range_1_value_with_default, integer_range_1_value, pattern_value, token_enum_value, integer_range_incl_value, integer_range_excl_value, min_max_length_value, length_value, totalDigits_value, date_minincl_value, date_maxincl_value, date_minexcl_value, date_maxexcl_value, time_minincl_value, time_maxincl_value, time_minexcl_value, time_maxexcl_value, datetime_minincl_value, datetime_maxincl_value, datetime_minexcl_value, datetime_maxexcl_value, vbar_pattern_value, unicode_pattern_value, anonymous_float_value, primative_integer, primative_float, )
 supermod.simpleOneType.subclass = simpleOneTypeSub
 # end class simpleOneTypeSub
 
diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py
index dd6a1fa..a850c1b 100644
--- a/tests/validate_simpletypes1_sup.py
+++ b/tests/validate_simpletypes1_sup.py
@@ -13,12 +13,13 @@
 #   ('-o', 'tests/validate_simpletypes2_sup.py')
 #   ('-s', 'tests/validate_simpletypes2_sub.py')
 #   ('--super', 'validate_simpletypes2_sup')
+#   ('--external-encoding', 'utf-8')
 #
 # Command line arguments:
 #   tests/validate_simpletypes.xsd
 #
 # Command line:
-#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" tests/validate_simpletypes.xsd
+#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" --external-encoding="utf-8" tests/validate_simpletypes.xsd
 #
 # Current working directory (os.getcwd()):
 #   generateds
@@ -451,7 +452,7 @@ except ImportError as exp:
 # Globals
 #
 
-ExternalEncoding = 'ascii'
+ExternalEncoding = 'utf-8'
 Tag_pattern_ = re_.compile(r'({.*})?(.*)')
 String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
 Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
@@ -900,13 +901,14 @@ class simpleOneType(GeneratedsSuper):
         MemberSpec_('datetime_minexcl_value', ['datetime_minexcl_st', 'xs:dateTime'], 0, 0, {u'type': u'xs:dateTime', u'name': u'datetime_minexcl_value'}, None),
         MemberSpec_('datetime_maxexcl_value', ['datetime_maxexcl_st', 'xs:dateTime'], 0, 0, {u'type': u'xs:dateTime', u'name': u'datetime_maxexcl_value'}, None),
         MemberSpec_('vbar_pattern_value', ['vbar_pattern_st', 'xs:string'], 0, 0, {u'type': u'xs:string', u'name': u'vbar_pattern_value'}, None),
+        MemberSpec_('unicode_pattern_value', ['unicode_pattern_st', 'xs:string'], 0, 0, {u'type': u'xs:string', u'name': u'unicode_pattern_value'}, None),
         MemberSpec_('anonymous_float_value', ['anonymous_float_valueType', 'xs:float'], 0, 0, {u'type': u'xs:float', u'name': u'anonymous_float_value'}, None),
         MemberSpec_('primative_integer', 'xs:integer', 0, 0, {u'type': u'xs:integer', u'name': u'primative_integer'}, None),
         MemberSpec_('primative_float', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'primative_float'}, None),
     ]
     subclass = None
     superclass = None
-    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
+    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, unicode_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
         self.original_tagname_ = None
         self.integer_range_1_value_with_default = _cast(int, integer_range_1_value_with_default)
         self.integer_range_1_value = integer_range_1_value
@@ -987,6 +989,8 @@ class simpleOneType(GeneratedsSuper):
         self.datetime_maxexcl_value = initvalue_
         self.vbar_pattern_value = vbar_pattern_value
         self.validate_vbar_pattern_st(self.vbar_pattern_value)
+        self.unicode_pattern_value = unicode_pattern_value
+        self.validate_unicode_pattern_st(self.unicode_pattern_value)
         self.anonymous_float_value = anonymous_float_value
         self.validate_anonymous_float_valueType(self.anonymous_float_value)
         self.primative_integer = primative_integer
@@ -1044,6 +1048,8 @@ class simpleOneType(GeneratedsSuper):
     def set_datetime_maxexcl_value(self, datetime_maxexcl_value): self.datetime_maxexcl_value = datetime_maxexcl_value
     def get_vbar_pattern_value(self): return self.vbar_pattern_value
     def set_vbar_pattern_value(self, vbar_pattern_value): self.vbar_pattern_value = vbar_pattern_value
+    def get_unicode_pattern_value(self): return self.unicode_pattern_value
+    def set_unicode_pattern_value(self, unicode_pattern_value): self.unicode_pattern_value = unicode_pattern_value
     def get_anonymous_float_value(self): return self.anonymous_float_value
     def set_anonymous_float_value(self, anonymous_float_value): self.anonymous_float_value = anonymous_float_value
     def get_primative_integer(self): return self.primative_integer
@@ -1067,7 +1073,7 @@ class simpleOneType(GeneratedsSuper):
             if not self.gds_validate_simple_patterns(
                     self.validate_pattern_st_patterns_, value):
                 warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-    validate_pattern_st_patterns_ = [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+    validate_pattern_st_patterns_ = [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
     def validate_token_enum_st(self, value):
         # Validate type token_enum_st, a restriction on xs:NMTOKEN.
         if value is not None and Validate_simpletypes_:
@@ -1177,7 +1183,14 @@ class simpleOneType(GeneratedsSuper):
             if not self.gds_validate_simple_patterns(
                     self.validate_vbar_pattern_st_patterns_, value):
                 warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_vbar_pattern_st_patterns_, ))
-    validate_vbar_pattern_st_patterns_ = [['^abcd$|^ef\\|gh$']]
+    validate_vbar_pattern_st_patterns_ = [[u'^abcd$|^ef\\|gh$']]
+    def validate_unicode_pattern_st(self, value):
+        # Validate type unicode_pattern_st, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            if not self.gds_validate_simple_patterns(
+                    self.validate_unicode_pattern_st_patterns_, value):
+                warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_unicode_pattern_st_patterns_, ))
+    validate_unicode_pattern_st_patterns_ = [[u'^ab\xe7d$|^ef\\|gh$']]
     def validate_anonymous_float_valueType(self, value):
         # Validate type anonymous_float_valueType, a restriction on xs:float.
         if value is not None and Validate_simpletypes_:
@@ -1208,6 +1221,7 @@ class simpleOneType(GeneratedsSuper):
             self.datetime_minexcl_value is not None or
             self.datetime_maxexcl_value is not None or
             self.vbar_pattern_value is not None or
+            self.unicode_pattern_value is not None or
             self.anonymous_float_value is not None or
             self.primative_integer is not None or
             self.primative_float is not None
@@ -1308,6 +1322,9 @@ class simpleOneType(GeneratedsSuper):
         if self.vbar_pattern_value is not None:
             showIndent(outfile, level, pretty_print)
             outfile.write('<vbar_pattern_value>%s</vbar_pattern_value>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.vbar_pattern_value), input_name='vbar_pattern_value')), eol_))
+        if self.unicode_pattern_value is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<unicode_pattern_value>%s</unicode_pattern_value>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.unicode_pattern_value), input_name='unicode_pattern_value')), eol_))
         if self.anonymous_float_value is not None:
             showIndent(outfile, level, pretty_print)
             outfile.write('<anonymous_float_value>%s</anonymous_float_value>%s' % (self.gds_format_float(self.anonymous_float_value, input_name='anonymous_float_value'), eol_))
@@ -1473,6 +1490,12 @@ class simpleOneType(GeneratedsSuper):
             self.vbar_pattern_value = vbar_pattern_value_
             # validate type vbar_pattern_st
             self.validate_vbar_pattern_st(self.vbar_pattern_value)
+        elif nodeName_ == 'unicode_pattern_value':
+            unicode_pattern_value_ = child_.text
+            unicode_pattern_value_ = self.gds_validate_string(unicode_pattern_value_, node, 'unicode_pattern_value')
+            self.unicode_pattern_value = unicode_pattern_value_
+            # validate type unicode_pattern_st
+            self.validate_unicode_pattern_st(self.unicode_pattern_value)
         elif nodeName_ == 'anonymous_float_value':
             sval_ = child_.text
             try:
diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt
index 2b72df6..3f77f4d 100644
--- a/tests/validate_simpletypes1_warnings.txt
+++ b/tests/validate_simpletypes1_warnings.txt
@@ -1,60 +1,62 @@
-tests/validate_simpletypes2_sup.py:1059: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:1065: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on integer_range_1_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1069: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1075: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1082: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st
+tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st
   warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on token_enum_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1089: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1095: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on integer_range_incl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1094: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st
+tests/validate_simpletypes2_sup.py:1100: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on integer_range_excl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1103: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1109: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st
   warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on min_max_length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1108: UserWarning: Value "012345" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1114: UserWarning: Value "012345" does not match xsd length restriction on length_st
   warnings_.warn('Value "%(value)s" does not match xsd length restriction on length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1185: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1198: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on anonymous_float_valueType' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1179: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^abcd$|^ef\\|gh$']]
+tests/validate_simpletypes2_sup.py:1185: UserWarning: Value "efgh" does not match xsd pattern restrictions: [[u'^abcd$|^ef\\|gh$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_vbar_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1061: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:1192: UserWarning: Value "efÄŸh" does not match xsd pattern restrictions: [[u'^ab\xe7d$|^ef\\|gh$']]
+  warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_unicode_pattern_st_patterns_, ))
+tests/validate_simpletypes2_sup.py:1067: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on integer_range_1_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1069: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1075: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1087: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1093: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on integer_range_incl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1101: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1107: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st
   warnings_.warn('Value "%(value)s" does not match xsd maxLength restriction on min_max_length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1108: UserWarning: Value "01234567890" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1114: UserWarning: Value "01234567890" does not match xsd length restriction on length_st
   warnings_.warn('Value "%(value)s" does not match xsd length restriction on length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1118: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st
+tests/validate_simpletypes2_sup.py:1124: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on date_minincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1123: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st
+tests/validate_simpletypes2_sup.py:1129: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on date_maxincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1128: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st
+tests/validate_simpletypes2_sup.py:1134: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on date_minexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1133: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st
+tests/validate_simpletypes2_sup.py:1139: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on date_maxexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1138: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st
+tests/validate_simpletypes2_sup.py:1144: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on time_minincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1143: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st
+tests/validate_simpletypes2_sup.py:1149: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on time_maxincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1148: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st
+tests/validate_simpletypes2_sup.py:1154: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on time_minexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1153: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st
+tests/validate_simpletypes2_sup.py:1159: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on time_maxexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1158: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st
+tests/validate_simpletypes2_sup.py:1164: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on datetime_minincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1163: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st
+tests/validate_simpletypes2_sup.py:1169: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on datetime_maxincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1168: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st
+tests/validate_simpletypes2_sup.py:1174: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on datetime_minexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1173: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st
+tests/validate_simpletypes2_sup.py:1179: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on datetime_maxexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1187: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1200: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on anonymous_float_valueType' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1066: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st
+tests/validate_simpletypes2_sup.py:1072: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st
   warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on pattern_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1069: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1075: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1611: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType
+tests/validate_simpletypes2_sup.py:1634: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType
   warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on simpleTwoElementTwoType' % {"value" : value.encode("utf-8")} )
diff --git a/tests/validate_simpletypes2_sub.py b/tests/validate_simpletypes2_sub.py
index 998fedf..2f67f90 100644
--- a/tests/validate_simpletypes2_sub.py
+++ b/tests/validate_simpletypes2_sub.py
@@ -12,12 +12,13 @@
 #   ('-o', 'tests/validate_simpletypes2_sup.py')
 #   ('-s', 'tests/validate_simpletypes2_sub.py')
 #   ('--super', 'validate_simpletypes2_sup')
+#   ('--external-encoding', 'utf-8')
 #
 # Command line arguments:
 #   tests/validate_simpletypes.xsd
 #
 # Command line:
-#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" tests/validate_simpletypes.xsd
+#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" --external-encoding="utf-8" tests/validate_simpletypes.xsd
 #
 # Current working directory (os.getcwd()):
 #   generateds
@@ -40,7 +41,7 @@ def parsexml_(infile, parser=None, **kwargs):
 # Globals
 #
 
-ExternalEncoding = 'ascii'
+ExternalEncoding = 'utf-8'
 
 #
 # Data representation classes
@@ -55,8 +56,8 @@ supermod.containerType.subclass = containerTypeSub
 
 
 class simpleOneTypeSub(supermod.simpleOneType):
-    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
-        super(simpleOneTypeSub, self).__init__(integer_range_1_value_with_default, integer_range_1_value, pattern_value, token_enum_value, integer_range_incl_value, integer_range_excl_value, min_max_length_value, length_value, totalDigits_value, date_minincl_value, date_maxincl_value, date_minexcl_value, date_maxexcl_value, time_minincl_value, time_maxincl_value, time_minexcl_value, time_maxexcl_value, datetime_minincl_value, datetime_maxincl_value, datetime_minexcl_value, datetime_maxexcl_value, vbar_pattern_value, anonymous_float_value, primative_integer, primative_float, )
+    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, unicode_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
+        super(simpleOneTypeSub, self).__init__(integer_range_1_value_with_default, integer_range_1_value, pattern_value, token_enum_value, integer_range_incl_value, integer_range_excl_value, min_max_length_value, length_value, totalDigits_value, date_minincl_value, date_maxincl_value, date_minexcl_value, date_maxexcl_value, time_minincl_value, time_maxincl_value, time_minexcl_value, time_maxexcl_value, datetime_minincl_value, datetime_maxincl_value, datetime_minexcl_value, datetime_maxexcl_value, vbar_pattern_value, unicode_pattern_value, anonymous_float_value, primative_integer, primative_float, )
 supermod.simpleOneType.subclass = simpleOneTypeSub
 # end class simpleOneTypeSub
 
diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py
index dd6a1fa..a850c1b 100644
--- a/tests/validate_simpletypes2_sup.py
+++ b/tests/validate_simpletypes2_sup.py
@@ -13,12 +13,13 @@
 #   ('-o', 'tests/validate_simpletypes2_sup.py')
 #   ('-s', 'tests/validate_simpletypes2_sub.py')
 #   ('--super', 'validate_simpletypes2_sup')
+#   ('--external-encoding', 'utf-8')
 #
 # Command line arguments:
 #   tests/validate_simpletypes.xsd
 #
 # Command line:
-#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" tests/validate_simpletypes.xsd
+#   generateDS.py --no-dates --no-versions --member-specs="list" -f -o "tests/validate_simpletypes2_sup.py" -s "tests/validate_simpletypes2_sub.py" --super="validate_simpletypes2_sup" --external-encoding="utf-8" tests/validate_simpletypes.xsd
 #
 # Current working directory (os.getcwd()):
 #   generateds
@@ -451,7 +452,7 @@ except ImportError as exp:
 # Globals
 #
 
-ExternalEncoding = 'ascii'
+ExternalEncoding = 'utf-8'
 Tag_pattern_ = re_.compile(r'({.*})?(.*)')
 String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
 Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
@@ -900,13 +901,14 @@ class simpleOneType(GeneratedsSuper):
         MemberSpec_('datetime_minexcl_value', ['datetime_minexcl_st', 'xs:dateTime'], 0, 0, {u'type': u'xs:dateTime', u'name': u'datetime_minexcl_value'}, None),
         MemberSpec_('datetime_maxexcl_value', ['datetime_maxexcl_st', 'xs:dateTime'], 0, 0, {u'type': u'xs:dateTime', u'name': u'datetime_maxexcl_value'}, None),
         MemberSpec_('vbar_pattern_value', ['vbar_pattern_st', 'xs:string'], 0, 0, {u'type': u'xs:string', u'name': u'vbar_pattern_value'}, None),
+        MemberSpec_('unicode_pattern_value', ['unicode_pattern_st', 'xs:string'], 0, 0, {u'type': u'xs:string', u'name': u'unicode_pattern_value'}, None),
         MemberSpec_('anonymous_float_value', ['anonymous_float_valueType', 'xs:float'], 0, 0, {u'type': u'xs:float', u'name': u'anonymous_float_value'}, None),
         MemberSpec_('primative_integer', 'xs:integer', 0, 0, {u'type': u'xs:integer', u'name': u'primative_integer'}, None),
         MemberSpec_('primative_float', 'xs:float', 0, 0, {u'type': u'xs:float', u'name': u'primative_float'}, None),
     ]
     subclass = None
     superclass = None
-    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
+    def __init__(self, integer_range_1_value_with_default='6', integer_range_1_value=5, pattern_value=None, token_enum_value=None, integer_range_incl_value=None, integer_range_excl_value=None, min_max_length_value=None, length_value=None, totalDigits_value=None, date_minincl_value=None, date_maxincl_value=None, date_minexcl_value=None, date_maxexcl_value=None, time_minincl_value=None, time_maxincl_value=None, time_minexcl_value=None, time_maxexcl_value=None, datetime_minincl_value=None, datetime_maxincl_value=None, datetime_minexcl_value=None, datetime_maxexcl_value=None, vbar_pattern_value=None, unicode_pattern_value=None, anonymous_float_value=None, primative_integer=None, primative_float=None):
         self.original_tagname_ = None
         self.integer_range_1_value_with_default = _cast(int, integer_range_1_value_with_default)
         self.integer_range_1_value = integer_range_1_value
@@ -987,6 +989,8 @@ class simpleOneType(GeneratedsSuper):
         self.datetime_maxexcl_value = initvalue_
         self.vbar_pattern_value = vbar_pattern_value
         self.validate_vbar_pattern_st(self.vbar_pattern_value)
+        self.unicode_pattern_value = unicode_pattern_value
+        self.validate_unicode_pattern_st(self.unicode_pattern_value)
         self.anonymous_float_value = anonymous_float_value
         self.validate_anonymous_float_valueType(self.anonymous_float_value)
         self.primative_integer = primative_integer
@@ -1044,6 +1048,8 @@ class simpleOneType(GeneratedsSuper):
     def set_datetime_maxexcl_value(self, datetime_maxexcl_value): self.datetime_maxexcl_value = datetime_maxexcl_value
     def get_vbar_pattern_value(self): return self.vbar_pattern_value
     def set_vbar_pattern_value(self, vbar_pattern_value): self.vbar_pattern_value = vbar_pattern_value
+    def get_unicode_pattern_value(self): return self.unicode_pattern_value
+    def set_unicode_pattern_value(self, unicode_pattern_value): self.unicode_pattern_value = unicode_pattern_value
     def get_anonymous_float_value(self): return self.anonymous_float_value
     def set_anonymous_float_value(self, anonymous_float_value): self.anonymous_float_value = anonymous_float_value
     def get_primative_integer(self): return self.primative_integer
@@ -1067,7 +1073,7 @@ class simpleOneType(GeneratedsSuper):
             if not self.gds_validate_simple_patterns(
                     self.validate_pattern_st_patterns_, value):
                 warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-    validate_pattern_st_patterns_ = [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+    validate_pattern_st_patterns_ = [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
     def validate_token_enum_st(self, value):
         # Validate type token_enum_st, a restriction on xs:NMTOKEN.
         if value is not None and Validate_simpletypes_:
@@ -1177,7 +1183,14 @@ class simpleOneType(GeneratedsSuper):
             if not self.gds_validate_simple_patterns(
                     self.validate_vbar_pattern_st_patterns_, value):
                 warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_vbar_pattern_st_patterns_, ))
-    validate_vbar_pattern_st_patterns_ = [['^abcd$|^ef\\|gh$']]
+    validate_vbar_pattern_st_patterns_ = [[u'^abcd$|^ef\\|gh$']]
+    def validate_unicode_pattern_st(self, value):
+        # Validate type unicode_pattern_st, a restriction on xs:string.
+        if value is not None and Validate_simpletypes_:
+            if not self.gds_validate_simple_patterns(
+                    self.validate_unicode_pattern_st_patterns_, value):
+                warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_unicode_pattern_st_patterns_, ))
+    validate_unicode_pattern_st_patterns_ = [[u'^ab\xe7d$|^ef\\|gh$']]
     def validate_anonymous_float_valueType(self, value):
         # Validate type anonymous_float_valueType, a restriction on xs:float.
         if value is not None and Validate_simpletypes_:
@@ -1208,6 +1221,7 @@ class simpleOneType(GeneratedsSuper):
             self.datetime_minexcl_value is not None or
             self.datetime_maxexcl_value is not None or
             self.vbar_pattern_value is not None or
+            self.unicode_pattern_value is not None or
             self.anonymous_float_value is not None or
             self.primative_integer is not None or
             self.primative_float is not None
@@ -1308,6 +1322,9 @@ class simpleOneType(GeneratedsSuper):
         if self.vbar_pattern_value is not None:
             showIndent(outfile, level, pretty_print)
             outfile.write('<vbar_pattern_value>%s</vbar_pattern_value>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.vbar_pattern_value), input_name='vbar_pattern_value')), eol_))
+        if self.unicode_pattern_value is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<unicode_pattern_value>%s</unicode_pattern_value>%s' % (self.gds_encode(self.gds_format_string(quote_xml(self.unicode_pattern_value), input_name='unicode_pattern_value')), eol_))
         if self.anonymous_float_value is not None:
             showIndent(outfile, level, pretty_print)
             outfile.write('<anonymous_float_value>%s</anonymous_float_value>%s' % (self.gds_format_float(self.anonymous_float_value, input_name='anonymous_float_value'), eol_))
@@ -1473,6 +1490,12 @@ class simpleOneType(GeneratedsSuper):
             self.vbar_pattern_value = vbar_pattern_value_
             # validate type vbar_pattern_st
             self.validate_vbar_pattern_st(self.vbar_pattern_value)
+        elif nodeName_ == 'unicode_pattern_value':
+            unicode_pattern_value_ = child_.text
+            unicode_pattern_value_ = self.gds_validate_string(unicode_pattern_value_, node, 'unicode_pattern_value')
+            self.unicode_pattern_value = unicode_pattern_value_
+            # validate type unicode_pattern_st
+            self.validate_unicode_pattern_st(self.unicode_pattern_value)
         elif nodeName_ == 'anonymous_float_value':
             sval_ = child_.text
             try:
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index e2c7c02..6103b5a 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -219,7 +219,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.7</td>
 </tr>
 </tbody>
 </table>
@@ -228,7 +228,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">February 05, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_tutorial.txt">View document source</a>.
-Generated on: 2018-01-27 00:06 UTC.
+Generated on: 2018-02-05 22:01 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index d2a3484..0601dee 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.29.6
+:revision: 2.29.7
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 965b5f0d063bd7006612b72e3588a4f4755970ca..6af5372e5e0e6031da3fd616a99d1968c0f78bce 100644
GIT binary patch
delta 13172
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

delta 13077
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

-- 
GitLab