diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index bd08890ae92192316cc09735d58e7ebbe0bf461f..e8b9e6485b55cc3229082f9a8fdcbc5f45c1c661 100755
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -1,14 +1,24 @@
 #!/usr/bin/env python
-
 import sys
 import os
 from optparse import OptionParser
-from ConfigParser import ConfigParser
+from configparser import ConfigParser
 from xml.dom import minidom
 from xml.parsers import expat
 import subprocess
 import re
-import gtk
+
+
+
+if sys.version_info.major == 2:
+    import gtk
+else:
+    # https://sourceforge.net/projects/pygobjectwin32/files/
+    # https://blogs.gnome.org/kittykat/2014/01/29/developing-gtk-3-apps-with-python-on-windows/
+    import gi
+    gi.require_version('Gtk', '3.0')
+    from gi.repository import Gtk as gtk
+    
 # import pango
 from libgenerateDS.gui import generateds_gui_session
 #import generateds_gui_session
@@ -31,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.20b'
+VERSION = '2.20a'
 ##VERSION##
 
 
@@ -136,7 +146,7 @@ class GeneratedsGui(object):
         ui_spec_filename = options.impl_gui
         try:
             if ui_spec_filename is None:
-                Builder.add_from_string(Ui_spec, len(Ui_spec))
+                Builder.add_from_string(branch_version('Ui_spec, len(Ui_spec)','Ui_spec'))
             else:
                 Builder.add_from_file(ui_spec_filename)
         except:
@@ -153,7 +163,7 @@ class GeneratedsGui(object):
                 setattr(self, s1, bgo(s1))
                 self.ui_obj_dict[s1] = bgo(s1)
         # Create the member-specs combobox.
-        member_specs_combobox = gtk.combo_box_new_text()
+        member_specs_combobox = branch_version('gtk.combo_box_new_text()', 'gtk.ComboBoxText()')
         member_specs_combobox.set_name('member_specs_combobox')
         member_specs_combobox.set_tooltip_text(Memberspecs_tooltip_text)
         self.ui_obj_dict['member_specs_combobox'] = member_specs_combobox
@@ -169,7 +179,7 @@ class GeneratedsGui(object):
         Builder.connect_signals(self)
         Builder.connect_signals(self.content_dialog)
         # set the default icon to the GTK "edit" icon
-        gtk.window_set_default_icon_name(gtk.STOCK_EDIT)
+        branch_version('gtk.window_set_default_icon_name(gtk.STOCK_EDIT)','gtk.Window.set_default_icon_name(gtk.STOCK_EDIT)')
         # setup and initialize our statusbar
         self.statusbar_cid = self.statusbar.get_context_id("Tutorial GTK+ Text Editor")
         self.reset_default_status()
@@ -196,23 +206,36 @@ class GeneratedsGui(object):
 ##         self.dump_params('params:', self.params)
         if self.params != self.saved_params:
             message = 'Session data has changed.\n\nSave?'
-            dialog = gtk.MessageDialog(None,
-                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-                gtk.MESSAGE_ERROR,
-                gtk.BUTTONS_NONE,
-                message)
-            dialog.add_buttons(
-                gtk.STOCK_YES, gtk.RESPONSE_YES,
+            if sys.version_info.major == 2 :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                                            gtk.MESSAGE_ERROR,
+                                            gtk.BUTTONS_NONE,
+                                            message)
+                dialog.add_buttons(
+                    gtk.STOCK_YES, gtk.RESPONSE_YES,
+                    '_Discard', 1,
+                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                    )
+            else :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DialogFlags.MODAL | gtk.DialogFlags.DESTROY_WITH_PARENT,
+                                            gtk.MessageType.ERROR,
+                                            gtk.ButtonsType.NONE,
+                                            message)
+                
+                dialog.add_buttons(
+                gtk.STOCK_YES, gtk.ResponseType.YES,
                 '_Discard', 1,
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                gtk.STOCK_CANCEL, gtk.ResponseType.CANCEL,
                 )
             response = dialog.run()
             dialog.destroy()
-            if response == gtk.RESPONSE_YES:
+            if response == branch_version('gtk.RESPONSE_YES', 'gtk.ResponseType.YES'):
                 self.save_session_action()
             elif response == 1:
                 pass
-            elif response == gtk.RESPONSE_CANCEL:
+            elif response == branch_version('gtk.RESPONSE_CANCEL', 'gtk.ResponseType.CANCEL'):
                 return
         gtk.main_quit()
 
@@ -305,7 +328,7 @@ class GeneratedsGui(object):
                     method(value)
 
     def dump_params(self, msg, params):
-        print msg
+        print(msg)
         params.export(sys.stdout, 0, name_='session')
 
     def trans_params_2_dict(self):
@@ -386,16 +409,27 @@ class GeneratedsGui(object):
     # Clear all the fields/widgets to default values.    
     def on_clear_menuitem_activate(self, menuitem, data=None):
         message = 'Clear all entries?\nAre you sure?'
-        dialog = gtk.MessageDialog(
-            None,
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            gtk.MESSAGE_WARNING,
-            gtk.BUTTONS_OK_CANCEL,
-            message
-            )
+        
+        if sys.version_info.major == 2 :
+            dialog = gtk.MessageDialog(
+                    None,
+                    gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                    gtk.MESSAGE_WARNING,
+                    gtk.BUTTONS_OK_CANCEL,
+                    message
+                    )
+        else :
+            dialog = gtk.MessageDialog(
+                    None,
+                    gtk.DialogFlags.MODAL | gtk.DialogFlags.DESTROY_WITH_PARENT,
+                    gtk.MessageType.WARNING,
+                    gtk.ButtonsType.OK_CANCEL,
+                    message
+                    ) 
+        
         response = dialog.run()
         dialog.destroy()
-        if response == gtk.RESPONSE_OK:
+        if response == branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'):
             self.session_filename = None
             self.params = generateds_gui_session.sessionType(
                 input_schema='',
@@ -441,7 +475,7 @@ class GeneratedsGui(object):
             error = True
         if not error:
             msg = 'Successfully generated.'
-            self.error_message(msg, gtk.MESSAGE_INFO)
+            self.error_message(msg, branch_version('gtk.MESSAGE_INFO','gtk.MessageType.INFO'))
 
     def display_content(self, title, content):
         #content_dialog = ContentDialog()
@@ -453,26 +487,41 @@ class GeneratedsGui(object):
 ##         self.dump_params('params:', self.params)
         if self.params != self.saved_params:
             message = 'Session data has changed.\n\nSave?'
-            dialog = gtk.MessageDialog(None,
-                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-                gtk.MESSAGE_ERROR,
-                gtk.BUTTONS_NONE,
-                message)
-            dialog.add_buttons(
-                gtk.STOCK_YES, gtk.RESPONSE_YES,
+            
+            if sys.version_info.major == 2 :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                                            gtk.MESSAGE_ERROR,
+                                            gtk.BUTTONS_NONE,
+                                            message)
+                dialog.add_buttons(
+                    gtk.STOCK_YES, gtk.RESPONSE_YES,
+                    '_Discard', 1,
+                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                    )
+            else :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DialogFlags.MODAL | gtk.DialogFlags.DESTROY_WITH_PARENT,
+                                            gtk.MessageType.ERROR,
+                                            gtk.ButtonsType.NONE,
+                                            message)
+            
+                dialog.add_buttons(
+                gtk.STOCK_YES, gtk.ResponseType.YES,
                 '_Discard', 1,
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                )
+                gtk.STOCK_CANCEL, gtk.ResponseType.CANCEL,
+                )            
+
             response = dialog.run()
             dialog.destroy()
-            if response == gtk.RESPONSE_YES:
+            if response == branch_version('gtk.RESPONSE_YES','gtk.ResponseType.YES'):
                 self.save_session_action()
             elif response == 1:
                 pass
-            elif response == gtk.RESPONSE_CANCEL:
+            elif response == branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'):
                 return
         session_filename = self.choose_filename(
-            gtk.FILE_CHOOSER_ACTION_OPEN,
+            branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
             (('Session *.session', '*.session'),)
             )
         if session_filename:
@@ -488,13 +537,13 @@ class GeneratedsGui(object):
     def save_session_action(self):
         if not self.session_filename:
             filename = self.choose_filename(
-                gtk.FILE_CHOOSER_ACTION_SAVE,
+                branch_version('gtk.FILE_CHOOSER_ACTION_SAVE','gtk.FileChooserAction.SAVE'),
                 (('Session *.session', '*.session'),),
                 confirm_overwrite=True,
                 initfilename=self.session_filename,
                 buttons=(
-                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                    gtk.STOCK_SAVE, gtk.RESPONSE_OK,
+                    gtk.STOCK_CANCEL, branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'),
+                    gtk.STOCK_SAVE, branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'),
                     )
                 )
             if filename:
@@ -510,13 +559,13 @@ class GeneratedsGui(object):
 
     def on_save_session_as_menuitem_activate(self, menuitem, data=None):
         filename = self.choose_filename(
-            gtk.FILE_CHOOSER_ACTION_SAVE,
+            branch_version('gtk.FILE_CHOOSER_ACTION_SAVE','gtk.FileChooserAction.SAVE'),
             (('Session *.session', '*.session'),),
             confirm_overwrite=True,
             initfilename=self.session_filename,
             buttons=(
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                gtk.STOCK_SAVE, gtk.RESPONSE_OK,
+                gtk.STOCK_CANCEL, branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'),
+                gtk.STOCK_SAVE, branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'),
                 )
             )
         if filename:
@@ -538,7 +587,8 @@ class GeneratedsGui(object):
             namespacedef_='')
         outfile.close()
         msg = 'Session saved to file:\n%s' % (filename, )
-        self.error_message(msg, gtk.MESSAGE_INFO)
+        msgTy = branch_version('gtk.MESSAGE_INFO','gtk.MessageType.INFO')
+        self.error_message(msg, msgTy)
         self.saved_params = self.params.copy()
 
     def load_session(self, filename):
@@ -555,12 +605,12 @@ class GeneratedsGui(object):
             self.trans_obj_2_gui()
             self.trans_gui_2_obj()
             self.saved_params = self.params.copy()
-        except IOError, exp:
+        except IOError as exp:
             msg = str(exp)
-            self.error_message(msg, gtk.MESSAGE_ERROR)
-        except expat.ExpatError, exp:
+            self.error_message(msg)
+        except expat.ExpatError as exp:
             msg = '%s file: %s' % (str(exp), filename, )
-            self.error_message(msg, gtk.MESSAGE_ERROR)
+            self.error_message(msg)
 
     def on_about_menu_item_activate(self, menuitem, data=None):
         if self.about_dialog:
@@ -591,13 +641,17 @@ class GeneratedsGui(object):
         self.about_dialog = about_dialog
         about_dialog.show()
 
-    def error_message(self, message, message_type=gtk.MESSAGE_ERROR):
+    def error_message(self, message, message_type=None):
         # log to terminal window
         #print message
         # create an error message dialog and display modally to the user
+        if message_type is None:
+            message_type = branch_version('gtk.MESSAGE_ERROR','gtk.MessageType.ERROR')
+            
         dialog = gtk.MessageDialog(None,
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            message_type, gtk.BUTTONS_OK, message)
+            branch_version('gtk.DIALOG_MODAL','gtk.DialogFlags.MODAL') | branch_version('gtk.DIALOG_DESTROY_WITH_PARENT','gtk.DialogFlags.DESTROY_WITH_PARENT'),
+            message_type, branch_version('gtk.BUTTONS_OK','gtk.ButtonsType.OK'), message)
+        
         dialog.run()
         dialog.destroy()
 
@@ -607,7 +661,7 @@ class GeneratedsGui(object):
         self.statusbar.push(self.statusbar_cid, msg)
 
     def on_input_schema_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_OPEN,
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
             (('Schemas *.xsd', '*.xsd'),))
         if filename:
             self.input_schema_entry.set_text(filename)
@@ -625,31 +679,35 @@ class GeneratedsGui(object):
             self.output_subclass_entry.set_text(filename)
 
     def on_behavior_filename_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_OPEN,
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
             (('Python *.py', '*.py'),))
         if filename:
             self.behavior_filename_entry.set_text(filename)
 
     def on_validator_bodies_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER','gtk.FileChooserAction.SELECT_FOLDER'),
             )
         if filename:
             self.validator_bodies_entry.set_text(filename)
 
     def on_user_methods_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_OPEN,
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
             (('Python *.py', '*.py'),))
         if filename:
             self.user_methods_entry.set_text(filename)
 
-    def choose_filename(self, action=gtk.FILE_CHOOSER_ACTION_SAVE,
+    def choose_filename(self, action=None,
         patterns=(), confirm_overwrite=False, initfilename=None,
         buttons=None):
+        if action is None:
+            action = branch_version('gtk.FILE_CHOOSER_ACTION_SAVE','gtk.FileChooserAction.SAVE')
         filename = None
+        ty_CANCEL = branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL')
+        ty_OK = branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK')
         if buttons is None:
             buttons=(
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                gtk.STOCK_OPEN, gtk.RESPONSE_OK,
+                gtk.STOCK_CANCEL, ty_CANCEL,
+                gtk.STOCK_OPEN, ty_OK,
                 )
         dialog = gtk.FileChooserDialog(
             title=None,
@@ -672,10 +730,10 @@ class GeneratedsGui(object):
             dialog.add_filter(filter)
         dialog.set_do_overwrite_confirmation(confirm_overwrite)
         response = dialog.run()
-        if response == gtk.RESPONSE_OK:
+        if response == branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'):
             filename = dialog.get_filename()
             self.current_folder = dialog.get_current_folder()
-        elif response == gtk.RESPONSE_CANCEL:
+        elif response == branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'):
             pass
         dialog.destroy()
         return filename
@@ -718,7 +776,7 @@ class GeneratedsGui(object):
         return True
 
     def on_ok_button_activate(self, widget, data=None):
-        #print '(GeneratedsGui) widget:', widget
+        #print( '(GeneratedsGui) widget:', widget)
         response = self.content_dialog.on_ok_button_activate(
             self.content_dialog, data)
         return response
@@ -729,12 +787,13 @@ class GeneratedsGui(object):
     #   name of the button and the name of the related entry,
     #   for example, xxx_yyy_entry : xxx_yyy_clear_button.
     def on_clear_button_clicked(self, widget, data=None):
-        name = widget.get_name()
+        name = widget.get_name() if sys.version_info.major == 2 else gtk.Buildable.get_name(widget) # http://python.6.x6.nabble.com/Confused-about-a-widget-s-name-td5015372.html
         mo = GeneratedsGui.name_pat1.search(name)
-        stem = mo.group(1)
-        name1 = '%s_entry' % (stem, )
-        ui_obj = self.ui_obj_dict[name1]
-        ui_obj.set_text('')
+        if not mo is None:
+            stem = mo.group(1)
+            name1 = '%s_entry' % (stem, )
+            ui_obj = self.ui_obj_dict[name1]
+            ui_obj.set_text('')
 
     # Run main application window
     def main(self):
@@ -756,7 +815,7 @@ class ContentDialog(gtk.Dialog):
         self.content_dialog.hide()
 
     def on_ok_button_activate(self, widget, data=None):
-        #print '(content_dialog) widget:', widget
+        #print( '(content_dialog) widget:', widget)
         return False
 
 
@@ -764,6 +823,17 @@ class ContentDialog(gtk.Dialog):
 # Functions for internal use
 #
 
+def branch_version(for_2, for_3):
+    """
+    The Branch works depends on the version of Python
+    """
+    if sys.version_info.major == 2:
+        return eval(for_2)
+    elif sys.version_info.major == 3:
+        return eval(for_3)
+    else:
+        return eval(for_3)
+    
 def capture_options(options):
     config_parser = ConfigParser()
     config_parser.read([
@@ -850,9 +920,7 @@ def main():
 # Do not change the next 3 lines.
 ## UI_SPECIFICATION ##
 
-Ui_spec = """
-
-<?xml version="1.0"?>
+Ui_spec = """<?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="2.16"/>
   <!-- interface-naming-policy project-wide -->
@@ -2070,7 +2138,6 @@ name.</property>
     <property name="default_width">800</property>
     <property name="default_height">600</property>
     <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox3">
         <property name="visible">True</property>
diff --git a/gui/generateds_gui_ru.glade b/gui/generateds_gui_ru.glade
new file mode 100644
index 0000000000000000000000000000000000000000..cff98a3de493f8546a1104b9d130b58f7f2c663e
--- /dev/null
+++ b/gui/generateds_gui_ru.glade
@@ -0,0 +1,1375 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkWindow" id="window1">
+    <accel-groups>
+      <group name="accelgroup1"/>
+    </accel-groups>
+    <signal name="delete_event" handler="on_window_delete_event"/>
+    <child>
+      <object class="GtkVBox" id="vbox1">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkMenuBar" id="menubar1">
+            <property name="visible">True</property>
+            <child>
+              <object class="GtkMenuItem" id="menuitem1">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Файл</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu1">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="clear_menuitem">
+                        <property name="label">Очистить</property>
+                        <property name="visible">True</property>
+						<property name="tooltip_text" translatable="yes">Очистить все поля.</property>
+                        <property name="use_underline">True</property>
+                        <property name="image">image4</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_clear_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="open_session_menuitem">
+                        <property name="label">_Загрузить сессию</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Загрузить предыдущую сохраненную сессию.</property>
+                        <property name="use_underline">True</property>
+                        <property name="image">image3</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_open_session_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="save_session_menuitem">
+                        <property name="label">_Сохраниь сессию</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Сохранить текущую сессию.</property>
+                        <property name="use_underline">True</property>
+                        <property name="image">image1</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_save_session_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="save_session_as_menuitem">
+                        <property name="label">Сохранить сессию как ...</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Сохранить текущую сессию в
+файл указанный пользователем.</property>
+                        <property name="image">image2</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <signal name="activate" handler="on_save_session_as_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparatorMenuItem" id="menuitem5">
+                        <property name="visible">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="imagemenuitem5">
+                        <property name="label">gtk-quit</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Выти из приложения.</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <signal name="activate" handler="on_quit_menu_item_activate"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem2">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Инструмент</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu2">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkMenuItem" id="capture_cl_menuitem">
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Генерация командной строки, для вызова generateDS.py с 
+параметрами определенными в полях формы.</property>
+                        <property name="label" translatable="yes">_Capture CL</property>
+                        <property name="use_underline">True</property>
+                        <accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_capture_cl_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="generate_menuitem">
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Запуск generateDS и создание модулей.</property>
+                        <property name="label" translatable="yes">_Generate</property>
+                        <property name="use_underline">True</property>
+                        <accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_generate_menuitem_activate"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem4">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Помощь</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu3">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="imagemenuitem10">
+                        <property name="label">gtk-about</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <signal name="activate" handler="on_about_menu_item_activate"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTable" id="table1">
+            <property name="visible">True</property>
+            <property name="n_rows">23</property>
+            <property name="n_columns">4</property>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Входной файл  XML Schema (.xsd):</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Результирующий файл (api) superclass file:</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Результирующий дочерний (sub) subclass file:</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Переписывать без вопросов:</property>
+              </object>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="force_checkbutton">
+                <property name="label" translatable="yes">Ага! Переписывать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Всегда перезаписывать выходные файлы.
+Не спрашивать подтверждения.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="input_schema_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Путь и имя входного файла
+XML schema ( .xsd) для
+генерации модулей.</property>
+                <property name="invisible_char">●</property>
+                <property name="width_chars">80</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="output_superclass_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Путь и имя выходного файла 
+полученного автоматически на основе XML схемы,
+который будет содержать суперклассы.</property>
+                <property name="invisible_char">●</property>
+                <signal name="changed" handler="on_output_superclass_entry_changed"/>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="output_subclass_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Путь и имя выходного файла 
+полученного автоматически на основе XML схемы,
+который будет содержать подклассы.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label5">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Префикс (для имен классов):</property>
+              </object>
+              <packing>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="prefix_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Префикс для имен классов.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label6">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Префикс пространства имен:</property>
+              </object>
+              <packing>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="namespace_prefix_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="events">GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                <property name="tooltip_text" translatable="yes">Переопределение имен по умолчанию
+префикс в файле схемы.
+Пример:-a "xsd:"
+По умолчанию: "xs:".</property>
+                <property name="invisible_char">●</property>
+                <signal name="changed" handler="on_namespace_prefix_entry_changed"/>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label7">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Имя файла поведения (XMLBehaviors):</property>
+              </object>
+              <packing>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="behavior_filename_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Входное имя файла для 
+добавления методов в файл подклассов.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label8">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Генерировать Python свойства:</property>
+              </object>
+              <packing>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="properties_checkbutton">
+                <property name="label" translatable="yes">Свойства</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Генерировать члены свойств и новых стилей классов.
+Причины формируемых классов для наследования от класса объекта. 
+Создает вызов функции встроенного свойства для каждой пары getters и setters. 
+Экспериментально.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label9">
+                <property name="visible">True</property>
+                <property name="tooltip_text" translatable="yes">Поиск каталогов для дополнительных
+файлов схем</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Пути для поиска:</property>
+              </object>
+              <packing>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="search_path_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Поиск каталогов для дополнительных
+файлов схем.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label10">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Суффикс подкласса:</property>
+              </object>
+              <packing>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="subclass_suffix_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Добавлять этот текст к генерируемым именам подклассов.
+По умолчанию="Sub".</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label11">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Корневой элемент:</property>
+              </object>
+              <packing>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="root_element_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Предположим, что это значение является именем
+корневого элемента экземпляра документов.
+По умолчанию первый элемент определен в схеме.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="input_schema_chooser_button">
+                <property name="label" translatable="yes">Выбрать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выберите файл (xsd) входной схемы.</property>
+                <signal name="clicked" handler="on_input_schema_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_superclass_chooser_button">
+                <property name="label" translatable="yes">Выбрать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выбор выходного файла суперкласса.</property>
+                <signal name="clicked" handler="on_output_superclass_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_subclass_chooser_button">
+                <property name="label" translatable="yes">Выбрать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выбор выходного файла подкласа.</property>
+                <signal name="clicked" handler="on_output_subclass_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="behavior_filename_chooser_button">
+                <property name="label" translatable="yes">Выбрать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выберите имя входного файла для
+поведения добавления в подклассах.</property>
+                <signal name="clicked" handler="on_behavior_filename_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label12">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Родительский модуль(Superclass module):</property>
+              </object>
+              <packing>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="superclass_module_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Имя родительского модуля в дочернем модуле.
+По умолчанию="???".</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label13">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Использовать старые методы 
+getters(получения) и setters(установки):</property>
+              </object>
+              <packing>
+                <property name="top_attach">12</property>
+                <property name="bottom_attach">13</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="old_getters_setters_checkbutton">
+                <property name="label" translatable="yes">Старые методы getters и setters</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Имя получения и установки GetVar() и SETVAR (),
+вместо get_var() и set_var().</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">12</property>
+                <property name="bottom_attach">13</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label14">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Пути к методам проверки:</property>
+              </object>
+              <packing>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label15">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Модуль пользовательских методов:</property>
+              </object>
+              <packing>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label16">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Не печатать дату:</property>
+              </object>
+              <packing>
+                <property name="top_attach">15</property>
+                <property name="bottom_attach">16</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label17">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Не печатать версию:</property>
+              </object>
+              <packing>
+                <property name="top_attach">16</property>
+                <property name="bottom_attach">17</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="no_dates_checkbutton">
+                <property name="label" translatable="yes">Не выводить дату в генерируемые файлы</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Не включать текущую дату в сгенерированных
+файлах. Это полезно, если вы хотите свести к минимуму
+сумму (без операций) изменений в
+генерируемый код Python.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">15</property>
+                <property name="bottom_attach">16</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="validator_bodies_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Путь к каталогу, содержащему файлы, которые предоставляют
+органы (implementations) методов проверки.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="validator_bodies_chooser_button">
+                <property name="label" translatable="yes">Выбрать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выберите путь к каталогу, содержащему файлы, которые предоставляют
+органы (реализации) методов проверки.</property>
+                <signal name="clicked" handler="on_validator_bodies_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="no_versions_checkbutton">
+                <property name="label" translatable="yes">Не печатать версию в генерируемом выводе</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Не включать текущую версию в созданных
+файлах. Это полезно, если вы хотите свести к минимуму
+сумму (без операции) изменений в
+генерируемом коде Python .</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">16</property>
+                <property name="bottom_attach">17</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="user_methods_button">
+                <property name="label" translatable="yes">Выбрать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выберите дополнительный модуль, содержащий пользовательские методы.  См.
+раздел «User Methods» в документации.</property>
+                <signal name="clicked" handler="on_user_methods_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="user_methods_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Дополнительный модуль, содержащий пользовательские методы.  См.
+раздел «User Methods» в документации.</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label18">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Не включать процессы:</property>
+              </object>
+              <packing>
+                <property name="top_attach">17</property>
+                <property name="bottom_attach">18</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label19">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Не выводить отладочную информацию:</property>
+              </object>
+              <packing>
+                <property name="top_attach">18</property>
+                <property name="bottom_attach">19</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="no_process_includes_checkbutton">
+                <property name="label" translatable="yes">Не включать процессы.</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Не исполнять импортированные XML схемы. По
+умолчанию, generateDS.py будет вставлять содержимое
+из файлов, на которые ссылается &lt;include ... /&gt;
+элементы внутрь  XML Schema to be processed.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">17</property>
+                <property name="bottom_attach">18</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="silence_checkbutton">
+                <property name="label" translatable="yes">Не выводить XML текст в окно вывода при генерации</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Как правило, код, сгенерированный с generateDS
+отображается в виде ЭХО в окне вывода. Используйте
+этот параметр, чтобы отключить это поведение.
+</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">18</property>
+                <property name="bottom_attach">19</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label20">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Определение пространства имен:</property>
+              </object>
+              <packing>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label21">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Внешняя кодировка:</property>
+              </object>
+              <packing>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label22">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Спецификация членов:</property>
+              </object>
+              <packing>
+                <property name="top_attach">22</property>
+                <property name="bottom_attach">23</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="namespace_defs_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Определения пространства имен, будет принято в качестве
+Значения параметра namespacedef_ parameter of
+the export() метода сгенерированного функциями
+Parse() и parseString().
+Default=''.  Example:
+xmlns:abc="http://www.abc.com"</property>
+                <property name="invisible_char">●</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="external_encoding_entry">
+                <property name="visible">True</property>
+                <property name="tooltip_text" translatable="yes">Кодирование вывода, в результате экспорта
+методы будут написаны с использованием этой кодировки.  По умолчанию, если не указано,
+значение возвращается sys.getdefaultencoding().
+Example: utf-8.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="member_specs_combobox_container">
+                <property name="visible">True</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">22</property>
+                <property name="bottom_attach">23</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="empty_namespace_prefix_checkbutton">
+                <property name="label" translatable="yes">Без префикса</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Пустое пространство имен
+префикс в XML- схемы, а не
+по умолчанию ( "xs: " ).</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_empty_namespace_prefix_checkbutton_toggled"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="auto_super_checkbutton">
+                <property name="label" translatable="yes">Автоматом</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Использовать имя файла суперкласса
+as the super-class module
+name</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_auto_super_checkbutton_toggled"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="input_schema_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле входного файла XML схемы  .</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_superclass_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле выходного файла superclass.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_subclass_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле от имени выходного файла subclass.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="prefix_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле префикса.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="namespace_prefix_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле префикса XML пространства имен .</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="behavior_filename_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле файла поведения.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="search_path_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле пути поиска.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">8</property>
+                <property name="bottom_attach">9</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="subclass_suffix_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле subclass suffix.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="root_element_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле ключевого элемента.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="superclass_module_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле родительского модуля.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="validator_bodies_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле методов проверки.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="user_methods_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле пользовательского метода.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="namespace_defs_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле определения пространства имен.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="external_encoding_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Очистить поле внешней кодировки.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label23">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Вернуть кодировку</property>
+              </object>
+              <packing>
+                <property name="top_attach">21</property>
+                <property name="bottom_attach">22</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="get_encoded_checkbutton">
+                <property name="label" translatable="yes">Вернуть закодированные значения по умолчанию</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Вернуть закодированные значения по умолчанию, если ИСТИНА.
+Может быть изменено во время выполнения либо
+(1) изменение глобальной переменной или GetEncodedValue
+(2) с помощью дополнительного параметра для получателя.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">21</property>
+                <property name="bottom_attach">22</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="homogeneous">True</property>
+            <child>
+              <object class="GtkButton" id="generate_button">
+                <property name="label" translatable="yes">Создать</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Создание указанных модулей.</property>
+                <signal name="clicked" handler="on_generate_button_clicked"/>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="quit_button">
+                <property name="label" translatable="yes">Выход</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Выход из приложения.</property>
+                <signal name="clicked" handler="on_quit_button_clicked"/>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkStatusbar" id="statusbar1">
+            <property name="visible">True</property>
+            <property name="spacing">2</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkAccelGroup" id="accelgroup1"/>
+  <object class="GtkDialog" id="content_dialog">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Сообщения и содержание</property>
+    <property name="default_width">800</property>
+    <property name="default_height">600</property>
+    <property name="type_hint">normal</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox3">
+        <property name="visible">True</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">automatic</property>
+            <property name="vscrollbar_policy">automatic</property>
+            <child>
+              <object class="GtkTextView" id="content_textview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="editable">False</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area3">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="content_dialog_ok_button">
+                <property name="label" translatable="yes">OK</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="activate" handler="on_ok_button_activate"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">content_dialog_ok_button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-save</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-save-as</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="stock">gtk-open</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="stock">gtk-clear</property>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="stock">gtk-missing-image</property>
+  </object>
+</interface>
diff --git a/gui/generateds_gui_session.py b/gui/generateds_gui_session.py
index 62807227caf94bd66ead0019ac31ca473b459d37..4a4ef0966fcbaf35198d0b3cd25ab2b6c0f6edce 100644
--- a/gui/generateds_gui_session.py
+++ b/gui/generateds_gui_session.py
@@ -1,862 +1,862 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*- 
-
-#
-# Generated Wed Dec  8 14:24:46 2010 by generateDS.py version 2.3a.
-#
-
-import sys
-import getopt
-import re as re_
-
-etree_ = None
-Verbose_import_ = False
-(   XMLParser_import_none, XMLParser_import_lxml,
-    XMLParser_import_elementtree
-    ) = range(3)
-XMLParser_import_library = None
-try:
-    # lxml
-    from lxml import etree as etree_
-    XMLParser_import_library = XMLParser_import_lxml
-    if Verbose_import_:
-        print("running with lxml.etree")
-except ImportError:
-    try:
-        # cElementTree from Python 2.5+
-        import xml.etree.cElementTree as etree_
-        XMLParser_import_library = XMLParser_import_elementtree
-        if Verbose_import_:
-            print("running with cElementTree on Python 2.5+")
-    except ImportError:
-        try:
-            # ElementTree from Python 2.5+
-            import xml.etree.ElementTree as etree_
-            XMLParser_import_library = XMLParser_import_elementtree
-            if Verbose_import_:
-                print("running with ElementTree on Python 2.5+")
-        except ImportError:
-            try:
-                # normal cElementTree install
-                import cElementTree as etree_
-                XMLParser_import_library = XMLParser_import_elementtree
-                if Verbose_import_:
-                    print("running with cElementTree")
-            except ImportError:
-                try:
-                    # normal ElementTree install
-                    import elementtree.ElementTree as etree_
-                    XMLParser_import_library = XMLParser_import_elementtree
-                    if Verbose_import_:
-                        print("running with ElementTree")
-                except ImportError:
-                    raise ImportError("Failed to import ElementTree from any known place")
-
-def parsexml_(*args, **kwargs):
-    if (XMLParser_import_library == XMLParser_import_lxml and
-        'parser' not in kwargs):
-        # Use the lxml ElementTree compatible parser so that, e.g.,
-        #   we ignore comments.
-        kwargs['parser'] = etree_.ETCompatXMLParser()
-    doc = etree_.parse(*args, **kwargs)
-    return doc
-
-#
-# User methods
-#
-# 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.
-
-try:
-    from generatedssuper import GeneratedsSuper
-except ImportError, exp:
-
-    class GeneratedsSuper(object):
-        def gds_format_string(self, input_data, input_name=''):
-            return input_data
-        def gds_format_integer(self, input_data, input_name=''):
-            return '%d' % input_data
-        def gds_format_float(self, input_data, input_name=''):
-            return '%f' % input_data
-        def gds_format_double(self, input_data, input_name=''):
-            return '%e' % input_data
-        def gds_format_boolean(self, input_data, input_name=''):
-            return '%s' % input_data
-        def gds_str_lower(self, instring):
-            return instring.lower()
-                    
-                    
-
-#
-# 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]+")
-
-#
-# Support/utility functions.
-#
-
-def showIndent(outfile, level):
-    for idx in range(level):
-        outfile.write('    ')
-
-def quote_xml(inStr):
-    if not inStr:
-        return ''
-    s1 = (isinstance(inStr, basestring) and inStr or
-          '%s' % inStr)
-    s1 = s1.replace('&', '&amp;')
-    s1 = s1.replace('<', '&lt;')
-    s1 = s1.replace('>', '&gt;')
-    return s1
-
-def quote_attrib(inStr):
-    s1 = (isinstance(inStr, basestring) 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
-
-
-class GDSParseError(Exception):
-    pass
-
-def raise_parse_error(node, msg):
-    if XMLParser_import_library == XMLParser_import_lxml:
-        msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
-    else:
-        msg = '%s (element %s)' % (msg, node.tag, )
-    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
-    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):
-        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)
-    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))
-    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):
-        self.name = name
-        self.data_type = data_type
-        self.container = container
-    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 _cast(typ, value):
-    if typ is None or value is None:
-        return value
-    return typ(value)
-
-#
-# Mixin class for additional behaviors.
-#
-
-class SessionTypeMixin(object):
-    def copy(self):
-        """Produce a copy of myself.
-        """
-        new_session = sessionType(
-            input_schema = self.input_schema,
-            output_superclass = self.output_superclass,
-            output_subclass = self.output_subclass,
-            force = self.force,
-            prefix = self.prefix,
-            namespace_prefix = self.namespace_prefix,
-            empty_namespace_prefix = self.empty_namespace_prefix,
-            behavior_filename = self.behavior_filename,
-            properties = self.properties,
-            subclass_suffix = self.subclass_suffix,
-            root_element = self.root_element,
-            superclass_module = self.superclass_module,
-            auto_super = self.auto_super,
-            old_getters_setters = self.old_getters_setters,
-            validator_bodies = self.validator_bodies,
-            user_methods = self.user_methods,
-            no_dates = self.no_dates,
-            no_versions = self.no_versions,
-            no_process_includes = self.no_process_includes,
-            silence = self.silence,
-            namespace_defs = self.namespace_defs,
-            external_encoding = self.external_encoding,
-            member_specs = self.member_specs,
-            )
-        return new_session
-
-    def __eq__(self, obj):
-        """Implement the == operator.
-        """
-        if (
-            obj.input_schema == self.input_schema and
-            obj.output_superclass == self.output_superclass and
-            obj.output_subclass == self.output_subclass and
-            obj.force == self.force and
-            obj.prefix == self.prefix and
-            obj.namespace_prefix == self.namespace_prefix and
-            obj.empty_namespace_prefix == self.empty_namespace_prefix and
-            obj.behavior_filename == self.behavior_filename and
-            obj.properties == self.properties and
-            obj.subclass_suffix == self.subclass_suffix and
-            obj.root_element == self.root_element and
-            obj.superclass_module == self.superclass_module and
-            obj.auto_super == self.auto_super and
-            obj.old_getters_setters == self.old_getters_setters and
-            obj.validator_bodies == self.validator_bodies and
-            obj.user_methods == self.user_methods and
-            obj.no_dates == self.no_dates and
-            obj.no_versions == self.no_versions and
-            obj.no_process_includes == self.no_process_includes and
-            obj.silence == self.silence and
-            obj.namespace_defs == self.namespace_defs and
-            obj.external_encoding == self.external_encoding and
-            obj.member_specs == self.member_specs):
-            return True
-        else:
-            return False
-
-    def __ne__(self, obj):
-        """Implement the != operator.
-        """
-        return not self.__eq__(obj)
-
-#
-# Data representation classes.
-#
-
-class sessionType(GeneratedsSuper, SessionTypeMixin):
-    member_data_items_ = [
-        MemberSpec_('input_schema', 'xs:string', 0),
-        MemberSpec_('output_superclass', 'xs:string', 0),
-        MemberSpec_('output_subclass', 'xs:string', 0),
-        MemberSpec_('force', 'xs:boolean', 0),
-        MemberSpec_('prefix', 'xs:string', 0),
-        MemberSpec_('namespace_prefix', 'xs:string', 0),
-        MemberSpec_('empty_namespace_prefix', 'xs:boolean', 0),
-        MemberSpec_('behavior_filename', 'xs:string', 0),
-        MemberSpec_('properties', 'xs:boolean', 0),
-        MemberSpec_('subclass_suffix', 'xs:string', 0),
-        MemberSpec_('root_element', 'xs:string', 0),
-        MemberSpec_('superclass_module', 'xs:string', 0),
-        MemberSpec_('auto_super', 'xs:boolean', 0),
-        MemberSpec_('old_getters_setters', 'xs:boolean', 0),
-        MemberSpec_('validator_bodies', 'xs:string', 0),
-        MemberSpec_('user_methods', 'xs:string', 0),
-        MemberSpec_('no_dates', 'xs:boolean', 0),
-        MemberSpec_('no_versions', 'xs:boolean', 0),
-        MemberSpec_('no_process_includes', 'xs:boolean', 0),
-        MemberSpec_('silence', 'xs:boolean', 0),
-        MemberSpec_('namespace_defs', 'xs:string', 0),
-        MemberSpec_('external_encoding', 'xs:string', 0),
-        MemberSpec_('member_specs', 'xs:string', 0),
-        ]
-    subclass = None
-    superclass = None
-    def __init__(self, input_schema=None, output_superclass=None, output_subclass=None, force=None, prefix=None, namespace_prefix=None, empty_namespace_prefix=None, behavior_filename=None, properties=None, subclass_suffix=None, root_element=None, superclass_module=None, auto_super=None, old_getters_setters=None, validator_bodies=None, user_methods=None, no_dates=None, no_versions=None, no_process_includes=None, silence=None, namespace_defs=None, external_encoding=None, member_specs=None):
-        self.input_schema = input_schema
-        self.output_superclass = output_superclass
-        self.output_subclass = output_subclass
-        self.force = force
-        self.prefix = prefix
-        self.namespace_prefix = namespace_prefix
-        self.empty_namespace_prefix = empty_namespace_prefix
-        self.behavior_filename = behavior_filename
-        self.properties = properties
-        self.subclass_suffix = subclass_suffix
-        self.root_element = root_element
-        self.superclass_module = superclass_module
-        self.auto_super = auto_super
-        self.old_getters_setters = old_getters_setters
-        self.validator_bodies = validator_bodies
-        self.user_methods = user_methods
-        self.no_dates = no_dates
-        self.no_versions = no_versions
-        self.no_process_includes = no_process_includes
-        self.silence = silence
-        self.namespace_defs = namespace_defs
-        self.external_encoding = external_encoding
-        self.member_specs = member_specs
-    def factory(*args_, **kwargs_):
-        if sessionType.subclass:
-            return sessionType.subclass(*args_, **kwargs_)
-        else:
-            return sessionType(*args_, **kwargs_)
-    factory = staticmethod(factory)
-    def get_input_schema(self): return self.input_schema
-    def set_input_schema(self, input_schema): self.input_schema = input_schema
-    def get_output_superclass(self): return self.output_superclass
-    def set_output_superclass(self, output_superclass): self.output_superclass = output_superclass
-    def get_output_subclass(self): return self.output_subclass
-    def set_output_subclass(self, output_subclass): self.output_subclass = output_subclass
-    def get_force(self): return self.force
-    def set_force(self, force): self.force = force
-    def get_prefix(self): return self.prefix
-    def set_prefix(self, prefix): self.prefix = prefix
-    def get_namespace_prefix(self): return self.namespace_prefix
-    def set_namespace_prefix(self, namespace_prefix): self.namespace_prefix = namespace_prefix
-    def get_empty_namespace_prefix(self): return self.empty_namespace_prefix
-    def set_empty_namespace_prefix(self, empty_namespace_prefix): self.empty_namespace_prefix = empty_namespace_prefix
-    def get_behavior_filename(self): return self.behavior_filename
-    def set_behavior_filename(self, behavior_filename): self.behavior_filename = behavior_filename
-    def get_properties(self): return self.properties
-    def set_properties(self, properties): self.properties = properties
-    def get_subclass_suffix(self): return self.subclass_suffix
-    def set_subclass_suffix(self, subclass_suffix): self.subclass_suffix = subclass_suffix
-    def get_root_element(self): return self.root_element
-    def set_root_element(self, root_element): self.root_element = root_element
-    def get_superclass_module(self): return self.superclass_module
-    def set_superclass_module(self, superclass_module): self.superclass_module = superclass_module
-    def get_auto_super(self): return self.auto_super
-    def set_auto_super(self, auto_super): self.auto_super = auto_super
-    def get_old_getters_setters(self): return self.old_getters_setters
-    def set_old_getters_setters(self, old_getters_setters): self.old_getters_setters = old_getters_setters
-    def get_validator_bodies(self): return self.validator_bodies
-    def set_validator_bodies(self, validator_bodies): self.validator_bodies = validator_bodies
-    def get_user_methods(self): return self.user_methods
-    def set_user_methods(self, user_methods): self.user_methods = user_methods
-    def get_no_dates(self): return self.no_dates
-    def set_no_dates(self, no_dates): self.no_dates = no_dates
-    def get_no_versions(self): return self.no_versions
-    def set_no_versions(self, no_versions): self.no_versions = no_versions
-    def get_no_process_includes(self): return self.no_process_includes
-    def set_no_process_includes(self, no_process_includes): self.no_process_includes = no_process_includes
-    def get_silence(self): return self.silence
-    def set_silence(self, silence): self.silence = silence
-    def get_namespace_defs(self): return self.namespace_defs
-    def set_namespace_defs(self, namespace_defs): self.namespace_defs = namespace_defs
-    def get_external_encoding(self): return self.external_encoding
-    def set_external_encoding(self, external_encoding): self.external_encoding = external_encoding
-    def get_member_specs(self): return self.member_specs
-    def set_member_specs(self, member_specs): self.member_specs = member_specs
-    def export(self, outfile, level, namespace_='', name_='sessionType', namespacedef_=''):
-        showIndent(outfile, level)
-        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        self.exportAttributes(outfile, level, [], namespace_, name_='sessionType')
-        if self.hasContent_():
-            outfile.write('>\n')
-            self.exportChildren(outfile, level + 1, namespace_, name_)
-            showIndent(outfile, level)
-            outfile.write('</%s%s>\n' % (namespace_, name_))
-        else:
-            outfile.write('/>\n')
-    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='sessionType'):
-        pass
-    def exportChildren(self, outfile, level, namespace_='', name_='sessionType'):
-        if self.input_schema is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sinput_schema>%s</%sinput_schema>\n' % (namespace_, self.gds_format_string(quote_xml(self.input_schema).encode(ExternalEncoding), input_name='input_schema'), namespace_))
-        if self.output_superclass is not None:
-            showIndent(outfile, level)
-            outfile.write('<%soutput_superclass>%s</%soutput_superclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_superclass).encode(ExternalEncoding), input_name='output_superclass'), namespace_))
-        if self.output_subclass is not None:
-            showIndent(outfile, level)
-            outfile.write('<%soutput_subclass>%s</%soutput_subclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_subclass).encode(ExternalEncoding), input_name='output_subclass'), namespace_))
-        if self.force is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sforce>%s</%sforce>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.force)), input_name='force'), namespace_))
-        if self.prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sprefix>%s</%sprefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.prefix).encode(ExternalEncoding), input_name='prefix'), namespace_))
-        if self.namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%snamespace_prefix>%s</%snamespace_prefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_prefix).encode(ExternalEncoding), input_name='namespace_prefix'), namespace_))
-        if self.empty_namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sempty_namespace_prefix>%s</%sempty_namespace_prefix>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.empty_namespace_prefix)), input_name='empty_namespace_prefix'), namespace_))
-        if self.behavior_filename is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sbehavior_filename>%s</%sbehavior_filename>\n' % (namespace_, self.gds_format_string(quote_xml(self.behavior_filename).encode(ExternalEncoding), input_name='behavior_filename'), namespace_))
-        if self.properties is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sproperties>%s</%sproperties>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.properties)), input_name='properties'), namespace_))
-        if self.subclass_suffix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%ssubclass_suffix>%s</%ssubclass_suffix>\n' % (namespace_, self.gds_format_string(quote_xml(self.subclass_suffix).encode(ExternalEncoding), input_name='subclass_suffix'), namespace_))
-        if self.root_element is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sroot_element>%s</%sroot_element>\n' % (namespace_, self.gds_format_string(quote_xml(self.root_element).encode(ExternalEncoding), input_name='root_element'), namespace_))
-        if self.superclass_module is not None:
-            showIndent(outfile, level)
-            outfile.write('<%ssuperclass_module>%s</%ssuperclass_module>\n' % (namespace_, self.gds_format_string(quote_xml(self.superclass_module).encode(ExternalEncoding), input_name='superclass_module'), namespace_))
-        if self.auto_super is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sauto_super>%s</%sauto_super>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.auto_super)), input_name='auto_super'), namespace_))
-        if self.old_getters_setters is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sold_getters_setters>%s</%sold_getters_setters>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.old_getters_setters)), input_name='old_getters_setters'), namespace_))
-        if self.validator_bodies is not None:
-            showIndent(outfile, level)
-            outfile.write('<%svalidator_bodies>%s</%svalidator_bodies>\n' % (namespace_, self.gds_format_string(quote_xml(self.validator_bodies).encode(ExternalEncoding), input_name='validator_bodies'), namespace_))
-        if self.user_methods is not None:
-            showIndent(outfile, level)
-            outfile.write('<%suser_methods>%s</%suser_methods>\n' % (namespace_, self.gds_format_string(quote_xml(self.user_methods).encode(ExternalEncoding), input_name='user_methods'), namespace_))
-        if self.no_dates is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sno_dates>%s</%sno_dates>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_dates)), input_name='no_dates'), namespace_))
-        if self.no_versions is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sno_versions>%s</%sno_versions>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_versions)), input_name='no_versions'), namespace_))
-        if self.no_process_includes is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sno_process_includes>%s</%sno_process_includes>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_process_includes)), input_name='no_process_includes'), namespace_))
-        if self.silence is not None:
-            showIndent(outfile, level)
-            outfile.write('<%ssilence>%s</%ssilence>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.silence)), input_name='silence'), namespace_))
-        if self.namespace_defs is not None:
-            showIndent(outfile, level)
-            outfile.write('<%snamespace_defs>%s</%snamespace_defs>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_defs).encode(ExternalEncoding), input_name='namespace_defs'), namespace_))
-        if self.external_encoding is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sexternal_encoding>%s</%sexternal_encoding>\n' % (namespace_, self.gds_format_string(quote_xml(self.external_encoding).encode(ExternalEncoding), input_name='external_encoding'), namespace_))
-        if self.member_specs is not None:
-            showIndent(outfile, level)
-            outfile.write('<%smember_specs>%s</%smember_specs>\n' % (namespace_, self.gds_format_string(quote_xml(self.member_specs).encode(ExternalEncoding), input_name='member_specs'), namespace_))
-    def hasContent_(self):
-        if (
-            self.input_schema is not None or
-            self.output_superclass is not None or
-            self.output_subclass is not None or
-            self.force is not None or
-            self.prefix is not None or
-            self.namespace_prefix is not None or
-            self.empty_namespace_prefix is not None or
-            self.behavior_filename is not None or
-            self.properties is not None or
-            self.subclass_suffix is not None or
-            self.root_element is not None or
-            self.superclass_module is not None or
-            self.auto_super is not None or
-            self.old_getters_setters is not None or
-            self.validator_bodies is not None or
-            self.user_methods is not None or
-            self.no_dates is not None or
-            self.no_versions is not None or
-            self.no_process_includes is not None or
-            self.silence is not None or
-            self.namespace_defs is not None or
-            self.external_encoding is not None or
-            self.member_specs is not None
-            ):
-            return True
-        else:
-            return False
-    def exportLiteral(self, outfile, level, name_='sessionType'):
-        level += 1
-        self.exportLiteralAttributes(outfile, level, name_)
-        if self.hasContent_():
-            self.exportLiteralChildren(outfile, level, name_)
-    def exportLiteralAttributes(self, outfile, level, name_):
-        pass
-    def exportLiteralChildren(self, outfile, level, name_):
-        if self.input_schema is not None:
-            showIndent(outfile, level)
-            outfile.write('input_schema=%s,\n' % quote_python(self.input_schema).encode(ExternalEncoding))
-        if self.output_superclass is not None:
-            showIndent(outfile, level)
-            outfile.write('output_superclass=%s,\n' % quote_python(self.output_superclass).encode(ExternalEncoding))
-        if self.output_subclass is not None:
-            showIndent(outfile, level)
-            outfile.write('output_subclass=%s,\n' % quote_python(self.output_subclass).encode(ExternalEncoding))
-        if self.force is not None:
-            showIndent(outfile, level)
-            outfile.write('force=%s,\n' % self.force)
-        if self.prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('prefix=%s,\n' % quote_python(self.prefix).encode(ExternalEncoding))
-        if self.namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('namespace_prefix=%s,\n' % quote_python(self.namespace_prefix).encode(ExternalEncoding))
-        if self.empty_namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('empty_namespace_prefix=%s,\n' % self.empty_namespace_prefix)
-        if self.behavior_filename is not None:
-            showIndent(outfile, level)
-            outfile.write('behavior_filename=%s,\n' % quote_python(self.behavior_filename).encode(ExternalEncoding))
-        if self.properties is not None:
-            showIndent(outfile, level)
-            outfile.write('properties=%s,\n' % self.properties)
-        if self.subclass_suffix is not None:
-            showIndent(outfile, level)
-            outfile.write('subclass_suffix=%s,\n' % quote_python(self.subclass_suffix).encode(ExternalEncoding))
-        if self.root_element is not None:
-            showIndent(outfile, level)
-            outfile.write('root_element=%s,\n' % quote_python(self.root_element).encode(ExternalEncoding))
-        if self.superclass_module is not None:
-            showIndent(outfile, level)
-            outfile.write('superclass_module=%s,\n' % quote_python(self.superclass_module).encode(ExternalEncoding))
-        if self.auto_super is not None:
-            showIndent(outfile, level)
-            outfile.write('auto_super=%s,\n' % self.auto_super)
-        if self.old_getters_setters is not None:
-            showIndent(outfile, level)
-            outfile.write('old_getters_setters=%s,\n' % self.old_getters_setters)
-        if self.validator_bodies is not None:
-            showIndent(outfile, level)
-            outfile.write('validator_bodies=%s,\n' % quote_python(self.validator_bodies).encode(ExternalEncoding))
-        if self.user_methods is not None:
-            showIndent(outfile, level)
-            outfile.write('user_methods=%s,\n' % quote_python(self.user_methods).encode(ExternalEncoding))
-        if self.no_dates is not None:
-            showIndent(outfile, level)
-            outfile.write('no_dates=%s,\n' % self.no_dates)
-        if self.no_versions is not None:
-            showIndent(outfile, level)
-            outfile.write('no_versions=%s,\n' % self.no_versions)
-        if self.no_process_includes is not None:
-            showIndent(outfile, level)
-            outfile.write('no_process_includes=%s,\n' % self.no_process_includes)
-        if self.silence is not None:
-            showIndent(outfile, level)
-            outfile.write('silence=%s,\n' % self.silence)
-        if self.namespace_defs is not None:
-            showIndent(outfile, level)
-            outfile.write('namespace_defs=%s,\n' % quote_python(self.namespace_defs).encode(ExternalEncoding))
-        if self.external_encoding is not None:
-            showIndent(outfile, level)
-            outfile.write('external_encoding=%s,\n' % quote_python(self.external_encoding).encode(ExternalEncoding))
-        if self.member_specs is not None:
-            showIndent(outfile, level)
-            outfile.write('member_specs=%s,\n' % quote_python(self.member_specs).encode(ExternalEncoding))
-    def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
-        for child in node:
-            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
-            self.buildChildren(child, nodeName_)
-    def buildAttributes(self, node, attrs, already_processed):
-        pass
-    def buildChildren(self, child_, nodeName_, from_subclass=False):
-        if nodeName_ == 'input_schema':
-            input_schema_ = child_.text
-            self.input_schema = input_schema_
-        elif nodeName_ == 'output_superclass':
-            output_superclass_ = child_.text
-            self.output_superclass = output_superclass_
-        elif nodeName_ == 'output_subclass':
-            output_subclass_ = child_.text
-            self.output_subclass = output_subclass_
-        elif nodeName_ == 'force':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.force = ival_
-        elif nodeName_ == 'prefix':
-            prefix_ = child_.text
-            self.prefix = prefix_
-        elif nodeName_ == 'namespace_prefix':
-            namespace_prefix_ = child_.text
-            self.namespace_prefix = namespace_prefix_
-        elif nodeName_ == 'empty_namespace_prefix':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.empty_namespace_prefix = ival_
-        elif nodeName_ == 'behavior_filename':
-            behavior_filename_ = child_.text
-            self.behavior_filename = behavior_filename_
-        elif nodeName_ == 'properties':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.properties = ival_
-        elif nodeName_ == 'subclass_suffix':
-            subclass_suffix_ = child_.text
-            self.subclass_suffix = subclass_suffix_
-        elif nodeName_ == 'root_element':
-            root_element_ = child_.text
-            self.root_element = root_element_
-        elif nodeName_ == 'superclass_module':
-            superclass_module_ = child_.text
-            self.superclass_module = superclass_module_
-        elif nodeName_ == 'auto_super':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.auto_super = ival_
-        elif nodeName_ == 'old_getters_setters':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.old_getters_setters = ival_
-        elif nodeName_ == 'validator_bodies':
-            validator_bodies_ = child_.text
-            self.validator_bodies = validator_bodies_
-        elif nodeName_ == 'user_methods':
-            user_methods_ = child_.text
-            self.user_methods = user_methods_
-        elif nodeName_ == 'no_dates':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.no_dates = ival_
-        elif nodeName_ == 'no_versions':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.no_versions = ival_
-        elif nodeName_ == 'no_process_includes':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.no_process_includes = ival_
-        elif nodeName_ == 'silence':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.silence = ival_
-        elif nodeName_ == 'namespace_defs':
-            namespace_defs_ = child_.text
-            self.namespace_defs = namespace_defs_
-        elif nodeName_ == 'external_encoding':
-            external_encoding_ = child_.text
-            self.external_encoding = external_encoding_
-        elif nodeName_ == 'member_specs':
-            member_specs_ = child_.text
-            self.member_specs = member_specs_
-# end class sessionType
-
-
-USAGE_TEXT = """
-Usage: python <Parser>.py [ -s ] <in_xml_file>
-"""
-
-def usage():
-    print USAGE_TEXT
-    sys.exit(1)
-
-
-def get_root_tag(node):
-    tag = Tag_pattern_.match(node.tag).groups()[-1]
-    rootClass = globals().get(tag)
-    return tag, rootClass
-
-
-def parse(inFileName):
-    doc = parsexml_(inFileName)
-    rootNode = doc.getroot()
-    rootTag, rootClass = get_root_tag(rootNode)
-    if rootClass is None:
-        rootTag = 'session'
-        rootClass = sessionType
-    rootObj = rootClass.factory()
-    rootObj.build(rootNode)
-    # Enable Python to collect the space used by the DOM.
-    doc = None
-    sys.stdout.write('<?xml version="1.0" ?>\n')
-    rootObj.export(sys.stdout, 0, name_=rootTag, 
-        namespacedef_='')
-    return rootObj
-
-
-def parseString(inString):
-    from StringIO import StringIO
-    doc = parsexml_(StringIO(inString))
-    rootNode = doc.getroot()
-    rootTag, rootClass = get_root_tag(rootNode)
-    if rootClass is None:
-        rootTag = 'session'
-        rootClass = sessionType
-    rootObj = rootClass.factory()
-    rootObj.build(rootNode)
-    # Enable Python to collect the space used by the DOM.
-    doc = None
-    sys.stdout.write('<?xml version="1.0" ?>\n')
-    rootObj.export(sys.stdout, 0, name_="session",
-        namespacedef_='')
-    return rootObj
-
-
-def parseLiteral(inFileName):
-    doc = parsexml_(inFileName)
-    rootNode = doc.getroot()
-    rootTag, rootClass = get_root_tag(rootNode)
-    if rootClass is None:
-        rootTag = 'session'
-        rootClass = sessionType
-    rootObj = rootClass.factory()
-    rootObj.build(rootNode)
-    # Enable Python to collect the space used by the DOM.
-    doc = None
-    sys.stdout.write('#from generateds_gui_session import *\n\n')
-    sys.stdout.write('import generateds_gui_session as model_\n\n')
-    sys.stdout.write('rootObj = model_.rootTag(\n')
-    rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
-    sys.stdout.write(')\n')
-    return rootObj
-
-
-def main():
-    args = sys.argv[1:]
-    if len(args) == 1:
-        parse(args[0])
-    else:
-        usage()
-
-
-if __name__ == '__main__':
-    #import pdb; pdb.set_trace()
-    main()
-
-
-__all__ = [
-    "sessionType"
-    ]
+#!/usr/bin/env python
+# -*- coding: utf-8 -*- 
+
+#
+# Generated Wed Dec  8 14:24:46 2010 by generateDS.py version 2.3a.
+#
+
+import sys
+import getopt
+import re as re_
+
+etree_ = None
+Verbose_import_ = False
+(   XMLParser_import_none, XMLParser_import_lxml,
+    XMLParser_import_elementtree
+    ) = list(range(3))
+XMLParser_import_library = None
+try:
+    # lxml
+    from lxml import etree as etree_
+    XMLParser_import_library = XMLParser_import_lxml
+    if Verbose_import_:
+        print("running with lxml.etree")
+except ImportError:
+    try:
+        # cElementTree from Python 2.5+
+        import xml.etree.cElementTree as etree_
+        XMLParser_import_library = XMLParser_import_elementtree
+        if Verbose_import_:
+            print("running with cElementTree on Python 2.5+")
+    except ImportError:
+        try:
+            # ElementTree from Python 2.5+
+            import xml.etree.ElementTree as etree_
+            XMLParser_import_library = XMLParser_import_elementtree
+            if Verbose_import_:
+                print("running with ElementTree on Python 2.5+")
+        except ImportError:
+            try:
+                # normal cElementTree install
+                import cElementTree as etree_
+                XMLParser_import_library = XMLParser_import_elementtree
+                if Verbose_import_:
+                    print("running with cElementTree")
+            except ImportError:
+                try:
+                    # normal ElementTree install
+                    import elementtree.ElementTree as etree_
+                    XMLParser_import_library = XMLParser_import_elementtree
+                    if Verbose_import_:
+                        print("running with ElementTree")
+                except ImportError:
+                    raise ImportError("Failed to import ElementTree from any known place")
+
+def parsexml_(*args, **kwargs):
+    if (XMLParser_import_library == XMLParser_import_lxml and
+        'parser' not in kwargs):
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        kwargs['parser'] = etree_.ETCompatXMLParser()
+    doc = etree_.parse(*args, **kwargs)
+    return doc
+
+#
+# User methods
+#
+# 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.
+
+try:
+    from generatedssuper import GeneratedsSuper
+except ImportError as exp:
+
+    class GeneratedsSuper(object):
+        def gds_format_string(self, input_data, input_name=''):
+            return input_data.decode('utf-8') if isinstance(input_data, bytes) else input_data
+        def gds_format_integer(self, input_data, input_name=''):
+            return '%d' % input_data
+        def gds_format_float(self, input_data, input_name=''):
+            return '%f' % input_data
+        def gds_format_double(self, input_data, input_name=''):
+            return '%e' % input_data
+        def gds_format_boolean(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_str_lower(self, instring):
+            return instring.lower()
+                    
+                    
+
+#
+# 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]+")
+
+#
+# Support/utility functions.
+#
+
+def showIndent(outfile, level):
+    for idx in range(level):
+        outfile.write('    ')
+
+def quote_xml(inStr):
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, str) and inStr or
+          '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, str) 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
+
+
+class GDSParseError(Exception):
+    pass
+
+def raise_parse_error(node, msg):
+    if XMLParser_import_library == XMLParser_import_lxml:
+        msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
+    else:
+        msg = '%s (element %s)' % (msg, node.tag, )
+    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
+    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):
+        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)
+    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))
+    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):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+    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 _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Mixin class for additional behaviors.
+#
+
+class SessionTypeMixin(object):
+    def copy(self):
+        """Produce a copy of myself.
+        """
+        new_session = sessionType(
+            input_schema = self.input_schema,
+            output_superclass = self.output_superclass,
+            output_subclass = self.output_subclass,
+            force = self.force,
+            prefix = self.prefix,
+            namespace_prefix = self.namespace_prefix,
+            empty_namespace_prefix = self.empty_namespace_prefix,
+            behavior_filename = self.behavior_filename,
+            properties = self.properties,
+            subclass_suffix = self.subclass_suffix,
+            root_element = self.root_element,
+            superclass_module = self.superclass_module,
+            auto_super = self.auto_super,
+            old_getters_setters = self.old_getters_setters,
+            validator_bodies = self.validator_bodies,
+            user_methods = self.user_methods,
+            no_dates = self.no_dates,
+            no_versions = self.no_versions,
+            no_process_includes = self.no_process_includes,
+            silence = self.silence,
+            namespace_defs = self.namespace_defs,
+            external_encoding = self.external_encoding,
+            member_specs = self.member_specs,
+            )
+        return new_session
+
+    def __eq__(self, obj):
+        """Implement the == operator.
+        """
+        if (
+            obj.input_schema == self.input_schema and
+            obj.output_superclass == self.output_superclass and
+            obj.output_subclass == self.output_subclass and
+            obj.force == self.force and
+            obj.prefix == self.prefix and
+            obj.namespace_prefix == self.namespace_prefix and
+            obj.empty_namespace_prefix == self.empty_namespace_prefix and
+            obj.behavior_filename == self.behavior_filename and
+            obj.properties == self.properties and
+            obj.subclass_suffix == self.subclass_suffix and
+            obj.root_element == self.root_element and
+            obj.superclass_module == self.superclass_module and
+            obj.auto_super == self.auto_super and
+            obj.old_getters_setters == self.old_getters_setters and
+            obj.validator_bodies == self.validator_bodies and
+            obj.user_methods == self.user_methods and
+            obj.no_dates == self.no_dates and
+            obj.no_versions == self.no_versions and
+            obj.no_process_includes == self.no_process_includes and
+            obj.silence == self.silence and
+            obj.namespace_defs == self.namespace_defs and
+            obj.external_encoding == self.external_encoding and
+            obj.member_specs == self.member_specs):
+            return True
+        else:
+            return False
+
+    def __ne__(self, obj):
+        """Implement the != operator.
+        """
+        return not self.__eq__(obj)
+
+#
+# Data representation classes.
+#
+
+class sessionType(GeneratedsSuper, SessionTypeMixin):
+    member_data_items_ = [
+        MemberSpec_('input_schema', 'xs:string', 0),
+        MemberSpec_('output_superclass', 'xs:string', 0),
+        MemberSpec_('output_subclass', 'xs:string', 0),
+        MemberSpec_('force', 'xs:boolean', 0),
+        MemberSpec_('prefix', 'xs:string', 0),
+        MemberSpec_('namespace_prefix', 'xs:string', 0),
+        MemberSpec_('empty_namespace_prefix', 'xs:boolean', 0),
+        MemberSpec_('behavior_filename', 'xs:string', 0),
+        MemberSpec_('properties', 'xs:boolean', 0),
+        MemberSpec_('subclass_suffix', 'xs:string', 0),
+        MemberSpec_('root_element', 'xs:string', 0),
+        MemberSpec_('superclass_module', 'xs:string', 0),
+        MemberSpec_('auto_super', 'xs:boolean', 0),
+        MemberSpec_('old_getters_setters', 'xs:boolean', 0),
+        MemberSpec_('validator_bodies', 'xs:string', 0),
+        MemberSpec_('user_methods', 'xs:string', 0),
+        MemberSpec_('no_dates', 'xs:boolean', 0),
+        MemberSpec_('no_versions', 'xs:boolean', 0),
+        MemberSpec_('no_process_includes', 'xs:boolean', 0),
+        MemberSpec_('silence', 'xs:boolean', 0),
+        MemberSpec_('namespace_defs', 'xs:string', 0),
+        MemberSpec_('external_encoding', 'xs:string', 0),
+        MemberSpec_('member_specs', 'xs:string', 0),
+        ]
+    subclass = None
+    superclass = None
+    def __init__(self, input_schema=None, output_superclass=None, output_subclass=None, force=None, prefix=None, namespace_prefix=None, empty_namespace_prefix=None, behavior_filename=None, properties=None, subclass_suffix=None, root_element=None, superclass_module=None, auto_super=None, old_getters_setters=None, validator_bodies=None, user_methods=None, no_dates=None, no_versions=None, no_process_includes=None, silence=None, namespace_defs=None, external_encoding=None, member_specs=None):
+        self.input_schema = input_schema
+        self.output_superclass = output_superclass
+        self.output_subclass = output_subclass
+        self.force = force
+        self.prefix = prefix
+        self.namespace_prefix = namespace_prefix
+        self.empty_namespace_prefix = empty_namespace_prefix
+        self.behavior_filename = behavior_filename
+        self.properties = properties
+        self.subclass_suffix = subclass_suffix
+        self.root_element = root_element
+        self.superclass_module = superclass_module
+        self.auto_super = auto_super
+        self.old_getters_setters = old_getters_setters
+        self.validator_bodies = validator_bodies
+        self.user_methods = user_methods
+        self.no_dates = no_dates
+        self.no_versions = no_versions
+        self.no_process_includes = no_process_includes
+        self.silence = silence
+        self.namespace_defs = namespace_defs
+        self.external_encoding = external_encoding
+        self.member_specs = member_specs
+    def factory(*args_, **kwargs_):
+        if sessionType.subclass:
+            return sessionType.subclass(*args_, **kwargs_)
+        else:
+            return sessionType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_input_schema(self): return self.input_schema
+    def set_input_schema(self, input_schema): self.input_schema = input_schema
+    def get_output_superclass(self): return self.output_superclass
+    def set_output_superclass(self, output_superclass): self.output_superclass = output_superclass
+    def get_output_subclass(self): return self.output_subclass
+    def set_output_subclass(self, output_subclass): self.output_subclass = output_subclass
+    def get_force(self): return self.force
+    def set_force(self, force): self.force = force
+    def get_prefix(self): return self.prefix
+    def set_prefix(self, prefix): self.prefix = prefix
+    def get_namespace_prefix(self): return self.namespace_prefix
+    def set_namespace_prefix(self, namespace_prefix): self.namespace_prefix = namespace_prefix
+    def get_empty_namespace_prefix(self): return self.empty_namespace_prefix
+    def set_empty_namespace_prefix(self, empty_namespace_prefix): self.empty_namespace_prefix = empty_namespace_prefix
+    def get_behavior_filename(self): return self.behavior_filename
+    def set_behavior_filename(self, behavior_filename): self.behavior_filename = behavior_filename
+    def get_properties(self): return self.properties
+    def set_properties(self, properties): self.properties = properties
+    def get_subclass_suffix(self): return self.subclass_suffix
+    def set_subclass_suffix(self, subclass_suffix): self.subclass_suffix = subclass_suffix
+    def get_root_element(self): return self.root_element
+    def set_root_element(self, root_element): self.root_element = root_element
+    def get_superclass_module(self): return self.superclass_module
+    def set_superclass_module(self, superclass_module): self.superclass_module = superclass_module
+    def get_auto_super(self): return self.auto_super
+    def set_auto_super(self, auto_super): self.auto_super = auto_super
+    def get_old_getters_setters(self): return self.old_getters_setters
+    def set_old_getters_setters(self, old_getters_setters): self.old_getters_setters = old_getters_setters
+    def get_validator_bodies(self): return self.validator_bodies
+    def set_validator_bodies(self, validator_bodies): self.validator_bodies = validator_bodies
+    def get_user_methods(self): return self.user_methods
+    def set_user_methods(self, user_methods): self.user_methods = user_methods
+    def get_no_dates(self): return self.no_dates
+    def set_no_dates(self, no_dates): self.no_dates = no_dates
+    def get_no_versions(self): return self.no_versions
+    def set_no_versions(self, no_versions): self.no_versions = no_versions
+    def get_no_process_includes(self): return self.no_process_includes
+    def set_no_process_includes(self, no_process_includes): self.no_process_includes = no_process_includes
+    def get_silence(self): return self.silence
+    def set_silence(self, silence): self.silence = silence
+    def get_namespace_defs(self): return self.namespace_defs
+    def set_namespace_defs(self, namespace_defs): self.namespace_defs = namespace_defs
+    def get_external_encoding(self): return self.external_encoding
+    def set_external_encoding(self, external_encoding): self.external_encoding = external_encoding
+    def get_member_specs(self): return self.member_specs
+    def set_member_specs(self, member_specs): self.member_specs = member_specs
+    def export(self, outfile, level, namespace_='', name_='sessionType', namespacedef_=''):
+        showIndent(outfile, level)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        self.exportAttributes(outfile, level, [], namespace_, name_='sessionType')
+        if self.hasContent_():
+            outfile.write('>\n')
+            self.exportChildren(outfile, level + 1, namespace_, name_)
+            showIndent(outfile, level)
+            outfile.write('</%s%s>\n' % (namespace_, name_))
+        else:
+            outfile.write('/>\n')
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='sessionType'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='sessionType'):
+        if self.input_schema is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sinput_schema>%s</%sinput_schema>\n' % (namespace_, self.gds_format_string(quote_xml(self.input_schema).encode(ExternalEncoding), input_name='input_schema'), namespace_))
+        if self.output_superclass is not None:
+            showIndent(outfile, level)
+            outfile.write('<%soutput_superclass>%s</%soutput_superclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_superclass).encode(ExternalEncoding), input_name='output_superclass'), namespace_))
+        if self.output_subclass is not None:
+            showIndent(outfile, level)
+            outfile.write('<%soutput_subclass>%s</%soutput_subclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_subclass).encode(ExternalEncoding), input_name='output_subclass'), namespace_))
+        if self.force is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sforce>%s</%sforce>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.force)), input_name='force'), namespace_))
+        if self.prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sprefix>%s</%sprefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.prefix).encode(ExternalEncoding), input_name='prefix'), namespace_))
+        if self.namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%snamespace_prefix>%s</%snamespace_prefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_prefix).encode(ExternalEncoding), input_name='namespace_prefix'), namespace_))
+        if self.empty_namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sempty_namespace_prefix>%s</%sempty_namespace_prefix>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.empty_namespace_prefix)), input_name='empty_namespace_prefix'), namespace_))
+        if self.behavior_filename is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sbehavior_filename>%s</%sbehavior_filename>\n' % (namespace_, self.gds_format_string(quote_xml(self.behavior_filename).encode(ExternalEncoding), input_name='behavior_filename'), namespace_))
+        if self.properties is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sproperties>%s</%sproperties>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.properties)), input_name='properties'), namespace_))
+        if self.subclass_suffix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%ssubclass_suffix>%s</%ssubclass_suffix>\n' % (namespace_, self.gds_format_string(quote_xml(self.subclass_suffix).encode(ExternalEncoding), input_name='subclass_suffix'), namespace_))
+        if self.root_element is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sroot_element>%s</%sroot_element>\n' % (namespace_, self.gds_format_string(quote_xml(self.root_element).encode(ExternalEncoding), input_name='root_element'), namespace_))
+        if self.superclass_module is not None:
+            showIndent(outfile, level)
+            outfile.write('<%ssuperclass_module>%s</%ssuperclass_module>\n' % (namespace_, self.gds_format_string(quote_xml(self.superclass_module).encode(ExternalEncoding), input_name='superclass_module'), namespace_))
+        if self.auto_super is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sauto_super>%s</%sauto_super>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.auto_super)), input_name='auto_super'), namespace_))
+        if self.old_getters_setters is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sold_getters_setters>%s</%sold_getters_setters>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.old_getters_setters)), input_name='old_getters_setters'), namespace_))
+        if self.validator_bodies is not None:
+            showIndent(outfile, level)
+            outfile.write('<%svalidator_bodies>%s</%svalidator_bodies>\n' % (namespace_, self.gds_format_string(quote_xml(self.validator_bodies).encode(ExternalEncoding), input_name='validator_bodies'), namespace_))
+        if self.user_methods is not None:
+            showIndent(outfile, level)
+            outfile.write('<%suser_methods>%s</%suser_methods>\n' % (namespace_, self.gds_format_string(quote_xml(self.user_methods).encode(ExternalEncoding), input_name='user_methods'), namespace_))
+        if self.no_dates is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sno_dates>%s</%sno_dates>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_dates)), input_name='no_dates'), namespace_))
+        if self.no_versions is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sno_versions>%s</%sno_versions>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_versions)), input_name='no_versions'), namespace_))
+        if self.no_process_includes is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sno_process_includes>%s</%sno_process_includes>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_process_includes)), input_name='no_process_includes'), namespace_))
+        if self.silence is not None:
+            showIndent(outfile, level)
+            outfile.write('<%ssilence>%s</%ssilence>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.silence)), input_name='silence'), namespace_))
+        if self.namespace_defs is not None:
+            showIndent(outfile, level)
+            outfile.write('<%snamespace_defs>%s</%snamespace_defs>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_defs).encode(ExternalEncoding), input_name='namespace_defs'), namespace_))
+        if self.external_encoding is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sexternal_encoding>%s</%sexternal_encoding>\n' % (namespace_, self.gds_format_string(quote_xml(self.external_encoding).encode(ExternalEncoding), input_name='external_encoding'), namespace_))
+        if self.member_specs is not None:
+            showIndent(outfile, level)
+            outfile.write('<%smember_specs>%s</%smember_specs>\n' % (namespace_, self.gds_format_string(quote_xml(self.member_specs).encode(ExternalEncoding), input_name='member_specs'), namespace_))
+    def hasContent_(self):
+        if (
+            self.input_schema is not None or
+            self.output_superclass is not None or
+            self.output_subclass is not None or
+            self.force is not None or
+            self.prefix is not None or
+            self.namespace_prefix is not None or
+            self.empty_namespace_prefix is not None or
+            self.behavior_filename is not None or
+            self.properties is not None or
+            self.subclass_suffix is not None or
+            self.root_element is not None or
+            self.superclass_module is not None or
+            self.auto_super is not None or
+            self.old_getters_setters is not None or
+            self.validator_bodies is not None or
+            self.user_methods is not None or
+            self.no_dates is not None or
+            self.no_versions is not None or
+            self.no_process_includes is not None or
+            self.silence is not None or
+            self.namespace_defs is not None or
+            self.external_encoding is not None or
+            self.member_specs is not None
+            ):
+            return True
+        else:
+            return False
+    def exportLiteral(self, outfile, level, name_='sessionType'):
+        level += 1
+        self.exportLiteralAttributes(outfile, level, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.input_schema is not None:
+            showIndent(outfile, level)
+            outfile.write('input_schema=%s,\n' % quote_python(self.input_schema).encode(ExternalEncoding))
+        if self.output_superclass is not None:
+            showIndent(outfile, level)
+            outfile.write('output_superclass=%s,\n' % quote_python(self.output_superclass).encode(ExternalEncoding))
+        if self.output_subclass is not None:
+            showIndent(outfile, level)
+            outfile.write('output_subclass=%s,\n' % quote_python(self.output_subclass).encode(ExternalEncoding))
+        if self.force is not None:
+            showIndent(outfile, level)
+            outfile.write('force=%s,\n' % self.force)
+        if self.prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('prefix=%s,\n' % quote_python(self.prefix).encode(ExternalEncoding))
+        if self.namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('namespace_prefix=%s,\n' % quote_python(self.namespace_prefix).encode(ExternalEncoding))
+        if self.empty_namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('empty_namespace_prefix=%s,\n' % self.empty_namespace_prefix)
+        if self.behavior_filename is not None:
+            showIndent(outfile, level)
+            outfile.write('behavior_filename=%s,\n' % quote_python(self.behavior_filename).encode(ExternalEncoding))
+        if self.properties is not None:
+            showIndent(outfile, level)
+            outfile.write('properties=%s,\n' % self.properties)
+        if self.subclass_suffix is not None:
+            showIndent(outfile, level)
+            outfile.write('subclass_suffix=%s,\n' % quote_python(self.subclass_suffix).encode(ExternalEncoding))
+        if self.root_element is not None:
+            showIndent(outfile, level)
+            outfile.write('root_element=%s,\n' % quote_python(self.root_element).encode(ExternalEncoding))
+        if self.superclass_module is not None:
+            showIndent(outfile, level)
+            outfile.write('superclass_module=%s,\n' % quote_python(self.superclass_module).encode(ExternalEncoding))
+        if self.auto_super is not None:
+            showIndent(outfile, level)
+            outfile.write('auto_super=%s,\n' % self.auto_super)
+        if self.old_getters_setters is not None:
+            showIndent(outfile, level)
+            outfile.write('old_getters_setters=%s,\n' % self.old_getters_setters)
+        if self.validator_bodies is not None:
+            showIndent(outfile, level)
+            outfile.write('validator_bodies=%s,\n' % quote_python(self.validator_bodies).encode(ExternalEncoding))
+        if self.user_methods is not None:
+            showIndent(outfile, level)
+            outfile.write('user_methods=%s,\n' % quote_python(self.user_methods).encode(ExternalEncoding))
+        if self.no_dates is not None:
+            showIndent(outfile, level)
+            outfile.write('no_dates=%s,\n' % self.no_dates)
+        if self.no_versions is not None:
+            showIndent(outfile, level)
+            outfile.write('no_versions=%s,\n' % self.no_versions)
+        if self.no_process_includes is not None:
+            showIndent(outfile, level)
+            outfile.write('no_process_includes=%s,\n' % self.no_process_includes)
+        if self.silence is not None:
+            showIndent(outfile, level)
+            outfile.write('silence=%s,\n' % self.silence)
+        if self.namespace_defs is not None:
+            showIndent(outfile, level)
+            outfile.write('namespace_defs=%s,\n' % quote_python(self.namespace_defs).encode(ExternalEncoding))
+        if self.external_encoding is not None:
+            showIndent(outfile, level)
+            outfile.write('external_encoding=%s,\n' % quote_python(self.external_encoding).encode(ExternalEncoding))
+        if self.member_specs is not None:
+            showIndent(outfile, level)
+            outfile.write('member_specs=%s,\n' % quote_python(self.member_specs).encode(ExternalEncoding))
+    def build(self, node):
+        self.buildAttributes(node, node.attrib, [])
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, nodeName_)
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, nodeName_, from_subclass=False):
+        if nodeName_ == 'input_schema':
+            input_schema_ = child_.text
+            self.input_schema = input_schema_
+        elif nodeName_ == 'output_superclass':
+            output_superclass_ = child_.text
+            self.output_superclass = output_superclass_
+        elif nodeName_ == 'output_subclass':
+            output_subclass_ = child_.text
+            self.output_subclass = output_subclass_
+        elif nodeName_ == 'force':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.force = ival_
+        elif nodeName_ == 'prefix':
+            prefix_ = child_.text
+            self.prefix = prefix_
+        elif nodeName_ == 'namespace_prefix':
+            namespace_prefix_ = child_.text
+            self.namespace_prefix = namespace_prefix_
+        elif nodeName_ == 'empty_namespace_prefix':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.empty_namespace_prefix = ival_
+        elif nodeName_ == 'behavior_filename':
+            behavior_filename_ = child_.text
+            self.behavior_filename = behavior_filename_
+        elif nodeName_ == 'properties':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.properties = ival_
+        elif nodeName_ == 'subclass_suffix':
+            subclass_suffix_ = child_.text
+            self.subclass_suffix = subclass_suffix_
+        elif nodeName_ == 'root_element':
+            root_element_ = child_.text
+            self.root_element = root_element_
+        elif nodeName_ == 'superclass_module':
+            superclass_module_ = child_.text
+            self.superclass_module = superclass_module_
+        elif nodeName_ == 'auto_super':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.auto_super = ival_
+        elif nodeName_ == 'old_getters_setters':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.old_getters_setters = ival_
+        elif nodeName_ == 'validator_bodies':
+            validator_bodies_ = child_.text
+            self.validator_bodies = validator_bodies_
+        elif nodeName_ == 'user_methods':
+            user_methods_ = child_.text
+            self.user_methods = user_methods_
+        elif nodeName_ == 'no_dates':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.no_dates = ival_
+        elif nodeName_ == 'no_versions':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.no_versions = ival_
+        elif nodeName_ == 'no_process_includes':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.no_process_includes = ival_
+        elif nodeName_ == 'silence':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.silence = ival_
+        elif nodeName_ == 'namespace_defs':
+            namespace_defs_ = child_.text
+            self.namespace_defs = namespace_defs_
+        elif nodeName_ == 'external_encoding':
+            external_encoding_ = child_.text
+            self.external_encoding = external_encoding_
+        elif nodeName_ == 'member_specs':
+            member_specs_ = child_.text
+            self.member_specs = member_specs_
+# end class sessionType
+
+
+USAGE_TEXT = """
+Usage: python <Parser>.py [ -s ] <in_xml_file>
+"""
+
+def usage():
+    print(USAGE_TEXT)
+    sys.exit(1)
+
+
+def get_root_tag(node):
+    tag = Tag_pattern_.match(node.tag).groups()[-1]
+    rootClass = globals().get(tag)
+    return tag, rootClass
+
+
+def parse(inFileName):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'session'
+        rootClass = sessionType
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    sys.stdout.write('<?xml version="1.0" ?>\n')
+    rootObj.export(sys.stdout, 0, name_=rootTag, 
+        namespacedef_='')
+    return rootObj
+
+
+def parseString(inString):
+    from io import StringIO
+    doc = parsexml_(StringIO(inString))
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'session'
+        rootClass = sessionType
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    sys.stdout.write('<?xml version="1.0" ?>\n')
+    rootObj.export(sys.stdout, 0, name_="session",
+        namespacedef_='')
+    return rootObj
+
+
+def parseLiteral(inFileName):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'session'
+        rootClass = sessionType
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    sys.stdout.write('#from generateds_gui_session import *\n\n')
+    sys.stdout.write('import generateds_gui_session as model_\n\n')
+    sys.stdout.write('rootObj = model_.rootTag(\n')
+    rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+    sys.stdout.write(')\n')
+    return rootObj
+
+
+def main():
+    args = sys.argv[1:]
+    if len(args) == 1:
+        parse(args[0])
+    else:
+        usage()
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
+
+
+__all__ = [
+    "sessionType"
+    ]
diff --git a/libgenerateDS/gui/generateds_gui.py b/libgenerateDS/gui/generateds_gui.py
index 93dfb521933f9a3d2f4844eb6b5b067806b61f31..7076369a8c1741d8839867dfaacec1d9349ffe6f 100755
--- a/libgenerateDS/gui/generateds_gui.py
+++ b/libgenerateDS/gui/generateds_gui.py
@@ -1,2158 +1,2225 @@
-#!/usr/bin/env python
-
-import sys
-import os
-from optparse import OptionParser
-from ConfigParser import ConfigParser
-from xml.dom import minidom
-from xml.parsers import expat
-import subprocess
-import re
-import gtk
-# import pango
-from libgenerateDS.gui import generateds_gui_session
-#import generateds_gui_session
-
-## import warnings
-## warnings.warn('importing IPShellEmbed', UserWarning)
-## 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 and constants:
-
-#
-# Do not modify the following VERSION comments.
-# Used by updateversion.py.
-##VERSION##
-VERSION = '2.12e'
-##VERSION##
-
-
-Builder = None
-ParamNameList = []
-CmdTemplate = (
-    '%(exec_path)s --no-questions' +
-    '%(force)s' +
-    '%(output_superclass)s' +
-    '%(output_subclass)s' +
-    '%(prefix)s' +
-    '%(namespace_prefix)s' +
-    '%(behavior_filename)s' +
-    '%(properties)s' +
-    '%(old_getters_setters)s' +
-    '%(subclass_suffix)s' +
-    '%(root_element)s' +
-    '%(superclass_module)s' +
-    '%(validator_bodies)s' +
-    '%(user_methods)s' +
-    '%(no_dates)s' +
-    '%(no_versions)s' +
-    '%(no_process_includes)s' +
-    '%(silence)s' +
-    '%(namespace_defs)s' +
-    '%(external_encoding)s' +
-    '%(member_specs)s' +
-    ' %(input_schema)s' +
-    ''
-    )
-CaptureCmdTemplate = (
-    '%(exec_path)s --no-questions' +
-    '%(force)s' +
-    '%(properties)s' +
-    '%(namespace_prefix)s' +
-    '%(output_superclass)s' +
-    '%(output_subclass)s' +
-    '%(prefix)s' +
-    '%(behavior_filename)s' +
-    '%(old_getters_setters)s' +
-    '%(subclass_suffix)s' +
-    '%(root_element)s' +
-    '%(superclass_module)s' +
-    '%(validator_bodies)s' +
-    '%(user_methods)s' +
-    '%(no_dates)s' +
-    '%(no_versions)s' +
-    '%(no_process_includes)s' +
-    '%(silence)s' +
-    '%(namespace_defs)s' +
-    '%(external_encoding)s' +
-    '%(member_specs)s' +
-    ' \\\n    %(input_schema)s' +
-    ''
-    )
-ErrorMessages = [
-    '',
-    'Must enter input schema name.',
-    'Must enter either output superclass name or output subclass file name.',
-    ]
-Memberspecs_tooltip_text = '''\
-Generate member (type) specifications in each
-class: a dictionary of instances of class
-MemberSpec_ containing member name, type,
-and array or not.  Allowed values are
-"list" or "dict".  Default: None.
-'''
-
-
-#
-# Classes
-#
-
-class UIItemSpec(object):
-    def __init__(self, name='', ui_type='', access_action=''):
-        self.name = name
-        self.ui_type = ui_type
-        self.access_action = access_action
-    def get_name(self): return self.name
-    def set_name(self, name): self.name = name
-    def get_ui_type(self): return self.ui_type
-    def set_ui_type(self, ui_type): self.ui_type = ui_type
-    def get_access_action(self): return self.access_action
-    def set_access_action(self, access_action): self.access_action = access_action
-
-
-class GeneratedsGui(object):
-
-    def __init__(self, options):
-        global Builder
-        # Default values
-        Builder = gtk.Builder()
-        self.options = options
-        # self.ui_spec_filename = ui_spec_filename
-        self.filename = None
-        self.about_dialog = None
-        self.params = generateds_gui_session.sessionType()
-        self.ui_obj_dict = {}
-        self.session_filename = None
-        self.current_folder = None
-        # use GtkBuilder to build our interface from the XML file 
-        ui_spec_filename = options.impl_gui
-        try:
-            if ui_spec_filename is None:
-                Builder.add_from_string(Ui_spec, len(Ui_spec))
-            else:
-                Builder.add_from_file(ui_spec_filename)
-        except:
-            msg = "Failed to load UI XML file: %s" % ui_spec_filename
-            self.error_message(msg)
-            sys.exit(1)
-        # get the widgets which will be referenced in callbacks
-        bgo = Builder.get_object
-        self.window = bgo("window1")
-        self.statusbar = bgo("statusbar1")
-        for item in ParamNameList:
-            if item.get_ui_type() != 'combobox':
-                s1 = '%s_%s' % (item.get_name(), item.get_ui_type(), )
-                setattr(self, s1, bgo(s1))
-                self.ui_obj_dict[s1] = bgo(s1)
-        # Create the member-specs combobox.
-        member_specs_combobox = gtk.combo_box_new_text()
-        member_specs_combobox.set_name('member_specs_combobox')
-        member_specs_combobox.set_tooltip_text(Memberspecs_tooltip_text)
-        self.ui_obj_dict['member_specs_combobox'] = member_specs_combobox
-        member_specs_combobox.append_text("none")
-        member_specs_combobox.append_text("list")
-        member_specs_combobox.append_text("dict")
-        member_specs_combobox_container = bgo('member_specs_combobox_container')
-        member_specs_combobox_container.add(member_specs_combobox)
-        member_specs_combobox.set_active(0)
-        member_specs_combobox.show()
-        self.content_dialog = ContentDialog()
-        # connect signals
-        Builder.connect_signals(self)
-        Builder.connect_signals(self.content_dialog)
-        # set the default icon to the GTK "edit" icon
-        gtk.window_set_default_icon_name(gtk.STOCK_EDIT)
-        # setup and initialize our statusbar
-        self.statusbar_cid = self.statusbar.get_context_id("Tutorial GTK+ Text Editor")
-        self.reset_default_status()
-        self.params = generateds_gui_session.sessionType()
-        # Load a session if specified.
-        session = self.options.session
-        if session:
-            session = os.path.abspath(session)
-            self.session_filename = session
-            self.load_session(session)
-            msg = 'Session file: %s' % (self.session_filename, )
-            self.statusbar.pop(self.statusbar_cid)
-            self.statusbar.push(self.statusbar_cid, msg)
-        else:
-            self.trans_gui_2_obj()
-            self.saved_params = self.params.copy()
-
-    # When our window is destroyed, we want to break out of the GTK main loop. 
-    # We do this by calling gtk_main_quit(). We could have also just specified 
-    # gtk_main_quit as the handler in Glade!
-    def on_window_destroy(self, widget, data=None):
-        self.trans_gui_2_obj()
-##         self.dump_params('saved_params:', self.saved_params)
-##         self.dump_params('params:', self.params)
-        if self.params != self.saved_params:
-            message = 'Session data has changed.\n\nSave?'
-            dialog = gtk.MessageDialog(None,
-                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-                gtk.MESSAGE_ERROR,
-                gtk.BUTTONS_NONE,
-                message)
-            dialog.add_buttons(
-                gtk.STOCK_YES, gtk.RESPONSE_YES,
-                '_Discard', 1,
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                )
-            response = dialog.run()
-            dialog.destroy()
-            if response == gtk.RESPONSE_YES:
-                self.save_session_action()
-            elif response == 1:
-                pass
-            elif response == gtk.RESPONSE_CANCEL:
-                return
-        gtk.main_quit()
-
-    def on_window_delete_event(self, widget, event, data=None):
-        self.on_window_destroy(widget, data)
-
-    def on_quit_menu_item_activate(self, widget, data=None):
-        self.on_window_destroy(widget, data)
-
-    def on_quit_button_clicked(self, widget, data=None):
-        self.on_window_destroy(widget, data)
-
-    # Get the values from the widgets in the UI.
-    # Format the command line.
-    # Generate the output files.    
-    def on_generate_menuitem_activate(self, menuitem, data=None):
-        self.trans_gui_2_obj()
-        params_dict = self.trans_params_2_dict()
-        result, msg = self.validate_params(params_dict)
-        if result:
-            self.statusbar.pop(self.statusbar_cid)
-            self.statusbar.push(self.statusbar_cid, 'Error: %s' % (msg, ))
-            self.error_message(msg)
-        else:
-            cmd = self.create_command_line(params_dict, CmdTemplate)
-            #print 'cmd: %s' % (cmd, )
-            self.run_command(cmd)
-        return True
-
-    on_generate_button_clicked = on_generate_menuitem_activate
-
-    def on_capture_cl_menuitem_activate(self, menuitem, data=None):
-        self.trans_gui_2_obj()
-        params_dict = self.trans_params_2_dict()
-        result, msg = self.validate_params(params_dict)
-        if result:
-            self.statusbar.pop(self.statusbar_cid)
-            self.statusbar.push(self.statusbar_cid, 'Error: %s' % (msg, ))
-            self.error_message(msg)
-        else:
-            cmd = self.create_command_line(params_dict, CaptureCmdTemplate)
-            cmd = cmd.replace(' --', ' \\\n    --')
-            cmd = cmd.replace(' -o', ' \\\n    -o')
-            cmd = cmd.replace(' -s', ' \\\n    -s')
-            self.display_content('Command line', cmd)
-        return True
-
-    def trans_gui_2_obj(self):
-        for item in ParamNameList:
-            ui_name = '%s_%s' % (item.get_name(), item.get_ui_type(), )
-            ui_obj = self.ui_obj_dict[ui_name]
-            if ui_obj is not None:
-                if item.get_name() == 'member_specs':
-                    value = ui_obj.get_active()
-                    if value == 1:
-                        self.params.set_member_specs('list')
-                    elif value == 2:
-                        self.params.set_member_specs('dict')
-                    else:
-                        self.params.set_member_specs('none')
-                else:
-                    s2 = '%s_%s' % (item.get_name(), item.get_ui_type(), )
-                    method = getattr(ui_obj, 'get_%s' % item.get_access_action())
-                    value = method()
-                    setattr(self.params, item.get_name(), value)
-
-    def trans_obj_2_gui(self):
-        for item in ParamNameList:
-            ui_name = '%s_%s' % (item.get_name(), item.get_ui_type(), )
-            ui_obj = self.ui_obj_dict[ui_name]
-            if ui_obj is not None:
-                if item.get_name() == 'member_specs':
-                    if self.params.get_member_specs() == 'list':
-                        ui_obj.set_active(1)
-                    elif self.params.get_member_specs() == 'dict':
-                        ui_obj.set_active(2)
-                    else:
-                        ui_obj.set_active(0)
-                else:
-                    value = getattr(self.params, item.get_name())
-                    if value is None:
-                        if item.get_ui_type() == 'entry':
-                            value = ''
-                        elif item.get_ui_type() == 'checkbutton':
-                            value = False
-                        elif item.get_ui_type() == 'combobox':
-                            value = 0
-                    method = getattr(ui_obj,
-                        'set_%s' % item.get_access_action())
-                    method(value)
-
-    def dump_params(self, msg, params):
-        print msg
-        params.export(sys.stdout, 0, name_='session')
-
-    def trans_params_2_dict(self):
-        params = self.params
-        params_dict = {}
-        pd = params_dict
-        pd['input_schema'] = getattr(params, 'input_schema')
-        self.transform_1_param(params, pd, 'output_superclass', 'o')
-        self.transform_1_param(params, pd, 'output_subclass', 's')
-        pd['force'] = (' -f' if params.get_force() else '')
-        self.transform_1_param(params, pd, 'prefix', 'p')
-        if params.get_empty_namespace_prefix():
-            pd['namespace_prefix'] = ' -a ""'
-        else:
-            self.transform_1_param(params, pd, 'namespace_prefix', 'a')
-        self.transform_1_param(params, pd, 'behavior_filename', 'b')
-        pd['properties'] = (' -m' if params.get_properties() else '')
-        self.transform_1_param(params, pd, 'subclass_suffix', 'subclass-suffix', True)
-        self.transform_1_param(params, pd, 'root_element', 'root-element', True)
-        self.transform_1_param(params, pd, 'superclass_module', 'super', True)
-        pd['old_getters_setters'] = (' --use-old-getter-setter' if params.get_old_getters_setters() else '')
-        self.transform_1_param(params, pd, 'user_methods', 'user-methods', True)
-        self.transform_1_param(params, pd, 'validator_bodies', 'validator-bodies', True)
-        pd['no_dates'] = (' --no-dates' if params.get_no_dates() else '')
-        pd['no_versions'] = (' --no-versions' if params.get_no_versions() else '')
-        pd['no_process_includes'] = (' --no-process-includes' if params.get_no_process_includes() else '')
-        pd['silence'] = (' --silence' if params.get_silence() else '')
-        # Special case for namespacedefs because of quoting.
-        #self.transform_1_param(params, pd, 'namespace_defs', 'namespacedef', True)
-        name = 'namespace_defs'
-        flag = 'namespacedef'
-        value = getattr(params, name)
-        params_dict[name] = (
-                " --%s='%s'" % (flag, value, )
-                if value.strip()
-                else '')
-        self.transform_1_param(params, pd, 'external_encoding', 'external-encoding', True)
-        if params.get_member_specs() == 'list':
-            pd['member_specs'] = ' --member-specs=list'
-        elif params.get_member_specs() == 'dict':
-            pd['member_specs'] = ' --member-specs=dict'
-        else:
-            pd['member_specs'] = ''
-        return pd
-
-    def transform_1_param(self, params, params_dict, name, flag, longopt=False):
-        value = getattr(params, name)
-        if longopt:
-            params_dict[name] = (
-                ' --%s="%s"' % (flag, value, )
-                if value.strip()
-                else '')
-        else:
-            params_dict[name] = (
-                ' -%s "%s"' % (flag, value, )
-                if value.strip()
-                else '')
-
-    def create_command_line(self, params_dict, template):
-        params_dict['exec_path'] = self.options.exec_path
-        cmd = template % params_dict
-        return cmd
-
-    def validate_params(self, params_dict):
-        p = params_dict
-        #print sorted(p.keys())
-        result = 0
-        msg = ''
-        if not p['input_schema']:
-            result = 1
-        elif not (p['output_superclass'] or
-            p['output_subclass']):
-            result = 2
-        if result:
-            msg = ErrorMessages[result]
-        return result, msg
-
-    # Clear all the fields/widgets to default values.    
-    def on_clear_menuitem_activate(self, menuitem, data=None):
-        message = 'Clear all entries?\nAre you sure?'
-        dialog = gtk.MessageDialog(
-            None,
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            gtk.MESSAGE_WARNING,
-            gtk.BUTTONS_OK_CANCEL,
-            message
-            )
-        response = dialog.run()
-        dialog.destroy()
-        if response == gtk.RESPONSE_OK:
-            self.session_filename = None
-            self.params = generateds_gui_session.sessionType(
-                input_schema='',
-                output_superclass='',
-                output_subclass='',
-                force=False,
-                prefix='',
-                namespace_prefix='',
-                empty_namespace_prefix=False,
-                behavior_filename='',
-                properties=False,
-                subclass_suffix='',
-                root_element='',
-                superclass_module='',
-                auto_super=False,
-                old_getters_setters=False,
-                validator_bodies='',
-                user_methods='',
-                no_dates=False,
-                no_versions=False,
-                no_process_includes=False,
-                silence=False,
-                namespace_defs='',
-                external_encoding='',
-                member_specs='',
-                )
-            self.trans_obj_2_gui()
-
-    def run_command(self, cmd):
-        spobj = subprocess.Popen(cmd,
-            shell=True,
-            stdout=subprocess.PIPE, 
-            stderr=subprocess.PIPE,
-            close_fds=False)
-        outcontent = spobj.stdout.read()
-        errcontent = spobj.stderr.read()
-        error = False
-        if outcontent.strip():
-            self.display_content('Messages', outcontent)
-            error = True
-        if errcontent.strip():
-            self.display_content('Errors', errcontent)
-            error = True
-        if not error:
-            msg = 'Successfully generated.'
-            self.error_message(msg, gtk.MESSAGE_INFO)
-
-    def display_content(self, title, content):
-        #content_dialog = ContentDialog()
-        self.content_dialog.show(content)
-
-    def on_open_session_menuitem_activate(self, menuitem, data=None):
-        self.trans_gui_2_obj()
-##         self.dump_params('saved_params:', self.saved_params)
-##         self.dump_params('params:', self.params)
-        if self.params != self.saved_params:
-            message = 'Session data has changed.\n\nSave?'
-            dialog = gtk.MessageDialog(None,
-                gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-                gtk.MESSAGE_ERROR,
-                gtk.BUTTONS_NONE,
-                message)
-            dialog.add_buttons(
-                gtk.STOCK_YES, gtk.RESPONSE_YES,
-                '_Discard', 1,
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                )
-            response = dialog.run()
-            dialog.destroy()
-            if response == gtk.RESPONSE_YES:
-                self.save_session_action()
-            elif response == 1:
-                pass
-            elif response == gtk.RESPONSE_CANCEL:
-                return
-        session_filename = self.choose_filename(
-            gtk.FILE_CHOOSER_ACTION_OPEN,
-            (('Session *.session', '*.session'),)
-            )
-        if session_filename:
-            self.session_filename = session_filename
-            self.load_session(self.session_filename)
-            msg = 'Session file: %s' % (self.session_filename, )
-            self.statusbar.pop(self.statusbar_cid)
-            self.statusbar.push(self.statusbar_cid, msg)
-
-    def on_save_session_menuitem_activate(self, menuitem, data=None):
-        self.save_session_action()
-
-    def save_session_action(self):
-        if not self.session_filename:
-            filename = self.choose_filename(
-                gtk.FILE_CHOOSER_ACTION_SAVE,
-                (('Session *.session', '*.session'),),
-                confirm_overwrite=True,
-                initfilename=self.session_filename,
-                buttons=(
-                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                    gtk.STOCK_SAVE, gtk.RESPONSE_OK,
-                    )
-                )
-            if filename:
-                self.session_filename = filename
-        if self.session_filename:
-            stem, ext = os.path.splitext(self.session_filename)
-            if not ext:
-                self.session_filename += '.session'
-            self.save_session(self.session_filename)
-            msg = 'Session file: %s' % (self.session_filename, )
-            self.statusbar.pop(self.statusbar_cid)
-            self.statusbar.push(self.statusbar_cid, msg)
-
-    def on_save_session_as_menuitem_activate(self, menuitem, data=None):
-        filename = self.choose_filename(
-            gtk.FILE_CHOOSER_ACTION_SAVE,
-            (('Session *.session', '*.session'),),
-            confirm_overwrite=True,
-            initfilename=self.session_filename,
-            buttons=(
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                gtk.STOCK_SAVE, gtk.RESPONSE_OK,
-                )
-            )
-        if filename:
-            self.session_filename = filename
-            stem, ext = os.path.splitext(self.session_filename)
-            if not ext:
-                self.session_filename += '.session'
-            self.save_session(self.session_filename)
-            msg = 'Session file: %s' % (self.session_filename, )
-            self.statusbar.pop(self.statusbar_cid)
-            self.statusbar.push(self.statusbar_cid, msg)
-
-    def save_session(self, filename):
-        self.trans_gui_2_obj()
-        sessionObj = self.params
-        outfile = open(filename, 'w')
-        outfile.write('<?xml version="1.0" ?>\n')
-        sessionObj.export(outfile, 0, name_="session", 
-            namespacedef_='')
-        outfile.close()
-        msg = 'Session saved to file:\n%s' % (filename, )
-        self.error_message(msg, gtk.MESSAGE_INFO)
-        self.saved_params = self.params.copy()
-
-    def load_session(self, filename):
-        try:
-            doc = generateds_gui_session.parsexml_(filename)
-            rootNode = doc.getroot()
-            rootTag, rootClass = generateds_gui_session.get_root_tag(rootNode)
-            if rootClass is None:
-                rootTag = 'session'
-                rootClass = generateds_gui_session.sessionType
-            sessionObj = rootClass.factory()
-            sessionObj.build(rootNode)
-            self.params = sessionObj
-            self.trans_obj_2_gui()
-            self.trans_gui_2_obj()
-            self.saved_params = self.params.copy()
-        except IOError, exp:
-            msg = str(exp)
-            self.error_message(msg, gtk.MESSAGE_ERROR)
-        except expat.ExpatError, exp:
-            msg = '%s file: %s' % (str(exp), filename, )
-            self.error_message(msg, gtk.MESSAGE_ERROR)
-
-    def on_about_menu_item_activate(self, menuitem, data=None):
-        if self.about_dialog:
-            self.about_dialog.present()
-            return
-        authors = [
-            'Dave Kuhlman <dkuhlman@rexx.com>',
-        ]
-        about_dialog = gtk.AboutDialog()
-        about_dialog.set_transient_for(self.window)
-        about_dialog.set_destroy_with_parent(True)
-        about_dialog.set_name("generateDS.py Python bindings generator")
-        about_dialog.set_version(VERSION)
-        about_dialog.set_copyright("Copyright \xc2\xa9 2009 Dave Kuhlman")
-        about_dialog.set_website("http://www.rexx.com/~dkuhlman")
-        about_dialog.set_comments("GTK+ and Glade3 GUI front end")
-        about_dialog.set_authors(authors)
-        about_dialog.set_logo_icon_name(gtk.STOCK_EDIT)
-        # callbacks for destroying the dialog
-        def close(dialog, response, editor):
-            editor.about_dialog = None
-            dialog.destroy()
-        def delete_event(dialog, event, editor):
-            editor.about_dialog = None
-            return True
-        about_dialog.connect("response", close, self)
-        about_dialog.connect("delete-event", delete_event, self)
-        self.about_dialog = about_dialog
-        about_dialog.show()
-
-    def error_message(self, message, message_type=gtk.MESSAGE_ERROR):
-        # log to terminal window
-        #print message
-        # create an error message dialog and display modally to the user
-        dialog = gtk.MessageDialog(None,
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            message_type, gtk.BUTTONS_OK, message)
-        dialog.run()
-        dialog.destroy()
-
-    def reset_default_status(self):
-        msg = "Session file: (UNTITLED)"
-        self.statusbar.pop(self.statusbar_cid)
-        self.statusbar.push(self.statusbar_cid, msg)
-
-    def on_input_schema_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_OPEN,
-            (('Schemas *.xsd', '*.xsd'),))
-        if filename:
-            self.input_schema_entry.set_text(filename)
-
-    def on_output_superclass_chooser_button_clicked(self, widget, data=None):
-        filename = self.choose_filename(patterns=(('Python *.py', '*.py'), ))
-        if filename:
-            self.output_superclass_entry.set_text(filename)
-            #self.on_output_superclass_entry_changed(
-            #    self.output_superclass_entry, data)
-
-    def on_output_subclass_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(patterns=(('Python *.py', '*.py'), ))
-        if filename:
-            self.output_subclass_entry.set_text(filename)
-
-    def on_behavior_filename_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_OPEN,
-            (('Python *.py', '*.py'),))
-        if filename:
-            self.behavior_filename_entry.set_text(filename)
-
-    def on_validator_bodies_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
-            )
-        if filename:
-            self.validator_bodies_entry.set_text(filename)
-
-    def on_user_methods_chooser_button_clicked(self, button, data=None):
-        filename = self.choose_filename(gtk.FILE_CHOOSER_ACTION_OPEN,
-            (('Python *.py', '*.py'),))
-        if filename:
-            self.user_methods_entry.set_text(filename)
-
-    def choose_filename(self, action=gtk.FILE_CHOOSER_ACTION_SAVE,
-        patterns=(), confirm_overwrite=False, initfilename=None,
-        buttons=None):
-        filename = None
-        if buttons is None:
-            buttons=(
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                gtk.STOCK_OPEN, gtk.RESPONSE_OK,
-                )
-        dialog = gtk.FileChooserDialog(
-            title=None,
-            action=action,
-            buttons=buttons,
-            )
-        if self.current_folder is not None:
-            dialog.set_current_folder(self.current_folder)
-        if initfilename is not None:
-            dialog.set_filename(initfilename)
-        if patterns:
-            filter = gtk.FileFilter()
-            for name, pattern in patterns:
-                filter.set_name(name)
-                filter.add_pattern(pattern)
-            dialog.add_filter(filter)
-            filter = gtk.FileFilter()
-            filter.set_name("All files *.*")
-            filter.add_pattern("*")
-            dialog.add_filter(filter)
-        dialog.set_do_overwrite_confirmation(confirm_overwrite)
-        response = dialog.run()
-        if response == gtk.RESPONSE_OK:
-            filename = dialog.get_filename()
-            self.current_folder = dialog.get_current_folder()
-        elif response == gtk.RESPONSE_CANCEL:
-            pass
-        dialog.destroy()
-        return filename
-
-    def on_namespace_prefix_entry_changed(self, widget, data=None):
-        entry = self.ui_obj_dict['namespace_prefix_entry']
-        checkbutton = self.ui_obj_dict['empty_namespace_prefix_checkbutton']
-        checkbutton.set_active(False)
-        return True
-
-    def on_empty_namespace_prefix_checkbutton_toggled(self, widget, data=None):
-        entry = self.ui_obj_dict['namespace_prefix_entry']
-        checkbutton = self.ui_obj_dict['empty_namespace_prefix_checkbutton']
-        if widget.get_active():
-            entry.set_text('')
-        return True
-
-    def on_output_superclass_entry_changed(self, widget, data=None):
-        entry = self.ui_obj_dict['superclass_module_entry']
-        checkbutton = self.auto_super_checkbutton
-        if checkbutton.get_active():
-            path = widget.get_text()
-            if path:
-                stem = os.path.splitext(os.path.split(path)[1])[0]
-                if stem:
-                    entry.set_text(stem)
-        return True
-
-    def on_auto_super_checkbutton_toggled(self, widget, data=None):
-        entry = self.ui_obj_dict['superclass_module_entry']
-        superclass_entry = self.ui_obj_dict['output_superclass_entry']
-        #checkbutton = self.auto_super_checkbutton
-        checkbutton = widget
-        if widget.get_active():
-            path = superclass_entry.get_text()
-            if path:
-                stem = os.path.splitext(os.path.split(path)[1])[0]
-                if stem:
-                    entry.set_text(stem)
-        return True
-
-    def on_ok_button_activate(self, widget, data=None):
-        #print '(GeneratedsGui) widget:', widget
-        response = self.content_dialog.on_ok_button_activate(
-            self.content_dialog, data)
-        return response
-
-    name_pat1 = re.compile(r'^(.*)_clear_button')
-
-    # This method keys off the correspondence between the
-    #   name of the button and the name of the related entry,
-    #   for example, xxx_yyy_entry : xxx_yyy_clear_button.
-    def on_clear_button_clicked(self, widget, data=None):
-        name = widget.get_name()
-        mo = GeneratedsGui.name_pat1.search(name)
-        stem = mo.group(1)
-        name1 = '%s_entry' % (stem, )
-        ui_obj = self.ui_obj_dict[name1]
-        ui_obj.set_text('')
-
-    # Run main application window
-    def main(self):
-        self.window.show()
-        gtk.main()
-
-
-class ContentDialog(gtk.Dialog):
-    def __init__(self):
-        global Builder
-        self.content_dialog = Builder.get_object('content_dialog')
-        self.content_textview = Builder.get_object('content_textview')
-        buf = self.content_textview.get_buffer().set_text('')
-
-    def show(self, content):
-        #Builder.connect_signals(self)
-        self.content_textview.get_buffer().set_text(content)
-        response = self.content_dialog.run()
-        self.content_dialog.hide()
-
-    def on_ok_button_activate(self, widget, data=None):
-        #print '(content_dialog) widget:', widget
-        return False
-
-
-#
-# Functions for internal use
-#
-
-def capture_options(options):
-    config_parser = ConfigParser()
-    config_parser.read([
-        os.path.expanduser('~/.generateds_gui.ini'),
-        './generateds_gui.ini',
-        ])
-    section = 'general'
-    names = ('exec-path', 'exec_path')
-    capture_1_option(options, config_parser, section, names)
-##     names = ('impl-schema', 'impl_schema')
-##     capture_1_option(options, config_parser, section, names)
-    names = ('impl-gui', 'impl_gui')
-    capture_1_option(options, config_parser, section, names)
-    names = ('session', 'session')
-    capture_1_option(options, config_parser, section, names)
-    # Set some defaults.
-    if options.exec_path is None:
-        options.exec_path = 'generateDS.py'
-
-def capture_1_option(options, config_parser, section, names):
-    if (getattr(options, names[1]) is None and
-        config_parser.has_option(section, names[0])
-        ):
-        setattr(options, names[1], config_parser.get(section, names[0]))
-
-def capture_ui_names():
-    items = generateds_gui_session.sessionType.member_data_items_
-    for item in items:
-        ui_item = UIItemSpec(item.get_name())
-        if item.get_name() == 'member_specs':
-            ui_item.set_ui_type('combobox')
-            ui_item.set_access_action('active')
-        elif item.get_data_type() == 'xs:string':
-            ui_item.set_ui_type('entry')
-            ui_item.set_access_action('text')
-        elif item.get_data_type() == 'xs:boolean':
-            ui_item.set_ui_type('checkbutton')
-            ui_item.set_access_action('active')
-        ParamNameList.append(ui_item)
-##     print 'ParamNameList:'
-##     for item in ParamNameList:
-##         print '    %s  %s' % (item.get_name(), item.get_ui_type(), )
-
-
-USAGE_TEXT = """
-    python %prog [options] <somefile.xxx>
-example:
-    python %prog somefile.xxx"""
-
-def usage(parser):
-    parser.print_help()
-    sys.exit(1)
-
-
-def main():
-    parser = OptionParser(USAGE_TEXT)
-    parser.add_option("--exec-path",
-        type="string", action="store",
-        dest="exec_path",
-        #default="generateDS.py",
-        help='path to executable generated in command line.'
-            '  Example: "python /path/to/generateDS.py".'
-            '  Default: "./generateDS.py".'
-            '  Use Tools/Generate CL (Ctrl-T) to see it.'
-        )
-    parser.add_option("--impl-gui",
-        type="string", action="store",
-        dest="impl_gui",
-        help="name of glade file that defines the GUI if not embedded."
-        )
-    parser.add_option("-s", "--session",
-        type="string", action="store",
-        dest="session",
-        help="name of a session file to be loaded."
-        )
-    (options, args) = parser.parse_args()
-    capture_options(options)
-    capture_ui_names()
-    if len(args) > 0:
-        usage(parser)
-    editor = GeneratedsGui(options)
-    editor.main()
-
-# Do not change the next 3 lines.
-## UI_SPECIFICATION ##
-
-Ui_spec = """
-
-<?xml version="1.0"?>
-<interface>
-  <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy project-wide -->
-  <object class="GtkWindow" id="window1">
-    <accel-groups>
-      <group name="accelgroup1"/>
-    </accel-groups>
-    <signal name="delete_event" handler="on_window_delete_event"/>
-    <child>
-      <object class="GtkVBox" id="vbox1">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
-        <child>
-          <object class="GtkMenuBar" id="menubar1">
-            <property name="visible">True</property>
-            <child>
-              <object class="GtkMenuItem" id="menuitem1">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_File</property>
-                <property name="use_underline">True</property>
-                <child type="submenu">
-                  <object class="GtkMenu" id="menu1">
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkImageMenuItem" id="clear_menuitem">
-                        <property name="label">Clear</property>
-                        <property name="visible">True</property>
-                        <property name="image">image4</property>
-                        <property name="use_stock">False</property>
-                        <property name="accel_group">accelgroup1</property>
-                        <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_clear_menuitem_activate"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkImageMenuItem" id="open_session_menuitem">
-                        <property name="label">_Load session</property>
-                        <property name="visible">True</property>
-                        <property name="tooltip_text" translatable="yes">Load a previous saved session.</property>
-                        <property name="use_underline">True</property>
-                        <property name="image">image3</property>
-                        <property name="use_stock">False</property>
-                        <property name="accel_group">accelgroup1</property>
-                        <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_open_session_menuitem_activate"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkImageMenuItem" id="save_session_menuitem">
-                        <property name="label">_Save session</property>
-                        <property name="visible">True</property>
-                        <property name="tooltip_text" translatable="yes">Save the current session.</property>
-                        <property name="use_underline">True</property>
-                        <property name="image">image1</property>
-                        <property name="use_stock">False</property>
-                        <property name="accel_group">accelgroup1</property>
-                        <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_save_session_menuitem_activate"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkImageMenuItem" id="save_session_as_menuitem">
-                        <property name="label">Save session as ...</property>
-                        <property name="visible">True</property>
-                        <property name="tooltip_text" translatable="yes">Save the current session in
-file chosen by the user.</property>
-                        <property name="image">image2</property>
-                        <property name="use_stock">False</property>
-                        <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_save_session_as_menuitem_activate"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkSeparatorMenuItem" id="menuitem5">
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkImageMenuItem" id="imagemenuitem5">
-                        <property name="label">gtk-quit</property>
-                        <property name="visible">True</property>
-                        <property name="tooltip_text" translatable="yes">Exit from the application.</property>
-                        <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_quit_menu_item_activate"/>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkMenuItem" id="menuitem2">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Tools</property>
-                <property name="use_underline">True</property>
-                <child type="submenu">
-                  <object class="GtkMenu" id="menu2">
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkMenuItem" id="capture_cl_menuitem">
-                        <property name="visible">True</property>
-                        <property name="tooltip_text" translatable="yes">Capture the command line that would be used
-to generate the bindings modules.</property>
-                        <property name="label" translatable="yes">_Capture CL</property>
-                        <property name="use_underline">True</property>
-                        <accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_capture_cl_menuitem_activate"/>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkMenuItem" id="generate_menuitem">
-                        <property name="visible">True</property>
-                        <property name="tooltip_text" translatable="yes">Generate the bindings modules.</property>
-                        <property name="label" translatable="yes">_Generate</property>
-                        <property name="use_underline">True</property>
-                        <accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_generate_menuitem_activate"/>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-            <child>
-              <object class="GtkMenuItem" id="menuitem4">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">_Help</property>
-                <property name="use_underline">True</property>
-                <child type="submenu">
-                  <object class="GtkMenu" id="menu3">
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkImageMenuItem" id="imagemenuitem10">
-                        <property name="label">gtk-about</property>
-                        <property name="visible">True</property>
-                        <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
-                        <property name="accel_group">accelgroup1</property>
-                        <signal name="activate" handler="on_about_menu_item_activate"/>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkTable" id="table1">
-            <property name="visible">True</property>
-            <property name="n_rows">22</property>
-            <property name="n_columns">4</property>
-            <child>
-              <object class="GtkLabel" id="label1">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Input schema file:</property>
-              </object>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label2">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Output superclass file:</property>
-              </object>
-              <packing>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label3">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Output subclass file:</property>
-              </object>
-              <packing>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label4">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Overwrite without asking:</property>
-              </object>
-              <packing>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="force_checkbutton">
-                <property name="label" translatable="yes">Force</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Always overwrite output files.
-Do not ask for confirmation.</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">3</property>
-                <property name="bottom_attach">4</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="input_schema_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">The path and name of the
-input XML schema defining the
-bindings to be generated.</property>
-                <property name="invisible_char">&#x25CF;</property>
-                <property name="width_chars">80</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="output_superclass_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">The path and name of the output file
-to be generated and to contain the 
-superclasses.</property>
-                <property name="invisible_char">&#x25CF;</property>
-                <signal name="changed" handler="on_output_superclass_entry_changed"/>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="output_subclass_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">The path and name of the output file
-to be generated and to contain the 
-subclasses.</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label5">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Prefix (for class names):</property>
-              </object>
-              <packing>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="prefix_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Prefix for class names.</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label6">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Namespace prefix:</property>
-              </object>
-              <packing>
-                <property name="top_attach">5</property>
-                <property name="bottom_attach">6</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="namespace_prefix_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="events">GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
-                <property name="tooltip_text" translatable="yes">Override default namespace
-prefix in schema file.
-Example: -a "xsd:"
-Default: "xs:".</property>
-                <property name="invisible_char">&#x25CF;</property>
-                <signal name="changed" handler="on_namespace_prefix_entry_changed"/>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">5</property>
-                <property name="bottom_attach">6</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label7">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Behavior file name:</property>
-              </object>
-              <packing>
-                <property name="top_attach">6</property>
-                <property name="bottom_attach">7</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="behavior_filename_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Input file name for behaviors
-added to subclasses.</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">6</property>
-                <property name="bottom_attach">7</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label8">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Generate Python properties:</property>
-              </object>
-              <packing>
-                <property name="top_attach">7</property>
-                <property name="bottom_attach">8</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="properties_checkbutton">
-                <property name="label" translatable="yes">Properties</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Generate Python properties for member variables
-so that the value can be retrieved and modified
-without calling getter and setter functions.
-</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">7</property>
-                <property name="bottom_attach">8</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label10">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Subclass suffix:</property>
-              </object>
-              <packing>
-                <property name="top_attach">9</property>
-                <property name="bottom_attach">10</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="subclass_suffix_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Append this text to the generated subclass names.
-Default="Sub".</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">9</property>
-                <property name="bottom_attach">10</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label11">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Root element:</property>
-              </object>
-              <packing>
-                <property name="top_attach">10</property>
-                <property name="bottom_attach">11</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="root_element_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Assume that this value is the name
-of the root element of instance docs.
-Default is first element defined in schema.</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">10</property>
-                <property name="bottom_attach">11</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="input_schema_chooser_button">
-                <property name="label" translatable="yes">Choose</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Choose the input schema file.</property>
-                <signal name="clicked" handler="on_input_schema_chooser_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="output_superclass_chooser_button">
-                <property name="label" translatable="yes">Choose</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Choose the output superclass bindings file.</property>
-                <signal name="clicked" handler="on_output_superclass_chooser_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="output_subclass_chooser_button">
-                <property name="label" translatable="yes">Choose</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Choose the output subclass bindings file.</property>
-                <signal name="clicked" handler="on_output_subclass_chooser_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="behavior_filename_chooser_button">
-                <property name="label" translatable="yes">Choose</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Choose the nput file name for
-behaviors added to subclasses.</property>
-                <signal name="clicked" handler="on_behavior_filename_chooser_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">6</property>
-                <property name="bottom_attach">7</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label12">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Superclass module:</property>
-              </object>
-              <packing>
-                <property name="top_attach">11</property>
-                <property name="bottom_attach">12</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="superclass_module_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Superclass module name in subclass module.
-Default="???".</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">11</property>
-                <property name="bottom_attach">12</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label13">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Use old getters and setters:</property>
-              </object>
-              <packing>
-                <property name="top_attach">12</property>
-                <property name="bottom_attach">13</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="old_getters_setters_checkbutton">
-                <property name="label" translatable="yes">Old getters and setters</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Name getters and setters getVar() and setVar(),
-instead of get_var() and set_var().</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">12</property>
-                <property name="bottom_attach">13</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label14">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Validator bodies path:</property>
-              </object>
-              <packing>
-                <property name="top_attach">13</property>
-                <property name="bottom_attach">14</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label15">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">User methods module:</property>
-              </object>
-              <packing>
-                <property name="top_attach">14</property>
-                <property name="bottom_attach">15</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label16">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">No dates:</property>
-              </object>
-              <packing>
-                <property name="top_attach">15</property>
-                <property name="bottom_attach">16</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label17">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">No versions:</property>
-              </object>
-              <packing>
-                <property name="top_attach">16</property>
-                <property name="bottom_attach">17</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="no_dates_checkbutton">
-                <property name="label" translatable="yes">No dates in generated output</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Do not include the current date in the generated
-files. This is useful if you want to minimize
-the amount of (no-operation) changes to the
-generated python code.</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">15</property>
-                <property name="bottom_attach">16</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="validator_bodies_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Path to a directory containing files that provide
-bodies (implementations) of validator methods.</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">13</property>
-                <property name="bottom_attach">14</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="validator_bodies_chooser_button">
-                <property name="label" translatable="yes">Choose</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Choose the path to a directory containing files that provide
-bodies (implementations) of validator methods.</property>
-                <signal name="clicked" handler="on_validator_bodies_chooser_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">13</property>
-                <property name="bottom_attach">14</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="no_versions_checkbutton">
-                <property name="label" translatable="yes">No version info in generated output</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Do not include the current version in the generated
-files. This is useful if you want to minimize
-the amount of (no-operation) changes to the
-generated python code.</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">16</property>
-                <property name="bottom_attach">17</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="user_methods_button">
-                <property name="label" translatable="yes">Choose</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Choose the optional module containing user methods.  See
-section "User Methods" in the documentation.</property>
-                <signal name="clicked" handler="on_user_methods_chooser_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">14</property>
-                <property name="bottom_attach">15</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="user_methods_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Optional module containing user methods.  See
-section "User Methods" in the documentation.</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">14</property>
-                <property name="bottom_attach">15</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label18">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">No process includes:</property>
-              </object>
-              <packing>
-                <property name="top_attach">17</property>
-                <property name="bottom_attach">18</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label19">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Silence:</property>
-              </object>
-              <packing>
-                <property name="top_attach">18</property>
-                <property name="bottom_attach">19</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="no_process_includes_checkbutton">
-                <property name="label" translatable="yes">Do not process includes in schema</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Do not process included XML Schema files.  By
-default, generateDS.py will insert content
-from files referenced by &lt;include ... /&gt;
-elements into the XML Schema to be processed.</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">17</property>
-                <property name="bottom_attach">18</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="silence_checkbutton">
-                <property name="label" translatable="yes">Generate code that does not echo the parsed XML</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Normally, the code generated with generateDS
-echoes the information being parsed. Use
-this option to turn off that behavior.
-</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">18</property>
-                <property name="bottom_attach">19</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label20">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Namespace definitions:</property>
-              </object>
-              <packing>
-                <property name="top_attach">19</property>
-                <property name="bottom_attach">20</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label21">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">External encoding:</property>
-              </object>
-              <packing>
-                <property name="top_attach">20</property>
-                <property name="bottom_attach">21</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="label22">
-                <property name="visible">True</property>
-                <property name="xalign">0</property>
-                <property name="label" translatable="yes">Member specs:</property>
-              </object>
-              <packing>
-                <property name="top_attach">21</property>
-                <property name="bottom_attach">22</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="namespace_defs_entry">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="tooltip_text" translatable="yes">Namespace definition to be passed in as the
-value for the namespacedef_ parameter of
-the export() method by the generated
-parse() and parseString() functions.
-Default=''.  Example:
-xmlns:abc="http://www.abc.com"</property>
-                <property name="invisible_char">&#x25CF;</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">19</property>
-                <property name="bottom_attach">20</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkEntry" id="external_encoding_entry">
-                <property name="visible">True</property>
-                <property name="tooltip_text" translatable="yes">Encode output written by the generated export
-methods using this encoding.  Default, if omitted,
-is the value returned by sys.getdefaultencoding().
-Example: utf-8.</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">20</property>
-                <property name="bottom_attach">21</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkHBox" id="member_specs_combobox_container">
-                <property name="visible">True</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="right_attach">2</property>
-                <property name="top_attach">21</property>
-                <property name="bottom_attach">22</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="empty_namespace_prefix_checkbutton">
-                <property name="label" translatable="yes">Empty</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Assume an empty namespace
-prefix in the XML schema, not
-the default ("xs:").</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="on_empty_namespace_prefix_checkbutton_toggled"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">5</property>
-                <property name="bottom_attach">6</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="auto_super_checkbutton">
-                <property name="label" translatable="yes">Auto</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="tooltip_text" translatable="yes">Use the superclass file name
-stem as the super-class module
-name.</property>
-                <property name="draw_indicator">True</property>
-                <signal name="toggled" handler="on_auto_super_checkbutton_toggled"/>
-              </object>
-              <packing>
-                <property name="left_attach">2</property>
-                <property name="right_attach">3</property>
-                <property name="top_attach">11</property>
-                <property name="bottom_attach">12</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="input_schema_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the input schema file entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="output_superclass_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the output superclass file entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">1</property>
-                <property name="bottom_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="output_subclass_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the output subclass file entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">2</property>
-                <property name="bottom_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="prefix_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the prefix entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">4</property>
-                <property name="bottom_attach">5</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="namespace_prefix_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the XML namespace prefix entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">5</property>
-                <property name="bottom_attach">6</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="behavior_filename_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the behavior file name entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">6</property>
-                <property name="bottom_attach">7</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="subclass_suffix_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the subclass suffix.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">9</property>
-                <property name="bottom_attach">10</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="root_element_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the root element entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">10</property>
-                <property name="bottom_attach">11</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="superclass_module_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the superclass module entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">11</property>
-                <property name="bottom_attach">12</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="validator_bodies_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the validator bodies path entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">13</property>
-                <property name="bottom_attach">14</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="user_methods_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the user methods module entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">14</property>
-                <property name="bottom_attach">15</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="namespace_defs_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the namespace definitions entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">19</property>
-                <property name="bottom_attach">20</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="external_encoding_clear_button">
-                <property name="label">gtk-clear</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Clear the external encoding entry.</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_clear_button_clicked"/>
-              </object>
-              <packing>
-                <property name="left_attach">3</property>
-                <property name="right_attach">4</property>
-                <property name="top_attach">20</property>
-                <property name="bottom_attach">21</property>
-              </packing>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-            <child>
-              <placeholder/>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkHBox" id="hbox1">
-            <property name="visible">True</property>
-            <property name="homogeneous">True</property>
-            <child>
-              <object class="GtkButton" id="generate_button">
-                <property name="label" translatable="yes">Generate</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Generate the bindings modules.</property>
-                <signal name="clicked" handler="on_generate_button_clicked"/>
-              </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="quit_button">
-                <property name="label" translatable="yes">Quit</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="tooltip_text" translatable="yes">Exit from the application.</property>
-                <signal name="clicked" handler="on_quit_button_clicked"/>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkStatusbar" id="statusbar1">
-            <property name="visible">True</property>
-            <property name="spacing">2</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="position">3</property>
-          </packing>
-        </child>
-        <child>
-          <placeholder/>
-        </child>
-      </object>
-    </child>
-  </object>
-  <object class="GtkAccelGroup" id="accelgroup1"/>
-  <object class="GtkDialog" id="content_dialog">
-    <property name="border_width">5</property>
-    <property name="title" translatable="yes">Messages and Content</property>
-    <property name="default_width">800</property>
-    <property name="default_height">600</property>
-    <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
-    <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox3">
-        <property name="visible">True</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">2</property>
-        <child>
-          <object class="GtkScrolledWindow" id="scrolledwindow1">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">automatic</property>
-            <property name="vscrollbar_policy">automatic</property>
-            <child>
-              <object class="GtkTextView" id="content_textview">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="editable">False</property>
-              </object>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area3">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="content_dialog_ok_button">
-                <property name="label" translatable="yes">OK</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <signal name="activate" handler="on_ok_button_activate"/>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="0">content_dialog_ok_button</action-widget>
-    </action-widgets>
-  </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-save</property>
-  </object>
-  <object class="GtkImage" id="image2">
-    <property name="visible">True</property>
-    <property name="stock">gtk-save-as</property>
-  </object>
-  <object class="GtkImage" id="image3">
-    <property name="visible">True</property>
-    <property name="stock">gtk-open</property>
-  </object>
-  <object class="GtkImage" id="image4">
-    <property name="visible">True</property>
-    <property name="stock">gtk-clear</property>
-  </object>
-  <object class="GtkImage" id="image5">
-    <property name="visible">True</property>
-    <property name="stock">gtk-missing-image</property>
-  </object>
-</interface>
-"""
-
-## UI_SPECIFICATION ##
-# Do not change the above 3 lines.
-
-
-    
-if __name__ == "__main__":
-    main()
-    
+#!/usr/bin/env python
+import sys
+import os
+from optparse import OptionParser
+from configparser import ConfigParser
+from xml.dom import minidom
+from xml.parsers import expat
+import subprocess
+import re
+
+
+
+if sys.version_info.major == 2:
+    import gtk
+else:
+    # https://sourceforge.net/projects/pygobjectwin32/files/
+    # https://blogs.gnome.org/kittykat/2014/01/29/developing-gtk-3-apps-with-python-on-windows/
+    import gi
+    gi.require_version('Gtk', '3.0')
+    from gi.repository import Gtk as gtk
+    
+# import pango
+from libgenerateDS.gui import generateds_gui_session
+#import generateds_gui_session
+
+## import warnings
+## warnings.warn('importing IPShellEmbed', UserWarning)
+## 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 and constants:
+
+#
+# Do not modify the following VERSION comments.
+# Used by updateversion.py.
+##VERSION##
+VERSION = '2.20a'
+##VERSION##
+
+
+Builder = None
+ParamNameList = []
+CmdTemplate = (
+    '%(exec_path)s --no-questions' +
+    '%(force)s' +
+    '%(output_superclass)s' +
+    '%(output_subclass)s' +
+    '%(prefix)s' +
+    '%(namespace_prefix)s' +
+    '%(behavior_filename)s' +
+    '%(properties)s' +
+    '%(old_getters_setters)s' +
+    '%(subclass_suffix)s' +
+    '%(root_element)s' +
+    '%(superclass_module)s' +
+    '%(validator_bodies)s' +
+    '%(user_methods)s' +
+    '%(no_dates)s' +
+    '%(no_versions)s' +
+    '%(no_process_includes)s' +
+    '%(silence)s' +
+    '%(namespace_defs)s' +
+    '%(external_encoding)s' +
+    '%(member_specs)s' +
+    ' %(input_schema)s' +
+    ''
+    )
+CaptureCmdTemplate = (
+    '%(exec_path)s --no-questions' +
+    '%(force)s' +
+    '%(properties)s' +
+    '%(namespace_prefix)s' +
+    '%(output_superclass)s' +
+    '%(output_subclass)s' +
+    '%(prefix)s' +
+    '%(behavior_filename)s' +
+    '%(old_getters_setters)s' +
+    '%(subclass_suffix)s' +
+    '%(root_element)s' +
+    '%(superclass_module)s' +
+    '%(validator_bodies)s' +
+    '%(user_methods)s' +
+    '%(no_dates)s' +
+    '%(no_versions)s' +
+    '%(no_process_includes)s' +
+    '%(silence)s' +
+    '%(namespace_defs)s' +
+    '%(external_encoding)s' +
+    '%(member_specs)s' +
+    ' \\\n    %(input_schema)s' +
+    ''
+    )
+ErrorMessages = [
+    '',
+    'Must enter input schema name.',
+    'Must enter either output superclass name or output subclass file name.',
+    ]
+Memberspecs_tooltip_text = '''\
+Generate member (type) specifications in each
+class: a dictionary of instances of class
+MemberSpec_ containing member name, type,
+and array or not.  Allowed values are
+"list" or "dict".  Default: None.
+'''
+
+
+#
+# Classes
+#
+
+class UIItemSpec(object):
+    def __init__(self, name='', ui_type='', access_action=''):
+        self.name = name
+        self.ui_type = ui_type
+        self.access_action = access_action
+    def get_name(self): return self.name
+    def set_name(self, name): self.name = name
+    def get_ui_type(self): return self.ui_type
+    def set_ui_type(self, ui_type): self.ui_type = ui_type
+    def get_access_action(self): return self.access_action
+    def set_access_action(self, access_action): self.access_action = access_action
+
+
+class GeneratedsGui(object):
+
+    def __init__(self, options):
+        global Builder
+        # Default values
+        Builder = gtk.Builder()
+        self.options = options
+        # self.ui_spec_filename = ui_spec_filename
+        self.filename = None
+        self.about_dialog = None
+        self.params = generateds_gui_session.sessionType()
+        self.ui_obj_dict = {}
+        self.session_filename = None
+        self.current_folder = None
+        # use GtkBuilder to build our interface from the XML file 
+        ui_spec_filename = options.impl_gui
+        try:
+            if ui_spec_filename is None:
+                Builder.add_from_string(branch_version('Ui_spec, len(Ui_spec)','Ui_spec'))
+            else:
+                Builder.add_from_file(ui_spec_filename)
+        except:
+            msg = "Failed to load UI XML file: %s" % ui_spec_filename
+            self.error_message(msg)
+            sys.exit(1)
+        # get the widgets which will be referenced in callbacks
+        bgo = Builder.get_object
+        self.window = bgo("window1")
+        self.statusbar = bgo("statusbar1")
+        for item in ParamNameList:
+            if item.get_ui_type() != 'combobox':
+                s1 = '%s_%s' % (item.get_name(), item.get_ui_type(), )
+                setattr(self, s1, bgo(s1))
+                self.ui_obj_dict[s1] = bgo(s1)
+        # Create the member-specs combobox.
+        member_specs_combobox = branch_version('gtk.combo_box_new_text()', 'gtk.ComboBoxText()')
+        member_specs_combobox.set_name('member_specs_combobox')
+        member_specs_combobox.set_tooltip_text(Memberspecs_tooltip_text)
+        self.ui_obj_dict['member_specs_combobox'] = member_specs_combobox
+        member_specs_combobox.append_text("none")
+        member_specs_combobox.append_text("list")
+        member_specs_combobox.append_text("dict")
+        member_specs_combobox_container = bgo('member_specs_combobox_container')
+        member_specs_combobox_container.add(member_specs_combobox)
+        member_specs_combobox.set_active(0)
+        member_specs_combobox.show()
+        self.content_dialog = ContentDialog()
+        # connect signals
+        Builder.connect_signals(self)
+        Builder.connect_signals(self.content_dialog)
+        # set the default icon to the GTK "edit" icon
+        branch_version('gtk.window_set_default_icon_name(gtk.STOCK_EDIT)','gtk.Window.set_default_icon_name(gtk.STOCK_EDIT)')
+        # setup and initialize our statusbar
+        self.statusbar_cid = self.statusbar.get_context_id("Tutorial GTK+ Text Editor")
+        self.reset_default_status()
+        self.params = generateds_gui_session.sessionType()
+        # Load a session if specified.
+        session = self.options.session
+        if session:
+            session = os.path.abspath(session)
+            self.session_filename = session
+            self.load_session(session)
+            msg = 'Session file: %s' % (self.session_filename, )
+            self.statusbar.pop(self.statusbar_cid)
+            self.statusbar.push(self.statusbar_cid, msg)
+        else:
+            self.trans_gui_2_obj()
+            self.saved_params = self.params.copy()
+
+    # When our window is destroyed, we want to break out of the GTK main loop. 
+    # We do this by calling gtk_main_quit(). We could have also just specified 
+    # gtk_main_quit as the handler in Glade!
+    def on_window_destroy(self, widget, data=None):
+        self.trans_gui_2_obj()
+##         self.dump_params('saved_params:', self.saved_params)
+##         self.dump_params('params:', self.params)
+        if self.params != self.saved_params:
+            message = 'Session data has changed.\n\nSave?'
+            if sys.version_info.major == 2 :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                                            gtk.MESSAGE_ERROR,
+                                            gtk.BUTTONS_NONE,
+                                            message)
+                dialog.add_buttons(
+                    gtk.STOCK_YES, gtk.RESPONSE_YES,
+                    '_Discard', 1,
+                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                    )
+            else :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DialogFlags.MODAL | gtk.DialogFlags.DESTROY_WITH_PARENT,
+                                            gtk.MessageType.ERROR,
+                                            gtk.ButtonsType.NONE,
+                                            message)
+                
+                dialog.add_buttons(
+                gtk.STOCK_YES, gtk.ResponseType.YES,
+                '_Discard', 1,
+                gtk.STOCK_CANCEL, gtk.ResponseType.CANCEL,
+                )
+            response = dialog.run()
+            dialog.destroy()
+            if response == branch_version('gtk.RESPONSE_YES', 'gtk.ResponseType.YES'):
+                self.save_session_action()
+            elif response == 1:
+                pass
+            elif response == branch_version('gtk.RESPONSE_CANCEL', 'gtk.ResponseType.CANCEL'):
+                return
+        gtk.main_quit()
+
+    def on_window_delete_event(self, widget, event, data=None):
+        self.on_window_destroy(widget, data)
+
+    def on_quit_menu_item_activate(self, widget, data=None):
+        self.on_window_destroy(widget, data)
+
+    def on_quit_button_clicked(self, widget, data=None):
+        self.on_window_destroy(widget, data)
+
+    # Get the values from the widgets in the UI.
+    # Format the command line.
+    # Generate the output files.    
+    def on_generate_menuitem_activate(self, menuitem, data=None):
+        self.trans_gui_2_obj()
+        params_dict = self.trans_params_2_dict()
+        result, msg = self.validate_params(params_dict)
+        if result:
+            self.statusbar.pop(self.statusbar_cid)
+            self.statusbar.push(self.statusbar_cid, 'Error: %s' % (msg, ))
+            self.error_message(msg)
+        else:
+            cmd = self.create_command_line(params_dict, CmdTemplate)
+            #print 'cmd: %s' % (cmd, )
+            self.run_command(cmd)
+        return True
+
+    on_generate_button_clicked = on_generate_menuitem_activate
+
+    def on_capture_cl_menuitem_activate(self, menuitem, data=None):
+        self.trans_gui_2_obj()
+        params_dict = self.trans_params_2_dict()
+        result, msg = self.validate_params(params_dict)
+        if result:
+            self.statusbar.pop(self.statusbar_cid)
+            self.statusbar.push(self.statusbar_cid, 'Error: %s' % (msg, ))
+            self.error_message(msg)
+        else:
+            cmd = self.create_command_line(params_dict, CaptureCmdTemplate)
+            cmd = cmd.replace(' --', ' \\\n    --')
+            cmd = cmd.replace(' -o', ' \\\n    -o')
+            cmd = cmd.replace(' -s', ' \\\n    -s')
+            self.display_content('Command line', cmd)
+        return True
+
+    def trans_gui_2_obj(self):
+        for item in ParamNameList:
+            ui_name = '%s_%s' % (item.get_name(), item.get_ui_type(), )
+            ui_obj = self.ui_obj_dict[ui_name]
+            if ui_obj is not None:
+                if item.get_name() == 'member_specs':
+                    value = ui_obj.get_active()
+                    if value == 1:
+                        self.params.set_member_specs('list')
+                    elif value == 2:
+                        self.params.set_member_specs('dict')
+                    else:
+                        self.params.set_member_specs('none')
+                else:
+                    s2 = '%s_%s' % (item.get_name(), item.get_ui_type(), )
+                    method = getattr(ui_obj, 'get_%s' % item.get_access_action())
+                    value = method()
+                    setattr(self.params, item.get_name(), value)
+
+    def trans_obj_2_gui(self):
+        for item in ParamNameList:
+            ui_name = '%s_%s' % (item.get_name(), item.get_ui_type(), )
+            ui_obj = self.ui_obj_dict[ui_name]
+            if ui_obj is not None:
+                if item.get_name() == 'member_specs':
+                    if self.params.get_member_specs() == 'list':
+                        ui_obj.set_active(1)
+                    elif self.params.get_member_specs() == 'dict':
+                        ui_obj.set_active(2)
+                    else:
+                        ui_obj.set_active(0)
+                else:
+                    value = getattr(self.params, item.get_name())
+                    if value is None:
+                        if item.get_ui_type() == 'entry':
+                            value = ''
+                        elif item.get_ui_type() == 'checkbutton':
+                            value = False
+                        elif item.get_ui_type() == 'combobox':
+                            value = 0
+                    method = getattr(ui_obj,
+                        'set_%s' % item.get_access_action())
+                    method(value)
+
+    def dump_params(self, msg, params):
+        print(msg)
+        params.export(sys.stdout, 0, name_='session')
+
+    def trans_params_2_dict(self):
+        params = self.params
+        params_dict = {}
+        pd = params_dict
+        pd['input_schema'] = getattr(params, 'input_schema')
+        self.transform_1_param(params, pd, 'output_superclass', 'o')
+        self.transform_1_param(params, pd, 'output_subclass', 's')
+        pd['force'] = (' -f' if params.get_force() else '')
+        self.transform_1_param(params, pd, 'prefix', 'p')
+        if params.get_empty_namespace_prefix():
+            pd['namespace_prefix'] = ' -a ""'
+        else:
+            self.transform_1_param(params, pd, 'namespace_prefix', 'a')
+        self.transform_1_param(params, pd, 'behavior_filename', 'b')
+        pd['properties'] = (' -m' if params.get_properties() else '')
+        self.transform_1_param(params, pd, 'subclass_suffix', 'subclass-suffix', True)
+        self.transform_1_param(params, pd, 'root_element', 'root-element', True)
+        self.transform_1_param(params, pd, 'superclass_module', 'super', True)
+        pd['old_getters_setters'] = (' --use-old-getter-setter' if params.get_old_getters_setters() else '')
+        self.transform_1_param(params, pd, 'user_methods', 'user-methods', True)
+        self.transform_1_param(params, pd, 'validator_bodies', 'validator-bodies', True)
+        pd['no_dates'] = (' --no-dates' if params.get_no_dates() else '')
+        pd['no_versions'] = (' --no-versions' if params.get_no_versions() else '')
+        pd['no_process_includes'] = (' --no-process-includes' if params.get_no_process_includes() else '')
+        pd['silence'] = (' --silence' if params.get_silence() else '')
+        # Special case for namespacedefs because of quoting.
+        #self.transform_1_param(params, pd, 'namespace_defs', 'namespacedef', True)
+        name = 'namespace_defs'
+        flag = 'namespacedef'
+        value = getattr(params, name)
+        params_dict[name] = (
+                " --%s='%s'" % (flag, value, )
+                if value.strip()
+                else '')
+        self.transform_1_param(params, pd, 'external_encoding', 'external-encoding', True)
+        if params.get_member_specs() == 'list':
+            pd['member_specs'] = ' --member-specs=list'
+        elif params.get_member_specs() == 'dict':
+            pd['member_specs'] = ' --member-specs=dict'
+        else:
+            pd['member_specs'] = ''
+        return pd
+
+    def transform_1_param(self, params, params_dict, name, flag, longopt=False):
+        value = getattr(params, name)
+        if longopt:
+            params_dict[name] = (
+                ' --%s="%s"' % (flag, value, )
+                if value.strip()
+                else '')
+        else:
+            params_dict[name] = (
+                ' -%s "%s"' % (flag, value, )
+                if value.strip()
+                else '')
+
+    def create_command_line(self, params_dict, template):
+        params_dict['exec_path'] = self.options.exec_path
+        cmd = template % params_dict
+        return cmd
+
+    def validate_params(self, params_dict):
+        p = params_dict
+        #print sorted(p.keys())
+        result = 0
+        msg = ''
+        if not p['input_schema']:
+            result = 1
+        elif not (p['output_superclass'] or
+            p['output_subclass']):
+            result = 2
+        if result:
+            msg = ErrorMessages[result]
+        return result, msg
+
+    # Clear all the fields/widgets to default values.    
+    def on_clear_menuitem_activate(self, menuitem, data=None):
+        message = 'Clear all entries?\nAre you sure?'
+        
+        if sys.version_info.major == 2 :
+            dialog = gtk.MessageDialog(
+                    None,
+                    gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                    gtk.MESSAGE_WARNING,
+                    gtk.BUTTONS_OK_CANCEL,
+                    message
+                    )
+        else :
+            dialog = gtk.MessageDialog(
+                    None,
+                    gtk.DialogFlags.MODAL | gtk.DialogFlags.DESTROY_WITH_PARENT,
+                    gtk.MessageType.WARNING,
+                    gtk.ButtonsType.OK_CANCEL,
+                    message
+                    ) 
+        
+        response = dialog.run()
+        dialog.destroy()
+        if response == branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'):
+            self.session_filename = None
+            self.params = generateds_gui_session.sessionType(
+                input_schema='',
+                output_superclass='',
+                output_subclass='',
+                force=False,
+                prefix='',
+                namespace_prefix='',
+                empty_namespace_prefix=False,
+                behavior_filename='',
+                properties=False,
+                subclass_suffix='',
+                root_element='',
+                superclass_module='',
+                auto_super=False,
+                old_getters_setters=False,
+                validator_bodies='',
+                user_methods='',
+                no_dates=False,
+                no_versions=False,
+                no_process_includes=False,
+                silence=False,
+                namespace_defs='',
+                external_encoding='',
+                member_specs='',
+                )
+            self.trans_obj_2_gui()
+
+    def run_command(self, cmd):
+        spobj = subprocess.Popen(cmd,
+            shell=True,
+            stdout=subprocess.PIPE, 
+            stderr=subprocess.PIPE,
+            close_fds=False)
+        outcontent = spobj.stdout.read()
+        errcontent = spobj.stderr.read()
+        error = False
+        if outcontent.strip():
+            self.display_content('Messages', outcontent)
+            error = True
+        if errcontent.strip():
+            self.display_content('Errors', errcontent)
+            error = True
+        if not error:
+            msg = 'Successfully generated.'
+            self.error_message(msg, branch_version('gtk.MESSAGE_INFO','gtk.MessageType.INFO'))
+
+    def display_content(self, title, content):
+        #content_dialog = ContentDialog()
+        self.content_dialog.show(content)
+
+    def on_open_session_menuitem_activate(self, menuitem, data=None):
+        self.trans_gui_2_obj()
+##         self.dump_params('saved_params:', self.saved_params)
+##         self.dump_params('params:', self.params)
+        if self.params != self.saved_params:
+            message = 'Session data has changed.\n\nSave?'
+            
+            if sys.version_info.major == 2 :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+                                            gtk.MESSAGE_ERROR,
+                                            gtk.BUTTONS_NONE,
+                                            message)
+                dialog.add_buttons(
+                    gtk.STOCK_YES, gtk.RESPONSE_YES,
+                    '_Discard', 1,
+                    gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                    )
+            else :
+                dialog =  gtk.MessageDialog(None,
+                                            gtk.DialogFlags.MODAL | gtk.DialogFlags.DESTROY_WITH_PARENT,
+                                            gtk.MessageType.ERROR,
+                                            gtk.ButtonsType.NONE,
+                                            message)
+            
+                dialog.add_buttons(
+                gtk.STOCK_YES, gtk.ResponseType.YES,
+                '_Discard', 1,
+                gtk.STOCK_CANCEL, gtk.ResponseType.CANCEL,
+                )            
+
+            response = dialog.run()
+            dialog.destroy()
+            if response == branch_version('gtk.RESPONSE_YES','gtk.ResponseType.YES'):
+                self.save_session_action()
+            elif response == 1:
+                pass
+            elif response == branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'):
+                return
+        session_filename = self.choose_filename(
+            branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
+            (('Session *.session', '*.session'),)
+            )
+        if session_filename:
+            self.session_filename = session_filename
+            self.load_session(self.session_filename)
+            msg = 'Session file: %s' % (self.session_filename, )
+            self.statusbar.pop(self.statusbar_cid)
+            self.statusbar.push(self.statusbar_cid, msg)
+
+    def on_save_session_menuitem_activate(self, menuitem, data=None):
+        self.save_session_action()
+
+    def save_session_action(self):
+        if not self.session_filename:
+            filename = self.choose_filename(
+                branch_version('gtk.FILE_CHOOSER_ACTION_SAVE','gtk.FileChooserAction.SAVE'),
+                (('Session *.session', '*.session'),),
+                confirm_overwrite=True,
+                initfilename=self.session_filename,
+                buttons=(
+                    gtk.STOCK_CANCEL, branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'),
+                    gtk.STOCK_SAVE, branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'),
+                    )
+                )
+            if filename:
+                self.session_filename = filename
+        if self.session_filename:
+            stem, ext = os.path.splitext(self.session_filename)
+            if not ext:
+                self.session_filename += '.session'
+            self.save_session(self.session_filename)
+            msg = 'Session file: %s' % (self.session_filename, )
+            self.statusbar.pop(self.statusbar_cid)
+            self.statusbar.push(self.statusbar_cid, msg)
+
+    def on_save_session_as_menuitem_activate(self, menuitem, data=None):
+        filename = self.choose_filename(
+            branch_version('gtk.FILE_CHOOSER_ACTION_SAVE','gtk.FileChooserAction.SAVE'),
+            (('Session *.session', '*.session'),),
+            confirm_overwrite=True,
+            initfilename=self.session_filename,
+            buttons=(
+                gtk.STOCK_CANCEL, branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'),
+                gtk.STOCK_SAVE, branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'),
+                )
+            )
+        if filename:
+            self.session_filename = filename
+            stem, ext = os.path.splitext(self.session_filename)
+            if not ext:
+                self.session_filename += '.session'
+            self.save_session(self.session_filename)
+            msg = 'Session file: %s' % (self.session_filename, )
+            self.statusbar.pop(self.statusbar_cid)
+            self.statusbar.push(self.statusbar_cid, msg)
+
+    def save_session(self, filename):
+        self.trans_gui_2_obj()
+        sessionObj = self.params
+        outfile = open(filename, 'w')
+        outfile.write('<?xml version="1.0" ?>\n')
+        sessionObj.export(outfile, 0, name_="session", 
+            namespacedef_='')
+        outfile.close()
+        msg = 'Session saved to file:\n%s' % (filename, )
+        msgTy = branch_version('gtk.MESSAGE_INFO','gtk.MessageType.INFO')
+        self.error_message(msg, msgTy)
+        self.saved_params = self.params.copy()
+
+    def load_session(self, filename):
+        try:
+            doc = generateds_gui_session.parsexml_(filename)
+            rootNode = doc.getroot()
+            rootTag, rootClass = generateds_gui_session.get_root_tag(rootNode)
+            if rootClass is None:
+                rootTag = 'session'
+                rootClass = generateds_gui_session.sessionType
+            sessionObj = rootClass.factory()
+            sessionObj.build(rootNode)
+            self.params = sessionObj
+            self.trans_obj_2_gui()
+            self.trans_gui_2_obj()
+            self.saved_params = self.params.copy()
+        except IOError as exp:
+            msg = str(exp)
+            self.error_message(msg)
+        except expat.ExpatError as exp:
+            msg = '%s file: %s' % (str(exp), filename, )
+            self.error_message(msg)
+
+    def on_about_menu_item_activate(self, menuitem, data=None):
+        if self.about_dialog:
+            self.about_dialog.present()
+            return
+        authors = [
+            'Dave Kuhlman <dkuhlman@rexx.com>',
+        ]
+        about_dialog = gtk.AboutDialog()
+        about_dialog.set_transient_for(self.window)
+        about_dialog.set_destroy_with_parent(True)
+        about_dialog.set_name("generateDS.py Python bindings generator")
+        about_dialog.set_version(VERSION)
+        about_dialog.set_copyright("Copyright \xc2\xa9 2009 Dave Kuhlman")
+        about_dialog.set_website("http://www.rexx.com/~dkuhlman")
+        about_dialog.set_comments("GTK+ and Glade3 GUI front end")
+        about_dialog.set_authors(authors)
+        about_dialog.set_logo_icon_name(gtk.STOCK_EDIT)
+        # callbacks for destroying the dialog
+        def close(dialog, response, editor):
+            editor.about_dialog = None
+            dialog.destroy()
+        def delete_event(dialog, event, editor):
+            editor.about_dialog = None
+            return True
+        about_dialog.connect("response", close, self)
+        about_dialog.connect("delete-event", delete_event, self)
+        self.about_dialog = about_dialog
+        about_dialog.show()
+
+    def error_message(self, message, message_type=None):
+        # log to terminal window
+        #print message
+        # create an error message dialog and display modally to the user
+        if message_type is None:
+            message_type = branch_version('gtk.MESSAGE_ERROR','gtk.MessageType.ERROR')
+            
+        dialog = gtk.MessageDialog(None,
+            branch_version('gtk.DIALOG_MODAL','gtk.DialogFlags.MODAL') | branch_version('gtk.DIALOG_DESTROY_WITH_PARENT','gtk.DialogFlags.DESTROY_WITH_PARENT'),
+            message_type, branch_version('gtk.BUTTONS_OK','gtk.ButtonsType.OK'), message)
+        
+        dialog.run()
+        dialog.destroy()
+
+    def reset_default_status(self):
+        msg = "Session file: (UNTITLED)"
+        self.statusbar.pop(self.statusbar_cid)
+        self.statusbar.push(self.statusbar_cid, msg)
+
+    def on_input_schema_chooser_button_clicked(self, button, data=None):
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
+            (('Schemas *.xsd', '*.xsd'),))
+        if filename:
+            self.input_schema_entry.set_text(filename)
+
+    def on_output_superclass_chooser_button_clicked(self, widget, data=None):
+        filename = self.choose_filename(patterns=(('Python *.py', '*.py'), ))
+        if filename:
+            self.output_superclass_entry.set_text(filename)
+            #self.on_output_superclass_entry_changed(
+            #    self.output_superclass_entry, data)
+
+    def on_output_subclass_chooser_button_clicked(self, button, data=None):
+        filename = self.choose_filename(patterns=(('Python *.py', '*.py'), ))
+        if filename:
+            self.output_subclass_entry.set_text(filename)
+
+    def on_behavior_filename_chooser_button_clicked(self, button, data=None):
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
+            (('Python *.py', '*.py'),))
+        if filename:
+            self.behavior_filename_entry.set_text(filename)
+
+    def on_validator_bodies_chooser_button_clicked(self, button, data=None):
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER','gtk.FileChooserAction.SELECT_FOLDER'),
+            )
+        if filename:
+            self.validator_bodies_entry.set_text(filename)
+
+    def on_user_methods_chooser_button_clicked(self, button, data=None):
+        filename = self.choose_filename(branch_version('gtk.FILE_CHOOSER_ACTION_OPEN','gtk.FileChooserAction.OPEN'),
+            (('Python *.py', '*.py'),))
+        if filename:
+            self.user_methods_entry.set_text(filename)
+
+    def choose_filename(self, action=None,
+        patterns=(), confirm_overwrite=False, initfilename=None,
+        buttons=None):
+        if action is None:
+            action = branch_version('gtk.FILE_CHOOSER_ACTION_SAVE','gtk.FileChooserAction.SAVE')
+        filename = None
+        ty_CANCEL = branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL')
+        ty_OK = branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK')
+        if buttons is None:
+            buttons=(
+                gtk.STOCK_CANCEL, ty_CANCEL,
+                gtk.STOCK_OPEN, ty_OK,
+                )
+        dialog = gtk.FileChooserDialog(
+            title=None,
+            action=action,
+            buttons=buttons,
+            )
+        if self.current_folder is not None:
+            dialog.set_current_folder(self.current_folder)
+        if initfilename is not None:
+            dialog.set_filename(initfilename)
+        if patterns:
+            filter = gtk.FileFilter()
+            for name, pattern in patterns:
+                filter.set_name(name)
+                filter.add_pattern(pattern)
+            dialog.add_filter(filter)
+            filter = gtk.FileFilter()
+            filter.set_name("All files *.*")
+            filter.add_pattern("*")
+            dialog.add_filter(filter)
+        dialog.set_do_overwrite_confirmation(confirm_overwrite)
+        response = dialog.run()
+        if response == branch_version('gtk.RESPONSE_OK','gtk.ResponseType.OK'):
+            filename = dialog.get_filename()
+            self.current_folder = dialog.get_current_folder()
+        elif response == branch_version('gtk.RESPONSE_CANCEL','gtk.ResponseType.CANCEL'):
+            pass
+        dialog.destroy()
+        return filename
+
+    def on_namespace_prefix_entry_changed(self, widget, data=None):
+        entry = self.ui_obj_dict['namespace_prefix_entry']
+        checkbutton = self.ui_obj_dict['empty_namespace_prefix_checkbutton']
+        checkbutton.set_active(False)
+        return True
+
+    def on_empty_namespace_prefix_checkbutton_toggled(self, widget, data=None):
+        entry = self.ui_obj_dict['namespace_prefix_entry']
+        checkbutton = self.ui_obj_dict['empty_namespace_prefix_checkbutton']
+        if widget.get_active():
+            entry.set_text('')
+        return True
+
+    def on_output_superclass_entry_changed(self, widget, data=None):
+        entry = self.ui_obj_dict['superclass_module_entry']
+        checkbutton = self.auto_super_checkbutton
+        if checkbutton.get_active():
+            path = widget.get_text()
+            if path:
+                stem = os.path.splitext(os.path.split(path)[1])[0]
+                if stem:
+                    entry.set_text(stem)
+        return True
+
+    def on_auto_super_checkbutton_toggled(self, widget, data=None):
+        entry = self.ui_obj_dict['superclass_module_entry']
+        superclass_entry = self.ui_obj_dict['output_superclass_entry']
+        #checkbutton = self.auto_super_checkbutton
+        checkbutton = widget
+        if widget.get_active():
+            path = superclass_entry.get_text()
+            if path:
+                stem = os.path.splitext(os.path.split(path)[1])[0]
+                if stem:
+                    entry.set_text(stem)
+        return True
+
+    def on_ok_button_activate(self, widget, data=None):
+        #print( '(GeneratedsGui) widget:', widget)
+        response = self.content_dialog.on_ok_button_activate(
+            self.content_dialog, data)
+        return response
+
+    name_pat1 = re.compile(r'^(.*)_clear_button')
+
+    # This method keys off the correspondence between the
+    #   name of the button and the name of the related entry,
+    #   for example, xxx_yyy_entry : xxx_yyy_clear_button.
+    def on_clear_button_clicked(self, widget, data=None):
+        name = widget.get_name() if sys.version_info.major == 2 else gtk.Buildable.get_name(widget) # http://python.6.x6.nabble.com/Confused-about-a-widget-s-name-td5015372.html
+        mo = GeneratedsGui.name_pat1.search(name)
+        if not mo is None:
+            stem = mo.group(1)
+            name1 = '%s_entry' % (stem, )
+            ui_obj = self.ui_obj_dict[name1]
+            ui_obj.set_text('')
+
+    # Run main application window
+    def main(self):
+        self.window.show()
+        gtk.main()
+
+
+class ContentDialog(gtk.Dialog):
+    def __init__(self):
+        global Builder
+        self.content_dialog = Builder.get_object('content_dialog')
+        self.content_textview = Builder.get_object('content_textview')
+        buf = self.content_textview.get_buffer().set_text('')
+
+    def show(self, content):
+        #Builder.connect_signals(self)
+        self.content_textview.get_buffer().set_text(content)
+        response = self.content_dialog.run()
+        self.content_dialog.hide()
+
+    def on_ok_button_activate(self, widget, data=None):
+        #print( '(content_dialog) widget:', widget)
+        return False
+
+
+#
+# Functions for internal use
+#
+
+def branch_version(for_2, for_3):
+    """
+    The Branch works depends on the version of Python
+    """
+    if sys.version_info.major == 2:
+        return eval(for_2)
+    elif sys.version_info.major == 3:
+        return eval(for_3)
+    else:
+        return eval(for_3)
+    
+def capture_options(options):
+    config_parser = ConfigParser()
+    config_parser.read([
+        os.path.expanduser('~/.generateds_gui.ini'),
+        './generateds_gui.ini',
+        ])
+    section = 'general'
+    names = ('exec-path', 'exec_path')
+    capture_1_option(options, config_parser, section, names)
+##     names = ('impl-schema', 'impl_schema')
+##     capture_1_option(options, config_parser, section, names)
+    names = ('impl-gui', 'impl_gui')
+    capture_1_option(options, config_parser, section, names)
+    names = ('session', 'session')
+    capture_1_option(options, config_parser, section, names)
+    # Set some defaults.
+    if options.exec_path is None:
+        options.exec_path = 'generateDS.py'
+
+def capture_1_option(options, config_parser, section, names):
+    if (getattr(options, names[1]) is None and
+        config_parser.has_option(section, names[0])
+        ):
+        setattr(options, names[1], config_parser.get(section, names[0]))
+
+def capture_ui_names():
+    items = generateds_gui_session.sessionType.member_data_items_
+    for item in items:
+        ui_item = UIItemSpec(item.get_name())
+        if item.get_name() == 'member_specs':
+            ui_item.set_ui_type('combobox')
+            ui_item.set_access_action('active')
+        elif item.get_data_type() == 'xs:string':
+            ui_item.set_ui_type('entry')
+            ui_item.set_access_action('text')
+        elif item.get_data_type() == 'xs:boolean':
+            ui_item.set_ui_type('checkbutton')
+            ui_item.set_access_action('active')
+        ParamNameList.append(ui_item)
+##     print 'ParamNameList:'
+##     for item in ParamNameList:
+##         print '    %s  %s' % (item.get_name(), item.get_ui_type(), )
+
+
+USAGE_TEXT = """
+    python %prog [options] <somefile.xxx>
+example:
+    python %prog somefile.xxx"""
+
+def usage(parser):
+    parser.print_help()
+    sys.exit(1)
+
+
+def main():
+    parser = OptionParser(USAGE_TEXT)
+    parser.add_option("--exec-path",
+        type="string", action="store",
+        dest="exec_path",
+        #default="generateDS.py",
+        help='path to executable generated in command line.'
+            '  Example: "python /path/to/generateDS.py".'
+            '  Default: "./generateDS.py".'
+            '  Use Tools/Generate CL (Ctrl-T) to see it.'
+        )
+    parser.add_option("--impl-gui",
+        type="string", action="store",
+        dest="impl_gui",
+        help="name of glade file that defines the GUI if not embedded."
+        )
+    parser.add_option("-s", "--session",
+        type="string", action="store",
+        dest="session",
+        help="name of a session file to be loaded."
+        )
+    (options, args) = parser.parse_args()
+    capture_options(options)
+    capture_ui_names()
+    if len(args) > 0:
+        usage(parser)
+    editor = GeneratedsGui(options)
+    editor.main()
+
+# Do not change the next 3 lines.
+## UI_SPECIFICATION ##
+
+Ui_spec = """<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkWindow" id="window1">
+    <accel-groups>
+      <group name="accelgroup1"/>
+    </accel-groups>
+    <signal name="delete_event" handler="on_window_delete_event"/>
+    <child>
+      <object class="GtkVBox" id="vbox1">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkMenuBar" id="menubar1">
+            <property name="visible">True</property>
+            <child>
+              <object class="GtkMenuItem" id="menuitem1">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_File</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu1">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="clear_menuitem">
+                        <property name="label">Clear</property>
+                        <property name="visible">True</property>
+                        <property name="image">image4</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <accelerator key="n" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_clear_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="open_session_menuitem">
+                        <property name="label">_Load session</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Load a previous saved session.</property>
+                        <property name="use_underline">True</property>
+                        <property name="image">image3</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_open_session_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="save_session_menuitem">
+                        <property name="label">_Save session</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Save the current session.</property>
+                        <property name="use_underline">True</property>
+                        <property name="image">image1</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <accelerator key="s" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_save_session_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="save_session_as_menuitem">
+                        <property name="label">Save session as ...</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Save the current session in
+file chosen by the user.</property>
+                        <property name="image">image2</property>
+                        <property name="use_stock">False</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <signal name="activate" handler="on_save_session_as_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparatorMenuItem" id="menuitem5">
+                        <property name="visible">True</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="imagemenuitem5">
+                        <property name="label">gtk-quit</property>
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Exit from the application.</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <signal name="activate" handler="on_quit_menu_item_activate"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem2">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Tools</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu2">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkMenuItem" id="capture_cl_menuitem">
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Capture the command line that would be used
+to generate the bindings modules.</property>
+                        <property name="label" translatable="yes">_Capture CL</property>
+                        <property name="use_underline">True</property>
+                        <accelerator key="t" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_capture_cl_menuitem_activate"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="generate_menuitem">
+                        <property name="visible">True</property>
+                        <property name="tooltip_text" translatable="yes">Generate the bindings modules.</property>
+                        <property name="label" translatable="yes">_Generate</property>
+                        <property name="use_underline">True</property>
+                        <accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="on_generate_menuitem_activate"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menuitem4">
+                <property name="visible">True</property>
+                <property name="label" translatable="yes">_Help</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu3">
+                    <property name="visible">True</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="imagemenuitem10">
+                        <property name="label">gtk-about</property>
+                        <property name="visible">True</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <property name="accel_group">accelgroup1</property>
+                        <signal name="activate" handler="on_about_menu_item_activate"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTable" id="table1">
+            <property name="visible">True</property>
+            <property name="n_rows">22</property>
+            <property name="n_columns">4</property>
+            <child>
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Input schema file:</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Output superclass file:</property>
+              </object>
+              <packing>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Output subclass file:</property>
+              </object>
+              <packing>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Overwrite without asking:</property>
+              </object>
+              <packing>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="force_checkbutton">
+                <property name="label" translatable="yes">Force</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Always overwrite output files.
+Do not ask for confirmation.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="input_schema_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">The path and name of the
+input XML schema defining the
+bindings to be generated.</property>
+                <property name="invisible_char">&#x25CF;</property>
+                <property name="width_chars">80</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="output_superclass_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">The path and name of the output file
+to be generated and to contain the 
+superclasses.</property>
+                <property name="invisible_char">&#x25CF;</property>
+                <signal name="changed" handler="on_output_superclass_entry_changed"/>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="output_subclass_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">The path and name of the output file
+to be generated and to contain the 
+subclasses.</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label5">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Prefix (for class names):</property>
+              </object>
+              <packing>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="prefix_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Prefix for class names.</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label6">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Namespace prefix:</property>
+              </object>
+              <packing>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="namespace_prefix_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="events">GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+                <property name="tooltip_text" translatable="yes">Override default namespace
+prefix in schema file.
+Example: -a "xsd:"
+Default: "xs:".</property>
+                <property name="invisible_char">&#x25CF;</property>
+                <signal name="changed" handler="on_namespace_prefix_entry_changed"/>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label7">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Behavior file name:</property>
+              </object>
+              <packing>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="behavior_filename_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Input file name for behaviors
+added to subclasses.</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label8">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Generate Python properties:</property>
+              </object>
+              <packing>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="properties_checkbutton">
+                <property name="label" translatable="yes">Properties</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Generate Python properties for member variables
+so that the value can be retrieved and modified
+without calling getter and setter functions.
+</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">7</property>
+                <property name="bottom_attach">8</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label10">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Subclass suffix:</property>
+              </object>
+              <packing>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="subclass_suffix_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Append this text to the generated subclass names.
+Default="Sub".</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label11">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Root element:</property>
+              </object>
+              <packing>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="root_element_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Assume that this value is the name
+of the root element of instance docs.
+Default is first element defined in schema.</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="input_schema_chooser_button">
+                <property name="label" translatable="yes">Choose</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Choose the input schema file.</property>
+                <signal name="clicked" handler="on_input_schema_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_superclass_chooser_button">
+                <property name="label" translatable="yes">Choose</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Choose the output superclass bindings file.</property>
+                <signal name="clicked" handler="on_output_superclass_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_subclass_chooser_button">
+                <property name="label" translatable="yes">Choose</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Choose the output subclass bindings file.</property>
+                <signal name="clicked" handler="on_output_subclass_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="behavior_filename_chooser_button">
+                <property name="label" translatable="yes">Choose</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Choose the nput file name for
+behaviors added to subclasses.</property>
+                <signal name="clicked" handler="on_behavior_filename_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label12">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Superclass module:</property>
+              </object>
+              <packing>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="superclass_module_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Superclass module name in subclass module.
+Default="???".</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label13">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Use old getters and setters:</property>
+              </object>
+              <packing>
+                <property name="top_attach">12</property>
+                <property name="bottom_attach">13</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="old_getters_setters_checkbutton">
+                <property name="label" translatable="yes">Old getters and setters</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Name getters and setters getVar() and setVar(),
+instead of get_var() and set_var().</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">12</property>
+                <property name="bottom_attach">13</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label14">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Validator bodies path:</property>
+              </object>
+              <packing>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label15">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">User methods module:</property>
+              </object>
+              <packing>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label16">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">No dates:</property>
+              </object>
+              <packing>
+                <property name="top_attach">15</property>
+                <property name="bottom_attach">16</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label17">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">No versions:</property>
+              </object>
+              <packing>
+                <property name="top_attach">16</property>
+                <property name="bottom_attach">17</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="no_dates_checkbutton">
+                <property name="label" translatable="yes">No dates in generated output</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Do not include the current date in the generated
+files. This is useful if you want to minimize
+the amount of (no-operation) changes to the
+generated python code.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">15</property>
+                <property name="bottom_attach">16</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="validator_bodies_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Path to a directory containing files that provide
+bodies (implementations) of validator methods.</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="validator_bodies_chooser_button">
+                <property name="label" translatable="yes">Choose</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Choose the path to a directory containing files that provide
+bodies (implementations) of validator methods.</property>
+                <signal name="clicked" handler="on_validator_bodies_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="no_versions_checkbutton">
+                <property name="label" translatable="yes">No version info in generated output</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Do not include the current version in the generated
+files. This is useful if you want to minimize
+the amount of (no-operation) changes to the
+generated python code.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">16</property>
+                <property name="bottom_attach">17</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="user_methods_button">
+                <property name="label" translatable="yes">Choose</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Choose the optional module containing user methods.  See
+section "User Methods" in the documentation.</property>
+                <signal name="clicked" handler="on_user_methods_chooser_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="user_methods_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Optional module containing user methods.  See
+section "User Methods" in the documentation.</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label18">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">No process includes:</property>
+              </object>
+              <packing>
+                <property name="top_attach">17</property>
+                <property name="bottom_attach">18</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label19">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Silence:</property>
+              </object>
+              <packing>
+                <property name="top_attach">18</property>
+                <property name="bottom_attach">19</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="no_process_includes_checkbutton">
+                <property name="label" translatable="yes">Do not process includes in schema</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Do not process included XML Schema files.  By
+default, generateDS.py will insert content
+from files referenced by &lt;include ... /&gt;
+elements into the XML Schema to be processed.</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">17</property>
+                <property name="bottom_attach">18</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="silence_checkbutton">
+                <property name="label" translatable="yes">Generate code that does not echo the parsed XML</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Normally, the code generated with generateDS
+echoes the information being parsed. Use
+this option to turn off that behavior.
+</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">18</property>
+                <property name="bottom_attach">19</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label20">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Namespace definitions:</property>
+              </object>
+              <packing>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label21">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">External encoding:</property>
+              </object>
+              <packing>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label22">
+                <property name="visible">True</property>
+                <property name="xalign">0</property>
+                <property name="label" translatable="yes">Member specs:</property>
+              </object>
+              <packing>
+                <property name="top_attach">21</property>
+                <property name="bottom_attach">22</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="namespace_defs_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="tooltip_text" translatable="yes">Namespace definition to be passed in as the
+value for the namespacedef_ parameter of
+the export() method by the generated
+parse() and parseString() functions.
+Default=''.  Example:
+xmlns:abc="http://www.abc.com"</property>
+                <property name="invisible_char">&#x25CF;</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="external_encoding_entry">
+                <property name="visible">True</property>
+                <property name="tooltip_text" translatable="yes">Encode output written by the generated export
+methods using this encoding.  Default, if omitted,
+is the value returned by sys.getdefaultencoding().
+Example: utf-8.</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="member_specs_combobox_container">
+                <property name="visible">True</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">21</property>
+                <property name="bottom_attach">22</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="empty_namespace_prefix_checkbutton">
+                <property name="label" translatable="yes">Empty</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Assume an empty namespace
+prefix in the XML schema, not
+the default ("xs:").</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_empty_namespace_prefix_checkbutton_toggled"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="auto_super_checkbutton">
+                <property name="label" translatable="yes">Auto</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Use the superclass file name
+stem as the super-class module
+name.</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="on_auto_super_checkbutton_toggled"/>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="right_attach">3</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="input_schema_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the input schema file entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_superclass_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the output superclass file entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">1</property>
+                <property name="bottom_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="output_subclass_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the output subclass file entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">2</property>
+                <property name="bottom_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="prefix_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the prefix entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">4</property>
+                <property name="bottom_attach">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="namespace_prefix_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the XML namespace prefix entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">5</property>
+                <property name="bottom_attach">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="behavior_filename_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the behavior file name entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">6</property>
+                <property name="bottom_attach">7</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="subclass_suffix_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the subclass suffix.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">9</property>
+                <property name="bottom_attach">10</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="root_element_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the root element entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">10</property>
+                <property name="bottom_attach">11</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="superclass_module_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the superclass module entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">11</property>
+                <property name="bottom_attach">12</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="validator_bodies_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the validator bodies path entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">13</property>
+                <property name="bottom_attach">14</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="user_methods_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the user methods module entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">14</property>
+                <property name="bottom_attach">15</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="namespace_defs_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the namespace definitions entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">19</property>
+                <property name="bottom_attach">20</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="external_encoding_clear_button">
+                <property name="label">gtk-clear</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Clear the external encoding entry.</property>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="on_clear_button_clicked"/>
+              </object>
+              <packing>
+                <property name="left_attach">3</property>
+                <property name="right_attach">4</property>
+                <property name="top_attach">20</property>
+                <property name="bottom_attach">21</property>
+              </packing>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" id="hbox1">
+            <property name="visible">True</property>
+            <property name="homogeneous">True</property>
+            <child>
+              <object class="GtkButton" id="generate_button">
+                <property name="label" translatable="yes">Generate</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Generate the bindings modules.</property>
+                <signal name="clicked" handler="on_generate_button_clicked"/>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="quit_button">
+                <property name="label" translatable="yes">Quit</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Exit from the application.</property>
+                <signal name="clicked" handler="on_quit_button_clicked"/>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkStatusbar" id="statusbar1">
+            <property name="visible">True</property>
+            <property name="spacing">2</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
+          <placeholder/>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkAccelGroup" id="accelgroup1"/>
+  <object class="GtkDialog" id="content_dialog">
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Messages and Content</property>
+    <property name="default_width">800</property>
+    <property name="default_height">600</property>
+    <property name="type_hint">normal</property>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="dialog-vbox3">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">automatic</property>
+            <property name="vscrollbar_policy">automatic</property>
+            <child>
+              <object class="GtkTextView" id="content_textview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="editable">False</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" id="dialog-action_area3">
+            <property name="visible">True</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="content_dialog_ok_button">
+                <property name="label" translatable="yes">OK</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="activate" handler="on_ok_button_activate"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">content_dialog_ok_button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-save</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="stock">gtk-save-as</property>
+  </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="stock">gtk-open</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="stock">gtk-clear</property>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="stock">gtk-missing-image</property>
+  </object>
+</interface>
+"""
+
+## UI_SPECIFICATION ##
+# Do not change the above 3 lines.
+
+
+    
+if __name__ == "__main__":
+    main()
+    
diff --git a/libgenerateDS/gui/generateds_gui_session.py b/libgenerateDS/gui/generateds_gui_session.py
index 62807227caf94bd66ead0019ac31ca473b459d37..4a4ef0966fcbaf35198d0b3cd25ab2b6c0f6edce 100644
--- a/libgenerateDS/gui/generateds_gui_session.py
+++ b/libgenerateDS/gui/generateds_gui_session.py
@@ -1,862 +1,862 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*- 
-
-#
-# Generated Wed Dec  8 14:24:46 2010 by generateDS.py version 2.3a.
-#
-
-import sys
-import getopt
-import re as re_
-
-etree_ = None
-Verbose_import_ = False
-(   XMLParser_import_none, XMLParser_import_lxml,
-    XMLParser_import_elementtree
-    ) = range(3)
-XMLParser_import_library = None
-try:
-    # lxml
-    from lxml import etree as etree_
-    XMLParser_import_library = XMLParser_import_lxml
-    if Verbose_import_:
-        print("running with lxml.etree")
-except ImportError:
-    try:
-        # cElementTree from Python 2.5+
-        import xml.etree.cElementTree as etree_
-        XMLParser_import_library = XMLParser_import_elementtree
-        if Verbose_import_:
-            print("running with cElementTree on Python 2.5+")
-    except ImportError:
-        try:
-            # ElementTree from Python 2.5+
-            import xml.etree.ElementTree as etree_
-            XMLParser_import_library = XMLParser_import_elementtree
-            if Verbose_import_:
-                print("running with ElementTree on Python 2.5+")
-        except ImportError:
-            try:
-                # normal cElementTree install
-                import cElementTree as etree_
-                XMLParser_import_library = XMLParser_import_elementtree
-                if Verbose_import_:
-                    print("running with cElementTree")
-            except ImportError:
-                try:
-                    # normal ElementTree install
-                    import elementtree.ElementTree as etree_
-                    XMLParser_import_library = XMLParser_import_elementtree
-                    if Verbose_import_:
-                        print("running with ElementTree")
-                except ImportError:
-                    raise ImportError("Failed to import ElementTree from any known place")
-
-def parsexml_(*args, **kwargs):
-    if (XMLParser_import_library == XMLParser_import_lxml and
-        'parser' not in kwargs):
-        # Use the lxml ElementTree compatible parser so that, e.g.,
-        #   we ignore comments.
-        kwargs['parser'] = etree_.ETCompatXMLParser()
-    doc = etree_.parse(*args, **kwargs)
-    return doc
-
-#
-# User methods
-#
-# 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.
-
-try:
-    from generatedssuper import GeneratedsSuper
-except ImportError, exp:
-
-    class GeneratedsSuper(object):
-        def gds_format_string(self, input_data, input_name=''):
-            return input_data
-        def gds_format_integer(self, input_data, input_name=''):
-            return '%d' % input_data
-        def gds_format_float(self, input_data, input_name=''):
-            return '%f' % input_data
-        def gds_format_double(self, input_data, input_name=''):
-            return '%e' % input_data
-        def gds_format_boolean(self, input_data, input_name=''):
-            return '%s' % input_data
-        def gds_str_lower(self, instring):
-            return instring.lower()
-                    
-                    
-
-#
-# 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]+")
-
-#
-# Support/utility functions.
-#
-
-def showIndent(outfile, level):
-    for idx in range(level):
-        outfile.write('    ')
-
-def quote_xml(inStr):
-    if not inStr:
-        return ''
-    s1 = (isinstance(inStr, basestring) and inStr or
-          '%s' % inStr)
-    s1 = s1.replace('&', '&amp;')
-    s1 = s1.replace('<', '&lt;')
-    s1 = s1.replace('>', '&gt;')
-    return s1
-
-def quote_attrib(inStr):
-    s1 = (isinstance(inStr, basestring) 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
-
-
-class GDSParseError(Exception):
-    pass
-
-def raise_parse_error(node, msg):
-    if XMLParser_import_library == XMLParser_import_lxml:
-        msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
-    else:
-        msg = '%s (element %s)' % (msg, node.tag, )
-    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
-    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):
-        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)
-    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))
-    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):
-        self.name = name
-        self.data_type = data_type
-        self.container = container
-    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 _cast(typ, value):
-    if typ is None or value is None:
-        return value
-    return typ(value)
-
-#
-# Mixin class for additional behaviors.
-#
-
-class SessionTypeMixin(object):
-    def copy(self):
-        """Produce a copy of myself.
-        """
-        new_session = sessionType(
-            input_schema = self.input_schema,
-            output_superclass = self.output_superclass,
-            output_subclass = self.output_subclass,
-            force = self.force,
-            prefix = self.prefix,
-            namespace_prefix = self.namespace_prefix,
-            empty_namespace_prefix = self.empty_namespace_prefix,
-            behavior_filename = self.behavior_filename,
-            properties = self.properties,
-            subclass_suffix = self.subclass_suffix,
-            root_element = self.root_element,
-            superclass_module = self.superclass_module,
-            auto_super = self.auto_super,
-            old_getters_setters = self.old_getters_setters,
-            validator_bodies = self.validator_bodies,
-            user_methods = self.user_methods,
-            no_dates = self.no_dates,
-            no_versions = self.no_versions,
-            no_process_includes = self.no_process_includes,
-            silence = self.silence,
-            namespace_defs = self.namespace_defs,
-            external_encoding = self.external_encoding,
-            member_specs = self.member_specs,
-            )
-        return new_session
-
-    def __eq__(self, obj):
-        """Implement the == operator.
-        """
-        if (
-            obj.input_schema == self.input_schema and
-            obj.output_superclass == self.output_superclass and
-            obj.output_subclass == self.output_subclass and
-            obj.force == self.force and
-            obj.prefix == self.prefix and
-            obj.namespace_prefix == self.namespace_prefix and
-            obj.empty_namespace_prefix == self.empty_namespace_prefix and
-            obj.behavior_filename == self.behavior_filename and
-            obj.properties == self.properties and
-            obj.subclass_suffix == self.subclass_suffix and
-            obj.root_element == self.root_element and
-            obj.superclass_module == self.superclass_module and
-            obj.auto_super == self.auto_super and
-            obj.old_getters_setters == self.old_getters_setters and
-            obj.validator_bodies == self.validator_bodies and
-            obj.user_methods == self.user_methods and
-            obj.no_dates == self.no_dates and
-            obj.no_versions == self.no_versions and
-            obj.no_process_includes == self.no_process_includes and
-            obj.silence == self.silence and
-            obj.namespace_defs == self.namespace_defs and
-            obj.external_encoding == self.external_encoding and
-            obj.member_specs == self.member_specs):
-            return True
-        else:
-            return False
-
-    def __ne__(self, obj):
-        """Implement the != operator.
-        """
-        return not self.__eq__(obj)
-
-#
-# Data representation classes.
-#
-
-class sessionType(GeneratedsSuper, SessionTypeMixin):
-    member_data_items_ = [
-        MemberSpec_('input_schema', 'xs:string', 0),
-        MemberSpec_('output_superclass', 'xs:string', 0),
-        MemberSpec_('output_subclass', 'xs:string', 0),
-        MemberSpec_('force', 'xs:boolean', 0),
-        MemberSpec_('prefix', 'xs:string', 0),
-        MemberSpec_('namespace_prefix', 'xs:string', 0),
-        MemberSpec_('empty_namespace_prefix', 'xs:boolean', 0),
-        MemberSpec_('behavior_filename', 'xs:string', 0),
-        MemberSpec_('properties', 'xs:boolean', 0),
-        MemberSpec_('subclass_suffix', 'xs:string', 0),
-        MemberSpec_('root_element', 'xs:string', 0),
-        MemberSpec_('superclass_module', 'xs:string', 0),
-        MemberSpec_('auto_super', 'xs:boolean', 0),
-        MemberSpec_('old_getters_setters', 'xs:boolean', 0),
-        MemberSpec_('validator_bodies', 'xs:string', 0),
-        MemberSpec_('user_methods', 'xs:string', 0),
-        MemberSpec_('no_dates', 'xs:boolean', 0),
-        MemberSpec_('no_versions', 'xs:boolean', 0),
-        MemberSpec_('no_process_includes', 'xs:boolean', 0),
-        MemberSpec_('silence', 'xs:boolean', 0),
-        MemberSpec_('namespace_defs', 'xs:string', 0),
-        MemberSpec_('external_encoding', 'xs:string', 0),
-        MemberSpec_('member_specs', 'xs:string', 0),
-        ]
-    subclass = None
-    superclass = None
-    def __init__(self, input_schema=None, output_superclass=None, output_subclass=None, force=None, prefix=None, namespace_prefix=None, empty_namespace_prefix=None, behavior_filename=None, properties=None, subclass_suffix=None, root_element=None, superclass_module=None, auto_super=None, old_getters_setters=None, validator_bodies=None, user_methods=None, no_dates=None, no_versions=None, no_process_includes=None, silence=None, namespace_defs=None, external_encoding=None, member_specs=None):
-        self.input_schema = input_schema
-        self.output_superclass = output_superclass
-        self.output_subclass = output_subclass
-        self.force = force
-        self.prefix = prefix
-        self.namespace_prefix = namespace_prefix
-        self.empty_namespace_prefix = empty_namespace_prefix
-        self.behavior_filename = behavior_filename
-        self.properties = properties
-        self.subclass_suffix = subclass_suffix
-        self.root_element = root_element
-        self.superclass_module = superclass_module
-        self.auto_super = auto_super
-        self.old_getters_setters = old_getters_setters
-        self.validator_bodies = validator_bodies
-        self.user_methods = user_methods
-        self.no_dates = no_dates
-        self.no_versions = no_versions
-        self.no_process_includes = no_process_includes
-        self.silence = silence
-        self.namespace_defs = namespace_defs
-        self.external_encoding = external_encoding
-        self.member_specs = member_specs
-    def factory(*args_, **kwargs_):
-        if sessionType.subclass:
-            return sessionType.subclass(*args_, **kwargs_)
-        else:
-            return sessionType(*args_, **kwargs_)
-    factory = staticmethod(factory)
-    def get_input_schema(self): return self.input_schema
-    def set_input_schema(self, input_schema): self.input_schema = input_schema
-    def get_output_superclass(self): return self.output_superclass
-    def set_output_superclass(self, output_superclass): self.output_superclass = output_superclass
-    def get_output_subclass(self): return self.output_subclass
-    def set_output_subclass(self, output_subclass): self.output_subclass = output_subclass
-    def get_force(self): return self.force
-    def set_force(self, force): self.force = force
-    def get_prefix(self): return self.prefix
-    def set_prefix(self, prefix): self.prefix = prefix
-    def get_namespace_prefix(self): return self.namespace_prefix
-    def set_namespace_prefix(self, namespace_prefix): self.namespace_prefix = namespace_prefix
-    def get_empty_namespace_prefix(self): return self.empty_namespace_prefix
-    def set_empty_namespace_prefix(self, empty_namespace_prefix): self.empty_namespace_prefix = empty_namespace_prefix
-    def get_behavior_filename(self): return self.behavior_filename
-    def set_behavior_filename(self, behavior_filename): self.behavior_filename = behavior_filename
-    def get_properties(self): return self.properties
-    def set_properties(self, properties): self.properties = properties
-    def get_subclass_suffix(self): return self.subclass_suffix
-    def set_subclass_suffix(self, subclass_suffix): self.subclass_suffix = subclass_suffix
-    def get_root_element(self): return self.root_element
-    def set_root_element(self, root_element): self.root_element = root_element
-    def get_superclass_module(self): return self.superclass_module
-    def set_superclass_module(self, superclass_module): self.superclass_module = superclass_module
-    def get_auto_super(self): return self.auto_super
-    def set_auto_super(self, auto_super): self.auto_super = auto_super
-    def get_old_getters_setters(self): return self.old_getters_setters
-    def set_old_getters_setters(self, old_getters_setters): self.old_getters_setters = old_getters_setters
-    def get_validator_bodies(self): return self.validator_bodies
-    def set_validator_bodies(self, validator_bodies): self.validator_bodies = validator_bodies
-    def get_user_methods(self): return self.user_methods
-    def set_user_methods(self, user_methods): self.user_methods = user_methods
-    def get_no_dates(self): return self.no_dates
-    def set_no_dates(self, no_dates): self.no_dates = no_dates
-    def get_no_versions(self): return self.no_versions
-    def set_no_versions(self, no_versions): self.no_versions = no_versions
-    def get_no_process_includes(self): return self.no_process_includes
-    def set_no_process_includes(self, no_process_includes): self.no_process_includes = no_process_includes
-    def get_silence(self): return self.silence
-    def set_silence(self, silence): self.silence = silence
-    def get_namespace_defs(self): return self.namespace_defs
-    def set_namespace_defs(self, namespace_defs): self.namespace_defs = namespace_defs
-    def get_external_encoding(self): return self.external_encoding
-    def set_external_encoding(self, external_encoding): self.external_encoding = external_encoding
-    def get_member_specs(self): return self.member_specs
-    def set_member_specs(self, member_specs): self.member_specs = member_specs
-    def export(self, outfile, level, namespace_='', name_='sessionType', namespacedef_=''):
-        showIndent(outfile, level)
-        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        self.exportAttributes(outfile, level, [], namespace_, name_='sessionType')
-        if self.hasContent_():
-            outfile.write('>\n')
-            self.exportChildren(outfile, level + 1, namespace_, name_)
-            showIndent(outfile, level)
-            outfile.write('</%s%s>\n' % (namespace_, name_))
-        else:
-            outfile.write('/>\n')
-    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='sessionType'):
-        pass
-    def exportChildren(self, outfile, level, namespace_='', name_='sessionType'):
-        if self.input_schema is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sinput_schema>%s</%sinput_schema>\n' % (namespace_, self.gds_format_string(quote_xml(self.input_schema).encode(ExternalEncoding), input_name='input_schema'), namespace_))
-        if self.output_superclass is not None:
-            showIndent(outfile, level)
-            outfile.write('<%soutput_superclass>%s</%soutput_superclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_superclass).encode(ExternalEncoding), input_name='output_superclass'), namespace_))
-        if self.output_subclass is not None:
-            showIndent(outfile, level)
-            outfile.write('<%soutput_subclass>%s</%soutput_subclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_subclass).encode(ExternalEncoding), input_name='output_subclass'), namespace_))
-        if self.force is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sforce>%s</%sforce>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.force)), input_name='force'), namespace_))
-        if self.prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sprefix>%s</%sprefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.prefix).encode(ExternalEncoding), input_name='prefix'), namespace_))
-        if self.namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%snamespace_prefix>%s</%snamespace_prefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_prefix).encode(ExternalEncoding), input_name='namespace_prefix'), namespace_))
-        if self.empty_namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sempty_namespace_prefix>%s</%sempty_namespace_prefix>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.empty_namespace_prefix)), input_name='empty_namespace_prefix'), namespace_))
-        if self.behavior_filename is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sbehavior_filename>%s</%sbehavior_filename>\n' % (namespace_, self.gds_format_string(quote_xml(self.behavior_filename).encode(ExternalEncoding), input_name='behavior_filename'), namespace_))
-        if self.properties is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sproperties>%s</%sproperties>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.properties)), input_name='properties'), namespace_))
-        if self.subclass_suffix is not None:
-            showIndent(outfile, level)
-            outfile.write('<%ssubclass_suffix>%s</%ssubclass_suffix>\n' % (namespace_, self.gds_format_string(quote_xml(self.subclass_suffix).encode(ExternalEncoding), input_name='subclass_suffix'), namespace_))
-        if self.root_element is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sroot_element>%s</%sroot_element>\n' % (namespace_, self.gds_format_string(quote_xml(self.root_element).encode(ExternalEncoding), input_name='root_element'), namespace_))
-        if self.superclass_module is not None:
-            showIndent(outfile, level)
-            outfile.write('<%ssuperclass_module>%s</%ssuperclass_module>\n' % (namespace_, self.gds_format_string(quote_xml(self.superclass_module).encode(ExternalEncoding), input_name='superclass_module'), namespace_))
-        if self.auto_super is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sauto_super>%s</%sauto_super>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.auto_super)), input_name='auto_super'), namespace_))
-        if self.old_getters_setters is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sold_getters_setters>%s</%sold_getters_setters>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.old_getters_setters)), input_name='old_getters_setters'), namespace_))
-        if self.validator_bodies is not None:
-            showIndent(outfile, level)
-            outfile.write('<%svalidator_bodies>%s</%svalidator_bodies>\n' % (namespace_, self.gds_format_string(quote_xml(self.validator_bodies).encode(ExternalEncoding), input_name='validator_bodies'), namespace_))
-        if self.user_methods is not None:
-            showIndent(outfile, level)
-            outfile.write('<%suser_methods>%s</%suser_methods>\n' % (namespace_, self.gds_format_string(quote_xml(self.user_methods).encode(ExternalEncoding), input_name='user_methods'), namespace_))
-        if self.no_dates is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sno_dates>%s</%sno_dates>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_dates)), input_name='no_dates'), namespace_))
-        if self.no_versions is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sno_versions>%s</%sno_versions>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_versions)), input_name='no_versions'), namespace_))
-        if self.no_process_includes is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sno_process_includes>%s</%sno_process_includes>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_process_includes)), input_name='no_process_includes'), namespace_))
-        if self.silence is not None:
-            showIndent(outfile, level)
-            outfile.write('<%ssilence>%s</%ssilence>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.silence)), input_name='silence'), namespace_))
-        if self.namespace_defs is not None:
-            showIndent(outfile, level)
-            outfile.write('<%snamespace_defs>%s</%snamespace_defs>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_defs).encode(ExternalEncoding), input_name='namespace_defs'), namespace_))
-        if self.external_encoding is not None:
-            showIndent(outfile, level)
-            outfile.write('<%sexternal_encoding>%s</%sexternal_encoding>\n' % (namespace_, self.gds_format_string(quote_xml(self.external_encoding).encode(ExternalEncoding), input_name='external_encoding'), namespace_))
-        if self.member_specs is not None:
-            showIndent(outfile, level)
-            outfile.write('<%smember_specs>%s</%smember_specs>\n' % (namespace_, self.gds_format_string(quote_xml(self.member_specs).encode(ExternalEncoding), input_name='member_specs'), namespace_))
-    def hasContent_(self):
-        if (
-            self.input_schema is not None or
-            self.output_superclass is not None or
-            self.output_subclass is not None or
-            self.force is not None or
-            self.prefix is not None or
-            self.namespace_prefix is not None or
-            self.empty_namespace_prefix is not None or
-            self.behavior_filename is not None or
-            self.properties is not None or
-            self.subclass_suffix is not None or
-            self.root_element is not None or
-            self.superclass_module is not None or
-            self.auto_super is not None or
-            self.old_getters_setters is not None or
-            self.validator_bodies is not None or
-            self.user_methods is not None or
-            self.no_dates is not None or
-            self.no_versions is not None or
-            self.no_process_includes is not None or
-            self.silence is not None or
-            self.namespace_defs is not None or
-            self.external_encoding is not None or
-            self.member_specs is not None
-            ):
-            return True
-        else:
-            return False
-    def exportLiteral(self, outfile, level, name_='sessionType'):
-        level += 1
-        self.exportLiteralAttributes(outfile, level, name_)
-        if self.hasContent_():
-            self.exportLiteralChildren(outfile, level, name_)
-    def exportLiteralAttributes(self, outfile, level, name_):
-        pass
-    def exportLiteralChildren(self, outfile, level, name_):
-        if self.input_schema is not None:
-            showIndent(outfile, level)
-            outfile.write('input_schema=%s,\n' % quote_python(self.input_schema).encode(ExternalEncoding))
-        if self.output_superclass is not None:
-            showIndent(outfile, level)
-            outfile.write('output_superclass=%s,\n' % quote_python(self.output_superclass).encode(ExternalEncoding))
-        if self.output_subclass is not None:
-            showIndent(outfile, level)
-            outfile.write('output_subclass=%s,\n' % quote_python(self.output_subclass).encode(ExternalEncoding))
-        if self.force is not None:
-            showIndent(outfile, level)
-            outfile.write('force=%s,\n' % self.force)
-        if self.prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('prefix=%s,\n' % quote_python(self.prefix).encode(ExternalEncoding))
-        if self.namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('namespace_prefix=%s,\n' % quote_python(self.namespace_prefix).encode(ExternalEncoding))
-        if self.empty_namespace_prefix is not None:
-            showIndent(outfile, level)
-            outfile.write('empty_namespace_prefix=%s,\n' % self.empty_namespace_prefix)
-        if self.behavior_filename is not None:
-            showIndent(outfile, level)
-            outfile.write('behavior_filename=%s,\n' % quote_python(self.behavior_filename).encode(ExternalEncoding))
-        if self.properties is not None:
-            showIndent(outfile, level)
-            outfile.write('properties=%s,\n' % self.properties)
-        if self.subclass_suffix is not None:
-            showIndent(outfile, level)
-            outfile.write('subclass_suffix=%s,\n' % quote_python(self.subclass_suffix).encode(ExternalEncoding))
-        if self.root_element is not None:
-            showIndent(outfile, level)
-            outfile.write('root_element=%s,\n' % quote_python(self.root_element).encode(ExternalEncoding))
-        if self.superclass_module is not None:
-            showIndent(outfile, level)
-            outfile.write('superclass_module=%s,\n' % quote_python(self.superclass_module).encode(ExternalEncoding))
-        if self.auto_super is not None:
-            showIndent(outfile, level)
-            outfile.write('auto_super=%s,\n' % self.auto_super)
-        if self.old_getters_setters is not None:
-            showIndent(outfile, level)
-            outfile.write('old_getters_setters=%s,\n' % self.old_getters_setters)
-        if self.validator_bodies is not None:
-            showIndent(outfile, level)
-            outfile.write('validator_bodies=%s,\n' % quote_python(self.validator_bodies).encode(ExternalEncoding))
-        if self.user_methods is not None:
-            showIndent(outfile, level)
-            outfile.write('user_methods=%s,\n' % quote_python(self.user_methods).encode(ExternalEncoding))
-        if self.no_dates is not None:
-            showIndent(outfile, level)
-            outfile.write('no_dates=%s,\n' % self.no_dates)
-        if self.no_versions is not None:
-            showIndent(outfile, level)
-            outfile.write('no_versions=%s,\n' % self.no_versions)
-        if self.no_process_includes is not None:
-            showIndent(outfile, level)
-            outfile.write('no_process_includes=%s,\n' % self.no_process_includes)
-        if self.silence is not None:
-            showIndent(outfile, level)
-            outfile.write('silence=%s,\n' % self.silence)
-        if self.namespace_defs is not None:
-            showIndent(outfile, level)
-            outfile.write('namespace_defs=%s,\n' % quote_python(self.namespace_defs).encode(ExternalEncoding))
-        if self.external_encoding is not None:
-            showIndent(outfile, level)
-            outfile.write('external_encoding=%s,\n' % quote_python(self.external_encoding).encode(ExternalEncoding))
-        if self.member_specs is not None:
-            showIndent(outfile, level)
-            outfile.write('member_specs=%s,\n' % quote_python(self.member_specs).encode(ExternalEncoding))
-    def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
-        for child in node:
-            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
-            self.buildChildren(child, nodeName_)
-    def buildAttributes(self, node, attrs, already_processed):
-        pass
-    def buildChildren(self, child_, nodeName_, from_subclass=False):
-        if nodeName_ == 'input_schema':
-            input_schema_ = child_.text
-            self.input_schema = input_schema_
-        elif nodeName_ == 'output_superclass':
-            output_superclass_ = child_.text
-            self.output_superclass = output_superclass_
-        elif nodeName_ == 'output_subclass':
-            output_subclass_ = child_.text
-            self.output_subclass = output_subclass_
-        elif nodeName_ == 'force':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.force = ival_
-        elif nodeName_ == 'prefix':
-            prefix_ = child_.text
-            self.prefix = prefix_
-        elif nodeName_ == 'namespace_prefix':
-            namespace_prefix_ = child_.text
-            self.namespace_prefix = namespace_prefix_
-        elif nodeName_ == 'empty_namespace_prefix':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.empty_namespace_prefix = ival_
-        elif nodeName_ == 'behavior_filename':
-            behavior_filename_ = child_.text
-            self.behavior_filename = behavior_filename_
-        elif nodeName_ == 'properties':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.properties = ival_
-        elif nodeName_ == 'subclass_suffix':
-            subclass_suffix_ = child_.text
-            self.subclass_suffix = subclass_suffix_
-        elif nodeName_ == 'root_element':
-            root_element_ = child_.text
-            self.root_element = root_element_
-        elif nodeName_ == 'superclass_module':
-            superclass_module_ = child_.text
-            self.superclass_module = superclass_module_
-        elif nodeName_ == 'auto_super':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.auto_super = ival_
-        elif nodeName_ == 'old_getters_setters':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.old_getters_setters = ival_
-        elif nodeName_ == 'validator_bodies':
-            validator_bodies_ = child_.text
-            self.validator_bodies = validator_bodies_
-        elif nodeName_ == 'user_methods':
-            user_methods_ = child_.text
-            self.user_methods = user_methods_
-        elif nodeName_ == 'no_dates':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.no_dates = ival_
-        elif nodeName_ == 'no_versions':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.no_versions = ival_
-        elif nodeName_ == 'no_process_includes':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.no_process_includes = ival_
-        elif nodeName_ == 'silence':
-            sval_ = child_.text
-            if sval_ in ('true', '1'):
-                ival_ = True
-            elif sval_ in ('false', '0'):
-                ival_ = False
-            else:
-                raise_parse_error(child_, 'requires boolean')
-            self.silence = ival_
-        elif nodeName_ == 'namespace_defs':
-            namespace_defs_ = child_.text
-            self.namespace_defs = namespace_defs_
-        elif nodeName_ == 'external_encoding':
-            external_encoding_ = child_.text
-            self.external_encoding = external_encoding_
-        elif nodeName_ == 'member_specs':
-            member_specs_ = child_.text
-            self.member_specs = member_specs_
-# end class sessionType
-
-
-USAGE_TEXT = """
-Usage: python <Parser>.py [ -s ] <in_xml_file>
-"""
-
-def usage():
-    print USAGE_TEXT
-    sys.exit(1)
-
-
-def get_root_tag(node):
-    tag = Tag_pattern_.match(node.tag).groups()[-1]
-    rootClass = globals().get(tag)
-    return tag, rootClass
-
-
-def parse(inFileName):
-    doc = parsexml_(inFileName)
-    rootNode = doc.getroot()
-    rootTag, rootClass = get_root_tag(rootNode)
-    if rootClass is None:
-        rootTag = 'session'
-        rootClass = sessionType
-    rootObj = rootClass.factory()
-    rootObj.build(rootNode)
-    # Enable Python to collect the space used by the DOM.
-    doc = None
-    sys.stdout.write('<?xml version="1.0" ?>\n')
-    rootObj.export(sys.stdout, 0, name_=rootTag, 
-        namespacedef_='')
-    return rootObj
-
-
-def parseString(inString):
-    from StringIO import StringIO
-    doc = parsexml_(StringIO(inString))
-    rootNode = doc.getroot()
-    rootTag, rootClass = get_root_tag(rootNode)
-    if rootClass is None:
-        rootTag = 'session'
-        rootClass = sessionType
-    rootObj = rootClass.factory()
-    rootObj.build(rootNode)
-    # Enable Python to collect the space used by the DOM.
-    doc = None
-    sys.stdout.write('<?xml version="1.0" ?>\n')
-    rootObj.export(sys.stdout, 0, name_="session",
-        namespacedef_='')
-    return rootObj
-
-
-def parseLiteral(inFileName):
-    doc = parsexml_(inFileName)
-    rootNode = doc.getroot()
-    rootTag, rootClass = get_root_tag(rootNode)
-    if rootClass is None:
-        rootTag = 'session'
-        rootClass = sessionType
-    rootObj = rootClass.factory()
-    rootObj.build(rootNode)
-    # Enable Python to collect the space used by the DOM.
-    doc = None
-    sys.stdout.write('#from generateds_gui_session import *\n\n')
-    sys.stdout.write('import generateds_gui_session as model_\n\n')
-    sys.stdout.write('rootObj = model_.rootTag(\n')
-    rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
-    sys.stdout.write(')\n')
-    return rootObj
-
-
-def main():
-    args = sys.argv[1:]
-    if len(args) == 1:
-        parse(args[0])
-    else:
-        usage()
-
-
-if __name__ == '__main__':
-    #import pdb; pdb.set_trace()
-    main()
-
-
-__all__ = [
-    "sessionType"
-    ]
+#!/usr/bin/env python
+# -*- coding: utf-8 -*- 
+
+#
+# Generated Wed Dec  8 14:24:46 2010 by generateDS.py version 2.3a.
+#
+
+import sys
+import getopt
+import re as re_
+
+etree_ = None
+Verbose_import_ = False
+(   XMLParser_import_none, XMLParser_import_lxml,
+    XMLParser_import_elementtree
+    ) = list(range(3))
+XMLParser_import_library = None
+try:
+    # lxml
+    from lxml import etree as etree_
+    XMLParser_import_library = XMLParser_import_lxml
+    if Verbose_import_:
+        print("running with lxml.etree")
+except ImportError:
+    try:
+        # cElementTree from Python 2.5+
+        import xml.etree.cElementTree as etree_
+        XMLParser_import_library = XMLParser_import_elementtree
+        if Verbose_import_:
+            print("running with cElementTree on Python 2.5+")
+    except ImportError:
+        try:
+            # ElementTree from Python 2.5+
+            import xml.etree.ElementTree as etree_
+            XMLParser_import_library = XMLParser_import_elementtree
+            if Verbose_import_:
+                print("running with ElementTree on Python 2.5+")
+        except ImportError:
+            try:
+                # normal cElementTree install
+                import cElementTree as etree_
+                XMLParser_import_library = XMLParser_import_elementtree
+                if Verbose_import_:
+                    print("running with cElementTree")
+            except ImportError:
+                try:
+                    # normal ElementTree install
+                    import elementtree.ElementTree as etree_
+                    XMLParser_import_library = XMLParser_import_elementtree
+                    if Verbose_import_:
+                        print("running with ElementTree")
+                except ImportError:
+                    raise ImportError("Failed to import ElementTree from any known place")
+
+def parsexml_(*args, **kwargs):
+    if (XMLParser_import_library == XMLParser_import_lxml and
+        'parser' not in kwargs):
+        # Use the lxml ElementTree compatible parser so that, e.g.,
+        #   we ignore comments.
+        kwargs['parser'] = etree_.ETCompatXMLParser()
+    doc = etree_.parse(*args, **kwargs)
+    return doc
+
+#
+# User methods
+#
+# 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.
+
+try:
+    from generatedssuper import GeneratedsSuper
+except ImportError as exp:
+
+    class GeneratedsSuper(object):
+        def gds_format_string(self, input_data, input_name=''):
+            return input_data.decode('utf-8') if isinstance(input_data, bytes) else input_data
+        def gds_format_integer(self, input_data, input_name=''):
+            return '%d' % input_data
+        def gds_format_float(self, input_data, input_name=''):
+            return '%f' % input_data
+        def gds_format_double(self, input_data, input_name=''):
+            return '%e' % input_data
+        def gds_format_boolean(self, input_data, input_name=''):
+            return '%s' % input_data
+        def gds_str_lower(self, instring):
+            return instring.lower()
+                    
+                    
+
+#
+# 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]+")
+
+#
+# Support/utility functions.
+#
+
+def showIndent(outfile, level):
+    for idx in range(level):
+        outfile.write('    ')
+
+def quote_xml(inStr):
+    if not inStr:
+        return ''
+    s1 = (isinstance(inStr, str) and inStr or
+          '%s' % inStr)
+    s1 = s1.replace('&', '&amp;')
+    s1 = s1.replace('<', '&lt;')
+    s1 = s1.replace('>', '&gt;')
+    return s1
+
+def quote_attrib(inStr):
+    s1 = (isinstance(inStr, str) 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
+
+
+class GDSParseError(Exception):
+    pass
+
+def raise_parse_error(node, msg):
+    if XMLParser_import_library == XMLParser_import_lxml:
+        msg = '%s (element %s/line %d)' % (msg, node.tag, node.sourceline, )
+    else:
+        msg = '%s (element %s)' % (msg, node.tag, )
+    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
+    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):
+        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)
+    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))
+    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):
+        self.name = name
+        self.data_type = data_type
+        self.container = container
+    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 _cast(typ, value):
+    if typ is None or value is None:
+        return value
+    return typ(value)
+
+#
+# Mixin class for additional behaviors.
+#
+
+class SessionTypeMixin(object):
+    def copy(self):
+        """Produce a copy of myself.
+        """
+        new_session = sessionType(
+            input_schema = self.input_schema,
+            output_superclass = self.output_superclass,
+            output_subclass = self.output_subclass,
+            force = self.force,
+            prefix = self.prefix,
+            namespace_prefix = self.namespace_prefix,
+            empty_namespace_prefix = self.empty_namespace_prefix,
+            behavior_filename = self.behavior_filename,
+            properties = self.properties,
+            subclass_suffix = self.subclass_suffix,
+            root_element = self.root_element,
+            superclass_module = self.superclass_module,
+            auto_super = self.auto_super,
+            old_getters_setters = self.old_getters_setters,
+            validator_bodies = self.validator_bodies,
+            user_methods = self.user_methods,
+            no_dates = self.no_dates,
+            no_versions = self.no_versions,
+            no_process_includes = self.no_process_includes,
+            silence = self.silence,
+            namespace_defs = self.namespace_defs,
+            external_encoding = self.external_encoding,
+            member_specs = self.member_specs,
+            )
+        return new_session
+
+    def __eq__(self, obj):
+        """Implement the == operator.
+        """
+        if (
+            obj.input_schema == self.input_schema and
+            obj.output_superclass == self.output_superclass and
+            obj.output_subclass == self.output_subclass and
+            obj.force == self.force and
+            obj.prefix == self.prefix and
+            obj.namespace_prefix == self.namespace_prefix and
+            obj.empty_namespace_prefix == self.empty_namespace_prefix and
+            obj.behavior_filename == self.behavior_filename and
+            obj.properties == self.properties and
+            obj.subclass_suffix == self.subclass_suffix and
+            obj.root_element == self.root_element and
+            obj.superclass_module == self.superclass_module and
+            obj.auto_super == self.auto_super and
+            obj.old_getters_setters == self.old_getters_setters and
+            obj.validator_bodies == self.validator_bodies and
+            obj.user_methods == self.user_methods and
+            obj.no_dates == self.no_dates and
+            obj.no_versions == self.no_versions and
+            obj.no_process_includes == self.no_process_includes and
+            obj.silence == self.silence and
+            obj.namespace_defs == self.namespace_defs and
+            obj.external_encoding == self.external_encoding and
+            obj.member_specs == self.member_specs):
+            return True
+        else:
+            return False
+
+    def __ne__(self, obj):
+        """Implement the != operator.
+        """
+        return not self.__eq__(obj)
+
+#
+# Data representation classes.
+#
+
+class sessionType(GeneratedsSuper, SessionTypeMixin):
+    member_data_items_ = [
+        MemberSpec_('input_schema', 'xs:string', 0),
+        MemberSpec_('output_superclass', 'xs:string', 0),
+        MemberSpec_('output_subclass', 'xs:string', 0),
+        MemberSpec_('force', 'xs:boolean', 0),
+        MemberSpec_('prefix', 'xs:string', 0),
+        MemberSpec_('namespace_prefix', 'xs:string', 0),
+        MemberSpec_('empty_namespace_prefix', 'xs:boolean', 0),
+        MemberSpec_('behavior_filename', 'xs:string', 0),
+        MemberSpec_('properties', 'xs:boolean', 0),
+        MemberSpec_('subclass_suffix', 'xs:string', 0),
+        MemberSpec_('root_element', 'xs:string', 0),
+        MemberSpec_('superclass_module', 'xs:string', 0),
+        MemberSpec_('auto_super', 'xs:boolean', 0),
+        MemberSpec_('old_getters_setters', 'xs:boolean', 0),
+        MemberSpec_('validator_bodies', 'xs:string', 0),
+        MemberSpec_('user_methods', 'xs:string', 0),
+        MemberSpec_('no_dates', 'xs:boolean', 0),
+        MemberSpec_('no_versions', 'xs:boolean', 0),
+        MemberSpec_('no_process_includes', 'xs:boolean', 0),
+        MemberSpec_('silence', 'xs:boolean', 0),
+        MemberSpec_('namespace_defs', 'xs:string', 0),
+        MemberSpec_('external_encoding', 'xs:string', 0),
+        MemberSpec_('member_specs', 'xs:string', 0),
+        ]
+    subclass = None
+    superclass = None
+    def __init__(self, input_schema=None, output_superclass=None, output_subclass=None, force=None, prefix=None, namespace_prefix=None, empty_namespace_prefix=None, behavior_filename=None, properties=None, subclass_suffix=None, root_element=None, superclass_module=None, auto_super=None, old_getters_setters=None, validator_bodies=None, user_methods=None, no_dates=None, no_versions=None, no_process_includes=None, silence=None, namespace_defs=None, external_encoding=None, member_specs=None):
+        self.input_schema = input_schema
+        self.output_superclass = output_superclass
+        self.output_subclass = output_subclass
+        self.force = force
+        self.prefix = prefix
+        self.namespace_prefix = namespace_prefix
+        self.empty_namespace_prefix = empty_namespace_prefix
+        self.behavior_filename = behavior_filename
+        self.properties = properties
+        self.subclass_suffix = subclass_suffix
+        self.root_element = root_element
+        self.superclass_module = superclass_module
+        self.auto_super = auto_super
+        self.old_getters_setters = old_getters_setters
+        self.validator_bodies = validator_bodies
+        self.user_methods = user_methods
+        self.no_dates = no_dates
+        self.no_versions = no_versions
+        self.no_process_includes = no_process_includes
+        self.silence = silence
+        self.namespace_defs = namespace_defs
+        self.external_encoding = external_encoding
+        self.member_specs = member_specs
+    def factory(*args_, **kwargs_):
+        if sessionType.subclass:
+            return sessionType.subclass(*args_, **kwargs_)
+        else:
+            return sessionType(*args_, **kwargs_)
+    factory = staticmethod(factory)
+    def get_input_schema(self): return self.input_schema
+    def set_input_schema(self, input_schema): self.input_schema = input_schema
+    def get_output_superclass(self): return self.output_superclass
+    def set_output_superclass(self, output_superclass): self.output_superclass = output_superclass
+    def get_output_subclass(self): return self.output_subclass
+    def set_output_subclass(self, output_subclass): self.output_subclass = output_subclass
+    def get_force(self): return self.force
+    def set_force(self, force): self.force = force
+    def get_prefix(self): return self.prefix
+    def set_prefix(self, prefix): self.prefix = prefix
+    def get_namespace_prefix(self): return self.namespace_prefix
+    def set_namespace_prefix(self, namespace_prefix): self.namespace_prefix = namespace_prefix
+    def get_empty_namespace_prefix(self): return self.empty_namespace_prefix
+    def set_empty_namespace_prefix(self, empty_namespace_prefix): self.empty_namespace_prefix = empty_namespace_prefix
+    def get_behavior_filename(self): return self.behavior_filename
+    def set_behavior_filename(self, behavior_filename): self.behavior_filename = behavior_filename
+    def get_properties(self): return self.properties
+    def set_properties(self, properties): self.properties = properties
+    def get_subclass_suffix(self): return self.subclass_suffix
+    def set_subclass_suffix(self, subclass_suffix): self.subclass_suffix = subclass_suffix
+    def get_root_element(self): return self.root_element
+    def set_root_element(self, root_element): self.root_element = root_element
+    def get_superclass_module(self): return self.superclass_module
+    def set_superclass_module(self, superclass_module): self.superclass_module = superclass_module
+    def get_auto_super(self): return self.auto_super
+    def set_auto_super(self, auto_super): self.auto_super = auto_super
+    def get_old_getters_setters(self): return self.old_getters_setters
+    def set_old_getters_setters(self, old_getters_setters): self.old_getters_setters = old_getters_setters
+    def get_validator_bodies(self): return self.validator_bodies
+    def set_validator_bodies(self, validator_bodies): self.validator_bodies = validator_bodies
+    def get_user_methods(self): return self.user_methods
+    def set_user_methods(self, user_methods): self.user_methods = user_methods
+    def get_no_dates(self): return self.no_dates
+    def set_no_dates(self, no_dates): self.no_dates = no_dates
+    def get_no_versions(self): return self.no_versions
+    def set_no_versions(self, no_versions): self.no_versions = no_versions
+    def get_no_process_includes(self): return self.no_process_includes
+    def set_no_process_includes(self, no_process_includes): self.no_process_includes = no_process_includes
+    def get_silence(self): return self.silence
+    def set_silence(self, silence): self.silence = silence
+    def get_namespace_defs(self): return self.namespace_defs
+    def set_namespace_defs(self, namespace_defs): self.namespace_defs = namespace_defs
+    def get_external_encoding(self): return self.external_encoding
+    def set_external_encoding(self, external_encoding): self.external_encoding = external_encoding
+    def get_member_specs(self): return self.member_specs
+    def set_member_specs(self, member_specs): self.member_specs = member_specs
+    def export(self, outfile, level, namespace_='', name_='sessionType', namespacedef_=''):
+        showIndent(outfile, level)
+        outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
+        self.exportAttributes(outfile, level, [], namespace_, name_='sessionType')
+        if self.hasContent_():
+            outfile.write('>\n')
+            self.exportChildren(outfile, level + 1, namespace_, name_)
+            showIndent(outfile, level)
+            outfile.write('</%s%s>\n' % (namespace_, name_))
+        else:
+            outfile.write('/>\n')
+    def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='sessionType'):
+        pass
+    def exportChildren(self, outfile, level, namespace_='', name_='sessionType'):
+        if self.input_schema is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sinput_schema>%s</%sinput_schema>\n' % (namespace_, self.gds_format_string(quote_xml(self.input_schema).encode(ExternalEncoding), input_name='input_schema'), namespace_))
+        if self.output_superclass is not None:
+            showIndent(outfile, level)
+            outfile.write('<%soutput_superclass>%s</%soutput_superclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_superclass).encode(ExternalEncoding), input_name='output_superclass'), namespace_))
+        if self.output_subclass is not None:
+            showIndent(outfile, level)
+            outfile.write('<%soutput_subclass>%s</%soutput_subclass>\n' % (namespace_, self.gds_format_string(quote_xml(self.output_subclass).encode(ExternalEncoding), input_name='output_subclass'), namespace_))
+        if self.force is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sforce>%s</%sforce>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.force)), input_name='force'), namespace_))
+        if self.prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sprefix>%s</%sprefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.prefix).encode(ExternalEncoding), input_name='prefix'), namespace_))
+        if self.namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%snamespace_prefix>%s</%snamespace_prefix>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_prefix).encode(ExternalEncoding), input_name='namespace_prefix'), namespace_))
+        if self.empty_namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sempty_namespace_prefix>%s</%sempty_namespace_prefix>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.empty_namespace_prefix)), input_name='empty_namespace_prefix'), namespace_))
+        if self.behavior_filename is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sbehavior_filename>%s</%sbehavior_filename>\n' % (namespace_, self.gds_format_string(quote_xml(self.behavior_filename).encode(ExternalEncoding), input_name='behavior_filename'), namespace_))
+        if self.properties is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sproperties>%s</%sproperties>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.properties)), input_name='properties'), namespace_))
+        if self.subclass_suffix is not None:
+            showIndent(outfile, level)
+            outfile.write('<%ssubclass_suffix>%s</%ssubclass_suffix>\n' % (namespace_, self.gds_format_string(quote_xml(self.subclass_suffix).encode(ExternalEncoding), input_name='subclass_suffix'), namespace_))
+        if self.root_element is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sroot_element>%s</%sroot_element>\n' % (namespace_, self.gds_format_string(quote_xml(self.root_element).encode(ExternalEncoding), input_name='root_element'), namespace_))
+        if self.superclass_module is not None:
+            showIndent(outfile, level)
+            outfile.write('<%ssuperclass_module>%s</%ssuperclass_module>\n' % (namespace_, self.gds_format_string(quote_xml(self.superclass_module).encode(ExternalEncoding), input_name='superclass_module'), namespace_))
+        if self.auto_super is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sauto_super>%s</%sauto_super>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.auto_super)), input_name='auto_super'), namespace_))
+        if self.old_getters_setters is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sold_getters_setters>%s</%sold_getters_setters>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.old_getters_setters)), input_name='old_getters_setters'), namespace_))
+        if self.validator_bodies is not None:
+            showIndent(outfile, level)
+            outfile.write('<%svalidator_bodies>%s</%svalidator_bodies>\n' % (namespace_, self.gds_format_string(quote_xml(self.validator_bodies).encode(ExternalEncoding), input_name='validator_bodies'), namespace_))
+        if self.user_methods is not None:
+            showIndent(outfile, level)
+            outfile.write('<%suser_methods>%s</%suser_methods>\n' % (namespace_, self.gds_format_string(quote_xml(self.user_methods).encode(ExternalEncoding), input_name='user_methods'), namespace_))
+        if self.no_dates is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sno_dates>%s</%sno_dates>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_dates)), input_name='no_dates'), namespace_))
+        if self.no_versions is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sno_versions>%s</%sno_versions>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_versions)), input_name='no_versions'), namespace_))
+        if self.no_process_includes is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sno_process_includes>%s</%sno_process_includes>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.no_process_includes)), input_name='no_process_includes'), namespace_))
+        if self.silence is not None:
+            showIndent(outfile, level)
+            outfile.write('<%ssilence>%s</%ssilence>\n' % (namespace_, self.gds_format_boolean(self.gds_str_lower(str(self.silence)), input_name='silence'), namespace_))
+        if self.namespace_defs is not None:
+            showIndent(outfile, level)
+            outfile.write('<%snamespace_defs>%s</%snamespace_defs>\n' % (namespace_, self.gds_format_string(quote_xml(self.namespace_defs).encode(ExternalEncoding), input_name='namespace_defs'), namespace_))
+        if self.external_encoding is not None:
+            showIndent(outfile, level)
+            outfile.write('<%sexternal_encoding>%s</%sexternal_encoding>\n' % (namespace_, self.gds_format_string(quote_xml(self.external_encoding).encode(ExternalEncoding), input_name='external_encoding'), namespace_))
+        if self.member_specs is not None:
+            showIndent(outfile, level)
+            outfile.write('<%smember_specs>%s</%smember_specs>\n' % (namespace_, self.gds_format_string(quote_xml(self.member_specs).encode(ExternalEncoding), input_name='member_specs'), namespace_))
+    def hasContent_(self):
+        if (
+            self.input_schema is not None or
+            self.output_superclass is not None or
+            self.output_subclass is not None or
+            self.force is not None or
+            self.prefix is not None or
+            self.namespace_prefix is not None or
+            self.empty_namespace_prefix is not None or
+            self.behavior_filename is not None or
+            self.properties is not None or
+            self.subclass_suffix is not None or
+            self.root_element is not None or
+            self.superclass_module is not None or
+            self.auto_super is not None or
+            self.old_getters_setters is not None or
+            self.validator_bodies is not None or
+            self.user_methods is not None or
+            self.no_dates is not None or
+            self.no_versions is not None or
+            self.no_process_includes is not None or
+            self.silence is not None or
+            self.namespace_defs is not None or
+            self.external_encoding is not None or
+            self.member_specs is not None
+            ):
+            return True
+        else:
+            return False
+    def exportLiteral(self, outfile, level, name_='sessionType'):
+        level += 1
+        self.exportLiteralAttributes(outfile, level, name_)
+        if self.hasContent_():
+            self.exportLiteralChildren(outfile, level, name_)
+    def exportLiteralAttributes(self, outfile, level, name_):
+        pass
+    def exportLiteralChildren(self, outfile, level, name_):
+        if self.input_schema is not None:
+            showIndent(outfile, level)
+            outfile.write('input_schema=%s,\n' % quote_python(self.input_schema).encode(ExternalEncoding))
+        if self.output_superclass is not None:
+            showIndent(outfile, level)
+            outfile.write('output_superclass=%s,\n' % quote_python(self.output_superclass).encode(ExternalEncoding))
+        if self.output_subclass is not None:
+            showIndent(outfile, level)
+            outfile.write('output_subclass=%s,\n' % quote_python(self.output_subclass).encode(ExternalEncoding))
+        if self.force is not None:
+            showIndent(outfile, level)
+            outfile.write('force=%s,\n' % self.force)
+        if self.prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('prefix=%s,\n' % quote_python(self.prefix).encode(ExternalEncoding))
+        if self.namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('namespace_prefix=%s,\n' % quote_python(self.namespace_prefix).encode(ExternalEncoding))
+        if self.empty_namespace_prefix is not None:
+            showIndent(outfile, level)
+            outfile.write('empty_namespace_prefix=%s,\n' % self.empty_namespace_prefix)
+        if self.behavior_filename is not None:
+            showIndent(outfile, level)
+            outfile.write('behavior_filename=%s,\n' % quote_python(self.behavior_filename).encode(ExternalEncoding))
+        if self.properties is not None:
+            showIndent(outfile, level)
+            outfile.write('properties=%s,\n' % self.properties)
+        if self.subclass_suffix is not None:
+            showIndent(outfile, level)
+            outfile.write('subclass_suffix=%s,\n' % quote_python(self.subclass_suffix).encode(ExternalEncoding))
+        if self.root_element is not None:
+            showIndent(outfile, level)
+            outfile.write('root_element=%s,\n' % quote_python(self.root_element).encode(ExternalEncoding))
+        if self.superclass_module is not None:
+            showIndent(outfile, level)
+            outfile.write('superclass_module=%s,\n' % quote_python(self.superclass_module).encode(ExternalEncoding))
+        if self.auto_super is not None:
+            showIndent(outfile, level)
+            outfile.write('auto_super=%s,\n' % self.auto_super)
+        if self.old_getters_setters is not None:
+            showIndent(outfile, level)
+            outfile.write('old_getters_setters=%s,\n' % self.old_getters_setters)
+        if self.validator_bodies is not None:
+            showIndent(outfile, level)
+            outfile.write('validator_bodies=%s,\n' % quote_python(self.validator_bodies).encode(ExternalEncoding))
+        if self.user_methods is not None:
+            showIndent(outfile, level)
+            outfile.write('user_methods=%s,\n' % quote_python(self.user_methods).encode(ExternalEncoding))
+        if self.no_dates is not None:
+            showIndent(outfile, level)
+            outfile.write('no_dates=%s,\n' % self.no_dates)
+        if self.no_versions is not None:
+            showIndent(outfile, level)
+            outfile.write('no_versions=%s,\n' % self.no_versions)
+        if self.no_process_includes is not None:
+            showIndent(outfile, level)
+            outfile.write('no_process_includes=%s,\n' % self.no_process_includes)
+        if self.silence is not None:
+            showIndent(outfile, level)
+            outfile.write('silence=%s,\n' % self.silence)
+        if self.namespace_defs is not None:
+            showIndent(outfile, level)
+            outfile.write('namespace_defs=%s,\n' % quote_python(self.namespace_defs).encode(ExternalEncoding))
+        if self.external_encoding is not None:
+            showIndent(outfile, level)
+            outfile.write('external_encoding=%s,\n' % quote_python(self.external_encoding).encode(ExternalEncoding))
+        if self.member_specs is not None:
+            showIndent(outfile, level)
+            outfile.write('member_specs=%s,\n' % quote_python(self.member_specs).encode(ExternalEncoding))
+    def build(self, node):
+        self.buildAttributes(node, node.attrib, [])
+        for child in node:
+            nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
+            self.buildChildren(child, nodeName_)
+    def buildAttributes(self, node, attrs, already_processed):
+        pass
+    def buildChildren(self, child_, nodeName_, from_subclass=False):
+        if nodeName_ == 'input_schema':
+            input_schema_ = child_.text
+            self.input_schema = input_schema_
+        elif nodeName_ == 'output_superclass':
+            output_superclass_ = child_.text
+            self.output_superclass = output_superclass_
+        elif nodeName_ == 'output_subclass':
+            output_subclass_ = child_.text
+            self.output_subclass = output_subclass_
+        elif nodeName_ == 'force':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.force = ival_
+        elif nodeName_ == 'prefix':
+            prefix_ = child_.text
+            self.prefix = prefix_
+        elif nodeName_ == 'namespace_prefix':
+            namespace_prefix_ = child_.text
+            self.namespace_prefix = namespace_prefix_
+        elif nodeName_ == 'empty_namespace_prefix':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.empty_namespace_prefix = ival_
+        elif nodeName_ == 'behavior_filename':
+            behavior_filename_ = child_.text
+            self.behavior_filename = behavior_filename_
+        elif nodeName_ == 'properties':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.properties = ival_
+        elif nodeName_ == 'subclass_suffix':
+            subclass_suffix_ = child_.text
+            self.subclass_suffix = subclass_suffix_
+        elif nodeName_ == 'root_element':
+            root_element_ = child_.text
+            self.root_element = root_element_
+        elif nodeName_ == 'superclass_module':
+            superclass_module_ = child_.text
+            self.superclass_module = superclass_module_
+        elif nodeName_ == 'auto_super':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.auto_super = ival_
+        elif nodeName_ == 'old_getters_setters':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.old_getters_setters = ival_
+        elif nodeName_ == 'validator_bodies':
+            validator_bodies_ = child_.text
+            self.validator_bodies = validator_bodies_
+        elif nodeName_ == 'user_methods':
+            user_methods_ = child_.text
+            self.user_methods = user_methods_
+        elif nodeName_ == 'no_dates':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.no_dates = ival_
+        elif nodeName_ == 'no_versions':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.no_versions = ival_
+        elif nodeName_ == 'no_process_includes':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.no_process_includes = ival_
+        elif nodeName_ == 'silence':
+            sval_ = child_.text
+            if sval_ in ('true', '1'):
+                ival_ = True
+            elif sval_ in ('false', '0'):
+                ival_ = False
+            else:
+                raise_parse_error(child_, 'requires boolean')
+            self.silence = ival_
+        elif nodeName_ == 'namespace_defs':
+            namespace_defs_ = child_.text
+            self.namespace_defs = namespace_defs_
+        elif nodeName_ == 'external_encoding':
+            external_encoding_ = child_.text
+            self.external_encoding = external_encoding_
+        elif nodeName_ == 'member_specs':
+            member_specs_ = child_.text
+            self.member_specs = member_specs_
+# end class sessionType
+
+
+USAGE_TEXT = """
+Usage: python <Parser>.py [ -s ] <in_xml_file>
+"""
+
+def usage():
+    print(USAGE_TEXT)
+    sys.exit(1)
+
+
+def get_root_tag(node):
+    tag = Tag_pattern_.match(node.tag).groups()[-1]
+    rootClass = globals().get(tag)
+    return tag, rootClass
+
+
+def parse(inFileName):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'session'
+        rootClass = sessionType
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    sys.stdout.write('<?xml version="1.0" ?>\n')
+    rootObj.export(sys.stdout, 0, name_=rootTag, 
+        namespacedef_='')
+    return rootObj
+
+
+def parseString(inString):
+    from io import StringIO
+    doc = parsexml_(StringIO(inString))
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'session'
+        rootClass = sessionType
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    sys.stdout.write('<?xml version="1.0" ?>\n')
+    rootObj.export(sys.stdout, 0, name_="session",
+        namespacedef_='')
+    return rootObj
+
+
+def parseLiteral(inFileName):
+    doc = parsexml_(inFileName)
+    rootNode = doc.getroot()
+    rootTag, rootClass = get_root_tag(rootNode)
+    if rootClass is None:
+        rootTag = 'session'
+        rootClass = sessionType
+    rootObj = rootClass.factory()
+    rootObj.build(rootNode)
+    # Enable Python to collect the space used by the DOM.
+    doc = None
+    sys.stdout.write('#from generateds_gui_session import *\n\n')
+    sys.stdout.write('import generateds_gui_session as model_\n\n')
+    sys.stdout.write('rootObj = model_.rootTag(\n')
+    rootObj.exportLiteral(sys.stdout, 0, name_=rootTag)
+    sys.stdout.write(')\n')
+    return rootObj
+
+
+def main():
+    args = sys.argv[1:]
+    if len(args) == 1:
+        parse(args[0])
+    else:
+        usage()
+
+
+if __name__ == '__main__':
+    #import pdb; pdb.set_trace()
+    main()
+
+
+__all__ = [
+    "sessionType"
+    ]