From 03f7493cc0050c0a9cef87a5767367f503573559 Mon Sep 17 00:00:00 2001 From: Dave Kuhlman <dkuhlman@davekuhlman.org> Date: Wed, 20 Apr 2016 17:09:41 -0700 Subject: [PATCH] Fix for attributeGroup recursion. Bump version to 2.22b. --- README | 9 ++++ generateDS.html | 6 +-- generateDS.py | 14 +++-- generateDS.txt | 2 +- generateds_gui_notes.html | 82 +++++++++++++++++++++++++++--- generateds_gui_notes.txt | 64 ++++++++++++++++++++++- gui/generateds_gui.py | 12 ++++- 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 48764 -> 48764 bytes 14 files changed, 182 insertions(+), 27 deletions(-) diff --git a/README b/README index 840abf2..038a785 100644 --- a/README +++ b/README @@ -141,6 +141,15 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- +Version 2.22b (04/20/2016) + +- Fixed endless recursion that occurred while attempting to replace + attribute group names. Thanks to Bing Wang for reporting this and + for identifying and providing the XML schema that reproduced it. +- Fixed failure to clean up names containing special characters in + function generateBuildStandard_1. This was error was uncovered + when generating code from Bing Wang's schema. Thanks again Bing. + Version 2.22a (04/11/2016) - Added support for additional command line options to diff --git a/generateDS.html b/generateDS.html index 84e723e..1dc3def 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.22a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22b</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 11, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">April 20, 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-11 21:52 UTC. +Generated on: 2016-04-21 00:07 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 89166d0..2be33c2 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.22a' +VERSION = '2.22b' ##VERSION## if sys.version_info.major == 2: @@ -1235,6 +1235,11 @@ class XschemaElement(XschemaElementBase): if key is not None: attrGroup = AttributeGroups[key] for name in attrGroup.getKeys(): + if name == groupName: + err_msg('*** Error. Element {} attributeGroup {} ' + 'has endless recursion\n'.format( + self.getName(), groupName)) + return if (name in AttributeGroups or strip_namespace(name) in AttributeGroups): self.replace_attributeGroup_names_1(name) @@ -1243,8 +1248,9 @@ class XschemaElement(XschemaElementBase): self.attributeDefs[name] = attr self.attributeDefsList.append(name) else: - err_msg('*** Error. attributeGroup %s not defined.\n' % ( - groupName, )) + err_msg('*** Error. Element %s attributeGroup %s ' + 'not defined.\n' % ( + self.getName(), groupName, )) def __str__(self): s1 = '<XschemaElement name: "%s" type: "%s">' % \ @@ -3748,6 +3754,7 @@ def generateBuildStandard_1( name = mapName(name) else: name = mappedName + name = cleanupName(name) s1 = " self.%s.append(obj_)\n" % (name, ) else: substitutionGroup = child.getAttrs().get('substitutionGroup') @@ -3756,6 +3763,7 @@ def generateBuildStandard_1( name = mapName(name) else: name = mapName(headName) + name = cleanupName(name) s1 = " self.%s = obj_\n" % (name, ) wrt(s1) wrt(" obj_.original_tagname_ = '%s'\n" % (origName, )) diff --git a/generateDS.txt b/generateDS.txt index 8f1bf29..e3f097e 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.22a +:revision: 2.22b .. version diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html index bc3f7d2..2b70089 100644 --- a/generateds_gui_notes.html +++ b/generateds_gui_notes.html @@ -220,7 +220,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22b</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 11, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">April 20, 2016</td> </tr> </tbody> </table> @@ -246,15 +246,33 @@ front end to generateDS.py.</td> </tr> </tbody> </table> +<div class="contents topic" id="contents"> +<p class="topic-title first">Contents</p> +<ul class="auto-toc simple"> +<li><a class="reference internal" href="#introduction" id="id1">1 Introduction</a></li> +<li><a class="reference internal" href="#requirements" id="id2">2 Requirements</a></li> +<li><a class="reference internal" href="#usage-notes" id="id3">3 Usage notes</a><ul class="auto-toc"> +<li><a class="reference internal" href="#what-it-does" id="id4">3.1 What it does</a></li> +<li><a class="reference internal" href="#how-to-use-it" id="id5">3.2 How to use it</a></li> +</ul> +</li> +<li><a class="reference internal" href="#internationalization" id="id6">4 Internationalization</a><ul class="auto-toc"> +<li><a class="reference internal" href="#preparation" id="id7">4.1 Preparation</a></li> +<li><a class="reference internal" href="#installation-and-setup" id="id8">4.2 Installation and setup</a></li> +<li><a class="reference internal" href="#additional-information" id="id9">4.3 Additional information</a></li> +</ul> +</li> +</ul> +</div> <div class="section" id="introduction"> -<h1>Introduction</h1> +<h1><a class="toc-backref" href="#id1">1 Introduction</a></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> +<h1><a class="toc-backref" href="#id2">2 Requirements</a></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 @@ -264,9 +282,9 @@ supported.</p> installed.</p> </div> <div class="section" id="usage-notes"> -<h1>Usage notes</h1> +<h1><a class="toc-backref" href="#id3">3 Usage notes</a></h1> <div class="section" id="what-it-does"> -<h2>What it does</h2> +<h2><a class="toc-backref" href="#id4">3.1 What it does</a></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"> @@ -286,7 +304,7 @@ or to generate a command line.</li> </ol> </div> <div class="section" id="how-to-use-it"> -<h2>How to use it</h2> +<h2><a class="toc-backref" href="#id5">3.2 How to use it</a></h2> <p>You can get some help by running the following:</p> <pre class="literal-block"> $ ./generateds_gui.py --help @@ -328,6 +346,54 @@ you run <tt class="docutils literal">generateds_gui.py</tt>, use this option. A once <tt class="docutils literal">generateds_gui.py</tt> has been started, you can use the "Load session" item under the "File" menu.</dd> </dl> +</div> +</div> +<div class="section" id="internationalization"> +<h1><a class="toc-backref" href="#id6">4 Internationalization</a></h1> +<p><em>Note:</em> This work on internationalization for generateds_gui is +experimental and does not yet work.</p> +<div class="section" id="preparation"> +<h2><a class="toc-backref" href="#id7">4.1 Preparation</a></h2> +<p>Here is what I've done:</p> +<pre class="literal-block"> +$ cd generateds/gui/ +$ mkdir po +# Create the template file. +$ xgettext -k_ -kN_ -o po/generateds_gui.pot generateds_gui.glade +# Create a file for the translator. This one is for the Russian language. +$ msginit --locale=ru --input=generateds_gui.pot +</pre> +<p>And, after someone has added their translations (for example, to +<tt class="docutils literal">ru.po</tt>), we translate it to binary with the following command:</p> +<pre class="literal-block"> +$ msgfmt -o generateds_gui.mo ru.po +</pre> +<p>Finally, move the binary file to the appropriate directory under the +directory containing the executable (<tt class="docutils literal">generateds_gui.py</tt>). See +<a class="reference internal" href="#installation-and-setup">Installation and setup</a>.</p> +</div> +<div class="section" id="installation-and-setup"> +<h2><a class="toc-backref" href="#id8">4.2 Installation and setup</a></h2> +<p>Now we have to move the <tt class="docutils literal">.mo</tt> file where it will be used when we +run <tt class="docutils literal">generateds_gui.py</tt>. We place it in a sub-directory under the +location of <tt class="docutils literal">generateds_gui.py</tt> itself.</p> +<pre class="literal-block"> +$ cd /directory/containing/generateds_gui.py +$ mkdir locale +$ mkdir locale/ru +$ mkdir locale/ru/LC_MESSAGES +$ mv generateds_gui.mo locale/ru/LC_MESSAGES/ +</pre> +</div> +<div class="section" id="additional-information"> +<h2><a class="toc-backref" href="#id9">4.3 Additional information</a></h2> +<p>Here are some helpful references:</p> +<ul class="simple"> +<li><a class="reference external" href="https://en.wikipedia.org/wiki/Gettext">https://en.wikipedia.org/wiki/Gettext</a></li> +<li><a class="reference external" href="http://faq.pygtk.org/index.py?req=show&file=faq22.002.htp">http://faq.pygtk.org/index.py?req=show&file=faq22.002.htp</a></li> +<li><a class="reference external" href="http://www.servin.com/linux/GladeInternationalization.html">http://www.servin.com/linux/GladeInternationalization.html</a></li> +<li><a class="reference external" href="http://www.learningpython.com/2006/12/03/translating-your-pythonpygtk-application/">http://www.learningpython.com/2006/12/03/translating-your-pythonpygtk-application/</a></li> +</ul> <!-- vim:ft=rst: --> </div> </div> @@ -335,7 +401,7 @@ once <tt class="docutils literal">generateds_gui.py</tt> has been started, you c <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:52 UTC. +Generated on: 2016-04-21 00:07 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt index 6c816b9..656a1db 100644 --- a/generateds_gui_notes.txt +++ b/generateds_gui_notes.txt @@ -12,7 +12,7 @@ GenerateDS GUI Notes .. version -:revision: 2.22a +:revision: 2.22b .. version @@ -28,6 +28,12 @@ GenerateDS GUI Notes :abstract: This document describes generateds_ui.py, the graphical front end to generateDS.py. +.. sectnum:: :depth: 4 + +.. contents:: + :depth: 4 + + Introduction ============== @@ -123,4 +129,60 @@ s, session once ``generateds_gui.py`` has been started, you can use the "Load session" item under the "File" menu. + +Internationalization +====================== + +*Note:* This work on internationalization for generateds_gui is +experimental and does not yet work. + +Preparation +------------- + +Here is what I've done:: + + $ cd generateds/gui/ + $ mkdir po + # Create the template file. + $ xgettext -k_ -kN_ -o po/generateds_gui.pot generateds_gui.glade + # Create a file for the translator. This one is for the Russian language. + $ msginit --locale=ru --input=generateds_gui.pot + +And, after someone has added their translations (for example, to +``ru.po``), we translate it to binary with the following command:: + + $ msgfmt -o generateds_gui.mo ru.po + +Finally, move the binary file to the appropriate directory under the +directory containing the executable (``generateds_gui.py``). See +`Installation and setup`_. + + +Installation and setup +------------------------ + +Now we have to move the ``.mo`` file where it will be used when we +run ``generateds_gui.py``. We place it in a sub-directory under the +location of ``generateds_gui.py`` itself. + +:: + + $ cd /directory/containing/generateds_gui.py + $ mkdir locale + $ mkdir locale/ru + $ mkdir locale/ru/LC_MESSAGES + $ mv generateds_gui.mo locale/ru/LC_MESSAGES/ + + +Additional information +------------------------ + +Here are some helpful references: + +- https://en.wikipedia.org/wiki/Gettext +- http://faq.pygtk.org/index.py?req=show&file=faq22.002.htp +- http://www.servin.com/linux/GladeInternationalization.html +- http://www.learningpython.com/2006/12/03/translating-your-pythonpygtk-application/ + + .. vim:ft=rst: diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index 1c95814..da981e9 100755 --- a/gui/generateds_gui.py +++ b/gui/generateds_gui.py @@ -6,6 +6,8 @@ from configparser import ConfigParser from xml.parsers import expat import subprocess import re +import locale +import gettext if sys.version_info.major == 2: @@ -39,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.22a' +VERSION = '2.22b' ##VERSION## @@ -156,6 +158,7 @@ class GeneratedsGui(object): global Builder # Default values Builder = gtk.Builder() + Builder.set_translation_domain('generateds_gui') self.options = options # self.ui_spec_filename = ui_spec_filename self.filename = None @@ -1060,6 +1063,13 @@ def main(): capture_ui_names() if len(args) > 0: usage(parser) + # Set up for internationalization. + app_name = 'generateds_gui' + dir_name = 'locale' + locale.setlocale(locale.LC_ALL, '') + gettext.bindtextdomain(app_name, dir_name) + gettext.textdomain(app_name) + # Start the app. editor = GeneratedsGui(options) editor.main() diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html index 43756f5..303c083 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.22a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22b</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 11, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">April 20, 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-11 21:52 UTC. +Generated on: 2016-04-21 00:07 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 a8e9992..f508d04 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.22a +:revision: 2.22b .. version diff --git a/process_includes.py b/process_includes.py index e60f2ec..e9516b6 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.22a' +VERSION = '2.22b' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index 1c45b73..4468b67 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.22a", + version="2.22b", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index 91dea5b..f0388da 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.22a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.22b</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 11, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">April 20, 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-11 21:52 UTC. +Generated on: 2016-04-21 00:07 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 c6e47be..284cd93 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.22a +:revision: 2.22b .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index aef0372624e79e054389a38a3a5e636e1025d8ef..c4d2106650554582769f23f527c2ac60244d8ce8 100644 GIT binary patch delta 9778 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 MlYqPxvmm-$1T^NKq5uE@ delta 9778 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 MlYqPxvmm-$1hQFgZ~y=R -- GitLab