From bfae4fbefe32e66a45f8a69a21ad784254e73edc Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Mon, 11 Apr 2016 14:49:09 -0700
Subject: [PATCH] Added missing command line options to generateds_gui.py

---
 MANIFEST.in                       |   2 +
 README                            |   9 +
 generateDS.html                   |   6 +-
 generateDS.py                     |   2 +-
 generateDS.txt                    |   2 +-
 generateds_gui_notes.html         | 343 ++++++++++++++++++++++++++++++
 generateds_gui_notes.txt          | 126 +++++++++++
 gui/generateds_gui.py             |   6 +-
 librarytemplate_howto.html        |   6 +-
 librarytemplate_howto.txt         |   2 +-
 process_includes.py               |   2 +-
 setup.py                          |   2 +-
 tutorial/generateds_tutorial.html |   6 +-
 tutorial/generateds_tutorial.txt  |   2 +-
 tutorial/generateds_tutorial.zip  | Bin 48763 -> 48764 bytes
 updateversion.py                  |  14 +-
 16 files changed, 503 insertions(+), 27 deletions(-)
 create mode 100644 generateds_gui_notes.html
 create mode 100644 generateds_gui_notes.txt

diff --git a/MANIFEST.in b/MANIFEST.in
index 27da3a9..dfc4c64 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -11,6 +11,8 @@ include process_includes.py
 include generate_coverage.py
 include generateDS.html
 include gends_user_methods.py
+include generateds_gui_notes.txt
+include generateds_gui_notes.html
 include Demos/People/people.xsd
 include Demos/People/people.xml
 include Demos/People/run_test
diff --git a/README b/README
index 8328f81..840abf2 100644
--- a/README
+++ b/README
@@ -141,6 +141,15 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.22a (04/11/2016)
+
+- Added support for additional command line options to
+  generateds_gui.py.  Added analogous support to generateDS.py for
+  use of session files produced by generateds_gui.py.
+- There is now a bit of documentation with a few usage notes on
+  generateds_gui.py.  See generateds_gui_notes.txt and
+  generateds_gui_notes.html.
+
 Version 2.21a (04/01/2016)
 
 - The GUI (graphical) front end to generateDS.py has been
diff --git a/generateDS.html b/generateDS.html
index 903478e..00c93c2 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.21a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22a</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">April 01, 2016</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">April 11, 2016</td>
 </tr>
 </tbody>
 </table>
@@ -3171,7 +3171,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2016-04-01 18:00 UTC.
+Generated on: 2016-04-11 21:46 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateDS.py b/generateDS.py
index e63e492..89166d0 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -202,7 +202,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.21a'
+VERSION = '2.22a'
 ##VERSION##
 
 if sys.version_info.major == 2:
diff --git a/generateDS.txt b/generateDS.txt
index 8add02e..8f1bf29 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.21a
+:revision: 2.22a
 
 .. version
 
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
new file mode 100644
index 0000000..bc5e0c2
--- /dev/null
+++ b/generateds_gui_notes.html
@@ -0,0 +1,343 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.13: http://docutils.sourceforge.net/" />
+<title>GenerateDS GUI Notes</title>
+<meta name="author" content="Dave Kuhlman" />
+<style type="text/css">
+
+/* css */
+
+body {
+  font: 90% 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif;
+  background: #ffffff;
+  color: black;
+  margin: 2em;
+  padding: 2em;
+}
+
+a[href] {
+  color: #436976;
+  background-color: transparent;
+}
+
+a.toc-backref {
+  text-decoration: none;
+}
+
+h1 a[href] {
+  text-decoration: none;
+  color: #fcb100;
+  background-color: transparent;
+}
+
+a.strong {
+  font-weight: bold;
+}
+
+img {
+  margin: 0;
+  border: 0;
+}
+
+p {
+  margin: 0.5em 0 1em 0;
+  line-height: 1.5em;
+}
+p a {
+  text-decoration: underline;
+}
+p a:visited {
+  color: purple;
+  background-color: transparent;
+}
+p a:active {
+  color: red;
+  background-color: transparent;
+}
+a:hover {
+  text-decoration: none;
+}
+p img {
+  border: 0;
+  margin: 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: #003a6b;
+  background-color: transparent;
+  font: 100% 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif;
+  margin: 0;
+  padding-top: 0.5em;
+}
+
+h1 {
+  font-size: 160%;
+  margin-bottom: 0.5em;
+  border-bottom: 1px solid #fcb100;
+}
+h2 {
+  font-size: 140%;
+  margin-bottom: 0.5em;
+  border-bottom: 1px solid #aaa;
+}
+h3 {
+  font-size: 130%;
+  margin-bottom: 0.5em;
+  text-decoration: underline;
+}
+h4 {
+  font-size: 110%;
+  font-weight: bold;
+}
+h5 {
+  font-size: 100%;
+  font-weight: bold;
+}
+h6 {
+  font-size: 80%;
+  font-weight: bold;
+}
+
+ul a, ol a {
+  text-decoration: underline;
+}
+
+dt {
+  font-weight: bold;
+}
+dt a {
+  text-decoration: none;
+}
+
+dd {
+  line-height: 1.5em;
+  margin-bottom: 1em;
+}
+
+legend {
+  background: #ffffff;
+  padding: 0.5em;
+}
+
+form {
+  margin: 0;
+}
+
+
+dl.form {
+  margin: 0;
+  padding: 1em;
+}
+
+dl.form dt {
+  width: 30%;
+  float: left;
+  margin: 0;
+  padding: 0 0.5em 0.5em 0;
+  text-align: right;
+}
+
+input {
+  font: 100% 'Lucida Grande', Verdana, Geneva, Lucida, Arial, Helvetica, sans-serif;
+  color: black;
+  background-color: white;
+  vertical-align: middle;
+}
+
+abbr, acronym, .explain {
+  color: black;
+  background-color: transparent;
+}
+
+q, blockquote {
+}
+
+code, pre {
+  font-family: monospace;
+  font-size: 1.2em;
+  display: block;
+  padding: 10px;
+  border: 1px solid #838183;
+  background-color: #eee;
+  color: #000;
+  overflow: auto;
+  margin: 0.5em 1em;
+}
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+tt.docutils {
+  background-color: #dddddd;
+}
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="generateds-gui-notes">
+<h1 class="title">GenerateDS GUI Notes</h1>
+<table class="docinfo" frame="void" rules="none">
+<col class="docinfo-name" />
+<col class="docinfo-content" />
+<tbody valign="top">
+<tr><th class="docinfo-name">Author:</th>
+<td>Dave Kuhlman</td></tr>
+<tr><th class="docinfo-name">Contact:</th>
+<td>dkuhlman (at) davekuhlman (dot) org</td></tr>
+<tr><th class="docinfo-name">Address:</th>
+<td><pre class="address">
+<a class="first last reference external" href="http://www.davekuhlman.org">http://www.davekuhlman.org</a>
+</pre>
+</td></tr>
+</tbody>
+</table>
+<!-- Do not modify the following version comments.
+They are used by updateversion.py. -->
+<!-- version -->
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22a</td>
+</tr>
+</tbody>
+</table>
+<!-- version -->
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field"><th class="field-name">date:</th><td class="field-body">April 11, 2016</td>
+</tr>
+</tbody>
+</table>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field"><th class="field-name">copyright:</th><td class="field-body">Copyright (c) 2016 Dave Kuhlman. This documentation
+and the software it describes is covered by The MIT License:
+<a class="reference external" href="http://www.opensource.org/licenses/mit-license.php">http://www.opensource.org/licenses/mit-license.php</a>.</td>
+</tr>
+<tr class="field"><th class="field-name">abstract:</th><td class="field-body">This document describes generateds_ui.py, the graphical
+front end to generateDS.py.</td>
+</tr>
+</tbody>
+</table>
+<div class="section" id="introduction">
+<h1>Introduction</h1>
+<p><tt class="docutils literal">generateds_gui.py</tt> provides a graphical front end for
+<tt class="docutils literal">generateDS.py</tt>.  Some may find it easier to configure and to
+select and set options for <tt class="docutils literal">generateDS.py</tt> using this graphical
+application.</p>
+</div>
+<div class="section" id="requirements">
+<h1>Requirements</h1>
+<p>You will need Gtk support for Python in order to run
+<tt class="docutils literal">generateds_gui.py</tt>.</p>
+<p>You must run <tt class="docutils literal">generateds_gui.py</tt> under Python 3.  Python 2 is not
+supported.</p>
+<p>Note that you can use the &quot;--session&quot; command line flag supported by
+<tt class="docutils literal">generateDS.py</tt> on a machine that does not have Python Gtk support
+installed.</p>
+</div>
+<div class="section" id="usage-notes">
+<h1>Usage notes</h1>
+<div class="section" id="what-it-does">
+<h2>What it does</h2>
+<p>Here are some of the different ways that you can use
+<tt class="docutils literal">generateds_gui.py</tt>:</p>
+<ol class="arabic simple">
+<li>You can generate modules from within <tt class="docutils literal">generateds_gui.py</tt> using
+the &quot;Generate&quot; item in the &quot;Tools&quot; menu.</li>
+<li>You can produce and view a command line that reflects your
+configuration using the &quot;Generate CL&quot; item in the &quot;Tools&quot; menu,
+and then you can copy and paste the resulting command line into a
+<tt class="docutils literal">bash</tt> script (for Linux) or a <tt class="docutils literal">.bat</tt> file (for MS Windows),
+which you can then run from the command line.</li>
+<li>You can run the session file that you've saved with the
+&quot;--session&quot; command line flag supported by <tt class="docutils literal">generateDS.py</tt>.</li>
+<li>You can load a previously saved session file into
+<tt class="docutils literal">generateds_gui.py</tt> using the &quot;--session&quot; command line option,
+and then modify that session and/or use it to generate modules,
+or to generate a command line.</li>
+</ol>
+</div>
+<div class="section" id="how-to-use-it">
+<h2>How to use it</h2>
+<p>You can get some help by running the following:</p>
+<pre class="literal-block">
+$ ./generateds_gui.py --help
+</pre>
+<p>Command line options and arguments:</p>
+<pre class="literal-block">
+Usage:
+python generateds_gui.py [options] --session=&lt;some_session_file.session&gt;
+example:
+        python generateds_gui.py --session=generator01.session
+Options:
+  -h, --help            show this help message and exit
+  --exec-path=EXEC_PATH
+                                                path to executable generated in command line.
+                                                Example: &quot;python /path/to/generateDS.py&quot;.  Default:
+                                                &quot;./generateDS.py&quot;.  Use Tools/Generate CL (Ctrl-T) to
+                                                see it.
+  --impl-gui=IMPL_GUI   name of glade file that defines the GUI if not
+                                                embedded.
+  -s SESSION, --session=SESSION
+                                                name of a session file to be loaded.
+</pre>
+<dl class="docutils">
+<dt>exec-path</dt>
+<dd>If your copy of <tt class="docutils literal">generateDS.py</tt> is in a special location, you
+can specify that location using this option.  The version of
+<tt class="docutils literal">generateDS.py</tt> at that location will be run when you select
+the &quot;Generate&quot; item from the &quot;Tools&quot; menu.</dd>
+<dt>impl-gui</dt>
+<dd>The file <tt class="docutils literal">generateds_gui.glade</tt> specifies and describes the
+user interface.  This file has been embedded into
+<tt class="docutils literal">generateds_gui.py</tt>.  If you modify <tt class="docutils literal">generateds_gui.glade</tt>
+and want to use that modified version, specify it with this
+option.</dd>
+<dt>s, session</dt>
+<dd>If you have created and saved a session file using
+<tt class="docutils literal">generateds_gui.py</tt> and want to load that file the next time
+you run <tt class="docutils literal">generateds_gui.py</tt>, use this option.  Alternatively,
+once <tt class="docutils literal">generateds_gui.py</tt> has been started, you can use the
+&quot;Load session&quot; item under the &quot;File&quot; menu.</dd>
+</dl>
+<!-- vim:ft=rst: -->
+</div>
+</div>
+</div>
+<div class="footer">
+<hr class="footer" />
+<a class="reference external" href="generateds_gui_notes.txt">View document source</a>.
+Generated on: 2016-04-11 21:46 UTC.
+Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
+
+</div>
+</body>
+</html>
diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt
new file mode 100644
index 0000000..6c816b9
--- /dev/null
+++ b/generateds_gui_notes.txt
@@ -0,0 +1,126 @@
+======================
+GenerateDS GUI Notes
+======================
+
+:author: Dave Kuhlman
+:contact: dkuhlman (at) davekuhlman (dot) org
+:address:
+    http://www.davekuhlman.org
+
+.. Do not modify the following version comments.
+   They are used by updateversion.py.
+
+.. version
+
+:revision: 2.22a
+
+.. version
+
+:date: |date|
+
+.. |date| date:: %B %d, %Y
+
+
+:copyright: Copyright (c) 2016 Dave Kuhlman. This documentation
+    and the software it describes is covered by The MIT License:
+    http://www.opensource.org/licenses/mit-license.php.
+
+:abstract: This document describes generateds_ui.py, the graphical
+    front end to generateDS.py.
+
+Introduction
+==============
+
+``generateds_gui.py`` provides a graphical front end for
+``generateDS.py``.  Some may find it easier to configure and to
+select and set options for ``generateDS.py`` using this graphical
+application.
+
+
+Requirements
+==============
+
+You will need Gtk support for Python in order to run
+``generateds_gui.py``.
+
+You must run ``generateds_gui.py`` under Python 3.  Python 2 is not
+supported.
+
+Note that you can use the "--session" command line flag supported by
+``generateDS.py`` on a machine that does not have Python Gtk support
+installed.
+
+
+Usage notes
+=============
+
+What it does
+--------------
+
+Here are some of the different ways that you can use
+``generateds_gui.py``:
+
+#. You can generate modules from within ``generateds_gui.py`` using
+   the "Generate" item in the "Tools" menu.
+
+#. You can produce and view a command line that reflects your
+   configuration using the "Generate CL" item in the "Tools" menu,
+   and then you can copy and paste the resulting command line into a
+   ``bash`` script (for Linux) or a ``.bat`` file (for MS Windows),
+   which you can then run from the command line.
+
+#. You can run the session file that you've saved with the
+   "--session" command line flag supported by ``generateDS.py``.
+
+#. You can load a previously saved session file into
+   ``generateds_gui.py`` using the "--session" command line option,
+   and then modify that session and/or use it to generate modules,
+   or to generate a command line.
+
+
+How to use it
+---------------
+
+You can get some help by running the following::
+
+    $ ./generateds_gui.py --help
+
+Command line options and arguments::
+
+	Usage:
+        python generateds_gui.py [options] --session=<some_session_file.session>
+	example:
+		python generateds_gui.py --session=generator01.session
+	Options:
+	  -h, --help            show this help message and exit
+	  --exec-path=EXEC_PATH
+							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.
+	  --impl-gui=IMPL_GUI   name of glade file that defines the GUI if not
+							embedded.
+	  -s SESSION, --session=SESSION
+							name of a session file to be loaded.
+
+exec-path
+    If your copy of ``generateDS.py`` is in a special location, you
+    can specify that location using this option.  The version of
+    ``generateDS.py`` at that location will be run when you select
+    the "Generate" item from the "Tools" menu.
+
+impl-gui
+    The file ``generateds_gui.glade`` specifies and describes the
+    user interface.  This file has been embedded into
+    ``generateds_gui.py``.  If you modify ``generateds_gui.glade``
+    and want to use that modified version, specify it with this
+    option.
+
+s, session
+    If you have created and saved a session file using
+    ``generateds_gui.py`` and want to load that file the next time
+    you run ``generateds_gui.py``, use this option.  Alternatively,
+    once ``generateds_gui.py`` has been started, you can use the
+    "Load session" item under the "File" menu.
+
+.. vim:ft=rst:
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 70a191a..1c95814 100755
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -39,7 +39,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.21a'
+VERSION = '2.22a'
 ##VERSION##
 
 
@@ -1020,9 +1020,9 @@ def capture_ui_names():
 
 
 USAGE_TEXT = """
-    python %prog [options] <somefile.xxx>
+    python %prog [options] --session=<some_session_file.session>
 example:
-    python %prog somefile.xxx"""
+    python %prog --session=generator01.session"""
 
 
 def usage(parser):
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index f89453d..3a70634 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.21a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22a</td>
 </tr>
 </tbody>
 </table>
@@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">April 01, 2016</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">April 11, 2016</td>
 </tr>
 </tbody>
 </table>
@@ -380,7 +380,7 @@ this command for your needs.  For example, you may need to use
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="librarytemplate_howto.txt">View document source</a>.
-Generated on: 2016-04-01 18:00 UTC.
+Generated on: 2016-04-11 21:46 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index ffd074b..a8e9992 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.21a
+:revision: 2.22a
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 2770899..e60f2ec 100755
--- a/process_includes.py
+++ b/process_includes.py
@@ -40,7 +40,7 @@ except ImportError:
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.21a'
+VERSION = '2.22a'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index ed4dc1d..1c45b73 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ setup(name="generateDS",
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.21a",
+    version="2.22a",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index b390c1e..a0f0cf8 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -219,7 +219,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.21a</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22a</td>
 </tr>
 </tbody>
 </table>
@@ -228,7 +228,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">April 01, 2016</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">April 11, 2016</td>
 </tr>
 </tbody>
 </table>
@@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_tutorial.txt">View document source</a>.
-Generated on: 2016-04-01 18:00 UTC.
+Generated on: 2016-04-11 21:46 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index d526c01..c6e47be 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.21a
+:revision: 2.22a
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 233f9d6a7c04b4859b0250516e4adac39f2de367..e6854f576594abe649425cbf7c8bcdea35ddf43a 100644
GIT binary patch
delta 6686
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

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

diff --git a/updateversion.py b/updateversion.py
index b122794..0ec2618 100755
--- a/updateversion.py
+++ b/updateversion.py
@@ -45,10 +45,8 @@ REPL_SPEC = [
         'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)",
     },
     {
-        'filename': 'generateDS.txt',
-        'pattern': r"(\.\. version\s*- My Web site -- \s*"
-                   r"http://www\.rexx\.com/~dkuhlman/generateDS-)"
-                   r"([\w\.\-]*)(\.tar\.gz\s*\.\. version)",
+        'filename': 'generateds_gui_notes.txt',
+        'pattern': r"(.. version\s*:revision: )([\w\.\-]*)(\s*.. version)",
     },
     {
         'filename': 'librarytemplate_howto.txt',
@@ -84,23 +82,21 @@ def updateversion(version):
         update1file(targetfilename, content1)
 
 
-
-#
 # Classes
 
 
-
 #
 # Functions for internal use and testing
 
 def update1file(targetfilename, content):
-    backupfilename = targetfilename + '.bak' 
+    backupfilename = targetfilename + '.bak'
     shutil.copy2(targetfilename, backupfilename)
     targetfile = open(targetfilename, 'w')
     targetfile.write(content)
     targetfile.close()
     #shutil.copymode(backupfilename, targetfilename)
 
+
 def replfuncmaker(version):
     def replfunc(matchobj):
         if VERBOSE:
@@ -111,6 +107,7 @@ def replfuncmaker(version):
 
 USAGE_TEXT = __doc__
 
+
 def usage():
     print USAGE_TEXT
     sys.exit(1)
@@ -140,4 +137,3 @@ def main():
 if __name__ == '__main__':
     #import pdb; pdb.set_trace()
     main()
-
-- 
GitLab