From d0c4cd29d7812eb9d7923b9240186c33a4e167e1 Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Fri, 23 Jun 2017 16:20:33 -0700
Subject: [PATCH] Enhancements for one-per and CL options
 --disable-generatedssuper-lookup and --disable-xml

---
 MANIFEST.in                              |  18 +-
 README.rst                               |  33 +-
 generateDS.html                          |  45 +-
 generateDS.py                            |  54 +-
 generateDS.txt                           |  42 +-
 generateds_gui_notes.html                |   8 +-
 generateds_gui_notes.txt                 |   2 +-
 gui/generateds_gui.py                    |   2 +-
 librarytemplate_howto.html               |   8 +-
 librarytemplate_howto.txt                |   2 +-
 process_includes.py                      |   2 +-
 setup.py                                 |   2 +-
 tests/OnePer/oneperType00_2One.py        |  22 +-
 tests/OnePer/oneperType01_2One.py        |  22 +-
 tests/OnePer/oneperType02_2One.py        |  22 +-
 tests/OnePer/oneperType03_2One.py        |  22 +-
 tests/abstract_type1_sup.py              |  22 +-
 tests/annotations1_sup.py                |  22 +-
 tests/anonymous_type1_sup.py             |  22 +-
 tests/anysimpletype1_sup.py              |  22 +-
 tests/anywildcard1_sup.py                |  22 +-
 tests/attr_groups1_sup.py                |  22 +-
 tests/catalogtest1_sup.py                |  22 +-
 tests/cdata1_sup.py                      |  22 +-
 tests/check_results.rb                   |   0
 tests/cleanupname1_sup.py                |  22 +-
 tests/defaults_cases1_sup.py             |  22 +-
 tests/defaults_coverage1_sup.py          |  22 +-
 tests/disable_xml_super.xsd              |  16 +
 tests/disable_xml_super1_sub.py          |  59 ++
 tests/disable_xml_super1_sup.py          | 758 +++++++++++++++++++++++
 tests/extensions1_sup.py                 |  22 +-
 tests/ipo1_sup.py                        |  22 +-
 tests/ipo2_sup.py                        |  22 +-
 tests/mapcleanname1_sup.py               |  22 +-
 tests/nested_def1_sup.py                 |  22 +-
 tests/out1_sup.py                        |  22 +-
 tests/people_procincl1_sup.py            |  22 +-
 tests/prefix_classname1_sup.py           |  22 +-
 tests/recursive_simpletype1_sup.py       |  22 +-
 tests/reference_simpletype1_sup.py       |  22 +-
 tests/rem_dup_elems1_sup.py              |  22 +-
 tests/simplecontent_restriction1_sup.py  |  22 +-
 tests/simpletype_memberspecs1_sup.py     |  22 +-
 tests/simpletypes_other1_sup.py          |  22 +-
 tests/test.py                            |  23 +
 tests/to_etree1_sup.py                   |  22 +-
 tests/validate_simpletypes1_sup.py       |  22 +-
 tests/validate_simpletypes1_warnings.txt |  60 +-
 tests/validate_simpletypes2_sup.py       |  22 +-
 tutorial/generateds_tutorial.html        |   8 +-
 tutorial/generateds_tutorial.txt         |   2 +-
 tutorial/generateds_tutorial.zip         | Bin 48766 -> 48768 bytes
 updateversion.py                         |   0
 54 files changed, 1548 insertions(+), 300 deletions(-)
 mode change 100644 => 100755 tests/check_results.rb
 create mode 100644 tests/disable_xml_super.xsd
 create mode 100644 tests/disable_xml_super1_sub.py
 create mode 100644 tests/disable_xml_super1_sup.py
 mode change 100644 => 100755 tests/test.py
 mode change 100644 => 100755 updateversion.py

diff --git a/MANIFEST.in b/MANIFEST.in
index 268eadd..849b168 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -81,7 +81,7 @@ include tests/abstract_type.xsd
 include tests/abstract_type1_sup.py tests/abstract_type1_sub.py
 include tests/abstract_type2_sup.py tests/abstract_type2_sub.py
 include tests/simpletypes_other.xsd
-include tests/simpletypes_other1_sub.py tests/simpletypes1_other_sup.py
+include tests/simpletypes_other1_sub.py tests/simpletypes_other1_sup.py
 include tests/simpletypes_other2_sub.py tests/simpletypes_other2_sup.py
 include tests/attr_groups.xsd
 include tests/attr_groups1_sup.py tests/attr_groups1_sub.py
@@ -121,6 +121,17 @@ include tests/validate_simpletypes1_sub.py tests/validate_simpletypes1_sup.py
 include tests/validate_simpletypes1_warnings.txt
 include tests/validate_simpletypes2_sub.py tests/validate_simpletypes2_sup.py
 include tests/validate_simpletypes.xml tests/validate_simpletypes.xsd
+include tests/disable_xml_super.xsd
+include tests/disable_xml_super1_sup.py
+include tests/disable_xml_super1_sub.py
+include tests/rem_dup_elems.xsd
+include tests/rem_dup_elems.xml
+include tests/rem_dup_elems1_out.xml
+include tests/rem_dup_elems1_sup.py
+include tests/rem_dup_elems1_sub.py
+include tests/reference_simpletype.xsd
+include tests/reference_simpletype1_sup.py
+include tests/reference_simpletype1_sub.py
 
 include gui/generateds_gui.py
 include gui/generateds_gui.glade
@@ -146,4 +157,7 @@ include tutorial/Code/people_appl1.py
 include tutorial/Code/upcase_names.py
 include tutorial/Code/upcase_names_appl.py  
 
-
+include utils/batch_generate.py*
+include utils/collect_schema_locations.py*
+include utils/README.txt
+include utils/show_schema_hierarchy.py*
diff --git a/README.rst b/README.rst
index 95532ba..8c9435b 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,37 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.28a (06/23/2017)
+
+Significant work by Alim Gokkaya.  Thank you, Alim.
+
+Here's a summary of what's been changed:
+
+- Added new command-line options:
+
+  - ``--disable-xml``: Toggles the generation of XML serialization
+    related code
+  - ``--disable-generatedssuper-lookup``: Disables generation of the
+    try-except lookup for a `generatedssuper` module
+  - ``--use-source-file-as-module-name``: Sets the source XSD file name as
+    the target module name in the one file per XSD mode
+
+- Retained ``xsd:choice`` related information in the generated class
+  ``MemberSpec``.
+- Retained the original XML schema attribute definitions in the generated
+  class members.
+- Fixed generation of ``import`` statements for the base classes.
+- Fixed class not being generated when parent class is defined in
+  another XML schema file.
+- Fixed fqn-module mapping being unavailable for the classes defined
+  in imported XML schema files.
+- Fixed attribute names are sometimes not cleaned-up from the prefix
+- Fixed ``xsd:simpleType`` validations methods are not being generated in
+  ``one-file-per-xsd`` mode.
+- Fixed equality check against objects defining extra attributes.
+- Added unit test for command line options ``--disable-xml`` and
+  ``--disable-generatedssuper-lookup``.
+
 Version 2.27b (06/09/2017)
 
 - Fixed a bug that occurred when an element definition contains a
@@ -329,7 +360,7 @@ Version 2.21a (04/01/2016)
   The GUI front end must be run under Python 3, and you must install
   Python support for Gtk.
   Aleksandr has also provided a Russian translation of the labels
-  etc in the user interface.  You can run that with:
+  etc in the user interface.  You can run that with::
 
       $ cd /path/to/generateds/gui
       $ python3 generateds_gui.py --impl-gui=generateds_gui_ru.glade
diff --git a/generateDS.html b/generateDS.html
index 49a5d29..bc11789 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.13.2a: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>generateDS -- Generate Data Structures from XML Schema</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -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.27a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28a</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">June 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">June 23, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -580,6 +580,10 @@ Options:
                              &quot;new&quot; - Name getters/setters get_var()/set_var().
                              &quot;none&quot; - Do not generate getter/setter methods.
                              Default is &quot;new&quot;.
+    --use-source-file-as-module-name
+                             Used in conjunction with --one-file-per-xsd to
+                             use the source XSD file names to determine the
+                             module name of the generated classes.
     --user-methods= &lt;module&gt;,
     -u &lt;module&gt;              Optional module containing user methods.  See
                              section &quot;User Methods&quot; in the documentation.
@@ -639,6 +643,12 @@ Options:
                                      to XML)
                              Example: &quot;write etree&quot;
                              Default: &quot;write&quot;
+    --disable-generatedssuper-lookup
+                             Disables the generatetion of the lookup logic for
+                             presence of an external module from which to load
+                             a custom `GeneratedsSuper` base-class definition.
+    --disable-xml            Disables generation of all XML build/export
+                             methods and command line interface
     --preserve-cdata-tags    Preserve CDATA tags.  Default: False
     --cleanup-name-list=&lt;replacement-map&gt;
                              Specifies list of 2-tuples used for cleaning
@@ -807,6 +817,12 @@ methods.  Possible values are:</p>
 </ul>
 <p class="last">The default is &quot;new&quot;.</p>
 </dd>
+<dt>use-source-file-as-module-name</dt>
+<dd>Used in conjunction with and only has an effect when used with
+<tt class="docutils literal"><span class="pre">--one-file-per-xsd</span></tt>.  The effect of this option is to use the
+source XML schema file names to determine the module name of the
+generated classes.  Without this option, the first root element
+is used to construct module names.  The default is False.</dd>
 <dt>u, user-methods=&lt;module&gt;</dt>
 <dd>If specified, <tt class="docutils literal">generateDS.py</tt> will add methods to generated
 classes as specified in the indicated module.  For more
@@ -906,6 +922,27 @@ and use any of lxml's other capabilities.</li>
 <p class="last">For example: <tt class="docutils literal"><span class="pre">--export=&quot;write</span> etree&quot;</tt> and <tt class="docutils literal"><span class="pre">--export=&quot;write&quot;</span></tt>.  The
 default is: <tt class="docutils literal"><span class="pre">--export=&quot;write&quot;</span></tt>.</p>
 </dd>
+<dt>disable-generatedssuper-lookup</dt>
+<dd>Disables the generation of code implementing the lookup for
+presence of an external module from which to load a custom
+replacement for the default <tt class="docutils literal">GeneratedsSuper</tt> base-class.
+With this flag, unconditionally uses the built-in implementation
+of <tt class="docutils literal">GeneratedsSuper</tt>.  (Suggestion: In order to get a picture
+of what difference this option makes, you might consider
+generating modules both with and without it, and then comparing
+the results with <tt class="docutils literal">diff</tt>.)  The default is False.</dd>
+<dt>disable-xml</dt>
+<dd>Disables generation of code that enables XML build/export
+methods and command line interface.  Actually, the code is
+there, but is commented out.  If you enable this option, the
+generated modules will <em>not</em> contain code for the following: (1)
+run as a script without explicitly running <tt class="docutils literal">python</tt> (the
+<tt class="docutils literal"><span class="pre">#!/usr/bin/env</span> python</tt> line is omitted); (2) import
+<tt class="docutils literal">lxml.etree</tt>; (3) parse an XML file; (4) export an XML file.
+(Suggestion: In order to get a picture of what difference this
+option makes, you might consider generating modules both with
+and without it, and then comparing the results with <tt class="docutils literal">diff</tt>.)
+The default is False.</dd>
 <dt>preserve-cdata-tags</dt>
 <dd>Preserve CDATA tags.  Normally, CDATA tags (&quot;&lt;![CDATA[ ... ]]&gt;&quot;)
 are dropped while parsing an XML instance document.  If this
@@ -3343,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: 2017-06-01 16:04 UTC.
+Generated on: 2017-06-23 23:12 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 061d136..9b591ec 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -109,10 +109,9 @@ Options:
                              Example: "write etree"
                              Default: "write"
     --disable-generatedssuper-lookup
-                             Disables the generatetion of the  lookup logic for
-                             presence of an external module to load a custom
-                             `GeneratedsSuper` base-class definition from.
-                             be generated.
+                             Disables the generatetion of the lookup logic for
+                             presence of an external module from which to load
+                             a custom `GeneratedsSuper` base-class definition.
     --disable-xml            Disables generation of all XML build/export
                              methods and command line interface
     --preserve-cdata-tags    Preserve CDATA tags.  Default: False
@@ -228,7 +227,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.27a'
+VERSION = '2.28a'
 ##VERSION##
 
 if sys.version_info.major == 2:
@@ -1805,7 +1804,7 @@ class XschemaHandler(handler.ContentHandler):
                     self.stack[-1].setSimpleType(1)
                 element = SimpleTypeElement(stName)
                 SimpleTypeDict[stName] = element
-                SimpleTypeDict[Targetnamespace+":"+stName] = element
+                SimpleTypeDict[Targetnamespace + ":" + stName] = element
                 self.stack.append(element)
             self.inSimpleType += 1
         elif name == RestrictionType:
@@ -4797,10 +4796,12 @@ def generateMemberSpec(wrt, element):
         item4 = 1 if attrDef.getUse() == 'optional' else 0
         if generateDict:
             item = "        '%s': MemberSpec_('%s', '%s', %d, %d, %s)," % (
-                item1, item1, item2, item3, item4, repr({'use':attrDef.getUse()}))
+                item1, item1, item2, item3, item4, repr(
+                    {'use': attrDef.getUse()}))
         else:
             item = "        MemberSpec_('%s', '%s', %d, %d, %s)," % (
-                item1, item2, item3, item4, repr({'use':attrDef.getUse()}))
+                item1, item2, item3, item4, repr(
+                    {'use': attrDef.getUse()}))
         add(item)
     for child in element.getChildren():
         name = cleanupName(child.getCleanName())
@@ -5260,7 +5261,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-#xmldisable#    def export(self, outfile, level, name, namespace, pretty_print=True):
+#xmldisable#    def export(self, outfile, level, name, namespace,
+#xmldisable#               pretty_print=True):
 #xmldisable#        if self.category == MixedContainer.CategoryText:
 #xmldisable#            # Prevent exporting empty content as empty lines.
 #xmldisable#            if self.value.strip():
@@ -5269,7 +5271,8 @@ class MixedContainer:
 #xmldisable#            self.exportSimple(outfile, level, name)
 #xmldisable#        else:    # category == MixedContainer.CategoryComplex
 #xmldisable#            self.value.export(
-#xmldisable#                outfile, level, namespace, name, pretty_print=pretty_print)
+#xmldisable#                outfile, level, namespace, name,
+#xmldisable#                pretty_print=pretty_print)
 #xmldisable#    def exportSimple(self, outfile, level, name):
 #xmldisable#        if self.content_type == MixedContainer.TypeString:
 #xmldisable#            outfile.write('<%s>%s</%s>' % (
@@ -5287,7 +5290,9 @@ class MixedContainer:
 #xmldisable#                self.name, self.value, self.name))
 #xmldisable#        elif self.content_type == MixedContainer.TypeBase64:
 #xmldisable#            outfile.write('<%s>%s</%s>' % (
-#xmldisable#                self.name, base64.b64encode(self.value), self.name))
+#xmldisable#                self.name,
+#xmldisable#                base64.b64encode(self.value),
+#xmldisable#                self.name))
 #xmldisable#    def to_etree(self, element):
 #xmldisable#        if self.category == MixedContainer.CategoryText:
 #xmldisable#            # Prevent exporting empty content as empty lines.
@@ -5303,7 +5308,8 @@ class MixedContainer:
 #xmldisable#                    else:
 #xmldisable#                        element.text += self.value
 #xmldisable#        elif self.category == MixedContainer.CategorySimple:
-#xmldisable#            subelement = etree_.SubElement(element, '%s' % self.name)
+#xmldisable#            subelement = etree_.SubElement(
+#xmldisable#                element, '%s' % self.name)
 #xmldisable#            subelement.text = self.to_etree_simple()
 #xmldisable#        else:    # category == MixedContainer.CategoryComplex
 #xmldisable#            self.value.to_etree(element)
@@ -5326,12 +5332,14 @@ class MixedContainer:
 #xmldisable#            showIndent(outfile, level)
 #xmldisable#            outfile.write(
 #xmldisable#                'model_.MixedContainer(%d, %d, "%s", "%s"),\\n' % (
-#xmldisable#                    self.category, self.content_type, self.name, self.value))
+#xmldisable#                    self.category, self.content_type,
+#xmldisable#                    self.name, self.value))
 #xmldisable#        elif self.category == MixedContainer.CategorySimple:
 #xmldisable#            showIndent(outfile, level)
 #xmldisable#            outfile.write(
 #xmldisable#                'model_.MixedContainer(%d, %d, "%s", "%s"),\\n' % (
-#xmldisable#                    self.category, self.content_type, self.name, self.value))
+#xmldisable#                    self.category, self.content_type,
+#xmldisable#                    self.name, self.value))
 #xmldisable#        else:    # category == MixedContainer.CategoryComplex
 #xmldisable#            showIndent(outfile, level)
 #xmldisable#            outfile.write(
@@ -5343,7 +5351,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
@@ -5801,8 +5810,12 @@ def generateHeader(wrt, prefix, options, args, externalImports):
     from generatedssuper import GeneratedsSuper
 except ImportError as exp:
 """
-        for line in StringIO.StringIO(import_string).readlines():
-            s0 += "    "+line
+        if sys.version_info.major == 2:
+            outfile = StringIO.StringIO
+        else:
+            outfile = io.StringIO
+        for line in outfile(import_string).readlines():
+            s0 += "    " + line
         import_string = s0
 
     s1 = TEMPLATE_HEADER.format(
@@ -6617,9 +6630,9 @@ def getImportsForExternalXsds(root):
                     type = schemaElement.getType()
                     if type == "xs:string":
                         type = schemaElement.getName()
-                    externalImports.add("from %s%s import %s" %
-                                           (moduleName, ModuleSuffix,
-                                            type))
+                    externalImports.add(
+                        "from %s%s import %s" % (
+                            moduleName, ModuleSuffix, type))
             if child.getBase():
                 parentName, parentObj = getParentName(child)
                 if parentObj.targetNamespace and \
@@ -7048,6 +7061,7 @@ def fixXmlDisable(txt, disabled):
         txt = txt.replace('#xmldisable#', '')
     return txt
 
+
 def capture_cleanup_name_list(option):
     cleanupNameList = []
     if not option:
diff --git a/generateDS.txt b/generateDS.txt
index fba8742..c4cb9b8 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.27a
+:revision: 2.28a
 
 .. version
 
@@ -267,6 +267,10 @@ Here is the usage message displayed by ``generateDS.py``::
                                  "new" - Name getters/setters get_var()/set_var().
                                  "none" - Do not generate getter/setter methods.
                                  Default is "new".
+        --use-source-file-as-module-name
+                                 Used in conjunction with --one-file-per-xsd to
+                                 use the source XSD file names to determine the
+                                 module name of the generated classes.
         --user-methods= <module>,
         -u <module>              Optional module containing user methods.  See
                                  section "User Methods" in the documentation.
@@ -326,6 +330,12 @@ Here is the usage message displayed by ``generateDS.py``::
                                          to XML)
                                  Example: "write etree"
                                  Default: "write"
+        --disable-generatedssuper-lookup
+                                 Disables the generatetion of the lookup logic for
+                                 presence of an external module from which to load
+                                 a custom `GeneratedsSuper` base-class definition.
+        --disable-xml            Disables generation of all XML build/export
+                                 methods and command line interface
         --preserve-cdata-tags    Preserve CDATA tags.  Default: False
         --cleanup-name-list=<replacement-map>
                                  Specifies list of 2-tuples used for cleaning
@@ -508,6 +518,13 @@ use-getter-setter
 
     The default is "new".
 
+use-source-file-as-module-name
+    Used in conjunction with and only has an effect when used with
+    ``--one-file-per-xsd``.  The effect of this option is to use the
+    source XML schema file names to determine the module name of the
+    generated classes.  Without this option, the first root element
+    is used to construct module names.  The default is False.
+
 u, user-methods=<module>
     If specified, ``generateDS.py`` will add methods to generated
     classes as specified in the indicated module.  For more
@@ -620,6 +637,29 @@ export
     For example: ``--export="write etree"`` and ``--export="write"``.  The
     default is: ``--export="write"``.
 
+disable-generatedssuper-lookup
+    Disables the generation of code implementing the lookup for
+    presence of an external module from which to load a custom
+    replacement for the default ``GeneratedsSuper`` base-class.
+    With this flag, unconditionally uses the built-in implementation
+    of ``GeneratedsSuper``.  (Suggestion: In order to get a picture
+    of what difference this option makes, you might consider
+    generating modules both with and without it, and then comparing
+    the results with ``diff``.)  The default is False.
+
+disable-xml
+    Disables generation of code that enables XML build/export
+    methods and command line interface.  Actually, the code is
+    there, but is commented out.  If you enable this option, the
+    generated modules will *not* contain code for the following: (1)
+    run as a script without explicitly running ``python`` (the
+    ``#!/usr/bin/env python`` line is omitted); (2) import
+    ``lxml.etree``; (3) parse an XML file; (4) export an XML file.
+    (Suggestion: In order to get a picture of what difference this
+    option makes, you might consider generating modules both with
+    and without it, and then comparing the results with ``diff``.)
+    The default is False.
+
 preserve-cdata-tags
     Preserve CDATA tags.  Normally, CDATA tags ("<![CDATA[ ... ]]>")
     are dropped while parsing an XML instance document.  If this
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 41fd9cf..e0e7cd2 100644
--- a/generateds_gui_notes.html
+++ b/generateds_gui_notes.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.13.2a: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>GenerateDS GUI Notes</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -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.27a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28a</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">June 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">June 23, 2017</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: 2017-06-01 16:04 UTC.
+Generated on: 2017-06-23 23:12 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 ac0da3a..4830511 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.27a
+:revision: 2.28a
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index a7e3541..fc1e734 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.27a'
+VERSION = '2.28a'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 8a4f0a1..cb45e02 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.13.2a: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>How to package a generateDS.py generated library</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -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.27a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28a</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">June 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">June 23, 2017</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: 2017-06-01 16:04 UTC.
+Generated on: 2017-06-23 23:12 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 808eeb8..6e2f826 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.27a
+:revision: 2.28a
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 43aa474..1fe384b 100644
--- 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.27a'
+VERSION = '2.28a'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index 0e95961..145feeb 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.27a",
+    version="2.28a",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/OnePer/oneperType00_2One.py b/tests/OnePer/oneperType00_2One.py
index 9799e13..6a9383a 100644
--- a/tests/OnePer/oneperType00_2One.py
+++ b/tests/OnePer/oneperType00_2One.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/OnePer/oneperType01_2One.py b/tests/OnePer/oneperType01_2One.py
index 6caef49..9cb957b 100644
--- a/tests/OnePer/oneperType01_2One.py
+++ b/tests/OnePer/oneperType01_2One.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/OnePer/oneperType02_2One.py b/tests/OnePer/oneperType02_2One.py
index d4c54a9..2cc43fd 100644
--- a/tests/OnePer/oneperType02_2One.py
+++ b/tests/OnePer/oneperType02_2One.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/OnePer/oneperType03_2One.py b/tests/OnePer/oneperType03_2One.py
index c59d06a..cf8139e 100644
--- a/tests/OnePer/oneperType03_2One.py
+++ b/tests/OnePer/oneperType03_2One.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py
index 2b58825..72181e6 100644
--- a/tests/abstract_type1_sup.py
+++ b/tests/abstract_type1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py
index 6c9582a..784711b 100644
--- a/tests/annotations1_sup.py
+++ b/tests/annotations1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/anonymous_type1_sup.py b/tests/anonymous_type1_sup.py
index 3f740cb..757d76b 100644
--- a/tests/anonymous_type1_sup.py
+++ b/tests/anonymous_type1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py
index af82c11..a42b892 100644
--- a/tests/anysimpletype1_sup.py
+++ b/tests/anysimpletype1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py
index 8b67cf3..863dd05 100644
--- a/tests/anywildcard1_sup.py
+++ b/tests/anywildcard1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py
index 6ebc213..1e8f030 100644
--- a/tests/attr_groups1_sup.py
+++ b/tests/attr_groups1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/catalogtest1_sup.py b/tests/catalogtest1_sup.py
index 0695675..b63985e 100644
--- a/tests/catalogtest1_sup.py
+++ b/tests/catalogtest1_sup.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/cdata1_sup.py b/tests/cdata1_sup.py
index 9b7146c..6058986 100644
--- a/tests/cdata1_sup.py
+++ b/tests/cdata1_sup.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/check_results.rb b/tests/check_results.rb
old mode 100644
new mode 100755
diff --git a/tests/cleanupname1_sup.py b/tests/cleanupname1_sup.py
index 053a39c..dcdd1aa 100644
--- a/tests/cleanupname1_sup.py
+++ b/tests/cleanupname1_sup.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py
index 0c5f722..119f2dc 100644
--- a/tests/defaults_cases1_sup.py
+++ b/tests/defaults_cases1_sup.py
@@ -578,7 +578,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -587,7 +588,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -605,7 +607,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -621,7 +625,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -644,12 +649,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -661,7 +668,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py
index 22f7fe3..7bd6d4f 100644
--- a/tests/defaults_coverage1_sup.py
+++ b/tests/defaults_coverage1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/disable_xml_super.xsd b/tests/disable_xml_super.xsd
new file mode 100644
index 0000000..3d08fa9
--- /dev/null
+++ b/tests/disable_xml_super.xsd
@@ -0,0 +1,16 @@
+<xs:schema
+    xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    >
+
+
+    <xs:element name="Package" type="PackageType"/>
+
+    <xs:complexType name="PackageType">
+        <xs:sequence>
+            <xs:element name="Address" type="xs:string"
+                minOccurs="0" maxOccurs="unbounded">
+            </xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+</xs:schema>
diff --git a/tests/disable_xml_super1_sub.py b/tests/disable_xml_super1_sub.py
new file mode 100644
index 0000000..4f116e8
--- /dev/null
+++ b/tests/disable_xml_super1_sub.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python
+
+#
+# Generated  by generateDS.py.
+#
+# Command line options:
+#   ('--no-dates', '')
+#   ('--no-versions', '')
+#   ('--disable-xml', '')
+#   ('--disable-generatedssuper-lookup', '')
+#   ('--member-specs', 'list')
+#   ('-f', '')
+#   ('-a', 'xsd:')
+#   ('-o', 'tests/disable_xml_super2_sup.py')
+#   ('-s', 'tests/disable_xml_super2_sub.py')
+#   ('--super', 'disable_xml_super2_sup')
+#   ('--no-warnings', '')
+#
+# Command line arguments:
+#   tests/disable_xml_super.xsd
+#
+# Command line:
+#   generateDS.py --no-dates --no-versions --disable-xml --disable-generatedssuper-lookup --member-specs="list" -f -a "xsd:" -o "tests/disable_xml_super2_sup.py" -s "tests/disable_xml_super2_sub.py" --super="disable_xml_super2_sup" --no-warnings tests/disable_xml_super.xsd
+#
+# Current working directory (os.getcwd()):
+#   generateds
+#
+
+import sys
+## from lxml import etree as etree_
+
+import disable_xml_super2_sup as supermod
+
+## def parsexml_(infile, parser=None, **kwargs):
+##     if parser is None:
+##         # Use the lxml ElementTree compatible parser so that, e.g.,
+##         #   we ignore comments.
+##         parser = etree_.ETCompatXMLParser()
+##     doc = etree_.parse(infile, parser=parser, **kwargs)
+##     return doc
+
+#
+# Globals
+#
+
+ExternalEncoding = 'ascii'
+
+#
+# Data representation classes
+#
+
+
+class PackageTypeSub(supermod.PackageType):
+    def __init__(self, Address=None):
+        super(PackageTypeSub, self).__init__(Address, )
+supermod.PackageType.subclass = PackageTypeSub
+# end class PackageTypeSub
+
+
diff --git a/tests/disable_xml_super1_sup.py b/tests/disable_xml_super1_sup.py
new file mode 100644
index 0000000..9ad8be9
--- /dev/null
+++ b/tests/disable_xml_super1_sup.py
@@ -0,0 +1,758 @@
+## #!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+#
+# Generated  by generateDS.py.
+#
+# Command line options:
+#   ('--no-dates', '')
+#   ('--no-versions', '')
+#   ('--disable-xml', '')
+#   ('--disable-generatedssuper-lookup', '')
+#   ('--member-specs', 'list')
+#   ('-f', '')
+#   ('-a', 'xsd:')
+#   ('-o', 'tests/disable_xml_super2_sup.py')
+#   ('-s', 'tests/disable_xml_super2_sub.py')
+#   ('--super', 'disable_xml_super2_sup')
+#   ('--no-warnings', '')
+#
+# Command line arguments:
+#   tests/disable_xml_super.xsd
+#
+# Command line:
+#   generateDS.py --no-dates --no-versions --disable-xml --disable-generatedssuper-lookup --member-specs="list" -f -a "xsd:" -o "tests/disable_xml_super2_sup.py" -s "tests/disable_xml_super2_sub.py" --super="disable_xml_super2_sup" --no-warnings tests/disable_xml_super.xsd
+#
+# Current working directory (os.getcwd()):
+#   generateds
+#
+
+import sys
+import re as re_
+import base64
+import datetime as datetime_
+import warnings as warnings_
+## try:
+##     from lxml import etree as etree_
+## except ImportError:
+##     from xml.etree import ElementTree as etree_
+
+
+Validate_simpletypes_ = True
+if sys.version_info.major == 2:
+    BaseStrType_ = basestring
+else:
+    BaseStrType_ = str
+
+
+## def parsexml_(infile, parser=None, **kwargs):
+##     if parser is None:
+##         # Use the lxml ElementTree compatible parser so that, e.g.,
+##         #   we ignore comments.
+##         try:
+##             parser = etree_.ETCompatXMLParser()
+##         except AttributeError:
+##             # fallback to xml.etree
+##             parser = etree_.XMLParser()
+##     doc = etree_.parse(infile, parser=parser, **kwargs)
+##     return doc
+
+#
+# Namespace prefix definition table (and other attributes, too)
+#
+# The module generatedsnamespaces, if it is importable, must contain
+# a dictionary named GeneratedsNamespaceDefs.  This Python dictionary
+# should map element type names (strings) to XML schema namespace prefix
+# definitions.  The export method for any class for which there is
+# a namespace prefix definition, will export that definition in the
+# XML representation of that element.  See the export method of
+# any generated element type class for a example of the use of this
+# table.
+# A sample table is:
+#
+#     # File: generatedsnamespaces.py
+#
+#     GenerateDSNamespaceDefs = {
+#         "ElementtypeA": "http://www.xxx.com/namespaceA",
+#         "ElementtypeB": "http://www.xxx.com/namespaceB",
+#     }
+#
+
+try:
+    from generatedsnamespaces import GenerateDSNamespaceDefs as GenerateDSNamespaceDefs_
+except ImportError:
+    GenerateDSNamespaceDefs_ = {}
+
+#
+# The root super-class for element type classes
+#
+# Calls to the methods in these classes are generated by generateDS.py.
+# You can replace these methods by re-implementing the following class
+#   in a module named generatedssuper.py.
+
+
+class GeneratedsSuper(object):
+    tzoff_pattern = re_.compile(r'(\+|-)((0\d|1[0-3]):[0-5]\d|14:00)$')
+    class _FixedOffsetTZ(datetime_.tzinfo):
+        def __init__(self, offset, name):
+            self.__offset = datetime_.timedelta(minutes=offset)
+            self.__name = name
+        def utcoffset(self, dt):
+            return self.__offset
+        def tzname(self, dt):
+            return self.__name
+        def dst(self, dt):
+            return None
+    def gds_format_string(self, input_data, input_name=''):
+        return input_data
+    def gds_validate_string(self, input_data, node=None, input_name=''):
+        if not input_data:
+            return ''
+        else:
+            return input_data
+    def gds_format_base64(self, input_data, input_name=''):
+        return base64.b64encode(input_data)
+    def gds_validate_base64(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_integer(self, input_data, input_name=''):
+        return '%d' % input_data
+    def gds_validate_integer(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_integer_list(self, input_data, input_name=''):
+        return '%s' % ' '.join(input_data)
+    def gds_validate_integer_list(
+            self, input_data, node=None, input_name=''):
+        values = input_data.split()
+        for value in values:
+            try:
+                int(value)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires sequence of integers')
+        return values
+    def gds_format_float(self, input_data, input_name=''):
+        return ('%.15f' % input_data).rstrip('0')
+    def gds_validate_float(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_float_list(self, input_data, input_name=''):
+        return '%s' % ' '.join(input_data)
+    def gds_validate_float_list(
+            self, input_data, node=None, input_name=''):
+        values = input_data.split()
+        for value in values:
+            try:
+                float(value)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires sequence of floats')
+        return values
+    def gds_format_double(self, input_data, input_name=''):
+        return '%e' % input_data
+    def gds_validate_double(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_double_list(self, input_data, input_name=''):
+        return '%s' % ' '.join(input_data)
+    def gds_validate_double_list(
+            self, input_data, node=None, input_name=''):
+        values = input_data.split()
+        for value in values:
+            try:
+                float(value)
+            except (TypeError, ValueError):
+                raise_parse_error(node, 'Requires sequence of doubles')
+        return values
+    def gds_format_boolean(self, input_data, input_name=''):
+        return ('%s' % input_data).lower()
+    def gds_validate_boolean(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_boolean_list(self, input_data, input_name=''):
+        return '%s' % ' '.join(input_data)
+    def gds_validate_boolean_list(
+            self, input_data, node=None, input_name=''):
+        values = input_data.split()
+        for value in values:
+            if value not in ('true', '1', 'false', '0', ):
+                raise_parse_error(
+                    node,
+                    'Requires sequence of booleans '
+                    '("true", "1", "false", "0")')
+        return values
+    def gds_validate_datetime(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_datetime(self, input_data, input_name=''):
+        if input_data.microsecond == 0:
+            _svalue = '%04d-%02d-%02dT%02d:%02d:%02d' % (
+                input_data.year,
+                input_data.month,
+                input_data.day,
+                input_data.hour,
+                input_data.minute,
+                input_data.second,
+            )
+        else:
+            _svalue = '%04d-%02d-%02dT%02d:%02d:%02d.%s' % (
+                input_data.year,
+                input_data.month,
+                input_data.day,
+                input_data.hour,
+                input_data.minute,
+                input_data.second,
+                ('%f' % (float(input_data.microsecond) / 1000000))[2:],
+            )
+        if input_data.tzinfo is not None:
+            tzoff = input_data.tzinfo.utcoffset(input_data)
+            if tzoff is not None:
+                total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                if total_seconds == 0:
+                    _svalue += 'Z'
+                else:
+                    if total_seconds < 0:
+                        _svalue += '-'
+                        total_seconds *= -1
+                    else:
+                        _svalue += '+'
+                    hours = total_seconds // 3600
+                    minutes = (total_seconds - (hours * 3600)) // 60
+                    _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+        return _svalue
+    @classmethod
+    def gds_parse_datetime(cls, input_data):
+        tz = None
+        if input_data[-1] == 'Z':
+            tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+            input_data = input_data[:-1]
+        else:
+            results = GeneratedsSuper.tzoff_pattern.search(input_data)
+            if results is not None:
+                tzoff_parts = results.group(2).split(':')
+                tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                if results.group(1) == '-':
+                    tzoff *= -1
+                tz = GeneratedsSuper._FixedOffsetTZ(
+                    tzoff, results.group(0))
+                input_data = input_data[:-6]
+        time_parts = input_data.split('.')
+        if len(time_parts) > 1:
+            micro_seconds = int(float('0.' + time_parts[1]) * 1000000)
+            input_data = '%s.%s' % (time_parts[0], micro_seconds, )
+            dt = datetime_.datetime.strptime(
+                input_data, '%Y-%m-%dT%H:%M:%S.%f')
+        else:
+            dt = datetime_.datetime.strptime(
+                input_data, '%Y-%m-%dT%H:%M:%S')
+        dt = dt.replace(tzinfo=tz)
+        return dt
+    def gds_validate_date(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_date(self, input_data, input_name=''):
+        _svalue = '%04d-%02d-%02d' % (
+            input_data.year,
+            input_data.month,
+            input_data.day,
+        )
+        try:
+            if input_data.tzinfo is not None:
+                tzoff = input_data.tzinfo.utcoffset(input_data)
+                if tzoff is not None:
+                    total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                    if total_seconds == 0:
+                        _svalue += 'Z'
+                    else:
+                        if total_seconds < 0:
+                            _svalue += '-'
+                            total_seconds *= -1
+                        else:
+                            _svalue += '+'
+                        hours = total_seconds // 3600
+                        minutes = (total_seconds - (hours * 3600)) // 60
+                        _svalue += '{0:02d}:{1:02d}'.format(
+                            hours, minutes)
+        except AttributeError:
+            pass
+        return _svalue
+    @classmethod
+    def gds_parse_date(cls, input_data):
+        tz = None
+        if input_data[-1] == 'Z':
+            tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+            input_data = input_data[:-1]
+        else:
+            results = GeneratedsSuper.tzoff_pattern.search(input_data)
+            if results is not None:
+                tzoff_parts = results.group(2).split(':')
+                tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                if results.group(1) == '-':
+                    tzoff *= -1
+                tz = GeneratedsSuper._FixedOffsetTZ(
+                    tzoff, results.group(0))
+                input_data = input_data[:-6]
+        dt = datetime_.datetime.strptime(input_data, '%Y-%m-%d')
+        dt = dt.replace(tzinfo=tz)
+        return dt.date()
+    def gds_validate_time(self, input_data, node=None, input_name=''):
+        return input_data
+    def gds_format_time(self, input_data, input_name=''):
+        if input_data.microsecond == 0:
+            _svalue = '%02d:%02d:%02d' % (
+                input_data.hour,
+                input_data.minute,
+                input_data.second,
+            )
+        else:
+            _svalue = '%02d:%02d:%02d.%s' % (
+                input_data.hour,
+                input_data.minute,
+                input_data.second,
+                ('%f' % (float(input_data.microsecond) / 1000000))[2:],
+            )
+        if input_data.tzinfo is not None:
+            tzoff = input_data.tzinfo.utcoffset(input_data)
+            if tzoff is not None:
+                total_seconds = tzoff.seconds + (86400 * tzoff.days)
+                if total_seconds == 0:
+                    _svalue += 'Z'
+                else:
+                    if total_seconds < 0:
+                        _svalue += '-'
+                        total_seconds *= -1
+                    else:
+                        _svalue += '+'
+                    hours = total_seconds // 3600
+                    minutes = (total_seconds - (hours * 3600)) // 60
+                    _svalue += '{0:02d}:{1:02d}'.format(hours, minutes)
+        return _svalue
+    def gds_validate_simple_patterns(self, patterns, target):
+        # pat is a list of lists of strings/patterns.  We should:
+        # - AND the outer elements
+        # - OR the inner elements
+        found1 = True
+        for patterns1 in patterns:
+            found2 = False
+            for patterns2 in patterns1:
+                if re_.search(patterns2, target) is not None:
+                    found2 = True
+                    break
+            if not found2:
+                found1 = False
+                break
+        return found1
+    @classmethod
+    def gds_parse_time(cls, input_data):
+        tz = None
+        if input_data[-1] == 'Z':
+            tz = GeneratedsSuper._FixedOffsetTZ(0, 'UTC')
+            input_data = input_data[:-1]
+        else:
+            results = GeneratedsSuper.tzoff_pattern.search(input_data)
+            if results is not None:
+                tzoff_parts = results.group(2).split(':')
+                tzoff = int(tzoff_parts[0]) * 60 + int(tzoff_parts[1])
+                if results.group(1) == '-':
+                    tzoff *= -1
+                tz = GeneratedsSuper._FixedOffsetTZ(
+                    tzoff, results.group(0))
+                input_data = input_data[:-6]
+        if len(input_data.split('.')) > 1:
+            dt = datetime_.datetime.strptime(input_data, '%H:%M:%S.%f')
+        else:
+            dt = datetime_.datetime.strptime(input_data, '%H:%M:%S')
+        dt = dt.replace(tzinfo=tz)
+        return dt.time()
+    def gds_str_lower(self, instring):
+        return instring.lower()
+    def get_path_(self, node):
+        path_list = []
+        self.get_path_list_(node, path_list)
+        path_list.reverse()
+        path = '/'.join(path_list)
+        return path
+    Tag_strip_pattern_ = re_.compile(r'\{.*\}')
+    def get_path_list_(self, node, path_list):
+        if node is None:
+            return
+        tag = GeneratedsSuper.Tag_strip_pattern_.sub('', node.tag)
+        if tag:
+            path_list.append(tag)
+        self.get_path_list_(node.getparent(), path_list)
+    def get_class_obj_(self, node, default_class=None):
+        class_obj1 = default_class
+        if 'xsi' in node.nsmap:
+            classname = node.get('{%s}type' % node.nsmap['xsi'])
+            if classname is not None:
+                names = classname.split(':')
+                if len(names) == 2:
+                    classname = names[1]
+                class_obj2 = globals().get(classname)
+                if class_obj2 is not None:
+                    class_obj1 = class_obj2
+        return class_obj1
+    def gds_build_any(self, node, type_name=None):
+        return None
+    @classmethod
+    def gds_reverse_node_mapping(cls, mapping):
+        return dict(((v, k) for k, v in mapping.iteritems()))
+    @staticmethod
+    def gds_encode(instring):
+        if sys.version_info.major == 2:
+            return instring.encode(ExternalEncoding)
+        else:
+            return instring
+    @staticmethod
+    def convert_unicode(instring):
+        if isinstance(instring, str):
+            result = quote_xml(instring)
+        elif sys.version_info.major == 2 and isinstance(instring, unicode):
+            result = quote_xml(instring).encode('utf8')
+        else:
+            result = GeneratedsSuper.gds_encode(str(instring))
+        return result
+    def __eq__(self, other):
+        if type(self) != type(other):
+            return False
+        return self.__dict__ == other.__dict__
+    def __ne__(self, other):
+        return not self.__eq__(other)
+
+def getSubclassFromModule_(module, class_):
+    '''Get the subclass of a class from a specific module.'''
+    name = class_.__name__ + 'Sub'
+    if hasattr(module, name):
+        return getattr(module, name)
+    else:
+        return None
+
+
+#
+# If you have installed IPython you can uncomment and use the following.
+# IPython is available from http://ipython.scipy.org/.
+#
+
+## from IPython.Shell import IPShellEmbed
+## args = ''
+## ipshell = IPShellEmbed(args,
+##     banner = 'Dropping into IPython',
+##     exit_msg = 'Leaving Interpreter, back to program.')
+
+# Then use the following line where and when you want to drop into the
+# IPython shell:
+#    ipshell('<some message> -- Entering ipshell.\nHit Ctrl-D to exit')
+
+#
+# Globals
+#
+
+ExternalEncoding = 'ascii'
+Tag_pattern_ = re_.compile(r'({.*})?(.*)')
+String_cleanup_pat_ = re_.compile(r"[\n\r\s]+")
+Namespace_extract_pat_ = re_.compile(r'{(.*)}(.*)')
+CDATA_pattern_ = re_.compile(r"<!\[CDATA\[.*?\]\]>", re_.DOTALL)
+
+# Change this to redirect the generated superclass module to use a
+# specific subclass module.
+CurrentSubclassModule_ = None
+
+#
+# Support/utility functions.
+#
+
+
+def showIndent(outfile, level, pretty_print=True):
+    if pretty_print:
+        for idx in range(level):
+            outfile.write('    ')
+
+
+def quote_xml(inStr):
+    "Escape markup chars, but do not modify CDATA sections."
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr)
+    s2 = ''
+    pos = 0
+    matchobjects = CDATA_pattern_.finditer(s1)
+    for mo in matchobjects:
+        s3 = s1[pos:mo.start()]
+        s2 += quote_xml_aux(s3)
+        s2 += s1[mo.start():mo.end()]
+        pos = mo.end()
+    s3 = s1[pos:]
+    s2 += quote_xml_aux(s3)
+    return s2
+
+
+def quote_xml_aux(inStr):
+    s1 = inStr.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, BaseStrType_) and inStr or '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    if '"' in s1:
+        if "'" in s1:
+            s1 = '"%s"' % s1.replace('"', "&quot;")
+        else:
+            s1 = "'%s'" % s1
+    else:
+        s1 = '"%s"' % s1
+    return s1
+
+
+def quote_python(inStr):
+    s1 = inStr
+    if s1.find("'") == -1:
+        if s1.find('\n') == -1:
+            return "'%s'" % s1
+        else:
+            return "'''%s'''" % s1
+    else:
+        if s1.find('"') != -1:
+            s1 = s1.replace('"', '\\"')
+        if s1.find('\n') == -1:
+            return '"%s"' % s1
+        else:
+            return '"""%s"""' % s1
+
+
+def get_all_text_(node):
+    if node.text is not None:
+        text = node.text
+    else:
+        text = ''
+    for child in node:
+        if child.tail is not None:
+            text += child.tail
+    return text
+
+
+def find_attr_value_(attr_name, node):
+    attrs = node.attrib
+    attr_parts = attr_name.split(':')
+    value = None
+    if len(attr_parts) == 1:
+        value = attrs.get(attr_name)
+    elif len(attr_parts) == 2:
+        prefix, name = attr_parts
+        namespace = node.nsmap.get(prefix)
+        if namespace is not None:
+            value = attrs.get('{%s}%s' % (namespace, name, ))
+    return value
+
+
+class GDSParseError(Exception):
+    pass
+
+
+def raise_parse_error(node, msg):
+    msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
+    raise GDSParseError(msg)
+
+
+class MixedContainer:
+    # Constants for category:
+    CategoryNone = 0
+    CategoryText = 1
+    CategorySimple = 2
+    CategoryComplex = 3
+    # Constants for content_type:
+    TypeNone = 0
+    TypeText = 1
+    TypeString = 2
+    TypeInteger = 3
+    TypeFloat = 4
+    TypeDecimal = 5
+    TypeDouble = 6
+    TypeBoolean = 7
+    TypeBase64 = 8
+    def __init__(self, category, content_type, name, value):
+        self.category = category
+        self.content_type = content_type
+        self.name = name
+        self.value = value
+    def getCategory(self):
+        return self.category
+    def getContenttype(self, content_type):
+        return self.content_type
+    def getValue(self):
+        return self.value
+    def getName(self):
+        return self.name
+##     def export(self, outfile, level, name, namespace,
+##                pretty_print=True):
+##         if self.category == MixedContainer.CategoryText:
+##             # Prevent exporting empty content as empty lines.
+##             if self.value.strip():
+##                 outfile.write(self.value)
+##         elif self.category == MixedContainer.CategorySimple:
+##             self.exportSimple(outfile, level, name)
+##         else:    # category == MixedContainer.CategoryComplex
+##             self.value.export(
+##                 outfile, level, namespace, name,
+##                 pretty_print=pretty_print)
+##     def exportSimple(self, outfile, level, name):
+##         if self.content_type == MixedContainer.TypeString:
+##             outfile.write('<%s>%s</%s>' % (
+##                 self.name, self.value, self.name))
+##         elif self.content_type == MixedContainer.TypeInteger or \
+##                 self.content_type == MixedContainer.TypeBoolean:
+##             outfile.write('<%s>%d</%s>' % (
+##                 self.name, self.value, self.name))
+##         elif self.content_type == MixedContainer.TypeFloat or \
+##                 self.content_type == MixedContainer.TypeDecimal:
+##             outfile.write('<%s>%f</%s>' % (
+##                 self.name, self.value, self.name))
+##         elif self.content_type == MixedContainer.TypeDouble:
+##             outfile.write('<%s>%g</%s>' % (
+##                 self.name, self.value, self.name))
+##         elif self.content_type == MixedContainer.TypeBase64:
+##             outfile.write('<%s>%s</%s>' % (
+##                 self.name,
+##                 base64.b64encode(self.value),
+##                 self.name))
+##     def to_etree(self, element):
+##         if self.category == MixedContainer.CategoryText:
+##             # Prevent exporting empty content as empty lines.
+##             if self.value.strip():
+##                 if len(element) > 0:
+##                     if element[-1].tail is None:
+##                         element[-1].tail = self.value
+##                     else:
+##                         element[-1].tail += self.value
+##                 else:
+##                     if element.text is None:
+##                         element.text = self.value
+##                     else:
+##                         element.text += self.value
+##         elif self.category == MixedContainer.CategorySimple:
+##             subelement = etree_.SubElement(
+##                 element, '%s' % self.name)
+##             subelement.text = self.to_etree_simple()
+##         else:    # category == MixedContainer.CategoryComplex
+##             self.value.to_etree(element)
+##     def to_etree_simple(self):
+##         if self.content_type == MixedContainer.TypeString:
+##             text = self.value
+##         elif (self.content_type == MixedContainer.TypeInteger or
+##                 self.content_type == MixedContainer.TypeBoolean):
+##             text = '%d' % self.value
+##         elif (self.content_type == MixedContainer.TypeFloat or
+##                 self.content_type == MixedContainer.TypeDecimal):
+##             text = '%f' % self.value
+##         elif self.content_type == MixedContainer.TypeDouble:
+##             text = '%g' % self.value
+##         elif self.content_type == MixedContainer.TypeBase64:
+##             text = '%s' % base64.b64encode(self.value)
+##         return text
+##     def exportLiteral(self, outfile, level, name):
+##         if self.category == MixedContainer.CategoryText:
+##             showIndent(outfile, level)
+##             outfile.write(
+##                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
+##                     self.category, self.content_type,
+##                     self.name, self.value))
+##         elif self.category == MixedContainer.CategorySimple:
+##             showIndent(outfile, level)
+##             outfile.write(
+##                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
+##                     self.category, self.content_type,
+##                     self.name, self.value))
+##         else:    # category == MixedContainer.CategoryComplex
+##             showIndent(outfile, level)
+##             outfile.write(
+##                 'model_.MixedContainer(%d, %d, "%s",\n' % (
+##                     self.category, self.content_type, self.name,))
+##             self.value.exportLiteral(outfile, level + 1)
+##             showIndent(outfile, level)
+##             outfile.write(')\n')
+
+
+class MemberSpec_(object):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+        self.child_attrs = child_attrs
+        self.choice = choice
+        self.optional = optional
+    def set_name(self, name): self.name = name
+    def get_name(self): return self.name
+    def set_data_type(self, data_type): self.data_type = data_type
+    def get_data_type_chain(self): return self.data_type
+    def get_data_type(self):
+        if isinstance(self.data_type, list):
+            if len(self.data_type) > 0:
+                return self.data_type[-1]
+            else:
+                return 'xs:string'
+        else:
+            return self.data_type
+    def set_container(self, container): self.container = container
+    def get_container(self): return self.container
+    def set_child_attrs(self, child_attrs): self.child_attrs = child_attrs
+    def get_child_attrs(self): return self.child_attrs
+    def set_choice(self, choice): self.choice = choice
+    def get_choice(self): return self.choice
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
+
+
+def _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Data representation classes.
+#
+
+
+class PackageType(GeneratedsSuper):
+    member_data_items_ = [
+        MemberSpec_('Address', 'xs:string', 1, 1, {u'maxOccurs': u'unbounded', u'type': u'xs:string', u'name': u'Address', u'minOccurs': u'0'}, None),
+    ]
+    subclass = None
+    superclass = None
+    def __init__(self, Address=None):
+        self.original_tagname_ = None
+        if Address is None:
+            self.Address = []
+        else:
+            self.Address = Address
+    def factory(*args_, **kwargs_):
+        if CurrentSubclassModule_ is not None:
+            subclass = getSubclassFromModule_(
+                CurrentSubclassModule_, PackageType)
+            if subclass is not None:
+                return subclass(*args_, **kwargs_)
+        if PackageType.subclass:
+            return PackageType.subclass(*args_, **kwargs_)
+        else:
+            return PackageType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_Address(self): return self.Address
+    def set_Address(self, Address): self.Address = Address
+    def add_Address(self, value): self.Address.append(value)
+    def insert_Address_at(self, index, value): self.Address.insert(index, value)
+    def replace_Address_at(self, index, value): self.Address[index] = value
+    def hasContent_(self):
+        if (
+            self.Address
+        ):
+            return True
+        else:
+            return False
+# end class PackageType
+
+
+GDSClassesMapping = {
+    'Package': PackageType,
+}
+
+
+
+__all__ = [
+    "PackageType"
+]
diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py
index bd04c01..dd9b80a 100644
--- a/tests/extensions1_sup.py
+++ b/tests/extensions1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py
index 8757c5d..9828532 100644
--- a/tests/ipo1_sup.py
+++ b/tests/ipo1_sup.py
@@ -578,7 +578,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -587,7 +588,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -605,7 +607,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -621,7 +625,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -644,12 +649,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -661,7 +668,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py
index 8757c5d..9828532 100644
--- a/tests/ipo2_sup.py
+++ b/tests/ipo2_sup.py
@@ -578,7 +578,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -587,7 +588,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -605,7 +607,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -621,7 +625,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -644,12 +649,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -661,7 +668,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py
index 997f110..b93a409 100644
--- a/tests/mapcleanname1_sup.py
+++ b/tests/mapcleanname1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/nested_def1_sup.py b/tests/nested_def1_sup.py
index c5da762..0032b18 100644
--- a/tests/nested_def1_sup.py
+++ b/tests/nested_def1_sup.py
@@ -578,7 +578,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -587,7 +588,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -605,7 +607,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -621,7 +625,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -644,12 +649,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -661,7 +668,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/out1_sup.py b/tests/out1_sup.py
index 159a3fe..26c0190 100644
--- a/tests/out1_sup.py
+++ b/tests/out1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py
index c36f6cb..9689e83 100644
--- a/tests/people_procincl1_sup.py
+++ b/tests/people_procincl1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py
index 17b686e..e4db412 100644
--- a/tests/prefix_classname1_sup.py
+++ b/tests/prefix_classname1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py
index ab4dea2..45de91d 100644
--- a/tests/recursive_simpletype1_sup.py
+++ b/tests/recursive_simpletype1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py
index 103b10e..cc8178a 100644
--- a/tests/reference_simpletype1_sup.py
+++ b/tests/reference_simpletype1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/rem_dup_elems1_sup.py b/tests/rem_dup_elems1_sup.py
index c2771cb..c21b87f 100644
--- a/tests/rem_dup_elems1_sup.py
+++ b/tests/rem_dup_elems1_sup.py
@@ -580,7 +580,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -589,7 +590,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -607,7 +609,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -623,7 +627,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -646,12 +651,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -663,7 +670,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py
index 7ebc8e9..ae5f74a 100644
--- a/tests/simplecontent_restriction1_sup.py
+++ b/tests/simplecontent_restriction1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py
index fc90e22..ec34c2a 100644
--- a/tests/simpletype_memberspecs1_sup.py
+++ b/tests/simpletype_memberspecs1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py
index ab855a6..1c58d5c 100644
--- a/tests/simpletypes_other1_sup.py
+++ b/tests/simpletypes_other1_sup.py
@@ -579,7 +579,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -588,7 +589,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -606,7 +608,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -622,7 +626,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -645,12 +650,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -662,7 +669,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/test.py b/tests/test.py
old mode 100644
new mode 100755
index dea1aea..5a93f77
--- a/tests/test.py
+++ b/tests/test.py
@@ -823,6 +823,29 @@ class GenTest(unittest.TestCase):
         self.remove('{}2_sub.py'.format(t_))
         self.remove('{}2_out.xml'.format(t_))
 
+    def test_033_disable_xml_super(self):
+        cmdTempl = (
+            'python generateDS.py --no-dates --no-versions '
+            '--disable-xml --disable-generatedssuper-lookup '
+            '--member-specs=list -f -a "xsd:" '
+            '-o tests/%s2_sup.py -s tests/%s2_sub.py '
+            '--super=%s2_sup --no-warnings '
+            'tests/%s.xsd'
+        )
+        t_ = 'disable_xml_super'
+        cmd = cmdTempl % (t_, t_, t_, t_, )
+        self.executeClean(cmd, cwd='..')
+        self.compareFiles(
+            '{}1_sup.py'.format(t_),
+            '{}2_sup.py'.format(t_),
+            ('sys.stdout.write',))
+        self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_))
+        # Need to preserve generated files for next command, cleanup at end
+        # cleanup generated files
+        #self.remove('{}2_sup.py'.format(t_))
+        #self.remove('{}2_sub.py'.format(t_))
+        #self.remove('{}2_out.xml'.format(t_))
+
     def compareFiles(self, left, right, ignore=None):
         with open(left) as left_file:
             with open(right) as right_file:
diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py
index f330869..09ba4c3 100644
--- a/tests/to_etree1_sup.py
+++ b/tests/to_etree1_sup.py
@@ -581,7 +581,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -590,7 +591,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -608,7 +610,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -624,7 +628,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -647,12 +652,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -664,7 +671,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py
index 84a01e9..03af44f 100644
--- a/tests/validate_simpletypes1_sup.py
+++ b/tests/validate_simpletypes1_sup.py
@@ -578,7 +578,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -587,7 +588,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -605,7 +607,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -621,7 +625,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -644,12 +649,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -661,7 +668,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt
index 913f375..c166f0e 100644
--- a/tests/validate_simpletypes1_warnings.txt
+++ b/tests/validate_simpletypes1_warnings.txt
@@ -1,60 +1,60 @@
-tests/validate_simpletypes2_sup.py:1034: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:1042: 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:1044: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1052: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*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:1057: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st
+tests/validate_simpletypes2_sup.py:1065: 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:1064: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1072: 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:1069: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st
+tests/validate_simpletypes2_sup.py:1077: 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:1078: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1086: 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:1083: UserWarning: Value "012345" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1091: 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:1160: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1168: 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:1154: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^abcd$|^ef\\|gh$']]
+tests/validate_simpletypes2_sup.py:1162: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^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:1036: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:1044: 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:1044: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1052: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*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:1062: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1070: 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:1076: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1084: 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:1083: UserWarning: Value "01234567890" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1091: 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:1093: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st
+tests/validate_simpletypes2_sup.py:1101: 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:1098: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st
+tests/validate_simpletypes2_sup.py:1106: 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:1103: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st
+tests/validate_simpletypes2_sup.py:1111: 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:1108: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st
+tests/validate_simpletypes2_sup.py:1116: 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:1113: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st
+tests/validate_simpletypes2_sup.py:1121: 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:1118: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st
+tests/validate_simpletypes2_sup.py:1126: 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:1123: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st
+tests/validate_simpletypes2_sup.py:1131: 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:1128: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st
+tests/validate_simpletypes2_sup.py:1136: 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:1133: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st
+tests/validate_simpletypes2_sup.py:1141: 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:1138: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st
+tests/validate_simpletypes2_sup.py:1146: 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:1143: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st
+tests/validate_simpletypes2_sup.py:1151: 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:1148: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st
+tests/validate_simpletypes2_sup.py:1156: 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:1162: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1170: 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:1041: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st
+tests/validate_simpletypes2_sup.py:1049: 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:1044: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1052: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*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:1580: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType
+tests/validate_simpletypes2_sup.py:1588: 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_sup.py b/tests/validate_simpletypes2_sup.py
index 84a01e9..03af44f 100644
--- a/tests/validate_simpletypes2_sup.py
+++ b/tests/validate_simpletypes2_sup.py
@@ -578,7 +578,8 @@ class MixedContainer:
         return self.value
     def getName(self):
         return self.name
-    def export(self, outfile, level, name, namespace, pretty_print=True):
+    def export(self, outfile, level, name, namespace,
+               pretty_print=True):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
             if self.value.strip():
@@ -587,7 +588,8 @@ class MixedContainer:
             self.exportSimple(outfile, level, name)
         else:    # category == MixedContainer.CategoryComplex
             self.value.export(
-                outfile, level, namespace, name, pretty_print=pretty_print)
+                outfile, level, namespace, name,
+                pretty_print=pretty_print)
     def exportSimple(self, outfile, level, name):
         if self.content_type == MixedContainer.TypeString:
             outfile.write('<%s>%s</%s>' % (
@@ -605,7 +607,9 @@ class MixedContainer:
                 self.name, self.value, self.name))
         elif self.content_type == MixedContainer.TypeBase64:
             outfile.write('<%s>%s</%s>' % (
-                self.name, base64.b64encode(self.value), self.name))
+                self.name,
+                base64.b64encode(self.value),
+                self.name))
     def to_etree(self, element):
         if self.category == MixedContainer.CategoryText:
             # Prevent exporting empty content as empty lines.
@@ -621,7 +625,8 @@ class MixedContainer:
                     else:
                         element.text += self.value
         elif self.category == MixedContainer.CategorySimple:
-            subelement = etree_.SubElement(element, '%s' % self.name)
+            subelement = etree_.SubElement(
+                element, '%s' % self.name)
             subelement.text = self.to_etree_simple()
         else:    # category == MixedContainer.CategoryComplex
             self.value.to_etree(element)
@@ -644,12 +649,14 @@ class MixedContainer:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         elif self.category == MixedContainer.CategorySimple:
             showIndent(outfile, level)
             outfile.write(
                 'model_.MixedContainer(%d, %d, "%s", "%s"),\n' % (
-                    self.category, self.content_type, self.name, self.value))
+                    self.category, self.content_type,
+                    self.name, self.value))
         else:    # category == MixedContainer.CategoryComplex
             showIndent(outfile, level)
             outfile.write(
@@ -661,7 +668,8 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0, optional=0, child_attrs=None, choice=None):
+    def __init__(self, name='', data_type='', container=0,
+            optional=0, child_attrs=None, choice=None):
         self.name = name
         self.data_type = data_type
         self.container = container
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 01aaa3d..648e52e 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.13.2a: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>generateDS -- Introduction and Tutorial</title>
 <meta name="author" content="Dave Kuhlman" />
 <style type="text/css">
@@ -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.27a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28a</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">June 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">June 23, 2017</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: 2017-06-01 16:04 UTC.
+Generated on: 2017-06-23 23:12 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 7bab582..69e9efd 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.27a
+:revision: 2.28a
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 1b2323353b8fcd5873483ee1ad4054286c6aef18..f103919d46c6d0eb3cb7128d9d41e5a87326d436 100644
GIT binary patch
delta 13558
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
X)YAYdj%oicRj-c}#=P_ITl0Sa*8xEs

delta 13551
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
ZmXgqpoubr@@DGQ6Hz|y1`(NHc{}28kW!wM&

diff --git a/updateversion.py b/updateversion.py
old mode 100644
new mode 100755
-- 
GitLab