summaryrefslogtreecommitdiff
path: root/sandbox
diff options
context:
space:
mode:
author(no author) <(no author)@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2003-07-02 17:51:01 +0000
committer(no author) <(no author)@929543f6-e4f2-0310-98a6-ba3bd3dd1d04>2003-07-02 17:51:01 +0000
commitedf2f3bec1de42965e347eb808f8604151c35bdb (patch)
tree783ec29ed403599a0717019ac974ed2fd7366207 /sandbox
parent97e20d03d7a4f773f24b082b76a34411acc1fefd (diff)
downloaddocutils-ax.tar.gz
This commit was manufactured by cvs2svn to create branch 'ax'.ax
git-svn-id: http://svn.code.sf.net/p/docutils/code/branches/ax@1551 929543f6-e4f2-0310-98a6-ba3bd3dd1d04
Diffstat (limited to 'sandbox')
-rw-r--r--sandbox/README.txt32
-rw-r--r--sandbox/aahz/OO/Makefile27
-rw-r--r--sandbox/aahz/OO/OOdirectives.py72
-rw-r--r--sandbox/aahz/OO/OOtext.py127
-rw-r--r--sandbox/aahz/OO/OOwriter.py676
-rw-r--r--sandbox/aahz/OO/graphics_output.py28
-rw-r--r--sandbox/aahz/OO/open_office.py33
-rwxr-xr-xsandbox/aahz/OO/publish.py27
-rw-r--r--sandbox/bbum/00README.txt14
-rw-r--r--sandbox/bbum/ChangeLog38
-rw-r--r--sandbox/bbum/DocArticle/00README.txt15
-rw-r--r--sandbox/bbum/DocArticle/DocArticle/DocArticleText.py37
-rw-r--r--sandbox/bbum/DocArticle/DocArticle/__init__.py941
-rw-r--r--sandbox/bbum/DocArticle/LICENSE.txt22
-rwxr-xr-xsandbox/bbum/DocArticle/docarticle.py27
-rwxr-xr-xsandbox/bbum/DocArticle/setup.py18
-rw-r--r--sandbox/blais/css_tricks/README.txt12
-rw-r--r--sandbox/blais/css_tricks/boxed_titles/castro.pngbin20738 -> 0 bytes
-rw-r--r--sandbox/blais/css_tricks/boxed_titles/clinton.pngbin16129 -> 0 bytes
-rw-r--r--sandbox/blais/css_tricks/boxed_titles/docutils.conf3
-rw-r--r--sandbox/blais/css_tricks/boxed_titles/index.txt37
-rw-r--r--sandbox/blais/css_tricks/boxed_titles/style.css16
-rw-r--r--sandbox/blais/css_tricks/section_based/docutils.conf3
-rw-r--r--sandbox/blais/css_tricks/section_based/index.txt35
-rw-r--r--sandbox/blais/css_tricks/section_based/style.css11
-rwxr-xr-xsandbox/davidg/infrastructure/docutils-update109
-rw-r--r--sandbox/davidg/pysource_reader/en.py31
-rw-r--r--sandbox/davidg/pysource_reader/nodes.py98
-rw-r--r--sandbox/dreamcatcher/ChangeLog13
-rw-r--r--sandbox/dreamcatcher/reportlabs.diff1258
-rw-r--r--sandbox/dreamcatcher/rlpdf/README.txt2
-rw-r--r--sandbox/dreamcatcher/rlpdf/__init__.py5
-rw-r--r--sandbox/dreamcatcher/rlpdf/rllicense.txt29
-rw-r--r--sandbox/dreamcatcher/rlpdf/rlpdf.py789
-rw-r--r--sandbox/dreamcatcher/rlpdf/rltemplate.py143
-rw-r--r--sandbox/dreamcatcher/rlpdf/stylesheet.py212
-rwxr-xr-xsandbox/dreamcatcher/tools/pdf.py22
-rw-r--r--sandbox/grubert/README.txt69
-rw-r--r--sandbox/grubert/directory_structur24
-rw-r--r--sandbox/grubert/docutils.sty54
-rwxr-xr-xsandbox/grubert/latex.py23
-rw-r--r--sandbox/grubert/latex/__init__.py1
-rw-r--r--sandbox/grubert/latex2e-README.txt173
-rw-r--r--sandbox/grubert/ltx-test.txt476
-rw-r--r--sandbox/grubert/making_a_writer.txt133
-rwxr-xr-xsandbox/grubert/pdf124
-rw-r--r--sandbox/grubert/pdftest_1.txt127
-rw-r--r--sandbox/grubert/pdftest_2.txt49
-rw-r--r--sandbox/grubert/rllicense.txt29
-rw-r--r--sandbox/grubert/rlpdf/README.txt2
-rw-r--r--sandbox/grubert/rlpdf/__init__.py5
-rw-r--r--sandbox/grubert/rlpdf/rlpdf.py671
-rw-r--r--sandbox/grubert/rlpdf/rltemplate.py143
-rw-r--r--sandbox/grubert/rlpdf/stylesheet.py158
-rwxr-xr-xsandbox/grubert/runtest131
-rw-r--r--sandbox/grubert/style.tex21
-rwxr-xr-xsandbox/grubert/tools/pdf.py22
-rw-r--r--sandbox/gschwant/docfactory/LICENSE.txt32
-rw-r--r--sandbox/gschwant/docfactory/NOTES.txt52
-rw-r--r--sandbox/gschwant/docfactory/README.txt434
-rw-r--r--sandbox/gschwant/docfactory/createdoc.py25
-rw-r--r--sandbox/gschwant/docfactory/doc/FAQ.txt52
-rw-r--r--sandbox/gschwant/docfactory/doc/HISTORY.txt67
-rw-r--r--sandbox/gschwant/docfactory/doc/docutils.conf12
-rw-r--r--sandbox/gschwant/docfactory/doc/downloads.txt11
-rw-r--r--sandbox/gschwant/docfactory/doc/head.html8
-rw-r--r--sandbox/gschwant/docfactory/doc/index.html24
-rw-r--r--sandbox/gschwant/docfactory/doc/navigation_l.html68
-rw-r--r--sandbox/gschwant/docfactory/doc/pics/DF.pngbin82144 -> 0 bytes
-rw-r--r--sandbox/gschwant/docfactory/doc/pics/screenshot1.jpgbin163761 -> 0 bytes
-rw-r--r--sandbox/gschwant/docfactory/doc/pics/screenshot2.jpgbin61033 -> 0 bytes
-rw-r--r--sandbox/gschwant/docfactory/doc/screenshots.txt11
-rw-r--r--sandbox/gschwant/docfactory/doc/start.txt26
-rw-r--r--sandbox/gschwant/docfactory/doc/stylesheets/df.css411
-rw-r--r--sandbox/gschwant/docfactory/doc/stylesheets/navigation_l.css38
-rw-r--r--sandbox/gschwant/docfactory/docfactory.icobin3638 -> 0 bytes
-rwxr-xr-xsandbox/gschwant/docfactory/docfactory.py10
-rw-r--r--sandbox/gschwant/docfactory/docfactory2exe.py17
-rw-r--r--sandbox/gschwant/docfactory/docutils.conf12
-rw-r--r--sandbox/gschwant/docfactory/factory/.cvsignore1
-rw-r--r--sandbox/gschwant/docfactory/factory/__init__.py0
-rw-r--r--sandbox/gschwant/docfactory/factory/browser.py198
-rw-r--r--sandbox/gschwant/docfactory/factory/controls.py183
-rw-r--r--sandbox/gschwant/docfactory/factory/dialogs.py853
-rw-r--r--sandbox/gschwant/docfactory/factory/docutilsadapter.py112
-rw-r--r--sandbox/gschwant/docfactory/factory/images.py460
-rwxr-xr-xsandbox/gschwant/docfactory/factory/main.py1707
-rw-r--r--sandbox/gschwant/docfactory/factory/stylesheets.py528
-rw-r--r--sandbox/gschwant/docfactory/factory/throbimages.py7340
-rwxr-xr-xsandbox/gschwant/docfactory/setup.py39
-rw-r--r--sandbox/gschwant/htmlnav/README.txt183
-rw-r--r--sandbox/gschwant/htmlnav/rst2htmlnav.py19
-rw-r--r--sandbox/gschwant/htmlnav/setup.py21
-rw-r--r--sandbox/gschwant/htmlnav/writer/htmlnav.py193
-rw-r--r--sandbox/ianb/extractor/default.css245
-rw-r--r--sandbox/ianb/extractor/extractor.py339
-rw-r--r--sandbox/ianb/wiki/Wiki.py251
-rw-r--r--sandbox/ianb/wiki/docs/Wiki.txt54
-rwxr-xr-xsandbox/mly/restblog/Makefile36
-rwxr-xr-xsandbox/mly/restblog/README.txt5
-rwxr-xr-xsandbox/mly/restblog/date_index.py39
-rwxr-xr-xsandbox/mly/restblog/default.css43
-rwxr-xr-xsandbox/mly/restblog/keyw_index.py3
-rwxr-xr-xsandbox/mly/restblog/main_index.py28
-rwxr-xr-xsandbox/mly/restblog/restblog.py32
-rwxr-xr-xsandbox/mly/restblog/subj_index.py3
-rw-r--r--sandbox/mwh/README2
-rw-r--r--sandbox/mwh/advopostwriter.py59
-rw-r--r--sandbox/oliverr/docbook/README.txt14
-rw-r--r--sandbox/oliverr/docbook/rst2docbook.py28
-rw-r--r--sandbox/oliverr/docbook/setup.py24
-rw-r--r--sandbox/oliverr/docbook/writer/docbook.py1046
-rw-r--r--sandbox/oliverr/ht/README.txt20
-rw-r--r--sandbox/oliverr/ht/TODO.txt10
-rw-r--r--sandbox/oliverr/ht/hthtml.py134
-rw-r--r--sandbox/oliverr/ht/rst2ht.py29
-rw-r--r--sandbox/paultremblay/README.txt36
-rw-r--r--sandbox/paultremblay/docutils_nest/README.txt238
-rw-r--r--sandbox/paultremblay/docutils_nest/configure.py146
-rw-r--r--sandbox/paultremblay/docutils_nest/data/configure.xml9
-rw-r--r--sandbox/paultremblay/docutils_nest/doc/README.txt236
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/__init__.py3
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/inline_to_xml.py459
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/nest_docutils.py123
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/nest_utils.py181
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/nested_inline.py352
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/options_trem.py386
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/read_config.py143
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/rst_options.py106
-rw-r--r--sandbox/paultremblay/docutils_nest/docutils_nest/well_formed_xml.py73
-rw-r--r--sandbox/paultremblay/docutils_nest/options_trem.py377
-rw-r--r--sandbox/paultremblay/docutils_nest/read_config.py144
-rwxr-xr-xsandbox/paultremblay/docutils_nest/scripts/docutils-nest-xml.py37
-rw-r--r--sandbox/paultremblay/docutils_nest/setup.py28
-rw-r--r--sandbox/paultremblay/docutils_nest/test_files/test.txt10
-rw-r--r--sandbox/paultremblay/rst_to_docbook/README.txt2
-rw-r--r--sandbox/paultremblay/rst_to_docbook/configure.py138
-rw-r--r--sandbox/paultremblay/rst_to_docbook/data/configure.xml5
-rw-r--r--sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names.xsl117
-rw-r--r--sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names_tokenize.xsl57
-rw-r--r--sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_to_docbook.xsl343
-rw-r--r--sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStructure_to_docbook.xsl387
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/__init__.py3
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/convert_rst_to_docbook.py194
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/location.py6
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/options_trem.py387
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/output.xml93
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/read_config.py131
-rw-r--r--sandbox/paultremblay/rst_to_docbook/rst_to_docbook/xsl_convert.py145
-rw-r--r--sandbox/paultremblay/rst_to_docbook/scripts/rst2docbook.py25
-rw-r--r--sandbox/paultremblay/rst_to_docbook/setup.py44
-rw-r--r--sandbox/paultremblay/rst_to_docbook/test_files/reStructure_docbook_example.rst65
-rw-r--r--sandbox/paultremblay/rst_to_docbook/test_files/simple.xml3
-rw-r--r--sandbox/paultremblay/rst_to_docbook/test_files/simple.xsl18
-rw-r--r--sandbox/paultremblay/rst_to_docbook/test_files/test_simple.rst11
-rw-r--r--sandbox/pobrien/LinuxFormat/LXFwriter.py984
-rw-r--r--sandbox/pobrien/LinuxFormat/__init__.py1
-rwxr-xr-xsandbox/pobrien/LinuxFormat/rest2lxf.py26
-rw-r--r--sandbox/pobrien/OpenOffice/OOdirectives.py77
-rw-r--r--sandbox/pobrien/OpenOffice/OOtext.py707
-rw-r--r--sandbox/pobrien/OpenOffice/OOwriter.py780
-rw-r--r--sandbox/pobrien/OpenOffice/__init__.py1
-rwxr-xr-xsandbox/pobrien/OpenOffice/rest2oo.py53
-rwxr-xr-xsandbox/pobrien/OpenOffice/rest2oopseudo.py24
-rwxr-xr-xsandbox/pobrien/OpenOffice/rest2ooxml.py27
-rw-r--r--sandbox/pobrien/WriterTemplate.py1081
-rw-r--r--sandbox/pobrien/dwArticle/__init__.py1
-rw-r--r--sandbox/richard/ZReST/.cvsignore3
-rw-r--r--sandbox/richard/ZReST/Makefile15
-rw-r--r--sandbox/richard/ZReST/README.txt45
-rw-r--r--sandbox/richard/ZReST/TODO.txt6
-rw-r--r--sandbox/richard/ZReST/ZReST.py288
-rw-r--r--sandbox/richard/ZReST/__init__.py27
-rw-r--r--sandbox/richard/ZReST/dtml/manage_addZReSTForm.dtml45
-rw-r--r--sandbox/richard/ZReST/dtml/manage_editForm.dtml88
-rw-r--r--sandbox/richard/ZReST/refresh.txt1
-rw-r--r--sandbox/richard/ZReST/version.txt1
-rw-r--r--sandbox/richard/pythonpoint/example_slides.txt38
-rw-r--r--sandbox/richard/pythonpoint/pythonpoint.py328
-rw-r--r--sandbox/richard/pythonpoint/readme.txt5
-rw-r--r--sandbox/simonb/inline_target.txt48
-rw-r--r--sandbox/tibs/pysource/.cvsignore2
-rwxr-xr-xsandbox/tibs/pysource/__init__.py5
-rwxr-xr-xsandbox/tibs/pysource/buildhtml.py354
-rwxr-xr-xsandbox/tibs/pysource/buildtree.py403
-rw-r--r--sandbox/tibs/pysource/doc/readme.rtxt189
-rw-r--r--sandbox/tibs/pysource/doc/whythis.rtxt122
-rw-r--r--sandbox/tibs/pysource/group-notes.txt220
-rwxr-xr-xsandbox/tibs/pysource/html.py1163
-rwxr-xr-xsandbox/tibs/pysource/notes/notes.py115
-rw-r--r--sandbox/tibs/pysource/notes/notes.txt7
-rw-r--r--sandbox/tibs/pysource/notes/roles.txt61
-rw-r--r--sandbox/tibs/pysource/notes/scope.txt19
-rwxr-xr-xsandbox/tibs/pysource/notes/string.html225
-rw-r--r--sandbox/tibs/pysource/notes/thoughts.txt170
-rwxr-xr-xsandbox/tibs/pysource/pysource.py262
-rwxr-xr-xsandbox/tibs/pysource/rjhack.py58
-rw-r--r--sandbox/tibs/pysource/test/readme.txt27
-rw-r--r--sandbox/tibs/pysource/test/test.doctest12
-rwxr-xr-xsandbox/tibs/pysource/test/test.py124
-rw-r--r--sandbox/tibs/pysource/test/test.rtxt442
-rwxr-xr-xsandbox/tibs/pysource/test/testassign.py12
-rwxr-xr-xsandbox/tibs/pysource/test/testfunc.py34
-rwxr-xr-xsandbox/tibs/pysource/test/testinterpreted.py44
-rwxr-xr-xsandbox/tibs/pysource/test/testinterpreted2.py37
-rwxr-xr-xsandbox/tibs/pysource/test/testsimp.py12
-rwxr-xr-xsandbox/tibs/pysource/test/testyield.py8
-rwxr-xr-xsandbox/tibs/pysource/transform.py358
-rwxr-xr-xsandbox/tibs/pysource/utils.py474
-rwxr-xr-xsandbox/tibs/pysource/visit.py2074
-rw-r--r--sandbox/wilk/french/docutils.conf3
-rw-r--r--sandbox/wilk/french/quickstart-fr.txt375
212 files changed, 0 insertions, 40260 deletions
diff --git a/sandbox/README.txt b/sandbox/README.txt
deleted file mode 100644
index a062608a2..000000000
--- a/sandbox/README.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-=====================
- README: The Sandbox
-=====================
-
-The Sandbox_ is a place to play around, to try out and share ideas.
-It's a part of the CVS repository but it isn't distributed as part of
-Docutils_ releases. Each developer who wants to play here should
-create their own subdirectory (suggested name: SourceForge ID, or
-given name + family initial).
-
-It's OK to make a mess here! But please, play nice.
-
-For more information, please see the `Docutils Project Policies`_.
-
-.. _Sandbox: ./
-.. _Docutils: ../
-.. _Docutils Project Policies: ../spec/notes.html#project-policies
-
-
-Sandbox Projects
-================
-
-.. contents:: :local:
-
-Project Infrastructure
-----------------------
-
-`docutils-update <davidg/infrastructure/docutils-update>`_ is
-a script that is installed as a cron job on SourceForge to
-automatically update the Docutils_ web site whenever the CVS files
-change. Any .html document with a corresponding .txt file is
-regenerated whenever the .txt file changes.
diff --git a/sandbox/aahz/OO/Makefile b/sandbox/aahz/OO/Makefile
deleted file mode 100644
index 57b826b59..000000000
--- a/sandbox/aahz/OO/Makefile
+++ /dev/null
@@ -1,27 +0,0 @@
-export PYTHON=python
-export PYTHONPATH=$(HOME)/src/Lib-Python
-MAIN=$(HOME)/write/effective/book
-
-CHAPTER=Way
-CHAPTER=Control
-CHAPTER=Objects
-CHAPTER=Data
-
-SRCDIR=$(MAIN)/tmp/$(CHAPTER)
-SRCDIR=$(MAIN)/Chapters/$(CHAPTER)
-SRC=$(SRCDIR)/$(CHAPTER)
-
-DESTDIR=$(MAIN)/Output/$(CHAPTER)
-DESTDIR=$(MAIN)/Output/upload
-DEST=$(DESTDIR)/$(CHAPTER).sxw
-
-#DEST=$(MAIN)/Output/foo.xml
-
-GRAPH_TYPE=pdf
-GRAPH_TYPE=eps
-
-test:
- #$(PYTHON) force_mkdir.py $(DESTDIR)
- $(PYTHON) graphics_output.py $(GRAPH_TYPE) $(SRCDIR) $(DESTDIR)
- $(PYTHON) open_office.py $(SRC) $(DEST)
- #$(PYTHON) publish.py $(SRC) > $(DEST)
diff --git a/sandbox/aahz/OO/OOdirectives.py b/sandbox/aahz/OO/OOdirectives.py
deleted file mode 100644
index e437f6fbf..000000000
--- a/sandbox/aahz/OO/OOdirectives.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import sys
-import os
-
-from docutils import nodes
-from docutils.parsers.rst import directives
-from docutils.parsers.rst.languages import en
-
-registry = directives._directive_registry
-registry['index'] = ('OOdirectives', 'index_directive')
-registry['include-code'] = ('OOdirectives', 'include_code')
-registry['include-output'] = ('OOdirectives', 'include_output')
-
-en.directives['index'] = 'index'
-en.directives['include-code'] = 'include-code'
-en.directives['include-output'] = 'include-output'
-
-
-class index_entry(nodes.General, nodes.Element): pass
-class index_entry(nodes.Inline, nodes.TextElement): pass
-
-def index_directive(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- #nodes = []
- #for entry in content:
- # nodes.append(index_entry(entry, entry))
- #return nodes
- entries = '\n'.join(content)
- return [index_entry(entries,entries)]
-
-index_directive.content = 1
-
-
-
-def include_code(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- #obj = state_machine.document.attributes
- #print >> sys.stderr, obj
- #print >> sys.stderr, dir(obj)
- document = state_machine.document
- dirname = getDocDir(document)
- fname = os.path.join(dirname, arguments[0])
- code = open(fname).read()
- return [nodes.literal_block(code, code)]
-
-include_code.arguments = (0, 1, 0)
-
-
-
-def include_output(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- document = state_machine.document
- dirname = getDocDir(document)
- fname = os.path.join(dirname, arguments[0])
- cmd = os.environ['PYTHON'] + ' ' + fname
- f_input, f_output = os.popen4(cmd)
- output = f_output.read()
- f_output.close()
- return [nodes.literal_block(output, output)]
-
-include_output.arguments = (0, 1, 0)
-
-
-def getDocDir(document):
- source = document.current_source
- if source is None:
- return os.getcwd()
- else:
- dirname = os.path.dirname(os.path.abspath(source))
- if dirname is None:
- return os.getcwd()
- else:
- return dirname
diff --git a/sandbox/aahz/OO/OOtext.py b/sandbox/aahz/OO/OOtext.py
deleted file mode 100644
index 9651a10c6..000000000
--- a/sandbox/aahz/OO/OOtext.py
+++ /dev/null
@@ -1,127 +0,0 @@
-# Can't have blank line at beginning of XML
-
-styles = '''<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE office:document-styles PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
-<office:document-styles xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" office:version="1.0">
- <office:font-decls>
- <style:font-decl style:name="StarSymbol" fo:font-family="StarSymbol" style:font-charset="x-symbol"/>
- <style:font-decl style:name="Courier" fo:font-family="Courier" style:font-family-generic="modern" style:font-pitch="fixed"/>
- <style:font-decl style:name="Arial Unicode MS" fo:font-family="&apos;Arial Unicode MS&apos;" style:font-pitch="variable"/>
- <style:font-decl style:name="Thorndale" fo:font-family="Thorndale" style:font-family-generic="roman" style:font-pitch="variable"/>
- </office:font-decls>
- <office:styles>
- <style:default-style style:family="graphics">
- <style:properties draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" fo:color="#000000" style:font-name="Thorndale" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict">
- <style:tab-stops/>
- </style:properties>
- </style:default-style>
- <style:default-style style:family="paragraph">
- <style:properties fo:color="#000000" style:font-name="Thorndale" fo:font-size="12pt" fo:language="en" fo:country="US" style:font-name-complex="Arial Unicode MS" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="2.205cm"/>
- </style:default-style>
- <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
- <style:style style:name=".body" style:family="paragraph" style:parent-style-name="Standard"/>
- <style:style style:name=".CALLOUT" style:family="paragraph" style:parent-style-name=".body"/>
- <style:style style:name=".figure" style:family="paragraph" style:parent-style-name=".body"/>
- <style:style style:name=".quotes" style:family="paragraph" style:parent-style-name=".body">
- <style:properties fo:margin-left="2cm" fo:margin-right="2cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
- </style:style>
- <style:list-style style:name=".bullet"/>
- <style:style style:name=".ch title" style:family="paragraph" style:parent-style-name=".body">
- <style:properties style:font-size="24pt" fo:font-size="24pt"/>
- </style:style>
- <style:style style:name=".head 1" style:family="paragraph" style:parent-style-name=".body">
- <style:properties style:font-size="20pt" fo:font-size="20pt"/>
- </style:style>
- <style:style style:name=".head 2" style:family="paragraph" style:parent-style-name=".body">
- <style:properties style:font-size="16pt" fo:font-size="16pt"/>
- </style:style>
- <style:style style:name=".code" style:family="paragraph" style:parent-style-name=".body">
- <style:properties style:font-name="Courier"/>
- </style:style>
- <style:style style:name=".code first" style:family="paragraph" style:parent-style-name=".body"/>
- <style:style style:name=".code last" style:family="paragraph" style:parent-style-name=".body"/>
- <style:style style:name="Footnote Symbol" style:family="text"/>
- <style:style style:name="Bullet Symbols" style:family="text">
- <style:properties style:font-name="StarSymbol" fo:font-size="9pt" style:font-name-complex="StarSymbol" style:font-size-complex="9pt"/>
- </style:style>
- <style:style style:name="Footnote anchor" style:family="text">
- <style:properties style:text-position="super 58%"/>
- </style:style>
- <style:style style:name="code" style:family="text">
- <style:properties style:font-name="Courier"/>
- </style:style>
- <style:style style:name="italic" style:family="text">
- <style:properties fo:font-style="italic"/>
- </style:style>
- <text:outline-style>
- <text:outline-level-style text:level="1" style:num-format=""/>
- <text:outline-level-style text:level="2" style:num-format=""/>
- <text:outline-level-style text:level="3" style:num-format=""/>
- <text:outline-level-style text:level="4" style:num-format=""/>
- <text:outline-level-style text:level="5" style:num-format=""/>
- <text:outline-level-style text:level="6" style:num-format=""/>
- <text:outline-level-style text:level="7" style:num-format=""/>
- <text:outline-level-style text:level="8" style:num-format=""/>
- <text:outline-level-style text:level="9" style:num-format=""/>
- <text:outline-level-style text:level="10" style:num-format=""/>
- </text:outline-style>
- <text:footnotes-configuration style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
- <text:endnotes-configuration style:num-format="i" text:start-value="0"/>
- <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
- </office:styles>
- <office:automatic-styles>
- <style:page-master style:name="pm1">
- <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2.54cm" fo:margin-bottom="2.54cm" fo:margin-left="0cm" fo:margin-right="5cm" style:footnote-max-height="0cm">
- <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
- </style:properties>
- <style:header-style/>
- <style:footer-style/>
- </style:page-master>
- <style:page-master style:name="pm2">
- <style:properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:footnote-max-height="0cm">
- <style:footnote-sep style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
- </style:properties>
- <style:header-style/>
- <style:footer-style/>
- </style:page-master>
- </office:automatic-styles>
- <office:master-styles>
- <style:master-page style:name="Standard" style:page-master-name="pm1"/>
- <style:master-page style:name="Footnote" style:page-master-name="pm2"/>
- </office:master-styles>
-</office:document-styles>
-'''
-
-manifest = '''<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
-<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
- <manifest:file-entry manifest:media-type="application/vnd.sun.xml.writer" manifest:full-path="/"/>
- <manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/"/>
- %s
-</manifest:manifest>
-'''
-
-manifest_format = '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="%s"/>'
-
-content_header = '''<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE office:document-content PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
-<office:document-content xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script" office:class="text" office:version="1.0">
- <office:script/>
- <office:font-decls>
- <style:font-decl style:name="Courier" fo:font-family="Courier" style:font-family-generic="modern" style:font-pitch="fixed"/>
- <style:font-decl style:name="Arial Unicode MS" fo:font-family="&apos;Arial Unicode MS&apos;" style:font-pitch="variable"/>
- <style:font-decl style:name="Thorndale" fo:font-family="Thorndale" style:font-family-generic="roman" style:font-pitch="variable"/>
- </office:font-decls>
- <office:automatic-styles/>
- <office:body>
- <text:sequence-decls>
- <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
- <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
- <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
- <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
- </text:sequence-decls>
-'''
-
-content_footer = '''</office:body>
-</office:document-content>
-'''
diff --git a/sandbox/aahz/OO/OOwriter.py b/sandbox/aahz/OO/OOwriter.py
deleted file mode 100644
index 6a0841040..000000000
--- a/sandbox/aahz/OO/OOwriter.py
+++ /dev/null
@@ -1,676 +0,0 @@
-# Author: Aahz
-# Contact: aahz@pythoncraft.com
-# Revision:
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-"""
-OpenOffice writer
-
-The output is an OpenOffice.org 1.0-compatible document.
-"""
-
-__docformat__ = 'reStructuredText'
-
-
-import sys
-from warnings import warn
-import re
-
-import docutils
-from docutils import nodes, utils, writers, languages
-
-import OOtext
-
-
-section_styles = [
- '.ch title',
- '.head 1',
- '.head 2'
- ]
-
-class Writer(writers.Writer):
-
- supported = ('OpenOffice')
- """Formats this writer supports."""
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.output = None
- self.translator_class = Translator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
-
-
-class Translator(nodes.NodeVisitor):
-
- header = [OOtext.content_header]
- footer = [OOtext.content_footer]
-
- start_para = '\n<text:p text:style-name="%s">\n'
- end_para = '\n</text:p>\n'
-
- start_charstyle = '<text:span text:style-name="%s">'
- end_charstyle = '</text:span>'
-
- line_break = '\n<text:line-break/>'
- re_spaces = re.compile(' +')
- spaces = '<text:s text:c="%d"/>'
-
- re_annotation = re.compile(r'#\d+(?:, #\d+)*$')
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.settings = document.settings
- self.body = []
- self.section_level = 0
- self.skip_para_tag = False
-
- def astext(self):
- return ''.join(self.header + self.body + self.footer)
-
- def encode(self, text):
- """Encode special characters in `text` & return."""
- # @@@ A codec to do these and all other HTML entities would be nice.
- text = text.replace("&", "&amp;")
- text = text.replace("<", "&lt;")
- text = text.replace('"', "&quot;")
- text = text.replace(">", "&gt;")
- return text
-
- def compress_spaces(self, line):
- while 1:
- match = self.re_spaces.search(line)
- if match:
- start, end = match.span()
- numspaces = end - start
- line = line[:start] + (self.spaces % numspaces) + line[end:]
- else:
- break
- return line
-
- def fix_annotation(self, line):
- match = self.re_annotation.search(line)
- if match:
- pos = match.start()
- line = line[:pos] + '|' + line[pos:]
- return line
-
- def visit_Text(self, node):
- self.body.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
- def visit_admonition(self, node, name):
- self.skip_para_tag = True
- self.body.append(self.start_para % '.CALLOUT')
-
- def depart_admonition(self):
- self.body.append(self.end_para)
- self.skip_para_tag = False
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
- def visit_block_quote(self, node):
- self.skip_para_tag = True
- self.body.append(self.start_para % '.quotes')
-
- def depart_block_quote(self, node):
- self.body.append(self.end_para)
- self.skip_para_tag = False
-
- def visit_bullet_list(self, node):
- self.body.append('\n<text:unordered-list text:style-name=".bullet">\n')
-
- def depart_bullet_list(self, node):
- self.body.append('</text:unordered-list>\n')
-
- def visit_caption(self, node):
- self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
-
- def depart_caption(self, node):
- self.body.append('</p>\n')
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- self.body.append(self.starttag(node, 'table', CLASS='citation',
- frame="void", rules="none"))
- self.footnote_backrefs(node)
-
- def depart_citation(self, node):
- self.body.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_citation_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '[', href=href,
- CLASS='citation-reference'))
-
- def depart_citation_reference(self, node):
- self.body.append(']</a>')
-
- def visit_classifier(self, node):
- self.body.append(' <span class="classifier-delimiter">:</span> ')
- self.body.append(self.starttag(node, 'span', '', CLASS='classifier'))
-
- def depart_classifier(self, node):
- self.body.append('</span>')
-
- def visit_colspec(self, node):
- self.colspecs.append(node)
-
- def depart_colspec(self, node):
- pass
-
- def write_colspecs(self):
- width = 0
- for node in self.colspecs:
- width += node['colwidth']
- for node in self.colspecs:
- colwidth = int(node['colwidth'] * 100.0 / width + 0.5)
- self.body.append(self.emptytag(node, 'col',
- colwidth='%i%%' % colwidth))
- self.colspecs = []
-
- def visit_comment(self, node):
- raise nodes.SkipNode
-
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- self.body.append('</dt>\n')
- self.body.append(self.starttag(node, 'dd', ''))
- if len(node) and isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_definition(self, node):
- self.body.append('</dd>\n')
-
- def visit_definition_list(self, node):
- print node.astext()
- self.body.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- self.body.append('</dl>\n')
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- self.body.append(self.starttag(node, 'td', ''))
- if len(node) and isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_description(self, node):
- self.body.append('</td>')
-
- def visit_doctest_block(self, node):
- self.visit_literal_block(node)
-
- def visit_document(self, node):
- pass
-
- def depart_document(self, node):
- pass
-
- def visit_emphasis(self, node):
- self.body.append(self.start_charstyle % 'italic')
-
- def depart_emphasis(self, node):
- self.body.append(self.end_charstyle)
-
- def visit_entry(self, node):
- if isinstance(node.parent.parent, nodes.thead):
- tagname = 'th'
- else:
- tagname = 'td'
- atts = {}
- if node.has_key('morerows'):
- atts['rowspan'] = node['morerows'] + 1
- if node.has_key('morecols'):
- atts['colspan'] = node['morecols'] + 1
- self.body.append(self.starttag(node, tagname, '', **atts))
- self.context.append('</%s>\n' % tagname.lower())
- if len(node) == 0: # empty cell
- self.body.append('&nbsp;')
- elif isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_entry(self, node):
- self.body.append(self.context.pop())
-
- def visit_enumerated_list(self, node):
- """
- The 'start' attribute does not conform to HTML 4.01's strict.dtd, but
- CSS1 doesn't help. CSS2 isn't widely enough supported yet to be
- usable.
- """
- atts = {}
- if node.has_key('start'):
- atts['start'] = node['start']
- if node.has_key('enumtype'):
- atts['class'] = node['enumtype']
- # @@@ To do: prefix, suffix. How? Change prefix/suffix to a
- # single "format" attribute? Use CSS2?
- old_compact_simple = self.compact_simple
- self.context.append((self.compact_simple, self.compact_p))
- self.compact_p = None
- self.compact_simple = (self.options.compact_lists and
- (self.compact_simple
- or self.topic_class == 'contents'
- or self.check_simple_list(node)))
- if self.compact_simple and not old_compact_simple:
- atts['class'] = (atts.get('class', '') + ' simple').strip()
- self.body.append(self.starttag(node, 'ol', **atts))
-
- def depart_enumerated_list(self, node):
- self.compact_simple, self.compact_p = self.context.pop()
- self.body.append('</ol>\n')
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- self.body.append(self.starttag(node, 'tr', '', CLASS='field'))
-
- def depart_field(self, node):
- self.body.append('</tr>\n')
-
- def visit_field_body(self, node):
- self.body.append(self.starttag(node, 'td', '', CLASS='field-body'))
- if len(node) and isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_field_body(self, node):
- self.body.append('</td>\n')
-
- def visit_field_list(self, node):
- self.body.append(self.starttag(node, 'table', frame='void',
- rules='none', CLASS='field-list'))
- self.body.append('<col class="field-name" />\n'
- '<col class="field-body" />\n'
- '<tbody valign="top">\n')
-
- def depart_field_list(self, node):
- self.body.append('</tbody>\n</table>\n')
-
- def visit_field_name(self, node):
- atts = {}
- if self.in_docinfo:
- atts['class'] = 'docinfo-name'
- else:
- atts['class'] = 'field-name'
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'th', '', **atts))
-
- def depart_field_name(self, node):
- self.body.append(':</th>')
- self.body.append(self.context.pop())
-
- def visit_figure(self, node):
- self.body.append(self.start_para % '.figure')
-
- def depart_figure(self, node):
- self.body.append(self.end_para)
-
- def visit_footnote(self, node):
- raise nodes.SkipNode
-
- def footnote_backrefs(self, node):
- warn("footnote backrefs not available")
-
- def depart_footnote(self, node):
- pass
-
- def visit_footnote_reference(self, node):
- name = node['refid']
- id = node['id']
- number = node['auto']
- for footnote in self.document.autofootnotes:
- if name == footnote['name']:
- break
- self.body.append('<text:footnote text:id="%s">\n' % id)
- self.body.append('<text:footnote-citation text:string-value="%s"/>\n' % number)
- self.body.append('<text:footnote-body>\n')
- self.body.append(self.start_para % '.body')
- for child in footnote.children:
- if isinstance(child, nodes.paragraph):
- self.body.append(child.astext())
- self.body.append(self.end_para)
- self.body.append('</text:footnote-body>\n')
- self.body.append('</text:footnote>')
- raise nodes.SkipNode
-
- def depart_footnote_reference(self, node):
- pass
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_header(self, node):
- self.context.append(len(self.body))
-
- def depart_header(self, node):
- start = self.context.pop()
- self.body_prefix.append(self.starttag(node, 'div', CLASS='header'))
- self.body_prefix.extend(self.body[start:])
- self.body_prefix.append('<hr />\n</div>\n')
- del self.body[start:]
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- name = "Figure: %s\n" % node.attributes['uri']
- self.body.append(name)
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_index_entry(self, node):
- index_format = '<text:alphabetical-index-mark text:string-value="%s"/>\n'
- self.body.append(self.start_para % '.body')
- entries = node.astext().split('\n')
- for entry in entries:
- self.body.append(index_format % self.encode(entry))
- self.body.append(self.end_para)
- raise nodes.SkipNode
-
- def visit_interpreted(self, node):
- # @@@ Incomplete, pending a proper implementation on the
- # Parser/Reader end.
- #self.body.append(node['role'] + ':')
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def depart_interpreted(self, node):
- pass
-
- # Don't need footnote labels/numbers
- def visit_label(self, node):
- print "!"
- raise nodes.SkipNode
-
- def visit_legend(self, node):
- self.body.append(self.starttag(node, 'div', CLASS='legend'))
-
- def depart_legend(self, node):
- self.body.append('</div>\n')
-
- def visit_line_block(self, node):
- self.body.append(self.start_para % '.quotes')
- lines = node.astext()
- lines = lines.split('\n')
- lines = self.line_break.join(lines)
- self.body.append(lines)
- self.body.append(self.end_para)
- raise nodes.SkipNode
-
- def visit_list_item(self, node):
- self.body.append('<text:list-item>')
-
- def depart_list_item(self, node):
- self.body.append('</text:list-item>\n')
-
- def visit_literal(self, node):
- self.body.append(self.start_charstyle % 'code')
-
- def depart_literal(self, node):
- self.body.append(self.end_charstyle)
-
- def visit_literal_block(self, node):
- self.body.append(self.start_para % '.code first')
- self.body.append(self.end_para)
- lines = self.encode(node.astext())
- lines = lines.split('\n')
- while lines[-1] == '':
- lines.pop()
- for line in lines:
- self.body.append(self.start_para % '.code')
- line = self.fix_annotation(line)
- line = self.compress_spaces(line)
- self.body.append(line)
- self.body.append(self.end_para)
- self.body.append(self.start_para % '.code last')
- self.body.append(self.end_para)
- raise nodes.SkipNode
-
- def visit_note(self, node):
- self.visit_admonition(node, '.note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
- def visit_option(self, node):
- if self.context[-1]:
- self.body.append(', ')
-
- def depart_option(self, node):
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- self.body.append(node.get('delimiter', ' '))
- self.body.append(self.starttag(node, 'var', ''))
-
- def depart_option_argument(self, node):
- self.body.append('</var>')
-
- def visit_option_group(self, node):
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'td', **atts))
- self.body.append('<kbd>')
- self.context.append(0) # count number of options
-
- def depart_option_group(self, node):
- self.context.pop()
- self.body.append('</kbd></td>\n')
- self.body.append(self.context.pop())
-
- def visit_option_list(self, node):
- self.body.append(
- self.starttag(node, 'table', CLASS='option-list',
- frame="void", rules="none"))
- self.body.append('<col class="option" />\n'
- '<col class="description" />\n'
- '<tbody valign="top">\n')
-
- def depart_option_list(self, node):
- self.body.append('</tbody>\n</table>\n')
-
- def visit_option_list_item(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_option_list_item(self, node):
- self.body.append('</tr>\n')
-
- def visit_option_string(self, node):
- self.body.append(self.starttag(node, 'span', '', CLASS='option'))
-
- def depart_option_string(self, node):
- self.body.append('</span>')
-
- def visit_paragraph(self, node):
- if not self.skip_para_tag:
- self.body.append(self.start_para % '.body')
-
- def depart_paragraph(self, node):
- if not self.skip_para_tag:
- self.body.append(self.end_para)
-
- def visit_problematic(self, node):
- if node.hasattr('refid'):
- self.body.append('<a href="#%s" name="%s">' % (node['refid'],
- node['id']))
- self.context.append('</a>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'span', '', CLASS='problematic'))
-
- def depart_problematic(self, node):
- self.body.append('</span>')
- self.body.append(self.context.pop())
-
- def visit_raw(self, node):
- if node.has_key('format') and node['format'] == 'html':
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def visit_reference(self, node):
- pass
-
- def depart_reference(self, node):
- pass
-
- def visit_row(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- self.body.append('</tr>\n')
-
- def visit_section(self, node):
- self.section_level += 1
-
- def depart_section(self, node):
- self.section_level -= 1
-
- def visit_strong(self, node):
- self.body.append('<strong>')
-
- def depart_strong(self, node):
- self.body.append('</strong>')
-
- def visit_table(self, node):
- self.body.append(
- self.starttag(node, 'table', CLASS="table",
- frame='border', rules='all'))
-
- def depart_table(self, node):
- self.body.append('</table>\n')
-
- def visit_target(self, node):
- if not (node.has_key('refuri') or node.has_key('refid')
- or node.has_key('refname')):
- self.body.append(self.starttag(node, 'a', '', CLASS='target'))
- self.context.append('</a>')
- else:
- self.context.append('')
-
- def depart_target(self, node):
- self.body.append(self.context.pop())
-
- def visit_tbody(self, node):
- self.write_colspecs()
- self.body.append(self.context.pop()) # '</colgroup>\n' or ''
- self.body.append(self.starttag(node, 'tbody', valign='top'))
-
- def depart_tbody(self, node):
- self.body.append('</tbody>\n')
-
- def visit_term(self, node):
- self.body.append(self.starttag(node, 'dt', ''))
-
- def depart_term(self, node):
- """
- Leave the end tag to `self.visit_definition()`, in case there's a
- classifier.
- """
- pass
-
- def visit_tgroup(self, node):
- # Mozilla needs <colgroup>:
- self.body.append(self.starttag(node, 'colgroup'))
- # Appended by thead or tbody:
- self.context.append('</colgroup>\n')
-
- def depart_tgroup(self, node):
- pass
-
- def visit_thead(self, node):
- self.write_colspecs()
- self.body.append(self.context.pop()) # '</colgroup>\n'
- # There may or may not be a <thead>; this is for <tbody> to use:
- self.context.append('')
- self.body.append(self.starttag(node, 'thead', valign='bottom'))
-
- def depart_thead(self, node):
- self.body.append('</thead>\n')
-
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition()
-
- def visit_title(self, node):
- """Only 3 section levels are supported by this writer."""
- title_tag = self.start_para % section_styles[self.section_level]
- self.body.append(title_tag)
-
- def depart_title(self, node):
- self.body.append(self.end_para)
-
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning')
-
- def depart_warning(self, node):
- self.depart_admonition()
-
- def visit_system_message(self, node):
- print node.astext()
-
- def depart_system_message(self, node):
- pass
-
- def unknown_visit(self, node):
- print "Failure processing at line", node.line
- print "Failure is", node.astext()
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
diff --git a/sandbox/aahz/OO/graphics_output.py b/sandbox/aahz/OO/graphics_output.py
deleted file mode 100644
index 35d2f9516..000000000
--- a/sandbox/aahz/OO/graphics_output.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import sys
-import os
-
-SOURCE_EXT = '.fig'
-
-TypeList = {
- 'eps': {
- 'ext': '.eps',
- 'cmd': 'fig2dev -L eps %s %s'
- },
- 'pdf': {
- 'ext': '.pdf',
- 'cmd': 'fig2dev -L pdf %s %s'
- }
- }
-
-type = TypeList[sys.argv[1]]
-SourceDir = sys.argv[2]
-DestDir = sys.argv[3]
-
-for name in os.listdir(SourceDir):
- base, ext = os.path.splitext(name)
- if ext == SOURCE_EXT:
- src = SourceDir + '/' + name
- dest = DestDir + '/' + base + type['ext']
- cmd = type['cmd'] % (src, dest)
- print cmd
- os.system(cmd)
diff --git a/sandbox/aahz/OO/open_office.py b/sandbox/aahz/OO/open_office.py
deleted file mode 100644
index 90e4c4393..000000000
--- a/sandbox/aahz/OO/open_office.py
+++ /dev/null
@@ -1,33 +0,0 @@
-import sys
-import zipfile
-from cStringIO import StringIO
-
-from docutils import core, io
-
-import OOdirectives
-import OOtext
-import OOwriter
-
-pub = core.Publisher(writer=OOwriter.Writer())
-pub.set_reader('standalone', None, 'restructuredtext')
-settings = pub.get_settings()
-pub.source = io.FileInput(settings, source_path=sys.argv[1])
-pub.destination = io.StringOutput(settings)
-content = pub.publish()
-
-manifest_list = [
- ('content.xml', content),
- ('styles.xml', OOtext.styles)
- ]
-
-manifest_entries = []
-for docname, _ in manifest_list:
- manifest_entries.append(OOtext.manifest_format % docname)
-manifest = OOtext.manifest % '\n '.join(manifest_entries)
-manifest_list.append( ('META-INF/manifest.xml', manifest) )
-
-zip = zipfile.ZipFile(sys.argv[2], "w")
-for docname, contents in manifest_list:
- zinfo = zipfile.ZipInfo(docname)
- zip.writestr(zinfo, contents)
-zip.close()
diff --git a/sandbox/aahz/OO/publish.py b/sandbox/aahz/OO/publish.py
deleted file mode 100755
index 006d3fd97..000000000
--- a/sandbox/aahz/OO/publish.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-# Author: David Goodger
-# Contact: goodger@users.sourceforge.net
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-"""
-A minimal front end to the Docutils Publisher, producing pseudo-XML.
-"""
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish, default_description
-
-import OOdirectives
-
-
-description = ('Generates pseudo-XML from standalone reStructuredText '
- 'sources (for testing purposes). ' + default_description)
-
-publish(description=description)
diff --git a/sandbox/bbum/00README.txt b/sandbox/bbum/00README.txt
deleted file mode 100644
index c5d461b6d..000000000
--- a/sandbox/bbum/00README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-=======================
-bbum's Docutils sandbox
-=======================
-
-:Author: Bill Bumgarner
-:Contact: bbum@codefab.com
-:Copyright: See individual modules for copyright & license information
-
-DocArticle
-==========
-
-A plain HTML writer for Docutils. Produces non-CSS based HTML that is
-compliant with the O'Reilly DevCenter's article submission guidelines.
-
diff --git a/sandbox/bbum/ChangeLog b/sandbox/bbum/ChangeLog
deleted file mode 100644
index 598c618e5..000000000
--- a/sandbox/bbum/ChangeLog
+++ /dev/null
@@ -1,38 +0,0 @@
-2003-02-27 Bill Bumgarner <bbum@codefab.com>
- * DocArticle/DocArticle/__init__.py: Added sidebar and title_reference
- support.
-
-2003-01-07 Bill Bumgarner <bbum@codefab.com>
- * DocArticle/DocArticle/__init__.py: Improved formatting of admonitions.
- Sort of. Would like to make them better. Maybe add little icons, if
- icons are enabled (need to fix settings).
- * DocArticle/DocArticle/__init__.py: Improved formatting of
- abstract/dedication block. Now in 'box' w/abstract/dedication centered
- at top. Should all be in italics, but that'll hose the body formatting
- of the contained text.
-
-2003-01-05 Bill Bumgarner <bbum@codefab.com>
- * DocArticle/DocArticle/__init__.py: Can now successfully [I think]
- process test.txt. Output is not exactly pretty yet.
-
-2002-12-28 Bill Bumgarner <bbum@codefab.com>
- * Added support for subtitle, note, and block_quote. Cleaned up a
- compile of CSS leftovers.
- * DocArticle/DocArticle/__init__.py: Added support for arbitrary fields
- and moved docinfo presentation to being table based (so that multiline
- field values actually work). Lots of cleanup-- reordered a bunch of
- methods that had gotten out of order. Added limited support for
- Admonitions-- not at all useful yet.
- (HTMLDocArticleTranslator.visit_enumerated_list): Added support for
- enumerated lists and modified the paragraph tag rules for all lists.
- (HTMLDocArticleTranslator.visit_enumerated_list): Added support for
- non-css based typed enumerated lists.
-
-2002-12-27 Bill Bumgarner <bbum@codefab.com>
- * DocArticle/DocArticle/__init__.py: Added support for subtitle and
- block_quote nodes.
- * Added initial working implementation of DocArticle HTML writer.
- * 00README.txt: Added basic information.
- (HTMLDocArticleTranslator.__init__): Moved to a more traditional
- initialization of instance variables.
-
diff --git a/sandbox/bbum/DocArticle/00README.txt b/sandbox/bbum/DocArticle/00README.txt
deleted file mode 100644
index cf0061624..000000000
--- a/sandbox/bbum/DocArticle/00README.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-==========
-DocArticle
-==========
-
-:Author: Bill Bumgarner
-:Contact: bbum@codefab.com
-:Copyright: 2002 - Bill Bumgarner - All Rights Reserved
-:License: The MIT License -- see LICENSE.txt
-:Abstract: A writer for Docutils_ that produces straight, non-CSS, HTML
- output.
-
-A plain HTML writer for Docutils_. Produces non-CSS based HTML that is
-compliant with the O'Reilly DevCenter's article submission guidelines.
-
-.. _Docutils: http://docutils.sourceforge.net/
diff --git a/sandbox/bbum/DocArticle/DocArticle/DocArticleText.py b/sandbox/bbum/DocArticle/DocArticle/DocArticleText.py
deleted file mode 100644
index c9eec0f53..000000000
--- a/sandbox/bbum/DocArticle/DocArticle/DocArticleText.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Author: Bill Bumgarner
-# Contact: bbum@codefab.com
-# Copyright: 2002 - Bill Bumgarner - All Rights Reserved
-# License: The MIT License -- see LICENSE.txt
-
-"""
-Defines various chunks o' static text that are spewed into Articles.
-
-A sort of half-baked library of templates. Currently extremely limited in scope.
-"""
-
-__docformat__ = 'reStructuredText'
-
-contentStart = """<?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">
-"""
-
-headerStart = """<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-"""
-
-titleStart = """<title>
-"""
-titleEnd = """</title>
-"""
-
-headerEnd = """</head>
-"""
-
-bodyStart = """<body>
-"""
-bodyEnd = """</body>
-"""
-
-contentEnd = """</html>
-"""
diff --git a/sandbox/bbum/DocArticle/DocArticle/__init__.py b/sandbox/bbum/DocArticle/DocArticle/__init__.py
deleted file mode 100644
index 68be34e09..000000000
--- a/sandbox/bbum/DocArticle/DocArticle/__init__.py
+++ /dev/null
@@ -1,941 +0,0 @@
-# Author: Bill Bumgarner
-# Contact: bbum@codefab.com
-# Copyright: 2002 - Bill Bumgarner - All Rights Reserved
-# License: The MIT License -- see LICENSE.txt
-
-"""
-This is the DocArticle package.
-
-This package provides a writer for DocUtils that spews HTML compliant
-with O'Reilly's Dev Center article submission guidelines.
-"""
-
-try:
- x = True
-except NameError:
- True = 1
- False = 0
-
-__docformat__ = 'reStructuredText'
-
-import sys
-from warnings import warn
-import re
-from types import *
-
-import docutils
-from docutils import nodes, utils, writers, languages
-
-from DocArticle import DocArticleText
-
-class DocArticleWriter(writers.Writer):
- supported = ('html',)
- """Formats this writer supports."""
-
- output = None
- """Final translated form of `document`."""
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = HTMLDocArticleTranslator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
-
-SpewNothing = 0
-SpewParagraph = 1
-SpewBreak = 2
-SpewBreakBreak = 3
-SpewNothingThenPara = 4
-
-olTypeTranslator = {
- 'arabic' : '1',
- 'upperalpha' : 'A',
- 'loweralpha' : 'a',
- 'upperroman' : 'I',
- 'lowerroman' : 'i'
- }
-
-class HTMLDocArticleTranslator(nodes.NodeVisitor):
- named_tags = {'a': 1,
- 'applet': 1,
- 'form': 1,
- 'frame': 1,
- 'iframe': 1,
- 'img': 1,
- 'map': 1}
-
- words_and_spaces = re.compile(r'\S+| +|\n')
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.section_level = 0
- self.headerContent = []
- self.bodyContent = []
- self.metaContent = []
- self.context = []
- self.spewTextContext = [True]
- self.spewParaTag = [SpewParagraph]
- self.paraFormat = [(None,None)]
- self.colspecs = []
-
- self.body_pre_docinfo = []
- self.docinfo = []
- self.compact_simple = None
- self.compact_p = 1
-
- self.firstFootnoteVisited = False
-
- # lcode = settings.language_code
- lcode = 'en'
- self.language = languages.get_language(lcode)
-
- def astext(self):
- return ''.join([DocArticleText.contentStart, DocArticleText.headerStart] +
- self.headerContent +
- [DocArticleText.headerEnd, DocArticleText.bodyStart] +
- self.body_pre_docinfo + self.docinfo + self.bodyContent +
- [DocArticleText.bodyEnd, DocArticleText.contentEnd])
-
- def encode(self, text):
- """Encode special characters in `text` & return."""
- # @@@ A codec to do these and all other HTML entities would be nice.
- text = text.replace('&', '&amp;')
- text = text.replace('<', '&lt;')
- text = text.replace('"', '&quot;')
- text = text.replace('>', '&gt;')
- return text
-
- def popAndAppend(self, node):
- possiblePoppedContent = self.context.pop()
- if possiblePoppedContent:
- self.bodyContent.append(possiblePoppedContent)
-
- def attval(self, text,
- whitespace=re.compile('[\n\r\t\v\f]')):
- """Cleanse, HTML encode, and return attribute value text."""
- return self.encode(whitespace.sub(' ', text))
-
- def emptytag(self, node, tagname, suffix='\n', **attributes):
- """Construct and return an XML-compatible empty tag."""
- return self.starttag(node, tagname, suffix, infix=' /', **attributes)
-
- def starttag(self, node, tagname, suffix='\n', infix='', **attributes):
- tagname = tagname.lower()
- atts = {}
- for (name, value) in attributes.items():
- atts[name.lower()] = value
- for att in ('id',): # node attribute overrides
- if node.has_key(att):
- atts[att] = node[att]
- if atts.has_key('id') and self.named_tags.has_key(tagname):
- atts['name'] = atts['id'] # for compatibility with old browsers
- attlist = atts.items()
- attlist.sort()
- parts = [tagname]
- for name, value in attlist:
- if value is None: # boolean attribute
- # According to the HTML spec, ``<element boolean>`` is good,
- # ``<element boolean="boolean">`` is bad.
- # (But the XHTML (XML) spec says the opposite. <sigh>)
- parts.append(name.lower())
- elif isinstance(value, ListType):
- values = [str(v) for v in value]
- parts.append('%s="%s"' % (name.lower(),
- self.attval(' '.join(values))))
- else:
- parts.append('%s="%s"' % (name.lower(),
- self.attval(str(value))))
- return '<%s%s>%s' % (' '.join(parts), infix, suffix)
-
- def visit_Text(self, node):
- if self.spewTextContext[-1]:
- self.bodyContent.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
- def visit_address(self, node):
- self.visit_docinfo_item(node, 'address', meta=None)
- self.bodyContent.append(self.starttag(node, 'pre'))
-
- def depart_address(self, node):
- self.bodyContent.append('\n</pre>\n')
- self.depart_docinfo_item(node)
-
- def visit_admonition(self, node, name, admonitionCellAtts={}):
- baseAdmonitionCellAtts = {"width" : "15%"}
- baseAdmonitionCellAtts.update(admonitionCellAtts)
- self.bodyContent.append('<table width="90%" border="1" align="center">\n'
- '<tbody><tr><td><table width="100%"><tbody><tr>\n')
- self.bodyContent.append(self.starttag(node, 'td', **baseAdmonitionCellAtts))
- self.bodyContent.append(self.language.labels[name.lower()])
- self.bodyContent.append('</td><td>')
-
-
- def depart_admonition(self, node):
- self.bodyContent.append('</td></tr></tbody></table></td></tr></tbody></table>')
-
- def visit_author(self, node):
- self.visit_docinfo_item(node, 'Author')
-
- def depart_author(self, node):
- self.depart_docinfo_item(node)
-
- def visit_authors(self, node):
- pass
-
- def depart_authors(self, node):
- pass
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention', admonitionCellAtts={"bgcolor":"#ffffcc"})
-
- def depart_attention(self, node):
- self.depart_admonition(node)
-
- def visit_block_quote(self, node):
- self.bodyContent.append(self.starttag(node, 'blockquote'))
-
- def depart_block_quote(self, node):
- self.bodyContent.append('</blockquote>\n')
-
- def visit_line_block(self, node):
- self.bodyContent.append(self.starttag(node, 'pre'))
-
- def depart_line_block(self, node):
- self.bodyContent.append('\n</pre>\n')
-
- def visit_bullet_list(self, node):
- self.bodyContent.append(self.starttag(node, 'ul'))
- self.spewParaTag.append(SpewNothing)
-
- def depart_bullet_list(self, node):
- self.bodyContent.append('</ul>\n')
- self.spewParaTag.pop()
-
- def visit_caption(self, node):
- self.bodyContent.append(self.starttag(node, 'p', ''))
-
- def depart_caption(self, node):
- self.bodyContent.append('</p>\n')
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution', admonitionCellAtts={"bgcolor":"#ffff99"})
-
- def depart_caution(self, node):
- self.depart_admonition(node)
-
- def visit_citation(self, node):
- ##! verify col configuration
- self.bodyContent.append(self.starttag(node, 'table'))
- self.bodyContent.append('<colgroup><col /><col /></colgroup>\n'
- '<col />\n'
- '<tbody valign="top">\n'
- '<tr>')
- self.footnote_backrefs(node)
-
- def depart_citation(self, node):
- self.bodyContent.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_citation_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.bodyContent.append(self.starttag(node, 'a', '[', href=href))
-
- def depart_citation_reference(self, node):
- self.bodyContent.append(']</a>')
-
- def visit_classifier(self, node):
- pass
-
- def depart_classifier(self, node):
- pass
-
- def visit_colspec(self, node):
- self.colspecs.append(node)
-
- def depart_colspec(self, node):
- pass
-
- def write_colspecs(self):
- ##! verify
- width = 0
- for node in self.colspecs:
- width += node['colwidth']
- for node in self.colspecs:
- colwidth = int(node['colwidth'] * 100.0 / width + 0.5)
- self.bodyContent.append(self.emptytag(node, 'col', width='%i%%' % colwidth))
- self.colspecs = []
-
- def visit_comment(self, node, sub=re.compile('-(?=-)').sub):
- self.bodyContent.append('<!-- %s -->\n' % sub('- ', node.astext()))
- raise nodes.SkipNode
-
- def visit_contact(self, node):
- self.visit_docinfo_item(node, 'Contact')
-
- def depart_contact(self, node):
- self.depart_docinfo_item(node)
-
- def visit_copyright(self, node):
- self.visit_docinfo_item(node, 'copyright')
-
- def depart_copyright(self, node):
- self.depart_docinfo_item(node)
-
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger', admonitionCellAtts={"bgcolor":"#ff6666"})
-
- def depart_danger(self, node):
- self.depart_admonition(node)
-
- def visit_date(self, node):
- self.visit_docinfo_item(node, 'date')
-
- def depart_date(self, node):
- self.depart_docinfo_item(node)
-
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- self.bodyContent.append('</dt>\n')
- self.bodyContent.append(self.starttag(node, 'dd', ''))
-
- def depart_definition(self, node):
- self.bodyContent.append('</dd>\n')
-
- def visit_definition_list(self, node):
- self.bodyContent.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- self.bodyContent.append('</dl>\n')
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- self.bodyContent.append(self.starttag(node, 'td', ''))
-
- def depart_description(self, node):
- self.bodyContent.append('</td>')
-
- def visit_docinfo(self, node):
- self.context.append(len(self.bodyContent))
- self.bodyContent.append(self.starttag(node, 'table'))
- self.bodyContent.append('<tbody valign="top">\n')
- self.in_docinfo = 1
-
- def depart_docinfo(self, node):
- self.bodyContent.append('</tbody>\n</table>\n')
- self.in_docinfo = None
- start = self.context.pop()
- self.body_pre_docinfo = self.bodyContent[:start]
- self.docinfo = self.bodyContent[start:]
- self.bodyContent = []
-
- def visit_docinfo_item(self, node, name, meta=1):
- if meta:
- self.headerContent.append('<meta name="%s" content="%s" />\n' %
- (name, self.attval(node.astext())))
- self.bodyContent.append(self.starttag(node, 'tr', ''))
- self.bodyContent.append('<th >%s:</th>\n<td>' % self.language.labels[name.lower()])
-
- def depart_docinfo_item(self, node):
- self.bodyContent.append('</td></tr>\n')
-
- def visit_doctest_block(self, node):
- self.bodyContent.append(self.starttag(node, 'pre'))
-
- def depart_doctest_block(self, node):
- self.bodyContent.append('\n</pre>\n')
-
- def visit_document(self, node):
- pass
-
- def depart_document(self, node):
- pass
-
- def visit_emphasis(self, node):
- self.bodyContent.append('<i>')
-
- def depart_emphasis(self, node):
- self.bodyContent.append('</i>')
-
- def visit_entry(self, node):
- if isinstance(node.parent.parent, nodes.thead):
- tagname = 'th'
- else:
- tagname = 'td'
- atts = {}
- if node.has_key('morerows'):
- atts['rowspan'] = node['morerows'] + 1
- if node.has_key('morecols'):
- atts['colspan'] = node['morecols'] + 1
- self.bodyContent.append(self.starttag(node, tagname, '', **atts))
- self.context.append('</%s>\n' % tagname.lower())
- if len(node) == 0: # empty cell
- self.bodyContent.append('&nbsp;')
-
- def depart_entry(self, node):
- self.bodyContent.append(self.context.pop())
-
- def visit_enumerated_list(self, node):
- atts = {}
- if node.has_key('start'):
- atts['start'] = node['start']
- if node.has_key('enumtype'):
- atts['type'] = olTypeTranslator[node['enumtype']]
- self.bodyContent.append(self.starttag(node, 'ol', **atts))
-
- def depart_enumerated_list(self, node):
- self.bodyContent.append('</ol>\n')
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error', admonitionCellAtts={"bgcolor":"#ff6666"})
-
- def depart_error(self, node):
- self.depart_admonition(node)
-
- def visit_field(self, node):
- self.bodyContent.append(self.starttag(node, 'tr', ''))
-
- def depart_field(self, node):
- self.bodyContent.append('</tr>\n')
-
- def visit_field_body(self, node):
- self.bodyContent.append(self.starttag(node, 'td', ''))
- self.spewParaTag.append(SpewBreak)
-
- def depart_field_body(self, node):
- self.bodyContent.append('</td>\n')
- self.spewParaTag.pop()
-
- def visit_field_list(self, node):
- self.bodyContent.append(self.starttag(node, 'table'))
- self.bodyContent.append('<tbody valign="top">\n')
-
- def depart_field_list(self, node):
- self.bodyContent.append('</tbody>\n</table>\n')
-
- def visit_field_name(self, node):
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.bodyContent.append(self.starttag(node, 'th', '', **atts))
-
- def depart_field_name(self, node):
- self.bodyContent.append(':</th>')
- self.bodyContent.append(self.context.pop())
-
- def visit_figure(self, node):
- self.bodyContent.append(self.starttag(node, 'div'))
-
- def depart_figure(self, node):
- self.bodyContent.append('</div>\n')
-
- def check_simple_list(self, node):
- """Check for a simple list that can be rendered compactly."""
- visitor = SimpleListChecker(self.document)
- try:
- node.walk(visitor)
- except nodes.NodeFound:
- return None
- else:
- return 1
-
- def visit_footnote(self, node):
- if not self.firstFootnoteVisited:
- self.bodyContent.append('<hr />')
- self.firstFootnoteVisited = True
- self.bodyContent.append(self.starttag(node, 'table'))
- self.bodyContent.append('<tbody valign="top">\n<tr>')
- self.spewParaTag.append(SpewBreak)
- self.footnote_backrefs(node)
-
- def footnote_backrefs(self, node):
- # if self.settings.footnote_backlinks and node.hasattr('backrefs'):
- if node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- self.context.append('')
- self.context.append('<a href="#%s" name="%s">' % (backrefs[0], node['id']))
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append('<a href="#%s">%s</a>' % (backref, i))
- i += 1
- self.context.append('<em>(%s)</em> ' % ', '.join(backlinks))
- self.context.append('<a name="%s">' % node['id'])
- else:
- self.context.append('')
- self.context.append('<a name="%s">' % node['id'])
-
- def depart_footnote(self, node):
- self.spewParaTag.pop()
- self.paraFormat.pop()
- self.bodyContent.append('</td></tr>\n</tbody>\n</table>\n')
-
- def visit_footnote_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- # format = self.settings.footnote_references
- format = 'superscript'
- if format == 'brackets':
- suffix = '['
- self.context.append(']')
- elif format == 'superscript':
- suffix = '<sup>'
- self.context.append('</sup>')
- else: # shouldn't happen
- suffix = '???'
- self.content.append('???')
- self.bodyContent.append('<b>')
- self.bodyContent.append(suffix)
- self.bodyContent.append(self.starttag(node, 'a', '', href=href))
-
- def depart_footnote_reference(self, node):
- self.bodyContent.append('</a>')
- self.bodyContent.append(self.context.pop())
- self.bodyContent.append('</b>')
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint', admonitionCellAtts={"bgcolor":"#99ff99"})
-
- def depart_hint(self, node):
- self.depart_admonition(node)
-
- def visit_image(self, node):
- atts = node.attributes.copy()
- atts['src'] = atts['uri']
- del atts['uri']
- if not atts.has_key('alt'):
- atts['alt'] = atts['src']
- if isinstance(node.parent, nodes.TextElement):
- self.context.append(None)
- else:
- self.bodyContent.append('<p>')
- self.context.append('</p>\n')
- self.bodyContent.append(self.emptytag(node, 'img', '', **atts))
-
- depart_image = popAndAppend
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important', admonitionCellAtts={"bgcolor":"#ffcccc"})
-
- def depart_important(self, node):
- self.depart_admonition(node)
-
- def visit_interpreted(self, node):
- ###! no idea what to do here
- pass
-
- def depart_interpreted(self, node):
- pass
-
- def visit_label(self, node):
- self.bodyContent.append(self.starttag(node, 'td', '<b>[%s' % self.context.pop()))
-
- def depart_label(self, node):
- self.paraFormat.append(('<font size=-1><i>', '</i></font>'))
- self.bodyContent.append('</a>]</b></td><td>%s' % self.context.pop())
-
- def visit_legend(self, node):
- self.bodyContent.append(self.starttag(node, 'div'))
-
- def depart_legend(self, node):
- self.bodyContent.append('</div>\n')
-
- def visit_list_item(self, node):
- self.bodyContent.append(self.starttag(node, 'li', ''))
- self.spewParaTag.append(SpewNothingThenPara)
-
- def depart_list_item(self, node):
- self.bodyContent.append('</li>\n')
- self.spewParaTag.pop()
-
- def visit_literal(self, node):
- self.bodyContent.append(self.starttag(node, 'code', ''))
- text = node.astext()
- for token in self.words_and_spaces.findall(text):
- if token.strip():
- # Protect text like "--an-option" from bad line wrapping:
- self.bodyContent.append('<span>%s</span>' % self.encode(token))
- elif token in ('\n', ' '):
- # Allow breaks at whitespace:
- self.bodyContent.append(token)
- else:
- # Protect runs of multiple spaces; the last space can wrap:
- self.bodyContent.append('&nbsp;' * (len(token) - 1) + ' ')
- self.bodyContent.append('</code>')
- # Content already processed:
- raise nodes.SkipNode
-
- def visit_literal_block(self, node):
- self.bodyContent.append(self.starttag(node, 'pre'))
-
- def depart_literal_block(self, node):
- self.bodyContent.append('\n</pre>\n')
-
- def visit_meta(self, node):
- self.headerContent.append(self.emptytag(node, 'meta', **node.attributes))
-
- def depart_meta(self, node):
- pass
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition(node)
-
- def visit_option(self, node):
- if self.context[-1]:
- self.bodyContent.append(', ')
-
- def depart_option(self, node):
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- self.bodyContent.append(node.get('delimiter', ' '))
- self.bodyContent.append(self.starttag(node, 'var', ''))
-
- def depart_option_argument(self, node):
- self.bodyContent.append('</var>')
-
- def visit_option_group(self, node):
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.bodyContent.append(self.starttag(node, 'td', **atts))
- self.bodyContent.append('<kbd>') ###! What tag is this?
- self.context.append(0) # count number of options
-
- def depart_option_group(self, node):
- self.context.pop()
- self.bodyContent.append('</kbd></td>\n')
- self.bodyContent.append(self.context.pop())
-
- def visit_option_list(self, node):
- self.bodyContent.append(self.starttag(node, 'table'))
- self.bodyContent.append('<tbody valign="top">\n')
-
- def depart_option_list(self, node):
- self.bodyContent.append('</tbody>\n</table>\n')
-
- def visit_option_list_item(self, node):
- self.bodyContent.append(self.starttag(node, 'tr', ''))
-
- def depart_option_list_item(self, node):
- self.bodyContent.append('</tr>\n')
-
- def visit_option_string(self, node):
- self.bodyContent.append(self.starttag(node, 'span', ''))
-
- def depart_option_string(self, node):
- self.bodyContent.append('</span>')
-
- def visit_organization(self, node):
- self.visit_docinfo_item(node, 'organization')
-
- def depart_organization(self, node):
- self.depart_docinfo_item(node)
-
- def visit_paragraph(self, node):
- currentSpewParaTag = self.spewParaTag[-1]
- if currentSpewParaTag == SpewParagraph:
- self.bodyContent.append(self.starttag(node, 'p', ''))
- self.context.append('</p>\n')
- elif currentSpewParaTag == SpewBreak:
- self.context.append('<br />\n')
- elif currentSpewParaTag == SpewBreakBreak:
- self.context.append('<br /><br />\n')
- elif currentSpewParaTag == SpewNothingThenPara:
- self.context.append(None)
- self.spewParaTag[-1] = SpewParagraph
- else:
- self.context.append(None)
-
- start, end = self.paraFormat[-1]
- if start:
- self.bodyContent.append(start)
- if end:
- self.context.append(end)
- else:
- self.context.append(None)
-
- def depart_paragraph(self, node):
- self.popAndAppend(node) # pop end formatting tag, if any
- self.popAndAppend(node) # pop end paragraph tag, if any
-
- def visit_problematic(self, node):
- if node.hasattr('refid'):
- self.bodyContent.append('<a href="#%s" name="%s">' % (node['refid'], node['id']))
- self.context.append('</a>')
- else:
- self.context.append('')
- self.bodyContent.append(self.starttag(node, 'span', ''))
-
- def depart_problematic(self, node):
- self.bodyContent.append('</span>')
- self.bodyContent.append(self.context.pop())
-
- def visit_reference(self, node):
- if node.has_key('refuri'):
- href = node['refuri']
- elif node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.bodyContent.append(self.starttag(node, 'a', '', href=href))
- self.context.append('</a>')
-
- depart_reference = popAndAppend
-
- def visit_revision(self, node):
- self.visit_docinfo_item(node, 'revision')
-
- def depart_revision(self, node):
- self.depart_docinfo_item(node)
-
- def visit_row(self, node):
- self.bodyContent.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- self.bodyContent.append('</tr>\n')
-
- def visit_section(self, node):
- self.section_level += 1
- #hTag = 'h%s'% self.section_level
- #self.bodyContent.append(self.starttag(node, hTag))
- #self.bodyContent.append('</%s>\n' % hTag)
-
- def depart_section(self, node):
- self.section_level -= 1
-
- def visit_sidebar(self, node):
- self.bodyContent.append('<hr width="80%" align="center"/>')
- self.bodyContent.append('<table border="0" width="80%" align="center"><tbody><tr><td>')
-
- def depart_sidebar(self, node):
- self.bodyContent.append('</td></tr></tbody></table>\n')
- self.bodyContent.append('<hr width="80%" align="center"/>')
-
- def visit_status(self, node):
- self.visit_docinfo_item(node, 'status', meta=None)
-
- def depart_status(self, node):
- self.depart_docinfo_item(node)
-
- def visit_strong(self, node):
- self.bodyContent.append('<strong>')
-
- def depart_strong(self, node):
- self.bodyContent.append('</strong>')
-
- def visit_substitution_definition(self, node):
- raise nodes.SkipNode # internal
-
- def visit_substitution_reference(self, node):
- pass
-
- def visit_subtitle(self, node):
- self.bodyContent.append(self.starttag(node, 'h3', ''))
-
- def depart_subtitle(self, node):
- self.bodyContent.append('</h3>\n')
-
- def visit_table(self, node):
- self.bodyContent.append(self.starttag(node, 'table'))
-
- def depart_table(self, node):
- self.bodyContent.append('</table>\n')
-
- def visit_target(self, node):
- if not (node.has_key('refuri') or node.has_key('refid') or node.has_key('refname')):
- self.bodyContent.append(self.starttag(node, 'a', ''))
- self.context.append('</a>')
- else:
- self.context.append(None)
-
- depart_target = popAndAppend
-
- def visit_tbody(self, node):
- self.write_colspecs()
- self.bodyContent.append(self.context.pop()) # '</colgroup>\n' or ''
- self.bodyContent.append(self.starttag(node, 'tbody', valign='top'))
-
- def depart_tbody(self, node):
- self.bodyContent.append('</tbody>\n')
-
- def visit_term(self, node):
- self.bodyContent.append(self.starttag(node, 'dt', ''))
-
- def depart_term(self, node):
- pass
-
- def visit_tgroup(self, node):
- ###! verify
- # Mozilla needs <colgroup>:
- self.bodyContent.append(self.starttag(node, 'colgroup'))
- # Appended by thead or tbody:
- self.context.append('</colgroup>\n')
-
- def depart_tgroup(self, node):
- pass
-
- def visit_thead(self, node):
- self.write_colspecs()
- self.bodyContent.append(self.context.pop()) # '</colgroup>\n'
- # There may or may not be a <thead>; this is for <tbody> to use:
- self.context.append('')
- self.bodyContent.append(self.starttag(node, 'thead', valign='bottom'))
-
- def depart_thead(self, node):
- self.bodyContent.append('</thead>\n')
-
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition(node)
-
- def visit_title(self, node):
- if isinstance(node.parent, nodes.topic) and (node.parent.attributes.get('name', None) != 'contents'):
- self.bodyContent.append('<i><center>')
- if node.parent.hasattr('id'):
- self.bodyContent.append(self.starttag({},'a','',name=node.parent['id']))
- self.context.append('</a></center></i><br />\n')
- else:
- self.context.append('</center></i><br />\n')
- elif self.section_level == 0:
- self.headerContent.append(DocArticleText.titleStart)
- self.headerContent.append(self.encode(node.astext()))
- self.headerContent.append(DocArticleText.titleEnd)
- self.bodyContent.append(self.starttag(node, 'h2', ''))
- self.context.append('</h2>\n')
- else:
- ### O'Reilly uses h2 to denote title and h3 for all sections. In theory,
- ### nothing should hang below h3. In practice, we leave it up to the
- ### author.
- level = self.section_level + 1
- self.bodyContent.append(self.starttag(node, 'h%s' % level, ''))
- atts = {}
- if node.parent.hasattr('id'):
- atts['name'] = node.parent['id']
- if node.hasattr('refid'):
- atts['href'] = '#' + node['refid']
- self.bodyContent.append(self.starttag({}, 'a', '', **atts))
- self.context.append('</a></h%s>\n' % level)
-
- def depart_title(self, node):
- self.popAndAppend(node)
-
- def visit_title_reference(self, node):
- self.bodyContent.append(self.starttag(node, 'cite', ''))
-
- def depart_title_reference(self, node):
- self.bodyContent.append('</cite>')
-
- def visit_topic(self, node):
- if node.attributes.get('name', None) != 'contents':
- self.spewParaTag.append(SpewNothingThenPara)
- self.bodyContent.append('<table border="1" width="80%" align="center"><tbody><tr><td>')
-
- def depart_topic(self, node):
- if node.attributes.get('name', None) != 'contents':
- self.bodyContent.append('</td></tr></tbody></table>\n')
- self.spewParaTag.pop()
-
- def visit_transition(self, node):
- self.bodyContent.append(self.emptytag(node, 'hr'))
-
- def depart_transition(self, node):
- pass
-
- def visit_version(self, node):
- self.visit_docinfo_item(node, 'version')
-
- def depart_version(self, node):
- self.depart_docinfo_item(node)
-
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning', admonitionCellAtts={"bgcolor":"#ffff33"})
-
- def depart_warning(self, node):
- self.depart_admonition(node)
-
- def unknown_visit(self, node):
- print 'Node: %s' % node.__class__.__name__
- print "Failure processing at line (%s) of node:\n %s" % (node.line, node.pformat())
- raise NotImplementedError('visiting unknown node type: %s'
- % node.__class__.__name__)
-
- def visit_system_message(self, node):
- if node['level'] < self.document.reporter['writer'].report_level:
- # Level is too low to display:
- raise nodes.SkipNode
- self.bodyContent.append(self.starttag(node, 'div'))
- self.bodyContent.append('<p>')
- attr = {}
- backref_text = ''
- if node.hasattr('id'):
- attr['name'] = node['id']
- if node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- backref_text = ('; <em><a href="#%s">backlink</a></em>'
- % backrefs[0])
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append('<a href="#%s">%s</a>' % (backref, i))
- i += 1
- backref_text = ('; <em>backlinks: %s</em>'
- % ', '.join(backlinks))
- if node.hasattr('line'):
- line = ', line %s' % node['line']
- else:
- line = ''
- if attr:
- a_start = self.starttag({}, 'a', '', **attr)
- a_end = '</a>'
- else:
- a_start = a_end = ''
- self.bodyContent.append('System Message: %s%s/%s%s (<tt>%s</tt>%s)%s</p>\n'
- % (a_start, node['type'], node['level'], a_end,
- node['source'], line, backref_text))
-
- def depart_system_message(self, node):
- self.bodyContent.append('</div>\n')
-
diff --git a/sandbox/bbum/DocArticle/LICENSE.txt b/sandbox/bbum/DocArticle/LICENSE.txt
deleted file mode 100644
index 435339fe2..000000000
--- a/sandbox/bbum/DocArticle/LICENSE.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-(This is the MIT license)
-
- Copyright (c) 2002 - Bill Bumgarner - All Rights Reserved.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-
diff --git a/sandbox/bbum/DocArticle/docarticle.py b/sandbox/bbum/DocArticle/docarticle.py
deleted file mode 100755
index fe1f68c78..000000000
--- a/sandbox/bbum/DocArticle/docarticle.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-# Author: Bill Bumgarner
-# Contact: bbum@codefab.com
-# Copyright: This module has been placed in the public domain.
-
-"""
-docarticle.py
-=============
-
-This module provides a simple command line interface that uses the
-DocArticle HTML writer to produce plain HTML output from
-ReStructuredText source.
-"""
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-from DocArticle import DocArticleWriter
-
-description = ("Generates plain HTML. " + default_description)
-
-publish_cmdline(writer=DocArticleWriter(), description=description)
diff --git a/sandbox/bbum/DocArticle/setup.py b/sandbox/bbum/DocArticle/setup.py
deleted file mode 100755
index 8557e4554..000000000
--- a/sandbox/bbum/DocArticle/setup.py
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/usr/bin/env python
-
-# Author: Bill Bumgarner
-# Contact: bbum@codefab.com
-# Copyright: 2002 - Bill Bumgarner - All Rights Reserved
-# License: The MIT License -- see LICENSE.txt
-
-from distutils.core import setup
-
-setup(name = "DocArticle",
- version = "0.1",
- description = "Turn reStructuredText source into O'Reilly DevCenter compatible HTML.",
- author = "Bill Bumgarner",
- url = "mailto:bbum@codefab.com",
- author_email = "bbum@codefab.com",
- packages = ['DocArticle'],
- scripts = ['docarticle.py']
- )
diff --git a/sandbox/blais/css_tricks/README.txt b/sandbox/blais/css_tricks/README.txt
deleted file mode 100644
index 9920d5968..000000000
--- a/sandbox/blais/css_tricks/README.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-.. -*- mode: text; fill-column: 70; truncate-lines: t -*-
-
-==========
-CSS Tricks
-==========
-
-:Author: Martin Blais <blais@iro.umontreal.ca>
-:Date: $Date$
-
-This mini-project is meant to contain neat tricks with cascading
-stylesheet to spice up the looks of reST documents converted to HTML
-with the default HTML converter.
diff --git a/sandbox/blais/css_tricks/boxed_titles/castro.png b/sandbox/blais/css_tricks/boxed_titles/castro.png
deleted file mode 100644
index b75456b6b..000000000
--- a/sandbox/blais/css_tricks/boxed_titles/castro.png
+++ /dev/null
Binary files differ
diff --git a/sandbox/blais/css_tricks/boxed_titles/clinton.png b/sandbox/blais/css_tricks/boxed_titles/clinton.png
deleted file mode 100644
index eb13abd8d..000000000
--- a/sandbox/blais/css_tricks/boxed_titles/clinton.png
+++ /dev/null
Binary files differ
diff --git a/sandbox/blais/css_tricks/boxed_titles/docutils.conf b/sandbox/blais/css_tricks/boxed_titles/docutils.conf
deleted file mode 100644
index 21677a51f..000000000
--- a/sandbox/blais/css_tricks/boxed_titles/docutils.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[options]
-
-stylesheet-path: style.css
diff --git a/sandbox/blais/css_tricks/boxed_titles/index.txt b/sandbox/blais/css_tricks/boxed_titles/index.txt
deleted file mode 100644
index 07e894063..000000000
--- a/sandbox/blais/css_tricks/boxed_titles/index.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-.. -*- mode: rst; -*-
-
-.. image:: castro.png
- :align: left
-
-Box Title
-=========
-
-.. .. raw:: html
-..
-.. <img src="castro.png" alt="My Face" class="home-image1" />
-.. <h1 class="box-title">Viva Los Boxed Titles!</h1>
-
-This is a trick that shows how to do a kind of slightly fancier heading with an
-image by using a tiny bit of raw HTML and CSS. There would be a way to minimize
-the few raw HTML directives that this requires:
-
-From <http://docutils.sf.net/spec/notes.html#directives>:
-
-Add a "class" option to many/most directives, to set an arbitrary "class"
-attribute on the enclosing element? Perhaps "name" as well?
-
-It may be useful to add an option [*] to the HTML writer to restrict the
-document title to <head><title> only, and not include it in the document body.
-As for the "raw" stuff, a combination of the "image" directive's "align" option,
-the yet-to-be-implemented "class" directive, and stylesheet magic may allow such
-effects without resorting to raw HTML.
-
-We continue with a similar trick for the bottom part.
-
-.. raw:: html
-
- <img SRC="clinton.png" class="home-image2" />
- <h2 class="box-title">I love boxed titles too!</h2>
-
-Oh yeah!
-
diff --git a/sandbox/blais/css_tricks/boxed_titles/style.css b/sandbox/blais/css_tricks/boxed_titles/style.css
deleted file mode 100644
index 9fe378f1e..000000000
--- a/sandbox/blais/css_tricks/boxed_titles/style.css
+++ /dev/null
@@ -1,16 +0,0 @@
-.home-image1 { float: left; border: 0; padding: 5px; }
-.home-image2 { float: right; border: 0; padding: 5px; }
-
-H1 {
- background-color: #EEF;
- border: thin dashed black;
- padding: 10px;
- margin: 20px
-}
-
-.box-title {
- background-color: #EEF;
- border: thin dashed black;
- padding: 10px;
- margin: 20px
-}
diff --git a/sandbox/blais/css_tricks/section_based/docutils.conf b/sandbox/blais/css_tricks/section_based/docutils.conf
deleted file mode 100644
index 21677a51f..000000000
--- a/sandbox/blais/css_tricks/section_based/docutils.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[options]
-
-stylesheet-path: style.css
diff --git a/sandbox/blais/css_tricks/section_based/index.txt b/sandbox/blais/css_tricks/section_based/index.txt
deleted file mode 100644
index fcec84658..000000000
--- a/sandbox/blais/css_tricks/section_based/index.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-.. -*- mode: rst; -*-
-
-=========================
-Section-Based CSS Changes
-=========================
-
-Introduction
-------------
-
-In this example, we just want to demonstrate simply that one can customize the
-content style by using CSS with the automatically-generated title classes.
-
-This is a bit of a hack but it can be useful under some circumstances.
-
-Red Section
------------
-
-For example, this section contains red items.
-
-* Yes, this should be read.
-* No, you must be ``red``.
-
-
-Green Section
--------------
-
-* But here we turn green.
-
-
-Blue Section
-------------
-
-* A problem with this approach is that if you change the section title the CSS
- file has to be changed as well.
-
diff --git a/sandbox/blais/css_tricks/section_based/style.css b/sandbox/blais/css_tricks/section_based/style.css
deleted file mode 100644
index 6754ed865..000000000
--- a/sandbox/blais/css_tricks/section_based/style.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.section#red-section LI {
- color: red;
-}
-
-.section#green-section LI {
- color: green;
-}
-
-.section#blue-section LI {
- color: blue;
-}
diff --git a/sandbox/davidg/infrastructure/docutils-update b/sandbox/davidg/infrastructure/docutils-update
deleted file mode 100755
index 12d7640ac..000000000
--- a/sandbox/davidg/infrastructure/docutils-update
+++ /dev/null
@@ -1,109 +0,0 @@
-#! /bin/sh
-# $Id$
-#
-# This script is installed as a cron job to automatically update the
-# Docutils web site whenever the CVS files change. Any .html document
-# with a corresponding .txt file is regenerated whenever the .txt
-# changes.
-#
-# Options:
-# -e Access CVS as current user ("ext" instead of "pserver"; requires
-# authentication).
-# -p Run from the project directory.
-# -t Run the script in trace mode ("set -o xtrace").
-# -u Regenerate .html unconditionally.
-
-projdir=/home/groups/d/do/docutils
-project=docutils
-dest=$projdir/htdocs
-tmp=$projdir/tmp/$project
-pylib=$projdir/lib/python
-lib=$pylib/$project
-root=
-
-export CVS_RSH=ssh
-export CVSROOT=:pserver:anonymous@cvs1:/cvsroot/$project
-
-trace=0
-unconditional=0
-
-while getopts eptu opt
-do
- case $opt in
- e) root="-d:ext:${USER}@cvs1:/cvsroot/docutils" ;;
- p) export PYTHONPATH=$pylib:$lib;;
- t) trace=1;;
- u) unconditional=1;;
- \?) exit 2;;
- esac
-done
-shift `expr $OPTIND - 1`
-
-if [ $trace -eq 1 ] ; then
- set -o xtrace
-fi
-
-# prep the tmp area
-rm -rf $tmp 2>&1 > /dev/null
-mkdir -p $tmp 2>&1 > /dev/null
-cd $tmp
-
-# gather the materials
-cvs -Q -z3 $root export -rHEAD $project sandbox web
-
-if [ $? -ne 0 ] ; then
- exit 1
-fi
-
-# remove junk
-find -name .cvsignore | xargs rm
-
-# ensure executable bits are set
-chmod +x $project/*.py
-chmod +x $project/tools/*.py
-chmod +x $project/test/alltests.py
-find $project/test -name 'test_*.py' | xargs chmod +x
-
-# create the snapshots
-tar -czf $project-snapshot.tgz $project
-tar -czf $project-sandbox-snapshot.tgz sandbox
-tar -czf $project-web-snapshot.tgz web
-( cd sandbox/gschwant ; tar -czf ../../docfactory-snapshot.tgz docfactory )
-
-# plant the snapshots
-mv *snapshot.tgz $dest
-
-# update htdocs
-cd $project
-cp -ru . $dest
-cd ..
-cp -ru sandbox $dest
-cd web
-cp -ru . $dest
-
-# destroy the evidence
-cd
-rm -rf $tmp
-
-# update library area
-cd $lib
-cvs -Q $root update 2>&1 > /dev/null
-
-# update HTML docs
-cd $dest/tools
-for htmlfile in `find .. -name '*.html'` ; do
- dir=`dirname $htmlfile`
- base=`basename $htmlfile .html`
- txtfile=$dir/$base.txt
- if [ -e $txtfile ] ; then
- if [ $unconditional -eq 1 -o $txtfile -nt $htmlfile ] ; then
- if [ "${base:0:4}" == "pep-" ] ; then
- echo "$txtfile (PEP)"
- ~/bin/python $lib/tools/pep2html.py $txtfile
- else
- echo $txtfile
- ~/bin/python $lib/tools/html.py --config=$dir/docutils.conf $txtfile $htmlfile
- fi
- fi
- fi
-done
diff --git a/sandbox/davidg/pysource_reader/en.py b/sandbox/davidg/pysource_reader/en.py
deleted file mode 100644
index 78a383ab3..000000000
--- a/sandbox/davidg/pysource_reader/en.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#! /usr/bin/env python
-
-"""
-:Author: David Goodger
-:Contact: goodger@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-"""
-
-interpreted = {
- 'package': nodes.package,
- 'module': nodes.module,
- 'class': nodes.inline_class,
- 'method': nodes.method,
- 'function': nodes.function,
- 'variable': nodes.variable,
- 'parameter': nodes.parameter,
- 'type': nodes.type,
- 'class attribute': nodes.class_attribute,
- 'classatt': nodes.class_attribute,
- 'instance attribute': nodes.instance_attribute,
- 'instanceatt': nodes.instance_attribute,
- 'module attribute': nodes.module_attribute,
- 'moduleatt': nodes.module_attribute,
- 'exception class': nodes.exception_class,
- 'exception': nodes.exception_class,
- 'warning class': nodes.warning_class,
- 'warning': nodes.warning_class,}
-"""Mapping of interpreted text role name to nodes.py class."""
diff --git a/sandbox/davidg/pysource_reader/nodes.py b/sandbox/davidg/pysource_reader/nodes.py
deleted file mode 100644
index 6aae3bdb6..000000000
--- a/sandbox/davidg/pysource_reader/nodes.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#! /usr/bin/env python
-
-"""
-:Author: David Goodger
-:Contact: goodger@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-"""
-
-from dps import nodes
-from dps.nodes import Element, TextElement, Structural, Component, Inline
-
-
-# =====================
-# Structural Elements
-# =====================
-
-class package_section(Structural, Element): pass
-class module_section(Structural, Element): pass
-class class_section(Structural, Element): pass
-class method_section(Structural, Element): pass
-class function_section(Structural, Element): pass
-class module_attribute_section(Structural, Element): pass
-class class_attribute_section(Structural, Element): pass
-class instance_attribute_section(Structural, Element): pass
-
-# Structural Support Elements
-# ---------------------------
-
-class inheritance_list(Component, Element): pass
-class parameter_list(Component, Element): pass
-class parameter_item(Component, Element): pass
-class optional_parameters(Component, Element): pass
-class parameter_tuple(Component, Element): pass
-class parameter_default(Component, TextElement): pass
-class initial_value(Component, TextElement): pass
-
-
-# =================
-# Inline Elements
-# =================
-
-class package(Component, Inline, TextElement): pass
-class module(Component, Inline, TextElement): pass
-
-
-class inline_class(Component, Inline, TextElement):
-
- tagname = 'class'
-
-
-class method(Component, Inline, TextElement): pass
-class function(Component, Inline, TextElement): pass
-class variable(Inline, TextElement): pass
-class parameter(Component, Inline, TextElement): pass
-class type(Inline, TextElement): pass
-class class_attribute(Component, Inline, TextElement): pass
-class module_attribute(Component, Inline, TextElement): pass
-class instance_attribute(Component, Inline, TextElement): pass
-class exception_class(Inline, TextElement): pass
-class warning_class(Inline, TextElement): pass
-
-
-class SpecificVisitor(nodes.SpecificVisitor):
-
- """
- """
-
- def visit_class_attribute(self, node, ancestry): pass
- def visit_class_attribute_section(self, node, ancestry): pass
- def visit_class_section(self, node, ancestry): pass
- def visit_exception_class(self, node, ancestry): pass
- def visit_function(self, node, ancestry): pass
- def visit_function_section(self, node, ancestry): pass
- def visit_inheritance_list(self, node, ancestry): pass
- def visit_initial_value(self, node, ancestry): pass
- def visit_inline_class(self, node, ancestry): pass
- def visit_instance_attribute(self, node, ancestry): pass
- def visit_instance_attribute_section(self, node, ancestry): pass
- def visit_method(self, node, ancestry): pass
- def visit_method_section(self, node, ancestry): pass
- def visit_module(self, node, ancestry): pass
- def visit_module_attribute(self, node, ancestry): pass
- def visit_module_attribute_section(self, node, ancestry): pass
- def visit_module_section(self, node, ancestry): pass
- def visit_optional_parameters(self, node, ancestry): pass
- def visit_package(self, node, ancestry): pass
- def visit_package_section(self, node, ancestry): pass
- def visit_parameter(self, node, ancestry): pass
- def visit_parameter_default(self, node, ancestry): pass
- def visit_parameter_item(self, node, ancestry): pass
- def visit_parameter_list(self, node, ancestry): pass
- def visit_parameter_tuple(self, node, ancestry): pass
- def visit_type(self, node, ancestry): pass
- def visit_variable(self, node, ancestry): pass
- def visit_warning_class(self, node, ancestry): pass
diff --git a/sandbox/dreamcatcher/ChangeLog b/sandbox/dreamcatcher/ChangeLog
deleted file mode 100644
index aa1f76093..000000000
--- a/sandbox/dreamcatcher/ChangeLog
+++ /dev/null
@@ -1,13 +0,0 @@
-2003-05-03 Sidnei da Silva <sidnei@x3ng.com>
-
- * rlpdf/rlpdf.py: Added some options to the Writer. Added
- footnotes, backrefs, topic. Works with docutils/tools/test.txt,
- but the output needs work on the stylesheet.
-
-2003-05-02 Sidnei da Silva <sidnei@x3ng.com>
-
- * rlpdf/rlpdf.py (Writer.translate): use StringIO as output for
- Reportlab and set the output to the writer output.
- (PDFTranslator.visit_title): Fix weird logic. node.parent['id']
- didn't always existed.
-
diff --git a/sandbox/dreamcatcher/reportlabs.diff b/sandbox/dreamcatcher/reportlabs.diff
deleted file mode 100644
index ba2c07e8a..000000000
--- a/sandbox/dreamcatcher/reportlabs.diff
+++ /dev/null
@@ -1,1258 +0,0 @@
-Index: lib/rparsexml.py
-===================================================================
-RCS file: /cvsroot/reportlab/reportlab/lib/rparsexml.py,v
-retrieving revision 1.2
-diff -u -r1.2 rparsexml.py
---- lib/rparsexml.py 4 Nov 2002 00:11:48 -0000 1.2
-+++ lib/rparsexml.py 28 May 2003 19:45:52 -0000
-@@ -168,15 +168,15 @@
- # raise ValueError, "I don't handle ampersands yet!!!"
- docontents = 1
- if firstbracket<0:
-- # no tags
-- #if verbose: print "no tags"
-- if toplevel is not None:
-- #D = {NAMEKEY: NONAME, CONTENTSKEY: [xmltext[cursor:]]}
-- ContentList = [xmltext[cursor:]]
-- ContentList = unEscapeContentList(ContentList)
-- return (NameString, AttDict, ContentList, ExtraStuff)
-- else:
-- raise ValueError, "no tags at non-toplevel %s" % `xmltext[cursor:cursor+20]`
-+ # no tags
-+ #if verbose: print "no tags"
-+ if toplevel is not None:
-+ #D = {NAMEKEY: NONAME, CONTENTSKEY: [xmltext[cursor:]]}
-+ ContentList = [xmltext[cursor:]]
-+ ContentList = unEscapeContentList(ContentList)
-+ return ((NameString, AttDict, ContentList, ExtraStuff), cursor)
-+ else:
-+ raise ValueError, "no tags at non-toplevel %s" % `xmltext[cursor:cursor+20]`
- #D = {}
- L = []
- # look for start tag
-Index: pdfgen/canvas.py
-===================================================================
-RCS file: /cvsroot/reportlab/reportlab/pdfgen/canvas.py,v
-retrieving revision 1.111
-diff -u -r1.111 canvas.py
---- pdfgen/canvas.py 10 Apr 2003 00:01:17 -0000 1.111
-+++ pdfgen/canvas.py 28 May 2003 19:45:54 -0000
-@@ -429,13 +429,13 @@
- is to keep the user's current zoom settings. the last
- arguments may or may not be needed depending on the
- choice of 'fitType'.
--
-+
- Fit types and the other arguments they use are:
- /XYZ left top zoom - fine grained control. null
- or zero for any of the parameters means 'leave
- as is', so "0,0,0" will keep the reader's settings.
- NB. Adobe Reader appears to prefer "null" to 0's.
--
-+
- /Fit - entire page fits in window
-
- /FitH top - top coord at top of window, width scaled
-@@ -443,7 +443,7 @@
-
- /FitV left - left coord at left of window, height
- scaled to fit
--
-+
- /FitR left bottom right top - scale window to fit
- the specified rectangle
-
-@@ -464,7 +464,7 @@
- right = "null"
- if zoom is None:
- zoom = "null"
--
-+
- if fitType == "XYZ":
- dest.xyz(left,top,zoom)
- elif fitType == "Fit":
-@@ -483,7 +483,7 @@
- elif fitType == "FitBV":
- dest.fitbv(left)
- else:
-- raise "Unknown Fit type %s" % (fitType,)
-+ raise "Unknown Fit type %s" % (fitType,)
-
- dest.setPage(pageref)
- return dest
-@@ -498,7 +498,7 @@
- the page."""
- #This method should probably be deprecated since it is just a sub-set of bookmarkPage
- return self.bookmarkPage(key,fitType="FitH",top=yhorizontal)
--
-+
- def bookmarkHorizontal(self, key, relativeX, relativeY):
- """w.r.t. the current transformation, bookmark this horizontal."""
- (xt, yt) = self.absolutePosition(relativeX,relativeY)
-@@ -829,7 +829,7 @@
- assert rot % 90.0 == 0.0, "Rotation must be a multiple of 90 degrees"
- self._pageRotation = rot
-
--
-+
- def addLiteral(self, s, escaped=1):
- """introduce the literal text of PDF operations s into the current stream.
- Only use this if you are an expert in the PDF file format."""
-Index: platypus/para.py
-===================================================================
-RCS file: /cvsroot/reportlab/reportlab/platypus/para.py,v
-retrieving revision 1.6
-diff -u -r1.6 para.py
---- platypus/para.py 9 Apr 2003 22:58:37 -0000 1.6
-+++ platypus/para.py 28 May 2003 19:45:55 -0000
-@@ -63,7 +63,8 @@
- from reportlab.platypus.flowables import Flowable
- from reportlab.lib import colors
-
--import string
-+from types import StringType, UnicodeType, InstanceType, TupleType, ListType, FloatType
-+from string import letters as LETTERS, whitespace as WHITESPACE
-
- # SET THIS TO CAUSE A VIEWING BUG WITH ACROREAD 3 (for at least one input)
- # CAUSEERROR = 0
-@@ -91,7 +92,6 @@
- program = []
- self.lineOpHandlers = [] # for handling underlining and hyperlinking, etc
- self.program = program
-- #self.
- self.indent = self.rightIndent = 0.0
- self.baseindent = 0.0 # adjust this to add more indentation for bullets, eg
- self.fontName = "Helvetica"
-@@ -102,10 +102,12 @@
- from reportlab.lib.enums import TA_LEFT
- self.alignment = TA_LEFT
- self.textStateStack = []
-+
- TEXT_STATE_VARIABLES = ("indent", "rightIndent", "fontName", "fontSize",
- "leading", "fontColor", "lineOpHandlers", "rise",
- "alignment")
- #"textStateStack")
-+
- def pushTextState(self):
- state = []
- for var in self.TEXT_STATE_VARIABLES:
-@@ -116,6 +118,7 @@
- #print "push", self.textStateStack
- #print "push", len(self.textStateStack), state
- return state
-+
- def popTextState(self):
- state = self.textStateStack[-1]
- self.textStateStack = self.textStateStack[:-1]
-@@ -136,7 +139,6 @@
- remainder = program[:]
- #program1 = remainder[:] # debug only
- lineprogram = []
-- from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT, TA_JUSTIFY
- #if maxheight<TOOSMALLSPACE:
- # raise ValueError, "attempt to format inside too small a height! "+repr(maxheight)
- heightremaining = maxheight-leading
-@@ -150,9 +152,11 @@
- linewidth = maxwidth - indent - rightIndent
- beforelinestate = self.__dict__.copy()
- if linewidth<TOOSMALLSPACE:
-- raise ValueError, "indents %s %s too wide for space %s" % (self.indent, self.rightIndent, maxwidth)
-+ raise ValueError, "indents %s %s too wide for space %s" % (self.indent, self.rightIndent, \
-+ maxwidth)
- try:
-- (lineIsFull, line, cursor, currentLength, usedIndent, maxLength, justStrings) = self.fitLine(remainder, maxwidth)
-+ (lineIsFull, line, cursor, currentLength, \
-+ usedIndent, maxLength, justStrings) = self.fitLine(remainder, maxwidth)
- except:
- ## print "failed to fit line near", cursorcount # debug
- ## for i in program1[max(0,cursorcount-10): cursorcount]:
-@@ -235,20 +239,23 @@
- self.__dict__.update(startstate)
- heightused = maxheight - heightremaining
- return (lineprogram, remainder, laststate, heightused)
-+
- def getState(self):
- # inlined
- return self.__dict__.copy()
-+
- def resetState(self, state):
- # primarily inlined
- self.__dict__.update(state)
-+
- ## def sizeOfWord(self, word):
- ## inlineThisFunctionForEfficiency
- ## return float(stringWidth(word, self.fontName, self.fontSize))
-+
- def fitLine(self, program, totalLength):
- "fit words (and other things) onto a line"
- # assuming word lengths and spaces have not been yet added
- # fit words onto a line up to maxlength, adding spaces and respecting extra space
-- from types import StringType, TupleType, InstanceType, FloatType
- from reportlab.pdfbase.pdfmetrics import stringWidth
- usedIndent = self.indent
- maxLength = totalLength - usedIndent - self.rightIndent
-@@ -269,7 +276,7 @@
- opcode = program[cursor]
- #if debug: print "opcode", cursor, opcode
- topcode = type(opcode)
-- if topcode is StringType or topcode is InstanceType:
-+ if topcode in (StringType, UnicodeType, InstanceType):
- lastneedspace = needspace
- needspace = 0
- if topcode is InstanceType:
-@@ -278,7 +285,7 @@
- needspace = 0
- else:
- saveopcode = opcode
-- opcode = opcode.strip() #string.strip(opcode)
-+ opcode = opcode.strip()
- if opcode:
- width = stringWidth(opcode, fontName, fontSize)
- else:
-@@ -342,7 +349,7 @@
- oldcolor = self.fontColor
- (i, colorname) = opcode
- #print "opcode", opcode
-- if type(colorname) is StringType:
-+ if type(colorname) in (StringType, UnicodeType):
- color = self.fontColor = getattr(colors, colorname)
- else:
- color = self.fontColor = colorname # assume its something sensible :)
-@@ -357,7 +364,7 @@
- # change font size
- (i, fontsize) = opcode
- size = abs(float(fontsize))
-- if type(fontsize) is StringType:
-+ if type(fontsize) in (StringType, UnicodeType):
- if fontsize[:1]=="+":
- fontSize = self.fontSize = self.fontSize + size
- elif fontsize[:1]=="-":
-@@ -457,41 +464,43 @@
- line.append( ("nextLine", 0) )
- #print "fitline", line
- return (lineIsFull, line, cursor, currentLength, usedIndent, maxLength, justStrings)
-+
- def centerAlign(self, line, lineLength, maxLength):
- diff = maxLength-lineLength
- shift = diff/2.0
- if shift>TOOSMALLSPACE:
- return self.insertShift(line, shift)
- return line
-+
- def rightAlign(self, line, lineLength, maxLength):
- shift = maxLength-lineLength
- #die
- if shift>TOOSMALLSPACE:
- return self.insertShift(line, shift)
- return line
-+
- def insertShift(self, line, shift):
- # insert shift just before first visible element in line
-- from types import StringType, InstanceType
- result = []
- first = 1
- for e in line:
- te = type(e)
-- if first and (te is StringType or te is InstanceType):
-+ if first and (te in (StringType, UnicodeType, InstanceType)):
- result.append(shift)
- first = 0
- result.append(e)
- return result
-+
- def justifyAlign(self, line, lineLength, maxLength):
- diff = maxLength-lineLength
- # count EXPANDABLE SPACES AFTER THE FIRST VISIBLE
-- from types import InstanceType, StringType, TupleType, FloatType
- spacecount = 0
- visible = 0
- for e in line:
- te = type(e)
- if te is FloatType and e>TOOSMALLSPACE and visible:
- spacecount = spacecount+1
-- elif te is StringType or te is InstanceType:
-+ elif te in (StringType, UnicodeType, InstanceType):
- visible = 1
- #if debug: print "diff is", diff, "wordcount", wordcount #; die
- if spacecount<1:
-@@ -509,7 +518,7 @@
- e = line[cursor]
- te = type(e)
- result.append(e)
-- if (te is InstanceType or te is StringType):
-+ if (te in (StringType, UnicodeType, InstanceType)):
- visible = 1
- elif te is FloatType and e>TOOSMALLSPACE and visible:
- expanded = e+shift
-@@ -545,25 +554,23 @@
- ## first = 0
- ## cursor = cursor+1
- ## return result
-+
- def shrinkWrap(self, line):
- # for non justified text, collapse adjacent text/shift's into single operations
-- #return line # for testing
- result = []
- index = 0
- maxindex = len(line)
-- from types import FloatType, StringType, InstanceType
-- from string import join
- while index<maxindex:
- e = line[index]
- te = type(e)
-- if te is StringType and index<maxindex-1:
-+ if te in (StringType, UnicodeType) and index<maxindex-1:
- # collect strings and floats
- thestrings = [e]
- thefloats = 0.0
- index = index+1
- nexte = line[index]
- tnexte = type(nexte)
-- while index<maxindex and (tnexte is FloatType or tnexte is StringType):
-+ while index<maxindex and (tnexte in (FloatType, StringType, UnicodeType)):
- # switch to expandable space if appropriate
- if tnexte is FloatType:
- if thefloats<0 and nexte>0:
-@@ -571,14 +578,14 @@
- if nexte<0 and thefloats>0:
- nexte = -nexte
- thefloats = thefloats + nexte
-- elif tnexte is StringType:
-+ elif tnexte in (StringType, UnicodeType):
- thestrings.append(nexte)
- index = index+1
- if index<maxindex:
- nexte = line[index]
- tnexte = type(nexte)
- # wrap up the result
-- s = string.join(thestrings)
-+ s = ' '.join(thestrings)
- result.append(s)
- result.append(float(thefloats))
- # back up for unhandled element
-@@ -588,12 +595,12 @@
- index = index+1
-
- return result
-+
- def cleanProgram(self, line):
- "collapse adjacent spacings"
- #return line # for debugging
- result = []
- last = 0
-- from types import FloatType, TupleType, StringType, InstanceType
- for e in line:
- if type(e) is FloatType:
- # switch to expandable space if appropriate
-@@ -634,7 +641,9 @@
- tthis = type(this)
- tnext = type(next)
- # don't swap visibles
-- if tthis is StringType or tnext is StringType or this is InstanceType or tnext is InstanceType:
-+ if tthis in (StringType, UnicodeType) or \
-+ tnext in (StringType, UnicodeType) or \
-+ this is InstanceType or tnext is InstanceType:
- doswap = 0
- # only swap two tuples if the second one is an end operation and the first is something else
- elif tthis is TupleType:
-@@ -654,10 +663,10 @@
- result[nextindex] = this
- change = 1
- return result
-+
- def runOpCodes(self, program, canvas, textobject):
- "render the line(s)"
-- #import types
-- from types import StringType, TupleType, InstanceType, FloatType
-+
- escape = canvas._escape
- code = textobject._code
- startstate = self.__dict__.copy()
-@@ -672,7 +681,7 @@
- indented = 0
- for opcode in program:
- topcode = type(opcode)
-- if topcode is StringType or topcode is InstanceType:
-+ if topcode in (StringType, UnicodeType, InstanceType):
- if not indented:
- if abs(thislineindent)>TOOSMALLSPACE:
- #if debug: print "INDENTING", thislineindent
-@@ -688,7 +697,7 @@
- font = self.fontName
- size = self.fontSize
- textobject.setFont(font, size)
-- if topcode is StringType:
-+ if topcode in (StringType, UnicodeType):
- #textobject.textOut(opcode)
- text = escape(opcode)
- code.append('(%s) Tj' % text)
-@@ -723,7 +732,7 @@
- oldcolor = self.fontColor
- (i, colorname) = opcode
- #print "opcode", opcode
-- if type(colorname) is StringType:
-+ if type(colorname) in (StringType, UnicodeType):
- color = self.fontColor = getattr(colors, colorname)
- else:
- color = self.fontColor = colorname # assume its something sensible :)
-@@ -744,7 +753,7 @@
- # change font size
- (i, fontsize) = opcode
- size = abs(float(fontsize))
-- if type(fontsize) is StringType:
-+ if type(fontsize) in (StringType, UnicodeType):
- if fontsize[:1]=="+":
- fontSize = self.fontSize = self.fontSize + size
- elif fontsize[:1]=="-":
-@@ -834,12 +843,12 @@
-
- def stringLine(line, length):
- "simple case: line with just strings and spacings which can be ignored"
-+
- strings = []
-- from types import StringType
- for x in line:
-- if type(x) is StringType:
-+ if type(x) in (StringType, UnicodeType):
- strings.append(x)
-- text = string.join(strings)
-+ text = ' '.join(strings)
- result = [text, float(length)]
- nextlinemark = ("nextLine", 0)
- if line and line[-1]==nextlinemark:
-@@ -848,14 +857,14 @@
-
- def simpleJustifyAlign(line, currentLength, maxLength):
- "simple justification with only strings"
-+
- strings = []
-- from types import StringType
- for x in line[:-1]:
-- if type(x) is StringType:
-+ if type(x) in (StringType, UnicodeType):
- strings.append(x)
- nspaces = len(strings)-1
- slack = maxLength-currentLength
-- text = string.join(strings)
-+ text = ' '.join(strings)
- if nspaces>0 and slack>0:
- wordspacing = slack/float(nspaces)
- result = [("wordSpacing", wordspacing), text, maxLength, ("wordSpacing", 0)]
-@@ -869,16 +878,15 @@
- from reportlab.lib.colors import black
-
- def readBool(text):
-- if string.upper(text) in ("Y", "YES", "TRUE", "1"):
-+ if text.upper() in ("Y", "YES", "TRUE", "1"):
- return 1
-- elif string.upper(text) in ("N", "NO", "FALSE", "0"):
-+ elif text.upper() in ("N", "NO", "FALSE", "0"):
- return 0
- else:
- raise RMLError, "true/false attribute has illegal value '%s'" % text
-
- def readAlignment(text):
-- from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT, TA_JUSTIFY
-- up = string.upper(text)
-+ up = text.upper()
- if up == 'LEFT':
- return TA_LEFT
- elif up == 'RIGHT':
-@@ -891,13 +899,13 @@
- def readLength(text):
- """Read a dimension measurement: accept "3in", "5cm",
- "72 pt" and so on."""
-- text = string.strip(text)
-+ text = text.strip()
- try:
- return float(text)
- except ValueError:
-- text = string.lower(text)
-+ text = text.lower()
- numberText, units = text[:-2],text[-2:]
-- numberText = string.strip(numberText)
-+ numberText = numberText.strip()
- try:
- number = float(numberText)
- except ValueError:
-@@ -916,13 +924,12 @@
-
- def lengthSequence(s, converter=readLength):
- """from "(2, 1)" or "2,1" return [2,1], for example"""
-- from string import split, strip
-- s = strip(s)
-+ s = s.strip()
- if s[:1]=="(" and s[-1:]==")":
- s = s[1:-1]
-- sl = split(s, ",")
-- sl = map(strip, sl)
-- sl = map(converter, sl)
-+ sl = s.split(',')
-+ sl = [s.strip() for s in sl]
-+ sl = [converter(s) for s in sl]
- return sl
-
-
-@@ -931,7 +938,7 @@
- if not text:
- return None
- from reportlab.lib import colors
-- if text[0] in string.letters:
-+ if text[0] in LETTERS:
- return colors.__dict__[text]
- tup = lengthSequence(text)
-
-@@ -978,6 +985,7 @@
- bulletIndent=0
- textColor=black
- backColor=None
-+
- def __init__(self, name, parent=None, **kw):
- mydict = self.__dict__
- if parent:
-@@ -985,6 +993,7 @@
- mydict[a]=b
- for (a,b) in kw.items():
- mydict[a] = b
-+
- def addAttributes(self, dictionary):
- for key in dictionary.keys():
- value = dictionary[key]
-@@ -999,14 +1008,21 @@
- "h1.defaultStyle": "Heading1",
- "h2.defaultStyle": "Heading2",
- "h3.defaultStyle": "Heading3",
-+ "h4.defaultStyle": "Heading4",
-+ "h5.defaultStyle": "Heading5",
-+ "h6.defaultStyle": "Heading6",
- "title.defaultStyle": "Title",
-+ "subtitle.defaultStyle": "SubTitle",
- "para.defaultStyle": "Normal",
- "pre.defaultStyle": "Code",
-- "li.defaultStyle": "Definition"
-+ "ul.defaultStyle": "Definition",
-+ "ol.defaultStyle": "Definition",
-+ "li.defaultStyle": "Definition",
- }
-
- class FastPara(Flowable):
- "paragraph with no special features (not even a single ampersand!)"
-+
- def __init__(self, style, simpletext):
- #if debug:
- # print "FAST", id(self)
-@@ -1015,6 +1031,7 @@
- self.style = style
- self.simpletext = simpletext
- self.lines = None
-+
- def wrap(self, availableWidth, availableHeight):
- simpletext = self.simpletext
- self.availableWidth = availableWidth
-@@ -1027,7 +1044,7 @@
- size = style.fontSize
- firstindent = style.firstLineIndent
- #textcolor = style.textColor
-- words = string.split(simpletext)
-+ words = simpletext.split()
- lines = []
- from reportlab.pdfbase.pdfmetrics import stringWidth
- spacewidth = stringWidth(" ", font, size)
-@@ -1062,18 +1079,18 @@
- #print "currentline", currentline
- else:
- # emit the line
-- lines.append( (string.join(currentline), currentlength, len(currentline)) )
-+ lines.append( (' '.join(currentline), currentlength, len(currentline)) )
- currentline = []
- currentlength = 0
- heightused = heightused+leading
- if heightused+leading>availableHeight:
- done = 1
- if currentlength and not done:
-- lines.append( (string.join(currentline), currentlength, len(currentline) ))
-+ lines.append( (' '.join(currentline), currentlength, len(currentline) ))
- heightused = heightused+leading
- self.lines = lines
- self.height = heightused
-- remainder = self.remainder = string.join(words[cursor:])
-+ remainder = self.remainder = ' '.join(words[cursor:])
- #print "lines", lines
- #print "remainder is", remainder
- else:
-@@ -1086,6 +1103,7 @@
- result = (availableWidth, heightused)
- #if debug: print "wrap is", (availableWidth, availableHeight), result, len(lines)
- return result
-+
- def split(self, availableWidth, availableHeight):
- style = self.style
- leading = style.leading
-@@ -1102,7 +1120,6 @@
- return [self]
-
- def draw(self):
-- from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT, TA_JUSTIFY
- style = self.style
- lines = self.lines
- rightIndent = style.rightIndent
-@@ -1158,10 +1175,12 @@
- #textobject.textOut(text)
- y = y-leading
- c.drawText(textobject)
-+
- def getSpaceBefore(self):
- #if debug:
- # print "got space before", self.spaceBefore
- return self.style.spaceBefore
-+
- def getSpaceAfter(self):
- #print "got space after", self.spaceAfter
- return self.style.spaceAfter
-@@ -1174,15 +1193,39 @@
- result[stylenamekey] = styles[stylenamevalue]
- return result
-
-+def buildContext(stylesheet=None):
-+ result = {}
-+ from reportlab.lib.styles import getSampleStyleSheet
-+ from reportlab.lib.styles import StyleSheet1
-+ if stylesheet is not None:
-+ if isinstance(stylesheet, StyleSheet1):
-+ result.update(stylesheet.byName.copy())
-+ result.update(stylesheet.byAlias.copy())
-+ else:
-+ if hasattr(stylesheet, 'copy'):
-+ result.update(stylesheet.copy())
-+ else:
-+ stylesheet = {}
-+ styles = getSampleStyleSheet()
-+ for (stylenamekey, stylenamevalue) in DEFAULT_ALIASES.items():
-+ # Copy styles with the same name as aliases
-+ if stylesheet.has_key(stylenamevalue):
-+ result[stylenamekey] = stylesheet[stylenamevalue]
-+ # Then, fill in defaults if they were not filled yet.
-+ if not result.has_key(stylenamekey) and styles.has_key(stylenamevalue):
-+ result[stylenamekey] = styles[stylenamevalue]
-+
-+ return result
-+
- class Para(Flowable):
-+
- spaceBefore = 0
- spaceAfter = 0
-+
- def __init__(self, style, parsedText=None, bulletText=None, state=None, context=None, baseindent=0):
- #print id(self), "para", parsedText
- self.baseindent = baseindent
-- if context is None:
-- context = defaultContext()
-- self.context = context
-+ self.context = buildContext(context)
- self.parsedText = parsedText
- self.bulletText = bulletText
- self.style1 = style # make sure Flowable doesn't use this unless wanted! call it style1 NOT style
-@@ -1199,15 +1242,18 @@
- # print "spaceBefore is", self.spaceBefore, self.parsedText
- self.bold = 0
- self.italic = 0
-- self.face = "times"
-- self.size = 10
-+ self.face = style.fontName
-+ self.size = style.fontSize
-+
- def getSpaceBefore(self):
- #if debug:
- # print "got space before", self.spaceBefore
- return self.spaceBefore
-+
- def getSpaceAfter(self):
- #print "got space after", self.spaceAfter
- return self.spaceAfter
-+
- def wrap(self, availableWidth, availableHeight):
- if debug:
- print "WRAPPING", id(self), availableWidth, availableHeight
-@@ -1242,7 +1288,8 @@
- if not program:
- self.program = program = self.compileProgram(parsedText)
- if not self.formattedProgram:
-- (formattedProgram, remainder, laststate, heightused) = p.format(availableWidth, availableHeight, program, leading)
-+ (formattedProgram, remainder, \
-+ laststate, heightused) = p.format(availableWidth, availableHeight, program, leading)
- self.formattedProgram = formattedProgram
- self.height = heightused
- self.laststate = laststate
-@@ -1259,7 +1306,8 @@
- height = availableHeight + 1
- #print "laststate is", laststate
- #print "saving remainder", remainder
-- self.remainder = Para(self.style1, parsedText=None, bulletText=None, state=laststate)
-+ self.remainder = Para(self.style1, parsedText=None, bulletText=None, \
-+ state=laststate, context=self.context)
- self.remainder.program = remainder
- self.remainder.spaceAfter = self.spaceAfter
- self.spaceAfter = 0
-@@ -1277,6 +1325,7 @@
- print "exact match???" + repr(availableHeight, h)
- print "wrap is", (availableWidth, availableHeight), result
- return result
-+
- def split(self, availableWidth, availableHeight):
- #if debug:
- # print "SPLITTING", id(self), availableWidth, availableHeight
-@@ -1300,6 +1349,7 @@
- result= [self]
- #if debug: print "split is", result
- return result
-+
- def draw(self):
- p = self.myengine #paragraphEngine()
- formattedProgram = self.formattedProgram
-@@ -1362,40 +1412,15 @@
- # now look for a place where to insert the unindent after the first line
- if style.firstLineIndent:
- count = 0
-- from types import StringType, InstanceType
- for x in program:
- count = count+1
- tx = type(x)
-- if tx is StringType or tx is InstanceType:
-+ if tx in (StringType, UnicodeType, InstanceType):
- break
- program.insert( count, ("indent", -style.firstLineIndent ) ) # defaults to end if no visibles
-- #print "="*8, id(self), "program is"
-- #for x in program:
-- # print x
--## print "="*11
--## # check pushes and pops
--## stackcount = 0
--## dump = 0
--## from types import TupleType
--## for x in program:
--## if dump:
--## print "dump:", x
--## if type(x) is TupleType:
--## i = x[0]
--## if i=="push":
--## stackcount = stackcount+1
--## print " "*stackcount, "push", stackcount
--## if i=="pop":
--## stackcount = stackcount-1
--## print " "*stackcount, "pop", stackcount
--## if stackcount<0:
--## dump=1
--## print "STACK UNDERFLOW!"
--## if dump: stop
- return program
-+
- def linearize(self, program = None, parsedText=None):
-- #print "LINEARIZING", self
-- #program = self.program = []
- if parsedText is None:
- parsedText = self.parsedText
- style = self.style1
-@@ -1417,23 +1442,22 @@
- program.append( ("leading", 0) )
- program.append( ("nextLine", 0) )
- program.append( ("pop",) )
-+
- def compileComponent(self, parsedText, program):
-- import types
- ttext = type(parsedText)
-- #program = self.program
-- if ttext is types.StringType:
-+ if ttext in (StringType, UnicodeType):
- # handle special characters here...
- # short cut
- if parsedText:
-- stext = parsedText.strip() #string.strip(parsedText)
-+ stext = parsedText.strip()
- if not stext:
- program.append(" ") # contract whitespace to single space
- else:
- handleSpecialCharacters(self, parsedText, program)
-- elif ttext is types.ListType:
-+ elif ttext is ListType:
- for e in parsedText:
- self.compileComponent(e, program)
-- elif ttext is types.TupleType:
-+ elif ttext is TupleType:
- (tagname, attdict, content, extra) = parsedText
- if not attdict:
- attdict = {}
-@@ -1455,10 +1479,11 @@
- a("</%s>" % tagname)
- else:
- a("/>")
-- t = string.join(L, "")
-+ t = ''.join(L)
- handleSpecialCharacters(self, t, program)
- else:
- raise ValueError, "don't know how to handle tag " + repr(tagname)
-+
- def shiftfont(self, program, face=None, bold=None, italic=None):
- oldface = self.face
- oldbold = self.bold
-@@ -1481,26 +1506,29 @@
- # "anonymous" tag: just do the content
- for e in content:
- self.compileComponent(e, program)
-- #compile_para = compile_ # at least for now...
-+
- def compile_pageNumber(self, attdict, content, extra, program):
- program.append(PageNumberObject())
-+
- def compile_b(self, attdict, content, extra, program):
- (f,b,i) = self.shiftfont(program, bold=1)
- for e in content:
- self.compileComponent(e, program)
- self.shiftfont(program, bold=b)
-+
- def compile_i(self, attdict, content, extra, program):
- (f,b,i) = self.shiftfont(program, italic=1)
- for e in content:
- self.compileComponent(e, program)
- self.shiftfont(program, italic=i)
-+
- def compile_u(self, attdict, content, extra, program):
- # XXXX must eventually add things like alternative colors
-- #program = self.program
- program.append( ('lineOperation', UNDERLINE) )
- for e in content:
- self.compileComponent(e, program)
- program.append( ('endLineOperation', UNDERLINE) )
-+
- def compile_sub(self, attdict, content, extra, program):
- size = self.size
- self.size = newsize = size * 0.7
-@@ -1515,18 +1543,15 @@
- program.append( ('rise', rise) )
-
- def compile_ul(self, attdict, content, extra, program, tagname="ul"):
-- # by transformation
-- #print "compile", tagname, attdict
- atts = attdict.copy()
- bulletmaker = bulletMaker(tagname, atts, self.context)
- # now do each element as a separate paragraph
-- import types
- for e in content:
- te = type(e)
-- if te is types.StringType:
-- if e.strip(): #string.strip(e):
-+ if te in (StringType, UnicodeType):
-+ if e.strip():
- raise ValueError, "don't expect CDATA between list elements"
-- elif te is types.TupleType:
-+ elif te is TupleType:
- (tagname, attdict1, content1, extra) = e
- if tagname!="li":
- raise ValueError, "don't expect %s inside list" % repr(tagname)
-@@ -1534,57 +1559,59 @@
- if attdict1:
- newatts.update(attdict1)
- bulletmaker.makeBullet(newatts)
-- self.compile_para(newatts, content1, extra, program)
-+ self.compile_li(newatts, content1, extra, program)
-
- def compile_ol(self, attdict, content, extra, program):
- return self.compile_ul(attdict, content, extra, program, tagname="ol")
-
-+ def compile_li(self, attdict, content, extra, program):
-+ self.compile_para(attdict, content, extra, program)
-+
- def compile_dl(self, attdict, content, extra, program):
-- # by transformation
-- #print "compile", tagname, attdict
-- atts = attdict.copy()
-- # by transformation
-- #print "compile", tagname, attdict
- atts = attdict.copy()
- bulletmaker = bulletMaker("dl", atts, self.context)
- # now do each element as a separate paragraph
-- import types
- contentcopy = list(content) # copy for destruction
- bullet = ""
- while contentcopy:
- e = contentcopy[0]
- del contentcopy[0]
- te = type(e)
-- if te is types.StringType:
-- if e.strip(): #string.strip(e):
-+ if te in (StringType, UnicodeType):
-+ if e.strip():
- raise ValueError, "don't expect CDATA between list elements"
- elif not contentcopy:
- break # done at ending whitespace
- else:
- continue # ignore intermediate whitespace
-- elif te is types.TupleType:
-+ elif te is TupleType:
- (tagname, attdict1, content1, extra) = e
- if tagname!="dd" and tagname!="dt":
-- raise ValueError, "don't expect %s here inside list, expect 'dd' or 'dt'" % repr(tagname)
-+ raise ValueError, "don't expect %s here inside list, expect 'dd' or 'dt'" % \
-+ repr(tagname)
- if tagname=="dt":
- if bullet:
- raise ValueError, "dt will not be displayed unless followed by a dd: "+repr(bullet)
- if content1:
-- if len(content1)!=1:
-- raise ValueError, "only simple strings supported in dd content currently: "+repr(content1)
-- bullet = content1[0]
-- if type(bullet) is not types.StringType:
-- raise ValueError, "only simple strings supported in dd content currently: "+repr(content1)
-+ self.compile_dt(attdict1, content1, extra, program)
-+ # raise ValueError, \
-+ # "only simple strings supported in dd content currently: "+repr(content1)
- elif tagname=="dd":
- newatts = atts.copy()
- if attdict1:
- newatts.update(attdict1)
- bulletmaker.makeBullet(newatts, bl=bullet)
-- self.compile_para(newatts, content1, extra, program)
-+ self.compile_dd(newatts, content1, extra, program)
- bullet = "" # don't use this bullet again
- if bullet:
- raise ValueError, "dt will not be displayed unless followed by a dd"+repr(bullet)
-
-+ def compile_dt(self, attdict, content, extra, program):
-+ self.compile_para(attdict, content, extra, program)
-+
-+ def compile_dd(self, attdict, content, extra, program):
-+ self.compile_para(attdict, content, extra, program)
-+
- def compile_super(self, attdict, content, extra, program):
- size = self.size
- self.size = newsize = size * 0.7
-@@ -1597,6 +1624,7 @@
- program.append( ('size', size) )
- self.size = size
- program.append( ('rise', -rise) )
-+
- def compile_font(self, attdict, content, extra, program):
- #program = self.program
- program.append( ("push",) ) # store current data
-@@ -1618,6 +1646,7 @@
- for e in content:
- self.compileComponent(e, program)
- program.append( ("pop",) ) # restore as before
-+
- def compile_a(self, attdict, content, extra, program):
- url = attdict["href"]
- colorname = attdict.get("color", "blue")
-@@ -1632,6 +1661,7 @@
- program.append( ('endLineOperation', UNDERLINE) )
- program.append( ('endLineOperation', Link) )
- program.append( ("pop",) ) # restore as before
-+
- def compile_link(self, attdict, content, extra, program):
- dest = attdict["destination"]
- colorname = attdict.get("color", None)
-@@ -1647,6 +1677,7 @@
- program.append( ('endLineOperation', UNDERLINE) )
- program.append( ('endLineOperation', Link) )
- program.append( ("pop",) ) # restore as before
-+
- def compile_setLink(self, attdict, content, extra, program):
- dest = attdict["destination"]
- colorname = attdict.get("color", "blue")
-@@ -1664,43 +1695,55 @@
- program.append( ('endLineOperation', UNDERLINE) )
- program.append( ('endLineOperation', Link) )
- program.append( ("pop",) ) # restore as before
-+
- #def compile_p(self, attdict, content, extra, program):
- # # have to be careful about base indent here!
- # not finished
-+
- def compile_bullet(self, attdict, content, extra, program):
-- from types import StringType
- ### eventually should allow things like images and graphics in bullets too XXXX
-- if len(content)!=1 or type(content[0]) is not StringType:
-+ if len(content)!=1 or type(content[0]) not in (StringType, UnicodeType):
- raise ValueError, "content for bullet must be a single string"
- text = content[0]
- self.do_bullet(text, program)
-+
- def do_bullet(self, text, program):
- style = self.style1
-- #program = self.program
- indent = style.bulletIndent + self.baseindent
- font = style.bulletFontName
- size = style.bulletFontSize
- program.append( ("bullet", text, indent, font, size) )
-+
- def compile_tt(self, attdict, content, extra, program):
- (f,b,i) = self.shiftfont(program, face="Courier")
- for e in content:
- self.compileComponent(e, program)
- self.shiftfont(program, face=f)
-+
- def compile_greek(self, attdict, content, extra, program):
- self.compile_font({"face": "symbol"}, content, extra, program)
-+
- def compile_evalString(self, attdict, content, extra, program):
- program.append( EvalStringObject(attdict, content, extra, self.context) )
-+
- def compile_name(self, attdict, content, extra, program):
- program.append( NameObject(attdict, content, extra, self.context) )
-+
- def compile_getName(self, attdict, content, extra, program):
- program.append( GetNameObject(attdict, content, extra, self.context) )
-+
- def compile_seq(self, attdict, content, extra, program):
- program.append( SeqObject(attdict, content, extra, self.context) )
-+
- def compile_seqReset(self, attdict, content, extra, program):
- program.append( SeqResetObject(attdict, content, extra, self.context) )
-+
- def compile_seqDefault(self, attdict, content, extra, program):
- program.append( SeqDefaultObject(attdict, content, extra, self.context) )
-+
- def compile_para(self, attdict, content, extra, program, stylename = "para.defaultStyle"):
-+ if attdict is None:
-+ attdict = {}
- context = self.context
- stylename = attdict.get("style", stylename)
- style = context[stylename]
-@@ -1708,45 +1751,37 @@
- newstyle.addAttributes(attdict)
- bulletText = attdict.get("bulletText", None)
- mystyle = self.style1
-- #newstyle.bulletIndent = mystyle.leftIndent+newstyle.bulletIndent
-- #print "attdict", attdict
-- #print "leftindent, baseindent", mystyle.leftIndent
-- #print "bulletIndent", newstyle.bulletIndent
-- thepara = Para(newstyle, content, context=context, bulletText=bulletText) # possible ref loop on context, break later
-+ thepara = Para(newstyle, content, context=context, bulletText=bulletText)
-+ # possible ref loop on context, break later
- # now compile it and add it to the program
- mybaseindent = self.baseindent
- self.baseindent = thepara.baseindent = mystyle.leftIndent + self.baseindent
- thepara.linearize(program=program)
-- #print "program so far"
-- #for x in program:
-- # print x
- program.append( ("nextLine", 0) )
- self.baseindent = mybaseindent
-
--
- class bulletMaker:
-+
- def __init__(self, tagname, atts, context):
- self.tagname = tagname
-- #print "context is", context
-- style = "li.defaultStyle"
-+ self.context = context
-+ style = context.has_key(tagname) and tagname or "%s.defaultStyle" % tagname
- self.style = style = atts.get("style", style)
-- typ = {"ul": "disc", "ol": "1", "dl": None}[tagname]
-- #print tagname, "bulletmaker type is", typ
-- self.typ =typ = atts.get("type", typ)
-- #print tagname, "bulletmaker type is", typ
-+ typ = {"ul": "disc", "ol": "1"}.get(tagname, None)
-+ self.typ = typ = atts.get("type", typ)
- if not atts.has_key("leftIndent"):
- # get the style so you can choose an indent length
-- thestyle = context[style]
- from reportlab.pdfbase.pdfmetrics import stringWidth
-- size = thestyle.fontSize
-+ size = self.context[self.style].fontSize
- indent = stringWidth("XXX", "Courier", size)
- atts["leftIndent"] = str(indent)
- self.count = 0
-+
- def makeBullet(self, atts, bl=None):
- count = self.count = self.count+1
- typ = self.typ
- tagname = self.tagname
-- #print "makeBullet", tagname, typ, count
-+ if bl == 'm': raise ValueError
- # forget space before for non-first elements
- if count>1:
- atts["spaceBefore"] = "0"
-@@ -1758,7 +1793,7 @@
- else:
- raise ValueError, "unordered list type %s not implemented" % repr(typ)
- if not atts.has_key("bulletFontName"):
-- atts["bulletFontName"] = "ZapfDingbats"
-+ atts["bulletFontName"] = self.context[self.style].bulletFontName or "ZapfDingbats"
- elif tagname=="ol":
- if typ=="1": bl = repr(count)
- elif typ=="a":
-@@ -1778,7 +1813,9 @@
-
- class EvalStringObject:
- "this will only work if rml2pdf is present"
-+
- tagname = "evalString"
-+
- def __init__(self, attdict, content, extra, context):
- if not attdict:
- attdict = {}
-@@ -1786,11 +1823,13 @@
- self.content = content
- self.context = context
- self.extra = extra
-+
- def getOp(self, tuple, engine):
- from rlextra.rml2pdf.rml2pdf import Controller
- #print "tuple", tuple
- op = self.op = Controller.processTuple(tuple, self.context, {})
- return op
-+
- def width(self, engine):
- from reportlab.pdfbase.pdfmetrics import stringWidth
- content = self.content
-@@ -1803,10 +1842,12 @@
- #print self
- s = str(op)
- return stringWidth(s, engine.fontName, engine.fontSize)
-+
- def execute(self, engine, textobject, canvas):
- textobject.textOut(str(self.op))
-
- class SeqObject(EvalStringObject):
-+
- def getOp(self, tuple, engine):
- from reportlab.lib.sequencer import getSequencer
- globalsequencer = getSequencer()
-@@ -1830,6 +1871,7 @@
- pass # name doesn't produce any output
-
- class SeqDefaultObject(NameObject):
-+
- def getOp(self, tuple, engine):
- from reportlab.lib.sequencer import getSequencer
- globalsequencer = getSequencer()
-@@ -1843,6 +1885,7 @@
- return ""
-
- class SeqResetObject(NameObject):
-+
- def getOp(self, tuple, engine):
- from reportlab.lib.sequencer import getSequencer
- import math
-@@ -1864,11 +1907,14 @@
- tagname = "getName"
-
- class PageNumberObject:
-+
- def __init__(self, example="XXX"):
- self.example = example # XXX SHOULD ADD THE ABILITY TO PASS IN EXAMPLES
-+
- def width(self, engine):
- from reportlab.pdfbase.pdfmetrics import stringWidth
- return stringWidth(self.example, engine.fontName, engine.fontSize)
-+
- def execute(self, engine, textobject, canvas):
- n = canvas.getPageNumber()
- textobject.textOut(str(n))
-@@ -1890,11 +1936,10 @@
- mystyle.addAttributes(attdict)
- bulletText = attdict.get("bulletText", None)
- # can we use the fast implementation?
-- import types
- result = None
- if not bulletText and len(content)==1:
- text = content[0]
-- if type(text) is types.StringType and "&" not in text:
-+ if type(text) in (StringType, UnicodeType) and "&" not in text:
- result = FastPara(mystyle, text)
- if result is None:
- result = Para(mystyle, content, context=context, bulletText=bulletText) # possible ref loop on context, break later
-@@ -2119,7 +2164,7 @@
- for fragment in amptext:
- if not first:
- # check for special chars
-- semi = string.find(fragment, ";")
-+ semi = fragment.find(";")
- if semi>0:
- name = fragment[:semi]
- if greeks.has_key(name):
-@@ -2128,7 +2173,7 @@
- (f,b,i) = engine.shiftfont(program, face="symbol")
- program.append(greeksub)
- engine.shiftfont(program, face=f)
-- if fragment and fragment[0] in string.whitespace:
-+ if fragment and fragment[0] in WHITESPACE:
- program.append(" ") # follow the greek with a space
- else:
- # add back the &
-@@ -2143,10 +2188,10 @@
- # does the last one need a space?
- if sfragment and fragment:
- # reader 3 used to go nuts if you don't special case the last frag, but it's fixed?
-- if fragment[-1] in string.whitespace: # or fragment==lastfrag:
-+ if fragment[-1] in WHITESPACE: # or fragment==lastfrag:
- program.append( sfragment[-1]+" " )
- else:
-- last = sfragment[-1].strip() #string.strip(sfragment[-1])
-+ last = sfragment[-1].strip()
- if last:
- #print "last is", repr(last)
- program.append( last )
-@@ -2154,7 +2199,7 @@
- #print "HANDLED", program
- return program
-
--def Paragraph(text, style, bulletText=None, frags=None):
-+def Paragraph(text, style, bulletText=None, frags=None, context=None):
- """ Paragraph(text, style, bulletText=None)
- intended to be like a platypus Paragraph but better.
- """
-@@ -2165,7 +2210,7 @@
- # use the fully featured one.
- from reportlab.lib import rparsexml
- parsedpara = rparsexml.parsexmlSimple(text)
-- return Para(style, parsedText=parsedpara, bulletText=bulletText, state=None)
-+ return Para(style, parsedText=parsedpara, bulletText=bulletText, state=None, context=context)
-
- ##class Paragraph(Para):
- ## """ Paragraph(text, style, bulletText=None)
-@@ -2206,8 +2251,10 @@
- UNDERLINE = UnderLineHandler()
-
- class HotLink(UnderLineHandler):
-+
- def __init__(self, url):
- self.url = url
-+
- def end_at(self, x, y, para, canvas, textobject):
- fontsize = para.fontSize
- rect = [self.xStart, self.yStart, x,y+fontsize]
-@@ -2215,27 +2262,31 @@
- print "LINKING RECTANGLE", rect
- #canvas.rect(self.xStart, self.yStart, x-self.xStart,y+fontsize-self.yStart, stroke=1)
- self.link(rect, canvas)
-+
- def link(self, rect, canvas):
- canvas.linkURL(self.url, rect, relative=1)
-
- class InternalLink(HotLink):
-+
- def link(self, rect, canvas):
- destinationname = self.url
- contents = ""
- canvas.linkRect(contents, destinationname, rect, Border="[0 0 0]")
-
- class DefDestination(HotLink):
-+
- defined = 0
-+
- def link(self, rect, canvas):
- destinationname = self.url
- if not self.defined:
- [x, y, x1, y1] = rect
-- canvas.bookmarkHorizontal(destinationname, x,y1) # use the upper y
-+ canvas.bookmarkHorizontal(destinationname, x, y1) # use the upper y
- self.defined = 1
-
- def splitspace(text):
- # split on spacing but include spaces at element ends
-- stext = string.split(text)
-+ stext = text.split()
- result = []
- for e in stext:
- result.append(e+" ")
diff --git a/sandbox/dreamcatcher/rlpdf/README.txt b/sandbox/dreamcatcher/rlpdf/README.txt
deleted file mode 100644
index 62e31f1ef..000000000
--- a/sandbox/dreamcatcher/rlpdf/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-modules from reportlab tools
-
diff --git a/sandbox/dreamcatcher/rlpdf/__init__.py b/sandbox/dreamcatcher/rlpdf/__init__.py
deleted file mode 100644
index 274814120..000000000
--- a/sandbox/dreamcatcher/rlpdf/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# rlpdf subpackage
-
-from rlpdf import Writer
-from stylesheet import getStyleSheet
-from rltemplate import RLDocTemplate
diff --git a/sandbox/dreamcatcher/rlpdf/rllicense.txt b/sandbox/dreamcatcher/rlpdf/rllicense.txt
deleted file mode 100644
index f3825f506..000000000
--- a/sandbox/dreamcatcher/rlpdf/rllicense.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-#####################################################################################
-#
-# Copyright (c) 2000-2001, ReportLab Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-# * Neither the name of the company nor the names of its contributors may be
-# used to endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE OFFICERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-#####################################################################################
diff --git a/sandbox/dreamcatcher/rlpdf/rlpdf.py b/sandbox/dreamcatcher/rlpdf/rlpdf.py
deleted file mode 100644
index d0dafc02e..000000000
--- a/sandbox/dreamcatcher/rlpdf/rlpdf.py
+++ /dev/null
@@ -1,789 +0,0 @@
-#! /usr/bin/env python
-
-"""
-:Author: Engelbert Gruber
-:Contact: goodger@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-Simple pdf writer.
-
-The output uses reportlabs module.
-
-Some stylesheet is needed.
-"""
-
-__docformat__ = 'reStructuredText'
-
-
-import time
-from types import ListType, TupleType, UnicodeType
-from docutils import writers, nodes, languages
-
-from stylesheet import getStyleSheet
-from rltemplate import RLDocTemplate
-
-from reportlab.lib.styles import ParagraphStyle
-from reportlab.lib.enums import *
-from reportlab.lib.pagesizes import A4
-from reportlab.platypus import *
-from reportlab.platypus.para import Paragraph
-from reportlab.lib import colors
-from reportlab.lib.units import inch
-from StringIO import StringIO
-
-class Writer(writers.Writer):
-
- supported = ('pdf','rlpdf')
- """Formats this writer supports."""
-
- settings_spec = (
- 'PDF-Specific Options',
- None,
- (('Format for footnote references: one of "superscript" or '
- '"brackets". Default is "brackets".',
- ['--footnote-references'],
- {'choices': ['superscript', 'brackets'], 'default': 'brackets',
- 'metavar': '<FORMAT>'}),))
-
- output = None
- """Final translated form of `document`."""
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = PDFTranslator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.story = visitor.as_what()
- self.output = self.record()
-
- def record(self):
- from reportlab.platypus import SimpleDocTemplate
- out = StringIO()
- doc = SimpleDocTemplate(out, pagesize=A4)
- doc.build(self.story)
- return out.getvalue()
-
- def lower(self):
- return 'pdf'
-
-class PDFTranslator(nodes.NodeVisitor):
-
- def __init__(self, doctree):
- self.settings = settings = doctree.settings
- self.styleSheet = getStyleSheet()
- nodes.NodeVisitor.__init__(self, doctree)
- self.language = languages.get_language(doctree.settings.language_code)
- self.in_docinfo = None
- self.head = []
- self.body = []
- self.foot = []
- self.sectionlevel = 0
- self.context = []
- self.topic_class = ''
- self.story = []
- self.bulletText = '\267' # maybe move this into stylesheet.
- self.bulletlevel = 0
-
- def as_what(self):
- return self.story
-
- def encode(self, text):
- """Encode special characters in `text` & return."""
- if type(text) is UnicodeType:
- text = text.replace(u'\u2020', u' ')
- text = text.replace(u'\xa0', u' ')
- text = text.encode('utf-8')
- #text = text.replace("&", "&amp;")
- #text = text.replace("<", '"')
- #text = text.replace('"', "(quot)")
- #text = text.replace(">", '"')
- # footnotes have character values above 128 ?
- return text
-
- def append_para(self, text, in_style='Normal', bulletText=None):
- if type(text) in (ListType, TupleType):
- text = ''.join([self.encode(t) for t in text])
- style = self.styleSheet[in_style]
- self.story.append(Paragraph(self.encode(text), style, \
- bulletText=bulletText, context=self.styleSheet))
-
- def starttag(self, node, tagname, suffix='\n', **attributes):
- atts = {}
- for (name, value) in attributes.items():
- atts[name.lower()] = value
- for att in ('class',): # append to node attribute
- if node.has_key(att):
- if atts.has_key(att):
- atts[att] = node[att] + ' ' + atts[att]
- for att in ('id',): # node attribute overrides
- if node.has_key(att):
- atts[att] = node[att]
- attlist = atts.items()
- attlist.sort()
- parts = [tagname]
- for name, value in attlist:
- if value is None: # boolean attribute
- parts.append(name.lower())
- elif isinstance(value, ListType):
- values = [str(v) for v in value]
- parts.append('%s="%s"' % (name.lower(),
- self.encode(' '.join(values))))
- else:
- parts.append('%s="%s"' % (name.lower(),
- self.encode(str(value))))
- return '<%s>%s' % (' '.join(parts), suffix)
-
- def visit_Text(self, node):
- self.context.append('#text')
- self.body.append(node.astext())
-
- def depart_Text(self, node):
- self.context.pop()
-
- def visit_admonition(self, node, name):
- pass
-
- def depart_admonition(self):
- pass
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
- def visit_author(self, node):
- self.visit_docinfo_item(node, 'author')
-
- def depart_author(self, node):
- self.depart_docinfo_item()
-
- def visit_address(self, node):
- self.visit_docinfo_item(node, 'address')
-
- def depart_address(self, node):
- self.depart_docinfo_item()
-
- def visit_version(self, node):
- self.visit_docinfo_item(node, 'version')
-
- def depart_version(self, node):
- self.depart_docinfo_item()
-
- def visit_system_message(self, node):
- pass
-
- def depart_system_message(self, node):
- pass
-
- def visit_term(self, node):
- self.context.append('dt')
- self.body.append(self.starttag(node, 'dt', ''))
-
- def depart_term(self, node):
- # Closes on visit_definition
- self.context.pop()
-
- def visit_authors(self, node):
- pass
-
- def depart_authors(self, node):
- pass
-
- def visit_block_quote(self, node):
- pass
-
- def depart_block_quote(self, node):
- pass
-
- def visit_bullet_list(self, node):
- self.context.append(len(self.body))
- self.context.append('ul')
- self.body.append('<ul bulletText="%s">' % self.bulletText)
-
- def depart_bullet_list(self, node):
- self.context.pop()
- self.body.append('</ul>')
- start = self.context.pop()
- if not 'ul' in self.context:
- self.append_para(self.body[start:])
- self.body = self.body[:start]
-
- def visit_caption(self, node):
- pass
-
- def depart_caption(self, node):
- pass
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- pass
-
- def depart_citation(self, node):
- pass
-
- def visit_citation_reference(self, node):
- pass
-
- def depart_citation_reference(self, node):
- pass
-
- def visit_classifier(self, node):
- pass
-
- def depart_classifier(self, node):
- pass
-
- def visit_colspec(self, node):
- pass
-
- def depart_colspec(self, node):
- pass
-
- def visit_contact(self, node):
- self.visit_docinfo_item(node, 'contact')
-
- def depart_contact(self, node):
- self.depart_docinfo_item()
-
- def visit_copyright(self, node):
- self.visit_docinfo_item(node, 'copyright')
-
- def depart_copyright(self, node):
- self.depart_docinfo_item()
-
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger')
-
- def depart_danger(self, node):
- self.depart_admonition()
-
- def visit_date(self, node):
- self.visit_docinfo_item(node, 'date')
-
- def depart_date(self, node):
- self.depart_docinfo_item()
-
- def visit_definition(self, node):
- self.body.append('</dt>')
- self.context.append('dd')
- self.body.append(self.starttag(node, 'dd'))
-
- def depart_definition(self, node):
- self.context.pop()
- self.body.append('</dd>')
-
- def visit_definition_list(self, node):
- self.context.append(len(self.body))
- self.context.append('dl')
- self.body.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- self.context.pop()
- self.body.append('</dl>')
- start = self.context.pop()
- if not 'dl' in self.context:
- self.append_para(self.body[start:])
- self.body = self.body[:start]
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- pass
-
- def depart_description(self, node):
- pass
-
- def visit_docinfo(self, node):
- self.context.append(len(self.body))
- self.in_docinfo = 1
-
- def depart_docinfo(self, node):
- start = self.context.pop()
- docinfo = self.body[start:]
- self.body = self.body[:start]
- self.append_para(docinfo)
- self.in_docinfo = None
-
- def visit_docinfo_item(self, node, name):
- self.body.append('<para style="DocInfo"><b>%s: </b>' % self.language.labels[name])
-
- def depart_docinfo_item(self):
- self.body.append('</para>')
-
- def visit_doctest_block(self, node):
- self.visit_literal_block(node)
-
- def depart_doctest_block(self, node):
- self.depart_literal_block(node)
-
- def visit_line_block(self, node):
- self.visit_literal_block(node)
-
- def depart_line_block(self, node):
- self.depart_literal_block(node)
-
- def visit_document(self, node):
- pass
-
- def depart_document(self, node):
- pass
-
- def visit_emphasis(self, node):
- self.context.append('i')
- self.body.append('<i>')
-
- def depart_emphasis(self, node):
- self.context.pop()
- self.body.append('</i>')
-
- def visit_entry(self, node):
- pass
-
- def depart_entry(self, node):
- pass
-
- def visit_enumerated_list(self, node):
- self.context.append(len(self.body))
- self.context.append('ol')
- self.body.append('<ol>')
-
- def depart_enumerated_list(self, node):
- self.context.pop()
- self.body.append('</ol>')
- start = self.context.pop()
- if not 'ol' in self.context:
- self.append_para(self.body[start:])
- self.body = self.body[:start]
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- self.body.append('<para>')
-
- def depart_field(self, node):
- self.body.append('</para>')
-
- def visit_field_argument(self, node):
- pass
-
- def depart_field_argument(self, node):
- pass
-
- def visit_field_list(self, node):
- self.context.append(len(self.body))
- self.body.append('<para>')
-
- def depart_field_list(self, node):
- start = self.context.pop()
- self.body.append('</para>')
- self.append_para(self.body[start:])
- self.body = self.body[:start]
-
- def visit_field_name(self, node):
- self.body.append('<b>')
-
- def depart_field_name(self, node):
- self.body.append(': </b>')
-
- def visit_field_body(self, node):
- pass
-
- def depart_field_body(self, node):
- pass
-
- def visit_footnote(self, node):
- self.context.append('footnotes')
- self.footnote_backrefs(node)
-
- def footnote_backrefs(self, node):
- if self.settings.footnote_backlinks and node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- self.context.append("%s%s" % (self.starttag({}, 'setLink', '', destination=node['id']), \
- '</setLink>'))
- self.context.append("%s%s" % (self.starttag({}, 'link', '', destination=backrefs[0]), \
- '</link>'))
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append("%s%s%s" % (self.starttag({}, 'link', '', destination=backref),
- i,
- '</link>'))
- i += 1
- self.context.append(' <i>(%s)</i> ' % ', '.join(backlinks))
- self.context.append("%s%s" % (self.starttag({}, 'setLink', '', destination=node['id']), \
- '</setLink>'))
- else:
- self.context.append("%s%s" % (self.starttag({}, 'setLink', '', destination=node['id']), \
- '</setLink>'))
- self.context.append('')
-
- def footnote_backrefs_depart(self, node):
- if not self.context and self.body:
- self.append_para(self.body)
- self.body = []
-
- def depart_footnote(self, node):
- self.context.pop()
- self.footnote_backrefs_depart(node)
-
- def visit_footnote_reference(self, node):
- # for backrefs
- if self.settings.footnote_backlinks and node.has_key('id'):
- self.body.append(self.starttag(node, 'setLink', '', destination=node['id']))
- self.context.append('</setLink>')
- else:
- self.context.append('')
-
- href = ''
- if node.has_key('refid'):
- href = node['refid']
- elif node.has_key('refname'):
- href = self.document.nameids[node['refname']]
- format = self.settings.footnote_references
- if format == 'brackets':
- suffix = '['
- self.context.append(']')
- elif format == 'superscript':
- suffix = '<super>'
- self.context.append('</super>')
- else: # shouldn't happen
- suffix = '???'
- self.content.append('???')
- self.body.append(self.starttag(node, 'link', suffix, destination=href))
-
- def depart_footnote_reference(self, node):
- self.body.append(self.context.pop())
- self.body.append('</link>')
- self.body.append(self.context.pop())
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- pass
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_interpreted(self, node):
- pass
-
- def depart_interpreted(self, node):
- pass
-
- def visit_label(self, node):
- if 'footnotes' in self.context:
- self.body.append('[')
-
- def depart_label(self, node):
- if 'footnotes' in self.context:
- self.body.append(']')
- self.body.append(self.context.pop())
- self.body.append(self.context.pop())
- self.body.append(' ')
-
- def visit_legend(self, node):
- pass
-
- def depart_legend(self, node):
- pass
-
- def visit_list_item(self, node):
- self.context.append('li')
- self.body.append('<li>')
-
- def depart_list_item(self, node):
- self.context.pop()
- self.body.append('</li>')
-
- def visit_literal(self, node):
- self.context.append('literal')
-
- def depart_literal(self, node):
- self.context.pop()
-
- def visit_literal_block(self, node):
- self.story.append(Preformatted(node.astext(), self.styleSheet['Code']))
- raise nodes.SkipNode
-
- def depart_literal_block(self, node):
- pass
-
- def visit_meta(self, node):
- self.head.append(self.starttag(node, 'meta', **node.attributes))
-
- def depart_meta(self, node):
- pass
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
- def visit_option(self, node):
- pass
-
- def depart_option(self, node):
- pass
-
- def visit_option_argument(self, node):
- pass
-
- def depart_option_argument(self, node):
- pass
-
- def visit_option_group(self, node):
- pass
-
- def depart_option_group(self, node):
- pass
-
- def visit_option_list(self, node):
- self.context.append(len(self.body))
- self.context.append('option_list')
-
- def depart_option_list(self, node):
- self.context.pop()
- start = self.context.pop()
- if not 'option_list' in self.context:
- self.append_para(self.body[start:])
- self.body = self.body[:start]
-
- def visit_option_list_item(self, node):
- pass
-
- def depart_option_list_item(self, node):
- pass
-
- def visit_option_string(self, node):
- pass
-
- def depart_option_string(self, node):
- pass
-
- def visit_organization(self, node):
- self.visit_docinfo_item(node, 'organization')
-
- def depart_organization(self, node):
- self.depart_docinfo_item()
-
- def visit_paragraph(self, node):
- self.context.append(len(self.body))
- self.context.append('p')
-
- def depart_paragraph(self, node):
- self.context.pop()
- start = self.context.pop()
- if not self.context and self.body:
- self.append_para(self.body[start:])
- self.body = self.body[:start]
-
- def visit_problematic(self, node):
- pass
-
- def depart_problematic(self, node):
- pass
-
- def visit_raw(self, node):
- if node.has_key('format') and node['format'] == 'html':
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def visit_target(self, node):
- if not (node.has_key('refuri') or node.has_key('refid')
- or node.has_key('refname')):
- href = ''
- if node.has_key('id'):
- href = node['id']
- elif node.has_key('name'):
- href = node['name']
- self.body.append("%s%s" % (self.starttag(node, 'setLink', '', destination=href), \
- '</setLink>'))
- raise nodes.SkipNode
-
- def depart_target(self, node):
- pass
-
- def visit_reference(self, node):
- self.context.append('a')
- if node.has_key('refuri'):
- href = node['refuri']
- self.body.append(self.starttag(node, 'a', '', href=href))
- self.context.append('</a>')
- else:
- if node.has_key('id'):
- self.body.append(self.starttag({}, 'setLink', '', destination=node['id']))
- self.context.append('</setLink>')
- if node.has_key('refid'):
- href = node['refid']
- elif node.has_key('refname'):
- href = self.document.nameids[node['refname']]
- self.body.append(self.starttag(node, 'link', '', destination=href))
- self.context.append('</link>')
-
- def depart_reference(self, node):
- if node.has_key('id') and \
- not node.has_key('refuri'):
- self.body.append(self.context.pop())
- self.body.append(self.context.pop())
- self.context.pop()
-
- def visit_revision(self, node):
- self.visit_docinfo_item(node, 'revision')
-
- def depart_revision(self, node):
- self.depart_docinfo_item()
-
- def visit_row(self, node):
- pass
-
- def depart_row(self, node):
- pass
-
- def visit_section(self, node):
- self.sectionlevel += 1
-
- def depart_section(self, node):
- self.sectionlevel -= 1
-
- def visit_status(self, node):
- self.visit_docinfo_item(node, 'status')
-
- def depart_status(self, node):
- self.depart_docinfo_item()
-
- def visit_strong(self, node):
- self.context.append('b')
- self.body.append('<b>')
-
- def depart_strong(self, node):
- self.context.pop()
- self.body.append('</b>')
-
- def visit_subtitle(self, node):
- self.context.append(len(self.body))
- self.context.append('subtitle')
-
- def depart_subtitle(self, node):
- style = self.context.pop()
- start = self.context.pop()
- self.append_para(self.body[start:], style)
- self.body = self.body[:start]
-
- def visit_title(self, node):
- atts = {}
- self.context.append(len(self.body))
- self.context.append('title')
- if isinstance(node.parent, nodes.topic):
- self.context.append('')
- self.topic_class = 'topic-title'
- elif self.sectionlevel == 0:
- self.context.append('title')
- else:
- self.context.append("h%s" % self.sectionlevel)
-
- if self.context[-1] != 'title':
- if node.parent.hasattr('id'):
- self.context.append('</setLink>')
- self.body.append(self.starttag({}, 'setLink', '', destination=node.parent['id']))
- if node.hasattr('refid'):
- self.context.append('</link>')
- self.body.append(self.starttag({}, 'link', '', destination=node['refid']))
- else:
- self.context.append('')
-
- def depart_title(self, node):
- if node.hasattr('refid'):
- self.body.append(self.context.pop())
- if node.parent.hasattr('id'):
- self.body.append(self.context.pop())
- style = self.context.pop()
- self.context.pop()
- if isinstance(node.parent, nodes.topic):
- style = self.topic_class
- start = self.context.pop()
- self.append_para(self.body[start:], style)
- self.body = self.body[:start]
-
- def unimplemented_visit(self, node):
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
-
- def visit_topic(self, node):
- if node.hasattr('id'):
- self.context.append('</setLink>')
- self.body.append(self.starttag({}, 'setLink', '', destination=node['id']))
-
- def depart_topic(self, node):
- if node.hasattr('id'):
- self.body.append(self.context.pop())
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def invisible_visit(self, node):
- """Invisible nodes should be ignored."""
- pass
-
- def visit_comment(self, node):
- raise nodes.SkipNode
-
- depart_comment = invisible_visit
- visit_substitution_definition = visit_comment
- depart_substitution_definition = depart_comment
- visit_figure = visit_comment
- depart_figure = depart_comment
-
- visit_sidebar = invisible_visit
- visit_warning = invisible_visit
- visit_tip = invisible_visit
- visit_tbody = invisible_visit
- visit_thead = invisible_visit
- visit_tgroup = invisible_visit
- visit_table = invisible_visit
- visit_title_reference = invisible_visit
- visit_transition = invisible_visit
- visit_pending = invisible_visit
- depart_pending = invisible_visit
- depart_transition = invisible_visit
- depart_title_reference = invisible_visit
- depart_table = invisible_visit
- depart_tgroup = invisible_visit
- depart_thead = invisible_visit
- depart_tbody = invisible_visit
- depart_tip = invisible_visit
- depart_warning = invisible_visit
- depart_sidebar = invisible_visit
diff --git a/sandbox/dreamcatcher/rlpdf/rltemplate.py b/sandbox/dreamcatcher/rlpdf/rltemplate.py
deleted file mode 100644
index 16b453b73..000000000
--- a/sandbox/dreamcatcher/rlpdf/rltemplate.py
+++ /dev/null
@@ -1,143 +0,0 @@
-#copyright ReportLab Inc. 2000
-#see rllicense.txt for license details
-#history http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/docs/tools/rltemplate.py?cvsroot=reportlab
-#$Header$
-# doc template for RL manuals. Currently YAML is hard-coded
-#to use this, which is wrong.
-
-
-from reportlab.platypus import PageTemplate, \
- BaseDocTemplate, SimpleDocTemplate, Frame, Paragraph
-from reportlab.lib.units import inch, cm
-from reportlab.rl_config import defaultPageSize
-
-
-class FrontCoverTemplate(PageTemplate):
- def __init__(self, id, pageSize=defaultPageSize):
- self.pageWidth = pageSize[0]
- self.pageHeight = pageSize[1]
- frame1 = Frame(inch,
- 3*inch,
- self.pageWidth - 2*inch,
- self.pageHeight - 518, id='cover')
- PageTemplate.__init__(self, id, [frame1]) # note lack of onPage
-
- def afterDrawPage(self, canvas, doc):
- canvas.saveState()
- #canvas.drawImage('../images/replogo.gif',2*inch, 8*inch)
-
-
- canvas.setFont('Times-Roman', 10)
- canvas.line(inch, 120, self.pageWidth - inch, 120)
-
- #canvas.drawString(inch, 100, 'Lombard Business Park')
- #canvas.drawString(inch, 88, '8 Lombard Road')
- #canvas.drawString(inch, 76, 'Wimbledon')
- #canvas.drawString(inch, 64, 'London, ENGLAND SW19 3TZ')
-
- #canvas.drawRightString(self.pageWidth - inch, 100, '103 Bayard Street')
- #canvas.drawRightString(self.pageWidth - inch, 88, 'New Brunswick')
- #canvas.drawRightString(self.pageWidth - inch, 76, 'New Jersey, 08904)')
- #canvas.drawRightString(self.pageWidth - inch, 64, 'USA')
-
- canvas.restoreState()
-
-
-class OneColumnTemplate(PageTemplate):
- def __init__(self, id, pageSize=defaultPageSize):
- self.pageWidth = pageSize[0]
- self.pageHeight = pageSize[1]
- frame1 = Frame(inch,
- inch,
- self.pageWidth - 2*inch,
- self.pageHeight - 2*inch,
- id='normal')
- PageTemplate.__init__(self, id, [frame1]) # note lack of onPage
-
- def afterDrawPage(self, canvas, doc):
- y = self.pageHeight - 50
- canvas.saveState()
- canvas.setFont('Times-Roman', 10)
- canvas.drawString(inch, y+8, doc.title)
- canvas.drawRightString(self.pageWidth - inch, y+8, doc.chapter)
- canvas.line(inch, y, self.pageWidth - inch, y)
- canvas.drawCentredString(doc.pagesize[0] / 2, 0.75*inch, 'Page %d' % canvas.getPageNumber())
- canvas.restoreState()
-
-class TwoColumnTemplate(PageTemplate):
- def __init__(self, id, pageSize=defaultPageSize):
- self.pageWidth = pageSize[0]
- self.pageHeight = pageSize[1]
- colWidth = 0.5 * (self.pageWidth - 2.25*inch)
- frame1 = Frame(inch,
- inch,
- colWidth,
- self.pageHeight - 2*inch,
- id='leftCol')
- frame2 = Frame(0.5 * self.pageWidth + 0.125,
- inch,
- colWidth,
- self.pageHeight - 2*inch,
- id='rightCol')
- PageTemplate.__init__(self, id, [frame1, frame2]) # note lack of onPage
-
- def afterDrawPage(self, canvas, doc):
- y = self.pageHeight - 50
- canvas.saveState()
- canvas.setFont('Times-Roman', 10)
- canvas.drawString(inch, y+8, doc.title)
- canvas.drawRightString(self.pageWidth - inch, y+8, doc.chapter)
- canvas.line(inch, y, self.pageWidth - inch, y*inch)
- canvas.drawCentredString(doc.pagesize[0] / 2, 0.75*inch, 'Page %d' % canvas.getPageNumber())
- canvas.restoreState()
-
-
-# class RLDocTemplate(BaseDocTemplate):
-class RLDocTemplate(SimpleDocTemplate):
- def afterInit(self):
- self.addPageTemplates(FrontCoverTemplate('Cover', self.pagesize))
- self.addPageTemplates(OneColumnTemplate('Normal', self.pagesize))
- self.addPageTemplates(TwoColumnTemplate('TwoColumn', self.pagesize))
- self.addPageTemplates(OneColumnTemplate('Cover', self.pagesize))
-
- #just playing
- self.title = "(Document Title Goes Here)"
- self.chapter = "(No chapter yet)"
- self.chapterNo = 1 #unique keys
- self.sectionNo = 1 # unique keys
-
-## # AR hack
-## self.counter = 1
- def beforeDocument(self):
- self.canv.showOutline()
-
- def afterFlowable(self, flowable):
- """Detect Level 1 and 2 headings, build outline,
- and track chapter title."""
- if isinstance(flowable, Paragraph):
- style = flowable.style.name
-
-## #AR debug text
-## try:
-## print '%d: %s...' % (self.counter, flowable.getPlainText()[0:40])
-## except AttributeError:
-## print '%d: (something with ABag)' % self.counter
-## self.counter = self.counter + 1
-
- if style == 'Title':
- self.title = flowable.getPlainText()
- elif style == 'Heading1':
- self.chapter = flowable.getPlainText()
- key = 'ch%d' % self.chapterNo
- self.canv.bookmarkPage(key)
- self.canv.addOutlineEntry(flowable.getPlainText(),
- key, 0, 0)
- self.chapterNo = self.chapterNo + 1
- self.sectionNo = 1
- elif style == 'Heading2':
- self.section = flowable.text
- key = 'ch%ds%d' % (self.chapterNo, self.sectionNo)
- self.canv.bookmarkPage(key)
- self.canv.addOutlineEntry(flowable.getPlainText(),
- key, 1, 0)
- self.sectionNo = self.sectionNo + 1
diff --git a/sandbox/dreamcatcher/rlpdf/stylesheet.py b/sandbox/dreamcatcher/rlpdf/stylesheet.py
deleted file mode 100644
index ed2c21233..000000000
--- a/sandbox/dreamcatcher/rlpdf/stylesheet.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#copyright ReportLab Inc. 2000
-#see rllicense.txt for license details
-#history http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/docs/tools/stylesheet.py?cvsroot=reportlab
-#$Header$
-#standard stylesheet for our manuals
-from reportlab.lib.styles import StyleSheet1, ParagraphStyle
-from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT, TA_JUSTIFY
-from reportlab.lib import colors
-
-
-def getStyleSheet():
- """Returns a stylesheet object"""
- stylesheet = StyleSheet1()
-
- stylesheet.add(ParagraphStyle(name='Normal',
- fontName='Times-Roman',
- fontSize=10,
- leading=12,
- spaceBefore=4,
- spaceAfter=4)
- )
-
- stylesheet.add(ParagraphStyle(name='DocInfo',
- parent=stylesheet['Normal'],
- leading=12,
- spaceBefore=0,
- spaceAfter=0)
- )
-
- stylesheet.add(ParagraphStyle(name='Comment',
- fontName='Times-Italic')
- )
-
- stylesheet.add(ParagraphStyle(name='Indent1',
- leftIndent=36,
- firstLineIndent=0)
- )
-
- stylesheet.add(ParagraphStyle(name='BodyText',
- parent=stylesheet['Normal'],
- spaceBefore=6)
- )
- stylesheet.add(ParagraphStyle(name='Italic',
- parent=stylesheet['BodyText'],
- fontName = 'Times-Italic')
- )
-
- stylesheet.add(ParagraphStyle(name='Heading1',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=20,
- leading=20,
- spaceBefore=10,
- spaceAfter=6),
- alias='h1')
-
- stylesheet.add(ParagraphStyle(name='Heading2',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=18,
- leading=18,
- spaceBefore=10,
- spaceAfter=6),
- alias='h2')
-
- stylesheet.add(ParagraphStyle(name='Heading3',
- parent=stylesheet['Normal'],
- fontName = 'Times-BoldItalic',
- fontSize=16,
- leading=16,
- spaceBefore=10,
- spaceAfter=6),
- alias='h3')
-
- stylesheet.add(ParagraphStyle(name='Heading4',
- parent=stylesheet['Normal'],
- fontName = 'Times-BoldItalic',
- fontsize=14,
- leading=14,
- spaceBefore=8,
- spaceAfter=4),
- alias='h4')
-
- stylesheet.add(ParagraphStyle(name='Heading5',
- parent=stylesheet['Normal'],
- fontName = 'Times-BoldItalic',
- fontsize=13,
- leading=13,
- spaceBefore=8,
- spaceAfter=4),
- alias='h5')
-
- stylesheet.add(ParagraphStyle(name='Heading6',
- parent=stylesheet['Normal'],
- fontName = 'Times-BoldItalic',
- fontsize=12,
- leading=12,
- spaceBefore=8,
- spaceAfter=4),
- alias='h6')
-
- stylesheet.add(ParagraphStyle(name='Title',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=22,
- leading=22,
- spaceAfter=8,
- alignment=TA_CENTER
- ),
- alias='title')
-
- stylesheet.add(ParagraphStyle(name='Subtitle',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=20,
- leading=20,
- spaceAfter=6,
- alignment=TA_CENTER
- ),
- alias='subtitle')
-
- stylesheet.add(ParagraphStyle(name='TopicTitle',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=18,
- leading=14,
- spaceAfter=6,
- ),
- alias='topic-title')
-
- for i in range(0, 15):
- indent = 18*i
- stylesheet.add(ParagraphStyle(name='TopicItem%s' % i,
- parent=stylesheet['Normal'],
- fontName = 'Times-Roman',
- fontSize=12,
- leftIndent=indent,
- spaceBefore=0,
- spaceAfter=0,
- ),
- alias='topic-item-%s' % i)
-
- stylesheet.add(ParagraphStyle(name='UnorderedList',
- parent=stylesheet['Normal'],
- firstLineIndent=0,
- leftIndent=18,
- bulletIndent=9,
- spaceBefore=0,
- bulletFontName='Symbol'),
- alias='ul')
-
- stylesheet.add(ParagraphStyle(name='Definition',
- parent=stylesheet['Normal'],
- firstLineIndent=0,
- leftIndent=36,
- bulletIndent=0,
- spaceAfter=2,
- spaceBefore=2,
- bulletFontName='Times-BoldItalic'),
- alias='dl')
-
- stylesheet.add(ParagraphStyle(name='OrderedList',
- parent=stylesheet['Definition']),
- alias='ol')
-
- stylesheet.add(ParagraphStyle(name='Code',
- parent=stylesheet['Normal'],
- fontName='Courier',
- textColor=colors.navy,
- fontSize=8,
- leading=8.8,
- leftIndent=36,
- firstLineIndent=0))
-
- stylesheet.add(ParagraphStyle(name='FunctionHeader',
- parent=stylesheet['Normal'],
- fontName='Courier-Bold',
- fontSize=8,
- leading=8.8))
-
- stylesheet.add(ParagraphStyle(name='DocString',
- parent=stylesheet['Normal'],
- fontName='Courier',
- fontSize=8,
- leftIndent=18,
- leading=8.8))
-
- stylesheet.add(ParagraphStyle(name='DocStringIndent',
- parent=stylesheet['Normal'],
- fontName='Courier',
- fontSize=8,
- leftIndent=36,
- leading=8.8))
-
- stylesheet.add(ParagraphStyle(name='URL',
- parent=stylesheet['Normal'],
- fontName='Courier',
- textColor=colors.navy,
- alignment=TA_CENTER),
- alias='u')
-
- stylesheet.add(ParagraphStyle(name='Centred',
- parent=stylesheet['Normal'],
- alignment=TA_CENTER
- ))
-
- stylesheet.add(ParagraphStyle(name='Caption',
- parent=stylesheet['Centred'],
- fontName='Times-Italic'
- ))
-
- return stylesheet
diff --git a/sandbox/dreamcatcher/tools/pdf.py b/sandbox/dreamcatcher/tools/pdf.py
deleted file mode 100755
index de89e44d5..000000000
--- a/sandbox/dreamcatcher/tools/pdf.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:Author: Engelbert Gruber
-:Contact: grubert@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-A minimal front-end to the Docutils Publisher, producing PDF via ReportLabs.
-"""
-
-from docutils.core import publish_cmdline
-try:
- from docutils.writers.rlpdf import Writer
-except ImportError:
- from rlpdf import Writer
-
-
-usage = 'usage:\n %prog [options] [source [destination]]'
-
-publish_cmdline(writer=Writer(), usage=usage)
diff --git a/sandbox/grubert/README.txt b/sandbox/grubert/README.txt
deleted file mode 100644
index 12b81cfa5..000000000
--- a/sandbox/grubert/README.txt
+++ /dev/null
@@ -1,69 +0,0 @@
-2003-02
--------
-
-latex writer into main
-~~~~~~~~~~~~~~~~~~~~~~
-
-Done:
-* move latex2e.py into docutils/writers
-* move rst2latex.py into tools.
-* add latex to writers/__init__ writer_aliases.
-* documentation: tools documentation.
-
-To do:
-* commandline options, style.tex, ...
-
- Where to move the latex2e-README. txt.
-* test: writer tests might be too simple, currently publish is used.
- test/test_writers
- test that the produced latex document is the same.
-
-
-2002-12
--------
-
-pdfsamples
-~~~~~~~~~~
-
-1. reduced tools_test.txt_ multirow and multicol tablecells donot work.
-
-2. docs_tools.txt_.
-
-3. specs_pep-0256.txt_.
-
-.. _tools_test.txt: test.pdf
-.. _specs_pep-0256.txt: pep-0256.pdf
-.. _docs_tools.txt: tools.pdf
-
-
-2002-09
--------
-
-latex enhanced by julien.
-
-2002-07
--------
-
-Menu changed now try for latex writer.
-
-2002-05-11
-----------
-
-This month sandbox menu is a pdf writer using
-reportlab lib.
-
-I am unsure it it will ever work, justification might
-need hyphenation and automatic sizing of table cells
-seams to be nontrivial (considering the size of the
-usual html browsers).
-
-A better layout might be possible via the latex2e writer.
-(on next month menu).
-
-I try to approach davids structure and work and
-coding conventions but slowly as a morning sunrise.
-
-cheers
-
- grubert@users.sourceforge.net
-
diff --git a/sandbox/grubert/directory_structur b/sandbox/grubert/directory_structur
deleted file mode 100644
index 44e39d4df..000000000
--- a/sandbox/grubert/directory_structur
+++ /dev/null
@@ -1,24 +0,0 @@
-Sandbox directory structure (2002-07-05)
-
-sandbox/
- userid/
- component_name/ # A verbose name is best.
- README.txt # Please explain requirements,
- # purpose/goals, and usage.
- docs/
- ...
- component.py # The component is a single module.
- # *OR* (but *not* both)
- component/ # The component is a package.
- __init__.py # Contains the Reader/Writer class.
- other1.py # Other modules and data files used
- data.txt # by this component.
- ...
- test/ # Test suite.
- ...
- tools/ # For front-ends etc.
- ...
- setup.py # Use Distutils to install the component
- # code and tools/ files into the right
- # places in Docutils.
-
diff --git a/sandbox/grubert/docutils.sty b/sandbox/grubert/docutils.sty
deleted file mode 100644
index 7c25b3ad4..000000000
--- a/sandbox/grubert/docutils.sty
+++ /dev/null
@@ -1,54 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%% docutils.sty: A style for docutils latex output %%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%
-%% o author: Alexander Schmolck (a.schmolck@gmx.net)
-%% o created: 2002-07-07 10:50:31+00:40
-%% o last modified: $Date$
-%% o keywords:
-%% o license:
-%XXX titlesec
-%% XXX geometry
-\usepackage{graphicx}
-\usepackage{latexsym} % extra symbols
-\usepackage{url} % !!!: pay attention when using in other commands!!!
-\usepackage{verbatim} % normal verbatim has lenght-limit
-\usepackage{enumerate} % easy style choice with e.g: ``\begin{enumerate}[Ex i.]``
-\usepackage{hyperref} %href, htarget and hlink XXX: pdfauthor, pdfcreator etc.
-\usepackage{xr} %XXX do we need this?
-% need this to have ``fboxes`` in ``enviroments``, as well as ``verbatim``s
-\usepackage{fancybox}
-\usepackage{mdwtab} % better tables and arrays (fixes spacing and adds
- % vertical align and multirows (m))
-\usepackage{ltxtable} % long and autoscaling tables (use X for autoscaled
- % columns)
-\newcommand{\transition}{\vspace{2em}\par\hrule{}\par\vspace{2em}}
-\newcommand{\classifier}[1]{(\textit{#1})}
-\newenvironment{topic}[1]%
-{\begin{Sbox}%
- \begin{minipage}{.8\textwidth}%
- \protect{\large{\textbf{#1}}}\par\vspace{.5em}}%
-{\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}}
-%XXX shadow box for warnings?
-\newenvironment{admonition}[1]%
-{\begin{center}%
- \begin{Sbox}%
- \begin{minipage}{.9\textwidth}%
- \protect{\textsc{#1}}\par\vspace{.2em}}%
-{\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}\end{center}}
-
-\newenvironment{doctest}%
-{\VerbatimEnvironment
- \begin{Verbatim}}%
-{\end{Verbatim}}
-% {%
-% \begin{Sbox}%
-% \begin{minipage}{.8\textwidth}%
-% \protect{\large{\textsc{#1}}\par\vspace{.5em}}}%
-% {\end{minipage}\end{Sbox}\fbox{\TheSbox}\par\vspace{.5em}}
-%{\end{minipage}\end{Sbox}\fbox{\TheSbox}}
-
-
-%% just a piece of example code
-% \newcommand{\vitem}%
-% {\SaveVerb[{\item[\UseVerb{\MyTemp}]}]{\MyTemp}}
diff --git a/sandbox/grubert/latex.py b/sandbox/grubert/latex.py
deleted file mode 100755
index a0f1a6ab8..000000000
--- a/sandbox/grubert/latex.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:Author: David Goodger
-:Contact: goodger@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-A minimal front-end to the Docutils Publisher, producing HTML.
-"""
-
-import locale
-locale.setlocale(locale.LC_ALL, '')
-
-from docutils.core import publish_cmdline
-
-
-usage = '%prog [options] [source [destination]]'
-description = ('Generate LaTeX documents from standalone reStructuredText '
- 'sources.')
-
-publish_cmdline(writer_name='latex', usage=usage, description=description)
diff --git a/sandbox/grubert/latex/__init__.py b/sandbox/grubert/latex/__init__.py
deleted file mode 100644
index 0981bc081..000000000
--- a/sandbox/grubert/latex/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from latex2e import Writer
diff --git a/sandbox/grubert/latex2e-README.txt b/sandbox/grubert/latex2e-README.txt
deleted file mode 100644
index b757c8c9a..000000000
--- a/sandbox/grubert/latex2e-README.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-latex2e BUGS TODOS and other animals
-------------------------------------
-
-for processing tools/test.txt use pdflatex because it will handle png-images.
-
-
-:Author: engelbert gruber
-:Contact: grubert@users.sourceforge.net
-:Date: $Date$
-
-To do
-~~~~~
-
-* dedication is centered italic in html (test.txt).
-
-* term: html puts classifier in italic and newline after classifier,
- latex in parentheses and no newline after it (test.txt).
-
-* field lists are indented in latex (test.txt).
-
-* literal block is indented in html (test.txt).
-
-* doctest block is indented in html.
-
-* footnotes donot link back in latex.
-
-* rubric, sidebar, ...
-
-* citation references and bibtex: could we learn or use something ?
-
- e.g. contemplating about persistence storage of references or
- the like reminds me of latex generating toc,lot,lof files.
-
-* quotes for german: {\glqq} {\grqq} {\glq} {\grq} {\dq}.
-
-* support embed-stylesheet.
-
-* the ^-sign is problematic: using mathmode wedge is usually the wrong font.
-
-* sidebar handling.
-
-* Maybe add end of line after term in definition list. see
- http://roundup.sf.net/doc-0.5/features.pdf
-
-* In tools.txt the option tables right column, there should be some more spacing
- between the description and the next paragraph "Default:".
-
- Paragraph separation in tables is hairy.
- see http://www.tex.ac.uk/cgi-bin/texfaq2html?label=struttab
-
- - The strut solution did not work.
- - setting extrarowheight added ad top of row not between paragraphs in
- a cell. ALTHOUGH i set it to 2pt because, text is too close to the topline.
- - baselineskip/stretch does not help.
-
-* two hlines after table head and on table end ?
-
-* table: multicol cells are always {l}.
-
-* pdfbookmark level 4 (and greater) does not work (might be settable but OTOH).
-
-* center subsection{Abstract} gives a latex error here.
- ``! LaTeX Error: Something's wrong--perhaps a missing \item.``
- Committed a HACK: centering by hfill
-
-* document errors are also too silent.
-
-* use optionlist for docinfo.
-
-* the title "table of contents" is centered too.
-
-* consider peter funk's hooks for TeXpert:
-
- * Define his own document preamble (including the choice to
- choose his own documentclass. That would make the ``--documentclass``
- option superfluous). I suggest to call this option ``--preamble``
-
- * Use two additional hooks to put additional stuff just behind the
- ``\begin{document}`` and just before the ``\end{document}`` macros.
- Typical uses would be ``\tableofcontents``, ``\listoffigures`` and
- ``\appendix``, ``\makeindex``, ``\makeglossary`` and some such
- for larger documents.
-
-* hyphens: co-developers should be co--developers ?
-
-* table heads and footer for longtable (firstpage lastpage ..)
-
-* longtable does not work with multirow
-
-* tabularx says "do not use any multicolmn which spans any X column.
- maybe use ltxtable instead of tabularx (Longtable combined with tabularx).
- but ltxtable disables longtable's multicolumn.
-
-* multiple author entries in docinfo (same thing as in html).
-
-* the indentional problematic error in test.txt is not referring anywhere.
-
-* table cells with multirow and multicolumn
-
-* tables have borders, and the border is missing in empty cells.
-
-* footnotes are not all on the same page (as in tools/test.txt) and do not link back
- and forth.
-
-* no link to system errors.
-
-* hyperlinks are not hyphenated this leads to bad spacing. see tools/test.txt
- 2.14 directives directives
-
-* meta keywords into pdf ?
-
-* pagestyle headings does not work, when sections are starred.
-
-* additional docinfo items: the field_body is inserted as text.
-
-ATTENTION
-~~~~~~~~~
-* put labeling inside (after the begin) environments.
-* me (e.g.) uses textwidth, julien linewidth see what is what.
-
- textwidth: is the normal width of the text on a page. It should generally
- be changed only in the preamble.
-
- linewidth: is the width of lines in the current environment. Normally equal to
- \textwidth, it may be different within an environment such as list or quote
- environments.
-
-Done
-~~~~
-
-* HACK --snap-footnote-refs=1 to strip trailing blanks from item preceeding a footnote-ref.
-* add a LaTeX-nbsp (~) before a LaTeX-newline to avoid "LaTeX-Error no line to end here".
-* line_blocks without use of mbox, to allow markups span over line ends.
-* add french to babel support.
-* double quotes by dq inside literal if language is de.
-* no quote mangling in literal blocks.
-* enumertated list with pre- and postfix.
-* support stylesheet and stylesheet-path.
-* FIX: QUICK: for latex error on abstract.
-* FIX: ^ by mathmode wedge (verb|^| did not work in mbox).
-* admonitions are not so visible as in html (make a border a bigger title, indent
- text) thanks to g.schwant.
-* FIX: protection of braces: formerly literal blocks were verbatim.
- Now that they are no longer verbatim braces are dangerous.
-* literal_block no longer verbatim to allow inline markup, no longer intended.
-* Always emit empty date and author entries.
-* FIX: descriptions without docinfo (self.docinfo not initialized).
-* footnotes are spread vertically (not with juliens style.tex) include it in python.
-* add handling (do nothing) for title-reference.
-* setlength extrarowheight 2pt too get a little space between text in tables
- and the lines above them.
-* table: multicol rows have no vertical lines.
-* --use-latex-toc: so we get pagenumbers.
-* reduce table width to 0.93 of linewidth.
-* decrement pdfbookmark levels. now 0 to 3.
-* use subsubsection for deeper ones.
-* all spaces in line-blocks are nonbreakable (~).
-* newenvironment optionlist for option-lists.
-* append ":" onto definition list terms.
-* long option-groups use multicolumn.
-* remove borders from option-lists.
-* lists that donot start at one donot work.
-* ordered list numbering style is taken from latex a.,b. in source
- gives 1., .. in document.
-* enumeration too deep: latex goes up to four.
-* abstract title should be centered.
-* docinfo table centered and narrower.
-* bibliographic field names have a ":".
-* german (de*) quotes.
-* colspec for tables without heads.
-* multipage table
-* field lists as description inside quote.
-* literal blocks are inside a quote environment (means indented).
diff --git a/sandbox/grubert/ltx-test.txt b/sandbox/grubert/ltx-test.txt
deleted file mode 100644
index 134eda67e..000000000
--- a/sandbox/grubert/ltx-test.txt
+++ /dev/null
@@ -1,476 +0,0 @@
-.. This is a comment. Note how any initial comments are moved by
- transforms to after the document title, subtitle, and docinfo.
-
-================================
- reStructuredText Test Document
-================================
-
-.. Above is the document title, and below is the subtitle.
- They are transformed from section titles after parsing.
-
---------------------------------
- Examples of Syntax Constructs
---------------------------------
-
-.. bibliographic fields (which also require a transform):
-
-:Author: David Goodger
-:Address: 123 Example Street
- Example, EX Canada
- A1B 2C3
-:Contact: goodger@users.sourceforge.net
-:Authors: Me; Myself; I
-:organization: humankind
-:date: $Date$
-:status: This is a "work in progress"
-:revision: $Revision$
-:version: 1
-:copyright: This document has been placed in the public domain. You
- may do with it as you wish. You may copy, modify,
- redistribute, reattribute, sell, buy, rent, lease,
- destroy, or improve it, quote it at length, excerpt,
- incorporate, collate, fold, staple, or mutilate it, or do
- anything else to it that your or anyone else's heart
- desires.
-:field name: This is a generic bibliographic field.
-:field name 2:
- Generic bibliographic fields may contain multiple body elements.
-
- Like this.
-
-:Dedication:
-
- For Docutils users & co-developers.
-
-:abstract:
-
- This is a test document, containing at least one example of each
- reStructuredText construct.
-
-.. meta::
- :keywords: reStructuredText, test, parser
- :description lang=en: A test document, containing at least one
- example of each reStructuredText construct.
-
-.. contents:: Table of Contents
-.. section-numbering::
-
-
-Structural Elements
-===================
-
-Section Title
--------------
-
-That's it, the text just above this line.
-
-Transitions
------------
-
-Here's a transition:
-
----------
-
-It divides the section.
-
-Body Elements
-=============
-
-Paragraphs
-----------
-
-A paragraph.
-
-Inline Markup
-`````````````
-
-Paragraphs contain text and may contain inline markup: *emphasis*,
-**strong emphasis**, `interpreted text`, ``inline literals``,
-standalone hyperlinks (http://www.python.org), external hyperlinks
-(Python_), internal cross-references (example_), footnote references
-(manually numbered [1]_, anonymous auto-numbered [#]_, labeled
-auto-numbered [#label]_, or symbolic [*]_), citation references
-([CIT2002]_), substitution references (|example|), and _`inline
-hyperlink targets` (see Targets_ below for a reference back to here).
-Problems are indicated by |problematic| text (generated by processing
-errors; this one is intentional).
-
-.. DO NOT RE-WRAP THE FOLLOWING PARAGRAPH!
-
-Let's test wrapping and whitespace significance in inline literals:
-``This is an example of --inline-literal --text, --including some--
-strangely--hyphenated-words. Adjust-the-width-of-your-browser-window
-to see how the text is wrapped. -- ---- -------- Now note the
-spacing between the words of this sentence (words
-should be grouped in pairs).``
-
-If the ``--pep-references`` option was supplied, there should be a
-live link to PEP 258 here.
-
-Bullet Lists
-------------
-
-- A bullet list
-
- + Nested bullet list.
- + Nested item 2.
-
-- Item 2.
-
- Paragraph 2 of item 2.
-
- * Nested bullet list.
- * Nested item 2.
-
- - Third level.
- - Item 2.
-
- * Nested item 3.
-
-Enumerated Lists
-----------------
-
-1. Arabic numerals.
-
- a) lower alpha)
-
- (i) (lower roman)
-
- A. upper alpha.
-
- I) upper roman)
-
-2. Lists that don't start at 1:
-
- 3. Three
-
- 4. Four
-
- C. C
-
- D. D
-
- iii. iii
-
- iv. iv
-
-Definition Lists
-----------------
-
-Term
- Definition
-Term : classifier
- Definition paragraph 1.
-
- Definition paragraph 2.
-Term
- Definition
-
-Field Lists
------------
-
-:what: Field lists map field names to field bodies, like database
- records. They are often part of an extension syntax. They are
- an unambiguous variant of RFC 2822 fields.
-
-:how arg1 arg2:
-
- The field marker is a colon, the field name, and a colon.
-
- The field body may contain one or more body elements, indented
- relative to the field marker.
-
-Option Lists
-------------
-
-For listing command-line options:
-
--a command-line option "a"
--b file options can have arguments
- and long descriptions
---long options can be long also
---input=file long options can also have
- arguments
-
---very-long-option
- The description can also start on the next line.
-
- The description may contain multiple body elements,
- regardless of where it starts.
-
--x, -y, -z Multiple options are an "option group".
--v, --verbose Commonly-seen: short & long options.
--1 file, --one=file, --two file
- Multiple options with arguments.
-/V DOS/VMS-style options too
-
-There must be at least two spaces between the option and the
-description.
-
-Literal Blocks
---------------
-
-Literal blocks are indented, and indicated with a double-colon ("::")
-at the end of the preceding paragraph (right here ``-->``)::
-
- if literal_block:
- text = 'is left as-is'
- spaces_and_linebreaks = 'are preserved'
- markup_processing = None
-
-Block Quotes
-------------
-
-Block quotes consist of indented body elements:
-
- This theory, that is mine, is mine.
-
- -- Anne Elk (Miss)
-
-Doctest Blocks
---------------
-
->>> print 'Python-specific usage examples; begun with ">>>"'
-Python-specific usage examples; begun with ">>>"
->>> print '(cut and pasted from interactive Python sessions)'
-(cut and pasted from interactive Python sessions)
-
-Tables
-------
-
-Here's a grid table followed by a simple table:
-
-+------------------------+------------+----------+----------+
-| Header row, column 1 | Header 2 | Header 3 | Header 4 |
-| (header rows optional) | | | |
-+========================+============+==========+==========+
-| body row 1, column 1 | column 2 | column 3 | column 4 |
-+------------------------+------------+----------+----------+
-| body row 2 | Cells may span columns. |
-+------------------------+------------+----------+----------+
-| body row 5 | Cells may also be | |
-| | empty: ``-->`` | |
-+------------------------+-----------------------+----------+
-
-.. not for latex
- +------------------------+------------+---------------------+
- | body row 3 | Cells may | - Table cells |
- +------------------------+ span rows. | - contain |
- | body row 4 | | - body elements. |
-
-
-===== ===== ======
- Inputs Output
------------- ------
- A B A or B
-===== ===== ======
-False False False
-True False True
-False True True
-True True True
-===== ===== ======
-
-Footnotes
----------
-
-.. [1] A footnote contains body elements, consistently indented by at
- least 3 spaces.
-
- This is the footnote's second paragraph.
-
-.. [#label] Footnotes may be numbered, either manually (as in [1]_) or
- automatically using a "#"-prefixed label. This footnote has a
- label so it can be referred to from multiple places, both as a
- footnore reference ([#label]_) and as a hyperlink reference
- (label_).
-
-.. [#] This footnote is numbered automatically and anonymously using a
- label of "#" only.
-
-.. [*] Footnotes may also use symbols, specified with a "*" label.
- Here's a reference to the next footnote: [*]_.
-
-.. [*] This footnote shows the next symbol in the sequence.
-
-.. [4] Here's an unreferenced footnote, with a reference to a
- nonexistent footnote: [5]_.
-
-Citations
----------
-
-.. [CIT2002] Citations are text-labeled footnotes. They may be
- rendered separately and differently from footnotes.
-
-Here's a reference to the above, [CIT2002]_, and a [nonexistent]_
-citation.
-
-Targets
--------
-
-.. _example:
-
-This paragraph is pointed to by the explicit "example" target. A
-reference can be found under `Inline Markup`_, above. `Inline
-hyperlink targets`_ are also possible.
-
-Section headers are implicit targets, referred to by name. See
-Targets_, which is a subsection of `Body Elements`_.
-
-Explicit external targets are interpolated into references such as
-"Python_".
-
-.. _Python: http://www.python.org/
-
-Targets may be indirect and anonymous. Thus `this phrase`__ may also
-refer to the Targets_ section.
-
-__ Targets_
-
-Here's a `hyperlink reference without a target`_, which generates an
-error.
-
-Duplicate Target Names
-``````````````````````
-
-Duplicate names in section headers or other implicit targets will
-generate "info" (level-1) system messages. Duplicate names in
-explicit targets will generate "warning" (level-2) system messages.
-
-Duplicate Target Names
-``````````````````````
-
-Since there are two "Duplicate Target Names" section headers, we
-cannot uniquely refer to either of them by name. If we try to (like
-this: `Duplicate Target Names`_), an error is generated.
-
-Directives
-----------
-
-.. contents:: :local:
-
-These are just a sample of the many reStructuredText Directives. For
-others, please see http://docutils.sf.net/spec/rst/directives.html.
-
-Document Parts
-``````````````
-
-An example of the "contents" directive can be seen above this section
-(a local, untitled table of contents_) and at the beginning of the
-document (a document-wide `table of contents`_).
-
-Images
-``````
-
-An image directive:
-
-.. image:: ../docs/rst/images/title.png
-
-A figure directive:
-
-.. figure:: ../docs/rst/images/title.png
- :alt: reStructuredText, the markup syntax
-
- A figure is an image with a caption and/or a legend:
-
- +------------+-----------------------------------------------+
- | re | Revised, revisited, based on 're' module. |
- +------------+-----------------------------------------------+
- | Structured | Structure-enhanced text, structuredtext. |
- +------------+-----------------------------------------------+
- | Text | Well it is, isn't it? |
- +------------+-----------------------------------------------+
-
- This paragraph is also part of the legend.
-
-Admonitions
-```````````
-
-.. Attention:: Directives at large.
-
-.. Caution::
-
- Don't take any wooden nickels.
-
-.. DANGER:: Mad scientist at work!
-
-.. Error:: Does not compute.
-
-.. Hint:: It's bigger than a bread box.
-
-.. Important::
- - Wash behind your ears.
- - Clean up your room.
- - Call your mother.
- - Back up your data.
-
-.. Note:: This is a note.
-
-.. Tip:: 15% if the service is good.
-
-.. WARNING:: Strong prose may provoke extreme mental exertion.
- Reader discretion is strongly advised.
-
-Target Footnotes
-````````````````
-
-.. target-notes::
-
-Line Blocks
-```````````
-
-Take it away, Eric the Orchestra Leader!
-
-.. line-block::
-
- A one, two, a one two three four
-
- Half a bee, philosophically,
- must, *ipso facto*, half not be.
- But half the bee has got to be,
- *vis a vis* its entity. D'you see?
-
- But can a bee be said to be
- or not to be an entire bee,
- when half the bee is not a bee,
- due to some ancient injury?
-
- Singing...
-
-Replacement Text
-````````````````
-
-I recommend you try |Python|_.
-
-.. |Python| replace:: Python, *the* best language around
-
-Substitution Definitions
-------------------------
-
-An inline image (|example|) example:
-
-.. |EXAMPLE| image:: ../docs/rst/images/biohazard.png
-
-(Substitution definitions are not visible in the HTML source.)
-
-Comments
---------
-
-Here's one:
-
-.. Comments begin with two dots and a space. Anything may
- follow, except for the syntax of footnotes, hyperlink
- targets, directives, or substitution definitions.
-
- Double-dashes -- "--" -- must be escaped somehow in HTML output.
-
-(View the HTML source to see the comment.)
-
-Error Handling
-==============
-
-Any errors caught during processing will generate system messages.
-
-There should be five messages in the following, auto-generated
-section, "Docutils System Messages":
-
-.. section should be added by Docutils automatically
diff --git a/sandbox/grubert/making_a_writer.txt b/sandbox/grubert/making_a_writer.txt
deleted file mode 100644
index 4d76b5170..000000000
--- a/sandbox/grubert/making_a_writer.txt
+++ /dev/null
@@ -1,133 +0,0 @@
-===============
-Making a writer
-===============
-
-:Author: engelbert gruber
-:Contact: grubert@users.sourceforge.net
-:Date: $Date$
-:Web site: http://docutils.sourceforge.net/
-
-.. contents::
-
-Introduction
-============
-
-This might become a document sometime, is now a FAQ, collected
-from docutils-develop@lists.sourceforge.net.
-
-This should give help in making a writer for the python docutils.
-Writers are backends writing to a dedicated format.
-
-General description
-===================
-
-from PEP-0258:
-
- Writers produce the final output (HTML, XML, TeX, etc.). Writers translate
- the internal document tree structure into the final data format, possibly
- running Writer-specific transforms first.
-
- Responsibilities:
-
- * Run transforms over the doctree(s).
- * Translate doctree(s) into specific output formats.
- * Transform references into format-native forms.
- * Write the translated output to the destination I/O.
-
-or in other words
-
- By the time the document gets to the Writer, it should be in
- final form. The Writer's job is simply (and only) to translate from
- the Docutils doctree structure to the target format. Some small
- transforms may be required, but they should be local and
- format-specific.
-
-
-The smallest writer
-===================
-
-Next to come. This should be a writer module where everything is done
-in unimplemented.
-
-
-Methods
-=======
-
-Empty methods
--------------
-
-It is legal and does not hint to missing functionality, when a
-method only implements pass, it just means that this calls information
-is not used, the actual content is usually produced between ``visit_*``
-and ``depart_*`` calls. e.g.::
-
- def visit_Text(self, node):
- self.body.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
-As long as there is no need for termination depart_Text is ok.
-
-Fallback methods
-----------------
-
-If derived from NodeVisitor
-
-* unknown_visit, unknown_departure
-
-Deriving from SparseNodeVisitor means everything might pass.
-
-GenericNodeVisitor adds
-
-* default_visit, default_depart.
-
-unimplemented_visit( self, node) seams to be there for both.
-
-Each might raise NotImplementedError(describe_here),
-
-General Problems
-----------------
-
-html pages are more like papyrus rolls, if one wants to go more usual
-paper formats some things are different or not.
-
-* page headings
-* page numbers
-
-
-Problems
---------
-
-In latex2e writer this looks awful to me, but as i understand this ensures
-that e.g. http addresses are not only text.
-
-Maybe this is due to the fact that self.docinfo is used, if one would remove
-it context might be unecessary.
-
-::
-
- def visit_docinfo_item (...):
- ...
- else:
- ##self.head.append('\\%s{%s}\n'
- ## % (name, self.attval(node.astext())))
- self.docinfo.append('\\textbf{%s} &\n\t' % name)
- self.context.append(' \\\\\n')
- self.context.append(self.docinfo)
- self.context.append(len(self.body))
- ##raise nodes.SkipNode
-
- def depart_docinfo_item(self, node):
- size = self.context.pop()
- dest = self.context.pop()
- tail = self.context.pop()
- tail = self.body[size:] + [tail]
- del self.body[size:]
- dest.extend(tail)
-
-
-Notes on Classes
-----------------
-
-To be completed.
diff --git a/sandbox/grubert/pdf1 b/sandbox/grubert/pdf1
deleted file mode 100755
index db5f32d84..000000000
--- a/sandbox/grubert/pdf1
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-DOCUTILS=../..
-QWRITER=$DOCUTILS/tools/quicktest.py
-OUT=test.pdf
-TEXT=pdftest_3.txt
-
-PYTHONPATH=`pwd`:$DOCUTILS:$PYTHONPATH
-
-if [ -n "$1" -a -e "$1" ] ; then
- TEXT=$1
- shift
-fi
-
-if [ -n "$1" ] ; then
- echo "-$1-"
- if [ $1 == "t" ] ; then
- $QWRITER -p $TEXT |less
- exit
- fi
-fi
-
-./pdf.py $TEXT $OUT
-
diff --git a/sandbox/grubert/pdftest_1.txt b/sandbox/grubert/pdftest_1.txt
deleted file mode 100644
index 3c215d725..000000000
--- a/sandbox/grubert/pdftest_1.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-Text
-
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-Und was ich immer schon einmal sagen wollte ...
-
-
diff --git a/sandbox/grubert/pdftest_2.txt b/sandbox/grubert/pdftest_2.txt
deleted file mode 100644
index 9ccd0bef8..000000000
--- a/sandbox/grubert/pdftest_2.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-.. This is a comment. Note how any initial comments are moved by
- transforms to after the document title, subtitle, and docinfo.
-
-================================
- reStructuredText Test Document
-================================
-
-.. Above is the document title, and below is the subtitle.
- They are transformed from section titles after parsing.
-
---------------------------------
- Examples of Syntax Constructs
---------------------------------
-
-.. bibliographic fields (which also require a transform):
-
-Structural Elements
-===================
-
-Section Title
--------------
-
-That's it, the text just above this line.
-
-Transitions
------------
-
-Here's a transition:
-
----------
-
-It divides the section.
-
-Body Elements
-=============
-
-Paragraphs
-----------
-
-A paragraph.
-
-Inline Markup
-`````````````
-
-Paragraphs contain text and may contain inline markup: *emphasis*,
-**strong emphasis**, `interpreted text`, ``inline literals``,
-standalone hyperlinks (http://www.python.org), external hyperlinks
-(Python_), internal cross-references (example_).
-
diff --git a/sandbox/grubert/rllicense.txt b/sandbox/grubert/rllicense.txt
deleted file mode 100644
index f3825f506..000000000
--- a/sandbox/grubert/rllicense.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-#####################################################################################
-#
-# Copyright (c) 2000-2001, ReportLab Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without modification,
-# are permitted provided that the following conditions are met:
-#
-# * Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
-# and/or other materials provided with the distribution.
-# * Neither the name of the company nor the names of its contributors may be
-# used to endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE OFFICERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
-# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
-# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
-# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-#####################################################################################
diff --git a/sandbox/grubert/rlpdf/README.txt b/sandbox/grubert/rlpdf/README.txt
deleted file mode 100644
index 62e31f1ef..000000000
--- a/sandbox/grubert/rlpdf/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-modules from reportlab tools
-
diff --git a/sandbox/grubert/rlpdf/__init__.py b/sandbox/grubert/rlpdf/__init__.py
deleted file mode 100644
index 274814120..000000000
--- a/sandbox/grubert/rlpdf/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# rlpdf subpackage
-
-from rlpdf import Writer
-from stylesheet import getStyleSheet
-from rltemplate import RLDocTemplate
diff --git a/sandbox/grubert/rlpdf/rlpdf.py b/sandbox/grubert/rlpdf/rlpdf.py
deleted file mode 100644
index 781aa0e70..000000000
--- a/sandbox/grubert/rlpdf/rlpdf.py
+++ /dev/null
@@ -1,671 +0,0 @@
-#! /usr/bin/env python
-
-"""
-:Author: Engelbert Gruber
-:Contact: goodger@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-Simple pdf writer.
-
-The output uses reportlabs module.
-
-Some stylesheet is needed.
-"""
-
-__docformat__ = 'reStructuredText'
-
-
-import time
-from types import ListType
-from docutils import writers, nodes, languages
-
-from stylesheet import getStyleSheet
-from rltemplate import RLDocTemplate
-
-from reportlab.lib.styles import ParagraphStyle
-from reportlab.lib.enums import *
-from reportlab.lib.pagesizes import A4
-from reportlab.platypus import *
-from reportlab.lib import colors
-from reportlab.lib.units import inch
-
-class Writer(writers.Writer):
-
- output = None
- """Final translated form of `document`."""
-
- def translate(self):
- visitor = PDFTranslator(self.document)
- self.document.walkabout(visitor)
- self.story = visitor.as_what()
-
- def record(self):
- doc = RLDocTemplate(self.destination, pagesize=A4)
- doc.build(self.story)
-
- def lower(self):
- return 'pdf'
-
-class PDFTranslator(nodes.NodeVisitor):
-
- def __init__(self, doctree):
- self.styleSheet = getStyleSheet()
- nodes.NodeVisitor.__init__(self, doctree)
- self.language = languages.get_language(doctree.settings.language_code)
- self.head = []
- self.body = []
- self.foot = []
- self.sectionlevel = 0
- self.context = []
- self.topic_class = ''
- self.story = []
- self.bulletText = '\xb7' # maybe move this into stylesheet.
-
- def as_what(self):
- return self.story
-
- def encode(self, text):
- """Encode special characters in `text` & return."""
- text = text.replace("&", "&amp;")
- #text = text.replace("<", "(lt)")
- #text = text.replace('"', "(quot)")
- #text = text.replace(">", "(gt)")
- # footnotes have character values above 128 ?
- for i in range(len(text)):
- if (ord(text[i])>128):
- return "ATT"
- print "warning: %d %x" % (i,ord(text[i]))
- text.replace(text[i],"?")
- return text
-
- def append_styled(self,text,in_style='Normal'):
- if self.styleSheet.has_key(in_style):
- style = self.styleSheet[in_style]
- self.story.append(Paragraph(self.encode(text), style, bulletText=None))
-
- def append_normal(self,text):
- style = self.styleSheet['Normal']
- self.story.append(Paragraph(self.encode(text), style, bulletText=None))
-
- def starttag(self, node, tagname, suffix='\n', **attributes):
- atts = {}
- for (name, value) in attributes.items():
- atts[name.lower()] = value
- for att in ('class',): # append to node attribute
- if node.has_key(att):
- if atts.has_key(att):
- atts[att] = node[att] + ' ' + atts[att]
- for att in ('id',): # node attribute overrides
- if node.has_key(att):
- atts[att] = node[att]
- attlist = atts.items()
- attlist.sort()
- parts = [tagname.upper()]
- for name, value in attlist:
- if value is None: # boolean attribute
- parts.append(name.upper())
- elif isinstance(value, ListType):
- values = [str(v) for v in value]
- parts.append('%s="%s"' % (name.upper(),
- self.encode(' '.join(values))))
- else:
- parts.append('%s="%s"' % (name.upper(),
- self.encode(str(value))))
- return '<%s>%s' % (' '.join(parts), suffix)
-
- def visit_Text(self, node):
- #self.body.append(self.encode(node.astext()))
- # Text is visited for every element ?
- #self.append_normal("Text:"+node.astext())
- pass
-
- def depart_Text(self, node):
- pass
-
- def visit_admonition(self, node, name):
- self.body.append(self.starttag(node, 'div', CLASS=name))
- self.body.append('<P CLASS="admonition-title">' + self.language.labels[name] + '</P>\n')
-
- def depart_admonition(self):
- self.body.append('</DIV>\n')
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
- def visit_author(self, node):
- self.visit_docinfo_item(node, 'author')
-
- def depart_author(self, node):
- self.depart_docinfo_item()
-
- def visit_authors(self, node):
- pass
-
- def depart_authors(self, node):
- pass
-
- def visit_block_quote(self, node):
- self.body.append(self.starttag(node, 'blockquote'))
-
- def depart_block_quote(self, node):
- self.body.append('</BLOCKQUOTE>\n')
-
- def visit_bullet_list(self, node):
- if self.topic_class == 'contents':
- self.body.append(self.starttag(node, 'ul', compact=None))
- else:
- style = self.styleSheet['Normal']
- self.story.append(Paragraph(self.encode(node.astext()),
- style, bulletText=self.bulletText))
-
- def depart_bullet_list(self, node):
- pass
-
- def visit_caption(self, node):
- self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
-
- def depart_caption(self, node):
- self.body.append('</P>\n')
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- self.body.append(self.starttag(node, 'table', CLASS='citation',
- frame="void", rules="none"))
- self.body.append('<COL CLASS="label">\n'
- '<COL>\n'
- '<TBODY VALIGN="top">\n'
- '<TR><TD>\n')
-
- def depart_citation(self, node):
- self.body.append('</TD></TR>\n'
- '</TBODY>\n</TABLE>\n')
-
- def visit_citation_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.doctree.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '[', href=href, #node['refid'],
- CLASS='citation-reference'))
-
- def depart_citation_reference(self, node):
- self.body.append(']</A>')
-
- def visit_classifier(self, node):
- self.body.append(' <SPAN CLASS="classifier-delimiter">:</SPAN> ')
- self.body.append(self.starttag(node, 'span', '', CLASS='classifier'))
-
- def depart_classifier(self, node):
- self.body.append('</SPAN>')
-
- def visit_colspec(self, node):
- atts = {}
- #if node.has_key('colwidth'):
- # atts['width'] = str(node['colwidth']) + '*'
- self.body.append(self.starttag(node, 'col', **atts))
-
- def depart_colspec(self, node):
- pass
-
- def visit_comment(self, node):
- self.body.append('<!-- ')
-
- def depart_comment(self, node):
- self.body.append(' -->\n')
-
- def visit_contact(self, node):
- self.visit_docinfo_item(node, 'contact')
-
- def depart_contact(self, node):
- self.depart_docinfo_item()
-
- def visit_copyright(self, node):
- self.visit_docinfo_item(node, 'copyright')
-
- def depart_copyright(self, node):
- self.depart_docinfo_item()
-
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger')
-
- def depart_danger(self, node):
- self.depart_admonition()
-
- def visit_date(self, node):
- self.visit_docinfo_item(node, 'date')
-
- def depart_date(self, node):
- self.depart_docinfo_item()
-
- def visit_definition(self, node):
- self.body.append('</DT>\n')
- self.body.append(self.starttag(node, 'dd'))
-
- def depart_definition(self, node):
- self.body.append('</DD>\n')
-
- def visit_definition_list(self, node):
- self.body.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- self.body.append('</DL>\n')
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- self.body.append('<TD>\n')
-
- def depart_description(self, node):
- self.body.append('</TD>')
-
- def visit_docinfo(self, node):
- self.body.append(self.starttag(node, 'table', CLASS='docinfo',
- frame="void", rules="none"))
- self.body.append('<COL CLASS="docinfo-name">\n'
- '<COL CLASS="docinfo-content">\n'
- '<TBODY VALIGN="top">\n')
-
- def depart_docinfo(self, node):
- self.body.append('</TBODY>\n</TABLE>\n')
-
- def visit_docinfo_item(self, node, name):
- self.head.append('<META NAME="%s" CONTENT="%s">\n'
- % (name, self.encode(node.astext())))
- self.body.append(self.starttag(node, 'tr', ''))
- self.body.append('<TD>\n'
- '<P CLASS="docinfo-name">%s:</P>\n'
- '</TD><TD>\n'
- '<P>' % self.language.labels[name])
-
- def depart_docinfo_item(self):
- self.body.append('</P>\n</TD></TR>')
-
- def visit_doctest_block(self, node):
- self.body.append(self.starttag(node, 'pre', CLASS='doctest-block'))
-
- def depart_doctest_block(self, node):
- self.body.append('</PRE>\n')
-
- def visit_document(self, node):
- self.body.append(self.starttag(node, 'div', CLASS='document'))
-
- def depart_document(self, node):
- self.body.append('</DIV>\n')
- #self.body.append(
- # '<P CLASS="credits">HTML generated from <CODE>%s</CODE> on %s '
- # 'by <A HREF="http://docutils.sourceforge.net/">Docutils</A>.'
- # '</P>\n' % (node['source'], time.strftime('%Y-%m-%d')))
-
- def visit_emphasis(self, node):
- self.append_styled(node.astext(),'Italic')
-
- def depart_emphasis(self, node):
- pass
-
- def visit_entry(self, node):
- if isinstance(node.parent.parent, nodes.thead):
- tagname = 'th'
- else:
- tagname = 'td'
- atts = {}
- if node.has_key('morerows'):
- atts['rowspan'] = node['morerows'] + 1
- if node.has_key('morecols'):
- atts['colspan'] = node['morecols'] + 1
- self.body.append(self.starttag(node, tagname, **atts))
- self.context.append('</%s>' % tagname.upper())
- if len(node) == 0: # empty cell
- self.body.append('&nbsp;')
-
- def depart_entry(self, node):
- self.body.append(self.context.pop())
-
- def visit_enumerated_list(self, node):
- """
- The 'start' attribute does not conform to HTML 4.01's strict.dtd, but
- CSS1 doesn't help. CSS2 isn't widely enough supported yet to be
- usable.
- """
- atts = {}
- if node.has_key('start'):
- atts['start'] = node['start']
- if node.has_key('enumtype'):
- atts['class'] = node['enumtype']
- # @@@ To do: prefix, suffix. How? Change prefix/suffix to a
- # single "format" attribute? Use CSS2?
- self.body.append(self.starttag(node, 'ol', **atts))
-
- def depart_enumerated_list(self, node):
- self.body.append('</OL>\n')
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- self.body.append(self.starttag(node, 'tr', CLASS='field'))
-
- def depart_field(self, node):
- self.body.append('</TR>\n')
-
- def visit_field_argument(self, node):
- self.body.append(' ')
- self.body.append(self.starttag(node, 'span', '',
- CLASS='field-argument'))
-
- def depart_field_argument(self, node):
- self.body.append('</SPAN>')
-
- def visit_field_body(self, node):
- self.body.append(':</P>\n</TD><TD>')
- self.body.append(self.starttag(node, 'div', CLASS='field-body'))
-
- def depart_field_body(self, node):
- self.body.append('</DIV></TD>\n')
-
- def visit_field_list(self, node):
- self.body.append(self.starttag(node, 'table', frame='void',
- rules='none'))
- self.body.append('<COL CLASS="field-name">\n'
- '<COL CLASS="field-body">\n'
- '<TBODY VALIGN="top">\n')
-
- def depart_field_list(self, node):
- self.body.append('</TBODY>\n</TABLE>\n')
-
- def visit_field_name(self, node):
- self.body.append('<TD>\n')
- self.body.append(self.starttag(node, 'p', '', CLASS='field-name'))
-
- def depart_field_name(self, node):
- """
- Leave the end tag to `self.visit_field_body()`, in case there are any
- field_arguments.
- """
- pass
-
- def visit_figure(self, node):
- self.body.append(self.starttag(node, 'div', CLASS='figure'))
-
- def depart_figure(self, node):
- self.body.append('</DIV>\n')
-
- def visit_footnote(self, node):
- self.body.append(self.starttag(node, 'table', CLASS='footnote',
- frame="void", rules="none"))
- self.body.append('<COL CLASS="label">\n'
- '<COL>\n'
- '<TBODY VALIGN="top">\n'
- '<TR><TD>\n')
-
- def depart_footnote(self, node):
- self.body.append('</TD></TR>\n'
- '</TBODY>\n</TABLE>\n')
-
- def visit_footnote_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.doctree.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '', href=href, #node['refid'],
- CLASS='footnote-reference'))
-
- def depart_footnote_reference(self, node):
- self.body.append('</A>')
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- atts = node.attributes.copy()
- atts['src'] = atts['uri']
- del atts['uri']
- if not atts.has_key('alt'):
- atts['alt'] = atts['src']
- self.body.append(self.starttag(node, 'img', '', **atts))
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_interpreted(self, node):
- self.body.append('<SPAN class="interpreted">')
-
- def depart_interpreted(self, node):
- self.body.append('</SPAN>')
-
- def visit_label(self, node):
- self.body.append(self.starttag(node, 'p', '[', CLASS='label'))
-
- def depart_label(self, node):
- self.body.append(']</P>\n'
- '</TD><TD>\n')
-
- def visit_legend(self, node):
- self.body.append(self.starttag(node, 'div', CLASS='legend'))
-
- def depart_legend(self, node):
- self.body.append('</DIV>\n')
-
- def visit_list_item(self, node):
- self.body.append(self.starttag(node, 'li'))
-
- def depart_list_item(self, node):
- self.body.append('</LI>\n')
-
- def visit_literal(self, node):
- self.body.append('<CODE>')
-
- def depart_literal(self, node):
- self.body.append('</CODE>')
-
- def visit_literal_block(self, node):
- self.body.append(self.starttag(node, 'pre', CLASS='literal-block'))
-
- def depart_literal_block(self, node):
- self.body.append('</PRE>\n')
-
- def visit_meta(self, node):
- self.head.append(self.starttag(node, 'meta', **node.attributes))
-
- def depart_meta(self, node):
- pass
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
- def visit_option(self, node):
- if self.context[-1]:
- self.body.append(', ')
-
- def depart_option(self, node):
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- self.body.append(node.get('delimiter', ' '))
- self.body.append(self.starttag(node, 'span', '',
- CLASS='option-argument'))
-
- def depart_option_argument(self, node):
- self.body.append('</SPAN>')
-
- def visit_option_group(self, node):
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</TR>\n<TR><TD>&nbsp;</TD>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'td', **atts))
- self.body.append('<P><CODE>')
- self.context.append(0)
-
- def depart_option_group(self, node):
- self.context.pop()
- self.body.append('</CODE></P>\n</TD>')
- self.body.append(self.context.pop())
-
- def visit_option_list(self, node):
- self.body.append(
- self.starttag(node, 'table', CLASS='option-list',
- frame="void", rules="none", cellspacing=12))
- self.body.append('<COL CLASS="option">\n'
- '<COL CLASS="description">\n'
- '<TBODY VALIGN="top">\n')
-
- def depart_option_list(self, node):
- self.body.append('</TBODY>\n</TABLE>\n')
-
- def visit_option_list_item(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_option_list_item(self, node):
- self.body.append('</TR>\n')
-
- def visit_option_string(self, node):
- self.body.append(self.starttag(node, 'span', '', CLASS='option'))
-
- def depart_option_string(self, node):
- self.body.append('</SPAN>')
-
- def visit_organization(self, node):
- self.visit_docinfo_item(node, 'organization')
-
- def depart_organization(self, node):
- self.depart_docinfo_item()
-
- def visit_paragraph(self, node):
- if not self.topic_class == 'contents':
- self.append_normal(node.astext())
-
- def depart_paragraph(self, node):
- if self.topic_class == 'contents':
- self.append_normal('\n')
- else:
- self.append_normal('\n')
-
- def visit_problematic(self, node):
- if node.hasattr('refid'):
- self.body.append('<A HREF="#%s">' % node['refid'])
- self.context.append('</A>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'span', '', CLASS='problematic'))
-
- def depart_problematic(self, node):
- self.body.append('</SPAN>')
- self.body.append(self.context.pop())
-
- def visit_raw(self, node):
- if node.has_key('format') and node['format'] == 'html':
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def visit_reference(self, node):
- if node.has_key('refuri'):
- href = node['refuri']
- elif node.has_key('refid'):
- #else:
- href = '#' + node['refid']
- elif node.has_key('refname'):
- # @@@ Check for non-existent mappings. Here or in a transform?
- href = '#' + self.doctree.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '', href=href,
- CLASS='reference'))
-
- def depart_reference(self, node):
- self.body.append('</A>')
-
- def visit_revision(self, node):
- self.visit_docinfo_item(node, 'revision')
-
- def depart_revision(self, node):
- self.depart_docinfo_item()
-
- def visit_row(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- self.body.append('</TR>\n')
-
- def visit_section(self, node):
- self.sectionlevel += 1
- self.body.append(self.starttag(node, 'div', CLASS='section'))
-
- def depart_section(self, node):
- self.sectionlevel -= 1
- self.body.append('</DIV>\n')
-
- def visit_status(self, node):
- self.visit_docinfo_item(node, 'status')
-
- def depart_status(self, node):
- self.depart_docinfo_item()
-
- def visit_strong(self, node):
- self.body.append('<STRONG>')
-
- def depart_strong(self, node):
- self.body.append('</STRONG>')
-
- def visit_subtitle(self, node):
- self.append_styled(node.astext(),'h2')
-
- def depart_subtitle(self, node):
- pass
-
- def visit_title(self, node):
- """Only 6 section levels are supported by HTML."""
- if isinstance(node.parent, nodes.topic):
- self.body.append(
- self.starttag(node, 'P', '', CLASS='topic-title'))
- self.context.append('</P>\n')
- elif self.sectionlevel == 0:
- self.head.append('<TITLE>%s</TITLE>\n'
- % self.encode(node.astext()))
- self.body.append(self.starttag(node, 'H1', '', CLASS='title'))
- self.context.append('</H1>\n')
- self.append_styled(node.astext(),'h1')
- else:
- self.append_styled(node.astext(), "h%s" % self.sectionlevel )
- context = ''
- if node.hasattr('refid'):
- self.body.append('<A HREF="#%s">' % node['refid'])
- context = '</A>'
- self.context.append('%s</H%s>\n' % (context, self.sectionlevel))
-
- def depart_title(self, node):
- self.body.append(self.context.pop())
-
- def unimplemented_visit(self, node):
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
diff --git a/sandbox/grubert/rlpdf/rltemplate.py b/sandbox/grubert/rlpdf/rltemplate.py
deleted file mode 100644
index dc462430f..000000000
--- a/sandbox/grubert/rlpdf/rltemplate.py
+++ /dev/null
@@ -1,143 +0,0 @@
-#copyright ReportLab Inc. 2000
-#see rllicense.txt for license details
-#history http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/docs/tools/rltemplate.py?cvsroot=reportlab
-#$Header$
-# doc template for RL manuals. Currently YAML is hard-coded
-#to use this, which is wrong.
-
-
-from reportlab.platypus import PageTemplate, \
- BaseDocTemplate, SimpleDocTemplate, Frame, Paragraph
-from reportlab.lib.units import inch, cm
-from reportlab.rl_config import defaultPageSize
-
-
-class FrontCoverTemplate(PageTemplate):
- def __init__(self, id, pageSize=defaultPageSize):
- self.pageWidth = pageSize[0]
- self.pageHeight = pageSize[1]
- frame1 = Frame(inch,
- 3*inch,
- self.pageWidth - 2*inch,
- self.pageHeight - 518, id='cover')
- PageTemplate.__init__(self, id, [frame1]) # note lack of onPage
-
- def afterDrawPage(self, canvas, doc):
- canvas.saveState()
- #canvas.drawImage('../images/replogo.gif',2*inch, 8*inch)
-
-
- canvas.setFont('Times-Roman', 10)
- canvas.line(inch, 120, self.pageWidth - inch, 120)
-
- #canvas.drawString(inch, 100, 'Lombard Business Park')
- #canvas.drawString(inch, 88, '8 Lombard Road')
- #canvas.drawString(inch, 76, 'Wimbledon')
- #canvas.drawString(inch, 64, 'London, ENGLAND SW19 3TZ')
-
- #canvas.drawRightString(self.pageWidth - inch, 100, '103 Bayard Street')
- #canvas.drawRightString(self.pageWidth - inch, 88, 'New Brunswick')
- #canvas.drawRightString(self.pageWidth - inch, 76, 'New Jersey, 08904)')
- #canvas.drawRightString(self.pageWidth - inch, 64, 'USA')
-
- canvas.restoreState()
-
-
-class OneColumnTemplate(PageTemplate):
- def __init__(self, id, pageSize=defaultPageSize):
- self.pageWidth = pageSize[0]
- self.pageHeight = pageSize[1]
- frame1 = Frame(inch,
- inch,
- self.pageWidth - 2*inch,
- self.pageHeight - 2*inch,
- id='normal')
- PageTemplate.__init__(self, id, [frame1]) # note lack of onPage
-
- def afterDrawPage(self, canvas, doc):
- y = self.pageHeight - 50
- canvas.saveState()
- canvas.setFont('Times-Roman', 10)
- canvas.drawString(inch, y+8, doc.title)
- canvas.drawRightString(self.pageWidth - inch, y+8, doc.chapter)
- canvas.line(inch, y, self.pageWidth - inch, y)
- canvas.drawCentredString(doc.pagesize[0] / 2, 0.75*inch, 'Page %d' % canvas.getPageNumber())
- canvas.restoreState()
-
-class TwoColumnTemplate(PageTemplate):
- def __init__(self, id, pageSize=defaultPageSize):
- self.pageWidth = pageSize[0]
- self.pageHeight = pageSize[1]
- colWidth = 0.5 * (self.pageWidth - 2.25*inch)
- frame1 = Frame(inch,
- inch,
- colWidth,
- self.pageHeight - 2*inch,
- id='leftCol')
- frame2 = Frame(0.5 * self.pageWidth + 0.125,
- inch,
- colWidth,
- self.pageHeight - 2*inch,
- id='rightCol')
- PageTemplate.__init__(self, id, [frame1, frame2]) # note lack of onPage
-
- def afterDrawPage(self, canvas, doc):
- y = self.pageHeight - 50
- canvas.saveState()
- canvas.setFont('Times-Roman', 10)
- canvas.drawString(inch, y+8, doc.title)
- canvas.drawRightString(self.pageWidth - inch, y+8, doc.chapter)
- canvas.line(inch, y, self.pageWidth - inch, y*inch)
- canvas.drawCentredString(doc.pagesize[0] / 2, 0.75*inch, 'Page %d' % canvas.getPageNumber())
- canvas.restoreState()
-
-
-# class RLDocTemplate(BaseDocTemplate):
-class RLDocTemplate(SimpleDocTemplate):
- def afterInit(self):
- self.addPageTemplates(FrontCoverTemplate('Cover', self.pagesize))
- self.addPageTemplates(OneColumnTemplate('Normal', self.pagesize))
- self.addPageTemplates(TwoColumnTemplate('TwoColumn', self.pagesize))
- self.addPageTemplates(OneColumnTemplate('Cover', self.pagesize))
-
- #just playing
- self.title = "(Document Title Goes Here)"
- self.chapter = "(No chapter yet)"
- self.chapterNo = 1 #unique keys
- self.sectionNo = 1 # unique keys
-
-## # AR hack
-## self.counter = 1
- def beforeDocument(self):
- self.canv.showOutline()
-
- def afterFlowable(self, flowable):
- """Detect Level 1 and 2 headings, build outline,
- and track chapter title."""
- if isinstance(flowable, Paragraph):
- style = flowable.style.name
-
-## #AR debug text
-## try:
-## print '%d: %s...' % (self.counter, flowable.getPlainText()[0:40])
-## except AttributeError:
-## print '%d: (something with ABag)' % self.counter
-## self.counter = self.counter + 1
-
- if style == 'Title':
- self.title = flowable.getPlainText()
- elif style == 'Heading1':
- self.chapter = flowable.getPlainText()
- key = 'ch%d' % self.chapterNo
- self.canv.bookmarkPage(key)
- self.canv.addOutlineEntry(flowable.getPlainText(),
- key, 0, 0)
- self.chapterNo = self.chapterNo + 1
- self.sectionNo = 1
- elif style == 'Heading2':
- self.section = flowable.text
- key = 'ch%ds%d' % (self.chapterNo, self.sectionNo)
- self.canv.bookmarkPage(key)
- self.canv.addOutlineEntry(flowable.getPlainText(),
- key, 1, 0)
- self.sectionNo = self.sectionNo + 1
diff --git a/sandbox/grubert/rlpdf/stylesheet.py b/sandbox/grubert/rlpdf/stylesheet.py
deleted file mode 100644
index 3b7749935..000000000
--- a/sandbox/grubert/rlpdf/stylesheet.py
+++ /dev/null
@@ -1,158 +0,0 @@
-#copyright ReportLab Inc. 2000
-#see rllicense.txt for license details
-#history http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/docs/tools/stylesheet.py?cvsroot=reportlab
-#$Header$
-#standard stylesheet for our manuals
-from reportlab.lib.styles import StyleSheet1, ParagraphStyle
-from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT, TA_JUSTIFY
-from reportlab.lib import colors
-
-
-def getStyleSheet():
- """Returns a stylesheet object"""
- stylesheet = StyleSheet1()
-
- stylesheet.add(ParagraphStyle(name='Normal',
- fontName='Times-Roman',
- fontSize=10,
- leading=12,
- spaceBefore=6)
- )
-
- stylesheet.add(ParagraphStyle(name='Comment',
- fontName='Times-Italic')
- )
-
- stylesheet.add(ParagraphStyle(name='Indent1',
- leftIndent=36,
- firstLineIndent=0)
- )
-
- stylesheet.add(ParagraphStyle(name='BodyText',
- parent=stylesheet['Normal'],
- spaceBefore=6)
- )
- stylesheet.add(ParagraphStyle(name='Italic',
- parent=stylesheet['BodyText'],
- fontName = 'Times-Italic')
- )
-
- stylesheet.add(ParagraphStyle(name='Heading1',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- alignment=TA_CENTER,
- fontSize=18,
- leading=22,
- spaceAfter=6),
- alias='h1')
-
- stylesheet.add(ParagraphStyle(name='Heading2',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=14,
- leading=17,
- spaceBefore=12,
- spaceAfter=6),
- alias='h2')
-
- stylesheet.add(ParagraphStyle(name='Heading3',
- parent=stylesheet['Normal'],
- fontName = 'Times-BoldItalic',
- fontSize=12,
- leading=14,
- spaceBefore=12,
- spaceAfter=6),
- alias='h3')
-
- stylesheet.add(ParagraphStyle(name='Heading4',
- parent=stylesheet['Normal'],
- fontName = 'Times-BoldItalic',
- spaceBefore=10,
- spaceAfter=4),
- alias='h4')
-
- stylesheet.add(ParagraphStyle(name='Title',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=48,
- leading=56,
- spaceAfter=72,
- alignment=TA_CENTER
- ),
- alias='t')
-
- stylesheet.add(ParagraphStyle(name='Subtitle',
- parent=stylesheet['Normal'],
- fontName = 'Times-Bold',
- fontSize=32,
- leading=56,
- spaceAfter=72,
- alignment=TA_CENTER
- ),
- alias='subtitle')
-
- stylesheet.add(ParagraphStyle(name='Bullet',
- parent=stylesheet['Normal'],
- firstLineIndent=0,
- leftIndent=36,
- bulletIndent=18,
- spaceBefore=0,
- bulletFontName='Symbol'),
- alias='bu')
-
- stylesheet.add(ParagraphStyle(name='Definition',
- parent=stylesheet['Normal'],
- firstLineIndent=0,
- leftIndent=36,
- bulletIndent=0,
- spaceBefore=6,
- bulletFontName='Times-BoldItalic'),
- alias='df')
-
- stylesheet.add(ParagraphStyle(name='Code',
- parent=stylesheet['Normal'],
- fontName='Courier',
- textColor=colors.navy,
- fontSize=8,
- leading=8.8,
- leftIndent=36,
- firstLineIndent=0))
-
- stylesheet.add(ParagraphStyle(name='FunctionHeader',
- parent=stylesheet['Normal'],
- fontName='Courier-Bold',
- fontSize=8,
- leading=8.8))
-
- stylesheet.add(ParagraphStyle(name='DocString',
- parent=stylesheet['Normal'],
- fontName='Courier',
- fontSize=8,
- leftIndent=18,
- leading=8.8))
-
- stylesheet.add(ParagraphStyle(name='DocStringIndent',
- parent=stylesheet['Normal'],
- fontName='Courier',
- fontSize=8,
- leftIndent=36,
- leading=8.8))
-
- stylesheet.add(ParagraphStyle(name='URL',
- parent=stylesheet['Normal'],
- fontName='Courier',
- textColor=colors.navy,
- alignment=TA_CENTER),
- alias='u')
-
- stylesheet.add(ParagraphStyle(name='Centred',
- parent=stylesheet['Normal'],
- alignment=TA_CENTER
- ))
-
- stylesheet.add(ParagraphStyle(name='Caption',
- parent=stylesheet['Centred'],
- fontName='Times-Italic'
- ))
-
- return stylesheet
diff --git a/sandbox/grubert/runtest b/sandbox/grubert/runtest
deleted file mode 100755
index f66e2667e..000000000
--- a/sandbox/grubert/runtest
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/bin/sh
-
-CHECKS=0
-FAILS=0
-
-function do_diff() {
- CHECKS=$((CHECKS + 1))
- diff -q -s $1 $2
- if test $? -gt 0 ; then
- FAILS=$((FAIL + 1))
- fi
-}
-
-function report() {
- echo "-------------------------------------"
- if test $FAILS -eq 0 ; then
- echo "OK: all $CHECKS tests passed"
- else
- echo "ERROR: $FAILS of $CHECKS failed"
- fi
-}
-
-#CMD="../../tools/rst2latex.py --snap-footnote-refs=1"
-#CMD="../../tools/rst2latex.py --footnote-references=superscript"
-#CMD="../../tools/rst2latex.py --documentclass=book --hyperlink-color=0"
-
-CMD="../../tools/rst2latex.py"
-if [ -z "$1" ] ; then
- FM="*.txt"
-else
- FM=$1
-fi
-
-
-for INF in `ls test/$FM` ; do
- OUTF="$INF.tex"
- REFF="$OUTF.ref"
- $CMD $INF > $OUTF
- do_diff $REFF $OUTF
-done
-
-if [ -n "$1" -a ! "$1" == "-" ] ; then
- report
- exit
-fi
-
-INF=test/french.txt
-OUTF="$INF-fr.tex"
-REFF="$OUTF.ref"
-$CMD -l fr $INF > $OUTF
-do_diff $REFF $OUTF
-
-INF=test/kasten.txt
-OUTF="$INF-de.tex"
-REFF="$OUTF.ref"
-$CMD -l de $INF > $OUTF
-do_diff $REFF $OUTF
-
-INF=test/tools.txt
-OUTF="$INF-ltoc.tex"
-REFF="$OUTF.ref"
-$CMD --use-latex-toc 1 $INF > $OUTF
-do_diff $REFF $OUTF
-
-CMD="../../tools/rst2latex.py -l de"
-INF=test/quotes.txt
-OUTF="$INF-l-de.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-# with generated footer
-CMD="../../tools/rst2latex.py -gs"
-INF=test/README.txt
-OUTF="$INF-gs.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-CMD="../../tools/rst2latex.py --documentclass=book"
-INF=test/README.txt
-OUTF="$INF-book.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-#CMD="../../tools/rst2latex.py --dump-settings"
-CMD="../../tools/rst2latex.py --no-doc-info"
-INF=test/README.txt
-OUTF="$INF-no-info.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-CMD="../../tools/rst2latex.py --no-doc-title"
-INF=test/README.txt
-OUTF="$INF-no-title.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-CMD="../../tools/rst2latex.py --no-doc-title --no-doc-info"
-INF=test/README.txt
-OUTF="$INF-no-title-info.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-echo ATTRIBUTION
-CMD="../../tools/rst2latex.py --attribution=none"
-INF=test/attribution.txt
-OUTF="$INF-none-attribution.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-CMD="../../tools/rst2latex.py --attribution=parens"
-INF=test/attribution.txt
-OUTF="$INF-parens-attribution.tex"
-REFF="$OUTF.ref"
-$CMD $INF > $OUTF
-do_diff $REFF $OUTF
-
-INF=test/iso-8859-15.txt
-OUTF="$INF-enc.tex"
-REFF="$OUTF.ref"
-$CMD --input-encoding=iso-8859-15 --output-encoding=iso-8859-15 $INF > $OUTF
-do_diff $REFF $OUTF
-
-report
-
diff --git a/sandbox/grubert/style.tex b/sandbox/grubert/style.tex
deleted file mode 100644
index 8c6bcc28a..000000000
--- a/sandbox/grubert/style.tex
+++ /dev/null
@@ -1,21 +0,0 @@
-% donot indent first line.
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{5pt plus 2pt minus 1pt}
-
-% sloppy
-% ------
-% Less strict (opposite to default fussy) space size between words. Therefore
-% less hyphenation.
-\sloppy
-
-% fonts
-% -----
-% times for pdf generation, gives smaller pdf files.
-%
-% But in standard postscript fonts: courier and times/helvetica do not fit.
-% Maybe use pslatex.
-\usepackage{times}
-
-% pagestyle
-\pagestyle{headings}
-
diff --git a/sandbox/grubert/tools/pdf.py b/sandbox/grubert/tools/pdf.py
deleted file mode 100755
index de89e44d5..000000000
--- a/sandbox/grubert/tools/pdf.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:Author: Engelbert Gruber
-:Contact: grubert@users.sourceforge.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-A minimal front-end to the Docutils Publisher, producing PDF via ReportLabs.
-"""
-
-from docutils.core import publish_cmdline
-try:
- from docutils.writers.rlpdf import Writer
-except ImportError:
- from rlpdf import Writer
-
-
-usage = 'usage:\n %prog [options] [source [destination]]'
-
-publish_cmdline(writer=Writer(), usage=usage)
diff --git a/sandbox/gschwant/docfactory/LICENSE.txt b/sandbox/gschwant/docfactory/LICENSE.txt
deleted file mode 100644
index 39bed4591..000000000
--- a/sandbox/gschwant/docfactory/LICENSE.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-DocFactory License
-==================
-
-Copyright (c) 2002 Dr. Gunnar Schwant (g.schwant@gmx.de).
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-* Neither the name of the author nor the names of its contributors may
- be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
-CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/sandbox/gschwant/docfactory/NOTES.txt b/sandbox/gschwant/docfactory/NOTES.txt
deleted file mode 100644
index c0e7a80ae..000000000
--- a/sandbox/gschwant/docfactory/NOTES.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-===================
- DocFactory_ Notes
-===================
-
-:Date: $Date$
-:Revision: $Revision$
-
-.. _DocFactory: http://docutils.sf.net/sandbox/gschwant/docfactory/
-
-.. contents::
-
-The names of the original contributors are appended to the items,
-marked in brackets.
-
-
-To Do
-=====
-
-* Convert system message handling from stderr parsing to simply using
- the "line" attribute of system_message elements, accessible from
- ``document.parse_messages`` and ``document.transform_messages``.
- [David Goodger]
-
-* Use the docutils.conf config file mechanism. May require changes to
- the current Docutils setup. [David Goodger]
-
-* Add a dependency checking mechanism, like that in pep2html.py.
- [David Goodger]
-
-* Any variable data saved between runs should be stored in the user's
- home directory; perhaps in a ~/.docutils file. [David Goodger]
-
-
-Ideas
-=====
-
-* Should the interface be file-centric instead of project-centric? I
- think the user should be able to open a file, edit it, and process
- it, without having to create a project first. Projects should be
- optional. [David Goodger]
-
-* What is the current representation of a project? Is it best?
- [David Goodger]
-
-
-..
- Local Variables:
- mode: indented-text
- indent-tabs-mode: nil
- sentence-end-double-space: t
- fill-column: 70
- End:
diff --git a/sandbox/gschwant/docfactory/README.txt b/sandbox/gschwant/docfactory/README.txt
deleted file mode 100644
index b5f0a3773..000000000
--- a/sandbox/gschwant/docfactory/README.txt
+++ /dev/null
@@ -1,434 +0,0 @@
-====================
- DocFactory README
-====================
-
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:date: 2003/03/02
-:copyright: Copyright (c) 2002 Dr. Gunnar Schwant (g.schwant@gmx.de).
- All rights reserved. See LICENSE.txt_ for license details.
-
-:abstract: This is a short introduction to DocFactory. Hopefully,
- more documentation will be available soon.
-
-.. contents::
-.. sectnum::
-
-What is it?
-===========
-
-DocFactory is a kind of *integrated publishing environment* for
-documentation, tied to |Docutils|. In fact, the intention of
-DocFactory is to be a GUI for Docutils. At present it can be used
-to edit a set of one or more |ReST| files simultaneously
-and publish them as HTML. Support for other markups and output
-formats is planned for future releases; see `Future Directions`_.
-
-DocFactory was built using |Docutils|, |Python| and |wxPython|.
-*Many thanks to all developers!*
-
-
-System requirements
-===================
-
-DocFactory is distributed as a subpackage of Docutils
-(``docutils.factory``). In order to run it in a Python-environment
-you'll need the following:
-
-* Python 2.1.1 or later (|http://www.python.org|).
-
-* wxPython 2.3.4.2 or later (|http://wxpython.org|). Be sure to get the
- build matching the version of Python you're using.
-
-* Docutils 0.2.8 or later (|http://docutils.sourceforge.net|). Use the
- CVS snapshot; improvements are being made almost daily.
-
-
-Installation
-============
-
-The first step is to expand the ``.tar.gz`` or ``.tgz`` archive. [1]_
-It contains a distutils setup file "setup.py". OS-specific
-installation instructions follow.
-
-Win32
------
-
-1. Open a DOS box (Command Shell, MSDOS Prompt, or whatever they're
- calling it these days).
-
-2. Go to the directory created by expanding the archive::
-
- cd <archive_directory_path>
-
-3. Install the package::
-
- <path_to_python.exe>\python setup.py install
-
-
-GNU/Linux, Unix, MacOS X, etc.
-------------------------------
-
-1. Open a shell.
-
-2. Go to the directory created by expanding the archive::
-
- cd <archive_directory_path>
-
-3. Install the package::
-
- python setup.py install
-
- If the python executable isn't on your path, you'll have to specify
- the complete path, such as /usr/local/bin/python. You may need
- root permissions to complete this step.
-
-.. note:: To create and browse the documentation of DocFactory please
- run the script ``createdoc.py``. This script converts all the
- ``.txt``-files of the tarball to ``.html``-files and opens
- ``doc/index.html`` with your default webbrowser.
-
-Usage
-=====
-
-How to start DocFactory
------------------------
-
-After successful installation you'll find "docfactory.py" in the
-scripts-directory of your Python environment. Run this file in the
-same way as you do it with any other Python-program on your system.
-The main window will appear.
-
-Files
------
-
-Create a new file
-~~~~~~~~~~~~~~~~~
-
-Type ``Ctrl+N`` to create a new text file. You will be asked for a
-location and title of the new file. Afterwards the file will be
-created, added to the tree on the left and loaded it into the editor.
-As you will notice the title has been inserted at the top of the
-file.
-
-Open an existing file
-~~~~~~~~~~~~~~~~~~~~~
-
-To open an already existing text file simply type ``Ctrl+O`` and
-select the file. It will be added to the tree and loaded into
-the editor. Moreover, you can open a file from the command-line
-if you specify the file as first parameter. A command like ``python
-[Scripts-directory]/docfactory.py [<file>]`` should launch DocFactory
-and open the file for editing. (Of course, this command depends on your
-system. For example::
-
- C:\>python Python22\Scripts\docfactory.py temp\test.txt
-
-works on my windows machine. In particular, the Python executable has
-to be on your path.)
-
-
-Publish a file
-~~~~~~~~~~~~~~
-
-To "publish" a file means to process the file into useful formats, such
-as HTML, XML or TeX.
-
-A file which has been loaded into the editor can be published by pressing
-``F7``. You will be asked for a docutils-writer, an output-directory and
-a filename:
-
-================= =========================================================
-Dialogue Item Description
-================= =========================================================
-Docutils-Writer The docutils-writer which will be used for publishing.
-Output-Directory The directory where the output-file will be created.
-Output-File The name of the output-file. (Existing files will be
- overwritten!)
-================= =========================================================
-
-Press "OK" to start the publisher.
-
-If you choose the HTML-writer the HTML-file will be displayed on
-DocFactory's HTML-viewer-page as soon as it is finished. Please note that
-this viewer does support stylesheets on Windows platforms only (including
-Windows 95, 98, ME, 2000, NT, XP). On any other platform you will have to
-check the final layout with a webbrowser of your choice (which hopefully
-does support stylesheets). Click on "View In Browser" to open the file
-with your system's default webbrowser.
-
-.. note:: Please note that publishing happens in a standard Docutils way
- and can be customized by setting up Docutils configuration files.
- [2]_
-
-Projects
---------
-
-If you want
-
-* to edit and publish one or more text files in the same way
-
-* to use DocFactory to edit the same files more than once *or*
-
-* to setup a Docutils configuration file easily
-
-a project may be the right choice for you.
-
-Setting up a project
-~~~~~~~~~~~~~~~~~~~~
-
-To setup a project select "Project -> New". The **Project Settings**
-dialog will appear. It consists of two pages:
-
-**DocFactory-page**
- On this page you specify an *output-directory* and a *title* for your
- project. The output-directory is the default directory for any
- output-files be created.
-
-**Docutils-page**
- As part of your project a Docutils configuration file ``docutils.conf``
- will be created in the output-directory. (If there is already a
- ``docutils.conf`` file in the output-directory this one will be used.)
- On the Docutils-page of the "Project Settings" dialog you can set
- the values of certain configuration file entries (*stylesheet*,
- *output-encoding*, *datestamp*, ...). Please have a closer look at
- the Docutils documentation on configuration file entries to learn about
- the effect of these settings. [3]_
-
-Press the "OK"-button to finish the setup. The project appears as part
-of the tree on the left.
-
-**A note on stylesheets:** You shouldn't worry about the stylesheet. When
-you leave the "Project Settings" dialog DocFactory checks if the stylesheet
-is present. If the stylesheet can not be found a dialog window will pop up
-and ask you if you want that DocFactory creates a stylesheet for you. You
-will be offered two different styles ("Classic" and "Modern"). Select one
-and press "OK".
-
-
-Adding files to a project
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In order to create a new file within a project or add an existing file
-to a project simply activate the project's item in the tree on the left
-(double-click) and press ``Ctrl+N`` or ``Ctrl+O``. The behaviour is like
-this: If a project is active any file which is created and/or opened will
-be added to the active project. (If no project is active files will be
-created/opened outside of projects.)
-
-
-Editing
--------
-
-Keyboard Shortcuts
-~~~~~~~~~~~~~~~~~~
-
-For rapid development DocFactory features Windows-style keyboard
-shortcuts:
-
-============================== ===========================================
-Action Keyboard Shortcut
-============================== ===========================================
-**File Menu**
----------------------------------------------------------------------------
-New File ``Ctrl+N``
------------------------------- -------------------------------------------
-Open File ``Ctrl+O``
------------------------------- -------------------------------------------
-Save File ``Ctrl+S``
------------------------------- -------------------------------------------
-Publish File ``F7``
------------------------------- -------------------------------------------
-Exit Application ``Alt+X``
------------------------------- -------------------------------------------
-**Edit Menu**
----------------------------------------------------------------------------
-Undo ``Ctrl+Z``
------------------------------- -------------------------------------------
-Redo ``Ctrl+Y``
------------------------------- -------------------------------------------
-Cut ``Shift+Del``, ``Ctrl+X``
------------------------------- -------------------------------------------
-Copy ``Ctrl+Ins``, ``Ctrl+C``
------------------------------- -------------------------------------------
-Paste ``Shift+Ins``, ``Ctrl+V``
------------------------------- -------------------------------------------
-Select all ``Ctrl+A``
------------------------------- -------------------------------------------
-Find & Replace ``Ctrl+F``
------------------------------- -------------------------------------------
-Goto line ``Ctrl+G``
------------------------------- -------------------------------------------
-**Toolbox Menu**
----------------------------------------------------------------------------
-Open toolbox ``F8``
------------------------------- -------------------------------------------
-**Further editing commands**
----------------------------------------------------------------------------
-Cursor movement Arrow keys or mouse
------------------------------- -------------------------------------------
-Beginning of line ``Home``
------------------------------- -------------------------------------------
-End of line ``End``
------------------------------- -------------------------------------------
-Beginning of buffer ``Ctrl+Home``
------------------------------- -------------------------------------------
-End of the buffer ``Ctrl+End``
------------------------------- -------------------------------------------
-Select text Hold down ``Shift`` while moving the cursor
------------------------------- -------------------------------------------
-Zoom-In ``Ctrl+L``
------------------------------- -------------------------------------------
-Zoom-Out ``Ctrl+K``
-============================== ===========================================
-
-Right mouse-click brings up a popup-dialog with most of the above
-editor commands. Moreover, you can use the mouse to move selected
-text.
-
-
-Find & Replace
-~~~~~~~~~~~~~~
-
-The "Find & Replace"-dialog was introduced with DocFactory release 0.2
-and is special in the sense that it uses |regular expression syntax|
-for searching as defined by Python's re-module. This offers a great deal
-of flexibility in searching. For example: Searching for ``Fred|Ted`` will
-search the file for appearances of ``Fred`` as well as for appearances
-of ``Ted``. However, it also requires a certain kind of familiarity with
-Python's regular expression syntax. For example: In order to find
-appearances of ``C:\temp\test.txt`` you will have to search for
-``C:\\temp\\test.txt``.
-
-
-Toolbox
--------
-
-The Toolbox allows you to run operating system commands from within
-DocFactory. In the menu bar select "Toolbox -> Configure" to set up
-your personal toolbox. Press the "+"-button to add a new tool. You will
-be asked for a **name**, a **command** and an **initial directory**:
-
-================= =========================================================
-Dialogue Item Description
-================= =========================================================
-Name An individual name of the tool.
-Command The operating system command which will be executed
- when you run the tool.
-Initial Directory The initial working directory of the tool.
-================= =========================================================
-
-Command and initial directory of a tool may include **tool macros** which
-will be replaced on tool-execution as follows:
-
-================= =========================================================
-Tool Macro Description
-================= =========================================================
-``$[FilePath]`` The full pathname of the active file.
-``$[FileDir]`` The drive and directory of the active file.
-``$[FileName]`` The filename of the active file.
-``$[FileBase]`` The filename without the extension.
-``$[ProjectDir]`` The output-directory of the active project.
-================= =========================================================
-
-To launch a tool select "Toolbox -> Open..." or press ``F8``.
-
-Data Storage
-============
-
-DocFactory uses the Python's |ConfigParser|-module to store any information
-about projects, tools, etc. which has to be saved between runs. [4]_
-As default the data storage file is located in the package's directory. [5]_
-The default name of the file is ``docfactory.dat``.
-
-You can change the name and location of the data storage file by creating
-a file called ``conf.pth`` in the package's directory. This file should
-consist of one line only which contains the complete data storage path.
-For example: If the first line of ``conf.pth`` is
-
-::
-
- /home/fred/.docfactory
-
-DocFactory will store its data in ``/home/fred/.docfactory``.
-
-
-Future Directions
-=================
-
-Future releases of DocFactory will support any markup and output
-formats which are supported by Docutils. Some other useful things
-will be implemented as well. For example:
-
-* more stylesheets (please contribute!)
-* preferences dialog
-* [...]
-
-*Now, this should be enough for the beginning. Start playing with
-DocFactory, have fun, report bugs, contribute, ... Any kind of
-feedback is welcome.*
-
----------
-
-.. Footnotes
-
-.. [1] The latest DocFactory-tarball is available at
- http://docutils.sf.net/docfactory-snapshot.tgz.
-
-.. [2] http://docutils.sourceforge.net/docs/tools.html#configuration-files
-
-.. [3] http://docutils.sourceforge.net/docs/tools.html#configuration-file-entries
-
-.. [4] The storage file has a ``[docfactory_project: <name of project>]``
- section for each project. (``<name of project>`` is replaced by the
- project's name.) Each section header is followed by two ``name=value``
- entries: One for all project files and one for the outputdirectory.
- For example: The section for a project called ``project_01`` which
- consists of two files ``C:\file1.txt``, ``C:\file2.txt`` and whose
- output-directory is ``C:\project1`` looks like this::
-
- [docfactory_project: project_01]
- files=C:\file1.txt;C:\file2.txt
- outputdirectory=C:\project1
-
-.. [5] ``os.path.dirname(docutils.factory.__file__)``
-
-.. Hyperlinks
-
-.. _LICENSE.txt: LICENSE.html
-
-.. |ReST| raw:: html
-
- <a class="reference" href="http://docutils.sourceforge.net/rst.html" target="_top">reStructuredText</a>
-
-.. |Python| raw:: html
-
- <a class="reference" href="http://www.python.org" target="_top">Python</a>
-
-.. |http://www.python.org| raw:: html
-
- <a class="reference" href="http://www.python.org" target="_top">http://www.python.org</a>
-
-.. |wxPython| raw:: html
-
- <a class="reference" href="http://wxpython.org" target="_top">wxPython</a>
-
-.. |http://wxPython.org| raw:: html
-
- <a class="reference" href="http://wxpython.org" target="_top">http://wxPython.org</a>
-
-.. |Docutils| raw:: html
-
- <a class="reference" href="http://docutils.sourceforge.net" target="_top">Docutils</a>
-
-.. |http://docutils.sourceforge.net| raw:: html
-
- <a class="reference" href="http://docutils.sourceforge.net" target="_top">http://docutils.sourceforge.net</a>
-
-.. |regular expression syntax| raw:: html
-
- <a class="reference" href="http://www.python.org/doc/current/lib/re-syntax.html" target="_top">regular expression syntax</a>
-
-.. |ConfigParser| raw:: html
-
- <a class="reference" href="http://www.python.org/doc/current/lib/module-ConfigParser.html" target="_top">ConfigParser</a>
diff --git a/sandbox/gschwant/docfactory/createdoc.py b/sandbox/gschwant/docfactory/createdoc.py
deleted file mode 100644
index 6f57dec48..000000000
--- a/sandbox/gschwant/docfactory/createdoc.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.1
-"""
-
-import glob, os, webbrowser
-from docutils.core import publish_cmdline
-
-def convert():
- for file in glob.glob('*.txt'):
- htmlfile = '%s.html' % os.path.splitext(file)[0]
- print '%s --> %s' % (file, htmlfile)
- publish_cmdline(writer_name='html',
- argv = [file, htmlfile])
-
-if __name__=='__main__':
- print '\nGenerating HTML ...\n'
- convert()
- os.chdir('doc')
- convert()
- print '\nOpen doc/index.html with default webbrowser ...\n'
- webbrowser.open('index.html')
diff --git a/sandbox/gschwant/docfactory/doc/FAQ.txt b/sandbox/gschwant/docfactory/doc/FAQ.txt
deleted file mode 100644
index 406ea698d..000000000
--- a/sandbox/gschwant/docfactory/doc/FAQ.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-=====================================
-DocFactory Frequently Asked Questions
-=====================================
-
-.. If you have downloaded this file as part of the
- DocFactory-tarball, please use docutils to convert
- it to HTML and open index.html with your webbrowser.
-
-.. contents:: Questions
-.. section-numbering::
-
-How can I manage accentuated characters to be processed properly?
-=================================================================
-
-On the "Docutils"-page of the "Project-Settings"-dialog be sure to set
-Docutils' output-encoding to the right value. For example: ``ISO-8859-1``
-for french or german accentuated characters. (The default setting is
-``UTF-8``.) The problem is to find out which encoding you need. There is
-a wide variety of encodings available. Many of these encodings support
-the same languages. However, they vary in individual characters. For
-example, ``ISO-8859-1`` does not support the EURO SIGN (try ``cp1252``
-if you need it). If you face problems your first attempt should be
-to try out Python's different standard encodings which can be found
-at |www.python.org|.
-
-.. |www.python.org| raw:: html
-
- <a class="reference" href="http://www.python.org/dev/doc/devel/lib/node123.html" target="_top">http://www.python.org/dev/doc/devel/lib/node123.html</a>
-
-
-Is it possible to run DocFactory on systems without a Python installation?
-==========================================================================
-
-The Docfactory-tarball contains a script called ``docfactory2exe.py``. If
-|py2exe| is installed on your machine you can use this script to convert
-``docfactory.py`` into a into an executable Windows program, which is able
-to run without requiring a Python installation. Copy ``docfactory2exe.py``
-and ``docfactory.ico`` (both part of the tarball) to the directory where
-``docfactory.py`` is located, go to the command-line and enter
-
-::
-
- python docfactory2exe.py py2exe -w -p encodings,docutils --icon docfactory.ico
-
-This will create a sub-directory ``dist\docfactory``, containing the file
-``docfactory.exe`` and several other files needed at runtime. (Visit
-|py2exe| for more details.)
-
-.. |py2exe| raw:: html
-
- <a class="reference" href="http://py2exe.sourceforge.net" target="_top">py2exe</a>
-
diff --git a/sandbox/gschwant/docfactory/doc/HISTORY.txt b/sandbox/gschwant/docfactory/doc/HISTORY.txt
deleted file mode 100644
index ad3a478b7..000000000
--- a/sandbox/gschwant/docfactory/doc/HISTORY.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-=====================
- DocFactory History
-=====================
-
-.. If you have downloaded this file as part of the
- DocFactory-tarball, please use docutils to convert
- it to HTML and open index.html with your webbrowser.
-
-DocFactory 0.2.4 (2003/05/01)
- * "Preferences"-menu
- * Backup option for files
-
-DocFactory 0.2.3 (2003/03/02)
- * Support of more writers (XML, PEP, LaTeX)
- * Toolbox
-
-DocFactory 0.2.2 (2003/02/16)
- * Toolbar
- * New "Insert Hyperlink"-feature
- * Enhanced "Insert Image"-feature
-
-DocFactory 0.2.1 (2003/01/11)
- * Processing of files which are not part of a project asks
- for an output-directory.
-
-DocFactory 0.2 (2003/01/08)
- * New editor features:
-
- - Change EOLs to CR/LF/CRLF
- - Find & Replace... (using |regular expression syntax| as defined
- by Python's re-module)
- - Goto line...
- - Insert image/figure/path
- - Syntax highlightening for HTML-files
-
- * New "View"-menu:
-
- - View EOL markers
- - View right edge indicator
- - View whitespace
- - Set fontsize to small/normal/big
-
- * Ability to open files from command-line.
- * Stylesheet-support of HTML-viewer on Windows platforms.
- * Automatic stylesheet-creation.
- * Animated "About"-dialog.
- * Added "docfactory2exe.py" for usage with |py2exe|.
- * Modified data storage.
-
-DocFactory 0.1.4 (2002/09/30)
- * Files can be opened without creating a project first.
- * The project settings dialog produces a docutils configuration file.
-
-DocFactory 0.1.3 (2002/09/15)
- * Initial sandbox-release.
-
-
-
-.. |py2exe| raw:: html
-
- <a class="reference" href="http://py2exe.sourceforge.net" target="_top">py2exe</a>
-
-.. |regular expression syntax| raw:: html
-
- <a class="reference" href="http://www.python.org/doc/current/lib/re-syntax.html" target="_top">regular expression syntax</a>
-
-.. _README: ../README.html
diff --git a/sandbox/gschwant/docfactory/doc/docutils.conf b/sandbox/gschwant/docfactory/doc/docutils.conf
deleted file mode 100644
index 0fe9d29ec..000000000
--- a/sandbox/gschwant/docfactory/doc/docutils.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-[options]
-output_encoding = UTF-8
-footnote_backlinks = 1
-compact_lists = 1
-generator =
-source_link =
-embed_stylesheet =
-stylesheet_path = stylesheets/df.css
-toc_backlinks = top
-footnote_references = superscript
-datestamp =
-
diff --git a/sandbox/gschwant/docfactory/doc/downloads.txt b/sandbox/gschwant/docfactory/doc/downloads.txt
deleted file mode 100644
index 38fca23f2..000000000
--- a/sandbox/gschwant/docfactory/doc/downloads.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-======================
- DocFactory Download
-======================
-
-.. If you have downloaded this file as part of the
- DocFactory-tarball, please use docutils to convert
- it to HTML and open index.html with your webbrowser.
-
-* `Latest development snapshot`_
-
-.. _`Latest development snapshot`: http://docutils.sourceforge.net/docfactory-snapshot.tgz
diff --git a/sandbox/gschwant/docfactory/doc/head.html b/sandbox/gschwant/docfactory/doc/head.html
deleted file mode 100644
index 71595aac7..000000000
--- a/sandbox/gschwant/docfactory/doc/head.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-</head>
-<body background="./pics/DF.png">
-</body>
-</html> \ No newline at end of file
diff --git a/sandbox/gschwant/docfactory/doc/index.html b/sandbox/gschwant/docfactory/doc/index.html
deleted file mode 100644
index 14a3dfdc1..000000000
--- a/sandbox/gschwant/docfactory/doc/index.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
-<head>
- <title>DocFactory</title>
- <meta content="DocFactory" name="description">
-</head>
-
-<noscript>
-<noframes>
-<br><br><br><br>
-<blockquote><blockquote>
-Please use a browser which supports frames and JavaScript.<br>
-</blockquote></blockquote>
-</noframes>
-</noscript>
-
-<frameset rows="80,*" frameborder=0 border=0>
- <frame name="head" src="head.html" scrolling="NO" marginheight=0 marginwidth=0>
- <frameset COLS="15%,85%" frameborder=0 border=0>
- <frame src="navigation_l.html" scrolling="NO" marginheight=0 marginwidth=0>
- <frame src="start.html" scrolling="auto" marginheight=0 marginwidth=0 name="main">
- </frameset>
-</frameset>
-
-</html>
diff --git a/sandbox/gschwant/docfactory/doc/navigation_l.html b/sandbox/gschwant/docfactory/doc/navigation_l.html
deleted file mode 100644
index fde558cad..000000000
--- a/sandbox/gschwant/docfactory/doc/navigation_l.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<link rel="stylesheet" href="./stylesheets/navigation_l.css" type="text/css" />
-</head>
-<body>
-<table>
-
- <tr><td class="section">DocFactory</td></tr>
- <tr><td><a href="start.html" target="main">Home</a></td></tr>
- <tr><td><a href="../README.html" target="main">README</a></td></tr>
- <tr><td><a href="FAQ.html" target="main">FAQ</a></td></tr>
- <tr><td><a href="../README.html#system-requirements" target="main">Requirements</a></td></tr>
- <tr><td><a href="downloads.html" target="main">Download</a></td></tr>
- <tr><td><a href="screenshots.html" target="main">Screenshots</a></td></tr>
- <tr><td><a href="HISTORY.html" target="main">History</a></td></tr>
- <tr><td><br></td></tr>
-
- <tr><td class="section">Contact</td></tr>
- <tr><td><a href="mailto:g.schwant@gmx.de">g.schwant@gmx.de</a></td></tr>
- <tr><td><br></td></tr>
-
- <tr><td class="section">Links</td></tr>
- <tr><td><a href="http://docutils.sourceforge.net" target="_top">Docutils Home</a></td></tr>
- <tr><td><a href="http://docutils.sourceforge.net/FAQ.html" target="_top">Docutils FAQ</a></td></tr>
- <tr><td><a href="http://www.python.org" target="_top">www.Python.org</a></td></tr>
- <tr><td><a href="http://wxPython.org" target="_top">wxPython.org</a></td></tr>
- <tr><td><br></td></tr>
-
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
- <tr><td><br></td></tr>
-
- </table>
-</body>
diff --git a/sandbox/gschwant/docfactory/doc/pics/DF.png b/sandbox/gschwant/docfactory/doc/pics/DF.png
deleted file mode 100644
index cfb0caf0f..000000000
--- a/sandbox/gschwant/docfactory/doc/pics/DF.png
+++ /dev/null
Binary files differ
diff --git a/sandbox/gschwant/docfactory/doc/pics/screenshot1.jpg b/sandbox/gschwant/docfactory/doc/pics/screenshot1.jpg
deleted file mode 100644
index 2d7426812..000000000
--- a/sandbox/gschwant/docfactory/doc/pics/screenshot1.jpg
+++ /dev/null
Binary files differ
diff --git a/sandbox/gschwant/docfactory/doc/pics/screenshot2.jpg b/sandbox/gschwant/docfactory/doc/pics/screenshot2.jpg
deleted file mode 100644
index 3f9e6dc83..000000000
--- a/sandbox/gschwant/docfactory/doc/pics/screenshot2.jpg
+++ /dev/null
Binary files differ
diff --git a/sandbox/gschwant/docfactory/doc/screenshots.txt b/sandbox/gschwant/docfactory/doc/screenshots.txt
deleted file mode 100644
index 49154badd..000000000
--- a/sandbox/gschwant/docfactory/doc/screenshots.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-=======================
-DocFactory Screenshots
-=======================
-
-.. If you have downloaded this file as part of the
- DocFactory-tarball, please use docutils to convert
- it to HTML and open index.html with your webbrowser.
-
-.. image:: pics/screenshot1.jpg
-
-.. image:: pics/screenshot2.jpg
diff --git a/sandbox/gschwant/docfactory/doc/start.txt b/sandbox/gschwant/docfactory/doc/start.txt
deleted file mode 100644
index b5b2766be..000000000
--- a/sandbox/gschwant/docfactory/doc/start.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-=========================
- Welcome to DocFactory!
-=========================
-
-.. If you have downloaded this file as part of the
- DocFactory-tarball, please use docutils to convert
- it to HTML and open index.html with your webbrowser.
-
-DocFactory is a kind of *integrated publishing environment* for
-documentation, tied to |Docutils|. In fact, the intention of
-DocFactory is to be a GUI for |Docutils|. At present it can be used
-to edit a set of one or more |ReST| files simultaneously
-and publish them as HTML. Support for other markups and output
-formats is planned for future releases. `Read more...`__
-
-__ ../README.html
-
-.. |Docutils| raw:: html
-
- <a class="reference" href="http://docutils.sourceforge.net" target="_top">Docutils</a>
-
-.. |ReST| raw:: html
-
- <a class="reference" href="http://docutils.sourceforge.net/rst.html" target="_top">reStructuredText</a>
-
-
diff --git a/sandbox/gschwant/docfactory/doc/stylesheets/df.css b/sandbox/gschwant/docfactory/doc/stylesheets/df.css
deleted file mode 100644
index af86ec0a8..000000000
--- a/sandbox/gschwant/docfactory/doc/stylesheets/df.css
+++ /dev/null
@@ -1,411 +0,0 @@
-
-/*
-:Author: David Goodger
-:Contact: goodger@users.sourceforge.net
-:date: $Date$
-:version: $Revision$
-:copyright: This stylesheet has been placed in the public domain.
-
-Default cascading style sheet for the HTML output of Docutils.
-*/
-
-.first {
- margin-top: 0 }
-
-.last {
- margin-bottom: 0 }
-
-a.toc-backref {
- text-decoration: none ;
- color: black }
-
-dd {
- margin-bottom: 0.5em }
-
-div.abstract {
- margin: 2em 5em }
-
-div.abstract p.topic-title {
- font-weight: bold ;
- text-align: center }
-
-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.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 }
-
-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.dedication {
- margin: 2em 5em ;
- text-align: center ;
- font-style: italic }
-
-div.dedication p.topic-title {
- font-weight: bold ;
- font-style: normal }
-
-div.figure {
- margin-left: 2em }
-
-div.footer, div.header {
- font-size: smaller }
-
-div.system-messages {
- margin: 5em }
-
-div.system-messages h1 {
- color: red }
-
-div.system-message {
- border: medium outset ;
- padding: 1em }
-
-div.system-message p.system-message-title {
- color: red ;
- font-weight: bold }
-
-div.topic {
- margin: 2em }
-
-hr {
- width: 75% }
-
-ol.simple, ul.simple {
- margin-bottom: 1em }
-
-ol.arabic {
- list-style: decimal }
-
-ol.loweralpha {
- list-style: lower-alpha }
-
-ol.upperalpha {
- list-style: upper-alpha }
-
-ol.lowerroman {
- list-style: lower-roman }
-
-ol.upperroman {
- list-style: upper-roman }
-
-p.caption {
- font-style: italic }
-
-p.credits {
- font-style: italic ;
- font-size: smaller }
-
-p.label {
- white-space: nowrap }
-
-p.topic-title {
- font-weight: bold }
-
-pre.address {
- margin-bottom: 0 ;
- margin-top: 0 ;
- font-family: serif ;
- font-size: 100% }
-
-pre.line-block {
- font-family: serif ;
- font-size: 100% }
-
-pre.literal-block, pre.doctest-block {
- background-color: #eeeeee }
-
-span.classifier {
- font-family: sans-serif ;
- font-style: oblique }
-
-span.classifier-delimiter {
- font-family: sans-serif ;
- font-weight: bold }
-
-span.interpreted {
- font-family: sans-serif }
-
-span.option-argument {
- font-style: italic }
-
-span.pre {
- white-space: pre }
-
-span.problematic {
- color: red }
-
-table {
- margin-top: 0.5em ;
- margin-bottom: 0.5em }
-
-table.citation {
- border-left: solid thin gray ;
- padding-left: 0.5ex }
-
-table.docinfo {
- margin: 2em 4em }
-
-table.footnote {
- border-left: solid thin black ;
- padding-left: 0.5ex }
-
-td, th {
- padding-left: 0.5em ;
- padding-right: 0.5em ;
- vertical-align: top }
-
-th.docinfo-name, th.field-name {
- font-weight: bold ;
- text-align: left ;
- white-space: nowrap }
-
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
- font-size: 100% }
-
-tt {
- background-color: #eeeeee }
-
-ul.auto-toc {
- list-style-type: none }
-
-
-/*
-Additional styles for "modern"-style of DocFactory.
-
-:Author: Gunnar Schwant
-:Contact: g.schwant@gmx.de
-*/
-
-.first {
- font-size: 10pt }
-
-.last {
- font-size: 10pt }
-
-a {
- text-decoration: none }
-
-a.reference {
- color: #00009F }
-
-a:hover {
- background-color: #00009F ;
- color: white }
-
-body {
- font-family: arial,helvetica,univers ;
- font-size: 10pt ;
- padding-top: 0.6cm ;
- margin-left:0.5cm ;
- margin-right:0.5cm ;
- margin-bottom:0.5cm }
-
-dd {
- font-size: 10pt ;
- padding-top: 0.1cm
-}
-
-dt {
- font-size: 10pt ;
- font-weight: bold ;
- background-color: #6FC7FB ;
- padding-left: 0.1cm ;
- padding-top: 0.1cm ;
- padding-bottom: 0.1cm }
-
-div.abstract {
- font-size: 10pt }
-
-div.abstract p.topic-title {
- font-size: 10pt }
-
-div.attention, div.caution, div.danger, div.error, div.hint,
-div.important, div.note, div.tip, div.warning {
- font-size: 10pt }
-
-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, div.hint p.admonition-title,
-div.important p.admonition-title, div.note p.admonition-title,
-div.tip p.admonition-title {
- margin-top: 0em ;
- font-size: 12pt ;
- font-family: arial,helvetica,univers }
-
-div.dedication {
- font-size: 10pt }
-
-div.dedication p.topic-title {
- font-size: 10pt }
-
-div.figure {
- font-size: 10pt }
-
-div.footer, div.header {
- font-size: 8pt }
-
-div.system-messages {
- font-size: 10pt }
-
-div.system-messages h1 {
- font-size: 12pt }
-
-div.system-message {
- font-size: 10pt }
-
-div.system-message p.system-message-title {
- font-size: 10pt }
-
-div.topic {
- font-size: 10pt }
-
-h1, h2, h3, h4, h5, h6 {
- padding-top: 0.5cm ;
- page-break-after: avoid ;
- font-family: arial,helvetica,univers }
-
-h1 {
- font-size: 18pt }
-
-h1.title {
- color: white ;
- background-color: #00009F ;
- padding-top: 0cm }
-
-h2 {
- font-size: 16pt }
-
-h2.subtitle {
- padding-top: 0cm }
-
-h3 {
- font-size: 14pt }
-
-h4 {
- font-size: 12pt }
-
-h5, h6 {
- font-size: 10pt }
-
-hr {
- width: 100%;
- page-break-after: always }
-
-li {
- padding-top: 1mm ;
- padding-bottom: 1mm }
-
-ol.simple, ul.simple {
- font-size: 10pt }
-
-ol.arabic {
- font-size: 10pt }
-
-ol.loweralpha {
- font-size: 10pt }
-
-ol.upperalpha {
- font-size: 10pt }
-
-ol.lowerroman {
- font-size: 10pt }
-
-ol.upperroman {
- font-size: 10pt }
-
-p.caption {
- font-size: 10pt }
-
-p.credits {
- font-style: italic ;
- font-size: 8pt }
-
-p.label {
- font-size: 10pt }
-
-p.topic-title {
- font-size: 10pt }
-
-pre.address {
- font-family: arial,helvetica,univers ;
- font-size: 10pt }
-
-pre.line-block {
- font-size: 10pt }
-
-pre.literal-block, pre.doctest-block {
- border-width: 1pt ;
- border-style: solid ;
- border-color: #999999 ;
- color: #0000C0 ;
- background-color: #ffffe0 ;
- font-size: 9pt }
-
-span.classifier {
- font-size: 10pt ;
- font-family: arial,helvetica,univers }
-
-span.classifier-delimiter {
- font-size: 10pt ;
- font-family: arial,helvetica,univers }
-
-span.field-argument {
- font-size: 10pt }
-
-span.interpreted {
- font-size: 10pt ;
- font-family: arial,helvetica,univers }
-
-span.option-argument {
- font-size: 10pt }
-
-span.problematic {
- font-size: 10pt }
-
-table {
- font-size: 10pt ;
- border-collapse: collapse ;
- border-width: 1.5pt ;
- border-color: #003366 }
-
-table.citation {
- font-size: 10pt }
-
-table.docinfo {
- font-size: 10pt }
-
-table.footnote {
- font-size: 8pt ;
- text-align: left }
-
-table.table {
- width: 100% }
-
-th {
- border-width: 1.5pt }
-
-td {
- border-width: 1pt }
-
-td, th {
- font-size: 10pt ;
- border-style: thin ;
- border-color: #003366 }
-
-td.docinfo-name, th.field-name {
- font-size: 10pt }
-
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
- font-size: 10pt }
diff --git a/sandbox/gschwant/docfactory/doc/stylesheets/navigation_l.css b/sandbox/gschwant/docfactory/doc/stylesheets/navigation_l.css
deleted file mode 100644
index 2e6d177c9..000000000
--- a/sandbox/gschwant/docfactory/doc/stylesheets/navigation_l.css
+++ /dev/null
@@ -1,38 +0,0 @@
-@import url(df.css);
-
-a {
- color: black ;
- font-size: 8pt }
-
-a:hover {
- background-color: #00009F }
-
-body {
- background-color: white ;
- font-size: 8pt ;
- padding-top: 0.6cm ;
- margin-top: 0cm ;
- margin-left: 0cm ;
- margin-right: 0.3cm ;
- margin-bottom: 1.0cm }
-
-table {
- margin-top: 0cm ;
- width: 100% ;
- border-width: 0pt ;
- border-style: thin }
-
-td {
- background-color: #6FC7FB ;
- font-size: 8pt ;
- width: 100% ;
- border-width: 0pt ;
- border-style: thin }
-
-td.section {
- background-color: #00009F ;
- font-weight: bold ;
- color: white }
-
-td.empty {
- background-color: white }
diff --git a/sandbox/gschwant/docfactory/docfactory.ico b/sandbox/gschwant/docfactory/docfactory.ico
deleted file mode 100644
index 6717dc00c..000000000
--- a/sandbox/gschwant/docfactory/docfactory.ico
+++ /dev/null
Binary files differ
diff --git a/sandbox/gschwant/docfactory/docfactory.py b/sandbox/gschwant/docfactory/docfactory.py
deleted file mode 100755
index ba3a62b53..000000000
--- a/sandbox/gschwant/docfactory/docfactory.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2
-"""
-
-from docutils.factory import main
-main.main()
diff --git a/sandbox/gschwant/docfactory/docfactory2exe.py b/sandbox/gschwant/docfactory/docfactory2exe.py
deleted file mode 100644
index 711d49c7e..000000000
--- a/sandbox/gschwant/docfactory/docfactory2exe.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2
-
-Usage::
-
- python docfactory2exe.py py2exe -w -p encodings,docutils --icon docfactory.ico
-
-"""
-
-from distutils.core import setup
-import py2exe
-
-setup(name="DocFactory",
- scripts=["docfactory.py"],
- )
diff --git a/sandbox/gschwant/docfactory/docutils.conf b/sandbox/gschwant/docfactory/docutils.conf
deleted file mode 100644
index 73cf660c4..000000000
--- a/sandbox/gschwant/docfactory/docutils.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-[options]
-output_encoding = ISO-8859-1
-footnote_backlinks = 1
-compact_lists = 1
-generator =
-source_link =
-embed_stylesheet =
-stylesheet_path = doc/stylesheets/df.css
-toc_backlinks = top
-footnote_references = superscript
-datestamp =
-
diff --git a/sandbox/gschwant/docfactory/factory/.cvsignore b/sandbox/gschwant/docfactory/factory/.cvsignore
deleted file mode 100644
index 0d20b6487..000000000
--- a/sandbox/gschwant/docfactory/factory/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/sandbox/gschwant/docfactory/factory/__init__.py b/sandbox/gschwant/docfactory/factory/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/sandbox/gschwant/docfactory/factory/__init__.py
+++ /dev/null
diff --git a/sandbox/gschwant/docfactory/factory/browser.py b/sandbox/gschwant/docfactory/factory/browser.py
deleted file mode 100644
index 5b638900b..000000000
--- a/sandbox/gschwant/docfactory/factory/browser.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-import sys, os, webbrowser
-
-from wxPython.wx import *
-from wxPython.html import *
-from wxPython.lib.dialogs import wxScrolledMessageDialog
-from dialogs import customMsgBox
-
-if wxPlatform == '__WXMSW__':
- from wxPython.iewin import *
-
-class HtmlWindow(wxHtmlWindow):
- def __init__(self, parent, id, log):
- wxHtmlWindow.__init__(self, parent, id)
- self.log = log
-
- def OnLinkClicked(self, linkinfo):
- self.log.WriteText('You clicked on link: %s\n' % linkinfo.GetHref())
- # Virtuals in the base class have been renamed with base_ on the front.
- self.base_OnLinkClicked(linkinfo)
-
-class HtmlPanel(wxPanel):
- def __init__(self, parent, frame, log, htmlfile=None):
- wxPanel.__init__(self, parent, -1)
- self.log = log
- self.frame = frame
- self.cwd = os.path.split(sys.argv[0])[0]
- if not self.cwd:
- self.cwd = os.getcwd()
-
- self.html = HtmlWindow(self, -1, log)
-
- self.printer = wxHtmlEasyPrinting()
-
- self.box = wxBoxSizer(wxVERTICAL)
- self.box.Add(self.html, 1, wxGROW)
-
- subbox = wxBoxSizer(wxHORIZONTAL)
-
- exitID=wxNewId()
- btn = wxButton(self, exitID, "View In Browser")
- EVT_BUTTON(self, exitID, self.OnViewInBrowser)
- subbox.Add(btn, 1, wxGROW | wxALL, 2)
-
- exitID=wxNewId()
- btn = wxButton(self, exitID, "View Source")
- EVT_BUTTON(self, exitID, self.OnViewSource)
- subbox.Add(btn, 1, wxGROW | wxALL, 2)
-
- exitID=wxNewId()
- btn = wxButton(self, exitID, "<<<")
- EVT_BUTTON(self, exitID, self.OnBack)
- subbox.Add(btn, 1, wxGROW | wxALL, 2)
-
- exitID=wxNewId()
- btn = wxButton(self, exitID, ">>>")
- EVT_BUTTON(self, exitID, self.OnForward)
- subbox.Add(btn, 1, wxGROW | wxALL, 2)
-
- exitID=wxNewId()
- btn = wxButton(self, exitID, "Print")
- EVT_BUTTON(self, exitID, self.OnPrint)
- subbox.Add(btn, 1, wxGROW | wxALL, 2)
-
- self.box.Add(subbox, 0, wxGROW)
- self.SetSizer(self.box)
- self.SetAutoLayout(true)
-
- self.html.LoadPage(htmlfile)
-
- def OnBack(self, event):
- if not self.html.HistoryBack():
- customMsgBox(self, 'No more items in history!', 'wakeup')
-
- def OnForward(self, event):
- if not self.html.HistoryForward():
- customMsgBox(self, 'No more items in history!', 'wakeup')
-
- def OnViewSource(self, event):
- source = self.html.GetParser().GetSource()
- dlg = wxScrolledMessageDialog(self, source, 'HTML Source')
- dlg.ShowModal()
- dlg.Destroy()
-
- def OnViewInBrowser(self, event):
- htmlfile = self.html.GetOpenedPage()
- try:
- webbrowser.open('file:%s' % htmlfile, autoraise=1)
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
-
- def OnPrint(self, event):
- self.printer.PrintFile(self.html.GetOpenedPage())
-
-class IEHtmlPanel(wxPanel):
-
- def __init__(self, parent, frame, log, htmlfile=None):
- wxPanel.__init__(self, parent, -1)
- self.log = log
- if htmlfile != None:
- self.current = htmlfile
- else:
- self.current = "about:blank"
- self.frame = frame
- if frame:
- self.titleBase = frame.GetTitle()
-
- sizer = wxBoxSizer(wxVERTICAL)
- btnSizer = wxBoxSizer(wxHORIZONTAL)
-
- self.ie = wxIEHtmlWin(self, -1, style = wxNO_FULL_REPAINT_ON_RESIZE)
-
- btn = wxButton(self, wxNewId(), '<<<', style=wxBU_EXACTFIT)
- EVT_BUTTON(self, btn.GetId(), self.OnPrevPageButton)
- btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
-
- btn = wxButton(self, wxNewId(), '>>>', style=wxBU_EXACTFIT)
- EVT_BUTTON(self, btn.GetId(), self.OnNextPageButton)
- btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
-
- btn = wxButton(self, wxNewId(), 'Stop', style=wxBU_EXACTFIT)
- EVT_BUTTON(self, btn.GetId(), self.OnStopButton)
- btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
-
- btn = wxButton(self, wxNewId(), 'Refresh', style=wxBU_EXACTFIT)
- EVT_BUTTON(self, btn.GetId(), self.OnRefreshPageButton)
- btnSizer.Add(btn, 0, wxEXPAND|wxALL, 2)
-
- txt = wxStaticText(self, -1, 'Location:')
- btnSizer.Add(txt, 0, wxCENTER|wxALL, 2)
-
- self.location = wxComboBox(self, wxNewId(), '', style=wxCB_DROPDOWN|wxPROCESS_ENTER)
- EVT_COMBOBOX(self, self.location.GetId(), self.OnLocationSelect)
- EVT_KEY_UP(self.location, self.OnLocationKey)
- EVT_CHAR(self.location, self.IgnoreReturn)
- btnSizer.Add(self.location, 1, wxEXPAND|wxALL, 2)
-
- sizer.Add(btnSizer, 0, wxEXPAND)
- sizer.Add(self.ie, 1, wxEXPAND)
-
- self.ie.Navigate(self.current)
- self.location.Append(self.current)
-
- self.SetSizer(sizer)
- self.SetAutoLayout(true)
- EVT_SIZE(self, self.OnSize)
-
- # Hook up the event handlers for the IE window
- EVT_MSHTML_NEWWINDOW2(self, -1, self.OnNewWindow2)
- EVT_MSHTML_DOCUMENTCOMPLETE(self, -1, self.OnDocumentComplete)
- EVT_MSHTML_STATUSTEXTCHANGE(self, -1, self.OnStatusTextChange)
-
- def OnSize(self, evt):
- self.Layout()
-
- def OnLocationSelect(self, evt):
- url = self.location.GetStringSelection()
- self.ie.Navigate(url)
-
- def OnLocationKey(self, evt):
- if evt.KeyCode() == WXK_RETURN:
- URL = self.location.GetValue()
- self.location.Append(URL)
- self.ie.Navigate(URL)
- else:
- evt.Skip()
-
- def IgnoreReturn(self, evt):
- if evt.GetKeyCode() != WXK_RETURN:
- evt.Skip()
-
- def OnPrevPageButton(self, event):
- self.ie.GoBack()
-
- def OnNextPageButton(self, event):
- self.ie.GoForward()
-
- def OnStopButton(self, evt):
- self.ie.Stop()
-
- def OnRefreshPageButton(self, evt):
- self.ie.Refresh(wxIEHTML_REFRESH_COMPLETELY)
-
- def OnNewWindow2(self, evt):
- evt.Veto() # don't allow it
-
- def OnDocumentComplete(self, evt):
- self.current = evt.GetText1()
- self.location.SetValue(self.current)
-
- def OnStatusTextChange(self, evt):
- if self.frame:
- self.frame.SetStatusText(evt.GetText1())
diff --git a/sandbox/gschwant/docfactory/factory/controls.py b/sandbox/gschwant/docfactory/factory/controls.py
deleted file mode 100644
index 75f4782a3..000000000
--- a/sandbox/gschwant/docfactory/factory/controls.py
+++ /dev/null
@@ -1,183 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-import os, throbimages, time
-from wxPython.wx import *
-from wxPython.stc import *
-from docutilsadapter import get_rest_bibl_fields
-from docutilsadapter import get_rest_directives
-from dialogs import customMsgBox
-from shutil import copyfile
-
-if wxPlatform == '__WXMSW__':
- faces = { 'times': 'Times New Roman',
- 'mono' : 'Courier New',
- 'helv' : 'Arial',
- 'other': 'Comic Sans MS',
- 'size' : 10,
- 'size2': 8,
- }
-else:
- faces = { 'times': 'Times',
- 'mono' : 'Courier',
- 'helv' : 'Helvetica',
- 'other': 'new century schoolbook',
- 'size' : 12,
- 'size2': 10,
- }
-
-#---------------------------------------------------------------------------
-
-class CustomStyledTextCtrl(wxStyledTextCtrl):
- def __init__(self, parent, ID, log):
- wxStyledTextCtrl.__init__(self, parent, ID)
- self.log = log
-
- self.CmdKeyAssign(ord('L'), wxSTC_SCMOD_CTRL, wxSTC_CMD_ZOOMIN)
- self.CmdKeyAssign(ord('K'), wxSTC_SCMOD_CTRL, wxSTC_CMD_ZOOMOUT)
- self.SetEdgeMode(wxSTC_EDGE_LINE)
- self.SetEdgeColour(wxColour(175,255,255))
- self.SetEdgeColumn(75)
- self.SetUseTabs(0)
- self.SetIndent(2)
- self.SetEOLMode(wxSTC_EOL_LF)
-
- self.set_styles()
-
- EVT_STC_MODIFIED(self, ID, self.OnModified)
- EVT_CHAR(self, self.OnChar)
-
- # lists for autocompletion:
- self.bibliographic_fields = get_rest_bibl_fields()
- self.directives = get_rest_directives()
-
- self.IsModified = 0
-
- def set_styles(self):
-
- # general
- self.StyleSetSpec(wxSTC_STYLE_DEFAULT, 'face:%(mono)s,size:%(size)d' % faces)
- self.StyleSetSpec(1, 'face:%(mono)s,bold,fore:#0000FF,size:%(size)d' % faces)
- self.StyleSetSpec(2, 'face:%(mono)s,italic,fore:#FF0000,size:%(size)d' % faces)
- self.StyleSetSpec(3, 'face:%(mono)s,bold,size:%(size)d' % faces)
- self.StyleSetSpec(4, 'face:%(mono)s,size:%(size)d' % faces)
- self.StyleSetSpec(wxSTC_STYLE_CONTROLCHAR, 'face:%(other)s' % faces)
-
- # line numbers in the margin
- self.StyleSetSpec(wxSTC_STYLE_LINENUMBER,
- 'back:#C0C0C0,face:%(helv)s,size:%(size2)d' % faces)
- self.SetMarginType(0, wxSTC_MARGIN_NUMBER)
- self.SetMarginWidth(0, 3*faces['size']-2)
-
- # markers
- self.SetMarginType(1, wxSTC_MARGIN_SYMBOL)
- self.MarkerDefine(0, wxSTC_MARK_CIRCLE, 'RED', '#FFFF00')
- self.MarkerDefine(1, wxSTC_MARK_CIRCLE, '#FFFF00', 'RED')
-
- def OnChar(self, event):
- key = event.KeyCode()
- currpos = self.GetCurrentPos()
- currcol = self.GetColumn(currpos)
- if currcol == 0 and key == ord(':'):
- self.AddText(':')
- self.AutoCompShow(0, self.bibliographic_fields)
- elif currcol == 2 and key == ord(' '):
- if self.GetCharAt(currpos - 1) == self.GetCharAt(currpos - 2) == ord('.'):
- self.AddText(' ')
- self.AutoCompShow(0, self.directives)
- else:
- event.Skip()
- else:
- event.Skip()
-
- def OnModified(self, evt):
- self.IsModified = 1
-
- def set_lexer(self, ext):
- lexer = self.GetLexer()
- if ext == '.html' or ext == '.htm':
- if lexer != wxSTC_LEX_HTML:
- self.SetLexer(wxSTC_LEX_HTML)
- else:
- if lexer != wxSTC_LEX_NULL:
- self.SetLexer(wxSTC_LEX_NULL)
-
- def LoadFile(self, filename):
- try:
- wxBeginBusyCursor()
- try:
- f = open(filename, 'rt')
- text = f.read()
- f.close()
- ext = os.path.splitext(filename)[1]
- self.set_lexer(ext)
- self.SetText(text)
- self.EmptyUndoBuffer()
- self.IsModified = 0
- except:
- self.Clear()
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
- finally:
- wxEndBusyCursor()
-
- def SaveFile(self, filename, backup=0):
- return_value = 1
- try:
- wxBeginBusyCursor()
- try:
- if backup:
- copyfile(filename, '%s.bak' % filename)
- f = open(filename, 'w')
- f.write(self.GetText())
- f.close()
- self.IsModified = 0
- except:
- return_value = 0
- customMsgBox(self, 'Error when saving "%s".\n\n%s:\n%s\n%s' \
- % (filename, sys.exc_info()[0], sys.exc_info()[1],
- sys.exc_info()[2]),
- 'error')
- finally:
- wxEndBusyCursor()
- return return_value
-
- def Clear(self):
- self.SetText('')
- self.IsModified = 0
-
-#---------------------------------------------------------------------------
-
-class CustomStatusBar(wxStatusBar):
- def __init__(self, parent):
- wxStatusBar.__init__(self, parent, -1)
- self.SetFieldsCount(2)
- self.SetStatusWidths([-1,150])
-
- self.SetStatusText('Ready', 0)
-
- # start timer
- self.timer = wxPyTimer(self.Notify)
- self.timer.Start(1000)
- self.Notify()
-
- # Time-out handler
- def Notify(self):
- t = time.localtime(time.time())
- st = time.strftime(" %d-%b-%Y %H:%M:%S", t)
- self.SetStatusText(st, 1)
-
-#---------------------------------------------------------------------------
-
-class CustomTreeCtrl(wxTreeCtrl):
-
- def OnCompareItems(self, item1, item2):
- t1 = self.GetItemText(item1)
- t2 = self.GetItemText(item2)
- #self.log.WriteText('compare: ' + t1 + ' <> ' + t2 + '\n')
- if t1 < t2: return -1
- if t1 == t2: return 0
- return 1
-
diff --git a/sandbox/gschwant/docfactory/factory/dialogs.py b/sandbox/gschwant/docfactory/factory/dialogs.py
deleted file mode 100644
index 1d9b90066..000000000
--- a/sandbox/gschwant/docfactory/factory/dialogs.py
+++ /dev/null
@@ -1,853 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-from wxPython.lib.throbber import Throbber
-from wxPython.wx import *
-from wxPython.help import *
-from wxPython.lib.filebrowsebutton import DirBrowseButton
-from docutils.utils import relative_path
-from urllib import quote
-from docutilsadapter import language_codes, publishers
-import images, os, string, ConfigParser, stylesheets, throbimages
-
-NAME = 'DocFactory'
-
-#---------------------------------------------------------------------------
-
-def customMsgBox(window, text, type=None):
- if type=='info':
- style=wxOK|wxICON_INFORMATION
- elif type=='error':
- style=wxOK|wxICON_ERROR
- elif type=='wakeup':
- style=wxOK|wxICON_EXCLAMATION
- else:
- style=wxOK
- dlg = wxMessageDialog(window, text, NAME, style)
- dlg.Centre()
- dlg.ShowModal()
- dlg.Destroy()
-
-#---------------------------------------------------------------------------
-
-class aboutDlg(wxDialog):
-
- def __init__(self, parent):
- wxDialog.__init__(self, parent, -1, title='About')
- self.SetBackgroundColour(wxColour(0, 0, 0))
- self.SetForegroundColour(wxColour(0, 255, 0))
- self.SetFont(wxFont(10, wxMODERN, wxNORMAL, wxNORMAL, false))
-
- bmp = images.getLogoBigBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- wxStaticBitmap(self, -1, bmp, wxPoint(42, 8))
- wxStaticBitmap(self, -1, bmp, wxPoint(274, 8))
-
- # throbber
- pics = [throbimages.catalog[i].getBitmap()
- for i in throbimages.index
- ]
-
- Throbber(self, -1, pics, pos=wxPoint(74, 11),
- size=(200, 25), frameDelay = 0.065, reverse=true).Start()
-
- #text = wxStaticText(self, -1, 'DocFactory 0.2', wxPoint(50, 8))
- #text.SetFont(wxFont(20, wxSWISS, wxNORMAL, wxBOLD, false))
-
- text = wxStaticText(self , -1,
- '>>> release: 0.2.4',
- wxPoint(9, 50))
- text = wxStaticText(self, -1,
- '>>> manufactured by: gunnar schwant',
- wxPoint(9, 65))
- text = wxStaticText(self, -1,
- '>>> mailto: g.schwant@gmx.de',
- wxPoint(9, 80))
- text = wxStaticText(self, -1,
- '>>> Python version: 2.1.1 (or later)',
- wxPoint(9, 95))
- text = wxStaticText(self, -1,
- '>>> wxPython version: 2.3.4.2',
- wxPoint(9, 110))
- text = wxStaticText(self, -1,
- '>>> Docutils version: 0.2.8 (or later)',
- wxPoint(9, 125))
- text = wxStaticText(self, -1,
- '>>> special thanks to: guido van rossum,',
- wxPoint(9, 140))
- text = wxStaticText(self, -1,
- '... robin dunn',
- wxPoint(9, 155))
- text = wxStaticText(self, -1,
- '... and david goodger',
- wxPoint(9, 170))
- text = wxStaticText(self, -1,
- '>>> visit http://docutils.sourceforge.net',
- wxPoint(9, 185))
- self.Fit()
-
-#---------------------------------------------------------------------------
-
-class projectSettingsDlg(wxDialog):
-
- def __init__(self, parent, project, invalid_names):
- wxDialog.__init__(self, parent, -1, title = 'Project Settings')
-
- self.project = project
- self.configfile = os.path.join(project.directory, 'docutils.conf')
- self.config = self.loadconf()
- self.invalid_names = invalid_names
-
- #--------------------------------------------------
- # Create a Notebook
- tID = wxNewId()
- self.nb = wxNotebook(self, tID, style=wxCLIP_CHILDREN)
- #EVT_NOTEBOOK_PAGE_CHANGED(self.nb, tID, self.on_notebook_page_changed)
-
- #--------------------------------------------------
- # DocFactory Page
- self.df = wxPanel(self, -1)
-
- # Help Button
- wxContextHelpButton(self.df, pos = wxPoint(370, 8),
- size = wxSize(23, 23))
-
- # Output Directory
- wxStaticText(self.df, -1, 'Output-Directory', wxPoint(8, 42))
- exitID = wxNewId()
- self.dirCtrl = wxTextCtrl(self.df, exitID,
- pos = wxPoint(96, 40),
- size = wxSize(240, 21))
- self.dirCtrl.SetHelpText('This is the default ' + \
- 'directory for output-files.')
- exitID = wxNewId()
- self.btnSelDir = wxButton(self.df, exitID, 'Select',
- pos = wxPoint(344, 40),
- size = wxSize(75, 23))
- EVT_BUTTON(self, exitID, self.onBtnSelDir)
-
- # Title
- wxStaticText(self.df, -1, 'Title', wxPoint(8, 74))
- exitID = wxNewId()
- self.nameCtrl = wxTextCtrl(self.df, exitID,
- pos = wxPoint(96, 72),
- size = wxSize(240, 21),
- validator = customValidator(PROJECT_NAME))
- self.nameCtrl.SetHelpText('Enter a title for your project here.')
-
- #--------------------------------------------------
- # Docutils Page
- self.du = wxPanel(self, -1)
-
- # Help Button
- wxContextHelpButton(self.du, pos = wxPoint(370, 8),
- size = wxSize(23, 23))
-
- # Language Code
- wxStaticText(self.du, -1, 'Language-Code', wxPoint(8, 10))
- exitID = wxNewId()
- if not self.config.options['language_code'] in language_codes:
- language_codes.append(self.config.options['language_code'])
- language_codes.sort()
- self.languageCodeCtrl = wxChoice(self.du, exitID, pos = wxPoint(97, 8),
- choices = language_codes)
- self.languageCodeCtrl.SetStringSelection(self.config.options['language_code'])
- self.languageCodeCtrl.SetHelpText('Language code of your documents.')
- EVT_CHOICE(self, exitID, self.onChoiceLanguageCode)
-
- # Stylesheet
- wxStaticText(self.du, -1, 'Stylesheet', wxPoint(8, 42))
- exitID = wxNewId()
- self.styCtrl = wxTextCtrl(self.du, exitID,
- pos = wxPoint(96, 40),
- size = wxSize(240, 21))
- self.styCtrl.SetHelpText('Path to stylesheet.')
- exitID = wxNewId()
- self.btnSelSty = wxButton(self.du, exitID, 'Select',
- pos = wxPoint(344, 40),
- size = wxSize(75, 23), style = 0)
- EVT_BUTTON(self, exitID, self.onBtnSelSty)
-
- # Output Encoding
- wxStaticText(self.du, -1, 'Output-Encoding', wxPoint(8, 74))
- exitID = wxNewId()
- self.outencCtrl = wxTextCtrl(self.du, exitID,
- self.config.options['output_encoding'],
- pos = wxPoint(96, 72),
- size = wxSize(115, 21))
- self.outencCtrl.SetHelpText('Encoding of output.')
-
- # Datestamp
- wxStaticText(self.du, -1, 'Datestamp', wxPoint(8, 106))
- exitID = wxNewId()
- self.datestampCtrl = wxTextCtrl(self.du, exitID,
- pos = wxPoint(96, 104),
- size = wxSize(115, 21))
- self.datestampCtrl.SetHelpText('Include a time/datestamp in ' + \
- 'the document footer. Contains ' + \
- 'a format string for time.strftime.')
-
- # TOC-Backlinks
- exitID = wxNewId()
- self.tocliCtrl = wxRadioBox(self.du, exitID, 'TOC-Backlinks',
- wxPoint(224, 79), wxDefaultSize,
- ['entry','top','none'],
- 3, wxRA_SPECIFY_COLS)
- self.tocliCtrl.SetHelpText('Enable backlinks from section ' + \
- 'titles to table of contents ' + \
- 'entries ("entry"), to the top ' + \
- 'of the TOC ("top"), or disable ("none").')
-
- # Footnote References
- exitID = wxNewId()
- self.footrefCtrl = wxRadioBox(self.du, exitID,
- 'Footnote References',
- wxPoint(224, 131),
- wxDefaultSize,
- ['superscript','brackets'],
- 1, wxRA_SPECIFY_COLS)
- self.footrefCtrl.SetHelpText('Format for footnote references.')
-
- # More Options via Checklistbox
- optionList = ['Compact Lists',
- 'Embed Stylesheet',
- 'Footnote-Backlinks',
- 'Generator',
- 'Source-Link',
- 'Use LaTeX-TOC'
- ]
- exitID = NewId()
- self.optionsCtrl = wxCheckListBox(self.du, exitID, wxPoint(50, 136),
- wxSize(161, 90), optionList)
- self.optionsCtrl.SetHelpText('Set more Docutils-options here.')
-
- #--------------------------------------------------
- # Fill controls with initial values
- self.init_ctrls()
-
- #--------------------------------------------------
- # Sizing of Notebook
- self.df.Fit()
- self.du.Fit()
- size_of_df = self.df.GetSize()
- size_of_du = self.du.GetSize()
- self.nb.SetSize(wxSize(max(size_of_df[0],size_of_du[0])+15,
- max(size_of_df[1],size_of_du[1])+15))
-
- #--------------------------------------------------
- # Add pages to notebook
- self.nb.AddPage(self.df, 'DocFactory')
- self.nb.AddPage(self.du, 'Docutils')
- self.nb.SetSelection(0)
-
- #--------------------------------------------------
- # OK- and Cancel-Buttons
- size_of_nb = self.nb.GetSize()
- ok_position = wxPoint((size_of_nb[0]/2)-80,size_of_nb[1]+10)
- cancel_position = wxPoint((size_of_nb[0]/2)+5,size_of_nb[1]+10)
- exitID = wxNewId()
- self.ok = wxButton(self, exitID, 'OK',
- pos = ok_position,
- size = wxSize(75, 23))
- EVT_BUTTON(self, exitID, self.onBtnOk)
- self.cancel = wxButton(self, wxID_CANCEL, 'Cancel',
- pos = cancel_position,
- size = wxSize(75, 23))
- self.ok.SetDefault()
-
- #--------------------------------------------------
- # Dialog Sizing
- self.Fit()
-
- def onBtnSelDir(self, event):
- dir = self.dirCtrl.GetValue()
- if not os.path.isdir(dir):
- dir = ''
- dlg = wxDirDialog(self, 'Choose a directory for output files', dir)
- if dlg.ShowModal() == wxID_OK:
- directory = dlg.GetPath()
- self.project.directory = directory
- newconfig = os.path.join(directory, 'docutils.conf')
- if newconfig != self.configfile:
- self.configfile = newconfig
- self.config = self.loadconf()
- self.init_ctrls()
- dlg.Destroy()
-
- def onBtnSelSty(self, event):
- dir = self.dirCtrl.GetValue()
- if not os.path.isdir(dir):
- customMsgBox(self, 'Invalid Output-Directory.', 'wakeup')
- else:
- wildcard = 'Stylesheet-Files (*.css, *.tex)|*.css;*.tex|' \
- 'All files (*.*)|*.*'
- dlg = wxFileDialog(self, 'Choose a stylesheet',
- dir, '', wildcard,
- wxOPEN|wxFILE_MUST_EXIST)
- if dlg.ShowModal() == wxID_OK:
- stylesheetpath = relative_path(self.configfile,
- dlg.GetPath())
- self.styCtrl.SetValue(stylesheetpath)
- dlg.Destroy()
-
- def onChoiceLanguageCode(self, event):
- self.config.options['language_code'] = event.GetString()
-
- def getValues(self):
- return(self.nameCtrl.GetValue(), self.dirCtrl.GetValue())
-
- def onBtnOk(self, event):
-
- dir = self.dirCtrl.GetValue()
- name = self.nameCtrl.GetValue()
- configfile = os.path.join(dir, 'docutils.conf')
- cfg = ConfigParser.ConfigParser()
- if os.path.isfile(configfile):
- cfg.read(configfile)
- docfactory_section = 'docfactory_project: %s' % name
-
- if not os.path.isdir(dir):
- customMsgBox(self, 'Invalid Output-Directory.', 'wakeup')
- elif name == '':
- customMsgBox(self, 'You have to enter a Project-Title.', 'wakeup')
- elif (name in self.invalid_names):
- customMsgBox(self,
- 'Invalid Project-Title. Please try another title.',
- 'wakeup')
- else:
- if self.optionsCtrl.IsChecked(0):
- self.config.options['compact_lists'] = '1'
- else:
- self.config.options['compact_lists'] = ''
- if self.optionsCtrl.IsChecked(1):
- self.config.options['embed_stylesheet'] = '1'
- else:
- self.config.options['embed_stylesheet'] = ''
- if self.optionsCtrl.IsChecked(2):
- self.config.options['footnote_backlinks'] = '1'
- else:
- self.config.options['footnote_backlinks'] = ''
- if self.optionsCtrl.IsChecked(3):
- self.config.options['generator'] = '1'
- else:
- self.config.options['generator'] = ''
- if self.optionsCtrl.IsChecked(4):
- self.config.options['source_link'] = '1'
- else:
- self.config.options['source_link'] = ''
- if self.optionsCtrl.IsChecked(5):
- self.config.options['use_latex_toc'] = '1'
- else:
- self.config.options['use_latex_toc'] = ''
-
- self.config.options['datestamp'] = self.datestampCtrl.GetValue()
- self.config.options['stylesheet'] = self.styCtrl.GetValue()
-
- stylesheetpath=os.path.abspath(os.path.join(dir,self.config.options['stylesheet']))
- if not os.path.exists(stylesheetpath):
- styles = stylesheets.stylesheets.keys()
- styles.sort()
- dlg = wxSingleChoiceDialog(self,
- 'The stylesheet does not exist.' \
- '\nPlease select a style to create it' \
- '\nor press "Cancel" to abort.',
- 'Create stylesheet?',
- styles, wxOK|wxCANCEL)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- f = open(stylesheetpath, 'wt')
- f.write(stylesheets.stylesheets[dlg.GetStringSelection()])
- f.close()
- dlg.Destroy()
-
- self.config.options['output_encoding'] = self.outencCtrl.GetValue()
-
- self.config.options['footnote_references'] = self.footrefCtrl.GetStringSelection()
- self.config.options['toc_backlinks'] = self.tocliCtrl.GetStringSelection()
-
- self.saveconf()
- self.Show(0)
-
- def init_ctrls(self):
- self.nameCtrl.SetValue(self.project.name)
- self.dirCtrl.SetValue(self.project.directory)
- self.styCtrl.SetValue(self.config.options['stylesheet'])
- if self.config.options['datestamp'] != None:
- ds = self.config.options['datestamp']
- else:
- ds = ''
- self.datestampCtrl.SetValue(ds)
- self.outencCtrl.SetValue(self.config.options['output_encoding'])
- self.tocliCtrl.SetStringSelection(self.config.options['toc_backlinks'])
- self.footrefCtrl.SetStringSelection(self.config.options['footnote_references'])
-
- if self.config.options['compact_lists'] == '1':
- self.optionsCtrl.Check(0, TRUE)
- else:
- self.optionsCtrl.Check(0, FALSE)
-
- if self.config.options['embed_stylesheet'] == '1':
- self.optionsCtrl.Check(1, TRUE)
- else:
- self.optionsCtrl.Check(1, FALSE)
-
- if self.config.options['footnote_backlinks'] == '1':
- self.optionsCtrl.Check(2, TRUE)
- else:
- self.optionsCtrl.Check(2, FALSE)
-
- if self.config.options['generator'] == '1':
- self.optionsCtrl.Check(3, TRUE)
- else:
- self.optionsCtrl.Check(3, FALSE)
-
- if self.config.options['source_link'] == '1':
- self.optionsCtrl.Check(4, TRUE)
- else:
- self.optionsCtrl.Check(4, FALSE)
-
- if self.config.options['use_latex_toc'] == '1':
- self.optionsCtrl.Check(5, TRUE)
- else:
- self.optionsCtrl.Check(5, FALSE)
-
- def loadconf(self):
- config = Config()
- if os.path.isfile(self.configfile):
- cfg = ConfigParser.ConfigParser()
- cfg.read(self.configfile)
- for key in config.options.keys():
- if cfg.has_option('options', key):
- config.options[key] = cfg.get('options', key)
- return config
-
- def saveconf(self):
- cfg = ConfigParser.ConfigParser()
- if os.path.isfile(self.configfile):
- cfg.read(self.configfile)
- if not cfg.has_section('options'):
- cfg.add_section('options')
- for key in self.config.options.keys():
- cfg.set('options', key, self.config.options[key])
- old_section = 'docfactory_project: %s' % self.project.name
- new_section = 'docfactory_project: %s' % \
- self.nameCtrl.GetValue()
- if old_section != new_section:
- if cfg.has_section(old_section):
- cfg.remove_section(old_section)
- f = open(self.configfile, 'wt')
- cfg.write(f)
- f.close()
-
-class Config:
- def __init__(self):
- self.options = {}
- self.options['compact_lists'] = '1'
- self.options['datestamp'] = ''
- self.options['embed_stylesheet'] = ''
- self.options['footnote_backlinks'] = '1'
- self.options['footnote_references'] = 'superscript'
- self.options['generator'] = ''
- self.options['language_code'] = 'en'
- self.options['output_encoding'] = 'UTF-8'
- self.options['source_link'] = ''
- self.options['stylesheet'] = ''
- self.options['toc_backlinks'] = 'entry'
- self.options['use_latex_toc'] = '1'
-
-#---------------------------------------------------------------------------
-
-class hyperlinkDlg(wxDialog):
-
- def __init__(self, parent, directory, project=None):
- wxDialog.__init__(self, parent, -1, title = 'Hyperlink')
- btn_size = wxSize(75, 23)
- self.directory = directory
- self.project = project
- wxStaticText(self, -1, 'Path?', wxPoint(8, 12))
- exitID = wxNewId()
- self.pathCtrl = wxTextCtrl(self, exitID,
- pos = wxPoint(46, 10),
- size = wxSize(240, 21))
- exitID = wxNewId()
- self.btnSelPath = wxButton(self, exitID, 'Select',
- pos = wxPoint(294, 10),
- size = btn_size)
- EVT_BUTTON(self, exitID, self.onBtnSelPath)
- self.ok = wxButton(self, wxID_OK, 'OK',
- pos = wxPoint(185-80,40),
- size = btn_size)
- self.cancel = wxButton(self, wxID_CANCEL, 'Cancel',
- pos = wxPoint(185+5,40),
- size = btn_size)
- self.ok.SetDefault()
- self.Fit()
-
- def onBtnSelPath(self, event):
- go_ahead = 1
- dlg = wxFileDialog(self, 'Select a file',
- self.directory, '', '*.*',
- wxOPEN|wxFILE_MUST_EXIST)
- if dlg.ShowModal() == wxID_OK:
- path = dlg.GetPath()
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- if self.project == None:
- dlg = wxDirDialog(self, 'Calculate path relative'
- ' to which outputdirectory?',
- self.directory)
- if dlg.ShowModal() == wxID_OK:
- self.directory = dlg.GetPath()
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- self.pathCtrl.SetValue(
- quote(relative_path('%s%sdummy.html' % (self.directory,
- os.sep),
- path)))
-
- def GetPath(self):
- return self.pathCtrl.GetValue()
-
-#---------------------------------------------------------------------------
-
-class publishDlg(wxDialog):
-
- def __init__(self, parent, infile, project=None):
- wxDialog.__init__(self, parent, -1, title = 'Publish')
- btn_size = wxSize(75, 23)
- self.infile = infile
- self.project = project
- if self.project != None:
- self.directory = self.project.directory
- else:
- self.directory = os.path.dirname(infile)
- self.writer = 'HTML'
- # Writer
- wxStaticText(self, -1, 'Docutils-Writer:', wxPoint(8, 12))
- exitID = wxNewId()
- writers = publishers.keys()
- writers.sort()
- self.writerCtrl = wxChoice(self, exitID, (100, 10),
- choices = writers)
- self.writerCtrl.SetSelection(1)
- EVT_CHOICE(self, exitID, self.onChoiceWriter)
-
- # Output-directory
- wxStaticText(self, -1, 'Output-Directory:', wxPoint(8, 42))
- exitID = wxNewId()
- self.outdirCtrl = wxTextCtrl(self, exitID,
- pos = wxPoint(100, 40),
- size = wxSize(240, 21))
- self.outdirCtrl.SetValue(self.directory)
- exitID = wxNewId()
- self.btnSelOutdir = wxButton(self, exitID, 'Select',
- pos = wxPoint(350, 40),
- size = btn_size)
- EVT_BUTTON(self, exitID, self.onBtnOutdir)
-
- # Output-file
- wxStaticText(self, -1, 'Output-File:', wxPoint(8, 72))
- exitID = wxNewId()
- self.outfileCtrl = wxTextCtrl(self, exitID,
- pos = wxPoint(100, 70),
- size = wxSize(240, 21))
- self.outfileCtrl.SetValue(self.default_outfile())
-
- # OK and Cancel
- self.ok = wxButton(self, wxID_OK, 'OK',
- pos = wxPoint(235-80,100),
- size = btn_size)
- self.cancel = wxButton(self, wxID_CANCEL, 'Cancel',
- pos = wxPoint(235+5,100),
- size = btn_size)
- self.ok.SetDefault()
- self.Fit()
-
- def onBtnOutdir(self, event):
- dlg = wxDirDialog(self, 'Select output-directory:',
- self.directory)
- if dlg.ShowModal() == wxID_OK:
- self.directory = dlg.GetPath()
- self.outdirCtrl.SetValue(self.directory)
- dlg.Destroy()
-
- def onChoiceWriter(self, event):
- self.writer = event.GetString()
- self.outfileCtrl.SetValue(self.default_outfile())
-
- def GetValues(self):
- return (self.outfileCtrl.GetValue(),
- self.outdirCtrl.GetValue(),
- self.writer)
-
- def default_outfile(self):
- outfile = self.outfileCtrl.GetValue()
- if outfile == '':
- outfile = os.path.splitext(os.path.basename(self.infile))[0] + publishers[self.writer][2]
- else:
- outfile = os.path.splitext(os.path.basename(outfile))[0] + publishers[self.writer][2]
- return outfile
-
-#---------------------------------------------------------------------------
-
-class toolsDlg(wxDialog):
-
- def __init__(self, parent):
- wxDialog.__init__(self, parent, -1, title = 'Configure Toolbox')
- self.tools = parent.tools
- self.parent = parent
- self.currentItem = None
- btn_size = wxSize(75, 23)
- self.il = wxImageList(16, 16)
- bmp = images.getToolBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- self.idx1 = self.il.Add(bmp)
- exitID = wxNewId()
- self.list = wxListCtrl(self, exitID,
- wxDLG_PNT(self, 26, 10),
- wxDLG_SZE(self, 400, 120),
- wxLC_REPORT|wxSUNKEN_BORDER|wxLC_SINGLE_SEL|wxLC_HRULES|wxLC_VRULES)
- self.list.InsertColumn(0, "Tool")
- self.list.InsertColumn(1, "Name")
- self.list.InsertColumn(2, "Command")
- self.list.InsertColumn(3, "Initial Directory")
- self.list.SetImageList(self.il, wxIMAGE_LIST_SMALL)
- EVT_LIST_ITEM_SELECTED(self, exitID, self.on_item_selected)
- self.update_list()
- self.ok = wxButton(self, wxID_OK, 'OK',
- pos = wxDLG_PNT(self, 195, 135),
- size = btn_size)
- exitID = wxNewId()
- bmp = images.getPlusBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- b = wxBitmapButton(self, exitID, bmp, wxDLG_PNT(self, 5, 10),
- wxSize(23, 23))
- b.SetToolTipString("Add tool")
- EVT_BUTTON(self, exitID, self.on_plus_btn)
- exitID = wxNewId()
- bmp = images.getPenBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- b = wxBitmapButton(self, exitID, bmp, wxDLG_PNT(self, 5, 26),
- wxSize(23, 23))
- b.SetToolTipString("Edit tool")
- EVT_BUTTON(self, exitID, self.on_edit_btn)
- exitID = wxNewId()
- bmp = images.getMinusBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- b = wxBitmapButton(self, exitID, bmp, wxDLG_PNT(self, 5, 42),
- wxSize(23, 23))
- b.SetToolTipString("Remove tool")
- EVT_BUTTON(self, exitID, self.on_minus_btn)
- self.ok.SetDefault()
- self.Fit()
-
- def add_tool(self, name, command, init_dir):
- if self.tools == {}:
- key = 1
- else:
- key = max(self.tools.keys())+1
- self.tools[key] = [0, name, command, init_dir]
- i = 1
- for tool in self.tools.values():
- tool[0] = i
- i = i+1
- self.update_list()
-
- def colourize_list(self):
- color = ('yellow', 'light blue')
- for i in range(self.list.GetItemCount()):
- item = self.list.GetItem(i)
- item.SetBackgroundColour(color[i%2])
- self.list.SetItem(item)
-
- def get_column_text(self, index, col):
- item = self.list.GetItem(index, col)
- return item.GetText()
-
- def get_tools(self):
- return self.tools
-
- def update_list(self):
- self.list.DeleteAllItems()
- items = self.tools.items()
- for x in range(len(items)):
- key, data = items[x]
- self.list.InsertImageStringItem(x, str(data[0]), self.idx1)
- self.list.SetStringItem(x, 1, data[1])
- self.list.SetStringItem(x, 2, data[2])
- self.list.SetStringItem(x, 3, data[3])
- self.list.SetItemData(x, key)
- for i in range(4):
- self.list.SetColumnWidth(i, wxLIST_AUTOSIZE)
- self.colourize_list()
-
- def on_edit_btn(self, event):
- go_ahead = 1
- if self.currentItem != None:
- item = self.currentItem
- else:
- go_ahead = 0
- customMsgBox(self, 'Select a tool first.', 'wakeup')
- if go_ahead:
- selected_tool = [int(self.list.GetItemText(self.currentItem)),
- self.get_column_text(self.currentItem, 1),
- self.get_column_text(self.currentItem, 2),
- self.get_column_text(self.currentItem, 3)]
- dlg = editToolDlg(self, selected_tool)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- new_values = dlg.get_values()
- else:
- go_ahead = 0
- if go_ahead:
- for key in self.tools.keys():
- if self.tools[key] == selected_tool:
- self.tools[key][1] = new_values[0]
- self.tools[key][2] = new_values[1]
- self.tools[key][3] = new_values[2]
- self.update_list()
-
- def on_item_selected(self, event):
- self.currentItem = event.m_itemIndex
-
- def on_minus_btn(self, event):
- go_ahead = 1
- if self.currentItem != None:
- item = self.currentItem
- else:
- go_ahead = 0
- customMsgBox(self, 'Select a tool first.', 'wakeup')
- if go_ahead:
- selected_tool = [int(self.list.GetItemText(self.currentItem)),
- self.get_column_text(self.currentItem, 1),
- self.get_column_text(self.currentItem, 2),
- self.get_column_text(self.currentItem, 3)]
- for key in self.tools.keys():
- if self.tools[key] == selected_tool:
- del self.tools[key]
- i = 1
- for tool in self.tools.values():
- tool[0] = i
- i = i+1
- self.update_list()
-
- def on_plus_btn(self, event):
- dlg = editToolDlg(self)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- tool = dlg.get_values()
- self.add_tool(tool[0],tool[1],tool[2])
- dlg.Destroy()
-
-#---------------------------------------------------------------------------
-
-class editToolDlg(wxDialog):
-
- def __init__(self, parent, tool=['','','','']):
- wxDialog.__init__(self, parent, -1, title = 'Tool')
- wxStaticText(self, -1, 'Name:', wxPoint(28, 13))
- self.name = wxTextCtrl(self, -1, pos = wxPoint(64, 10),
- size = wxSize(322, -1),
- validator = customValidator(TOOL_NAME))
- wxStaticText(self, -1, 'Command:', wxPoint(28, 45))
- self.command = wxTextCtrl(self, -1, pos = wxPoint(84, 42),
- size = wxSize(302, -1),
- validator = customValidator(NO_SEMICOLON))
- self.init_dir = DirBrowseButton(self, -1, wxPoint(20,70), wxSize(450,-1),
- labelText= 'Initial Directory:',
- buttonText= 'Browse')
- btn_size = wxSize(75, 23)
- self.ok = wxButton(self, wxID_OK, 'OK',
- pos = wxPoint(230-80,110),
- size = btn_size)
- EVT_BUTTON(self, wxID_OK, self.on_btn_ok)
- self.cancel = wxButton(self, wxID_CANCEL, 'Cancel',
- pos = wxPoint(230+5,110),
- size = btn_size)
- self.name.SetValue(tool[1])
- self.command.SetValue(tool[2])
- self.init_dir.SetValue(tool[3])
- self.ok.SetDefault()
- self.Fit()
-
- def get_values(self):
- return self.name.GetValue(), self.command.GetValue(), self.init_dir.GetValue()
-
- def on_btn_ok(self, event):
- go_ahead = 1
- for ctrl in (self.name, self.command, self.init_dir):
- if ctrl.GetValue() == '':
- go_ahead = 0
- break
- if go_ahead:
- self.EndModal(event.GetId())
- else:
- customMsgBox(self, 'All fields have to be filled.', 'wakeup')
-
-#---------------------------------------------------------------------------
-
-PROJECT_NAME = 1
-TOOL_NAME = 2
-NO_SEMICOLON = 3
-PROJECT_CHARS = string.letters + string.digits
-TOOL_CHARS = PROJECT_CHARS + '$[]|<>,.:-_\\/(){} '
-
-class customValidator(wxPyValidator):
- def __init__(self, flag=None, pyVar=None):
- wxPyValidator.__init__(self)
- self.flag = flag
- EVT_CHAR(self, self.OnChar)
-
- def Clone(self):
- return customValidator(self.flag)
-
- def Validate(self, win):
- tc = self.GetWindow()
- val = tc.GetValue()
- if self.flag == PROJECT_NAME:
- for x in val:
- if x not in PROJECT_CHARS:
- return false
-
- elif self.flag == TOOL_NAME:
- for x in val:
- if x not in TOOL_CHARS:
- return false
-
- elif self.flag == NO_SEMICOLON:
- for x in val:
- if x == ';':
- return false
-
- return true
-
- def OnChar(self, event):
- key = event.KeyCode()
- if key < WXK_SPACE or key == WXK_DELETE or key > 255:
- event.Skip()
- return
- if self.flag == PROJECT_NAME and chr(key) in PROJECT_CHARS:
- event.Skip()
- return
- if self.flag == TOOL_NAME and chr(key) in TOOL_CHARS:
- event.Skip()
- return
- if self.flag == NO_SEMICOLON and chr(key) != ';':
- event.Skip()
- return
- if not wxValidator_IsSilent():
- wxBell()
- return
-
diff --git a/sandbox/gschwant/docfactory/factory/docutilsadapter.py b/sandbox/gschwant/docfactory/factory/docutilsadapter.py
deleted file mode 100644
index 17dc26f7a..000000000
--- a/sandbox/gschwant/docfactory/factory/docutilsadapter.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-from docutils.languages import en, de, fr, it
-from docutils.parsers.rst.languages.en import directives
-from docutils.core import publish_file
-from docutils import __version__
-from re import findall
-import os, sys
-from wxPython.wx import wxLogMessage
-
-docutilsversion = __version__
-
-language_codes = ['en', 'de', 'fr', 'it']
-
-publishers = { 'HTML': (None, 'html', '.html'),
- 'Docutils-XML': (None, 'xml', '.xml'),
- 'LaTeX': (None, 'latex', '.tex'),
- 'PEP-HTML': ('pep', 'pep_html', '.html'),
- 'Pseudo-XML': (None, None, '.xml'),
- }
-
-try:
- from docutils.writers import htmlnav
- publishers['HTML with navigation-bars'] = (None, 'htmlnav', '.html')
-except:
- pass
-
-def get_rest_bibl_fields(language_code='en'):
- # suitable for autocompletion in wxStyledTextCtrl
- bibl_fields = ''
- if language_code not in language_codes:
- language_code = 'en'
- if language_code == 'en':
- list = en.bibliographic_fields.keys()
- if language_code == 'de':
- list = de.bibliographic_fields.keys()
- if language_code == 'fr':
- list = fr.bibliographic_fields.keys()
- if language_code == 'it':
- list = it.bibliographic_fields.keys()
- list.sort()
- for value in list:
- bibl_fields = '%s %s:' % (bibl_fields, value)
- return bibl_fields[1:]
-
-def get_rest_directives():
- # suitable for autocompletion in wxStyledTextCtrl
- drvs = ''
- list = directives.keys()
- list.sort()
- for value in list:
- drvs = '%s %s::' % (drvs, value)
- return drvs[1:]
-
-def publish_document(writer, infile, outfile, outdir):
- current_dir = os.path.abspath(os.curdir)
- sys.stderr = StdCatcher()
- os.chdir(outdir)
- if publishers[writer][0] != None:
- publish_file(reader_name=publishers[writer][0],
- writer_name=publishers[writer][1],
- source_path=infile,
- destination_path=os.path.join(outdir,outfile))
- else:
- if publishers[writer][1] != None:
- publish_file(writer_name=publishers[writer][1],
- source_path=infile,
- destination_path=os.path.join(outdir,outfile))
- else:
- publish_file(source_path=infile,
- destination_path=os.path.join(outdir,outfile))
- os.chdir(current_dir)
- sys.stderr = sys.__stderr__
- return 1
-
-class StdCatcher:
- # suitable for catching docutils stderr-output
- def __init__(self):
- self.text = ''
-
- def write(self,s):
- wxLogMessage(s)
-
-def get_errors(str):
- errors = []
- warnings = []
- lines = str.splitlines()
- for s in lines:
- if docutilsversion < '0.2.5':
- if s.startswith('WARNING'):
- for i in findall('line \d+', s):
- warnings.append(int(i.split(' ')[1])-1)
- if s.startswith('ERROR') or s.startswith('SEVERE'):
- for i in findall('line \d+', s):
- errors.append(int(i.split(' ')[1])-1)
- else:
- parts = s.split(': (')
- if len(parts) > 1:
- s2 = parts[1]
- if s2.startswith('WARNING'):
- for i in findall(':\d+:', s):
- warnings.append(int(i[1:-1])-1)
- if s2.startswith('ERROR') or s2.startswith('SEVERE'):
- for i in findall(':\d+:', s):
- errors.append(int(i[1:-1])-1)
- errors.sort()
- warnings.sort()
- return warnings, errors
diff --git a/sandbox/gschwant/docfactory/factory/images.py b/sandbox/gschwant/docfactory/factory/images.py
deleted file mode 100644
index af46e0241..000000000
--- a/sandbox/gschwant/docfactory/factory/images.py
+++ /dev/null
@@ -1,460 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-#----------------------------------------------------------------------
-# This file was generated by img2py.py
-#
-from wxPython.wx import wxBitmapFromXPMData, wxImageFromBitmap
-import cPickle, zlib
-from wxPython.wx import wxImageFromStream, wxBitmapFromImage
-import cStringIO
-
-
-def getLogoSmallData():
- return cPickle.loads(zlib.decompress(
-'x\xda\x8d\x90=\x0b\x830\x10\x86w\x7f\xc5\x81_%\x81#\x96"\x8eZ\xc1\xd5\xc1\
-\xc5U\x1c+\xd8\xff?\xf5\xde\x8b\x89\xba\xf5U\x02\xcfs\x17/\xf1\xb1}\xabd*\
-\xab\x9a\xf0>\xa9*\x93e*\x99Vzo\xcb\xfaQ\xca\x84\xd2A\xa3<\x83\x9d\xe4\xe0\
-\xd1\xf308\xa7\xdc\x82kW\x87\xba\x01\xf7\xae\x0f\x9c\x82\x9b\xb3\x9e{n\x02\
-\x93\x9f\x87\t\xca\x16\xfcr\xafP\xdf\xc3y\x8ez\x01\xee\\\x17\xf7\xf3-\xe4\
-\xaf4kv\x84\xc7\x91\x83\x94\x06,j/r\x97u\x14+\xe5\x8b\xdcgVI\xf4\xaf\xbco\
-\xc7\x0c\xc99H\xb46Y\x0e\x9d\xf1\xf0\xd6\xda6=\x0eO\x19\x9e\x0c\x92\xd3<tB\
-\x12\xc1\x11\x17\xe6\x94\x19:e\xaf\xb8(5\xb2\xb70&~\xd3GF\x99\xf8\x97(\x06Jo\
-\xc4?\x8a\x04u\xfa' ))
-
-def getLogoSmallBitmap():
- return wxBitmapFromXPMData(getLogoSmallData())
-
-def getLogoSmallImage():
- return wxImageFromBitmap(getLogoSmallBitmap())
-
-#----------------------------------------------------------------------
-def getLogoBigData():
- return cPickle.loads(zlib.decompress(
-'x\xda\x8d\x94Ko\xc20\x10\x84\xef\xfc\nKyPa\xb12m\x84\xb8D\nE\xca\x95\x03\
-\x17_\x11\xc7"\xa5\xff\xff\xd4\x9d];qL(\x8c\x90\xea\xe9~\x9d]?\xe8\xc7\xfdw\
-\xb7\xba\xac\xbf>\r\x7fv\x8d\xd9\xadW\xd7\xcb\x9a\xcc\xcd|\xdf\xaf\xb7\x1fq[\
-v\x85s\x07\xd7\xf7\xe2\x0b\xf8^$\xdek\xdd\xc5\xfaY}\xdf;\'\xbe\x84\xdf\xbb}\
-\xac\xb7\xf0\'w\x8a\xbe\x82?Lu\xa3\xf9\x07\xd7\xe8\xdf\xd7Z\x1f\xfb[\xad\xa3\
-\xa3\xf8\x0e\xbea:\xd4\x878_\xa8o\xe0\x8f\xee8\xe6S\x94\xaeL\xf8\x85\t\xd2#\
-\xf0Q4@Dg\x11YQ\x0e\x05j\x88\x14r\x12H\xf2\xf1\xd3Z\x920\xc4!j\x06\xf1 \x83\
-\xd2g\xa6\x90AH\x9aC\x1a\xc0\x0b\xb4\xe1\x15\x87\x10\xd9\x17\x90\xd1y^&Y\xf3\
-F\x92}#\xe9\r\x88\x8b\x0b\x83\x83\xe2\x95\x15\ne>\x82\x1cb\x8d\x87\x08J\x0fs\
-\x0e\xcd\xef\x84\x9eC\x9e\xe2\x05\x93\xbatp;>\x95\xb8\xf2\xbe\xebt\x84\x1126\
-U\xf2&\xb0\x9f\t*\xe2\x07\x1b\xf7\xc8\xe9\xba\xb2\xac\xea\xfa\x1f\xa8\x0bP\
-\xf5\x04\xa2\xc0\x101R\xd7\x1eS=B\xda\x0c3\x03\xaa\xfd\x02\xc4ck\x0e27\x9b\
-\xb6]\x80\xf89F\xc8\n\xb4\x90\xc4B\xbbmY\xa1\x1d\xe7,\xb4\x93Sb\n\xfb\xd2f\
-\x8f\x83\x07\x91\xc7\xbe\x800\x94\x1fAT\n\xe5\'\x9e]\x8b\xcc\x93_\xcb$\xbd`\
-\x9dgv\xc1E&}*\xc6$_\xf3\xf9+\xd0=JJ\xfa\x0f\xc3\xbc\x10C\xf4\x07\xe7\xd5-h'\
- ))
-
-def getLogoBigBitmap():
- return wxBitmapFromXPMData(getLogoBigData())
-
-def getLogoBigImage():
- return wxImageFromBitmap(getLogoBigBitmap())
-
-#----------------------------------------------------------------------
-def getProjectData():
- return cPickle.loads(zlib.decompress(
-'x\xda]\x90\xb1\n\x840\x0c\x86\xf7{\x8a@\xb5\x1e\x14B\x0b"\x8ez\x82k\x07\x17\
-Wq<\xa1\xf7\xfe\xd3\xa5\x899\xeb\xfdt\xf9\xbe\xfe\t\xb4\xcf\xe3\x13\x1eK\x13\
-:\xc8\'@h\x1e\xdb\xd2 \xec\xf0:\xb6\xfd\xcd\xb4\x12\x99\x99\xd2zfP\x9eg\xe6!\
-s\xe7;\x7f\xb2\xcd<\xf9I\xd9d\xee\xaf\xfbJ\xb8W\x8e\xb2o\xf4^\xf6\'\xe1I\xd9\
-en}\xab\xfd:\xf3\xe8Ge\x00\xa4\xc0/"Y\xe0]"\xac\x14\xae\xf3\x80\xc8\x95\x03\
-\xda\x17\x99\x12\x16Qy\xedK\xa02\x9e\x0b\xa8\x16\xd7\xbb$\xe5\x8aq\x92\x89\
-\xf6:\xe7\x06s\x97\xd4sh\xaaR\xc6\x98]\xc4\xda\xa2\xbeHB\xb3\xe4TJh\xb6\xb6T\
-\xbcKD\xcb\xef,%\xeb\xeb\x97\xfeB\x12\xbf\x98zjg' ))
-
-def getProjectBitmap():
- return wxBitmapFromXPMData(getProjectData())
-
-def getProjectImage():
- return wxImageFromBitmap(getProjectBitmap())
-
-#----------------------------------------------------------------------
-def getFile1Data():
- return cPickle.loads(zlib.decompress(
-'x\xda\xd3\xc8)0\xe4\nV74S\x00"\x13\x05Cu\xae\xc4`\xf5|\x85d\x05\xa7\x9c\xc4\
-\xe4l0O\x01\xc8Sv\x03\x030?\x02\xc4w6p6\x80\xf2\xf5@|\x0b\x03\x10\x84\xa8\
-\xd7\x83\x03\x05\x10\x80\n*@A\x84\x1e6A0\x13.\x98\x0f\x02`\x12C%Pm>\xbaJ\xa0\
-\xb2\x88A\xad2\x02\x01\xe0\x82\xf9\xc8\x00&\x88\x06\x80\x82z\x00lj[\xe4' ))
-
-def getFile1Bitmap():
- return wxBitmapFromXPMData(getFile1Data())
-
-def getFile1Image():
- return wxImageFromBitmap(getFile1Bitmap())
-
-#----------------------------------------------------------------------
-def getLinkData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4gz\xba8\x86T\xcc\
-\xb9:\xd1\x91\xaf\xc1\x80\x83\xe5\xe0\x8f\xff\xfa\xfd\xe2\x01J\t+\xe6\xdd\
-\xf1\x9e=\xcd\xaf\xdc\xd1\xd5\xc1k\xe5\xda\xb3[3_\xcb13\xb1\\\x10JXw\x9f!dW\
-\xdc\x9b\xc9\xcfo,\x08Qn\xb1|\xc0\xf9m%{\x83\xf5\x89k\xcb\xac\x94\xafX\xae\
-\xff\xfc\xfb\xdeT\xa5\x10\xd7\xa9{\xce1,\x99\xbf\x9c\x8b\xef\x9e\xe3)M\x9fd\
-\x91\x86Rq\xf6S\xef4\xc5]Z\xc3N\x01-e\xf0t\xf5sY\xe7\x94\xd0\x04\x00\t\x8e?\
-\x85' )
-
-def getLinkBitmap():
- return wxBitmapFromImage(getLinkImage())
-
-def getLinkImage():
- stream = cStringIO.StringIO(getLinkData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getImageData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\xf7z\xba8\x86T\xcc\
-9\x1a\xec\xc8\xd5`\xc0\xe3}\xb4\xfd%{\xcd\xe5_\xaa\x07w\xdf\xfb\x1bl\xe3\xb3\
-tv\xe8\x1c.\xb1S7<6M\xc8c\x9aP\x11xU\xfa\x93:Si\xcc\x13\xc6\xa93\x99?\xd51;,\
-\xbev\xf0\xee\xef\xbe\xba\xd7\xc6\x13X\xe3z5\x05-\xbc\x0fqu.\xd3\xa8\xe7z\
-\xe5\xfd4%>\x819r\xc3\xaa\x9b\xec\xf1\x0b\xe4\x8f){\xa8\xce{\xbfd\n\xcf\x0c\
-\x9e];\xcf20:8\x98\xfb\xeb]\x14\xe9\x9c\xe1\x1fi\xde\xc8\xb0\xd3\xea\xc1?\
-\x03/\xef\xba\xff\xbd\xdc\xcf/\xb9\\\xfb\xb4`}3\xd0a\x0c\x9e\xae~.\xeb\x9c\
-\x12\x9a\x00\x90]PH' )
-
-def getImageBitmap():
- return wxBitmapFromImage(getImageImage())
-
-def getImageImage():
- stream = cStringIO.StringIO(getImageData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getOpenData():
- return zlib.decompress(
-"x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4W{\xba8\x86T\xccY\
-\x1a\xec\xc9w@\x81\xa3e\x19\xff\xf3\xe7\x97\xbb\x05\\X\xa5<{\xa47;Lal\xd0{\
-\xf4V\xc5p\xf3\xda\xc5\xf7.32oX\x98b5\x9d%\xf0\xe2d\x81^!\xa3nk\xf7\xcbvI\
-\x87j_\x1d\x939\xe3\xa9\xfe\xf4o\xe5\xcdf\xadiBF[%\x18\xae\t\xcd\xe8t\xc9\
-\xda\xf0\xccG\xf5\x0f\xe3\xea\\\xe5\x0f\t\x13\x8d'\xb2\x0b\xf7\xcaUx\xc7>m] \
-|\xbb\xbc\xe0\xa7\xe4\xfb\xfb\x07\xd9\xd9\xa5\x9c\xf8\x1f\xecJ\xf2\x05:\x83\
-\xc1\xd3\xd5\xcfe\x9dSB\x13\x00\x15\x16EI" )
-
-def getOpenBitmap():
- return wxBitmapFromImage(getOpenImage())
-
-def getOpenImage():
- stream = cStringIO.StringIO(getOpenData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getNewData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\x07{\xba8\x86T\xcc\
-INI\xf8\xf1\x7f~#\xd3\x81\xa6\x04#\xa1\x80\xae\xbbrb"\xaa\x162\x87O\x9c\xe0\
-\xd8\xca\x10<\xaf\xb3akF[\xf2\xaeI\x19\xcc\n\xeb\x12\x0e\x18\xb4\xb0\x06k\
-\xea\xdd\xbe\xc8\xabt\x91u\xc7\x81\x15\x8c\xcd\x07\x19\xa6\x944\xc8\x1dW\x91\
-r\x88[\xb6\xe4\x067\xc3\xf1W|:\xa9.g\xc4\x80\xc63x\xba\xfa\xb9\xacsJh\x02\
-\x00\x18\x0c1\x97' )
-
-def getNewBitmap():
- return wxBitmapFromImage(getNewImage())
-
-def getNewImage():
- stream = cStringIO.StringIO(getNewData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getPasteData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4/\xf4tq\x0c\xa9\x98\
-\xb3tr\xa0P\x93\x01\x8f\x8b9\xcf\xf5\x027\xff,\x1b\xcd\xd2\x0fr\x1f\x95\xd3&\
-]\x9a\x12vw=\xd3\xcd\xed\xd1\x0bX:\x1e\xf0\xaf\xfd\x99k\x15\xf3\xdd\xf8\xda\
-\x1d\x86\x13\xcb%\x04\xe72q6\x18\xfcVN3]}\xf1\xfaq\xc9f\x9d\x89\xa7y\xa6\xe4\
-\x1e\xdf\xbc\'`\xdb\xde(w\x87M\xac\xd7\xbf\x96\x9dT\xb7^\xc5\xb0wJ\xe6\x01\
-\xfd\rz\x0c\x1f\xf4\x05S\xf5\xafo1\x11\x16\x0e2\xe8\x95\xcex\xa4,\xf1\xde\
-\xb7[\xf1\x80O\xe9.\xe7}Y\x13\x1c=\xf9\x83\x7fk\x1f\xdf"\xe3\xc3p\x84\xe1\
-\xe5\x89\x152\x0c\x96\xb7\x0f\xdd\xd1\xacg\xae`r\xba\xee;u\xc9r\xa0c\x19<]\
-\xfd\\\xd69%4\x01\x00\xaaxW\x00' )
-
-def getPasteBitmap():
- return wxBitmapFromImage(getPasteImage())
-
-def getPasteImage():
- stream = cStringIO.StringIO(getPasteData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getCopyData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe47y\xba8\x86T\xccY:9\
-\x90\xaf\xc1\x80\xc3\xb9\xfb\xe3\xbdc\x93\xaf\xf3\x1f\x94\xdc \xdd\xf97U{}\
-\x8e\x84\xc3\xa3v\x9e\x06\x83\x17?\xa5\x18\x8c\x1cgD\xdeN\tn\xbd}%\xe4\xe7E\
-\xbb]\xf3\xea>z\x88\xdcT\xb9\xf8H\xd9I\xa2d\x91h\xd3T\x8f]\x82\xd5,\xef3\x9a\
-\x13\x8eD\n\x1d\xf1YT\xddwY\xed\xc42\xc1\xe4O\x13\x03\xdafHW\xb0\x94\x9e\x10\
-d=\xf8zJV\xf0\xfc@\x81\x8c\xab+\xc3}y\xaaN\xab\x94/\\\xcd\xfd\xea\xa0\xc7\
-\xac\xb8\x1bb \xa72x\xba\xfa\xb9\xacsJh\x02\x00\x80\xa5K\xbe' )
-
-def getCopyBitmap():
- return wxBitmapFromImage(getCopyImage())
-
-def getCopyImage():
- stream = cStringIO.StringIO(getCopyData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getCutData():
- return zlib.decompress(
-"x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\xe7{\xba8\x86T\xcc\
-Y;\xc9\x9b\xaf\xc1\x80\xc3E\xf6\xf1\xde\xd9\xf3d\xc2%\xbc\x12/<xs\xeb\xc0\
-\x87\x1f\x0e.O2^\xf4\xd81^(\xcf\xbc\xa0\xf6\xe3\xa8\xc3F\xc9\xba\xac\x07\xcf\
-O=\xf3\x89^\xb1*\x98ymT\xae\xe4MY\x86\xcb3z\xdf\xb3\x98\t\xce\xe8^x\xf5\xa8\
-\x96\xbb\xdb\xbc4\xc5\x0b\x0cmo\xae\xda-Y\xcb\xaa?\xf1\xe3\x16\xd1\x89\xb9\
-\xd1\t\x07'^2\xddw\x957h\xa2\xd9D\x1b\x9b\x8e\x87@\xab\x19<]\xfd\\\xd69%4\
-\x01\x00\xb0TE\xc8" )
-
-def getCutBitmap():
- return wxBitmapFromImage(getCutImage())
-
-def getCutImage():
- stream = cStringIO.StringIO(getCutData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getRedoData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\x17{\xba8\x86T\xcc\
-9;\xe94o\x83\x82\x80\x0b{\xb2\xf257\xc5\x04E\xef\xa6\xde\xc8S\x15\x02\xc2\
-\xfb\xdaN0\xde\xcfm\xbf+~c\x81\x87\x10\xb3\x8e\xf2\xe1\xff\x02k\n\x1f\xdea\\\
-{~I\xa3\xc9{66\x17\x1b\xc6\xd32\x07\xc4*c\x16\x8b]\xab8W\x9c\xf8\x9d\xcf\x83\
-y\xe97\xa5\xf7bW\xda\x84\x1bO\\\xcb\xc9z\xfa0\xeb\xa5\xb5\xeb\x9f\xd7zEWl\
-\x7f\xcc\xfdi_\xb8\xef\x01\xd3n\xa6]}\xfb3ZA\xd63x\xba\xfa\xb9\xacsJh\x02\
-\x00\'\xb0Ez' )
-
-def getRedoBitmap():
- return wxBitmapFromImage(getRedoImage())
-
-def getRedoImage():
- stream = cStringIO.StringIO(getRedoData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getUndoData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\x97x\xba8\x86T\xcc\
-9;\xc9\x9a\xef\x80\x02\x8f\xf3\xe3U\xe2\x0f\x93dwx<T\x90\xb3\xc8\xb4\xda\xd2\
-!&\xf0\xd7\xe0\xc2\xf6\xa3]\xbaG\xb9BB\x976\xaf<\xfe\xa7\xbf\xe1g\x1e\xe3\
-\x87\xe93M\x92\xdeNb\xb1\x15(\xacr;"\x1au\xe5\xe4\x84g\xb3\x16\xa6\x9dqVreo\
-\x10\xbf\xfa\xb5\x90\xfd\xaa\xd0\xe7\xdd\xf1\xec[\x9c\x18\xf4\x97x:}\xbe\xc1\
-c$\xf27A\xff\xa9\xf5c\xfb\xc2\x9a\x03le\xdf\xb7\xf7945\x1b\x00\xedg\xf0t\xf5\
-sY\xe7\x94\xd0\x04\x00\x0bZD\xf2' )
-
-def getUndoBitmap():
- return wxBitmapFromImage(getUndoImage())
-
-def getUndoImage():
- stream = cStringIO.StringIO(getUndoData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getSaveData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\xd7z\xba8\x86T\xcc\
-9:\xd9\x91\xab\xc1\x80\x87E\xfd\x919\xd7\xd7T\xb9_\xebd~m\x12\xfb5\xa1B`aR`\
-\x0f\xfbw\xb1\x17~\xb3\x96i\xa7\xa5\xd5\\\xe0QP\xd2\xdb<\xf3-\x03\xc3U\x1f/\
-\xed\xad[\xa2\x83c\x98\xb6\x9a<\x12b\x98a3\x97\x7f\xb3\xf4\x82Y\xfb\x19\xab\
-\xfe\xf2\xcf\xf8\xedd:_.cI\xdd?\xee\x84\x92\x07Wy\x19\x82\xa2\xe4}\xd7\xe9^\
-\xb9\xd46\xff\xcd\x7f\xdd\x13\x13\xdd\xfc\x17\xf8%~ZV\xc5|g\x91V\xcf\xdb\x93\
-nU@\x870x\xba\xfa\xb9\xacsJh\x02\x00\x98\x94G\xa0' )
-
-def getSaveBitmap():
- return wxBitmapFromImage(getSaveImage())
-
-def getSaveImage():
- stream = cStringIO.StringIO(getSaveData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getAboutData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\x97{\xba8\x86T\xcc\
-\xd9\x1a\xe4\xc8u\xc0\x80\xc38\xf9\xff\xff\xa22\x81\x83\xdb\xd2J\xa7\xb0r\
-\xad53\xecR\xf0\xb4>\x10\xcb\xca8e\xfe\xea\xa8n\x06\x86\xd56\x8c\x13\xa5\'OW\
-\xb2>\xd8\x1f\xbe\xfe./\xd3\xce\xa8\x08\xb5\xccE\xca\xba\x0bbrY\x8bL\xf7\xf7\
-\xeb\xba\xda$K&\xd5\xbc\x980[7\xa3\xc8;\xa1\xfd?\xcb\xb3F\xad)\xabs\xcc\xf8\
-\x05\x83^\xec`}\xa9\xf0Ma\xbf=\xe7\x9e\x89Fr\xe9"N\x8a{#4\x80f20x\xba\xfa\
-\xb9\xacsJh\x02\x00\x89\x06=\xeb' )
-
-def getAboutBitmap():
- return wxBitmapFromImage(getAboutImage())
-
-def getAboutImage():
- stream = cStringIO.StringIO(getAboutData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getBoldData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\xcf\xf6tq\x0c\xa9\
-\x98\xb35\xf8 /\xb3"O\xf1\xaau\xd3{\xf3\xe6\x7fH\xe3\xdc\xf7!\x85{\xc6\x81\
-\xbf"/\x1fDe\xbc\x8f\xf2\x9e\x16 \xa4\xa3\xce\xa8\xe8\x19s\xe0\xed\xa9\xa7\
-\xcd\r\x1d>/\xe78\xaf\xdd\x1a\xfe\xa0!\x88\x8b\xb1\xc0\xe7\xa8\x04g\xc3\xaa[\
-G\x9f^\xe5qY\xd2\xa9\xff8\xfe\xbcC\xe8s]\x1b\xd9R\xdd\'sv\xe6J3\x1a\x1c\xbbq\
-\xfd\x1c\x8b[\xd5\xfb\xfe\xad\xf3-\x14<\x8d\x95\x19\xda\x04\xceqn\xf9\xf1\
-\x7f\xfb\x86z\x8d\xdf\xc5^\x99{[\xcb\x0fg\x9b\x18O\x0b\xda%\xf6\xae\xf9FFF\
-\xe7\xfd\xbae\xc6\x15\x0c\xf3\x16\xf9\x17]h\xf1\xe2\x07:\x93\xc1\xd3\xd5\xcf\
-e\x9dSB\x13\x005-YC' )
-
-def getBoldBitmap():
- return wxBitmapFromImage(getBoldImage())
-
-def getBoldImage():
- stream = cStringIO.StringIO(getBoldData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getItalicData():
- return zlib.decompress(
-"x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\x07x\xba8\x86T\xcc\
-9:\xd9\x93\x8b\xc1\x80\x83y\xee\xa5\xff\xf57\xe7q\xc5\xc5\xac\xf0\xb0\xcd\
-\x96\x10v\r\r\x95\xdajuX\x95\xd1\xa1\xc1\xb2i\xaei\x8a\xd8Y\xa1\x1bwm'MX0\
-\xa9@\xa3\x80Si\xe1O\xeb\n\xb1\r?\xd6:39\xf1\xdf\x91Xm\xff\xed\xfe\x11\xe6\
-\x96\xe9\x92J\x1e[\x05\xc5\x81f3x\xba\xfa\xb9\xacsJh\x02\x00\xf9\xac.\xf0" )
-
-def getItalicBitmap():
- return wxBitmapFromImage(getItalicImage())
-
-def getItalicImage():
- stream = cStringIO.StringIO(getItalicData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getPreData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\xbbx\xba8\x86T\xcc\
-I\xfe\xf3\xff\xff\xffz6.\x06a\xd5Y+\x93\x18\xb8\xcd\x1c\xdd\xdc\xdcD\xec\xec\
-\xe2\x93J\x0f\x02e>f)e0h&\\i8\x98\xc0\xe0\xe6\xe4\xe4\xef\xf2"\xe9\xc5K\xe6\
-\xc3\x0cA\x9f\xaf\x1dhgd\x905\x14\x96\xf9\xde`s\x08h\x1e\x83\xa7\xab\x9f\xcb\
-:\xa7\x84&\x00={+\xe6' )
-
-def getPreBitmap():
- return wxBitmapFromImage(getPreImage())
-
-def getPreImage():
- stream = cStringIO.StringIO(getPreData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getPlusData():
- return cPickle.loads(zlib.decompress(
-'x\xda\xd3\xc8)0\xe4\nV74S\x00"\x13\x05Cu\xae\xc4`\xf5\x08\x85d\x05e\x03 \
-\xb00\x00\xf3\xf5@|70\x00\xf3\x15`\xf2P~>\x88oa\x02\x82PyT@HPOO\x0fS0""\x82\
-\\A\xa0yz@A=\x88\xb9P\xc1\x08\x04P\xc8\xc7"\x98\x8fU\x10\xdd\xa2|\x08@\xb3\
-\x1d\x9b \xd0<b\x1cO8\x94\xf4\x003\xc5Uu' ))
-
-def getPlusBitmap():
- return wxBitmapFromXPMData(getPlusData())
-
-def getPlusImage():
- return wxImageFromBitmap(getPlusBitmap())
-
-#----------------------------------------------------------------------
-def getMinusData():
- return cPickle.loads(zlib.decompress(
-'x\xda\xd3\xc8)0\xe4\nV74S\x00"\x13\x05Cu\xae\xc4`u=\x85d\x05e70\x00\xf3\x15\
-@|\x03 \x80\xf2#@|\'\x17\x90\x08\x98\x9f\x0f\xe2[\x98\x80 T=*\xa0\xb7\xa0\
-\x1e\x02 \x04#\x10\x00\xab`>~A\x85|\x04\xa0\xaf\x8f\xf4\x00ixNy' ))
-
-def getMinusBitmap():
- return wxBitmapFromXPMData(getMinusData())
-
-def getMinusImage():
- return wxImageFromBitmap(getMinusBitmap())
-
-#----------------------------------------------------------------------
-def getToolData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\x1f\xf0tq\x0c\xa9\
-\x98\xb3t\xf2F\xdeC\x06\x02\xae\xf5Nb\x0b\x16,1\xd0\x15be\xad=\xc3\xe1\xe1s@\
-\x81GH?!\xc5\x8dc\xf6\x06\x06W\xb7\x1f"\x9d\xc9\xea]\xb2\xec\xfbJ&\x95^\xfa\
-\xbd\xef\xf3\\\xe3\x86#=\x1e\x0f~\x0604\x9c\xfe\xcav@\xf1\xa7}\xc1\xa4\x83\'\
-\xd6\xd9K\xae\xad3,\xd8\xa0\xa3\xda\x13\xa61\xad\x89A\xc1\xbb\xf3Wh\xb9n#\
-\x0f\xab\xa7T\xec\xc6\x9f{\xd8\x13K\x8en\x937\xcaxp\x98\xefCsbs\xa6EH&\xfb\
-\x0f\xaf\xf6\x93\x87\xe6o\xbe\xfaa\xe2\xa3\xeamVo\xb6\x7f/\x0c\xe2h|\xfc\xd2\
-\x86\x9b9\xe3\xf8\x8b\xfb)\xeeSW\xd9,=\xb3\xe2\xe0\x95\xaau\xe6\xbbS.\xd7M\
-\xd5\xdd\xb3e\x91\xceS\xeb\xe3_X\x9f\x9d\xbd\xa4sx\x8d8\x0b\xd0/\x0c\x9e\xae\
-~.\xeb\x9c\x12\x9a\x00\xe5\xfej@' )
-
-def getToolBitmap():
- return wxBitmapFromImage(getToolImage())
-
-def getToolImage():
- stream = cStringIO.StringIO(getToolData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getPublishData():
- return zlib.decompress(
-'x\xda\xeb\x0c\xf0s\xe7\xe5\x92\xe2b``\xe0\xf5\xf4p\t\x02\xd2\x02 \xcc\xc1\
-\x06$\xe5?\xffO\x04R,\xc5N\x9e!\x1c@P\xc3\x91\xd2\x01\xe4\xef\xf6tq\x0c\xa9\
-\x98\xd3;\xf9.\xef!\x03\x9e\x16{e\xb5%M\xac\x12\xca\xb5>\xdb\x1bX\x1d\x0c\
-\xc4\xa3e\xf8\xfd\x9c\xbb\xef\x98\xa8Gz\x89>\xaf\xbbs\x84\xe1\xa2C\xb1\xb0\
-\x81C\xd0\x9d\xb4\xb4\xdd*\xc7+?\xd6\xdd\x0b\x97^\xfe\xf9*\xbf\xf7\x8c\x9bj\
-\x9e\xd3\x9b%\x03\xaf/k\x8e\xac\xf5LKa0\x9a 1\xbd\xf6w\x83\xce\x849W\xf7\xb3\
-fY1\xcco\xbd\xc9\xb2$\x9e\x8dq\xda\x8c*Y\x87\xb2T\xcf\xf5\xc7\xd7\xaeS\\\xcd\
-gXd\x10cg\xfayG\tC\xc2\x84\xee\xf6wg.\xf28\xb1\xaf\x93\xd1\xee\xb3\xad_8u\
-\xe7\x89\xebV-\x8b\xf5\xbb\x18\x9cwN|\xa7\xd0\xf6\xa8\xcb\xf8\xff\xf4\x95\
-\x1f\xc3\xb6\xe5\xdd[\xb5\xdc\xf5B\xb3~M\xa0`\x81\xc0\xbe}b@o0x\xba\xfa\xb9\
-\xacsJh\x02\x00:\xc2a\x8f' )
-
-def getPublishBitmap():
- return wxBitmapFromImage(getPublishImage())
-
-def getPublishImage():
- stream = cStringIO.StringIO(getPublishData())
- return wxImageFromStream(stream)
-
-#----------------------------------------------------------------------
-def getPenData():
- return zlib.decompress(
-'x\xda\x01\n\x02\xf5\xfd\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x10\
-\x00\x00\x00\x10\x08\x06\x00\x00\x00\x1f\xf3\xffa\x00\x00\x00\x04sBIT\x08\
-\x08\x08\x08|\x08d\x88\x00\x00\x01\xc1IDATx\x9c}\x931o\xd3P\x10\xc7\x7f\xa9:\
-\xa4[2 1\xfa*u\x80\x89\x8e\xee\xe6\x872P\x89\x85HH\xb0\xb9f"]\x10S)c\xc87@H(\
-n\'\xf2%P\xed\x01\x89\x0c\x95b&:D\xeay\x8b7g\xf4\xf6\x18\x9e\x95\xb8\xb4\xc9\
-\x93Nzw\xa7\xdf\xff\xee\xdd{\xaf\x05\xd6\xb2u\xb5\xf0\x01S{\t0\xc56\xb2[\x05\
-Z\x0cGCL`hO\x7fSV\x15\xe6\xd3g\x8e\x1a"\xbb\xdb\xe0\xf1\xc5\x18\x13\xb8\xda\
-\x85\x7fDU\x96\xa8\'D\xb9aJ\x0b\xb0\xecl\x82\xdf\xbe\x81(|G7\xeb\xd3\xcd\xb2\
-U&\x16\xa1@V\xfe\x03\x02-\xce\xcf\xe0\xc7\x04\xc0g\xd6i\xd3\xe9\xf4y|\xf3\
-\x97\xecO\xc6D\x15\x88\x9b\x80\xb5k\xc3\x9e\x9fa\xad\xc5Z\xeb\xdb\xab\xc4\
-\xaf\xf7\xd8\xdb\x0b\xb1\xe29\x1bb\xac\t\x9c\xed\xfe_y8r\x95\x93\x14L0\x05@s\
-\x98\xfc\x12D@\x10\xe2<!\xeaEw\x8f\xf0\xf1\xc3+\xfa\xafg$\xe9\x98\xaf\xdf*\
-\xa0\x01\x9f\x00\x07\x80\x02)\x98\xd0\rV\xe7\xeanA\xbc}\xba\x8f\x0c\x87\xcf\
-\x0e\xd1\xbc\xc3\xde\xdeSf\xd9\x00\x91\xcc\xc1=\xd0\x9f \xb9@\x08r \xe8\\\
-\x89/\xc7\xae\x03\xcd\x95\xe3\x17\x03\x96\xcb%EQ\xe0D#4p\xb0\xff\x1dH\x93{0\
-\xd4\xef\xc0\x04\xc2b\xb1\xa0\xaa\xaa\xd5D4\x8fy"\x0e\x9e\xe4@\x18\xdd\x83\
-\x01v\xc4\xdb\xe7\xf8\xe5\x80\xd3\xf7\xa7$iBY\xce\x98e\x03\xda\xd7\x19\x92n\
-\x87\xdd\xe8\xc1FaD|\xe9\xeev\x1c@\x01$)\xe0\t\x12\x98\x8d\xf0J\xa0\x19\x10O\
-\x10\x11L\xcf\xacb\x9b\xe0z\x06k~8\xfar\'\xa9sEs%I\xaf\x1e\x84\xeb\x0e\xd6\
-\xbf\xd1\x04\xcf\x1d\xa8\x8a\xe6\xb7\x1b\xa1\xe6\xfa\x07\xecS\xd8\xcf\xc1gS\
-\x99\x00\x00\x00\x00IEND\xaeB`\x82V\xf3\xec\xf7' )
-
-def getPenBitmap():
- return wxBitmapFromImage(getPenImage())
-
-def getPenImage():
- stream = cStringIO.StringIO(getPenData())
- return wxImageFromStream(stream)
-
diff --git a/sandbox/gschwant/docfactory/factory/main.py b/sandbox/gschwant/docfactory/factory/main.py
deleted file mode 100755
index 619106067..000000000
--- a/sandbox/gschwant/docfactory/factory/main.py
+++ /dev/null
@@ -1,1707 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-import browser, images, re, sys, os, time, ConfigParser
-from wxPython.wx import *
-from wxPython.lib.dialogs import wxMultipleChoiceDialog, \
- wxScrolledMessageDialog
-from wxPython.lib.imagebrowser import ImageDialog
-from wxPython.help import *
-from dialogs import *
-from controls import CustomStyledTextCtrl
-from controls import CustomTreeCtrl
-from controls import CustomStatusBar
-from docutilsadapter import publish_document, get_errors, \
- get_rest_bibl_fields, publishers, publish_document
-from docutils.utils import relative_path
-from urllib import quote
-from wxPython.lib.buttons import *
-
-
-#-------------------------------------------------------------------------
-# global variables
-#-------------------------------------------------------------------------
-
-NAME = 'DocFactory'
-
-try:
- factory_path = os.path.dirname(__file__)
-except:
- factory_path = os.path.abspath(sys.path[0])
-
-if not os.path.isdir(factory_path):
- factory_path = os.path.abspath(sys.path[0])
-
-try:
- f = open(os.path.join(factory_path, 'conf.pth'))
- DATA = f.readline().splitlines()[0]
- f.close()
-except:
- DATA = os.path.join(factory_path, 'docfactory.dat')
-
-# need some IDs
-[wxID_WXNEWPROJ, wxID_WXNEWREST, wxID_WXOPENFILE,
- wxID_WXREMFILE, wxID_WXSAVEFILE, wxID_WXEXITAPP, wxID_WXPUBL, wxID_WXPUBLALL,
- wxID_WXPROJSETTINGS, wxID_WXINSERTPATH, wxID_WXINSERTIMAGE,
- wxID_WXINSERTFIGURE, wxID_WXCLOSEFILE, wxID_WXVIEWEOLS, wxID_WXEOLSTOCR,
- wxID_WXEOLSTOLF, wxID_WXEOLSTOCRLF, wxID_WXEOLSTO, wxID_WXVIEWEDGE,
- wxID_WXCUTSELECTION, wxID_WXCOPYSELECTION, wxID_WXPASTESELECTION,
- wxID_WXUNDO, wxID_WXREDO, wxID_WXGOTO, wxID_WXSELECTALL, wxID_WXVIEWWS,
- wxID_WXDELETEPROJ, wxID_WXFONTSIZE, wxID_WXSMALLFONT, wxID_WXNORMALFONT,
- wxID_WXBIGFONT, wxID_WXINSERT, wxID_WXBTNBOLD, wxID_WXBTNITALIC,
- wxID_WXBTNLITERAL, wxID_WXBTNLINK, wxID_WXBTNIMAGE, wxID_WXBTNTOOL,
- wxID_WXINSERTHYPERLINK, wxID_WXBTNPASTE, wxID_WXBTNCOPY, wxID_WXRUNTOOL,
- wxID_WXBTNCUT, wxID_WXBTNREDO, wxID_WXBTNUNDO, wxID_WXBTNSAVE,
- wxID_WXBTNOPEN, wxID_WXBTNNEW, wxID_WXBTNPUBLISH, wxID_WXBTNABOUT,
- wxID_WXFINDREPLACE, wxID_WXBACKUPFILES] = map(lambda init_menubar: wxNewId(), range(53))
-
-# Accelerator-Table for key commands
-ACCEL = [(wxACCEL_NORMAL,WXK_F7,wxID_WXPUBL),
- (wxACCEL_NORMAL,WXK_F8,wxID_WXRUNTOOL),
- (wxACCEL_CTRL,ord('F'),wxID_WXFINDREPLACE),
- (wxACCEL_CTRL,ord('G'),wxID_WXGOTO),
- (wxACCEL_CTRL,ord('N'),wxID_WXNEWREST),
- (wxACCEL_CTRL,ord('O'),wxID_WXOPENFILE),
- (wxACCEL_CTRL,ord('S'),wxID_WXSAVEFILE),
- (wxACCEL_ALT,ord('X'),wxID_WXEXITAPP)]
-
-#-------------------------------------------------------------------------
-
-def get_file_extension(filename):
- return os.path.splitext(filename)[1]
-
-#-------------------------------------------------------------------------
-
-class DocProject:
- def __init__(self):
- self.name = ''
- self.directory = 'Nobody expects the spamish inquisition.'
- self.files = []
-
- def add(self, file):
- if file not in self.files:
- self.files.append(file)
- else:
- raise 'File is already part of this project.'
-
- def remove(self, file):
- if file in self.files:
- self.files.remove(file)
-
-#-------------------------------------------------------------------------
-
-class CustomLog(wxPyLog):
- def __init__(self, textCtrl, logTime=0):
- wxPyLog.__init__(self)
- self.tc = textCtrl
- self.logTime = logTime
-
- def DoLogString(self, message, timeStamp):
- if self.logTime:
- message = time.strftime('%X', time.localtime(timeStamp)) + \
- ': ' + message
- self.tc.AppendText(message + '\n')
-
-#-------------------------------------------------------------------------
-
-class DocFactoryFrame(wxFrame):
- def __init__(self, projects=[], initial_file=None):
- wxFrame.__init__(
- self, NULL, -1, NAME, wxDefaultPosition, (800, 600),
- style=wxDEFAULT_FRAME_STYLE)
- self.Centre()
- self.projects = projects
- self.formats = {}
- self.files = []
- self.project = None
- self.editor = None
- self.activeitem = None
- self.imagedir = None
- self.language_code = 'en'
-
- # Application-Icon
- bmp = images.getLogoSmallBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- logoicon = wxEmptyIcon()
- logoicon.CopyFromBitmap(bmp)
- self.SetIcon(logoicon)
-
- self.init_preferences()
- self.init_menubar()
- self.init_toolbar()
-
- self.SetAcceleratorTable(wxAcceleratorTable(ACCEL))
-
- # splitter windows
- splitter = wxSplitterWindow(self, -1, style=wxNO_3D|wxSP_3D)
- splitter2 = wxSplitterWindow(splitter, -1, style=wxNO_3D|wxSP_3D)
-
- # Set up a log
- self.log = wxTextCtrl(splitter2, -1,
- style = wxTE_MULTILINE|wxTE_READONLY|wxHSCROLL)
-
- # Set the wxWindows log target to be this textctrl
- wxLog_SetActiveTarget(CustomLog(self.log))
-
- # tree
- tID = wxNewId()
- self.tree = CustomTreeCtrl(splitter, tID, style=wxTR_HAS_BUTTONS |
- wxTR_HAS_VARIABLE_ROW_HEIGHT)
- EVT_TREE_ITEM_ACTIVATED(self.tree, tID, self.on_tree_item_activated)
-
- # make an image list for tree
- self.im0 = self.im1 = self.im2 = -1
- self.il = wxImageList(16, 16)
- self.im0 = self.il.Add(images.getLogoSmallBitmap())
- self.im1 = self.il.Add(images.getProjectBitmap())
- self.im2 = self.il.Add(images.getFile1Bitmap())
- self.tree.SetImageList(self.il)
-
- self.init_tree()
-
- # Create a Notebook
- tID = wxNewId()
- self.nb = wxNotebook(splitter2, tID, style=wxCLIP_CHILDREN)
- EVT_NOTEBOOK_PAGE_CHANGED(self.nb, tID, self.on_notebook_page_changed)
-
- # editor-page
- self.InitEditorPage()
-
- # create statusbar
- self.sb = CustomStatusBar(self)
- self.SetStatusBar(self.sb)
-
- # initial file
- if initial_file != None:
- self.load_initial_file(initial_file)
-
- self.Show(1)
-
- # add the windows to the splitter and split it.
- splitter2.SplitHorizontally(self.nb, self.log)
- splitter.SplitVertically(self.tree, splitter2)
-
- splitter.SetSashPosition(180, 1)
- splitter.SetMinimumPaneSize(20)
- splitter2.SetSashPosition(450, 1)
- splitter2.SetMinimumPaneSize(20)
-
- # Some global state variables.
- self.projectdirty = 0
-
- EVT_CLOSE(self, self.on_close_window)
-
- def init_menubar(self):
- self.mainmenu = wxMenuBar()
- mainwindow = self
-
- # File
- menu=wxMenu()
- menu.Append(wxID_WXNEWREST, 'New\tCtrl+N',
- 'Create a new txt-file and add to project')
- EVT_MENU(self, wxID_WXNEWREST, self.on_file_new)
- menu.Append(wxID_WXOPENFILE, 'Open...\tCtrl+O',
- 'Open a file')
- EVT_MENU(self, wxID_WXOPENFILE, self.on_file_open)
- menu.Append(wxID_WXCLOSEFILE, 'Close',
- 'Close file')
- EVT_MENU(self, wxID_WXCLOSEFILE, self.on_file_close)
- menu.Enable(wxID_WXCLOSEFILE, 0)
- menu.Append(wxID_WXSAVEFILE, 'Save\tCtrl+S', 'Save file now')
- EVT_MENU(self, wxID_WXSAVEFILE, self.on_file_save)
- menu.Enable(wxID_WXSAVEFILE, 0)
- menu.Append(wxID_WXREMFILE, 'Remove From Project',
- 'Remove file from project')
- EVT_MENU(self, wxID_WXREMFILE, self.on_file_remove)
- menu.Enable(wxID_WXREMFILE, 0)
- menu.AppendSeparator()
- menu.Append(wxID_WXPUBL, 'Publish...\tF7',
- 'Publish file')
- EVT_MENU(self, wxID_WXPUBL, self.on_publish)
- menu.Enable(wxID_WXPUBL, 0)
- menu.AppendSeparator()
- menu.Append(wxID_WXEXITAPP, 'Exit\tAlt+X', 'Exit program')
- EVT_MENU(self, wxID_WXEXITAPP, self.on_app_exit)
- self.mainmenu.Append (menu, '&File')
-
- # Edit
- menu=wxMenu()
- menu.Append(wxID_WXUNDO, 'Undo\tCtrl-Z', 'Undo')
- EVT_MENU(self, wxID_WXUNDO, self.on_undo)
- menu.Enable(wxID_WXUNDO, 0)
- menu.Append(wxID_WXREDO, 'Redo\tCtrl-Y', 'Redo')
- EVT_MENU(self, wxID_WXREDO, self.on_redo)
- menu.Enable(wxID_WXREDO, 0)
- menu.AppendSeparator()
- menu.Append(wxID_WXCUTSELECTION, 'Cut\tCtrl-X', 'Cut')
- EVT_MENU(self, wxID_WXCUTSELECTION, self.on_cut)
- menu.Enable(wxID_WXCUTSELECTION, 0)
- menu.Append(wxID_WXCOPYSELECTION, 'Copy\tCtrl-C', 'Copy')
- EVT_MENU(self, wxID_WXCOPYSELECTION, self.on_copy)
- menu.Enable(wxID_WXCOPYSELECTION, 0)
- menu.Append(wxID_WXPASTESELECTION, 'Paste\tCtrl-V', 'Paste')
- EVT_MENU(self, wxID_WXPASTESELECTION, self.on_paste)
- menu.Enable(wxID_WXPASTESELECTION, 0)
- menu.Append(wxID_WXSELECTALL, 'Select all\tCtrl-A', 'Select the entire file')
- EVT_MENU(self, wxID_WXSELECTALL, self.on_select_all)
- menu.Enable(wxID_WXSELECTALL, 0)
- menu.AppendSeparator()
- submenu=wxMenu()
- submenu.Append(wxID_WXINSERTFIGURE, 'Figure',
- 'Insert a figure')
- EVT_MENU(self, wxID_WXINSERTFIGURE, self.on_insert_figure)
- submenu.Append(wxID_WXINSERTHYPERLINK, 'Hyperlink', 'Insert a hyperlink')
- EVT_MENU(self, wxID_WXINSERTHYPERLINK, self.on_btn_hyperlink)
- submenu.Append(wxID_WXINSERTIMAGE, 'Image', 'Insert an image')
- EVT_MENU(self, wxID_WXINSERTIMAGE, self.on_insert_image)
- submenu.Append(wxID_WXINSERTPATH, 'Path', 'Insert a path')
- EVT_MENU(self, wxID_WXINSERTPATH, self.on_insert_path)
- menu.AppendMenu(wxID_WXINSERT, 'Insert', submenu)
- menu.Enable(wxID_WXINSERT, 0)
- menu.AppendSeparator()
- submenu=wxMenu()
- submenu.Append(wxID_WXEOLSTOCR,'CR',
- 'Change all end of line characters to CR (\\r)')
- EVT_MENU(self, wxID_WXEOLSTOCR, self.on_eols_to_cr)
- submenu.Append(wxID_WXEOLSTOLF,'LF',
- 'Change all end of line characters to LF (\\n)')
- EVT_MENU(self, wxID_WXEOLSTOLF, self.on_eols_to_lf)
- submenu.Append(wxID_WXEOLSTOCRLF,'CRLF',
- 'Change all end of line characters to LF (\\r\\n)')
- EVT_MENU(self, wxID_WXEOLSTOCRLF, self.on_eols_to_crlf)
- menu.AppendMenu(wxID_WXEOLSTO, 'Change all EOLs to', submenu)
- menu.Enable(wxID_WXEOLSTO, 0)
- menu.AppendSeparator()
- menu.Append(wxID_WXFINDREPLACE, 'Find && Replace...\tCtrl-F', 'Find and replace')
- EVT_MENU(self, wxID_WXFINDREPLACE, self.on_findreplace_show)
- EVT_COMMAND_FIND(self, -1, self.on_find)
- EVT_COMMAND_FIND_NEXT(self, -1, self.on_find)
- EVT_COMMAND_FIND_REPLACE(self, -1, self.on_find)
- EVT_COMMAND_FIND_REPLACE_ALL(self, -1, self.on_find)
- EVT_COMMAND_FIND_CLOSE(self, -1, self.on_find_close)
- menu.Append(wxID_WXGOTO, 'Goto line...\tCtrl-G', 'Goto a specific line in the file')
- EVT_MENU(self, wxID_WXGOTO, self.on_goto)
- menu.Enable(wxID_WXGOTO, 0)
- self.mainmenu.Append (menu, '&Edit')
-
- # Project
- menu=wxMenu()
- menu.Append(wxID_WXNEWPROJ, 'New', 'Create a new project')
- EVT_MENU(self, wxID_WXNEWPROJ, self.on_project_new)
- menu.Append(wxID_WXDELETEPROJ, 'Delete...',
- 'Delete one or more projects')
- EVT_MENU(self, wxID_WXDELETEPROJ, self.on_project_delete)
- menu.Append(wxID_WXPUBLALL, 'Publish...',
- 'Publish all txt-files of active project')
- EVT_MENU(self, wxID_WXPUBLALL, self.on_publish_all)
- menu.Enable(wxID_WXPUBLALL, 0)
- menu.AppendSeparator()
- menu.Append(wxID_WXPROJSETTINGS, 'Project Settings...',
- 'Edit project settings')
- EVT_MENU(self, wxID_WXPROJSETTINGS, self.on_project_settings)
- if len(self.projects) == 0:
- menu.Enable(wxID_WXDELETEPROJ, 0)
- menu.Enable(wxID_WXPROJSETTINGS, 0)
- self.mainmenu.Append (menu, 'Pr&oject')
-
- self.init_tools()
-
- # Preferences
- menu=wxMenu()
- menu.Append(wxID_WXVIEWEOLS, 'View EOL markers',
- 'Show or hide end-of-line markers', wxITEM_CHECK)
- EVT_MENU(self, wxID_WXVIEWEOLS, self.on_view_eols)
- menu.Check(wxID_WXVIEWEOLS, self.preferences['eol_markers'])
- menu.Append(wxID_WXVIEWEDGE, 'View right edge indicator',
- 'Toggle display of the right edge indicator (75 characters)',
- wxITEM_CHECK)
- EVT_MENU(self, wxID_WXVIEWEDGE, self.on_view_edge)
- menu.Check(wxID_WXVIEWEDGE, self.preferences['right_edge_indicator'])
- menu.Append(wxID_WXVIEWWS, 'View whitespace',
- 'Show or hide whitespace', wxITEM_CHECK)
- EVT_MENU(self, wxID_WXVIEWWS, self.on_view_ws)
- menu.Check(wxID_WXVIEWWS, self.preferences['whitespace'])
- menu.AppendSeparator()
- submenu=wxMenu()
- submenu.Append(wxID_WXSMALLFONT,'Small',
- 'Reduce font', wxITEM_RADIO)
- EVT_MENU(self, wxID_WXSMALLFONT, self.on_font_small)
- submenu.Append(wxID_WXNORMALFONT,'Normal',
- 'Restore font', wxITEM_RADIO)
- EVT_MENU(self, wxID_WXNORMALFONT, self.on_font_normal)
- submenu.Append(wxID_WXBIGFONT,'Big',
- 'Magnify font', wxITEM_RADIO)
- EVT_MENU(self, wxID_WXBIGFONT, self.on_font_big)
- if self.preferences['fontsize'] == 'small':
- submenu.Check(wxID_WXSMALLFONT, 1)
- elif self.preferences['fontsize'] == 'big':
- submenu.Check(wxID_WXBIGFONT, 1)
- else:
- submenu.Check(wxID_WXNORMALFONT, 1)
- menu.AppendMenu(wxID_WXFONTSIZE, 'Fontsize', submenu)
- menu.AppendSeparator()
- menu.Append(wxID_WXBACKUPFILES, 'Backup files',
- 'Backup files as [filename].bak', wxITEM_CHECK)
- EVT_MENU(self, wxID_WXBACKUPFILES, self.on_backup_files)
- menu.Check(wxID_WXBACKUPFILES, self.preferences['backup_files'])
- self.mainmenu.Append(menu, '&Preferences')
-
- # Toolbox
- menu=wxMenu()
- exitID=wxNewId()
- menu.Append(exitID, 'Configure', 'Configure toolbox')
- EVT_MENU(self, exitID, self.on_configure_tools)
- menu.Append(wxID_WXRUNTOOL, 'Open...\tF8', 'Open toolbox')
- EVT_MENU(self, wxID_WXRUNTOOL, self.on_run_tool)
- self.mainmenu.Append (menu, '&Toolbox')
-
- # Help
- menu=wxMenu()
- exitID=wxNewId()
- menu.Append(exitID, 'About', 'About')
- EVT_MENU(self, exitID, self.on_help_about)
- self.mainmenu.Append (menu, '&Help')
-
- self.SetMenuBar(self.mainmenu)
-
- def init_preferences(self):
- self.preferences = {}
- if os.path.exists(DATA):
- try:
- cfg = ConfigParser.ConfigParser()
- cfg.read(DATA)
- if cfg.has_section('preferences'):
- for pref in cfg.options('preferences'):
- self.preferences[pref] = cfg.get('preferences', pref)
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
- if not self.preferences.has_key('eol_markers'):
- self.preferences['eol_markers'] = 0
- if not self.preferences.has_key('right_edge_indicator'):
- self.preferences['right_edge_indicator'] = 1
- if not self.preferences.has_key('whitespace'):
- self.preferences['whitespace'] = 0
- if not self.preferences.has_key('fontsize'):
- self.preferences['fontsize'] = 'normal'
- if not self.preferences.has_key('backup_files'):
- self.preferences['backup_files'] = 0
- self.preferences['eol_markers'] = int(self.preferences['eol_markers'])
- self.preferences['right_edge_indicator'] = int(self.preferences['right_edge_indicator'])
- self.preferences['whitespace'] = int(self.preferences['whitespace'])
- self.preferences['backup_files'] = int(self.preferences['backup_files'])
-
- def init_toolbar(self):
- self.toolbar = tb = self.CreateToolBar(wxTB_HORIZONTAL|wxTB_FLAT|wxNO_BORDER)
- bmp = images.getNewBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNNEW, 'New', bmp, shortHelp='New',
- longHelp='Create a new file')
- EVT_TOOL(tb, wxID_WXBTNNEW, self.on_file_new)
- bmp = images.getOpenBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNOPEN, 'Open', bmp, shortHelp='Open',
- longHelp='Open an existing file')
- EVT_TOOL(tb, wxID_WXBTNOPEN, self.on_file_open)
- bmp = images.getSaveBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNSAVE, 'Save', bmp, shortHelp='Save',
- longHelp='Save the active file')
- EVT_TOOL(tb, wxID_WXBTNSAVE, self.on_file_save)
- tb.EnableTool(wxID_WXBTNSAVE, 0)
- tb.AddSeparator()
- bmp = images.getCutBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNCUT, 'Cut', bmp, shortHelp='Cut',
- longHelp='Cut the selection and put it on the Clipboard')
- EVT_TOOL(tb, wxID_WXBTNCUT, self.on_cut)
- tb.EnableTool(wxID_WXBTNCUT, 0)
- bmp = images.getCopyBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNCOPY, 'Copy', bmp, shortHelp='Copy',
- longHelp='Copy the selection and put it on the Clipboard')
- EVT_TOOL(tb, wxID_WXBTNCOPY, self.on_copy)
- tb.EnableTool(wxID_WXBTNCOPY, 0)
- bmp = images.getPasteBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNPASTE, 'Paste', bmp, shortHelp='Paste',
- longHelp='Insert Clipboard contents')
- EVT_TOOL(tb, wxID_WXBTNPASTE, self.on_paste)
- tb.EnableTool(wxID_WXBTNPASTE, 0)
- tb.AddSeparator()
- bmp = images.getUndoBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNUNDO, 'Undo', bmp, shortHelp='Undo',
- longHelp='Undo the last action')
- EVT_TOOL(tb, wxID_WXBTNUNDO, self.on_undo)
- tb.EnableTool(wxID_WXBTNUNDO, 0)
- bmp = images.getRedoBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNREDO, 'Redo', bmp, shortHelp='Redo',
- longHelp='Redo the previously undone action')
- EVT_TOOL(tb, wxID_WXBTNREDO, self.on_redo)
- tb.EnableTool(wxID_WXBTNREDO, 0)
- tb.AddSeparator()
- bmp = images.getLinkBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNLINK, 'Hyperlink', bmp,
- shortHelp='Insert hyperlink',
- longHelp='Insert hyperlink')
- EVT_TOOL(tb, wxID_WXBTNLINK, self.on_btn_hyperlink)
- tb.EnableTool(wxID_WXBTNLINK, 0)
- bmp = images.getImageBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNIMAGE, 'Image', bmp,
- shortHelp='Insert image',
- longHelp='Insert image')
- EVT_TOOL(tb, wxID_WXBTNIMAGE, self.on_btn_image)
- tb.EnableTool(wxID_WXBTNIMAGE, 0)
- tb.AddSeparator()
- bmp = images.getPublishBitmap()
- mask = wxMaskColour(bmp, wxRED)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNPUBLISH, 'Publish', bmp, shortHelp='Publish file',
- longHelp='Publish file')
- EVT_TOOL(tb, wxID_WXBTNPUBLISH, self.on_publish)
- tb.EnableTool(wxID_WXBTNPUBLISH, 0)
- tb.AddSeparator()
- bmp = images.getToolBitmap()
- mask = wxMaskColour(bmp, wxBLUE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNTOOL, 'Toolbox', bmp, shortHelp='Open toolbox',
- longHelp='Open toolbox')
- EVT_TOOL(tb, wxID_WXBTNTOOL, self.on_run_tool)
- tb.AddSeparator()
- bmp = images.getBoldBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNBOLD, 'Bold', bmp, shortHelp='Bold', longHelp='Bold')
- EVT_TOOL(tb, wxID_WXBTNBOLD, self.on_format_word)
- tb.EnableTool(wxID_WXBTNBOLD, 0)
- bmp = images.getItalicBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNITALIC, 'Italic', bmp, shortHelp='Italic', longHelp='Italic')
- EVT_TOOL(tb, wxID_WXBTNITALIC, self.on_format_word)
- tb.EnableTool(wxID_WXBTNITALIC, 0)
- bmp = images.getPreBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNLITERAL, 'literal', bmp, shortHelp='Literal', longHelp='Literal')
- EVT_TOOL(tb, wxID_WXBTNLITERAL, self.on_format_word)
- tb.EnableTool(wxID_WXBTNLITERAL, 0)
- if wxPlatform != '__WXMAC__':
- tb.AddSeparator()
- self.formats = {'Title' : '=', 'Subtitle' : '-',
- 'Heading 1' : '=', 'Heading 2' : '-',
- 'Heading 3' : '~', 'Heading 4' : '`'}
- formats = self.formats.keys()
- formats.sort()
- exitID=wxNewId()
- self.combobox_format = wxComboBox(tb, exitID, '',
- choices = formats,
- style=wxCB_DROPDOWN|wxCB_READONLY)
- tb.AddControl(self.combobox_format)
- EVT_COMBOBOX(tb, exitID, self.on_format_paragraph)
- tb.AddSeparator()
- bmp = images.getAboutBitmap()
- mask = wxMaskColour(bmp, wxWHITE)
- bmp.SetMask(mask)
- tb.AddLabelTool(wxID_WXBTNABOUT, 'About', bmp, shortHelp='About',
- longHelp='Display program information')
- EVT_TOOL(tb, wxID_WXBTNABOUT, self.on_help_about)
- tb.Realize()
-
- def init_tools(self):
- self.tools = {}
- if os.path.exists(DATA):
- try:
- cfg = ConfigParser.ConfigParser()
- cfg.read(DATA)
- if cfg.has_section('tools'):
- for i in range(len(cfg.options('tools'))):
- self.tools[i+1] = [i+1] \
- + cfg.get('tools', str(i+1)).split(';')
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
-
- def init_tree(self):
- self.tree.DeleteAllItems()
- self.root = self.tree.AddRoot('Workspace', self.im0)
- self.tree.SetPyData(self.root, None)
- for proj in self.projects:
- child = self.tree.AppendItem(self.root, proj.name, self.im1)
- self.tree.SetPyData(child, None)
- for file in proj.files:
- last = self.tree.AppendItem(child, file, self.im2)
- self.tree.SetPyData(last, None)
- self.tree.SortChildren(self.root)
- for file in self.files:
- last = self.tree.AppendItem(self.root, file, self.im2)
- self.tree.SetPyData(last, None)
- self.project = None
- self.activateMenuItemsProjectOpen(0)
- self.activateMenuItemsFileSelected(0)
- self.activeitem = self.root
- self.tree.SelectItem(self.activeitem)
- self.tree.Expand(self.activeitem)
- if self.editor != None:
- self.nb.SetPageText(0, 'Editor')
- self.editor.Clear()
- self.editor.Enable(0)
- self.activateMenuItemsFileSelected(0)
- if self.nb.GetPageCount() > 1:
- self.nb.DeletePage(1)
-
- def InitEditorPage(self):
- # init editor
- edID = wxNewId()
- self.editor = CustomStyledTextCtrl(self.nb, edID, self.log)
- self.editor.SetViewEOL(self.preferences['eol_markers'])
- self.editor.SetEdgeMode(self.preferences['right_edge_indicator'])
- self.editor.SetViewWhiteSpace(self.preferences['whitespace'])
- if self.preferences['fontsize'] == 'small':
- self.editor.SetZoom(-2)
- elif self.preferences['fontsize'] == 'big':
- self.editor.SetZoom(2)
- else:
- self.editor.SetZoom(0)
- self.editor.Clear()
- self.editor.Enable(0)
- self.nb.AddPage(self.editor, 'Editor')
- self.nb.SetSelection(0)
-
- # --------------------------------------------------------------------
- # handlers
- # --------------------------------------------------------------------
-
- def activateMenuItemsProjectOpen(self, value):
- menu = self.mainmenu.GetMenu(self.mainmenu.FindMenu('Project'))
- if len(self.projects) > 0 and value:
- menu.Enable(wxID_WXDELETEPROJ, value)
- menu.Enable(wxID_WXPROJSETTINGS, value)
- menu.Enable(wxID_WXPUBLALL, value)
-
- def activateMenuItemsFileSelected(self, value):
- menu = self.mainmenu.GetMenu(self.mainmenu.FindMenu('File'))
- if self.project != None:
- menu.Enable(wxID_WXREMFILE, value)
- else:
- menu.Enable(wxID_WXREMFILE, 0)
- menu.Enable(wxID_WXCLOSEFILE, value)
- menu.Enable(wxID_WXSAVEFILE, value)
- menu.Enable(wxID_WXPUBL, value)
- menu = self.mainmenu.GetMenu(self.mainmenu.FindMenu('Edit'))
- menu.Enable(wxID_WXUNDO, value)
- menu.Enable(wxID_WXREDO, value)
- menu.Enable(wxID_WXCUTSELECTION, value)
- menu.Enable(wxID_WXCOPYSELECTION, value)
- menu.Enable(wxID_WXPASTESELECTION, value)
- menu.Enable(wxID_WXSELECTALL, value)
- menu.Enable(wxID_WXINSERT, value)
- menu.Enable(wxID_WXEOLSTO, value)
- menu.Enable(wxID_WXFINDREPLACE, value)
- menu.Enable(wxID_WXGOTO, value)
- self.toolbar.EnableTool(wxID_WXBTNSAVE, value)
- self.toolbar.EnableTool(wxID_WXBTNLINK, value)
- self.toolbar.EnableTool(wxID_WXBTNIMAGE, value)
- self.toolbar.EnableTool(wxID_WXBTNBOLD, value)
- self.toolbar.EnableTool(wxID_WXBTNITALIC, value)
- self.toolbar.EnableTool(wxID_WXBTNLITERAL, value)
- self.toolbar.EnableTool(wxID_WXBTNPASTE, value)
- self.toolbar.EnableTool(wxID_WXBTNCOPY, value)
- self.toolbar.EnableTool(wxID_WXBTNCUT, value)
- self.toolbar.EnableTool(wxID_WXBTNREDO, value)
- self.toolbar.EnableTool(wxID_WXBTNUNDO, value)
- self.toolbar.EnableTool(wxID_WXBTNPUBLISH, value)
-
- def CheckEditorChanges(self):
- go_ahead = 1
- if self.editor != None:
- if self.editor.IsModified:
- dlg=wxMessageDialog(self, 'Save changes?', NAME,
- wxYES_NO | wxCANCEL | wxICON_QUESTION)
- result = dlg.ShowModal()
- if result == wxID_YES:
- file = self.tree.GetItemText(self.activeitem)
- go_ahead = self.editor.SaveFile(file, self.preferences['backup_files'])
- if result == wxID_CANCEL:
- go_ahead = 0
- dlg.Destroy()
- return go_ahead
-
- def delete_project(self, project):
- if project in self.projects:
- self.projects.remove(project)
- try:
- self.save_projects()
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
- self.init_tree()
-
- def htmlfile(self, file, dir):
- htmlfile = os.path.join(dir,
- os.path.splitext(os.path.basename(file))[0] \
- + '.html')
- return htmlfile
-
- def insert_hyperlink(self):
- item = self.activeitem
- itemimage = self.tree.GetItemImage(item)
- file = self.tree.GetItemText(item)
- if self.project != None:
- dir = self.project.directory
- else:
- dir = os.path.dirname(file)
- go_ahead = 1
- dlg = hyperlinkDlg(self, directory=dir, project=self.project)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- target = dlg.GetPath()
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- selection = self.editor.GetSelectedText()
- curpos = self.editor.GetCurrentPos()
- if selection != '':
- self.editor.BeginUndoAction()
- selection = '`%s`' % selection
- self.editor.ReplaceSelection(selection + '_')
- endpos = self.editor.GetTextLength()
- self.editor.GotoPos(endpos)
- text = '\n\n.. _%s: %s' % (selection, target)
- self.editor.ReplaceSelection(text)
- self.editor.GotoPos(curpos + 3)
- self.editor.EndUndoAction()
- else:
- text = '\n\n.. _``: %s\n' % target
- self.editor.ReplaceSelection(text)
- self.editor.GotoPos(curpos + 7)
-
- def insert_image(self, directive):
- item = self.activeitem
- itemimage = self.tree.GetItemImage(item)
- file = self.tree.GetItemText(item)
- if self.imagedir == None:
- if self.project != None:
- dir = self.project.directory
- else:
- dir = os.path.dirname(file)
- else:
- dir = self.imagedir
- dlg = ImageDialog(self, dir)
- dlg.Centre()
- go_ahead = 1
- if dlg.ShowModal() == wxID_OK:
- target = dlg.GetFile()
- self.imagedir = os.path.dirname(target)
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- if self.project != None:
- dir = self.project.directory
- else:
- dir = os.path.dirname(file)
- dlg = wxDirDialog(self, 'Calculate path relative'
- ' to which outputdirectory?', dir)
- if dlg.ShowModal() == wxID_OK:
- dir = dlg.GetPath()
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- selection = self.editor.GetSelectedText()
- if selection != '' and directive == 'image':
- self.editor.BeginUndoAction()
- curpos = self.editor.GetCurrentPos()
- selection = '|%s|' % selection
- self.editor.ReplaceSelection(selection)
- endpos = self.editor.GetTextLength()
- self.editor.GotoPos(endpos)
- text = '\n\n.. %s %s:: %s' % (selection, directive,
- quote(relative_path(self.htmlfile(file,dir),
- target)))
- self.editor.ReplaceSelection(text)
- self.editor.GotoPos(curpos + 2)
- self.editor.EndUndoAction()
- else:
- text = '\n\n.. %s:: %s\n\n' % (directive,
- quote(relative_path(self.htmlfile(file,dir),
- target)))
- self.editor.ReplaceSelection(text)
-
- def load_initial_file(self, file):
- if os.path.exists(file):
- try:
- self.files.append(file)
- dir = ''
- parent = self.root
- self.open_file_in_editor(file)
- last = self.tree.AppendItem(parent, file, self.im2)
- self.tree.SetPyData(last, None)
- self.tree.SetItemBold(self.activeitem, 0)
- self.tree.SetItemTextColour(self.activeitem, wxBLACK)
- self.activeitem = last
- self.tree.SetItemBold(self.activeitem, 1)
- self.tree.SetItemTextColour(self.activeitem, wxBLUE)
- self.tree.EnsureVisible(self.activeitem)
- self.tree.SelectItem(self.activeitem)
- parent = self.tree.GetItemParent(self.activeitem)
- self.tree.SetItemBold(parent, 1)
- self.tree.SetItemTextColour(parent, wxBLUE)
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
- else:
- customMsgBox(self, 'Can not find %s.' % file, 'error')
-
- def open_file_in_editor(self, file):
- if self.nb.GetPageCount() > 1:
- self.nb.DeletePage(1)
- self.nb.SetSelection(0)
- self.editor.LoadFile(file)
- self.set_editor_language_code(file)
- self.nb.SetPageText(0, 'Editor: %s' %
- os.path.basename(file))
- self.editor.Enable(1)
- self.activateMenuItemsFileSelected(1)
- self.editor.IsModified = 0
-
- def project_save(self):
- try:
- self.save_projects()
- self.projectdirty = 0
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
-
- def publishFile(self, infile, outfile, outdir, writer):
- wxBeginBusyCursor()
- try:
- self.log.Clear()
- t = time.localtime(time.time())
- st = time.strftime('%d-%b-%Y, %H:%M:%S', t)
- wxLogMessage('%s: Publishing %s' % (st, writer))
- wxLogMessage('SOURCE: %s' % infile)
- outfile_fullpath = os.path.join(outdir, outfile)
- wxLogMessage('DESTINATION: %s' % outfile_fullpath)
- if outfile_fullpath == infile:
- customMsgBox(self, 'Destination and source are identical.'
- '\nNo processing.', 'wakeup')
- warning_lines = error_lines = []
- else:
- try:
- publish_document(writer, infile, outfile, outdir)
- finally:
- warning_lines, error_lines = get_errors(self.log.GetValue())
- linecount = self.editor.GetLineCount()
- self.editor.MarkerDeleteAll(0)
- self.editor.MarkerDeleteAll(1)
- if warning_lines != []:
- for line in warning_lines:
- if line < linecount:
- self.editor.MarkerAdd(line, 0)
- self.editor.GotoLine(warning_lines[-1])
- if error_lines != []:
- for line in error_lines:
- if line < linecount:
- self.editor.MarkerAdd(line, 1)
- self.editor.GotoLine(error_lines[-1])
- self.editor.IsModified = 0
- if os.path.exists(outfile_fullpath):
- if self.nb.GetPageCount() > 1:
- self.nb.DeletePage(1)
- if get_file_extension(outfile) in ['.html', '.htm']:
- # init html-viewer page
- if wxPlatform == '__WXMSW__':
- htmlprv = browser.IEHtmlPanel(self.nb, self, self.log,
- 'file://%s' % quote(outfile_fullpath))
- else:
- htmlprv = browser.HtmlPanel(self.nb, self, self.log,
- outfile_fullpath)
- self.nb.AddPage(htmlprv, 'HTML-Viewer: %s'
- % outfile)
- if warning_lines == error_lines == []:
- self.nb.SetSelection(1)
- t = time.localtime(time.time())
- st = time.strftime('%d-%b-%Y, %H:%M:%S: ', t)
- wxLogMessage('%sFinished.' % st)
- finally:
- wxEndBusyCursor()
-
- def save_preferences(self):
- cfg = ConfigParser.ConfigParser()
- try:
- cfg.read(DATA)
- if not cfg.has_section('preferences'):
- cfg.add_section('preferences')
- for pref in self.preferences.keys():
- cfg.set('preferences', pref,
- self.preferences[pref])
- f = open(DATA, 'wt')
- cfg.write(f)
- f.close()
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
-
- def save_projects(self):
- cfg = ConfigParser.ConfigParser()
- cfg.read(DATA)
- for section in cfg.sections():
- if section[:19] == 'docfactory_project:':
- cfg.remove_section(section)
- for project in self.projects:
- section = 'docfactory_project: %s' % project.name
- cfg.add_section(section)
- cfg.set(section, 'outputdirectory', project.directory)
- files = ''
- for file in project.files:
- files = '%s;%s' % (files, file)
- if len(files) > 1:
- files = files[1:]
- cfg.set(section, 'files', files)
- f = open(DATA, 'wt')
- cfg.write(f)
- f.close()
-
- def set_editor_language_code(self, file=None):
- language_code = 'en'
- if self.project != None:
- directory = self.project.directory
- else:
- directory = os.path.split(os.path.abspath(file))[0]
- docutils_conf = os.path.join(directory, 'docutils.conf')
- if os.path.exists(docutils_conf):
- try:
- cfg = ConfigParser.ConfigParser()
- cfg.read(docutils_conf)
- if cfg.has_option('options', 'language_code'):
- language_code = cfg.get('options', 'language_code')
- except:
- print '%s:\n%s\n%s' % sys.exc_info()
- self.editor.bibliographic_fields = get_rest_bibl_fields(language_code)
-
- # --------------------------------------------------------------------
- # event handlers
- # --------------------------------------------------------------------
-
- def on_app_exit(self, event):
- self.Close()
-
- def on_backup_files(self, event):
- self.preferences['backup_files'] = not self.preferences['backup_files']
-
- def on_btn_image(self, event):
- self.insert_image('image')
-
- def on_close_window(self, event):
- go_ahead = 1
- if self.projectdirty:
- dlg=wxMessageDialog(self, 'Save project?', NAME,
- wxYES_NO | wxCANCEL | wxICON_QUESTION)
- result = dlg.ShowModal()
- if result == wxID_YES:
- self.project_save()
- if result == wxID_CANCEL:
- go_ahead = 0
- dlg.Destroy()
-
- if go_ahead and self.CheckEditorChanges():
- self.Destroy()
-
- def on_configure_tools(self, event):
- dlg = toolsDlg(self)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- self.tools = dlg.get_tools()
- dlg.Destroy()
- cfg = ConfigParser.ConfigParser()
- try:
- cfg.read(DATA)
- if cfg.has_section('tools'):
- cfg.remove_section('tools')
- cfg.add_section('tools')
- for tool in self.tools.values():
- cfg.set('tools', str(tool[0]),
- '%s;%s;%s' % (tool[1],tool[2],tool[3]))
- f = open(DATA, 'wt')
- cfg.write(f)
- f.close()
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
-
- def on_copy(self, event):
- self.editor.Copy()
-
- def on_cut(self, event):
- self.editor.Cut()
-
- def on_eols_to_cr(self, event):
- wxBeginBusyCursor()
- self.editor.ConvertEOLs(1)
- wxEndBusyCursor()
-
- def on_eols_to_lf(self, event):
- wxBeginBusyCursor()
- self.editor.ConvertEOLs(2)
- wxEndBusyCursor()
-
- def on_eols_to_crlf(self, event):
- wxBeginBusyCursor()
- self.editor.ConvertEOLs(0)
- wxEndBusyCursor()
-
- def on_file_close(self, event):
- if self.CheckEditorChanges():
- if self.nb.GetPageCount() > 1:
- self.nb.DeletePage(1)
- self.nb.SetPageText(0, 'Editor')
- self.editor.Clear()
- self.editor.Enable(0)
- self.activateMenuItemsFileSelected(0)
- item = self.activeitem
- parent = self.tree.GetItemParent(item)
- self.tree.SetItemBold(item, 0)
- self.tree.SetItemTextColour(item, wxBLACK)
- if parent == self.root:
- self.files.remove(self.tree.GetItemText(item))
- self.tree.Delete(item)
- self.activeitem = parent
- self.tree.SelectItem(self.activeitem)
-
- def on_file_open(self, event):
-
- go_ahead = 1
-
- if self.CheckEditorChanges():
-
- if self.project != None:
- dir = self.project.directory
- parent = self.tree.GetItemParent(self.activeitem)
- if parent == self.root:
- parent = self.activeitem
- else:
- dir = ''
- parent = self.root
-
- wildcard = 'Text (*.txt)|*.txt|' \
- 'All files (*.*)|*.*'
-
- dlg = wxFileDialog (self, 'Open file',
- dir, '', wildcard,
- wxOPEN|wxFILE_MUST_EXIST)
- if dlg.ShowModal() == wxID_OK:
- file = dlg.GetPath()
- if parent == self.root:
- if file not in self.files:
- self.files.append(file)
- else:
- customMsgBox(self, '%s already in workspace.' % file,
- 'wakeup')
- go_ahead = 0
- else:
- if file not in self.project.files:
- self.project.add(file)
- self.project_save()
- else:
- customMsgBox(self, '%s already part of project "%s".'
- % (file, self.project.name),
- 'wakeup')
- go_ahead = 0
- else:
- go_ahead = 0
- dlg.Destroy()
-
- if go_ahead:
- self.open_file_in_editor(file)
- last = self.tree.AppendItem(parent, file, self.im2)
- self.tree.SetPyData(last, None)
- self.tree.SetItemBold(self.activeitem, 0)
- self.tree.SetItemTextColour(self.activeitem, wxBLACK)
- self.activeitem = last
- self.tree.SetItemBold(self.activeitem, 1)
- self.tree.SetItemTextColour(self.activeitem, wxBLUE)
- self.tree.EnsureVisible(self.activeitem)
- self.tree.SelectItem(self.activeitem)
- parent = self.tree.GetItemParent(self.activeitem)
- self.tree.SetItemBold(parent, 1)
- self.tree.SetItemTextColour(parent, wxBLUE)
-
- def on_file_new(self, event):
- go_ahead = 1
-
- if self.project != None:
- dir = self.project.directory
- else:
- dir = ''
-
- dlg = wxFileDialog (self, 'Create new file',
- dir, '', '*.txt',
- wxSAVE|wxOVERWRITE_PROMPT)
- if dlg.ShowModal() == wxID_OK:
- file = dlg.GetPath()
- else:
- go_ahead = 0
- dlg.Destroy()
-
- if go_ahead:
- dlg = wxTextEntryDialog(
- self, 'Enter a title for this document:', 'Title', '',
- wxOK | wxCANCEL)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- title = dlg.GetValue()
- else:
- go_ahead = 0
- dlg.Destroy()
-
- if go_ahead:
- try:
- f = open(file, 'w')
- f.write(len(title)*'='+'\n')
- f.write(title+'\n')
- f.write(len(title)*'='+'\n')
- f.close()
- if self.project != None:
- self.project.add(file)
- self.project_save()
- parent = self.tree.GetItemParent(self.activeitem)
- if parent == self.root:
- parent = self.activeitem
- else:
- self.files.append(file)
- parent = self.root
- self.open_file_in_editor(file)
- last = self.tree.AppendItem(parent, file, self.im2)
- self.tree.SetPyData(last, None)
- self.tree.SetItemBold(self.activeitem, 0)
- self.tree.SetItemTextColour(self.activeitem, wxBLACK)
- self.activeitem = last
- self.tree.SetItemBold(self.activeitem, 1)
- self.tree.SetItemTextColour(self.activeitem, wxBLUE)
- self.tree.EnsureVisible(self.activeitem)
- self.tree.SelectItem(self.activeitem)
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(),
- 'error')
- dlg.Destroy()
-
- def on_file_remove(self, event):
- item = self.tree.GetSelection()
- file = self.tree.GetItemText(item)
- self.activeitem = self.tree.GetItemParent(item)
- self.tree.Delete(item)
- self.project.remove(file)
- self.project_save()
- self.nb.SetPageText(0, 'Editor')
- self.editor.Clear()
- self.editor.Enable(0)
- self.activateMenuItemsFileSelected(0)
- dlg=wxMessageDialog(
- self, 'Delete file %s from disk?' % file, NAME,
- wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION)
- result = dlg.ShowModal()
- if result == wxID_YES:
- try:
- os.remove(file)
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(),
- 'error')
- dlg.Destroy()
-
- def on_file_save(self, event):
- go_ahead = 1
- file = self.tree.GetItemText(self.activeitem)
- wxLogMessage('Saving %s.' % file)
- go_ahead = self.editor.SaveFile(file, self.preferences['backup_files'])
- if go_ahead:
- if self.nb.GetPageCount() > 1:
- self.nb.DeletePage(1)
-
- def on_publish(self, event):
- go_ahead = 1
- item = self.activeitem
- file = self.tree.GetItemText(item)
- if self.editor.IsModified:
- wxLogMessage('Saving %s.' % file)
- wxBeginBusyCursor()
- go_ahead = self.editor.SaveFile(file, self.preferences['backup_files'])
- wxEndBusyCursor()
- if go_ahead and os.path.exists(file):
- dlg = publishDlg(self, infile=file, project=self.project)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- outfile, outdir, writer = dlg.GetValues()
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- self.publishFile(file, outfile, outdir, writer)
-
- def on_publish_all(self, event):
- go_ahead = 1
- item = self.activeitem
- file = self.tree.GetItemText(item)
- if self.editor.IsModified:
- wxLogMessage('Saving %s.' % file)
- wxBeginBusyCursor()
- go_ahead = self.editor.SaveFile(file, self.preferences['backup_files'])
- wxEndBusyCursor()
- if go_ahead:
- writers = publishers.keys()
- writers.sort()
- dlg = wxSingleChoiceDialog(self, 'Please select a writer:',
- 'Publish "%s"' % self.project.name,
- writers, wxOK|wxCANCEL)
- dlg.SetSelection(writers.index('HTML'))
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- writer = writers[dlg.GetSelection()]
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- self.log.Clear()
- files_to_publish = []
- for file in self.project.files:
- if os.path.splitext(file)[1] == '.txt':
- files_to_publish.append(file)
- max = len(files_to_publish)
- dlg = wxProgressDialog('Publishing "%s"' % self.project.name,
- '',
- max,
- self,
- wxPD_CAN_ABORT | wxPD_APP_MODAL)
- keepGoing = true
- count = 0
- error_files = []
- while keepGoing and count < max:
- infile = files_to_publish[count]
- outfile = '%s%s' % (os.path.splitext(os.path.split(infile)[1])[0],
- publishers[writer][2])
- outdir = self.project.directory
- keepGoing = dlg.Update(count, outfile)
- t = time.localtime(time.time())
- st = time.strftime('%d-%b-%Y, %H:%M:%S', t)
- wxLogMessage('\n%s: Publishing %s' % (st, writer))
- wxLogMessage('SOURCE: %s' % infile)
- outfile_fullpath = os.path.join(outdir, outfile)
- wxLogMessage('DESTINATION: %s' % outfile_fullpath)
- try:
- publish_document(writer, infile, outfile, outdir)
- except:
- wxLogMessage('ERROR: %s (%s)' % sys.exc_info()[:2])
- error_files.append((infile, sys.exc_info()[1]))
- count = count + 1
- dlg.Destroy()
- if error_files != []:
- msg = 'Due to severe errors the following files have ' \
- 'not been published properly: \n'
- for file in error_files:
- msg = '%s\n%s\n(%s)\n' % (msg, file[0], file[1])
- msg = '%s\nHINT: You should try to publish the files ' \
- 'in question separately first. If that works, ' \
- 'you can try to publish all files again.' % msg
- dlg = wxScrolledMessageDialog(self, msg, "WARNING!")
- dlg.Centre()
- dlg.ShowModal()
- dlg.Destroy()
-
- def on_find(self, event):
- et = event.GetEventType()
- if et == wxEVT_COMMAND_FIND_REPLACE or et == wxEVT_COMMAND_FIND_REPLACE_ALL:
- replacetxt = event.GetReplaceString()
- self.sb.SetStatusText('', 0)
- findtxt = event.GetFindString()
- length = len(findtxt)
- lastpos = self.editor.GetTextLength()
- flags = event.GetFlags()
- if flags in (1, 3, 5, 7):
- if flags == 7:
- # whole word / match case
- regexp = re.compile(r'\b%s\b' % findtxt)
- elif flags == 5:
- # no whole word / match case
- regexp = re.compile(r'%s' % findtxt)
- elif flags == 3:
- # whole word / no match case
- regexp = re.compile(r'\b%s\b' % findtxt, re.IGNORECASE)
- else:
- # no whole word / no match case
- regexp = re.compile(findtxt, re.IGNORECASE)
- else:
- regexp = None
- print 'Unknown combination of flags.'
- if regexp != None:
- if et == wxEVT_COMMAND_FIND_REPLACE_ALL:
- wxBeginBusyCursor()
- self.editor.BeginUndoAction()
- origtxt = self.editor.GetText()
- if regexp.search(origtxt) != None:
- self.editor.SetText(regexp.sub(replacetxt, origtxt))
- self.sb.SetStatusText('Replaced.', 0)
- else:
- self.sb.SetStatusText('No match found.', 0)
- self.editor.EndUndoAction()
- wxEndBusyCursor()
- else:
- currpos = self.editor.GetCurrentPos()
- if et == wxEVT_COMMAND_FIND_REPLACE and currpos != 0:
- self.editor.ReplaceSelection(replacetxt)
- currpos = self.editor.GetCurrentPos()
- lastpos = self.editor.GetTextLength()
- origtxt = self.editor.GetTextRange(currpos, lastpos)
- position = len(regexp.split(origtxt)[0])
- startpos = currpos + position
- if startpos < lastpos:
- self.editor.GotoPos(startpos + len(regexp.findall(origtxt)[0]))
- self.editor.SetAnchor(startpos)
- else:
- self.sb.SetStatusText('Can not find "%s". Next search will '
- 'start from beginning.' % findtxt, 0)
- self.editor.GotoPos(0)
-
- def on_find_close(self, event):
- event.GetDialog().Destroy()
-
- def on_findreplace_show(self, event):
- data = wxFindReplaceData()
- dlg = wxFindReplaceDialog(self, data, 'Find & Replace',
- wxFR_REPLACEDIALOG)
- dlg.data = data
- dlg.Show(1)
-
- def on_font_small(self, event):
- self.preferences['fontsize'] = 'small'
- self.editor.SetZoom(-2)
- self.save_preferences()
-
- def on_font_normal(self, event):
- self.preferences['fontsize'] = 'normal'
- self.editor.SetZoom(0)
- self.save_preferences()
-
- def on_font_big(self, event):
- self.preferences['fontsize'] = 'big'
- self.editor.SetZoom(2)
- self.save_preferences()
-
- def on_format_paragraph(self, event):
- self.nb.SetSelection(0)
- line_no = self.editor.GetCurrentLine()
- self.editor.GotoLine(line_no)
- startpos = self.editor.GetCurrentPos()
- line = self.editor.GetLine(line_no)
- endpos = startpos + len(line)
- self.editor.SetSelection(startpos, endpos)
- format = event.GetString()
- if format in ['Title','Subtitle']:
- overline = (len(line)-1)*self.formats[format]+'\n'
- else:
- overline = ''
- underline = (len(line)-1)*self.formats[format]+'\n'
- line_below = self.editor.GetLine(line_no+1)
- if line != underline and line_below != underline:
- self.editor.ReplaceSelection('\n%s%s%s\n' % (overline,
- line.strip(' '),
- underline))
- self.editor.GotoPos(startpos)
-
- def on_format_word(self, event):
- self.nb.SetSelection(0)
- selection = self.editor.GetSelectedText()
- if selection != '':
- if event.GetId() == wxID_WXBTNBOLD:
- symbol = '**'
- elif event.GetId() == wxID_WXBTNITALIC:
- symbol = '*'
- elif event.GetId() == wxID_WXBTNLITERAL:
- symbol = '``'
- else:
- symbol = ''
- selection = selection.replace('*','').replace('`','').strip()
- selection = '%s%s%s' % (symbol,selection,symbol)
- self.editor.ReplaceSelection(selection)
-
- def on_goto(self, event):
- values = []
- for i in range(self.editor.GetLineCount()+1)[1:]:
- values.append(str(i))
- dlg = wxSingleChoiceDialog(self, 'Select a line number:', 'Goto line...',
- values, wxOK|wxCANCEL)
- if dlg.ShowModal() == wxID_OK:
- self.editor.GotoLine(int(dlg.GetStringSelection())-1)
- dlg.Destroy()
-
- def on_help_about(self, event):
- """
- Event handler for menu
- option *Help -> About*.
- """
- dlg = aboutDlg(self)
- try:
- dlg.Centre()
- dlg.ShowModal()
- finally:
- dlg.Destroy()
-
- def on_insert_figure(self, event):
- self.insert_image('figure')
-
- def on_btn_hyperlink(self, event):
- self.insert_hyperlink()
-
- def on_insert_image(self, event):
- self.insert_image('image')
-
- def on_insert_path(self, event):
- item = self.activeitem
- itemimage = self.tree.GetItemImage(item)
- file = self.tree.GetItemText(item)
- if self.project != None:
- dir = self.project.directory
- else:
- dir = os.path.dirname(file)
- dlg = wxFileDialog (self, 'Choose file',
- dir, '', '*.*',
- wxOPEN|wxFILE_MUST_EXIST)
- go_ahead = 1
- if dlg.ShowModal() == wxID_OK:
- target = dlg.GetPath()
- else:
- go_ahead = 0
- if go_ahead:
- if self.project != None:
- dir = self.project.directory
- else:
- dir = os.path.dirname(file)
- dlg = wxDirDialog(self, 'Calculate path relative'
- ' to which outputdirectory?', dir)
- if dlg.ShowModal() == wxID_OK:
- dir = dlg.GetPath()
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- self.editor.ReplaceSelection(
- quote(relative_path(self.htmlfile(file,dir), target)))
- dlg.Destroy()
-
- def on_notebook_page_changed(self, event):
- event.Skip()
-
- def on_paste(self, event):
- self.editor.Paste()
-
- def on_project_delete(self, event):
- available_projects = []
- for project in self.projects:
- available_projects.append(project.name)
- if available_projects != []:
- available_projects.sort()
- dlg = wxMultipleChoiceDialog(self, 'Select the projects which you want to' \
- '\ndelete or press "Cancel" to abort.',
- 'Delete Projects',
- available_projects)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- selection = dlg.GetValueString()
- for project_name in selection:
- for project in self.projects:
- if project.name == project_name:
- self.delete_project(project)
- dlg.Destroy()
- else:
- customMsgBox(self, 'Sorry, I don\'t remember any projects.',
- 'info')
-
- def on_project_new(self, event):
- go_ahead = 1
-
- other_project_names = []
- for project in self.projects:
- other_project_names.append(project.name)
-
- if self.CheckEditorChanges():
- project = DocProject()
- dlg = projectSettingsDlg(self, project, other_project_names)
- dlg.Centre()
- if dlg.ShowModal() == wxID_CANCEL:
- go_ahead = 0
- else:
- self.project = project
- self.project.name, self.project.directory = dlg.getValues()
- dlg.Destroy()
-
- if go_ahead:
- try:
- self.projects.append(self.project)
- self.save_projects()
- self.init_tree()
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
-
- def on_project_settings(self, event):
- go_ahead = 1
-
- other_project_names = []
- for project in self.projects:
- if project.name != self.project.name:
- other_project_names.append(project.name)
-
- dlg = projectSettingsDlg(self, self.project, other_project_names)
- dlg.Centre()
- if dlg.ShowModal() == wxID_CANCEL:
- go_ahead = 0
- else:
- name, directory = dlg.getValues()
- self.set_editor_language_code()
- dlg.Destroy()
-
- if go_ahead:
- sort_tree_new = 0
- if self.project.name != name:
- self.projectdirty = 1
- sort_tree_new = 1
- for project in self.projects:
- if project.name == self.project.name:
- project.name = name
- self.project.name = name
- if self.project.directory != directory:
- self.project.directory = directory
- self.projectdirty = 1
-
- if self.projectdirty:
- self.project_save()
- if sort_tree_new:
- self.init_tree()
-
- def on_redo(self, event):
- self.editor.Redo()
-
- def on_run_tool(self, event):
- go_ahead = 1
- choices = []
- for tool in self.tools.values():
- choices.append('%s: %s' % (tool[0],tool[1]))
- dlg = wxSingleChoiceDialog(self, 'Select a tool...', 'Toolbox',
- choices, wxOK|wxCANCEL)
- dlg.Centre()
- if dlg.ShowModal() == wxID_OK:
- tool_id=int(dlg.GetStringSelection().split(':')[0])
- for key in self.tools.keys():
- if self.tools[key][0] == tool_id:
- tool_key = key
- break
- else:
- go_ahead = 0
- dlg.Destroy()
- if go_ahead:
- self.log.Clear()
- tool = self.tools[tool_key]
- item = self.activeitem
- file = self.tree.GetItemText(item)
- curdir = os.getcwd()
- try:
- replmts = {'$[FileDir]': os.path.split(file)[0],
- '$[FilePath]': file,
- '$[FileName]': os.path.split(file)[1],
- '$[FileBase]': os.path.splitext(os.path.basename(file))[0],
- '$[ProjectDir]': self.project.directory}
- command = tool[2]
- for str in replmts.keys():
- command = command.replace(str, replmts[str])
- directory = tool[3]
- for str in replmts.keys():
- directory = directory.replace(str, replmts[str])
- except:
- go_ahead = 0
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
- if go_ahead:
- t = time.localtime(time.time())
- st = time.strftime('%d-%b-%Y, %H:%M:%S', t)
- wxLogMessage('%s: %s' % (st, tool[1]))
- wxLogMessage('COMMAND: %s\nDIRECTORY: %s' % (command, directory))
- try:
- os.chdir(directory)
- os.system(command)
- t = time.localtime(time.time())
- st = time.strftime('%d-%b-%Y, %H:%M:%S', t)
- wxLogMessage('%s: Finished.' % st)
- except:
- customMsgBox(self, '%s:\n%s\n%s' % sys.exc_info(), 'error')
- os.chdir(curdir)
-
- def on_select_all(self, event):
- self.editor.SelectAll()
-
- def on_tree_item_activated(self, event):
- item=event.GetItem()
- go_ahead = 1
-
- if item != self.activeitem \
- and self.tree.GetItemImage(self.activeitem) == self.im2:
- go_ahead = self.CheckEditorChanges()
-
- if go_ahead:
- self.nb.SetSelection(0)
- if item != self.activeitem:
- olditemparent = self.tree.GetItemParent(self.activeitem)
- self.tree.SetItemBold(olditemparent, 0)
- self.tree.SetItemTextColour(olditemparent, wxBLACK)
- self.tree.SetItemBold(self.activeitem, 0)
- self.tree.SetItemTextColour(self.activeitem, wxBLACK)
- self.activeitem = item
- self.tree.SetItemBold(item, 1)
- if item != self.root:
- self.tree.SetItemTextColour(item, wxBLUE)
- else:
- go_ahead = 0
-
- if go_ahead:
- itemparent = self.tree.GetItemParent(item)
- itemimage = self.tree.GetItemImage(item)
-
- # item is file:
- if itemimage == self.im2:
- # file is part of project:
- if self.tree.GetItemImage(itemparent) == self.im1:
- self.tree.SetItemBold(itemparent, 1)
- self.tree.SetItemTextColour(itemparent, wxBLUE)
- project_name = self.tree.GetItemText(itemparent)
- for project in self.projects:
- if project.name == project_name:
- self.project = project
- self.activateMenuItemsProjectOpen(1)
- # file is not part of project:
- else:
- self.project = None
- self.activateMenuItemsProjectOpen(0)
- file=self.tree.GetItemText(item)
- if os.path.exists(file):
- self.open_file_in_editor(file)
- else:
- self.editor.Clear()
- self.editor.Enable(0)
- self.nb.SetPageText(0, 'Editor')
- self.activateMenuItemsFileSelected(0)
- parent = self.tree.GetItemParent(item)
- self.tree.SetItemBold(item, 0)
- self.tree.SetItemTextColour(item, wxBLACK)
- self.activeitem = parent
- dlg=wxMessageDialog(self, '%s does not exist.\nRemove '
- 'from project?' % file,
- NAME, wxYES_NO | wxICON_QUESTION)
- if dlg.ShowModal() == wxID_YES:
- self.tree.Delete(item)
- self.project.remove(file)
- self.project_save()
- dlg.Destroy()
- self.tree.SelectItem(self.activeitem)
-
- # item is project:
- elif itemimage == self.im1:
- project_name = self.tree.GetItemText(item)
- for project in self.projects:
- if project.name == project_name:
- self.project = project
- self.activateMenuItemsProjectOpen(1)
- self.nb.SetPageText(0, 'Editor')
- self.editor.Clear()
- self.editor.Enable(0)
- self.activateMenuItemsFileSelected(0)
-
- # item is neither file nor project:
- else:
- self.nb.SetPageText(0, 'Editor')
- self.editor.Clear()
- self.editor.Enable(0)
- self.project = None
- self.activateMenuItemsProjectOpen(0)
- self.activateMenuItemsFileSelected(0)
-
- def on_undo(self, event):
- self.editor.Undo()
-
- def on_view_eols(self, event):
- self.preferences['eol_markers'] = not self.preferences['eol_markers']
- self.editor.SetViewEOL(self.preferences['eol_markers'])
- self.save_preferences()
-
- def on_view_edge(self, event):
- self.preferences['right_edge_indicator'] = not self.preferences['right_edge_indicator']
- self.editor.SetEdgeMode(self.preferences['right_edge_indicator'])
- self.save_preferences()
-
- def on_view_ws(self, event):
- self.preferences['whitespace'] = not self.preferences['whitespace']
- self.editor.SetViewWhiteSpace(self.preferences['whitespace'])
- self.save_preferences()
-
-#---------------------------------------------------------------------------
-
-class FactoryApp(wxApp):
- def OnInit(self):
- provider = wxSimpleHelpProvider()
- wxHelpProvider_Set(provider)
- self.projects = []
- if self.init_projects():
- wxInitAllImageHandlers()
- if len(sys.argv) > 1:
- frame = DocFactoryFrame(self.projects, sys.argv[1])
- else:
- frame = DocFactoryFrame(self.projects)
- self.SetTopWindow(frame)
- return 1
- else:
- return 0
-
- def init_projects(self):
- if os.path.exists(DATA):
- try:
- cfg = ConfigParser.ConfigParser()
- cfg.read(DATA)
- for section in cfg.sections():
- if section[:19] == 'docfactory_project:':
- project = DocProject()
- project.name = section.split(': ')[1]
- project.directory = cfg.get(section, 'outputdirectory')
- if cfg.has_option(section, 'files'):
- project.files = cfg.get(section, 'files').split(';')
- if project.files == ['']:
- project.files = []
- self.projects.append(project)
- except:
- f = open('error.txt', 'w')
- f.write('%s:\n%s\n%s' % sys.exc_info())
- f.close()
- return 0
- return 1
-
-#--------------------------------------------------------------------------
-
-def main():
- app = FactoryApp(0)
- app.MainLoop()
-
-#--------------------------------------------------------------------------
-
-if __name__ == '__main__':
- main()
-
-#--------------------------------------------------------------------------
diff --git a/sandbox/gschwant/docfactory/factory/stylesheets.py b/sandbox/gschwant/docfactory/factory/stylesheets.py
deleted file mode 100644
index b2bec5a68..000000000
--- a/sandbox/gschwant/docfactory/factory/stylesheets.py
+++ /dev/null
@@ -1,528 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-html_classic = '''
-/*
-:Author: David Goodger
-:Contact: goodger@users.sourceforge.net
-:date: $Date$
-:version: $Revision$
-:copyright: This stylesheet has been placed in the public domain.
-
-Default cascading style sheet for the HTML output of Docutils.
-*/
-
-.first {
- margin-top: 0 }
-
-.last {
- margin-bottom: 0 }
-
-a.toc-backref {
- text-decoration: none ;
- color: black }
-
-dd {
- margin-bottom: 0.5em }
-
-div.abstract {
- margin: 2em 5em }
-
-div.abstract p.topic-title {
- font-weight: bold ;
- text-align: center }
-
-div.attention, div.caution, div.danger, div.error, div.hint,
-div.important, div.note, div.tip, div.warning, div.admonition {
- margin: 2em ;
- border: medium outset ;
- padding: 1em }
-
-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 }
-
-div.hint p.admonition-title, div.important p.admonition-title,
-div.note p.admonition-title, div.tip p.admonition-title,
-div.admonition p.admonition-title {
- font-weight: bold ;
- font-family: sans-serif }
-
-div.dedication {
- margin: 2em 5em ;
- text-align: center ;
- font-style: italic }
-
-div.dedication p.topic-title {
- font-weight: bold ;
- font-style: normal }
-
-div.figure {
- margin-left: 2em }
-
-div.footer, div.header {
- font-size: smaller }
-
-div.sidebar {
- margin-left: 1em ;
- border: medium outset ;
- padding: 0em 1em ;
- background-color: #ffffee ;
- width: 40% ;
- float: right ;
- clear: right }
-
-div.sidebar p.rubric {
- font-family: sans-serif ;
- font-size: medium }
-
-div.system-messages {
- margin: 5em }
-
-div.system-messages h1 {
- color: red }
-
-div.system-message {
- border: medium outset ;
- padding: 1em }
-
-div.system-message p.system-message-title {
- color: red ;
- font-weight: bold }
-
-div.topic {
- margin: 2em }
-
-h1.title {
- text-align: center }
-
-h2.subtitle {
- text-align: center }
-
-hr {
- width: 75% }
-
-ol.simple, ul.simple {
- margin-bottom: 1em }
-
-ol.arabic {
- list-style: decimal }
-
-ol.loweralpha {
- list-style: lower-alpha }
-
-ol.upperalpha {
- list-style: upper-alpha }
-
-ol.lowerroman {
- list-style: lower-roman }
-
-ol.upperroman {
- list-style: upper-roman }
-
-p.attribution {
- text-align: right ;
- margin-left: 50% }
-
-p.caption {
- font-style: italic }
-
-p.credits {
- font-style: italic ;
- font-size: smaller }
-
-p.label {
- white-space: nowrap }
-
-p.rubric {
- font-weight: bold ;
- font-size: larger ;
- color: darkred ;
- text-align: center }
-
-p.sidebar-title {
- font-family: sans-serif ;
- font-weight: bold ;
- font-size: larger }
-
-p.sidebar-subtitle {
- font-family: sans-serif ;
- font-weight: bold }
-
-p.topic-title {
- font-weight: bold }
-
-pre.address {
- margin-bottom: 0 ;
- margin-top: 0 ;
- font-family: serif ;
- font-size: 100% }
-
-pre.line-block {
- font-family: serif ;
- font-size: 100% }
-
-pre.literal-block, pre.doctest-block {
- margin-left: 2em ;
- margin-right: 2em ;
- background-color: #eeeeee }
-
-span.classifier {
- font-family: sans-serif ;
- font-style: oblique }
-
-span.classifier-delimiter {
- font-family: sans-serif ;
- font-weight: bold }
-
-span.interpreted {
- font-family: sans-serif }
-
-span.option {
- white-space: nowrap }
-
-span.option-argument {
- font-style: italic }
-
-span.pre {
- white-space: pre }
-
-span.problematic {
- color: red }
-
-table {
- margin-top: 0.5em ;
- margin-bottom: 0.5em }
-
-table.citation {
- border-left: solid thin gray ;
- padding-left: 0.5ex }
-
-table.docinfo {
- margin: 2em 4em }
-
-table.footnote {
- border-left: solid thin black ;
- padding-left: 0.5ex }
-
-td, th {
- padding-left: 0.5em ;
- padding-right: 0.5em ;
- vertical-align: top }
-
-th.docinfo-name, th.field-name {
- font-weight: bold ;
- text-align: left ;
- white-space: nowrap }
-
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
- font-size: 100% }
-
-tt {
- background-color: #eeeeee }
-
-ul.auto-toc {
- list-style-type: none }
-'''
-
-html_modern = html_classic + '''
-
-/*
-Additional styles for "modern"-style of DocFactory.
-
-:Author: Gunnar Schwant
-:Contact: g.schwant@gmx.de
-*/
-
-.first {
- font-size: 10pt }
-
-.last {
- font-size: 10pt }
-
-a {
- text-decoration: none }
-
-a.reference {
- color: #0000BF }
-
-a:hover {
- background-color: #003366 ;
- color: white }
-
-body {
- font-family: arial,helvetica,univers ;
- font-size: 10pt ;
- padding-top: 1cm ;
- margin-left:0.5cm ;
- margin-right:0.5cm ;
- margin-bottom:0.5cm }
-
-dd {
- font-size: 10pt ;
- padding-top: 0.1cm
-}
-
-dt {
- font-size: 10pt ;
- font-weight: bold ;
- background-color: #C8DBEB ;
- padding-left: 0.1cm ;
- padding-top: 0.1cm ;
- padding-bottom: 0.1cm }
-
-div.abstract {
- font-size: 10pt }
-
-div.abstract p.topic-title {
- font-size: 10pt }
-
-div.attention, div.caution, div.danger, div.error, div.hint,
-div.important, div.note, div.tip, div.warning {
- font-size: 10pt }
-
-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, div.hint p.admonition-title,
-div.important p.admonition-title, div.note p.admonition-title,
-div.tip p.admonition-title {
- margin-top: 0em ;
- font-size: 12pt ;
- font-family: arial,helvetica,univers }
-
-div.dedication {
- font-size: 10pt }
-
-div.dedication p.topic-title {
- font-size: 10pt }
-
-div.figure {
- font-size: 10pt }
-
-div.footer, div.header {
- font-size: 8pt }
-
-div.system-messages {
- font-size: 10pt }
-
-div.system-messages h1 {
- font-size: 12pt }
-
-div.system-message {
- font-size: 10pt }
-
-div.system-message p.system-message-title {
- font-size: 10pt }
-
-div.topic {
- font-size: 10pt }
-
-h1, h2, h3, h4, h5, h6 {
- padding-top: 0.5cm ;
- page-break-after: avoid ;
- font-family: arial,helvetica,univers }
-
-h1 {
- font-size: 18pt }
-
-h1.title {
- padding-top: 0cm }
-
-h2 {
- font-size: 16pt }
-
-h2.subtitle {
- padding-top: 0cm }
-
-h3 {
- font-size: 14pt }
-
-h4 {
- font-size: 12pt }
-
-h5, h6 {
- font-size: 10pt }
-
-hr {
- width: 100%;
- page-break-after: always }
-
-li {
- padding-top: 1mm ;
- padding-bottom: 1mm }
-
-ol.simple, ul.simple {
- font-size: 10pt }
-
-ol.arabic {
- font-size: 10pt }
-
-ol.loweralpha {
- font-size: 10pt }
-
-ol.upperalpha {
- font-size: 10pt }
-
-ol.lowerroman {
- font-size: 10pt }
-
-ol.upperroman {
- font-size: 10pt }
-
-p.caption {
- font-size: 10pt }
-
-p.credits {
- font-style: italic ;
- font-size: 8pt }
-
-p.label {
- font-size: 10pt }
-
-p.topic-title {
- font-size: 10pt }
-
-pre.address {
- font-family: arial,helvetica,univers ;
- font-size: 10pt }
-
-pre.line-block {
- font-size: 10pt }
-
-pre.literal-block, pre.doctest-block {
- border-width: 1pt ;
- border-style: solid ;
- border-color: #999999 ;
- color: #0000C0 ;
- background-color: #ffffe0 ;
- font-size: 9pt }
-
-span.classifier {
- font-size: 10pt ;
- font-family: arial,helvetica,univers }
-
-span.classifier-delimiter {
- font-size: 10pt ;
- font-family: arial,helvetica,univers }
-
-span.field-argument {
- font-size: 10pt }
-
-span.interpreted {
- font-size: 10pt ;
- font-family: arial,helvetica,univers }
-
-span.option-argument {
- font-size: 10pt }
-
-span.problematic {
- font-size: 10pt }
-
-table {
- font-size: 10pt ;
- border-collapse: collapse ;
- border-width: 1.5pt ;
- border-color: #003366 }
-
-table.citation {
- font-size: 10pt }
-
-table.docinfo {
- font-size: 10pt }
-
-table.footnote {
- font-size: 8pt ;
- text-align: left }
-
-table.table {
- width: 100% }
-
-th {
- border-width: 1.5pt }
-
-td {
- border-width: 1pt }
-
-td, th {
- font-size: 10pt ;
- border-style: thin ;
- border-color: #003366 }
-
-td.docinfo-name, th.field-name {
- font-size: 10pt }
-
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
- font-size: 10pt }
-'''
-
-tex_classic = '''
-% donot indent first line.
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{5pt plus 2pt minus 1pt}
-
-% sloppy
-% ------
-% Less strict (opposite to default fussy) space size between words. Therefore
-% less hyphenation.
-\sloppy
-
-% fonts
-% -----
-% times for pdf generation, gives smaller pdf files.
-%
-% But in standard postscript fonts: courier and times/helvetica do not fit.
-% Maybe use pslatex.
-\usepackage{times}
-
-% pagestyle
-\pagestyle{plain}
-'''
-
-tex_fancyhdr2side = '''
-% geometry
-\geometry{a4paper,twoside,tmargin=1.5cm,
- headheight=1cm,headsep=0.75cm}
-
-% donot indent first line.
-\setlength{\parindent}{0pt}
-\setlength{\parskip}{5pt plus 2pt minus 1pt}
-
-% sloppy
-% ------
-% Less strict (opposite to default fussy) space size between words. Therefore
-% less hyphenation.
-\sloppy
-
-% fonts
-% -----
-% times for pdf generation, gives smaller pdf files.
-%
-% But in standard postscript fonts: courier and times/helvetica do not fit.
-% Maybe use pslatex.
-\usepackage{times}
-\\renewcommand{\\familydefault}{\sfdefault}
-
-% pagestyle
-\usepackage{fancyhdr}
-\pagestyle{fancy}
-\\addtolength{\headheight}{\\baselineskip}
-\\renewcommand{\sectionmark}[1]{\markboth{#1}{}}
-\\renewcommand{\subsectionmark}[1]{\markright{#1}}
-\\fancyhf{}
-\\fancyhead[LE,RO]{\\bfseries\\textsf{\Large\\thepage}}
-\\fancyhead[LO]{\\textsf{\\footnotesize\\rightmark}}
-\\fancyhead[RE]{\\textsc{\\textsf{\\footnotesize\leftmark}}}
-%\\fancyfoot[LE,RO]{\\bfseries\\textsf{\scriptsize Docutils}}
-\\fancyfoot[RE,LO]{\\textsf{\scriptsize\\today}}
-'''
-
-stylesheets = { 'HTML: Classic': html_classic,
- 'LaTeX: Classic': tex_classic,
- 'HTML: Modern': html_modern,
- 'LaTeX: Fancyheader2side': tex_fancyhdr2side}
diff --git a/sandbox/gschwant/docfactory/factory/throbimages.py b/sandbox/gschwant/docfactory/factory/throbimages.py
deleted file mode 100644
index a0ccf3622..000000000
--- a/sandbox/gschwant/docfactory/factory/throbimages.py
+++ /dev/null
@@ -1,7340 +0,0 @@
-"""
-:author: Dr. Gunnar Schwant
-:contact: g.schwant@gmx.de
-:version: 0.2.4
-"""
-
-#----------------------------------------------------------------------
-# This file was generated by encode_bitmaps.py
-#
-from wxPython.wx import wxImageFromStream, wxBitmapFromImage
-import cStringIO
-
-
-catalog = {}
-index = []
-
-class ImageClass: pass
-
-def getDocFactory001Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r`\
-IDATx\x9c\xed\x9bil\x1d\xd7y\x86\x9fsf\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb\xfe\xc8\xcf\xa0\
-\x08\n\x14]\x8c\x06\x81\xed&\xa9Q\xb4p\x9d\xbaQ\x12;\x8e\x11\xc9Nd\xc9V\x14j\
-\xb3\xac\x95\xb2$\x92\xe2r\xb9\x93\x97\xbc\xeb\xcc\x9d\x99\xd3\x1f\xb4e\xb3\
-\xb2$\xa6\xb0%\x01\xbd\xcf\xcf\x8b3\xf3\xbe\xdf|\xdf\x879s\xce=\xe2\xef\xbe\
-\xa3\x14\x15*T\xf8\\\xf4P\xf5\xd5\xb6P\xa1\xc2\xb5\x8b\x1e\xac4H\x85\n\x17E\
-\x0f\'\xae\xb6\x85\n\x9fE\xa00\xb0\x91xs~w1p1\xaf\x9c\x07a\xa3\xfd/\x0f\n(\
-\xab\x00\x1e\xda\x97\xa2+\xf11E\t\x1fIYY(\xc4\x97\xa2\xf3\xdb\xa0\x87\xe2W\
-\xdbB\x85O\x10\xf84\x14v\x11u\xcf\xe1\x7f\xa66\xa5\x04i\xea\xe4\xdd8\xb9`;3\
-\xfa"\\\x02_\x92\x07\x8f&\xfb\x1d\xaa\xbc\x9e9\x1e\x00tKak5tk[(\x13\xfaBu5\
-\x1c\x16\xbb?\'P\x1eA3\x04cr\x19iy\xeb\x17\xaa\xf1\x7fA\x0fW\x1a\xe4\x9a\xc1\
-b\x94&\xfd\x05N\xbfY\xcb\xf4`\x04\x10 %RW\x84k\x8aD\xea\x8b\xb4-\x9f\xc4\xb1\
-\x16\xd1\x17\xfck\x1c\xea\xbep\x0fA\x86i*\xbe\xca\xc9\x9f\xc6\x99N\x07@\x08\
-\x10\x12\x80X\xa3\xcd\xb2\x87\xdf\xa3h\xd43\xc1\xed_\xa8n\x88a\x1a\xec\x1fs\
-\xec\xc7)b\x0bK\xb4\xac9D!x#e\xaen\x81\xea\x91J\x83\\3\x84\x94 \xa1\xadB\xf8\
-E\xa4\xa6\x08\xc6\x05F@\xa0\x10\x94\xf2AFOJ\xf2\xa3\xcd,\xbfOb\x1a\xbf\xa1?\
-\xfc\xc0\x9ci\x88\xf0=\x84[F\xf8\x1eJj(\xdd@\xc9\xcf\x9f\x0e\t\xd7A\xbae\x80\
-9cCJ\',\xaeG\xb9\x05\xa4\xc6y\x0f H-6\t\x85:0\x83MD\xe4\x85\xf7\xf1u\x13\xa5\
-\xe9H\xa7\x08B\xe2\x1b\xd6l\x83]FS\xa0\x88\xfbE\xc2\xf9\xa5HJd\xd31n\x88Z\
-\xd4\x85\xc6\xc9\xc8O\x0bt^\xf1)\xf5\xa9\xbe\x19\x98\xd5\xf4\xca\xf8\xba5\
-\xabU\xb6g\x87\x99\x81\x0b\xaf\x01|38\xc7\xb3^e\x0e\xfc\x16)\xac\xf0eb)\x07\
-\x8cu\x18\xfa{\xc4R.7\xff\xc1mh\xa1 (\x9fr\xdef\xe0P\x0f#\xc7\xd3\x9c\xdb\
-\x9f\xe2\x86{\xa28\xc6\x19\n"\x88P\x1ef\xa6\x1b3\xd3\x8dW(!P\xb3/\x9f@\x00;\
-\xb5\x14\xa7\xaa\x19>n$\xe1\x97\xb1fz0&\xcf\xa2l\x07P\xb3/\x08#@\xb1\xf6f\
-\xb4p52p\x1b\x96\xb5\x13-\xe5r\xf3S\x1b1"A\x00\xec\xb2b\xd2\x88 \x03\x92\x98\
-\xdf\x839u\x06k\xa6\x1be\xbb(\xa5\xc0\x0c\xe2\x05\xab1\x8bi\x94\x02\'\xdeJ)\
-\xd5qY\xcd\xb0\xd0\xa9\xf6f\xc8M-\x03\xb7\x13\xa1A\xa9\xb0\x92E\xd6(C\x06\
-\x94\xa41\xbf\xf8\x94O }\x00#\x97F\x1a\x127\xdc\x80V\x18\xc3\xb7\xcb\x08\xd3\
-\xc2\xd1k\x91\xd9q\x84\x14\xd8\x0bW\xe0Ek\x010\xd2\'0\xa6\x06@(\xca\xf1f\xca\
-\x8dK\xcf\xe7D\x8fp\xf2J\xd6@\x85K`\x08\x1daV\xa1\xcb\x1czP`\xc4Rd\xac\x02\
-\x1e`\x85\xc2\xb4\xdd\xb5\x16/\xb7\x9d\xdcp7\x85\xccu$\xac\x11ts\x86H\xf64z9\
-\xc3\xd0\x89I\xc6\x8fd\xf1\\\x1f=\xa8\xd3\xb8!ACl\x88bq\x01\x85\xe0B\xa4\xf2\
-\x88\xe4N\xa1\xb2\xd3\xf4\xbf7Ln\xd0Fh`F\x0c\xaao\x8aR\x1b\x1a\xc1\x0e\xadG\
-\x18)t\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\x83.\x0e\xa3D\xd4\x10\xd1\\\x17\x94\
-\xa6\x19>4N\xa6;\x0f@\xe3\x86$\xf1\xe6\x10\xa3G\xa7\xd1\xc3:5\xab2\xe4|\x87P\
-\xae\xfb\xa2\x9au\xe1\t\xcc\xaaM\x0c\xef;\xc5\xe0\x9e}(\xdfCI\xc1\xa9m\xbf`\
-\xe9c\x0f\x91\xd0\xfa\xc192\xaf\xf8tU"\x168N\xf7/\xd3\x84j-\x927\x0e3\xd1\
-\x95e\xfc\xd8\x0cK\x1eN\x12\xf2~B\xdf\xaf\xc3\xc4\xdb\x1d\x12U\xefbG\xb6"\
-\xbd,\x01\xf7U\xd2\x87\x83\x98U\x1e\xf1\x0e\x81\xa3\xfe\x08%\x0c\x00\xf40{\
-\xaebIT\xf8,\x1aI\x04w\xa33\x89\x10\x02\xa1B\x98\xfc\x1a\x8fI\x94&\xf1\xbc;X\
-\xb0\xba\x83\x9e\xed\xff\x86=6D,\x15#Q\x1eA\x14\x1a8\xfd\xa3\xfd\x14\xc6F\t\
-\xc4cH\xd3\xc4\xc9O1\xbc;M1\xddF\xcb\xd7\x97c\x98\'\xd0\x9d$\x9a\xddB\xd7O\
-\x7fDql\x143\x1a\xc1\x08\x87A8\xe4{\\\x1aWnB\xf3\x07\x10\xb4\xa03\x81g\x17\
-\xb1\'\xa61\x82\x16\xa6\xd0\xd0\x021J\xfa>\xf0r\x04\xdc6N\xbd\xfe\x1a\xf9\
-\xe1a\x02\x898\xd2\xb2\x18?p\x8e\xd1\xbd6\xbe[&T_Op\xc3\xdd\xe8v\x06y)\xcdUw\
-\xa3\x14\x04\xab"T\xd5J\xf2#}\x08)\t\xc7\x17\xa1\x07b\x18*\x8d?\xaf\xf8\x8e\
-\xa3\xa4\x87i\xac\xc6\x9f\xeeb\xf4\xec\x18S\x1f\x86\x08V\'Y\xb8\xb6\x95\xaa\
-\x9a\xa5\xe0\x841\xfc\xa3\xe4?\xd2X\xb8\xa2\x85\x82w\x00Y\xf2\xd1\xb5\x0e\
-\xca\xa3G\x89\xd7\xd4\x11\xafj \xcf>>\xd9=\xd7C\xec\xba\xaaEQ\xe1S\x04\x8b\
-\x10\xdc\x8f.\xc6\x11\x12\x84\x08\x12\xe0\x03\x14\xbd\x00H\xcd&X\xfd\x10\x01\
-k\x08{\xfc \x1a+1D\x07}{^\xa6<v\x90\x85\xb7o\xa5\xee\xd6-\xa0\xca\xb8\xc5"\
-\x03;\xfe\x95B\xefN\n\xe9\xe5D\xda\x17\x80_\xc3\xc0\xee\xff\xc6\x9d\xf8\x90\
-\x96\xbb\x9e \xd1\xb1\x0e\x19\xf0\xd1\xb48\x9eSD\xe9\x93\x98z\'\xc2\xdd\x84.\
-\xc6p\xb3g8\xfb\x9f\xcf!M\x89\xd0$\x8d\x1b\x9f%\xbad\t\xca\xcb\x929\xd5\x853\
-z\x88\x85w<B\xdd\xad[\x10\xba\x8fo\xc3\xe0;/3}z/\x86\xae!\xcczt7\xca\xc0\xee\
-W/\xa9\xa9\xac\x1d\xc4\xae\xbf\x87X\xdb\xb3\x9cy\xe59\x84\xee\xd1\xfe\xe03\
-\x08k\x12\xa9\xd5\xd1\xb7\xe7g\x97\x8f\xaf\xad\x1eemG\x98\x9b\xd0\xe5\x14\
-\xa6\x1c\xa2e\xf3\x9f\x11k_\x81/zQ\x81\x0f \xb7\x84\xfa5&}o\xfd\x17\xa5\xe9\
-\xaf\x13\x0c\x16Q^\x92\xa9\x9e.t\x86H-{\x0cB\xfd\x04\xc5\xdb\xf0q\x8b\xe8\
-\x81\xd1\xab\xbf\xd6\\\xe1ct\r/\x10A\xb3%R\n\xf0#X\x93\x1a\xb8\xb39RV\x1c\
-\xd7\x0fc\x96\x04\xa6\x17F\xa8\x18\x94}\xec\xde>B\xc1F\xea\xd6=\x8eV\xde\x8e\
-\xf4\xf6#\xcdG\xa8[\xfd(\x03\xdd\'(\xf5\xf4\x10[\xfc$\x9e\'\xb0\xbb\xcf\x12\
-\n\xd4Q\xb3\xea\x11\xa4\xfb\x13da\x0f\xc8\x04\x9a\xd0\xc1\x99\x82R\x12\xcf\
-\x04\xad\x04z\x11\xacP\x02\xdd\x8a"\r\r+\x98Bs]\x94l%\xd3\xf9/\x84\x02\xf5\
-\xd4\xad\xdd\x8a\xee\xfc\x1cQ:\x82o=M\xcd\xf2\x07(\x9e\xd8\x8f\xee\xe8\x08\
-\x95\x00/py\xcd\xdc\x0c\xe8\x19<\xeb[\x98*\x82T\x02M\xafB\xb3_\xc33\x9e\x9eW\
-|U-[\xd1\n\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xba\t\xdd\xf9\x1e8G \xeb\xa1\
-\xf4\x12UK6\x13\xb0\xdef\xb2\xf3\x00M[\xff\x14\xcf\xcf\x93=\xfc\n\x89\xa6\
-\x95\x98\xc9\xc5\xc8\xfc\x0e\xc8\xc2\'\xdfl:;\x17_\xbd\x82\xa80\x97X-\xac\
-\x1fA\x0c\x07A\x02\xf6\x08\xec\xab\x85i\x05\x86\x85Z\xb7\x8eR\xdf\x07\xa8\
-\x93!\xac\xf6V\xe4\xf4\x04\x9eH\xe1\x9d\x16\xe8\xb1F(\x04\x90\x07\x06\xa1\
-\x10DkLc5\xdc\x816\xdc\x08c1T!\x81*\x16q?\x02#Q\x8f?c\xa0\x1f\x9a\x80\xc2g\
-\x97\x8a\xab!V\x03k\xd2\x88\xe1\x00\x96\xd3N\xeb\xd6\xbf@\x8bF\xc0\xf7\xf1\
-\xc7\x07\x91G\xce\xe04/\xc09^\xc2H6"\xca\t\xc4\xbei\xc8\x05\x91-\x03\x18\xf5\
-\xb7\xa0\r\xd5#\xbc$x\tTN]^\xf3\x13\xdd\xb5\x83\xc8\xe1\x00B\n(\xa5\xa1+\x89\
-\xbfX\xce+>\xf2\t8\xd2\x04\xeb\xe20\x1c\x9b\x9d\xa2\xfa)\xe8\x8c@\xa6\x19\
-\x00\x11(#o\x8d\x12\x89\xdfJv\xf7\x07\xd8\xb7\x14\xb0\xd3i\xcaG]\xea\xef\xb8\
-\x1f\x86\xf3\xb0/\x00\xfe\xa7=\xa1\x0f\xbe\xf0\xf4\x95H}\x85y`\xb4\n\x12\x1d\
-\xe3\x14N.B\xa2\xe1\xe7\'\x99\xde\xbb\x19\xa4\xc2\\\xed\xa3g]\x06\xbf;D\xe1\
-\xd4m\xd4<\xd4H\xf1\xb0\x8d\xb9"\x8f*m {:\x83\x97\x9d\xc2\t=\x89\xfd\xa1Kh\
-\x89\xc5Lg?\xd3\xbb:\x0864\xe0OM!B@\xf9v2\xbbFp\x1e\x1f\xa1\xa4~\x0f{\x97\
-\x8b\xde\xa4c\\\xa7a\x1f*\xe3\xa5\x8b$\x96\x8e\xcez\x10\x1a\x88\x02\x99\x7f\
-\x14\xb8\xfd\x02w\xb0\x06\xad\xa1\x81\xe4\xdf\x96\xf02k)t\xe5(O\x0c\xe3\x04\
-\x1e\xa3\xb8\xd7&\xbc$\xc0\xcc\x9e\x1e\xa6wu\x10\xba.\x85_H#\xa4\x7fY\xcd\
-\xd2\x1e\x1bc\x91O\xe2\xc6q\xf2\xc7\xda\x11H\xfc\xfc\x18\x997\xd7P\xf5la^\
-\xf1\xb9\xe3Y&\xb7}\x95\xf8MC\x14\xba\x9af\x97y\xf3\xc3L\xfc\xf0\x1e\xca\xdd\
-\xe5\xf3\xcf8\xd4\x17 \xb6\xfaQ\x06_\x9c\xe1\xc4\x9flG\x15]\xac\x86{\xb0\x16\
-\xae\'\xf3\xdd!\x8a\xbf\xfa\xfd99\xd1__\xb5\xfe\n\x97A\x85\x8bQ]?\xc3\xfd\
-\xec\xe6\\\xaa\x1a\xa7(\xa9\x1d\x1c\x84\x07-\xf2\x93\x90\x1dv\xe8\xfe\x8eM&\
-\x97\xe2\x86?\xac\xc7XZ\xe6\x9dm\xcd\xdc\x14\xeb\'\xfaT;\x87\xff\xfe4\xc3\
-\xcf\xef\xa6\xed\xee\x05\xc8\x95AJ\xc7\xf3\x9cz;C\xb1\xb5\x9d\xba\x8dq\xbaz\
-\x1d\x12\xa9,\xe1\'\xda8\xf4\x0f>c\xdf\xef\xa4\xed\xaez\xd4=Qt\x0bt\xc3%\xf9\
-\x8d\x08\xfbw\xb4r\xa7\xdc\xc1\xb9T\x12\xa4F;\x83\xbc\x1dy\x80\x89d\x12\x92 \
-5\xc5\xd7\xfa\xf6\xa3?\xd4\xca\xe1\x1f\xf4Q\xf8\xe1~\x1a\xd7\xd6\xe2\xaf7\
-\x19\xf8X3\xd7\xd4F\xb2\xce\xa2\xd5\xed#;e\\V\xf3\xbd\xe8J\x046\xf7\x8b7\xe8\
-\xa9\xa9FI\x83V\x91\xe6W\xc9U\xac\xea\xed\x9d_|\x03.\xa7\x16/\xe1>u\x80\xbed\
-\x0c!%\xd7\xab~v\xde\xb0\x96\x89x\xf8\xfc3\x8e\xcd\x08\xb64\xbbL\xde\xb9\x96\
-\x91\xe3C\x10\xd2Y\xfd\xe8F\xa6sU\xbc\xee\xc4\xb1W\xcd\xfds\xbb~\xca/\\\xe9:\
-\xa8p\x11\x1a\xfdil\xbb\x97q\xa7\xc4\xc4\x98N\xff\xb7\xd3\xa0\xe9\xd8\x8e\
-\x81\x12\x1a\x08\xc9\xa2e.\x1d\xbf\x9b\xe7\xe0\x916\xde\xed\t1\xaa\x87y\xea\
-\xe1Q\x16n68\xfc\x8b\x1c\'_<\x8b\x92\x1a\xbe0\x08\'$\xcb\xee\x93\x985#\xbc\
-\xb9m\x19\x8d\xb5>\x8fn\x19\xa3\xee+\x1a\xa7\xf6\xe69\xf9R\xef\xf9\xb1\xd5M\
-\x92\x07\xfe\xca`\\\x0bb\x97\xce0^\x0ecE%\x8e=\xca\xd9r\x8e\x11\xff\xe3\x8d5\
-\x1f\xdc\xce\x04\x8fo\xc9\x11^!9\xb4g\x9c\xfd\xefgPR#Zk\xb0\xe0\x06\xc9PI\
-\x12\x8c\xe4\xb1\x8bgy\xff\xf0\n~g\xe3\xa55\x87\xf4&\x1c\xc7\xa7T\xe8f\xd8\
-\xae&\x18s(\xdb\xe3\x9c.\xe5\x99>2\xbf\xf8\xde\xda\xb6\x0c)\xa7qJ\xa7\x99t\n\
-XU\x06e\xfb\x0cg\xcb\xd73\xe2\x7ff\xb3r\x0c\x9aN\xceP\xb7\xb1\x89\xe3\'\x06\
-\t%L\x1a\xd6G\xe8\xfc`\x92#\xb9\xe0\x059\xd1\x07\x06*\x1b\x85\xd7\n\xf9l\x9e\
-R\xbe\x9b\xf6[\x04\xe5\xce\x10\xb6c\xe0\x0b\x9dHBR\xdb\xec\xd0\xb2\xd4\xa6yi\
-\x89=\x9dm\xbc\xf2z\x13\xc5R\x9a\xf4\xa0BzA\x1e\xdc|\x88\xeaV\x833\x07\x83\
-\x14s\x1aVTp\xf3W\xb3\x84\xab\xe1\xa5\xff\xb8\x8f\xa3]Y\x0c]C\xd9:\x0f?\xd9\
-\xc5u\xb7i\x1c\xdd\x1daj\xdc"V\xafX\xf1\x95,=\xbd)\xf6\x1fZ\xc2\xd7Vw\xb3he\
-\x84\xaaZ\x9f\xf4\x80\xc5\xb1\x133\xd8N\xe9\xbc\xcftZQ\x1d\x81\xcd\xcf\x9c\
-\xe6\xdc\xd1\x00\xc7\xdf\x0f\xa1\x99\x825\x9b\xb34_\x97g\xdf\x8e$\xd1\xa4\
-\xc7\xd93Ul{s=\xd9\xc9\xcbh\x1e\xcc\x11\xab\xcaR,\xf4\xd0\xb2|\x92\x86\xb6"\
-\xddg\xa3|x,\x8f\x80y\xc7W\x9b\xca`\x17\x0e\xd1\xbcF\'V\xe73\xd0?\xce\xb1\
-\xe3\x93\xd8Nv\xces\xde\xbb\xdf\xe5\xe1M\x0ey\xa7DS{\x02!\xc7y{g\x89\x81\x01\
-yAN\xc4\xfa\xf5oU\x0eL]#\x08\x01[6vq\xe7\x9a\x1eR\xc9"B\xce\xa6&\x9b5\xc9\
-\xccX\x8cNF\xf8\xe5o\x96p\xf6\\5eW\xce\xb9ni\xfb4\x1b\x96\r\xd1\xd28\x83\xf2\
-\x14>\x1a]=\t\xf6\x1f\xaf\xa3\xa7?r~\xac\x94\x8a\xe5\xd7O\xb2q\xf5 \xa9x\x81\
-rY\xa2\xa4\xce\x87\x1fU\xb3\xb3\xb3\x91\\\xde\xe0\xde;\x87X\xdf1I\xd9\xd7x\
-\xe3\xddF\x0e\x9f\xac\xba\xc0k\xc0\xf2\xb8}\xed(\xb7,\x1fB\xfa.R\x83\x91L\
-\x843\xe7\xaa\xd8\xb0l\x08\x10\xbc\xf1\xeeb\x0e\x9f\xac\xbe\xacf6g \x04\xdc{\
-\xe7\x08\xeb:&p}9Gw\xbe\xf1\xcd\xde\xa3\x97\r\x1dC\x94}\x8d\xd7\xdfm\xe3\xf0\
-\xc9\xb9\xe79\x0c\x1d\xfe\xe6\x9b9\xca\xfdC\xbc\xf5\xbd^\xbe\xf1O\x1d\xf4\
-\x8cE\xf9\xf6\xf3\x11>\xef\xe8\xa0X\xb0\xe0\xfb\x95\x06\xb9\xc6\x10\x02B\xc1\
-O\xd3\xe2\xba`;\x95\xe5\xf8/\x82u\xab\xca\xfc\xe0\xf9)^\xf8\xcb\x01\\O\xf0\
-\xe7\xff\xbc\x80g\xbe\x19\xe7\xbd\xbd\x9f\x7f\x94@\x1f\x1c\x1c\xbc\xc2\x16+T\
-\xb8z\xdc\xb4u\x82\xa9\xa1\x0c\xc7\x0e\xe6y\xe2\xb9\x00]\'l\xde\xda\xbe\x80\
-\x99\xec\x85\xd3+\x98]m\xafP\xe1\xff\r\xe1\xa0M4\x9a\xe7\xa1?\x86\x8d\xf7\
-\xda\xbc\xfcj\xe8\xa2\xcd\x01\xa0_Ao\x15*\\u^\xfc\xf7F\x82f\x1d\xd51\x9f\xe7\
-_\x92\xbc\xf6\xb3K\x9f\x8e\x14\xf0\xad\xca7H\x85\n\x17\xa12\xc5\xaaP\xe1\x12\
-T\x1a\xa4B\x85K\xf0?`M\x96s\\\xcam\xe7\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory001Bitmap():
- return wxBitmapFromImage(getDocFactory001Image())
-
-def getDocFactory001Image():
- stream = cStringIO.StringIO(getDocFactory001Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory001')
-catalog['DocFactory001'] = ImageClass()
-catalog['DocFactory001'].getData = getDocFactory001Data
-catalog['DocFactory001'].getImage = getDocFactory001Image
-catalog['DocFactory001'].getBitmap = getDocFactory001Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory002Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rc\
-IDATx\x9c\xed\x9bi\x8c]\xe5y\xc7\x7f\xef{\xb6\xbb\xce]\xe6\xcej\xcf\x8c=3\
-\x06\x0cc\x1b\xeffubH\xa8\xcdR6\x97\xa5\x85\xaaj\x15U\x05\xb5\xa2\xed\x87|\
-\x8c\xaa\xa8R\xd5\x055\x8a MRT\xb5\xa2\xa44N\x02!(6$\xc6\x06\xc7\x19/\x83\
-\xf1:\xc6\x9e\xc5\xb3\xdc\xd9g\xee\xcc]\xcf\xb9\xe7\x9c\xb7\x1f\x86\x18\x0c\
-\xd8\x1e\xb5`\xa3\xe6\xfe>^\xbd\xe7\xfc\xff\xcfy\x9eG\xe7\xbd\xef{^\xf1w\xdf\
-R\x8a\n\x15*|*z\xa8\xfaj[\xa8P\xe1\x8b\x8b\x1e\xac4H\x85\n\x17E\x0f\'\xae\
-\xb6\x85\n\x00\x02\x85\x81\x8d\xc4\xbb\xe0w\x17\x03\x17\xf3\xcay\x106\xda\
-\xc7<(\xa0\xac\x02xh\x9f\x8b\xae\xc4\xc7\x14%|$ee\xa1\x10\x9f\x8b\xce\xff\
-\x06=\x14\xbf\xda\x16*\x08|\x1a\n{\x88\xba\xe7\xf0?R\x9bR\x824u\xf2n\x9c\\\
-\xb0\x9d9}\t.\x81\xcf\xc9\x83G\x93\xfd&U^\xdf\x05\x1e\x00tKak5\xf4j\xdb(\x13\
-\xfaLu5\x1c\x96\xba?#P\x1eC3\x04\x13r\x05iy\xf3g\xaa\xf1\x7fA\x0fW\x1a\xe4\
-\xaac1N\x93\xfe\x1cg^\xabev8\x02\x08\x90\x12\xa9+\xc25E"\xf5E\xdaVN\xe3XK\
-\x18\x08\xfe5\x0eu\x9f\xb9\x87 \xa34\x15_\xe2\xd4O\xe2\xcc\xa6\x03 \x04\x08\
-\t@\xac\xd1f\xc5\x83oS4\xea\x99\xe2\xd6\xcfT7\xc4(\r\xf6\x8f8\xfe\xa3\x14\
-\xb1\xc5%Z\xd6uQ\x08^O\x99/Fa\xea\x91/\x86\x8f\xdfjBJ\x90\xd0\xd6 \xfc"RS\
-\x04\xe3\x02# P\x08J\xf9 \xe3\xa7$\xf9\xf1fV\xde#1\x8d_3\x18\xbe\xef\x82i\
-\x88\xf0=\x84[F\xf8\x1eJj(\xdd@\xc9O\x9f\x0e\t\xd7A\xbae\x80\x0b\xc6\x86\x94\
-NX\\\x8br\x0bH\x8d\xf3\x1e@\x90Zj\x12\nu`\x06\x9b\x88\xc8O\xde\xc7\xd7M\x94\
-\xa6#\x9d"\x08\x89oX\xf3\rv\x19M\x81"\xee\x17\t\xe7\x97#)\x91M\xc7\xb8.jQ\
-\x17\x9a$#?,\xcc\x05\xc5\xa7\xd4\x87\xfaf`^\xd3+\xe3\xeb\xd6\xbcV\xd9\x9e\
-\x1ff\x06>y\r\xe0\x9b\xc1\x0b<\xff\x06\xbd\xca\x1cZ@\n+|\x9eX\xca\x01c\x03\
-\x86\xfe6\xb1\x94\xcb\x8d\x7fp\x0bZ(\x08\xca\xa7\x9c\xb7\x19\xea\xeac\xecD\
-\x9as\x07S\\wW\x14\xc78KA\x04\x11\xca\xc3\xcc\xf4bfz\xf1\n%\x04j\xfe\xe5\x13\
-\x08`\xa7\x96\xe3T5\xc3\x07\x8d$\xfc2\xd6\\\x1f\xc6t\x0f\xcav\x005\xff\x820\
-\x02\x14koD\x0bW#\x03\xb7`Y\xbb\xd1R.7>\xb1\x19#\x12\x04\xc0.+\xa6\x8d\x082 \
-\x89\xf9}\x983g\xb1\xe6zQ\xb6\x8bR\n\xcc ^\xb0\x1a\xb3\x98F)p\xe2\xad\x94R\
-\x1d\x97\xd5\x0c\x0b\x9djo\x8e\xdc\xcc\np;\x11\x1a\x94\n\xabYb\x8d3b@I\x1a\
-\x0b\x8bO\xf9\x04\xd2\x870ri\xa4!q\xc3\rh\x85\t|\xbb\x8c0-\x1c\xbd\x16\x99\
-\x9dDH\x81\xbdx\x15^\xb4\x16\x00#}\x12cf\x08\x84\xa2\x1co\xa6\xdc\xb8\xfc\
-\x13\xb9\xd1#\x9c\xba\x125P\xe1\x12\x18BG\x98U\xe82\x87\x1e\x14\x18\xb1\x14\
-\x19\xab\x80\x07X\xa10mw\xac\xc7\xcb\xed$7\xdaK!s\r\tk\x0c\xdd\x9c#\x92=\x83\
-^\xce0rr\x9a\xc9\xa3Y<\xd7G\x0f\xea4nJ\xd0\x10\x1b\xa1X\\D!\xb8\x18\xa9<"\
-\xb9\xd3\xa8\xec,\x83o\x8f\x92\x1b\xb6\x11\x1a\x98\x11\x83\xea\x1b\xa2\xd4\
-\x86\xc6\xb0C\x1b\x11F\n]\xe6\xd1\x83`DS\x14\x02%\\<\xdc\xa0\x8b\xc38\x115B4\
-\xd7\r\xa5YF\xbb&\xc9\xf4\xe6\x01h\xdc\x94$\xde\x1cb\xfc\xd8,zX\xa7fM\x86\
-\x9c\xef\x10\xca\xf5^T\xb3.<\x85Y\xb5\x85\xd1\x03\xa7\x19\xdew\x00\xe5{()8\
-\xbd\xe3\xe7,\x7f\xe4\x01\x12\xda 8G\x17\x14\x9f\xaeJ\xc4\x02\'\xe8\xfdE\x9a\
-P\xadE\xf2\xfaQ\xa6\xba\xb3L\x1e\x9fc\xd9\x83IB\xde\x8f\x19\xf8U\x98x\xbbC\
-\xa2\xea-\xec\xc8v\xa4\x97%\xe0\xbeD\xfaH\x10\xb3\xca#\xde!p\xd4\x1f\xa1\x84\
-qAn\xf40\xfb\xaeBIT\xf8(\x1aI\x04w\xa23\x8d\x10\x02\xa1B\x98\xfc\n\x8fi\x94&\
-\xf1\xbc\xdbX\xb4\xb6\x83\xbe\x9d\xff\x86=1B,\x15#Q\x1eC\x14\x1a8\xf3\xc3\
-\x83\x14&\xc6\t\xc4cH\xd3\xc4\xc9\xcf0\xba7M1\xddF\xcbWWb\x98\'\xd1\x9d$\x9a\
-\xddB\xf7O~Hqb\x1c3\x1a\xc1\x08\x87A8\xe4\xfb\\\x1aWoA\xf3\x87\x10\xb4\xa03\
-\x85g\x17\xb1\xa7f1\x82\x16\xa6\xd0\xd0\x021J\xfa\x01\xf0r\x04\xdc6N\xbf\xf2\
-2\xf9\xd1Q\x02\x898\xd2\xb2\x98<t\x8e\xf1\xfd6\xbe[&T_Op\xd3\x9d\xe8v\x06y)\
-\xcd5w\xa2\x14\x04\xab"T\xd5J\xf2c\x03\x08)\t\xc7\x97\xa0\x07b\x18*\x8d\xbf\
-\xa0\xf8N\xa0\xa4\x87i\xac\xc5\x9f\xedf\xbcg\x82\x99\xf7B\x04\xab\x93,^\xdfJ\
-U\xcdrp\xc2\x18\xfe1\xf2\xefk,^\xd5B\xc1;\x84,\xf9\xe8Z\x07\xe5\xf1c\xc4k\
-\xea\x88W5\x90\xe7\x00\x1f\xdf5\xd7C\xec\xb9*EQ\xe1C\x04K\x10\xdc\x8b.&\x11\
-\x12\x84\x08\x12\xe0]\x14\xfd\x00H\xcd&X\xfd\x00\x01k\x04{\xf20\x1a\xab1D\
-\x07\x03\xfb^\xa0<q\x98\xc5\xb7n\xa7\xee\xe6m\xa0\xca\xb8\xc5"C\xbb\xfe\x95B\
-\xffn\n\xe9\x95D\xda\x17\x81_\xc3\xd0\xde\xff\xc6\x9dz\x8f\x96;\x1e#\xd1\xb1\
-\x01\x19\xf0\xd1\xb48\x9eSD\xe9\xd3\x98z\'\xc2\xdd\x82.&p\xb3g\xe9\xf9\xcfg\
-\x90\xa6Dh\x92\xc6\xcdO\x13]\xb6\x0c\xe5e\xc9\x9c\xee\xc6\x19\xefb\xf1m\x0fQ\
-w\xf36\x84\xee\xe3\xdb0\xfc\xe6\x0b\xcc\x9e\xd9\x8f\xa1k\x08\xb3\x1e\xdd\x8d\
-2\xb4\xf7\xa5Kj*k\x17\xb1k\xef"\xd6\xf64g_|\x06\xa1{\xb4\xdf\xff\x14\xc2\x9a\
-Fju\x0c\xec\xfb\xe9\xe5\xe3k\xabGY;\x11\xe6\x16t9\x83)Gh\xd9\xfag\xc4\xdaW\
-\xe1\x8b~T\xe0]\xc8-\xa3~\x9d\xc9\xc0\xeb\xffEi\xf6\xab\x04\x83E\x94\x97d\
-\xa6\xaf\x1b\x9d\x11R+\x1e\x81\xd0 A\xf1\x06|\xacE\xf4\xc0\xf8\x17g\xcd\xf9\
-\xb7\x16]\xc3\x0bD\xd0l\x89\x94\x02\xfc\x08\xd6\xb4\x06\xee|n\x94\x15\xc7\
-\xf5\xc3\x98%\x81\xe9\x85\x11*\x06e\x1f\xbb\x7f\x80P\xb0\x91\xba\r\x8f\xa2\
-\x95w"\xbd\x83H\xf3!\xea\xd6>\xccP\xefIJ}}\xc4\x96>\x8e\xe7\t\xec\xde\x1eB\
-\x81:j\xd6<\x84t\x7f\x8c,\xec\x03\x99@\x13:83PJ\xe2\x99\xa0\x95@/\x82\x15J\
-\xa0[Q\xa4\xa1a\x05Sh\xae\x8b\x92\xadd:\xff\x85P\xa0\x9e\xba\xf5\xdb\xd1\x9d\
-\x9f!JG\xf1\xad\'\xa9Yy\x1f\xc5\x93\x07\xd1\x1d\x1d\xa1\x12\xe0\x05.\xaf\x99\
-\x9b\x03=\x83g}\x03SE\x90J\xa0\xe9Uh\xf6\xcbx\xc6\x93\x0b\x8a\xaf\xaae;Za/\
-\x9e\x15C\xb35B\xe1\xc5\xc4Z\xb7\xa0;\xdf\x05\xe7(d=\x94^\xa2j\xd9V\x02\xd6\
-\x1bLw\x1e\xa2i\xfb\x9f\xe2\xf9y\xb2G^$\xd1\xb4\x1a3\xb9\x14\x99\xdf\x05Y\
-\xe0c{0:\xbb\x97^\xf9\x82\xa8p!\xb1Z\xd88\x86\x18\r\x82\x04\xec18P\x0b\xb3\n\
-\x0c\x0b\xb5a\x03\xa5\x81wQ\xa7BX\xed\xad\xc8\xd9)<\x91\xc2;#\xd0c\x8dP\x08 \
-\x0f\rC!\x88\xd6\x98\xc6j\xb8\rm\xb4\x11&b\xa8B\x02U,\xe2\xbe\x0fF\xa2\x1e\
-\x7f\xce@\xef\x9a\x82\xc2G\x97\x8a\xab!V\x03\xeb\xd2\x88\xd1\x00\x96\xd3N\
-\xeb\xf6\xbf@\x8bF\xc0\xf7\xf1\'\x87\x91G\xcf\xe24/\xc29Q\xc2H6"\xca\t\xc4\
-\x81Y\xc8\x05\x91-C\x18\xf57\xa1\x8d\xd4#\xbc$x\tTN]^\xf37\xba\xeb\x87\x91\
-\xa3\x01\x84\x14PJCw\x12\x7f\xa9\\P|\xe4\x13p\xb4\t6\xc4a46?E\xf5S\xd0\x19\
-\x81L3\x00"PF\xde\x1c%\x12\xbf\x99\xec\xdew\xb1o*`\xa7\xd3\x94\x8f\xb9\xd4\
-\xdfv/\x8c\xe6\xe1@\x00\xfcO\xf6\x82>\xfc\xdc\x93\x9fg\xea+,\x00\xa3U\x90\
-\xe8\x98\xa4pj\t\x12\r??\xcd\xec\xfe\xad \x15\xe6Z\x1f=\xeb2\xfc\xed\x11\n\
-\xa7o\xa1\xe6\x81F\x8aGl\xccUyTi\x13\xd93\x19\xbc\xec\x0cN\xe8q\xec\xf7\\B\
-\xcb,\xe6:\x07\x99\xdd\xd3A\xb0\xa1\x01\x7ff\x06\x11\x02\xca\xb7\x92\xd93\
-\x86\xf3\xe8\x18%\xf5{\xd8{\\\xf4&\x1d\xe3\x1a\r\xbb\xab\x8c\x97.\x92X>>\xef\
-Ah \nd\xfeQ\xe0\x0e\n\xdc\xe1\x1a\xb4\x86\x06\x92\x7f[\xc2\xcb\xac\xa7\xd0\
-\x9d\xa3<5\x8a\x13x\x84\xe2~\x9b\xf0\xb2\x00s\xfb\xfa\x98\xdd\xd3A\xe8\x9a\
-\x14~!\x8d\x90\xfee5K\xfbl\x8c%>\x89\xeb\'\xc9\x1foG \xf1\xf3\x13d^[G\xd5\
-\xd3\x85\x05\xc5\xe7Nf\x99\xde\xf1e\xe27\x8cP\xe8n\x9a_\xe6\xcd\x8f2\xf5\x83\
-\xbb(\xf7\x96\xcf?\xe3\xd0@\x80\xd8\xda\x87\x19~~\x8e\x93\x7f\xb2\x13Ut\xb1\
-\x1a\xee\xc2Z\xbc\x91\xcc\xb7G(\xfe\xf2\xf7?57\xfa+k6^\xa12\xa8p1\xaa\xeb\
-\xe7\xb8\x97\xbd\x9cKU\xe3\x14%\xb5\xc3\xc3p\xbfE~\x1a\xb2\xa3\x0e\xbd\xdf\
-\xb2\xc9\xe4R\\\xf7\x87\xf5\x18\xcb\xcb\xbc\xb9\xa3\x99\x1bb\x83D\x9fh\xe7\
-\xc8\xdf\x9fa\xf4\xd9\xbd\xb4\xdd\xb9\x08\xb9:H\xe9D\x9e\xd3od(\xb6\xb6S\xb7\
-9Nw\xbfC"\x95%\xfcX\x1b]\xff\xe03\xf1\xbdN\xda\xee\xa8G\xdd\x15E\xb7@7\\\x92\
-_\x8bppW+\xb7\xcb]\x9cK%Aj\xb43\xcc\x1b\x91\xfb\x98J&!\tRS|e\xe0 \xfa\x03\
-\xad\x1c\xf9\xfe\x00\x85\x1f\x1c\xa4q}-\xfeF\x93\xa1\x0f4sMm$\xeb,Z\xdd\x01\
-\xb23\xc6e5\xdf\x8e\xaeF`s\xafx\x95\xbe\x9aj\x944h\x15i~\x99\\\xc3\x9a\xfe\
-\xfe\x85\xc57\xe4rz\xe92\xeeQ\x87\x18H\xc6\x10Rr\xad\x1ad\xf7u\xeb\x99\x8a\
-\x87\xcf?\xe3\xd8\x9c`[\xb3\xcb\xf4\xed\xeb\x19;1\x02!\x9d\xb5\x0fof6W\xc5+N\
-\x1c{\xcd\xa7\x7f\xd4\xae\x9f\xf6\x0bW\xaa\x0e*\\\x84F\x7f\x16\xdb\xeeg\xd2)\
-15\xa13\xf8\xcd4h:\xb6c\xa0\x84\x06B\xb2d\x85K\xc7\xef\xe69|\xb4\x8d\xb7\xfa\
-B\x8c\xeba\x9exp\x9c\xc5[\r\x8e\xfc<\xc7\xa9\xe7{PR\xc3\x17\x06\xe1\x84d\xc5\
-=\x12\xb3f\x8c\xd7v\xac\xa0\xb1\xd6\xe7\xe1m\x13\xd4}I\xe3\xf4\xfe<\xa7\xbe\
-\xd3\x7f~lu\x93\xe4\xbe\xbf2\x98\xd4\x82\xd8\xa5\xb3L\x96\xc3XQ\x89c\x8f\xd3\
-S\xce1\xe6\x7f\xb0\xb1\xe6\x83\xdb\x99\xe0\xd1m9\xc2\xab$]\xfb&9\xf8N\x06%5\
-\xa2\xb5\x06\x8b\xae\x93\x8c\x94$\xc1H\x1e\xbb\xd8\xc3;GV\xf1;\x9b/\xad9\xa2\
-7\xe18>\xa5B/\xa3v5\xc1\x98C\xd9\x9e\xe4L)\xcf\xec\xd1\x85\xc5\xf7\xfa\x8e\
-\x15H9\x8bS:\xc3\xb4S\xc0\xaa2(\xdbg\xe9)_\xcb\x98\xff\x91\xcd\xca\th:5G\xdd\
-\xe6&N\x9c\x1c&\x940i\xd8\x18\xa1\xf3\xddi\x8e\xe6\x82\x17\xcd\x8d>4T\xd9(\
-\xbc\xda\xe4\xb3yJ\xf9^\xdao\x12\x94;C\xd8\x8e\x81/t"\tIm\xb3C\xcbr\x9b\xe6\
-\xe5%\xf6u\xb6\xf1\xe2+M\x14Ki\xd2\xc3\n\xe9\x05\xb9\x7fk\x17\xd5\xad\x06g\
-\x0f\x07)\xe64\xac\xa8\xe0\xc6/g\tW\xc3w\xfe\xe3\x1e\x8eug1t\re\xeb<\xf8x7\
-\xd7\xdc\xa2qlo\x84\x99I\x8bX\xbdb\xd5\x97\xb2\xf4\xf5\xa78\xd8\xb5\x8c\xaf\
-\xac\xede\xc9\xea\x08U\xb5>\xe9!\x8b\xe3\'\xe7\xb0\x9d\xd2y\x9f\xe9\xb4\xa2:\
-\x02[\x9f:\xc3\xb9c\x01N\xbc\x13B3\x05\xeb\xb6fi\xbe&\xcf\x81]I\xa2I\x8f\x9e\
-\xb3U\xecxm#\xd9\xe9\xcbh\x1e\xce\x11\xab\xcaR,\xf4\xd1\xb2r\x9a\x86\xb6"\
-\xbd=Q\xde;\x9eG\xc0\x82\xe3\xabMe\xb0\x0b]4\xaf\xd3\x89\xd5\xf9\x0c\rNr\xfc\
-\xc44\xb6\x93\xbd\xe09\xef?\xe8\xf2\xe0\x16\x87\xbcS\xa2\xa9=\x81\x90\x93\
-\xbc\xb1\xbb\xc4\xd0\x90\xbchn\xc4\xc6\x8d\xafW\x0eL]e\x84\x80m\x9b\xbb\xb9}\
-]\x1f\xa9d\x11!\xe7S\x92\xcd\x9ad\xe6,\xc6\xa7#\xfc\xe2\xd7\xcb\xe89WM\xd9\
-\x95\x17\\\xb7\xbc}\x96M+Fhi\x9cCy\n\x1f\x8d\xee\xbe\x04\x07O\xd4\xd17\x189?\
-VJ\xc5\xcak\xa7\xd9\xbcv\x98T\xbc@\xb9,QR\xe7\xbd\xf7\xab\xd9\xdd\xd9H.op\
-\xf7\xed#l\xec\x98\xa6\xeck\xbc\xfaV#GNU}\xc2k\xc0\xf2\xb8u\xfd87\xad\x1cA\
-\xfa.R\x83\xb1L\x84\xb3\xe7\xaa\xd8\xb4b\x04\x10\xbc\xfa\xd6R\x8e\x9c\xaa\
-\xbe\xacf6g \x04\xdc}\xfb\x18\x1b:\xa6p}y\x81\xeeB\xe3\x9b\xbfG?\x9b:F(\xfb\
-\x1a\xaf\xbc\xd5\xc6\x91S\x17\x9e\xe30t\xf8\x9b\xaf\xe7(\x0f\x8e\xf0\xfaw\
-\xfb\xf9\xda?u\xd07\x11\xe5\x9b\xcfF\xb8\xd4\x91A\xb1h\xd1\xf7*\r\xf2\x05A\
-\x08\x08\x05?L\x87\xeb\x82\xedT\x96\xe1?\x0b6\xac)\xf3\xfdggx\xee/\x87p=\xc1\
-\x9f\xff\xf3"\x9e\xfaz\x9c\xb7\xf7_\xfa(\x81><<|\x85,V\xa8p\xf5\xb8a\xfb\x14\
-3#\x19\x8e\x1f\xce\xf3\xd83\x01\xbaO\xda\xbc\xbes\x11s\xd9\x8bO\xaf`~\xd5\
-\xbdB\x85\xff\xf7\x84\x836\xd1h\x9e\x07\xfe\x186\xdfm\xf3\xc2K\xa1\xcb6\x07\
-\x80~\x05\xbcU\xa8p\xd5y\xfe\xdf\x1b\t\x9auT\xc7|\x9e\xfd\x8e\xe4\xe5\x9f.\
-\xect\xa4\x80oT\xfe\x83T\xa8p\x11*S\xac\n\x15.A\xa5A*T\xb8\x04\xff\x03D\xe1\
-\x96sL\xad_\xbf\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory002Bitmap():
- return wxBitmapFromImage(getDocFactory002Image())
-
-def getDocFactory002Image():
- stream = cStringIO.StringIO(getDocFactory002Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory002')
-catalog['DocFactory002'] = ImageClass()
-catalog['DocFactory002'].getData = getDocFactory002Data
-catalog['DocFactory002'].getImage = getDocFactory002Image
-catalog['DocFactory002'].getBitmap = getDocFactory002Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory003Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rd\
-IDATx\x9c\xed\x9bil\x1d\xd7y\x86\x9fsf\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb\xfe\xc8\xcf\xa0\
-\x08\n\x14]\x8c\x06\x81\xed,5\x8a\x16\x8e\x137Jb\xc71"\xd9\x89,\xd9\x8aBm\
-\x96\xb5R\x96DR\\.w\xf2\x92w\x9d\xb93s\xfa\x83\xael\xc5\x96\xc8\xa2\x92e\xd4\
-\xf7\xf9yqf\xde\xf7\x9b\xef\xfb0\xe7\x9e3G\xfc\xc3\xb7\x94\xa2B\x85\n\x9f\
-\x8a\x1e\xaa\xbe\xda\x16*T\xf8\xfc\xa2\x07+\rR\xa1\xc2E\xd1\xc3\x89\xabm\xe1\
-\x8b\x8d@a`#\xf1.\xf8\xdd\xc5\xc0\xc5\xfc\xec<\x08\x1b\xedw<(\xa0\xac\x02xhW\
-DW\xe2c\x8a\x12>\x92\xb2\xb2P\x88+\xa2\xf3\x7fA\x0f\xc5\xaf\xb6\x85/.\x02\
-\x9f\x86\xc2.\xa2\xee9\xfc\x8f\xd5\xa6\x94 M\x9d\xbc\x1b\'\x17lgF_\x84K\xe0\
-\ny\xf0h\xb2\xdf\xa2\xca\xeb\xb9\xc0\x03\x80n)l\xad\x86nm\x0beB\x97UW\xc3a\
-\xb1\xfb\x0b\x02\xe5\x114C0&\x97\x91\x967_V\x8d\xcb\x81\x1e\xae4\xc8U\xc3b\
-\x94&\xfd9N\xbf^\xcb\xf4`\x04\x10 %RW\x84k\x8aD\xea\x8b\xb4-\x9f\xc4\xb1\x16\
-\xd1\x17\xfc[\x1c\xea.\xbb\x87 \xc34\x15_\xe6\xe4\xcf\xe2L\xa7\x03 \x04\x08\
-\t@\xac\xd1f\xd9\x83\xefP4\xea\x99\xe0\xd6\xcb\xaa\x1bb\x98\x06\xfb\'\x1c\
-\xfbI\x8a\xd8\xc2\x12-k\x0eQ\x08^O\x99\xcfWA\xea\x91\xcf\x97\x9f/\x14!%Hh\
-\xab\x10~\x11\xa9)\x82q\x81\x11\x10(\x04\xa5|\x90\xd1\x93\x92\xfch3\xcb\xef\
-\x91\x98\xc6o\xe9\x0f\xdfw\xc14D\xf8\x1e\xc2-#|\x0f%5\x94n\xa0\xe4\xa7O\x87\
-\x84\xeb \xdd2\xc0\x05cCJ\',\xaeE\xb9\x05\xa4\xc6y\x0f H-6\t\x85:0\x83MD\xe4\
-\'\xef\xe3\xeb&J\xd3\x91N\x11\x84\xc47\xac\xd9\x06\x9bCS\xa0\x88\xfbE\xc2\
-\xf9\xa5HJd\xd31\xae\x8bZ\xd4\x85\xc6\xc9\xc8\x8f\nr^\xf1)\xf5\x91\xbe\x19\
-\x98\xd5\xf4\xca\xf8\xba5\xabU\xb6g\x87\x99\x81O^\x03\xf8f\xf0\x02\xcf\xbf\
-\x8b^e\x0e\\"\x85\x15\xae$\x96r\xc0X\x87\xa1\xbfC,\xe5r\xe3\x1f\xdd\x82\x16\
-\n\x82\xf2)\xe7m\x06\x0e\xf50r<\xcd\xb9\xfd)\xae\xbb+\x8ac\x9c\xa1 \x82\x08\
-\xe5af\xba13\xddx\x85\x12\x025\xfb\xf2\t\x04\xb0SKq\xaa\x9a\xe1\xc3F\x12~\
-\x19k\xa6\x07c\xf2,\xcav\x005\xfb\x820\x02\x14koD\x0bW#\x03\xb7`Y;\xd1R.7>\
-\xb1\x11#\x12\x04\xc0.+&\x8d\x082 \x89\xf9=\x98Sg\xb0f\xbaQ\xb6\x8bR\n\xcc ^\
-\xb0\x1a\xb3\x98F)p\xe2\xad\x94R\x1dsj\x86\x85N\xb57Cnj\x19\xb8\x9d\x08\rJ\
-\x85\x95,\xb2F\x192\xa0$\x8d\xf9\xc5\xa7|\x02\xe9\x03\x18\xb94\xd2\x90\xb8\
-\xe1\x06\xb4\xc2\x18\xbe]F\x98\x16\x8e^\x8b\xcc\x8e#\xa4\xc0^\xb8\x02/Z\x0b\
-\x80\x91>\x8115\x00BQ\x8e7Sn\\z\xd1\x1c\xe9\x11N^\xc9\x1a\xa8p\t\x0c\xa1#\
-\xcc*t\x99C\x0f\n\x8cX\x8a\x8cU\xc0\x03\xacP\x98\xb6;\xd6\xe2\xe5\xb6\x93\
-\x1b\xee\xa6\x90\xb9\x86\x845\x82n\xce\x10\xc9\x9eF/g\x18:1\xc9\xf8\x91,\x9e\
-\xeb\xa3\x07u\x1a7$h\x88\rQ,.\xa0\x10\\\x88T\x1e\x91\xdc)Tv\x9a\xfew\x86\xc9\
-\r\xda\x08\r\xcc\x88A\xf5\rQjC#\xd8\xa1\xf5\x08#\x85.\xf3\xe8A0\xa2)\n\x81\
-\x12.\x1en\xd0\xc5a\x94\x88\x1a"\x9a\xeb\x82\xd24\xc3\x87\xc6\xc9t\xe7\x01h\
-\xdc\x90$\xde\x1cb\xf4\xe84zX\xa7fU\x86\x9c\xef\x10\xcau_T\xb3.<\x81Y\xb5\
-\x89\xe1}\xa7\x18\xdc\xb3\x0f\xe5{()8\xb5\xed\x97,}\xe4\x01\x12Z?8G\xe6\x15\
-\x9f\xaeJ\xc4\x02\xc7\xe9\xfeU\x9aP\xadE\xf2\xfaa&\xba\xb2\x8c\x1f\x9ba\xc9\
-\x83IB\xdeO\xe9\xfbM\x98x\xbbC\xa2\xeam\xec\xc8V\xa4\x97%\xe0\xbeL\xfap\x10\
-\xb3\xca#\xde!p\xd4\x9f\xa0\x84\xf1\xa99\xd2\xc3\xec\xf9\x0cK\xa2\xc2\xc7\
-\xd1H"\xb8\x13\x9dI\x84\x10\x08\x15\xc2\xe47xL\xa24\x89\xe7\xdd\xc6\x82\xd5\
-\x1d\xf4l\xffw\xec\xb1!b\xa9\x18\x89\xf2\x08\xa2\xd0\xc0\xe9\x1f\xef\xa706J \
-\x1eC\x9a&N~\x8a\xe1\xddi\x8a\xe96Z\xbe\xba\x1c\xc3<\x81\xee$\xd1\xec\x16\
-\xba~\xf6c\x8ac\xa3\x98\xd1\x08F8\x0c\xc2!\xdf\xe3\xd2\xb8r\x13\x9a?\x80\xa0\
-\x05\x9d\t<\xbb\x88=1\x8d\x11\xb40\x85\x86\x16\x88Q\xd2\xf7\x81\x97#\xe0\xb6\
-q\xea\xd5W\xc8\x0f\x0f\x13H\xc4\x91\x96\xc5\xf8\x81s\x8c\xee\xb5\xf1\xdd2\
-\xa1\xfaz\x82\x1b\xeeD\xb73\xc8Ki\xae\xba\x13\xa5 X\x15\xa1\xaaV\x92\x1f\xe9\
-CHI8\xbe\x08=\x10\xc3Pi\xfcy\xc5w\x1c%=Lc5\xfet\x17\xa3g\xc7\x98z?D\xb0:\xc9\
-\xc2\xb5\xadT\xd5,\x05\'\x8c\xe1\x1f%\xff\x81\xc6\xc2\x15-\x14\xbc\x03\xc8\
-\x92\x8f\xaeuP\x1e=J\xbc\xa6\x8exU\x03y\xf6q\xb1\xddr=\xc4\xae\xcf\xb4(*|\
-\x84`\x11\x82{\xd1\xc58B\x82\x10A\x02\xbc\x87\xa2\x17\x00\xa9\xd9\x04\xab\
-\x1f `\ra\x8f\x1fDc%\x86\xe8\xa0o\xcf\x8b\x94\xc7\x0e\xb2\xf0\xd6\xad\xd4\
-\xdd\xbc\x05T\x19\xb7Xd`\xc7\xbfQ\xe8\xddI!\xbd\x9cH\xfb\x02\xf0k\x18\xd8\
-\xfd_\xb8\x13\xef\xd3r\xc7c$:\xd6!\x03>\x9a\x16\xc7s\x8a(}\x12S\xefD\xb8\x9b\
-\xd0\xc5\x18n\xf6\x0cg\x7f\xf0\x0c\xd2\x94\x08M\xd2\xb8\xf1i\xa2K\x96\xa0\
-\xbc,\x99S]8\xa3\x87Xx\xdbC\xd4\xdd\xbc\x05\xa1\xfb\xf86\x0c\xbe\xf5"\xd3\
-\xa7\xf7b\xe8\x1a\xc2\xacGw\xa3\x0c\xec~\xf9\x92\x9a\xca\xdaA\xec\xda\xbb\
-\x88\xb5=\xcd\x99\x97\x9eA\xe8\x1e\xed\xf7?\x85\xb0&\x91Z\x1d}{~>w|m\xf5(k;\
-\xc2\xdc\x84.\xa70\xe5\x10-\x9b\xff\x82X\xfb\n|\xd1\x8b\n\xbc\x07\xb9%\xd4\
-\xaf1\xe9{\xe3G\x94\xa6\xbfJ0XDyI\xa6z\xba\xd0\x19"\xb5\xec\x11\x08\xf5\x13\
-\x14o\xc2EZD\x0f\x8c~\xfe\xd6\x9e\xbf0\xe8\x1a^ \x82fK\xa4\x14\xe0G\xb0&5pgs\
-\xa2\xac8\xae\x1f\xc6,\tL/\x8cP1(\xfb\xd8\xbd}\x84\x82\x8d\xd4\xad{\x14\xad\
-\xbc\x1d\xe9\xedG\x9a\x0fQ\xb7\xfaa\x06\xbaOP\xea\xe9!\xb6\xf8q<O`w\x9f%\x14\
-\xa8\xa3f\xd5CH\xf7\xa7\xc8\xc2\x1e\x90\t4\xa1\x833\x05\xa5$\x9e\tZ\t\xf4"X\
-\xa1\x04\xba\x15E\x1a\x1aV0\x85\xe6\xba(\xd9J\xa6\xf3;\x84\x02\xf5\xd4\xad\
-\xdd\x8a\xee\xfc\x02Q:\x82o=I\xcd\xf2\xfb(\x9e\xd8\x8f\xee\xe8\x08\x95\x00/0\
-\xb7fn\x06\xf4\x0c\x9e\xf5\rL\x15A*\x81\xa6W\xa1\xd9\xaf\xe0\x19O\xce+\xbe\
-\xaa\x96\xadh\x85\xddxV\x0c\xcd\xd6\x08\x85\x17\x12k\xdd\x84\xee|\x17\x9c#\
-\x90\xf5Pz\x89\xaa%\x9b\tXo2\xd9y\x80\xa6\xad\x7f\x8e\xe7\xe7\xc9\x1e~\x89D\
-\xd3J\xcc\xe4bd~\x07d\x81\x8b\xec\xc1\xe8\xec\\\xfc\xd9\x15D\x85\x0b\x89\xd5\
-\xc2\xfa\x11\xc4p\x10$`\x8f\xc0\xbeZ\x98V`X\xa8u\xeb(\xf5\xbd\x87:\x19\xc2jo\
-ENO\xe0\x89\x14\xdei\x81\x1ek\x84B\x00y`\x10\nA\xb4\xc64V\xc3mh\xc3\x8d0\x16\
-C\x15\x12\xa8b\x11\xf7\x030\x12\xf5\xf83\x06\xfa\xa1\t(||\xa9\xb8\x1ab5\xb0&\
-\x8d\x18\x0e`9\xed\xb4n\xfd+\xb4h\x04|\x1f\x7f|\x10y\xe4\x0cN\xf3\x02\x9c\
-\xe3%\x8cd#\xa2\x9c@\xec\x9b\x86\\\x10\xd92\x80Q\x7f\x13\xdaP=\xc2K\x82\x97@\
-\xe5\xd4\xdc\x9a\xff\xa3\xbbv\x109\x1c@H\x01\xa54t%\xf1\x17\xcby\xc5G>\x01G\
-\x9a`]\x1c\x86c\xb3ST?\x05\x9d\x11\xc84\x03 \x02e\xe4\xcdQ"\xf1\x9b\xc9\xee~\
-\x0f\xfb\xa6\x02v:M\xf9\xa8K\xfdm\xf7\xc2p\x1e\xf6\x05\xc0\xbfx\x0f\xe8\x83\
-\xcf=y%R_a\x1e\x18\xad\x82D\xc78\x85\x93\x8b\x90h\xf8\xf9I\xa6\xf7n\x06\xa90\
-W\xfb\xe8Y\x97\xc1o\x0fQ8u\x0b5\x0f4R<lc\xae\xc8\xa3J\x1b\xc8\x9e\xce\xe0e\
-\xa7pB\x8fc\xbf\xef\x12Zb1\xd3\xd9\xcf\xf4\xae\x0e\x82\r\r\xf8SS\x88\x10P\
-\xbe\x95\xcc\xae\x11\x9cGG(\xa9?\xc0\xde\xe5\xa27\xe9\x18\xd7h\xd8\x87\xcax\
-\xe9"\x89\xa5\xa3\xb3\x1e\x84\x06\xa2@\xe6\x9f\x05n\xbf\xc0\x1d\xacAkh \xf9\
-\xf7%\xbc\xccZ\n]9\xca\x13\xc38\x81G(\xee\xb5\t/\t0\xb3\xa7\x87\xe9]\x1d\x84\
-\xaeI\xe1\x17\xd2\x08\xe9\xcf\xa9Y\xdacc,\xf2I\\?N\xfeX;\x02\x89\x9f\x1f#\
-\xf3\xfa\x1a\xaa\x9e.\xcc+>w<\xcb\xe4\xb6/\x13\xbfa\x88BW\xd3\xec2o~\x98\x89\
-\x1f\xdeE\xb9\xbb|\xfe\x19\x87\xfa\x02\xc4V?\xcc\xe0\xf33\x9c\xf8\xb3\xed\
-\xa8\xa2\x8b\xd5p\x17\xd6\xc2\xf5d\xbe=D\xf1\xd7\x7fx\xc9\x1c\xe9\xaf\xaeZ\
-\x7f\x85\xcb\xa0\xc2\xc5\xa8\xae\x9f\xe1^vs.U\x8dS\x94\xd4\x0e\x0e\xc2\xfd\
-\x16\xf9I\xc8\x0e;t\x7f\xcb&\x93Kq\xdd\x1f\xd7c,-\xf3\xd6\xb6fn\x88\xf5\x13}\
-\xa2\x9d\xc3\xffx\x9a\xe1gw\xd3v\xe7\x02\xe4\xca \xa5\xe3yN\xbd\x99\xa1\xd8\
-\xdaN\xdd\xc68]\xbd\x0e\x89T\x96\xf0cm\x1c\xfa\'\x9f\xb1\xefu\xd2vG=\xea\xae\
-(\xba\x05\xba\xe1\x92\xfcZ\x84\xfd;Z\xb9]\xee\xe0\\*\tR\xa3\x9dA\xde\x8c\xdc\
-\xc7D2\tI\x90\x9a\xe2+}\xfb\xd1\x1fh\xe5\xf0\xf7\xfb(\xfcp?\x8dkk\xf1\xd7\
-\x9b\x0c|\xa8\x99kj#Yg\xd1\xea\xf6\x91\x9d2\xe6\xd4|\'\xba\x12\x81\xcd\xbd\
-\xe25zj\xaaQ\xd2\xa0U\xa4\xf9ur\x15\xabz{\xe7\x17\xdf\x80\xcb\xa9\xc5K\xb8G\
-\x1d\xa0/\x19CH\xc9\xb5\xaa\x9f\x9d\xd7\xade"\x1e>\xff\x8cc3\x82-\xcd.\x93\
-\xb7\xafe\xe4\xf8\x10\x84tV?\xbc\x91\xe9\\\x15\xaf:q\xecU\x97\xfe\x98]?\xe5\
-\x17\xaet\x1dT\xb8\x08\x8d\xfe4\xb6\xdd\xcb\xb8SbbL\xa7\xff\x9bi\xd0tl\xc7@\
-\t\r\x84d\xd12\x97\x8e\xdf\xcfs\xf0H\x1bo\xf7\x84\x18\xd5\xc3<\xf1\xe0(\x0b7\
-\x1b\x1c\xfee\x8e\x93\xcf\x9fEI\r_\x18\x84\x13\x92e\xf7H\xcc\x9a\x11^\xdf\
-\xb6\x8c\xc6Z\x9f\x87\xb7\x8cQ\xf7%\x8dS{\xf3\x9c|\xa1\xf7\xfc\xd8\xea&\xc9}\
-\x7fc0\xae\x05\xb1Kg\x18/\x87\xb1\xa2\x12\xc7\x1e\xe5l9\xc7\x88\xff\xe1\xc6\
-\x9a\x0fng\x82G\xb7\xe4\x08\xaf\x90\x1c\xda3\xce\xfew3(\xa9\x11\xad5Xp\x9dd\
-\xa8$\tF\xf2\xd8\xc5\xb3\xbc{x\x05\xbf\xb7\xf1\xd2\x9aCz\x13\x8e\xe3S*t3lW\
-\x13\x8c9\x94\xedqN\x97\xf2L\x1f\x99_|ol[\x86\x94\xd38\xa5\xd3L:\x05\xac*\
-\x83\xb2}\x86\xb3\xe5k\x19\xf1?\xb6Y9\x06M\'g\xa8\xdb\xd8\xc4\xf1\x13\x83\
-\x84\x12&\r\xeb#t\xbe7\xc9\x91\\p\xce\x1c\xe9\x03\x03\x95\x8d\xc2\xabE>\x9b\
-\xa7\x94\xef\xa6\xfd&A\xb93\x84\xed\x18\xf8B\'\x92\x90\xd46;\xb4,\xb5i^ZbOg\
-\x1b/\xbd\xdaD\xb1\x94&=\xa8\x90^\x90\xfb7\x1f\xa2\xba\xd5\xe0\xcc\xc1 \xc5\
-\x9c\x86\x15\x15\xdc\xf8\xe5,\xe1jx\xe1?\xef\xe1hW\x16C\xd7P\xb6\xce\x83\x8f\
-wq\xcd-\x1aGwG\x98\x1a\xb7\x88\xd5+V|)KOo\x8a\xfd\x87\x96\xf0\x95\xd5\xdd,Z\
-\x19\xa1\xaa\xd6\'=`q\xec\xc4\x0c\xb6S:\xef3\x9dVTG`\xf3S\xa79w4\xc0\xf1wCh\
-\xa6`\xcd\xe6,\xcd\xd7\xe4\xd9\xb7#I4\xe9q\xf6L\x15\xdb^_Ovr\x0e\xcd\x839bUY\
-\x8a\x85\x1eZ\x96O\xd2\xd0V\xa4\xfbl\x94\xf7\x8f\xe5\x110\xef\xf8jS\x19\xec\
-\xc2!\x9a\xd7\xe8\xc4\xea|\x06\xfa\xc79v|\x12\xdb\xc9^\xf0\x9c\xf7\xeewyp\
-\x93C\xde)\xd1\xd4\x9e@\xc8q\xde\xdcYb`@\xce\x99#\xb1~\xfd\x1b\x95\x03SW\t!`\
-\xcb\xc6.n_\xd3C*YD\xc8\xd9Td\xb3&\x99\x19\x8b\xd1\xc9\x08\xbf\xfa\xed\x12\
-\xce\x9e\xab\xa6\xec\xca\x0b\xae[\xda>\xcd\x86eC\xb44\xce\xa0<\x85\x8fFWO\
-\x82\xfd\xc7\xeb\xe8\xe9\x8f\x9c\x1f+\xa5b\xf9\xb5\x93l\\=H*^\xa0\\\x96(\xa9\
-\xf3\xfe\x07\xd5\xec\xecl$\x977\xb8\xfb\xf6!\xd6wLR\xf65^{\xbb\x91\xc3\'\xab\
->\xe15`y\xdc\xbav\x94\x9b\x96\x0f!}\x17\xa9\xc1H&\xc2\x99sUlX6\x04\x08^{{1\
-\x87OV\xcf\xa9\x99\xcd\x19\x08\x01w\xdf>\xc2\xba\x8e\t\\_^\xa0;\xdf\xf8f\xef\
-\xd1\xcb\x86\x8e!\xca\xbe\xc6\xabo\xb7q\xf8\xe4\x85\xe77\x0c\x1d\xfe\xee\xeb\
-9\xca\xfdC\xbc\xf1\xdd^\xbe\xf6/\x1d\xf4\x8cE\xf9\xe6\xb3\x11\xe6sTP,X\xf0\
-\xbdJ\x83\\e\x84\x80P\xf0\xa34\xb8.\xd8Ne\xf9\xfdr\xb0nU\x99\xef?;\xc5s\x7f=\
-\x80\xeb\t\xfe\xf2_\x17\xf0\xd4\xd7\xe3\xbc\xb3w~G\t\xf4\xc1\xc1\xc1+l\xb1B\
-\x85\xab\xc7\r[\'\x98\x1a\xcap\xec`\x9e\xc7\x9e\t\xd0u\xc2\xe6\x8d\xed\x0b\
-\x98\xc9\xce=\xbd\x82\xd9\xd5\xf7\n\x15\xfe\xdf\x12\x0e\xdaD\xa3y\x1e\xf8S\
-\xd8x\xb7\xcd\x8b/\x87\xe6\xdd\x1c\x00\xfa\x15\xf4V\xa1\xc2U\xe7\xf9\xffh$h\
-\xd6Q\x1d\xf3y\xf6\x05\xc9+?\xff\xdf\x9d\x8e\x14\xf0\x8d\xca\x7f\x90\n\x15.B\
-e\x8aU\xa1\xc2%\xa84H\x85\n\x97\xe0\xbf\x01)u\x96s1\xa7x\x1f\x00\x00\x00\x00\
-IEND\xaeB`\x82'
-
-def getDocFactory003Bitmap():
- return wxBitmapFromImage(getDocFactory003Image())
-
-def getDocFactory003Image():
- stream = cStringIO.StringIO(getDocFactory003Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory003')
-catalog['DocFactory003'] = ImageClass()
-catalog['DocFactory003'].getData = getDocFactory003Data
-catalog['DocFactory003'].getImage = getDocFactory003Image
-catalog['DocFactory003'].getBitmap = getDocFactory003Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory004Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rd\
-IDATx\x9c\xed\x9bil\\\xd7y\x86\x9fs\xee6+g\xe1p\x95HJ$e[6%Y\xbb\xbc*\x91\x9d\
-\xb8\x92\x97zS\xbd\xb4vQ\xb4\x08\x8a\xdah\xe1\xb6?\xf23(\x82\x02E\x17\xa3A`\
-\xa7Ij\x14-\\\xa7n\x94\xc4\x8ecD\xb2\x13Y\xb2\x15\x85\xda,k\xa5,\x89\xa4\xb8\
-\x0cwr\xc8Y\xef\x9d{\xef\xe9\x0f\xba\xb2UG"]h1\x9cy~\x0e\xce\xbd\xef\xfb\x9d\
-\xef\xfb0g\xce\x99#\xfe\xee[JQ\xa1B\x85\xdf\x88\x1e\xaa\xbe\xd6\x16*T\xf8\
-\xfc\xa2\x07+\rR\xa1\xc2E\xd1\xc3\x89km\xe1\xb7\x13\x81\xc2\xc0F\xe2]\xf0\
-\xb9\x8b\x81\x8by\xf5<\x08\x1b\xed\xffxP@Y\x05\xf0\xd0\xae\x88\xae\xc4\xc7\
-\x14%|$ee\xa1\x10WD\xe7r\xa0\x87\xe2\xd7\xda\xc2o\x1f\x02\x9f\x86\xc2.\xa2\
-\xee9\xfcO\xd4\xa6\x94 M\x9d\xbc\x1b\'\x17lgF_\x84K\xe0\ny\xf0h\xb2\xdf\xa6\
-\xca\xeb\xb9\xc0\x03\x80n)l\xad\x86nm\x0beB\x97UW\xc3a\xb1\xfb3\x02\xe5\x114\
-C0&\x97\x91\x96\xb7^V\x8d\xcb\x89\x1e\xae4\xc8U\xc7b\x94&\xfd\x05N\xbfQ\xcb\
-\xf4`\x04\x10 %RW\x84k\x8aD\xea\x8b\xb4-\x9f\xc4\xb1\x16\xd1\x17\xfck\x1c\
-\xea.\xbb\x87 \xc34\x15_\xe1\xe4O\xe2L\xa7\x03 \x04\x08\t@\xac\xd1f\xd9\xc3\
-\xefR4\xea\x99\xe0\xf6\xcb\xaa\x1bb\x98\x06\xfbG\x1c\xfbQ\x8a\xd8\xc2\x12-k\
-\x0eQ\x08\xdeH\x99\xcfg!\xea\x91\xcf\xa7\xaf/4!%Hh\xab\x10~\x11\xa9)\x82q\
-\x81\x11\x10(\x04\xa5|\x90\xd1\x93\x92\xfch3\xcb\xef\x93\x98\xc6\xaf\xe9\x0f\
-?p\xc12D\xf8\x1e\xc2-#|\x0f%5\x94n\xa0\xe4o^\x0e\t\xd7A\xbae\x80\x0b\xc6\x86\
-\x94NX\\\x8fr\x0bH\x8d\xf3\x1e@\x90Zl\x12\nu`\x06\x9b\x88\xc8O\xbf\xc7\xd7M\
-\x94\xa6#\x9d"\x08\x89oX\xb3\r6\x87\xa6@\x11\xf7\x8b\x84\xf3K\x91\x94\xc8\
-\xa6c\xdc\x10\xb5\xa8\x0b\x8d\x93\x91\x1f\x17\xe2\xbc\xe2S\xeac}30\xab\xe9\
-\x95\xf1ukV\xabl\xcf\x0e3\x03\x9f~\x06\xf0\xcd\xe0\x05\x9e/\x86^e\x0e\xcc9\
-\xa8\xc2\xe5\xc5R\x0e\x18\xeb0\xf4w\x89\xa5\\n\xfe\x83\xdb\xd0BAP>\xe5\xbc\
-\xcd\xc0\xa1\x1eF\x8e\xa79\xb7?\xc5\r\xf7Dq\x8c3\x14D\x10\xa1<\xccL7f\xa6\
-\x1b\xafPB\xa0f\xbf|\x02\x01\xec\xd4R\x9c\xaaf\xf8\xa8\x91\x84_\xc6\x9a\xe9\
-\xc1\x98<\x8b\xb2\x1d@\xcd~A\x18\x01\x8a\xb57\xa3\x85\xab\x91\x81\xdb\xb0\
-\xac\x9dh)\x97\x9b\x9f\xda\x88\x11\t\x02`\x97\x15\x93F\x04\x19\x90\xc4\xfc\
-\x1e\xcc\xa93X3\xdd(\xdbE)\x05f\x10/X\x8dYL\xa3\x148\xf1VJ\xa9\x8e95\xc3B\
-\xa7\xda\x9b!7\xb5\x0c\xdcN\x84\x06\xa5\xc2J\x16Y\xa3\x0c\x19P\x92\xc6\xfc\
-\xe2S>\x81\xf4\x01\x8c\\\x1aiH\xdcp\x03Za\x0c\xdf.#L\x0bG\xafEf\xc7\x11R`/\\\
-\x81\x17\xad\x05\xc0H\x9f\xc0\x98\x1a\x00\xa1(\xc7\x9b)7.\x9d3Wz\x84\x93W\
-\xa2\x06*\\\x02C\xe8\x08\xb3\n]\xe6\xd0\x83\x02#\x96"c\x15\xf0\x00+\x14\xa6\
-\xed\xae\xb5x\xb9\xed\xe4\x86\xbb)d\xae#a\x8d\xa0\x9b3D\xb2\xa7\xd1\xcb\x19\
-\x86NL2~$\x8b\xe7\xfa\xe8A\x9d\xc6\r\t\x1abC\x14\x8b\x0b(\x04\x17"\x95G$w\n\
-\x95\x9d\xa6\xff\xddar\x836B\x033bP}S\x94\xda\xd0\x08vh=\xc2H\xa1\xcb<z\x10\
-\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18%\xa2\x86\x88\xe6\xba\xa04\xcd\xf0\xa1q2\
-\xddy\x00\x1a7$\x897\x87\x18=:\x8d\x1e\xd6\xa9Y\x95!\xe7;\x84r\xdd\x17\xd5\
-\xac\x0bO`Vmbx\xdf)\x06\xf7\xecC\xf9\x1eJ\nNm\xfb9K\x1f{\x88\x84\xd6\x0f\xce\
-\x91y\xc5\xa7\xab\x12\xb1\xc0q\xba\x7f\x91&Tk\x91\xbcq\x98\x89\xae,\xe3\xc7f\
-X\xf2p\x92\x90\xf7c\xfa~\x15&\xde\xee\x90\xa8z\x07;\xb2\x15\xe9e\t\xb8\xaf\
-\x90>\x1c\xc4\xac\xf2\x88w\x08\x1c\xf5G(a\\2Wz\x98=W\xa1$*|\x12\x8d$\x82\xbb\
-\xd1\x99D\x08\x81P!L~\x85\xc7$J\x93x\xde\x1d,X\xddA\xcf\xf6\x7f\xc3\x1e\x1b"\
-\x96\x8a\x91(\x8f \n\r\x9c\xfe\xe1~\nc\xa3\x04\xe21\xa4i\xe2\xe4\xa7\x18\xde\
-\x9d\xa6\x98n\xa3\xe5\xab\xcb1\xcc\x13\xe8N\x12\xcdn\xa1\xeb\'?\xa486\x8a\
-\x19\x8d`\x84\xc3 \x1c\xf2=.\x8d+7\xa1\xf9\x03\x08Z\xd0\x99\xc0\xb3\x8b\xd8\
-\x13\xd3\x18A\x0bShh\x81\x18%}\x1fx9\x02n\x1b\xa7^{\x95\xfc\xf00\x81D\x1ciY\
-\x8c\x1f8\xc7\xe8^\x1b\xdf-\x13\xaa\xaf\'\xb8\xe1nt;\x83\xbc\x94\xe6\xaa\xbb\
-Q\n\x82U\x11\xaaj%\xf9\x91>\x84\x94\x84\xe3\x8b\xd0\x031\x0c\x95\xc6\x9fW|\
-\xc7Q\xd2\xc34V\xe3Ow1zv\x8c\xa9\x0fB\x04\xab\x93,\\\xdbJU\xcdRp\xc2\x18\xfe\
-Q\xf2\x1fj,\\\xd1B\xc1;\x80,\xf9\xe8Z\x07\xe5\xd1\xa3\xc4k\xea\x88W5\x90g\
-\x1fs\x9d\x92\xeb!v]\x95\xa2\xa8\xf01\x82E\x08\xeeG\x17\xe3\x08\tB\x04\t\xf0\
->\x8a^\x00\xa4f\x13\xac~\x88\x805\x84=~\x10\x8d\x95\x18\xa2\x83\xbe=/Q\x1e;\
-\xc8\xc2\xdb\xb7Rw\xeb\x16Pe\xdcb\x91\x81\x1d\xffJ\xa1w\'\x85\xf4r"\xed\x0b\
-\xc0\xafa`\xf7\x7f\xe3N|@\xcb]O\x90\xe8X\x87\x0c\xf8hZ\x1c\xcf)\xa2\xf4IL\
-\xbd\x13\xe1nB\x17c\xb8\xd93\x9c\xfd\xcf\xe7\x90\xa6Dh\x92\xc6\x8d\xcf\x12]\
-\xb2\x04\xe5e\xc9\x9c\xea\xc2\x19=\xc4\xc2;\x1e\xa1\xee\xd6-\x08\xdd\xc7\xb7\
-a\xf0\xed\x97\x98>\xbd\x17C\xd7\x10f=\xba\x1be`\xf7+\x97\xd4T\xd6\x0eb\xd7\
-\xdfC\xac\xedY\xce\xbc\xfc\x1cB\xf7h\x7f\xf0\x19\x845\x89\xd4\xea\xe8\xdb\
-\xf3\xd3\xb9\xe3k\xabGY\xdb\x11\xe6&t9\x85)\x87h\xd9\xfcg\xc4\xdaW\xe0\x8b^T\
-\xe0}\xc8-\xa1~\x8dI\xdf\x9b\xffEi\xfa\xab\x04\x83E\x94\x97d\xaa\xa7\x0b\x9d\
-!R\xcb\x1e\x83P?A\xf1\x16\xcc\xd1"z`\xf4\xf3\xbb\x07\xfd\x85E\xd7\xf0\x02\
-\x114["\xa5\x00?\x825\xa9\x81;\x9b\x0be\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\
-\xed#\x14l\xa4n\xdd\xe3h\xe5\xedHo?\xd2|\x84\xba\xd5\x8f2\xd0}\x82RO\x0f\xb1\
-\xc5O\xe2y\x02\xbb\xfb,\xa1@\x1d5\xab\x1eA\xba?F\x16\xf6\x80L\xa0\t\x1d\x9c)\
-(%\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9V2\x9d\xffB(P\
-O\xdd\xda\xad\xe8\xce\xcf\x10\xa5#\xf8\xd6\xd3\xd4,\x7f\x80\xe2\x89\xfd\xe8\
-\x8e\x8eP\t\xf0\x02sk\xe6f@\xcf\xe0Y\xdf\xc0T\x11\xa4\x12hz\x15\x9a\xfd*\x9e\
-\xf1\xf4\xbc\xe2\xabj\xd9\x8aV\xd8\x8dg\xc5\xd0l\x8dPx!\xb1\xd6M\xe8\xcew\
-\xc19\x02Y\x0f\xa5\x97\xa8Z\xb2\x99\x80\xf5\x16\x93\x9d\x07h\xda\xfa\xa7x~\
-\x9e\xec\xe1\x97I4\xad\xc4L.F\xe6w@\x16\x98\xe3\x0cFg\xe7\xe2+_\x10\x15.$V\
-\x0b\xebG\x10\xc3A\x90\x80=\x02\xfbjaZ\x81a\xa1\xd6\xad\xa3\xd4\xf7>\xead\
-\x08\xab\xbd\x159=\x81\'Rx\xa7\x05z\xac\x11\n\x01\xe4\x81A(\x04\xd1\x1a\xd3X\
-\rw\xa0\r7\xc2X\x0cUH\xa0\x8aE\xdc\x0f\xc1H\xd4\xe3\xcf\x18\xe8\x87&\xa0\xf0\
-\xc9\xad\xe2j\x88\xd5\xc0\x9a4b8\x80\xe5\xb4\xd3\xba\xf5/\xd0\xa2\x11\xf0}\
-\xfc\xf1A\xe4\x9138\xcd\x0bp\x8e\x970\x92\x8d\x88r\x02\xb1o\x1arAd\xcb\x00F\
-\xfd-hC\xf5\x08/\t^\x02\x95Ssk\xfe\xaf\xee\xdaA\xe4p\x00!\x05\x94\xd2\xd0\
-\x95\xc4_,\xe7\x15\x1f\xf9\x04\x1ci\x82uq\x18\x8e\xcd.Q\xfd\x14tF \xd3\x0c\
-\x80\x08\x94\x91\xb7F\x89\xc4o%\xbb\xfb}\xec[\n\xd8\xe94\xe5\xa3.\xf5w\xdc\
-\x0f\xc3y\xd8\x17\x00\x7f\xee\xda\xd7\x07_x\xfar\xa6\xbe\xc2<0Z\x05\x89\x8eq\
-\n\'\x17!\xd1\xf0\xf3\x93L\xef\xdd\x0cRa\xae\xf6\xd1\xb3.\x83\xdf\x1e\xa2p\
-\xea6j\x1ej\xa4x\xd8\xc6\\\x91G\x956\x90=\x9d\xc1\xcbN\xe1\x84\x9e\xc4\xfe\
-\xc0%\xb4\xc4b\xa6\xb3\x9f\xe9]\x1d\x04\x1b\x1a\xf0\xa7\xa6\x10!\xa0|;\x99]#\
-8\x8f\x8fPR\xbf\x87\xbd\xcbEo\xd21\xae\xd3\xb0\x0f\x95\xf1\xd2E\x12KGg=\x08\
-\rD\x81\xcc?\n\xdc~\x81;X\x83\xd6\xd0@\xf2oKx\x99\xb5\x14\xbar\x94\'\x86q\
-\x02\x8fQ\xdck\x13^\x12`fO\x0f\xd3\xbb:\x08]\x97\xc2/\xa4\x11\xd2\x9fS\xb3\
-\xb4\xc7\xc6X\xe4\x93\xb8q\x9c\xfc\xb1v\x04\x12??F\xe6\x8d5T=[\x98W|\xeex\
-\x96\xc9m_&~\xd3\x10\x85\xae\xa6\xd9m\xde\xfc0\x13?\xb8\x87rw\xf9\xfc\x1c\
-\x87\xfa\x02\xc4V?\xca\xe0\x8b3\x9c\xf8\x93\xed\xa8\xa2\x8b\xd5p\x0f\xd6\xc2\
-\xf5d\xbe=D\xf1\x97\xbf?\xaf\\\xe9\xaf\xadZ\x7f\x85\xca\xa0\xc2\xc5\xa8\xae\
-\x9f\xe1~vs.U\x8dS\x94\xd4\x0e\x0e\xc2\x83\x16\xf9I\xc8\x0e;t\x7f\xcb&\x93Kq\
-\xc3\x1f\xd6c,-\xf3\xf6\xb6fn\x8a\xf5\x13}\xaa\x9d\xc3\x7f\x7f\x9a\xe1\xe7w\
-\xd3v\xf7\x02\xe4\xca \xa5\xe3yN\xbd\x95\xa1\xd8\xdaN\xdd\xc68]\xbd\x0e\x89T\
-\x96\xf0\x13m\x1c\xfa\x07\x9f\xb1\xefu\xd2vW=\xea\x9e(\xba\x05\xba\xe1\x92\
-\xfcZ\x84\xfd;Z\xb9S\xee\xe0\\*\tR\xa3\x9dA\xde\x8a<\xc0D2\tI\x90\x9a\xe2+}\
-\xfb\xd1\x1fj\xe5\xf0\xf7\xfb(\xfc`?\x8dkk\xf1\xd7\x9b\x0c|\xa4\x99kj#Yg\xd1\
-\xea\xf6\x91\x9d2\xe6\xd4|7\xba\x12\x81\xcd\xfd\xe2uzj\xaaQ\xd2\xa0U\xa4\xf9\
-er\x15\xabz{\xe7\x17\xdf\x80\xcb\xa9\xc5K\xb8O\x1d\xa0/\x19CH\xc9\xf5\xaa\
-\x9f\x9d7\xace"\x1e>?\xc7\xb1\x19\xc1\x96f\x97\xc9;\xd72r|\x08B:\xab\x1f\xdd\
-\xc8t\xae\x8a\xd7\x9c8\xf6\xaa\xf9\xfd\x89]?\xe5\x17\xaeT\x1dT\xb8\x08\x8d\
-\xfe4\xb6\xdd\xcb\xb8SbbL\xa7\xff\x9bi\xd0tl\xc7@\t\r\x84d\xd12\x97\x8e\xdf\
-\xcds\xf0H\x1b\xef\xf4\x84\x18\xd5\xc3<\xf5\xf0(\x0b7\x1b\x1c\xfey\x8e\x93/\
-\x9eEI\r_\x18\x84\x13\x92e\xf7I\xcc\x9a\x11\xde\xd8\xb6\x8c\xc6Z\x9fG\xb7\
-\x8cQ\xf7%\x8dS{\xf3\x9c\xfcN\xef\xf9\xb1\xd5M\x92\x07\xfe\xca`\\\x0bb\x97\
-\xce0^\x0ecE%\x8e=\xca\xd9r\x8e\x11\xff\xa3\x835\x1f\xdc\xce\x04\x8fo\xc9\
-\x11^!9\xb4g\x9c\xfd\xefePR#Zk\xb0\xe0\x06\xc9PI\x12\x8c\xe4\xb1\x8bgy\xef\
-\xf0\n~g\xe3\xa55\x87\xf4&\x1c\xc7\xa7T\xe8f\xd8\xae&\x18s(\xdb\xe3\x9c.\xe5\
-\x99>2\xbf\xf8\xde\xdc\xb6\x0c)\xa7qJ\xa7\x99t\nXU\x06e\xfb\x0cg\xcb\xd73\
-\xe2\x7f\xe2\xb0r\x0c\x9aN\xceP\xb7\xb1\x89\xe3\'\x06\t%L\x1a\xd6G\xe8|\x7f\
-\x92#\xb9\xe0\xbcs\xa5\x0f\x0cT\x0e\n\xaf6\xf9l\x9eR\xbe\x9b\xf6[\x04\xe5\
-\xce\x10\xb6c\xe0\x0b\x9dHBR\xdb\xec\xd0\xb2\xd4\xa6yi\x89=\x9dm\xbc\xfcZ\
-\x13\xc5R\x9a\xf4\xa0BzA\x1e\xdc|\x88\xeaV\x833\x07\x83\x14s\x1aVTp\xf3\x97\
-\xb3\x84\xab\xe1;\xffq\x1fG\xbb\xb2\x18\xba\x86\xb2u\x1e~\xb2\x8b\xebn\xd38\
-\xba;\xc2\xd4\xb8E\xac^\xb1\xe2KYzzS\xec?\xb4\x84\xaf\xac\xeef\xd1\xca\x08U\
-\xb5>\xe9\x01\x8bc\'f\xb0\x9d\xd2y\x9f\xe9\xb4\xa2:\x02\x9b\x9f9\xcd\xb9\xa3\
-\x01\x8e\xbf\x17B3\x05k6gi\xbe.\xcf\xbe\x1dI\xa2I\x8f\xb3g\xaa\xd8\xf6\xc6z\
-\xb2\x93sh\x1e\xcc\x11\xab\xcaR,\xf4\xd0\xb2|\x92\x86\xb6"\xddg\xa3|p,\x8f\
-\x80y\xc7W\x9b\xca`\x17\x0e\xd1\xbcF\'V\xe73\xd0?\xce\xb1\xe3\x93\xd8N\xf6\
-\x82y\xde\xbb\xdf\xe5\xe1M\x0ey\xa7DS{\x02!\xc7ykg\x89\x81\x019\xef\\\x89\
-\xf5\xeb\xdf\xac\\\x98\xba\xca\x08\x01[6vq\xe7\x9a\x1eR\xc9"B\xce\xa6 \x9b5\
-\xc9\xccX\x8cNF\xf8\xc5\xaf\x97p\xf6\\5eW^\xf0\xdc\xd2\xf6i6,\x1b\xa2\xa5q\
-\x06\xe5)|4\xbaz\x12\xec?^GO\x7f\xe4\xfcX)\x15\xcb\xaf\x9fd\xe3\xeaAR\xf1\
-\x02\xe5\xb2DI\x9d\x0f>\xacfgg#\xb9\xbc\xc1\xbdw\x0e\xb1\xbec\x92\xb2\xaf\
-\xf1\xfa;\x8d\x1c>Y\xf5)\xaf\x01\xcb\xe3\xf6\xb5\xa3\xdc\xb2|\x08\xe9\xbbH\r\
-F2\x11\xce\x9c\xabb\xc3\xb2!@\xf0\xfa;\x8b9|\xb2zN\xcdl\xce@\x08\xb8\xf7\xce\
-\x11\xd6uL\xe0\xfa\xf2\x02\xdd\xf9\xc67\xfb\x8e^6t\x0cQ\xf65^{\xa7\x8d\xc3\'\
-/\xbc\xb7a\xe8\xf07_\xcfQ\xee\x1f\xe2\xcd\xef\xf6\xf2\xb5\x7f\xea\xa0g,\xca7\
-\x9f\x8f\xf0Y\xae\x08\x8a\x05\x0b\xbeWi\x90k\x84\x10\x10\n~<\xfd\xae\x0b\xb6\
-S\xd9v\xbf\x1c\xac[U\xe6\xfb\xcfO\xf1\xc2_\x0e\xe0z\x82?\xff\xe7\x05<\xf3\
-\xf58\xef\xee\xfdlW\t\xf4\xc1\xc1\xc1+d\xb1B\x85k\xc7M[\'\x98\x1a\xcap\xec`\
-\x9e\'\x9e\x0b\xd0u\xc2\xe6\xcd\xed\x0b\x98\xc9\xce\x7fy\x05\xb3\xbb\xf0\x15\
-*|\xe1\x08\x07m\xa2\xd1<\x0f\xfd1l\xbc\xd7\xe6\xa5WB\x9f\xb99\x00\xf4+\xe0\
-\xadB\x85k\xce\x8b\xff\xdeH\xd0\xac\xa3:\xe6\xf3\xfcw$\xaf\xfe\xf4\xffw;R\
-\xc07*\xbfA*T\xb8\x08\x95%V\x85\n\x97\xa0\xd2 \x15*\\\x82\xff\x01\x0e\t\x96s\
-<\xfa\x1bp\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory004Bitmap():
- return wxBitmapFromImage(getDocFactory004Image())
-
-def getDocFactory004Image():
- stream = cStringIO.StringIO(getDocFactory004Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory004')
-catalog['DocFactory004'] = ImageClass()
-catalog['DocFactory004'].getData = getDocFactory004Data
-catalog['DocFactory004'].getImage = getDocFactory004Image
-catalog['DocFactory004'].getBitmap = getDocFactory004Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory005Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rf\
-IDATx\x9c\xed\x9bi\x90\\\xd5y\x86\x9fs\xee\xd6\xeb\xf42=\xab43\xd2\xcc\x08\
-\x10\x8c$\xb4\x8bU\xb6\xc0&\x12K\xd8\x14\x96\x04R\xa9\xa4\\\xa9@%E\x92\x1f\
-\xfe\xe9J\xb9R\x95\xcaB\xc5\xe5\x02\xbc\x84J%Ep\x88e\x1b\x8c)K`\x0b\tdy\xb4!\
-\xb4\x8e\x9043\x9a\xa5g\x9f\xe9\x99^\xef\xed{\xef\xc9\x8f!\x02\x05K\x1a\xf0\
-\x08(\xdc\xcf\xcf\xaes\xef\xfb~\xe7\xfb\xbe\xea\xd3\xe7\xf4\x11\xff\xf0-\xa5\
-\xa8P\xa1\xc2oD\x0fU\x7f\xd6\x16*T\xf8\xfc\xa2\x07+\rR\xa1\xc2E\xd1\xc3\x89\
-\xcf\xda\xc2\xef\x16\x02\x85\x81\x8d\xc4\xbb\xe0s\x17\x03\x17\xf3\xd3\xf3 l\
-\xb4\xff\xe7A\x01e\x15\xc0C\xbb"\xba\x12\x1fS\x94\xf0\x91\x94\x95\x85B\\\x11\
-\x9d\xf9D\x0f\xc5?k\x0b\xbf;\x08|\x1a\n\xbb\x88\xba\xe7\xf0?T\x9bR\x824u\xf2\
-n\x9c\\\xb0\x9d\x19}\x11.\x81+\xe4\xc1\xa3\xc9~\x83*\xaf\xe7\x02\x0f\x00\xba\
-\xa5\xb0\xb5\x1a\xba\xb5-\x94\t\xcd\xab\xae\x86\xc3b\xf7g\x04\xca#h\x86`L.#-\
-o\x9cW\x8d+\x81\x1e\xae4\xc8\xa7\x86\xc5(M\xfa3\x9c~\xb5\x96\xe9\xc1\x08 @J\
-\xa4\xae\x08\xd7\x14\x89\xd4\x17i[>\x89c-\xa2/\xf8\xb78\xd4\xcd\xbb\x87 \xc3\
-4\x15_\xe4\xe4O\xe2L\xa7\x03 \x04\x08\t@\xac\xd1f\xd9\xfdoQ4\xea\x99\xe0\xe6\
-y\xd5\r1L\x83\xfd#\x8e\xfd(Ela\x89\x965\x87(\x04\xaf\xa5\xcc\xe7\xbb\x00\xf5\
-\xc8\xe7\xdb\xdf\x17\x8a\x90\x12$\xb4U\x08\xbf\x88\xd4\x14\xc1\xb8\xc0\x08\
-\x08\x14\x82R>\xc8\xe8II~\xb4\x99\xe5wIL\xe3\xd7\xf4\x87\xef\xb9`\x19"|\x0f\
-\xe1\x96\x11\xbe\x87\x92\x1aJ7P\xf27/\x87\x84\xeb \xdd2\xc0\x05cCJ\',\xaeF\
-\xb9\x05\xa4\xc6y\x0f H-6\t\x85:0\x83MD\xe4G\xdf\xe3\xeb&J\xd3\x91N\x11\x84\
-\xc47\xac\xd9\x06\xbb\x8c\xa6@\x11\xf7\x8b\x84\xf3K\x91\x94\xc8\xa6c\\\x13\
-\xb5\xa8\x0b\x8d\x93\x91\x1f\x14\xe0\x9c\xe2S\xea\x03}30\xab\xe9\x95\xf1ukV\
-\xabl\xcf\x0e3\x03\x1f}\x06\xf0\xcd\xe0\x05\x9e/\x87^e\x0e\xccyp\x85\xdf\x0e\
-K9`\xac\xc3\xd0\xdf"\x96r\xb9\xfe\x8fnB\x0b\x05A\xf9\x94\xf36\x03\x87z\x189\
-\x9e\xe6\xdc\xfe\x14\xd7\xdc\x11\xc51\xceP\x10A\x84\xf203\xdd\x98\x99n\xbcB\
-\t\x81\x9a\xfd\xf2\t\x04\xb0SKq\xaa\x9a\xe1\xfdF\x12~\x19k\xa6\x07c\xf2,\xca\
-v\x005\xfb\x05a\x04(\xd6^\x8f\x16\xaeF\x06n\xc2\xb2v\xa2\xa5\\\xae\x7fl#F$\
-\x08\x80]VL\x1a\x11d@\x12\xf3{0\xa7\xce`\xcdt\xa3l\x17\xa5\x14\x98A\xbc`5f1\
-\x8dR\xe0\xc4[)\xa5:.\xab\x19\x16:\xd5\xde\x0c\xb9\xa9e\xe0v"4(\x15V\xb2\xc8\
-\x1ae\xc8\x80\x924\xe6\x16\x9f\xf2\t\xa4\x0f`\xe4\xd2HC\xe2\x86\x1b\xd0\nc\
-\xf8v\x19aZ8z-2;\x8e\x90\x02{\xe1\n\xbch-\x00F\xfa\x04\xc6\xd4\x00\x08E9\xde\
-L\xb9q\xe9\x9cs\xa6G89\x9f5P\xe1\x12\x18BG\x98U\xe82\x87\x1e\x14\x18\xb1\x14\
-\x19\xab\x80\x07X\xa10m\xb7\xad\xc5\xcbm\'7\xdcM!s\x15\tk\x04\xdd\x9c!\x92=\
-\x8d^\xce0tb\x92\xf1#Y<\xd7G\x0f\xea4nH\xd0\x10\x1b\xa2X\\@!\xb8\x10\xa9<"\
-\xb9S\xa8\xec4\xfdo\r\x93\x1b\xb4\x11\x1a\x98\x11\x83\xea\xeb\xa2\xd4\x86F\
-\xb0C\xeb\x11F\n]\xe6\xd1\x83`DS\x14\x02%\\<\xdc\xa0\x8b\xc3(\x115D4\xd7\x05\
-\xa5i\x86\x0f\x8d\x93\xe9\xce\x03\xd0\xb8!I\xbc9\xc4\xe8\xd1i\xf4\xb0N\xcd\
-\xaa\x0c9\xdf!\x94\xeb\xbe\xa8f]x\x02\xb3j\x13\xc3\xfbN1\xb8g\x1f\xca\xf7PRp\
-j\xdb\xcfY\xfa\xd0}$\xb4~p\x8e\xcc)>]\x95\x88\x05\x8e\xd3\xfd\x8b4\xa1Z\x8b\
-\xe4\xb5\xc3Lte\x19?6\xc3\x92\xfb\x93\x84\xbc\x1f\xd3\xf7\xab0\xf1v\x87D\xd5\
-\x9b\xd8\x91\xadH/K\xc0}\x91\xf4\xe1 f\x95G\xbcC\xe0\xa8?A\tcN9\xd3\xc3\xec\
-\xb9\x82%Q\xe1\xc3h$\x11\xdc\x8e\xce$B\x08\x84\na\xf2+<&Q\x9a\xc4\xf3na\xc1\
-\xea\x0ez\xb6\xff;\xf6\xd8\x10\xb1T\x8cDy\x04Qh\xe0\xf4\x0f\xf7S\x18\x1b%\
-\x10\x8f!M\x13\'?\xc5\xf0\xee4\xc5t\x1b-_]\x8ea\x9e@w\x92hv\x0b]?\xf9!\xc5\
-\xb1Q\xcch\x04#\x1c\x06\xe1\x90\xefqi\\\xb9\t\xcd\x1f@\xd0\x82\xce\x04\x9e]\
-\xc4\x9e\x98\xc6\x08Z\x98BC\x0b\xc4(\xe9\xfb\xc0\xcb\x11p\xdb8\xf5\xf2K\xe4\
-\x87\x87\t$\xe2H\xcbb\xfc\xc09F\xf7\xda\xf8n\x99P}=\xc1\r\xb7\xa3\xdb\x19\
-\xe4\xa54W\xdd\x8eR\x10\xac\x8aPU+\xc9\x8f\xf4!\xa4$\x1c_\x84\x1e\x88a\xa84\
-\xfe\x9c\xe2;\x8e\x92\x1e\xa6\xb1\x1a\x7f\xba\x8b\xd1\xb3cL\xbd\x1b"X\x9dd\
-\xe1\xdaV\xaaj\x96\x82\x13\xc6\xf0\x8f\x92\x7fOc\xe1\x8a\x16\n\xde\x01d\xc9G\
-\xd7:(\x8f\x1e%^SG\xbc\xaa\x81<\xfb\x98\xeb\xe9\xb8\x1eb\xd7\x15-\x8a\n\x1f \
-X\x84\xe0nt1\x8e\x90 D\x90\x00\xef\xa0\xe8\x05@j6\xc1\xea\xfb\x08XC\xd8\xe3\
-\x07\xd1X\x89!:\xe8\xdb\xf3<\xe5\xb1\x83,\xbcy+u7n\x01U\xc6-\x16\x19\xd8\xf1\
-o\x14zwRH/\'\xd2\xbe\x00\xfc\x1a\x06v\xff\x0f\xee\xc4\xbb\xb4\xdc\xf6\x08\
-\x89\x8eu\xc8\x80\x8f\xa6\xc5\xf1\x9c"J\x9f\xc4\xd4;\x11\xee&t1\x86\x9b=\xc3\
-\xd9\xffz\niJ\x84&i\xdc\xf8$\xd1%KP^\x96\xcc\xa9.\x9c\xd1C,\xbc\xe5\x01\xean\
-\xdc\x82\xd0}|\x1b\x06\xdfx\x9e\xe9\xd3{1t\ra\xd6\xa3\xbbQ\x06v\xbfxIMe\xed \
-v\xf5\x1d\xc4\xda\x9e\xe4\xcc\x0bO!t\x8f\xf6{\x9f@X\x93H\xad\x8e\xbe=?\xbd||\
-m\xf5(k;\xc2\xdc\x84.\xa70\xe5\x10-\x9b\xff\x82X\xfb\n|\xd1\x8b\n\xbc\x03\
-\xb9%\xd4\xaf1\xe9{\xed\xbf)M\x7f\x95`\xb0\x88\xf2\x92L\xf5t\xa13Dj\xd9C\x10\
-\xea\'(^\x879\xb6\x88\x1e\x18\xfd\xfc\xefE\x7fa\xd05\xbc@\x04\xcd\x96H)\xc0\
-\x8f`Mj\xe0\xce\xe6@Yq\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1{\xfb\x08\x05\x1b\
-\xa9[\xf70Zy;\xd2\xdb\x8f4\x1f\xa0n\xf5\x83\x0ct\x9f\xa0\xd4\xd3Cl\xf1\xa3x\
-\x9e\xc0\xee>K(PG\xcd\xaa\x07\x90\xee\x8f\x91\x85= \x13hB\x07g\nJI<\x13\xb4\
-\x12\xe8E\xb0B\tt+\x8a44\xac`\n\xcduQ\xb2\x95L\xe7w\x08\x05\xea\xa9[\xbb\x15\
-\xdd\xf9\x19\xa2t\x04\xdfz\x9c\x9a\xe5\xf7P<\xb1\x1f\xdd\xd1\x11*\x01^\xe0\
-\xf2\x9a\xb9\x19\xd03x\xd670U\x04\xa9\x04\x9a^\x85f\xbf\x84g<>\xa7\xf8\xaaZ\
-\xb6\xa2\x15v\xe3Y14[#\x14^H\xacu\x13\xba\xf3]p\x8e@\xd6C\xe9%\xaa\x96l&`\
-\xbd\xced\xe7\x01\x9a\xb6\xfe9\x9e\x9f\'{\xf8\x05\x12M+1\x93\x8b\x91\xf9\x1d\
-\x90\x05\xe6x\x06\xa3\xb3s\xf1\x95+\x88\n\x17\x12\xab\x85\xf5#\x88\xe1 H\xc0\
-\x1e\x81}\xb50\xad\xc0\xb0P\xeb\xd6Q\xea{\x07u2\x84\xd5\xde\x8a\x9c\x9e\xc0\
-\x13)\xbc\xd3\x02=\xd6\x08\x85\x00\xf2\xc0 \x14\x82h\x8di\xac\x86[\xd0\x86\
-\x1ba,\x86*$P\xc5"\xee{`$\xea\xf1g\x0c\xf4C\x13P\xf8\xf0Vq5\xc4j`M\x1a1\x1c\
-\xc0r\xdai\xdd\xfaWh\xd1\x08\xf8>\xfe\xf8 \xf2\xc8\x19\x9c\xe6\x058\xc7K\x18\
-\xc9FD9\x81\xd87\r\xb9 \xb2e\x00\xa3\xfe\x06\xb4\xa1z\x84\x97\x04/\x81\xca\
-\xa9\xcbk\xfe\x9f\xee\xdaA\xe4p\x00!\x05\x94\xd2\xd0\x95\xc4_,\xe7\x14\x1f\
-\xf9\x04\x1ci\x82uq\x18\x8e\xcd.Q\xfd\x14tF \xd3\x0c\x80\x08\x94\x917F\x89\
-\xc4o$\xbb\xfb\x1d\xec\x1b\n\xd8\xe94\xe5\xa3.\xf5\xb7\xdc\r\xc3y\xd8\x17\
-\x00\x7f\xee5\xaf\x0f>\xf3\xf8|\xa4\xbe\xc2\x1c0Z\x05\x89\x8eq\n\'\x17!\xd1\
-\xf0\xf3\x93L\xef\xdd\x0cRa\xae\xf6\xd1\xb3.\x83\xdf\x1e\xa2p\xea&j\xeek\xa4\
-x\xd8\xc6\\\x91G\x956\x90=\x9d\xc1\xcbN\xe1\x84\x1e\xc5~\xd7%\xb4\xc4b\xa6\
-\xb3\x9f\xe9]\x1d\x04\x1b\x1a\xf0\xa7\xa6\x10!\xa0|3\x99]#8\x0f\x8fPR\x7f\
-\x80\xbd\xcbEo\xd21\xae\xd2\xb0\x0f\x95\xf1\xd2E\x12KGg=\x08\rD\x81\xcc?\x0b\
-\xdc~\x81;X\x83\xd6\xd0@\xf2\xefKx\x99\xb5\x14\xbar\x94\'\x86q\x02\x0fQ\xdck\
-\x13^\x12`fO\x0f\xd3\xbb:\x08]\x95\xc2/\xa4\x11\xd2\xbf\xacfi\x8f\x8d\xb1\
-\xc8\'q\xed8\xf9c\xed\x08$~~\x8c\xcc\xabk\xa8z\xb20\xa7\xf8\xdc\xf1,\x93\xdb\
-\xbeL\xfc\xba!\n]M\xb3\xdb\xbc\xf9a&~p\x07\xe5\xee\xf2\xf99\x0e\xf5\x05\x88\
-\xad~\x90\xc1gg8\xf1g\xdbQE\x17\xab\xe1\x0e\xac\x85\xeb\xc9|{\x88\xe2/\xff\
-\xf0c\xe5L\x7fy\xd5\xfay.\x83\n\x17\xa3\xba~\x86\xbb\xd9\xcd\xb9T5NQR;8\x08\
-\xf7Z\xe4\'!;\xec\xd0\xfd-\x9bL.\xc55\x7f\\\x8f\xb1\xb4\xcc\x1b\xdb\x9a\xb9.\
-\xd6O\xf4\xb1v\x0e\xff\xe3i\x86\x9f\xdeM\xdb\xed\x0b\x90+\x83\x94\x8e\xe79\
-\xf5z\x86bk;u\x1b\xe3t\xf5:$RY\xc2\x8f\xb4q\xe8\x9f|\xc6\xbe\xd7I\xdbm\xf5\
-\xa8;\xa2\xe8\x16\xe8\x86K\xf2k\x11\xf6\xefh\xe5V\xb9\x83s\xa9$H\x8dv\x06y=r\
-\x0f\x13\xc9$$Aj\x8a\xaf\xf4\xedG\xbf\xaf\x95\xc3\xdf\xef\xa3\xf0\x83\xfd4\
-\xae\xad\xc5_o2\xf0\xbef\xae\xa9\x8dd\x9dE\xab\xdbGv\xca\xb8\xac\xe6[\xd1\
-\x95\x08l\xee\x16\xaf\xd0SS\x8d\x92\x06\xad"\xcd/\x93\xabX\xd5\xdb;\xb7\xf8\
-\x06\\N-^\xc2]\xea\x00}\xc9\x18BJ\xaeV\xfd\xec\xbcf-\x13\xf1\xf0\xf99\x8e\
-\xcd\x08\xb64\xbbL\xde\xba\x96\x91\xe3C\x10\xd2Y\xfd\xe0F\xa6sU\xbc\xec\xc4\
-\xb1W}\xbc?\xaf\xeb\xa7\xfc\xc2|\xd7A\x85\x8b\xd0\xe8Oc\xdb\xbd\x8c;%&\xc6t\
-\xfa\xbf\x99\x06M\xc7v\x0c\x94\xd0@H\x16-s\xe9\xf8\xfd<\x07\x8f\xb4\xf1fO\
-\x88Q=\xccc\xf7\x8f\xb2p\xb3\xc1\xe1\x9f\xe78\xf9\xecY\x94\xd4\xf0\x85A8!Yv\
-\x97\xc4\xac\x19\xe1\xd5m\xcbh\xac\xf5yp\xcb\x18u_\xd28\xb57\xcf\xc9\xe7z\
-\xcf\x8f\xadn\x92\xdc\xf37\x06\xe3Z\x10\xbbt\x86\xf1r\x18+*q\xecQ\xce\x96s\
-\x8c\xf8\xef\x1f\xac\xf9\xe0v&xxK\x8e\xf0\n\xc9\xa1=\xe3\xec\x7f;\x83\x92\
-\x1a\xd1Z\x83\x05\xd7H\x86J\x92`$\x8f]<\xcb\xdb\x87W\xf0{\x1b/\xad9\xa47\xe1\
-8>\xa5B7\xc3v5\xc1\x98C\xd9\x1e\xe7t)\xcf\xf4\x91\xb9\xc5\xf7\xda\xb6eH9\x8d\
-S:\xcd\xa4S\xc0\xaa2(\xdbg8[\xbe\x9a\x11\xffC\x87\x95c\xd0tr\x86\xba\x8dM\
-\x1c?1H(a\xd2\xb0>B\xe7;\x93\x1c\xc9\x05?v\xce\xf4\x81\x81\xcaA\xe1\xa7E>\
-\x9b\xa7\x94\xef\xa6\xfd\x06A\xb93\x84\xed\x18\xf8B\'\x92\x90\xd46;\xb4,\xb5\
-i^ZbOg\x1b/\xbc\xdcD\xb1\x94&=\xa8\x90^\x90{7\x1f\xa2\xba\xd5\xe0\xcc\xc1 \
-\xc5\x9c\x86\x15\x15\\\xff\xe5,\xe1jx\xee?\xef\xe2hW\x16C\xd7P\xb6\xce\xfd\
-\x8fvq\xd5M\x1aGwG\x98\x1a\xb7\x88\xd5+V|)KOo\x8a\xfd\x87\x96\xf0\x95\xd5\
-\xdd,Z\x19\xa1\xaa\xd6\'=`q\xec\xc4\x0c\xb6S:\xef3\x9dVTG`\xf3\x13\xa79w4\
-\xc0\xf1\xb7Ch\xa6`\xcd\xe6,\xcdW\xe5\xd9\xb7#I4\xe9q\xf6L\x15\xdb^]Ov\xf22\
-\x9a\x07s\xc4\xaa\xb2\x14\x0b=\xb4,\x9f\xa4\xa1\xadH\xf7\xd9(\xef\x1e\xcb#`\
-\xce\xf1\xd5\xa62\xd8\x85C4\xaf\xd1\x89\xd5\xf9\x0c\xf4\x8fs\xec\xf8$\xb6\
-\x93\xbd`\x9e\xf7\xeew\xb9\x7f\x93C\xde)\xd1\xd4\x9e@\xc8q^\xdfYb`@~\xec\x9c\
-\x89\xf5\xeb_\xab\\\x98\xfa\x94\x10\x02\xb6l\xec\xe2\xd65=\xa4\x92E\x84\x9c\
-\x9d\xfal\xd6$3c1:\x19\xe1\x17\xbf^\xc2\xd9s\xd5\x94]y\xc1sK\xdb\xa7\xd9\xb0\
-l\x88\x96\xc6\x19\x94\xa7\xf0\xd1\xe8\xeaI\xb0\xffx\x1d=\xfd\x91\xf3c\xa5T,\
-\xbfz\x92\x8d\xab\x07I\xc5\x0b\x94\xcb\x12%u\xde}\xaf\x9a\x9d\x9d\x8d\xe4\
-\xf2\x06w\xde:\xc4\xfa\x8eI\xca\xbe\xc6+o6r\xf8d\xd5G\xbc\x06,\x8f\x9b\xd7\
-\x8er\xc3\xf2!\xa4\xef"5\x18\xc9D8s\xae\x8a\r\xcb\x86\x00\xc1+o.\xe6\xf0\xc9\
-\xea\xcbjfs\x06B\xc0\x9d\xb7\x8e\xb0\xaec\x02\xd7\x97\x17\xe8\xce5\xbe\xd9w\
-\xf4\xb2\xa1c\x88\xb2\xaf\xf1\xf2\x9bm\x1c>y\xe1}\rC\x87\xbf\xfbz\x8er\xff\
-\x10\xaf}\xb7\x97\xaf\xfdK\x07=cQ\xbe\xf9t\x84Or5P,X\xf0\xbdJ\x83|\xca\x08\
-\x01\xa1\xe0\x07\xd3\xee\xba`;\x95\xed\xf6\xf9`\xdd\xaa2\xdf\x7fz\x8ag\xfez\
-\x00\xd7\x13\xfc\xe5\xbf.\xe0\x89\xaf\xc7yk\xef\'\xbbJ\xa0\x0f\x0e\x0e\xce\
-\xb3\xc5\n\x15>;\xae\xdb:\xc1\xd4P\x86c\x07\xf3<\xf2T\x80\xae\x136\xafm_\xc0\
-L\xf6\xe3/\xaf`v7\xbeB\x85/\x0c\xe1\xa0M4\x9a\xe7\xbe?\x85\x8dw\xda<\xffb\
-\xe8\x137\x07\x80>\x8f\xde*T\xf8\xccy\xf6?\x1a\t\x9auT\xc7|\x9e~N\xf2\xd2O\
-\x7f\xbb\xdb\x91\x02\xbeQ\xf9\rR\xa1\xc2E\xa8,\xb1*T\xb8\x04\x95\x06\xa9P\
-\xe1\x12\xfc/\xf2\x8e\x96s\xb76k\x01\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory005Bitmap():
- return wxBitmapFromImage(getDocFactory005Image())
-
-def getDocFactory005Image():
- stream = cStringIO.StringIO(getDocFactory005Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory005')
-catalog['DocFactory005'] = ImageClass()
-catalog['DocFactory005'].getData = getDocFactory005Data
-catalog['DocFactory005'].getImage = getDocFactory005Image
-catalog['DocFactory005'].getBitmap = getDocFactory005Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory006Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rh\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em\xff\xc8\x9f\x99N\xa63\x9d\
-.L3\x19\xa0I\xcat\xda\xa1\xa44N\x02!LlH\x8c\r\x8e#o\x18\xaf2\xb6%Y\xcb\xd3.=\
-\xe9\xad\xf7\xbe{\xef\xe9\x1f\xa2\x06\x97`\xcb \x87\xba}\x9f?\xdf\x9cs\xbf\
-\xdf\xdf9\xbf\xdf\xdc\xf3\xce\xb9G\xfc\xcd\xb7\x94\xa2B\x85\n\xbf\x16=T\xfdE\
-[\xa8P\xe1\x7f/z\xb0R \x15*|*z8\xf1E[\xf8\xff\x81@a`#\xf1.\xf8\xdd\xc5\xc0\
-\xc5\xfc\xcdy\x106\xda\xff\xf0\xa0\x80\xb2\n\xe0\xa1]\x11]\x89\x8f)J\xf8H\
-\xca\xcaB!\xae\x88\xce\x95@\x0f\xc5\xbfh\x0b\xff\xf7\x11\xf84\x14v\x11u\xcf\
-\xe1\x7f,7\xa5\x04i\xea\xe4\xdd8\xb9`;3\xfa"\\\x02W\xc8\x83G\x93\xfd\x16U^\
-\xcf\x05\x1e\x00tKak5tk[(\x13\x9aW]\r\x87\xc5\xeeO\t\x94G\xd0\x0c\xc1\x98\\F\
-Z\xde<\xaf\x1aW\x12=\\)\x90+\x8e\xc5(M\xfas\x9c~\xbd\x96\xe9\xc1\x08 @J\xa4\
-\xae\x08\xd7\x14\x89\xd4\x17i[>\x89c-\xa2/\xf8\x978\xd4\xcd\xbb\x87 \xc34\
-\x15_\xe6\xe4\x8f\xe3L\xa7\x03 \x04\x08\t@\xac\xd1f\xd9\x83\xefP4\xea\x99\
-\xe0\xd6y\xd5\r1L\x83\xfdC\x8e\xfd0Ela\x89\x965\x87(\x04\xaf\xa7\xcc\xd5\x91\
-xz\xe4\xea\xf0yU\x13R\x82\x84\xb6\n\xe1\x17\x91\x9a"\x18\x17\x18\x01\x81BP\
-\xca\x07\x19=)\xc9\x8f6\xb3\xfc\x1e\x89i\xfc\x8a\xfe\xf0}\x17,C\x84\xef!\xdc\
-2\xc2\xf7PRC\xe9\x06J\xfe\xfa\xe5\x90p\x1d\xa4[\x06\xb8\xa0mH\xe9\x84\xc5\
-\xb5(\xb7\x80\xd48\xef\x01\x04\xa9\xc5&\xa1P\x07f\xb0\x89\x88\xfc\xe4s|\xddD\
-i:\xd2)\x82\x90\xf8\x865[`\x97\xd0\x14(\xe2~\x91p~)\x92\x12\xd9t\x8c\xeb\xa2\
-\x16u\xa1q2\xf2\xa3\xc4\x9bS|J}\xa4o\x06f5\xbd2\xben\xcdj\x95\xed\xd9ff\xe0\
-\x93}\x00\xdf\x0c^\xe0y\xae\xe8U\xe6\xc0ew\xaapyX\xca\x01c\x1d\x86\xfe\x0e\
-\xb1\x94\xcb\x8d\xbfw\x0bZ(\x08\xca\xa7\x9c\xb7\x198\xd4\xc3\xc8\xf14\xe7\
-\xf6\xa7\xb8\xee\xae(\x8eq\x86\x82\x08"\x94\x87\x99\xe9\xc6\xcct\xe3\x15J\
-\x08\xd4\xec\xcb\'\x10\xc0N-\xc5\xa9j\x86\x0f\x0bI\xf8e\xac\x99\x1e\x8c\xc9\
-\xb3(\xdb\x01\xd4\xec\x0b\xc2\x08P\xac\xbd\x11-\\\x8d\x0c\xdc\x82e\xedDK\xb9\
-\xdc\xf8\xc4F\x8cH\x10\x00\xbb\xac\x984"\xc8\x80$\xe6\xf7`N\x9d\xc1\x9a\xe9F\
-\xd9.J)0\x83x\xc1j\xccb\x1a\xa5\xc0\x89\xb7RJu\\R3,t\xaa\xbd\x19rS\xcb\xc0\
-\xedDhP*\xacd\x915\xca\x90\x01%i\xcc->\xe5\x13H\x1f\xc0\xc8\xa5\x91\x86\xc4\
-\r7\xa0\x15\xc6\xf0\xed2\xc2\xb4p\xf4Zdv\x1c!\x05\xf6\xc2\x15x\xd1Z\x00\x8c\
-\xf4\t\x8c\xa9\x01\x10\x8ar\xbc\x99r\xe3\xd2\xcb\x9e;=\xc2\xc9\xf9\xc8\x81\n\
-\x17\xc1\x10:\xc2\xacB\x979\xf4\xa0\xc0\x88\xa5\xc8X\x05<\xc0\n\x85i\xbbc-^n\
-;\xb9\xe1n\n\x99kHX#\xe8\xe6\x0c\x91\xeci\xf4r\x86\xa1\x13\x93\x8c\x1f\xc9\
-\xe2\xb9>zP\xa7qC\x82\x86\xd8\x10\xc5\xe2\x02\n\xc1\x85H\xe5\x11\xc9\x9dBe\
-\xa7\xe9\x7fg\x98\xdc\xa0\x8d\xd0\xc0\x8c\x18T\xdf\x10\xa564\x82\x1dZ\x8f0R\
-\xe82\x8f\x1e\x04#\x9a\xa2\x10(\xe1\xe2\xe1\x06]\x1cF\x89\xa8!\xa2\xb9.(M3|h\
-\x9cLw\x1e\x80\xc6\rI\xe2\xcd!F\x8fN\xa3\x87ujVe\xc8\xf9\x0e\xa1\\\xf7\xa7j\
-\xd6\x85\'0\xab61\xbc\xef\x14\x83{\xf6\xa1|\x0f%\x05\xa7\xb6\xfd\x8c\xa5\x8f\
-<@B\xeb\x07\xe7\xc8\x9c\xe2\xd3U\x89X\xe08\xdd?O\x13\xaa\xb5H^?\xccDW\x96\
-\xf1c3,y0I\xc8\xfb\x11}\xbf\x0c\x13owHT\xbd\x8d\x1d\xd9\x8a\xf4\xb2\x04\xdc\
-\x97I\x1f\x0ebVy\xc4;\x04\x8e\xfa\x03\x940.k\xee\xf40{\xae@JT\xf88\x1aI\x04w\
-\xa23\x89\x10\x02\xa1B\x98\xfc\x12\x8fI\x94&\xf1\xbc\xdbX\xb0\xba\x83\x9e\
-\xed\xff\x82=6D,\x15#Q\x1eA\x14\x1a8\xfd\x83\xfd\x14\xc6F\t\xc4cH\xd3\xc4\
-\xc9O1\xbc;M1\xddF\xcbW\x97c\x98\'\xd0\x9d$\x9a\xddB\xd7\x8f\x7f@ql\x143\x1a\
-\xc1\x08\x87A8\xe4{\\\x1aWnB\xf3\x07\x10\xb4\xa03\x81g\x17\xb1\'\xa61\x82\
-\x16\xa6\xd0\xd0\x021J\xfa>\xf0r\x04\xdc6N\xbd\xfa\n\xf9\xe1a\x02\x898\xd2\
-\xb2\x18?p\x8e\xd1\xbd6\xbe[&T_Op\xc3\x9d\xe8v\x06y1\xcdUw\xa2\x14\x04\xab"T\
-\xd5J\xf2#}\x08)\t\xc7\x17\xa1\x07b\x18*\x8d?\xa7\xf8\x8e\xa3\xa4\x87i\xac\
-\xc6\x9f\xeeb\xf4\xec\x18S\xef\x87\x08V\'Y\xb8\xb6\x95\xaa\x9a\xa5\xe0\x841\
-\xfc\xa3\xe4?\xd0X\xb8\xa2\x85\x82w\x00Y\xf2\xd1\xb5\x0e\xca\xa3G\x89\xd7\
-\xd4\x11\xafj \xcf>.\xf7T\\\x0f\xb1\xeb\x8a$E\x85\x8f\x10,Bp/\xba\x18GH\x10"\
-H\x80\xf7P\xf4\x02 5\x9b`\xf5\x03\x04\xac!\xec\xf1\x83h\xac\xc4\x10\x1d\xf4\
-\xedy\x91\xf2\xd8A\x16\xde\xba\x95\xba\x9b\xb7\x80*\xe3\x16\x8b\x0c\xec\xf8g\
-\n\xbd;)\xa4\x97\x13i_\x00~\r\x03\xbb\xff\x13w\xe2}Z\xeex\x8cD\xc7:d\xc0G\
-\xd3\xe2xN\x11\xa5Ob\xea\x9d\x08w\x13\xba\x18\xc3\xcd\x9e\xe1\xec\xbf?\x834%\
-B\x934n|\x9a\xe8\x92%(/K\xe6T\x17\xce\xe8!\x16\xde\xf6\x10u7oA\xe8>\xbe\r\
-\x83o\xbd\xc8\xf4\xe9\xbd\x18\xba\x860\xeb\xd1\xdd(\x03\xbb_\xbe\xa8\xa6\xb2\
-v\x10\xbb\xf6.bmOs\xe6\xa5g\x10\xbaG\xfb\xfdO!\xacI\xa4VG\xdf\x9e\x9f\\:\xbe\
-\xb6z\x94\xb5\x1danB\x97S\x98r\x88\x96\xcd\x7fB\xac}\x05\xbe\xe8E\x05\xde\
-\x83\xdc\x12\xea\xd7\x98\xf4\xbd\xf1\x1f\x94\xa6\xbfJ0XDyI\xa6z\xba\xd0\x19"\
-\xb5\xec\x11\x08\xf5\x13\x14o\xc2e\x96\x88\x1e\x18\xbdz\xf6\xa4\xafZt\r/\x10\
-A\xb3%R\n\xf0#X\x93\x1a\xb8\xb3c\xaf\xac8\xae\x1f\xc6,\tL/\x8cP1(\xfb\xd8\
-\xbd}\x84\x82\x8d\xd4\xad{\x14\xad\xbc\x1d\xe9\xedG\x9a\x0fQ\xb7\xfaa\x06\
-\xbaOP\xea\xe9!\xb6\xf8q<O`w\x9f%\x14\xa8\xa3f\xd5CH\xf7G\xc8\xc2\x1e\x90\t4\
-\xa1\x833\x05\xa5$\x9e\tZ\t\xf4"X\xa1\x04\xba\x15E\x1a\x1aV0\x85\xe6\xba(\
-\xd9J\xa6\xf3\x9f\x08\x05\xea\xa9[\xbb\x15\xdd\xf9)\xa2t\x04\xdfz\x92\x9a\
-\xe5\xf7Q<\xb1\x1f\xdd\xd1\x11*\x01^\xe0\xd2\x9a\xb9\x19\xd03x\xd670U\x04\
-\xa9\x04\x9a^\x85f\xbf\x82g<9\xa7\xf8\xaaZ\xb6\xa2\x15v\xe3Y14[#\x14^H\xacu\
-\x13\xba\xf3\x1dp\x8e@\xd6C\xe9%\xaa\x96l&`\xbd\xc9d\xe7\x01\x9a\xb6\xfe1\
-\x9e\x9f\'{\xf8%\x12M+1\x93\x8b\x91\xf9\x1d\x90\x05.\xf3\x0cFg\xe7\xe2\xf9O\
-\x88\n\x17\x12\xab\x85\xf5#\x88\xe1 H\xc0\x1e\x81}\xb50\xad\xc0\xb0P\xeb\xd6\
-Q\xea{\x0fu2\x84\xd5\xde\x8a\x9c\x9e\xc0\x13)\xbc\xd3\x02=\xd6\x08\x85\x00\
-\xf2\xc0 \x14\x82h\x8di\xac\x86\xdb\xd0\x86\x1ba,\x86*$P\xc5"\xee\x07`$\xea\
-\xf1g\x0c\xf4C\x13P\xf8\xf8Vq5\xc4j`M\x1a1\x1c\xc0r\xdai\xdd\xfagh\xd1\x08\
-\xf8>\xfe\xf8 \xf2\xc8\x19\x9c\xe6\x058\xc7K\x18\xc9FD9\x81\xd87\r\xb9 \xb2e\
-\x00\xa3\xfe&\xb4\xa1z\x84\x97\x04/\x81\xca\xa9Kk\xfe\xb7\xee\xdaA\xe4p\x00!\
-\x05\x94\xd2\xd0\x95\xc4_,\xe7\x14\x1f\xf9\x04\x1ci\x82uq\x18\x8e\xcd.Q\xfd\
-\x14tF \xd3\x0c\x80\x08\x94\x917G\x89\xc4o&\xbb\xfb=\xec\x9b\n\xd8\xe94\xe5\
-\xa3.\xf5\xb7\xdd\x0b\xc3y\xd8\x17\x00\xff\xf2s]\x1f|\xee\xc9\xcf3\xf5\x15\
-\xe6\x80\xd1*Ht\x8cS8\xb9\x08\x89\x86\x9f\x9fdz\xeff\x90\ns\xb5\x8f\x9eu\x19\
-\xfc\xf6\x10\x85S\xb7P\xf3@#\xc5\xc36\xe6\x8a<\xaa\xb4\x81\xec\xe9\x0c^v\n\'\
-\xf48\xf6\xfb.\xa1%\x163\x9d\xfdL\xef\xea \xd8\xd0\x80?5\x85\x08\x01\xe5[\
-\xc9\xec\x1a\xc1yt\x84\x92\xfa\x1d\xec].z\x93\x8eq\x8d\x86}\xa8\x8c\x97.\x92\
-X::\xebAh \nd\xfe^\xe0\xf6\x0b\xdc\xc1\x1a\xb4\x86\x06\x92\x7f]\xc2\xcb\xac\
-\xa5\xd0\x95\xa3<1\x8c\x13x\x84\xe2^\x9b\xf0\x92\x003{z\x98\xde\xd5A\xe8\x9a\
-\x14~!\x8d\x90\xfe%5K{l\x8cE>\x89\xeb\xc7\xc9\x1fkG \xf1\xf3cd^_C\xd5\xd3\
-\x859\xc5\xe7\x8eg\x99\xdc\xf6e\xe27\x0cQ\xe8j\x9a\xdd\xe6\xcd\x0f3\xf1\xfd\
-\xbb(w\x97\xcf\x8fq\xa8/@l\xf5\xc3\x0c>?\xc3\x89?\xda\x8e*\xbaX\rwa-\\O\xe6\
-\xdbC\x14\x7f\xf1\xbb\x9fi\xee\xf4WW\xad\x9f\xa74\xa8\xf0iT\xd7\xcfp/\xbb9\
-\x97\xaa\xc6)Jj\x07\x07\xe1~\x8b\xfc$d\x87\x1d\xba\xbfe\x93\xc9\xa5\xb8\xee\
-\xf7\xeb1\x96\x96yk[37\xc4\xfa\x89>\xd1\xce\xe1\xbf=\xcd\xf0\xb3\xbbi\xbbs\
-\x01re\x90\xd2\xf1<\xa7\xde\xccPlm\xa7nc\x9c\xae^\x87D*K\xf8\xb16\x0e\xfd\
-\x9d\xcf\xd8w;i\xbb\xa3\x1euW\x14\xdd\x02\xddpI~-\xc2\xfe\x1d\xad\xdc.wp.\
-\x95\x04\xa9\xd1\xce oF\xeec"\x99\x84$HM\xf1\x95\xbe\xfd\xe8\x0f\xb4r\xf8{}\
-\x14\xbe\xbf\x9f\xc6\xb5\xb5\xf8\xebM\x06>\xd4\xcc5\xb5\x91\xac\xb3hu\xfb\
-\xc8N\x19\x97\xd4|\'\xba\x12\x81\xcd\xbd\xe25zj\xaaQ\xd2\xa0U\xa4\xf9Er\x15\
-\xabz{\xe7\x16\xdf\x80\xcb\xa9\xc5K\xb8G\x1d\xa0/\x19CH\xc9\xb5\xaa\x9f\x9d\
-\xd7\xade"\x1e>?\xc6\xb1\x19\xc1\x96f\x97\xc9\xdb\xd72r|\x08B:\xab\x1f\xde\
-\xc8t\xae\x8aW\x9d8\xf6\xaa\xcf\xf6\xd1\xba~\xca/\xccW\x1eT\xf8\x14\x1a\xfdi\
-l\xbb\x97q\xa7\xc4\xc4\x98N\xff7\xd3\xa0\xe9\xd8\x8e\x81\x12\x1a\x08\xc9\xa2\
-e.\x1d\xbf\x9d\xe7\xe0\x916\xde\xee\t1\xaa\x87y\xe2\xc1Q\x16n68\xfc\xb3\x1c\
-\'\x9f?\x8b\x92\x1a\xbe0\x08\'$\xcb\xee\x91\x985#\xbc\xbem\x19\x8d\xb5>\x0fo\
-\x19\xa3\xeeK\x1a\xa7\xf6\xe69\xf9B\xef\xf9\xb6\xd5M\x92\xfb\xfe\xc2`\\\x0bb\
-\x97\xce0^\x0ecE%\x8e=\xca\xd9r\x8e\x11\xff\xc3\x835\x1f\xdc\xce\x04\x8fn\
-\xc9\x11^!9\xb4g\x9c\xfd\xeffPR#Zk\xb0\xe0:\xc9PI\x12\x8c\xe4\xb1\x8bgy\xf7\
-\xf0\n~k\xe3\xc55\x87\xf4&\x1c\xc7\xa7T\xe8f\xd8\xae&\x18s(\xdb\xe3\x9c.\xe5\
-\x99>2\xb7\xf8\xde\xd8\xb6\x0c)\xa7qJ\xa7\x99t\nXU\x06e\xfb\x0cg\xcb\xd72\
-\xe2\x7f\xec\xb0r\x0c\x9aN\xceP\xb7\xb1\x89\xe3\'\x06\t%L\x1a\xd6G\xe8|o\x92\
-#\xb9\xe0g\x9e;}`\xa0rPx\xa5\xc9g\xf3\x94\xf2\xdd\xb4\xdf$(w\x86\xb0\x1d\x03\
-_\xe8D\x12\x92\xdaf\x87\x96\xa56\xcdKK\xec\xe9l\xe3\xa5W\x9b(\x96\xd2\xa4\
-\x07\x15\xd2\x0br\xff\xe6CT\xb7\x1a\x9c9\x18\xa4\x98\xd3\xb0\xa2\x82\x1b\xbf\
-\x9c%\\\r/\xfc\xdb=\x1c\xed\xcab\xe8\x1a\xca\xd6y\xf0\xf1.\xae\xb9E\xe3\xe8\
-\xee\x08S\xe3\x16\xb1z\xc5\x8a/e\xe9\xe9M\xb1\xff\xd0\x12\xbe\xb2\xba\x9bE+#\
-T\xd5\xfa\xa4\x07,\x8e\x9d\x98\xc1vJ\xe7}\xa6\xd3\x8a\xea\x08l~\xea4\xe7\x8e\
-\x068\xfen\x08\xcd\x14\xac\xd9\x9c\xa5\xf9\x9a<\xfbv$\x89&=\xce\x9e\xa9b\xdb\
-\xeb\xeb\xc9N^B\xf3`\x8eXU\x96b\xa1\x87\x96\xe5\x934\xb4\x15\xe9>\x1b\xe5\
-\xfdcy\x04\xcc9\xbe\xdaT\x06\xbbp\x88\xe65:\xb1:\x9f\x81\xfeq\x8e\x1d\x9f\
-\xc4v\xb2\x17\x8c\xf3\xde\xfd.\x0fnr\xc8;%\x9a\xda\x13\x089\xce\x9b;K\x0c\
-\x0c\xc8\xcf<wb\xfd\xfa7*\x17\xa6\xae0B\xc0\x96\x8d]\xdc\xbe\xa6\x87T\xb2\
-\x88\x90\xb3C\x9e\xcd\x9adf,F\'#\xfc\xfcWK8{\xae\x9a\xb2+/\xe8\xb7\xb4}\x9a\
-\r\xcb\x86hi\x9cAy\n\x1f\x8d\xae\x9e\x04\xfb\x8f\xd7\xd1\xd3\x1f9\xdfVJ\xc5\
-\xf2k\'\xd9\xb8z\x90T\xbc@\xb9,QR\xe7\xfd\x0f\xaa\xd9\xd9\xd9H.op\xf7\xedC\
-\xac\xef\x98\xa4\xeck\xbc\xf6v#\x87OV}\xc2k\xc0\xf2\xb8u\xed(7-\x1fB\xfa.R\
-\x83\x91L\x843\xe7\xaa\xd8\xb0l\x08\x10\xbc\xf6\xf6b\x0e\x9f\xac\xbe\xa4f6g \
-\x04\xdc}\xfb\x08\xeb:&p}y\x81\xee\\\xe3\x9b}F/\x1b:\x86(\xfb\x1a\xaf\xbe\
-\xdd\xc6\xe1\x93\x17\xde\xd30t\xf8\xab\xaf\xe7(\xf7\x0f\xf1\xc6wz\xf9\xda?t\
-\xd03\x16\xe5\x9b\xcfF\xf8<W\x02\xc5\x82\x05\xdf\xad\x14\xc8o\x08! \x14\xfch\
-\xb8]\x17l\xa7\xb2\xcd>\x1f\xac[U\xe6{\xcfN\xf1\xdc\x9f\x0f\xe0z\x82?\xfd\
-\xc7\x05<\xf5\xf58\xef\xec\xfd|W\t\xf4\xc1\xc1\xc1y\xb2X\xa1\xc2\x17\xc7\r[\
-\'\x98\x1a\xcap\xec`\x9e\xc7\x9e\t\xd0u\xc2\xe6\x8d\xed\x0b\x98\xc9~\xf6\xe5\
-\x15\xcc\xee\xcaW\xa8p\xd5\x13\x0e\xdaD\xa3y\x1e\xf8C\xd8x\xb7\xcd\x8b/\x87>\
-wq\x00\xe8\xf3\xe0\xadB\x85/\x9c\xe7\xff\xb5\x91\xa0YGu\xcc\xe7\xd9\x17$\xaf\
-\xfcd~nG\n\xf8F\xe5?H\x85\n\x9fBe\x89U\xa1\xc2E\xa8\x14H\x85\n\x17\xe1\xbf\
-\x00\xd7"\x96s\xaa\x0e\x1d/\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory006Bitmap():
- return wxBitmapFromImage(getDocFactory006Image())
-
-def getDocFactory006Image():
- stream = cStringIO.StringIO(getDocFactory006Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory006')
-catalog['DocFactory006'] = ImageClass()
-catalog['DocFactory006'].getData = getDocFactory006Data
-catalog['DocFactory006'].getImage = getDocFactory006Image
-catalog['DocFactory006'].getBitmap = getDocFactory006Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory007Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rf\
-IDATx\x9c\xed\x9bil\x9c\xc7y\xc7\x7f3\xef\xb5\'\xf7\xe0\xf2\x94HJ$e[6%Y\xb7|\
-*\x91\x9d\xb8\x92\x8f\xfaR}\xb4vQ\xb4\x08\x8a\xdah\xe1\xb6\x1f\xf21(\x82\x02\
-E\x0f\xa3A`\xe7\xaaQ\xb4p\x9d\xbaQ\x12;\x8e\x11\xc9Nd\xc9V\x14\xea\xb2\xac\
-\x8b\x94%\x91\x14\x8f\xe5M.\xb9\xe7\xfb\xee\xfb\xbe\xd3\x0fte\xab\x8e%U\xa2\
-\xe2*\xd8\xdf\xc7\xc5\xcc\xfc\xff\xcf\xcc\xf3`ggv\xc4\xdf}C)*T\xa8\xf0k\xd1C\
-\xd5\x9f\xb7\x85\n\x15\xfe\xff\xa2\x07+\x05R\xa1\xc2g\xa2\x87\x13\x9f\xb7\
-\x85\xdfn\x04\n\x03\x1b\x89w\xde\xe7.\x06.\xe6o\xce\x83\xb0\xd1\xfe\x97\x07\
-\x05\x94U\x00\x0f\xed\xaa\xe8J|LQ\xc2GRV\x16\nqUt\xae&z(\xfey[\xf8\xedE\xe0\
-\xd3P\xd8E\xd4=\x8b\xff\x89\xdc\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\xed\xcc\xea\
-\x8bp\t\\%\x0f\x1eM\xf6\xdbTy\xbd\xe7y\x00\xd0-\x85\xad\xd5\xd0\xa3m\xa1Lh^u\
-5\x1c\x16\xbb?%P\x1eE3\x04\xe3r\x19iy\xeb\xbcj\xfc&\xd0\xc3\x95\x02\xb9jX\
-\x8c\xd1\xa4\xbf\xc0\xa97j\x99\x19\x8a\x00\x02\xa4D\xea\x8apM\x91H}\x91\xb6\
-\xe5S8\xd6"\xfa\x83\x7f\x8dC\xdd\xbc{\x082BS\xf1\x15\xba~\x1cg&\x1d\x00!@H\
-\x00b\x8d6\xcb\x1e~\x97\xa2Q\xcf$\xb7\xcf\xabn\x88\x11\x1a\xec\x1fr\xec\x87)\
-b\x0bK\xb4\xac9D!x#e\xae\xad\x84\xd3#\xd7\x96\xdfk\x8a\x90\x12$\xb4U\x08\xbf\
-\x88\xd4\x14\xc1\xb8\xc0\x08\x08\x14\x82R>\xc8X\x97$?\xd6\xcc\xf2\xfb$\xa6\
-\xf1+\x06\xc2\x0f\x9c\xb7\r\x11\xbe\x87p\xcb\x08\xdfCI\r\xa5\x1b(\xf9\xeb\
-\xb7C\xc2u\x90n\x19\xe0\xbc\xb6!\xa5\x13\x16\xd7\xa3\xdc\x02R\xe3\x9c\x07\
-\x10\xa4\x16\x9b\x84B\x1d\x98\xc1&"\xf2\xd3\xe3\xf8\xba\x89\xd2t\xa4S\x04!\
-\xf1\rk\xae\xc0.\xa2)P\xc4\xfd"\xe1\xfcR$%\xb2\xe9\x187D-\xeaB\x13d\xe4\xc7\
-\twI\xf1)\xf5\xb1\xbe\x19\x98\xd3\xf4\xca\xf8\xba5\xa7U\xb6\xe7\x9a\x99\x81O\
-\xf7\x01|3x\x9e\xe7\xff+z\x959x\xd9\x9d+\\\x18K9`\xac\xc3\xd0\xdf%\x96r\xb9\
-\xf9\x0fnC\x0b\x05A\xf9\x94\xf36\x83\x87z\x19=\x9e\xe6\xec\xfe\x147\xdc\x13\
-\xc51NS\x10A\x84\xf203=\x98\x99\x1e\xbcB\t\x81\x9a\xfb\xf2\t\x04\xb0SKq\xaa\
-\x9a\xe1\xa3B\x12~\x19k\xb6\x17c\xea\x0c\xcav\x005\xf7\x05a\x04(\xd6\xde\x8c\
-\x16\xaeF\x06n\xc3\xb2v\xa2\xa5\\n~j#F$\x08\x80]VL\x19\x11d@\x12\xf3{1\xa7Oc\
-\xcd\xf6\xa0l\x17\xa5\x14\x98A\xbc`5f1\x8dR\xe0\xc4[)\xa5:.\xaa\x19\x16:\xd5\
-\xde,\xb9\xe9e\xe0v"4(\x15V\xb2\xc8\x1ac\xd8\x80\x924.->\xe5\x13H\x1f\xc0\
-\xc8\xa5\x91\x86\xc4\r7\xa0\x15\xc6\xf1\xed2\xc2\xb4p\xf4Zdv\x02!\x05\xf6\
-\xc2\x15x\xd1Z\x00\x8c\xf4\t\x8c\xe9A\x10\x8ar\xbc\x99r\xe3\xd2\xcb^C=B\xd7\
-\x95\xe4@\x85\x0b`\x08\x1daV\xa1\xcb\x1czP`\xc4Rd\xac\x02\x1e`\x85\xc2\xb4\
-\xdd\xb5\x16/\xb7\x9d\xdcH\x0f\x85\xccu$\xacQts\x96H\xf6\x14z9\xc3\xf0\x89)&\
-\x8ed\xf1\\\x1f=\xa8\xd3\xb8!ACl\x98bq\x01\x85\xe0B\xa4\xf2\x88\xe4N\xa2\xb2\
-3\x0c\xbc;Bn\xc8Fh`F\x0c\xaao\x8aR\x1b\x1a\xc5\x0e\xadG\x18)t\x99G\x0f\x82\
-\x11MQ\x08\x94p\xf1p\x83.\x0ecD\xd40\xd1\\7\x94f\x1894A\xa6\'\x0f@\xe3\x86$\
-\xf1\xe6\x10cGg\xd0\xc3:5\xab2\xe4|\x87P\xae\xe735\xeb\xc2\x93\x98U\x9b\x18\
-\xd9w\x92\xa1=\xfbP\xbe\x87\x92\x82\x93\xdb~\xc6\xd2\xc7\x1e"\xa1\r\x80s\xe4\
-\x92\xe2\xd3U\x89X\xe08=?O\x13\xaa\xb5H\xde8\xc2dw\x96\x89c\xb3,y8I\xc8\xfb\
-\x11\xfd\xbf\x0c\x13owHT\xbd\x83\x1d\xd9\x8a\xf4\xb2\x04\xdcWH\x1f\x0ebVy\
-\xc4;\x04\x8e\xfa#\x940.k\r\xf50{\xe61%*|\x12\x8d$\x82\xbb\xd1\x99B\x08\x81P\
-!L~\x89\xc7\x14J\x93x\xde\x1d,X\xddA\xef\xf6\x7f\xc5\x1e\x1f&\x96\x8a\x91(\
-\x8f"\n\r\x9c\xfa\xc1~\n\xe3c\x04\xe21\xa4i\xe2\xe4\xa7\x19\xd9\x9d\xa6\x98n\
-\xa3\xe5\xcb\xcb1\xcc\x13\xe8N\x12\xcdn\xa1\xfb\xc7?\xa08>\x86\x19\x8d`\x84\
-\xc3 \x1c\xf2\xbd.\x8d+7\xa1\xf9\x83\x08Z\xd0\x99\xc4\xb3\x8b\xd8\x933\x18A\
-\x0bShh\x81\x18%}\x1fx9\x02n\x1b\'_{\x95\xfc\xc8\x08\x81D\x1ciYL\x1c8\xcb\
-\xd8^\x1b\xdf-\x13\xaa\xaf\'\xb8\xe1nt;\x83\xbc\x90\xe6\xaa\xbbQ\n\x82U\x11\
-\xaaj%\xf9\xd1~\x84\x94\x84\xe3\x8b\xd0\x031\x0c\x95\xc6\xbf\xa4\xf8\x8e\xa3\
-\xa4\x87i\xac\xc6\x9f\xe9f\xec\xcc8\xd3\x1f\x84\x08V\'Y\xb8\xb6\x95\xaa\x9a\
-\xa5\xe0\x841\xfc\xa3\xe4?\xd4X\xb8\xa2\x85\x82w\x00Y\xf2\xd1\xb5\x0e\xcacG\
-\x89\xd7\xd4\x11\xafj \xcf>.\xf76\\\x0f\xb1k^\x93\xa2\xc2\xc7\x08\x16!\xb8\
-\x1f]L $\x08\x11$\xc0\xfb(\xfa\x00\x90\x9aM\xb0\xfa!\x02\xd60\xf6\xc4A4Vb\
-\x88\x0e\xfa\xf7\xbcDy\xfc \x0bo\xdfJ\xdd\xad[@\x95q\x8bE\x06w\xfc\x0b\x85\
-\xbe\x9d\x14\xd2\xcb\x89\xb4/\x00\xbf\x86\xc1\xdd\xff\x85;\xf9\x01-w=A\xa2c\
-\x1d2\xe0\xa3iq<\xa7\x88\xd2\xa70\xf5N\x84\xbb\t]\x8c\xe3fOs\xe6?\x9eC\x9a\
-\x12\xa1I\x1a7>Kt\xc9\x12\x94\x97%s\xb2\x1bg\xec\x10\x0b\xefx\x84\xba[\xb7 t\
-\x1f\xdf\x86\xa1\xb7_b\xe6\xd4^\x0c]C\x98\xf5\xe8n\x94\xc1\xdd\xaf\\PSY;\x88\
-]\x7f\x0f\xb1\xb6g9\xfd\xf2s\x08\xdd\xa3\xfd\xc1g\x10\xd6\x14R\xab\xa3\x7f\
-\xcfO.\x1e_[=\xca\xda\x8e07\xa1\xcbiL9L\xcb\xe6?#\xd6\xbe\x02_\xf4\xa1\x02\
-\xefCn\t\xf5kL\xfa\xdf\xfcOJ3_&\x18,\xa2\xbc$\xd3\xbd\xdd\xe8\x0c\x93Z\xf6\
-\x18\x84\x06\x08\x8a\xb7\xe02KD\x0f\x8c]{g\xd3\xd7\x0c\xba\x86\x17\x88\xa0\
-\xd9\x12)\x05\xf8\x11\xac)\r\xdc\xb99WV\x1c\xd7\x0fc\x96\x04\xa6\x17F\xa8\
-\x18\x94}\xec\xbe~B\xc1F\xea\xd6=\x8eV\xde\x8e\xf4\xf6#\xcdG\xa8[\xfd(\x83=\
-\'(\xf5\xf6\x12[\xfc$\x9e\'\xb0{\xce\x10\n\xd4Q\xb3\xea\x11\xa4\xfb#da\x0f\
-\xc8\x04\x9a\xd0\xc1\x99\x86R\x12\xcf\x04\xad\x04z\x11\xacP\x02\xdd\x8a"\r\r\
-+\x98Bs]\x94l%\xd3\xf9mB\x81z\xea\xd6nEw~\x8a(\x1d\xc1\xb7\x9e\xa6f\xf9\x03\
-\x14O\xecGwt\x84J\x80\x17\xb8\xb8fn\x16\xf4\x0c\x9e\xf55L\x15A*\x81\xa6W\xa1\
-\xd9\xaf\xe2\x19O_R|U-[\xd1\n\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xba\t\xdd\
-\xf9\x0e8G \xeb\xa1\xf4\x12UK6\x13\xb0\xdeb\xaa\xf3\x00M[\xff\x14\xcf\xcf\
-\x93=\xfc2\x89\xa6\x95\x98\xc9\xc5\xc8\xfc\x0e\xc8\x02\x97y\x07\xa3\xb3s\xf1\
-\xfc%D\x85\xf3\x89\xd5\xc2\xfaQ\xc4H\x10$`\x8f\xc2\xbeZ\x98Q`X\xa8u\xeb(\xf5\
-\xbf\x8f\xea\na\xb5\xb7"g&\xf1D\n\xef\x94@\x8f5B!\x80<0\x04\x85 Zc\x1a\xab\
-\xe1\x0e\xb4\x91F\x18\x8f\xa1\n\tT\xb1\x88\xfb!\x18\x89z\xfcY\x03\xfd\xd0$\
-\x14>yT\\\r\xb1\x1aX\x93F\x8c\x04\xb0\x9cvZ\xb7\xfe\x05Z4\x02\xbe\x8f?1\x84<\
-r\x1a\xa7y\x01\xce\xf1\x12F\xb2\x11QN \xf6\xcd@.\x88l\x19\xc4\xa8\xbf\x05m\
-\xb8\x1e\xe1%\xc1K\xa0r\xea\xe2\x9a\xff\xa3\xbbv\x089\x12@H\x01\xa54t\'\xf1\
-\x17\xcbK\x8a\x8f|\x02\x8e4\xc1\xba8\x8c\xc4\xe6\xb6\xa8~\n:#\x90i\x06@\x04\
-\xca\xc8[\xa3D\xe2\xb7\x92\xdd\xfd>\xf6-\x05\xect\x9a\xf2Q\x97\xfa;\xee\x87\
-\x91<\xec\x0b\x80\x7f\xf99\xae\x0f\xbd\xf0\xf4ew\xaepa\x8cVA\xa2c\x82B\xd7"$\
-\x1a~~\x8a\x99\xbd\x9bA*\xcc\xd5>z\xd6e\xe8\x9b\xc3\x14N\xdeF\xcdC\x8d\x14\
-\x0f\xdb\x98+\xf2\xa8\xd2\x06\xb2\xa72x\xd9i\x9c\xd0\x93\xd8\x1f\xb8\x84\x96\
-X\xccv\x0e0\xb3\xab\x83`C\x03\xfe\xf44"\x04\x94o\'\xb3k\x14\xe7\xf1QJ\xea\
-\xf7\xb0w\xb9\xe8M:\xc6u\x1a\xf6\xa12^\xbaHb\xe9\xd8\x9c\x07\xa1\x81(\x90\
-\xf9G\x81; p\x87j\xd0\x1a\x1aH\xfem\t/\xb3\x96Bw\x8e\xf2\xe4\x08N\xe01\x8a{m\
-\xc2K\x02\xcc\xee\xe9efW\x07\xa1\xebR\xf8\x854B\xfa\x17\xd5,\xed\xb11\x16\
-\xf9$n\x9c \x7f\xac\x1d\x81\xc4\xcf\x8f\x93yc\rU\xcf\x16.)>w"\xcb\xd4\xb6/\
-\x12\xbfi\x98Bw\xd3\xdc1o~\x84\xc9\xef\xdfC\xb9\xa7|n\x8eC\xfd\x01b\xab\x1fe\
-\xe8\xc5YN\xfc\xc9vT\xd1\xc5j\xb8\x07k\xe1z2\xdf\x1c\xa6\xf8\x8b\xdf\xbf\xa2\
-5\xd4_[\xb5\xfe\n\xd3\xa0\xc2gQ]?\xcb\xfd\xec\xe6l\xaa\x1a\xa7(\xa9\x1d\x1a\
-\x82\x07-\xf2S\x90\x1dq\xe8\xf9\x86M&\x97\xe2\x86?\xac\xc7XZ\xe6\xedm\xcd\
-\xdc\x14\x1b \xfaT;\x87\xff\xfe\x14#\xcf\xef\xa6\xed\xee\x05\xc8\x95AJ\xc7\
-\xf3\x9c|+C\xb1\xb5\x9d\xba\x8dq\xba\xfb\x1c\x12\xa9,\xe1\'\xda8\xf4\x0f>\
-\xe3\xdf\xed\xa4\xed\xaez\xd4=Qt\x0bt\xc3%\xf9\x95\x08\xfbw\xb4r\xa7\xdc\xc1\
-\xd9T\x12\xa4F;C\xbc\x15y\x80\xc9d\x12\x92 5\xc5\x97\xfa\xf7\xa3?\xd4\xca\
-\xe1\xef\xf5S\xf8\xfe~\x1a\xd7\xd6\xe2\xaf7\x19\xfcH3\xd7\xd4F\xb2\xce\xa2\
-\xd5\xed\';m\\T\xf3\xdd\xe8J\x046\xf7\x8b\xd7\xe9\xad\xa9FI\x83V\x91\xe6\x17\
-\xc9U\xac\xea\xeb\xbb\xb4\xf8\x06]N.^\xc2}\xea\x00\xfd\xc9\x18BJ\xaeW\x03\
-\xec\xbca-\x93\xf1\xf0\xb99\x8e\xcd\n\xb64\xbbL\xdd\xb9\x96\xd1\xe3\xc3\x10\
-\xd2Y\xfd\xe8FfrU\xbc\xe6\xc4\xb1W]\xd9\x9f\xd5\xf5\x93~\xe1J\xf3\xa0\xc2g\
-\xd0\xe8\xcf`\xdb}L8%&\xc7u\x06\xbe\x9e\x06M\xc7v\x0c\x94\xd0@H\x16-s\xe9\
-\xf8\xdd<\x07\x8f\xb4\xf1No\x881=\xccS\x0f\x8f\xb1p\xb3\xc1\xe1\x9f\xe5\xe8z\
-\xf1\x0cJj\xf8\xc2 \x9c\x90,\xbbOb\xd6\x8c\xf2\xc6\xb6e4\xd6\xfa<\xbae\x9c\
-\xba/h\x9c\xdc\x9b\xa7\xeb[}\xe7\xdaV7I\x1e\xf8+\x83\t-\x88]:\xcdD9\x8c\x15\
-\x958\xf6\x18g\xca9F\xfd\x8f.\xd6|p;\x13<\xbe%Gx\x85\xe4\xd0\x9e\t\xf6\xbf\
-\x97AI\x8dh\xad\xc1\x82\x1b$\xc3%I0\x92\xc7.\x9e\xe1\xbd\xc3+\xf8\x9d\x8d\
-\x17\xd6\x1c\xd6\x9bp\x1c\x9fR\xa1\x87\x11\xbb\x9a`\xcc\xa1lOp\xaa\x94g\xe6\
-\xc8\xa5\xc5\xf7\xe6\xb6eH9\x83S:\xc5\x94S\xc0\xaa2(\xdb\xa79S\xbe\x9eQ\xff\
-\x13\x97\x95\xe3\xd0\xd45K\xdd\xc6&\x8e\x9f\x18"\x940iX\x1f\xa1\xf3\xfd)\x8e\
-\xe4\x82W\xbc\x86\xfa\xe0`\xe5\xa2\xf0j\x91\xcf\xe6)\xe5{h\xbfEP\xee\x0ca;\
-\x06\xbe\xd0\x89$$\xb5\xcd\x0e-Km\x9a\x97\x96\xd8\xd3\xd9\xc6\xcb\xaf5Q,\xa5\
-I\x0f)\xa4\x17\xe4\xc1\xcd\x87\xa8n58}0H1\xa7aE\x057\x7f1K\xb8\x1a\xbe\xf5\
-\xef\xf7q\xb4;\x8b\xa1k([\xe7\xe1\'\xbb\xb9\xee6\x8d\xa3\xbb#LOX\xc4\xea\x15\
-+\xbe\x90\xa5\xb7/\xc5\xfeCK\xf8\xd2\xea\x1e\x16\xad\x8cPU\xeb\x93\x1e\xb48v\
-b\x16\xdb)\x9d\xf3\x99N+\xaa#\xb0\xf9\x99S\x9c=\x1a\xe0\xf8{!4S\xb0fs\x96\
-\xe6\xeb\xf2\xec\xdb\x91$\x9a\xf48s\xba\x8amo\xac\';u\x11\xcd\x839bUY\x8a\
-\x85^Z\x96O\xd1\xd0V\xa4\xe7L\x94\x0f\x8e\xe5\x11p\xc9\xf1\xd5\xa62\xd8\x85C\
-4\xaf\xd1\x89\xd5\xf9\x0c\x0eLp\xec\xf8\x14\xb6\x93=o\x9e\xf7\xeewyx\x93C\
-\xde)\xd1\xd4\x9e@\xc8\t\xde\xdaYbpP^\xf1\x1a\x8a\xf5\xeb\xdf\xac<\x98\xbaJ\
-\x08\x01[6vs\xe7\x9a^R\xc9"B\xceMu6k\x92\x99\xb5\x18\x9b\x8a\xf0\xf3_-\xe1\
-\xcc\xd9j\xca\xae<\xaf\xdf\xd2\xf6\x196,\x1b\xa6\xa5q\x16\xe5)|4\xba{\x13\
-\xec?^G\xef@\xe4\\[)\x15\xcb\xaf\x9fb\xe3\xea!R\xf1\x02\xe5\xb2DI\x9d\x0f>\
-\xacfgg#\xb9\xbc\xc1\xbdw\x0e\xb3\xbec\x8a\xb2\xaf\xf1\xfa;\x8d\x1c\xee\xaa\
-\xfa\x94\xd7\x80\xe5q\xfb\xda1nY>\x8c\xf4]\xa4\x06\xa3\x99\x08\xa7\xcfV\xb1a\
-\xd90 x\xfd\x9d\xc5\x1c\xee\xaa\xbe\xa8f6g \x04\xdc{\xe7(\xeb:&q}y\x9e\xee\
-\xa5\xc677F\x1f\x1b:\x86)\xfb\x1a\xaf\xbd\xd3\xc6\xe1\xae\xf3\xdfg\x18:\xfc\
-\xcdWs\x94\x07\x86y\xf3;}|\xe5\x9f:\xe8\x1d\x8f\xf2\xf5\xe7#\xcc\xc7S@\xb1`\
-\xc1w+\x05r\x95\x11\x02B\xc1\x8f\xa7\xd9u\xc1v*\xc7\xeb\xf3\xc1\xbaUe\xbe\
-\xf7\xfc4/\xfc\xe5 \xae\'\xf8\xf3\x7f^\xc03_\x8d\xf3\xee\xde\xf9yJ\xa0\x0f\r\
-\r\xcd\xcb@\x15*|\x1e\xdc\xb4u\x92\xe9\xe1\x0c\xc7\x0e\xe6y\xe2\xb9\x00\xdd\
-\'l\xde\xdc\xbe\x80\xd9\xec\x95o\xaf`\xeet\xbeB\x85k\x96p\xd0&\x1a\xcd\xf3\
-\xd0\x1f\xc3\xc6{m^z%4o\xc5\x01\xa0\xcf\xdbH\x15*|\x0e\xbc\xf8o\x8d\x04\xcd:\
-\xaac>\xcf\x7fK\xf2\xeaO\xe6\xf7u\xa4\x80\xafU~\x83T\xa8\xf0\x19T\xb6X\x15*\
-\\\x80J\x81T\xa8p\x01\xfe\x1b\xbb\xb6\x96s\xa2\x04\x9a\xd7\x00\x00\x00\x00IE\
-ND\xaeB`\x82'
-
-def getDocFactory007Bitmap():
- return wxBitmapFromImage(getDocFactory007Image())
-
-def getDocFactory007Image():
- stream = cStringIO.StringIO(getDocFactory007Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory007')
-catalog['DocFactory007'] = ImageClass()
-catalog['DocFactory007'].getData = getDocFactory007Data
-catalog['DocFactory007'].getImage = getDocFactory007Image
-catalog['DocFactory007'].getBitmap = getDocFactory007Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory008Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rc\
-IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\x8a\
-.F\x83\xc0v\x93\xd4(Z\xb8N\x9c(\x89\x1d\xc7\x88d\'\xb2d+\n\xb5Y\xd6F\xca\x92\
-H\x8a\xcb\xe5N^\xf2\xae\xe7\xdcs\xce\xf4\x07]\xc9\xaccK\xa8\xe8-\xb8\xcf\xcf\
-\x8b9\xdf\xfb~3\xf3\xe1\xcc\x9d9#\xfe\xe1[JQ\xa1B\x85\xdf\x8a\x1e\xaa\xfe\
-\xac-T\xa8\xf0\xf9E\x0fV\n\xa4B\x85\x8fD\x0f\'>k\x0b\xbf\x9b\x08\x14\x066\
-\x12o\xde\xef.\x06.\xe6\xa7\xe7A\xd8h\xff\xc7\x83\x02\xca*\x80\x87\xf6\x89\
-\xe8J|LQ\xc2GRV\x16\n\xf1\x89\xe8|\x1a\xe8\xa1\xf8gm\xe1w\x0f\x81OCa\x0fQ\
-\xf7<\xfe\x07\xe6\xa6\x94 M\x9d\xbc\x1b\'\x17lgV_\x82K\xe0\x13\xf2\xe0\xd1d\
-\xbfA\x95\xd7;\xcf\x03\x80n)l\xad\x86\x1em\x1beB\x0b\xaa\xab\xe1\xb0\xd4\xfd\
-9\x81\xf2(\x9a!\x18\x97+H\xcb\x1b\x17T\xe3\xd3D\x0fW\nd\xc1\xb1\x18\xa3I\x7f\
-\x863\xaf\xd623\x14\x01\x04H\x89\xd4\x15\xe1\x9a"\x91\xfa"m+\xa7p\xac%\xf4\
-\x07\xff\x16\x87\xba\x05\xf7\x10d\x84\xa6\xe2\x8bt\xfd4\xceL:\x00B\x80\x90\
-\x00\xc4\x1amV\xdc\xff\x16E\xa3\x9eIn^P\xdd\x10#4\xd8?\xe6\xc4\x8fS\xc4\x16\
-\x97hYw\x84B\xf0Z\xca|1\'\x9a\x1e\xf9b\xfa\xfe\\\x13R\x82\x84\xb6\x06\xe1\
-\x17\x91\x9a"\x18\x17\x18\x01\x81BP\xca\x07\x19\xeb\x92\xe4\xc7\x9aYy\x97\
-\xc44~\xc3@\xf8\x9ey\xcb\x10\xe1{\x08\xb7\x8c\xf0=\x94\xd4P\xba\x81\x92\xbf}\
-9$\\\x07\xe9\x96\x01\xe6\xb5\r)\x9d\xb0\xb8\x1a\xe5\x16\x90\x1a\x17<\x80 \
-\xb5\xd4$\x14\xea\xc0\x0c6\x11\x91\x1f\x8e\xe3\xeb&J\xd3\x91N\x11\x84\xc47\
-\xac\xb9\x02\xbb\x84\xa6@\x11\xf7\x8b\x84\xf3\xcb\x91\x94\xc8\xa6c\\\x13\xb5\
-\xa8\x0bM\x90\x91\x17\'\xdae\xe5\xa7\xd4E}30\xa7\xe9\x95\xf1ukN\xabl\xcf53\
-\x03\x1f~\x06\xf0\xcd\xe0<\xcf\xff_\xf4*s\xf0\x8a\x83T\x98\x8f\xa5\x1c06`\
-\xe8o\x11K\xb9\\\xffG7\xa1\x85\x82\xa0|\xcay\x9b\xc1#\xbd\x8c\x9eLs\xfe`\x8a\
-k\xee\x88\xe2\x18g)\x88 By\x98\x99\x1e\xccL\x0f^\xa1\x84@\xcd\xbd|\x02\x01\
-\xec\xd4r\x9c\xaafx\xbf\x90\x84_\xc6\x9a\xed\xc5\x98:\x87\xb2\x1d@\xcd\xbd \
-\x8c\x00\xc5\xda\xeb\xd1\xc2\xd5\xc8\xc0MX\xd6n\xb4\x94\xcb\xf5\x8fm\xc6\x88\
-\x04\x01\xb0\xcb\x8a)#\x82\x0cHb~/\xe6\xf4Y\xac\xd9\x1e\x94\xed\xa2\x94\x023\
-\x88\x17\xac\xc6,\xa6Q\n\x9cx+\xa5T\xc7%5\xc3B\xa7\xda\x9b%7\xbd\x02\xdcN\
-\x84\x06\xa5\xc2j\x96Xc\x0c\x1bP\x92\xc6\xe5\xe5\xa7|\x02\xe9C\x18\xb94\xd2\
-\x90\xb8\xe1\x06\xb4\xc28\xbe]F\x98\x16\x8e^\x8b\xccN \xa4\xc0^\xbc\n/Z\x0b\
-\x80\x91>\x851=\x08BQ\x8e7Sn\\~\xc5c\xa9G\xe8\xba\xe2 \x15\xe6c\x08\x1daV\
-\xa1\xcb\x1czP`\xc4Rd\xac\x02\x1e`\x85\xc2\xb4\xdd\xb6\x1e/\xb7\x93\xdcH\x0f\
-\x85\xccU$\xacQts\x96H\xf6\x0cz9\xc3\xf0\xa9)&\x8ee\xf1\\\x1f=\xa8\xd3\xb8)A\
-Cl\x98bq\x11\x85\xe0b\xa4\xf2\x88\xe4N\xa3\xb23\x0c\xbc5Bn\xc8Fh`F\x0c\xaa\
-\xaf\x8bR\x1b\x1a\xc5\x0emD\x18)t\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\x83.\x0ec\
-D\xd40\xd1\\7\x94f\x1892A\xa6\'\x0f@\xe3\xa6$\xf1\xe6\x10c\xc7g\xd0\xc3:5k2\
-\xe4|\x87P\xae\xe7#5\xeb\xc2\x93\x98U[\x189p\x9a\xa1}\x07P\xbe\x87\x92\x82\
-\xd3;~\xc1\xf2\x87\xee#\xa1\r\x80s\xec\xb2\xf2\xd3U\x89X\xe0$=\xbfL\x13\xaa\
-\xb5H^;\xc2dw\x96\x89\x13\xb3,\xbb?I\xc8\xfb\t\xfd\xbf\x0e\x13owHT\xbd\x89\
-\x1d\xd9\x8e\xf4\xb2\x04\xdc\x17I\x1f\rbVy\xc4;\x04\x8e\xfa\x13\x940\xaeh,\
-\xf50\xfb\x16`JT\xf8 \x1aI\x04\xb7\xa33\x85\x10\x02\xa1B\x98\xfc\x1a\x8f)\
-\x94&\xf1\xbc[X\xb4\xb6\x83\xde\x9d\xff\x81=>L,\x15#Q\x1eE\x14\x1a8\xf3\xa3\
-\x83\x14\xc6\xc7\x08\xc4cH\xd3\xc4\xc9O3\xb27M1\xddF\xcbWWb\x98\xa7\xd0\x9d$\
-\x9a\xddB\xf7O\x7fDq|\x0c3\x1a\xc1\x08\x87A8\xe4{]\x1aWoA\xf3\x07\x11\xb4\
-\xa03\x89g\x17\xb1\'g0\x82\x16\xa6\xd0\xd0\x021J\xfa\x01\xf0r\x04\xdc6N\xbf\
-\xfc\x12\xf9\x91\x11\x02\x898\xd2\xb2\x988t\x9e\xb1\xfd6\xbe[&T_Op\xd3\xed\
-\xe8v\x06\xf9q\x9aknG)\x08VE\xa8\xaa\x95\xe4G\xfb\x11R\x12\x8e/A\x0f\xc40T\
-\x1a\xff\xb2\xf2;\x89\x92\x1e\xa6\xb1\x16\x7f\xa6\x9b\xb1s\xe3L\xbf\x1b"X\
-\x9dd\xf1\xfaV\xaaj\x96\x83\x13\xc6\xf0\x8f\x93\x7fOc\xf1\xaa\x16\n\xde!d\
-\xc9G\xd7:(\x8f\x1d\'^SG\xbc\xaa\x81<\x07\xb8\xd2Sp=\xc4\x9e\x05\x99\x14\x15\
-."X\x82\xe0nt1\x81\x90 D\x90\x00\xef\xa0\xe8\x03@j6\xc1\xea\xfb\x08X\xc3\xd8\
-\x13\x87\xd1X\x8d!:\xe8\xdf\xf7<\xe5\xf1\xc3,\xbey;u7n\x03U\xc6-\x16\x19\xdc\
-\xf5\xef\x14\xfavSH\xaf$\xd2\xbe\x08\xfc\x1a\x06\xf7\xfe\x10w\xf2]Zn{\x84D\
-\xc7\x06d\xc0G\xd3\xe2xN\x11\xa5Oa\xea\x9d\x08w\x0b\xba\x18\xc7\xcd\x9e\xe5\
-\xdc\x7f?\x854%B\x934n~\x92\xe8\xb2e(/K\xe6t7\xce\xd8\x11\x16\xdf\xf2\x00u7n\
-C\xe8>\xbe\rCo<\xcf\xcc\x99\xfd\x18\xba\x860\xeb\xd1\xdd(\x83{_\xfcXMe\xed"v\
-\xf5\x1d\xc4\xda\x9e\xe4\xec\x0bO!t\x8f\xf6{\x9f@XSH\xad\x8e\xfe}?\xbbt~m\
-\xf5(k\'\xc2\xdc\x82.\xa71\xe50-[\xff\x82X\xfb*|\xd1\x87\n\xbc\x03\xb9e\xd4\
-\xaf3\xe9\x7f\xed\x07\x94f\xbeJ0XDyI\xa6{\xbb\xd1\x19&\xb5\xe2!\x08\r\x10\
-\x14\xaf\xc3\x15\x96\x88\x1e\x18\xfb\xe2\xeeQ\x7fn\xd15\xbc@\x04\xcd\x96H)\
-\xc0\x8f`Mi\xe0\xce\xf5\xb5\xb2\xe2\xb8~\x18\xb3$0\xbd0B\xc5\xa0\xecc\xf7\
-\xf5\x13\n6R\xb7\xe1a\xb4\xf2N\xa4w\x10i>@\xdd\xda\x07\x19\xec9E\xa9\xb7\x97\
-\xd8\xd2G\xf1<\x81\xdds\x8eP\xa0\x8e\x9a5\x0f \xdd\x9f \x0b\xfb@&\xd0\x84\
-\x0e\xce4\x94\x92x&h%\xd0\x8b`\x85\x12\xe8V\x14ihX\xc1\x14\x9a\xeb\xa2d+\x99\
-\xce\x7f#\x14\xa8\xa7n\xfdvt\xe7\xe7\x88\xd21|\xebqjV\xdeC\xf1\xd4AtGG\xa8\
-\x04x\x81Kk\xe6fA\xcf\xe0Y\xdf\xc0T\x11\xa4\x12hz\x15\x9a\xfd\x12\x9e\xf1\
-\xf8e\xe5W\xd5\xb2\x1d\xad\xb0\x17\xcf\x8a\xa1\xd9\x1a\xa1\xf0bb\xad[\xd0\
-\x9d\xef\x80s\x0c\xb2\x1eJ/Q\xb5l+\x01\xebu\xa6:\x0f\xd1\xb4\xfd\xcf\xf1\xfc\
-<\xd9\xa3/\x90hZ\x8d\x99\\\x8a\xcc\xef\x82,p\x85g0:\xbb\x97^\xf9\x84\xa80\
-\x9fX-l\x1cE\x8c\x04A\x02\xf6(\x1c\xa8\x85\x19\x05\x86\x85\xda\xb0\x81R\xff;\
-\xa8\xae\x10V{+rf\x12O\xa4\xf0\xce\x08\xf4X#\x14\x02\xc8CCP\x08\xa25\xa6\xb1\
-\x1anA\x1bi\x84\xf1\x18\xaa\x90@\x15\x8b\xb8\xef\x81\x91\xa8\xc7\x9f5\xd0\
-\x8fLB\xe1\x83[\xc5\xd5\x10\xab\x81ui\xc4H\x00\xcbi\xa7u\xfb_\xa1E#\xe0\xfb\
-\xf8\x13C\xc8cgq\x9a\x17\xe1\x9c,a$\x1b\x11\xe5\x04\xe2\xc0\x0c\xe4\x82\xc8\
-\x96A\x8c\xfa\x1b\xd0\x86\xeb\x11^\x12\xbc\x04*\xa7.\xad\xf9\xbf\xba\xeb\x87\
-\x90#\x01\x84\x14PJCw\x12\x7f\xa9\xbc\xac\xfc\xc8\'\xe0X\x13l\x88\xc3Hln\x89\
-\xea\xa7\xa03\x02\x99f\x00D\xa0\x8c\xbc1J$~#\xd9\xbd\xef`\xdfP\xc0N\xa7)\x1f\
-w\xa9\xbf\xe5n\x18\xc9\xc3\x81\x00\xf8W>\xb7\xf5\xa1g\x1e\xbf\xe2 \x15\xe6c\
-\xb4\n\x12\x1d\x13\x14\xba\x96 \xd1\xf0\xf3S\xcc\xec\xdf\nRa\xae\xf5\xd1\xb3\
-.C\xdf\x1e\xa6p\xfa&j\xeek\xa4x\xd4\xc6\\\x95G\x956\x91=\x93\xc1\xcbN\xe3\
-\x84\x1e\xc5~\xd7%\xb4\xccb\xb6s\x80\x99=\x1d\x04\x1b\x1a\xf0\xa7\xa7\x11!\
-\xa0|3\x99=\xa38\x0f\x8fRR\x7f\x80\xbd\xc7Eo\xd21\xae\xd2\xb0\x8f\x94\xf1\
-\xd2E\x12\xcb\xc7\xe6<\x08\rD\x81\xcc?\x0b\xdc\x01\x81;T\x83\xd6\xd0@\xf2\
-\xefKx\x99\xf5\x14\xbas\x94\'Gp\x02\x0fQ\xdco\x13^\x16`v_/3{:\x08]\x95\xc2/\
-\xa4\x11\xd2\xbf\xa4fi\x9f\x8d\xb1\xc4\'q\xed\x04\xf9\x13\xed\x08$~~\x9c\xcc\
-\xab\xeb\xa8z\xb2pY\xf9\xb9\x13Y\xa6v|\x99\xf8u\xc3\x14\xba\x9b\xe6\xb6y\xf3\
-#L~\xff\x0e\xca=\xe5\x0b}\x1c\xea\x0f\x10[\xfb C\xcf\xcer\xea\xcfv\xa2\x8a.V\
-\xc3\x1dX\x8b7\x92\xf9\xf60\xc5_\xfd\xe1\x82\x8c\xa5\xfe\xf2\x9a\x8d\x0b\x12\
-\xa8\xc2E\xaa\xebg\xb9\x9b\xbd\x9cOU\xe3\x14%\xb5CCp\xafE~\n\xb2#\x0e=\xdf\
-\xb2\xc9\xe4R\\\xf3\xc7\xf5\x18\xcb\xcb\xbc\xb1\xa3\x99\xebb\x03D\x1fk\xe7\
-\xe8?\x9ea\xe4\xe9\xbd\xb4\xdd\xbe\x08\xb9:H\xe9d\x9e\xd3\xafg(\xb6\xb6S\xb7\
-9Nw\x9fC"\x95%\xfcH\x1bG\xfe\xc9g\xfc\xbb\x9d\xb4\xddV\x8f\xba#\x8an\x81n\
-\xb8$\xbf\x16\xe1\xe0\xaeVn\x95\xbb8\x9fJ\x82\xd4hg\x88\xd7#\xf70\x99LB\x12\
-\xa4\xa6\xf8J\xffA\xf4\xfbZ9\xfa\xbd~\n\xdf?H\xe3\xfaZ\xfc\x8d&\x83\xefk\xe6\
-\x9a\xdaH\xd6Y\xb4\xba\xfdd\xa7\x8dKj\xbe\x15]\x8d\xc0\xe6n\xf1\n\xbd5\xd5(i\
-\xd0*\xd2\xfc*\xb9\x865}}\x97\x97\xdf\xa0\xcb\xe9\xa5\xcb\xb8K\x1d\xa2?\x19C\
-H\xc9\xd5j\x80\xdd\xd7\xacg2\x1e\xbe\xd0\xc7\xb1Y\xc1\xb6f\x97\xa9[\xd73zr\
-\x18B:k\x1f\xdc\xccL\xae\x8a\x97\x9d8\xf6\x9a\x85\xf9H]?\xed\x17\x16$P\x85\
-\x8b4\xfa3\xd8v\x1f\x13N\x89\xc9q\x9d\x81o\xa6A\xd3\xb1\x1d\x03%4\x10\x92%+\
-\\:~?\xcf\xe1cm\xbc\xd9\x1bbL\x0f\xf3\xd8\xfdc,\xdejp\xf4\x179\xba\x9e=\x87\
-\x92\x1a\xbe0\x08\'$+\xee\x92\x985\xa3\xbc\xbac\x05\x8d\xb5>\x0fn\x1b\xa7\
-\xeeK\x1a\xa7\xf7\xe7\xe9z\xae\xefB\xdb\xea&\xc9=\x7fc0\xa1\x05\xb1Kg\x99(\
-\x87\xb1\xa2\x12\xc7\x1e\xe3\\9\xc7\xa8\xff\xfe\xc1\x9a\x0fng\x82\x87\xb7\
-\xe5\x08\xaf\x92\x1c\xd97\xc1\xc1\xb73(\xa9\x11\xad5Xt\x8dd\xb8$\tF\xf2\xd8\
-\xc5s\xbc}t\x15\xbf\xb7\xf9\xe35\x87\xf5&\x1c\xc7\xa7T\xe8a\xc4\xae&\x18s(\
-\xdb\x13\x9c)\xe5\x999vy\xf9\xbd\xb6c\x05R\xce\xe0\x94\xce0\xe5\x14\xb0\xaa\
-\x0c\xca\xf6Y\xce\x95\xaff\xd4\xff\xc0a\xe584u\xcdR\xb7\xb9\x89\x93\xa7\x86\
-\x08%L\x1a6F\xe8|g\x8ac\xb9\xe0\x82\x8d\xa5>8X9(\\h\xf2\xd9<\xa5|\x0f\xed7\
-\x08\xca\x9d!l\xc7\xc0\x17:\x91\x84\xa4\xb6\xd9\xa1e\xb9M\xf3\xf2\x12\xfb:\
-\xdbx\xe1\xe5&\x8a\xa54\xe9!\x85\xf4\x82\xdc\xbb\xf5\x08\xd5\xad\x06g\x0f\
-\x07)\xe64\xac\xa8\xe0\xfa/g\tW\xc3s\xffu\x17\xc7\xbb\xb3\x18\xba\x86\xb2u\
-\xee\x7f\xb4\x9b\xabn\xd28\xbe7\xc2\xf4\x84E\xac^\xb1\xeaKYz\xfbR\x1c<\xb2\
-\x8c\xaf\xac\xeda\xc9\xea\x08U\xb5>\xe9A\x8b\x13\xa7f\xb1\x9d\xd2\x05\x9f\
-\xe9\xb4\xa2:\x02[\x9f8\xc3\xf9\xe3\x01N\xbe\x1dB3\x05\xeb\xb6fi\xbe*\xcf\
-\x81]I\xa2I\x8fsg\xab\xd8\xf1\xeaF\xb2S\x97\xd0<\x9c#V\x95\xa5X\xe8\xa5e\xe5\
-\x14\rmEz\xceEy\xf7D\x1e\x01\x97\x9d_m*\x83]8B\xf3:\x9dX\x9d\xcf\xe0\xc0\x04\
-\'NNa;\xd9y\xfd\xbc\xff\xa0\xcb\xfd[\x1c\xf2N\x89\xa6\xf6\x04BN\xf0\xfa\xee\
-\x12\x83\x83r\xc1\xc6Rl\xdc\xf8Z\xe5\xc2\xd4\x02#\x04l\xdb\xdc\xcd\xad\xebzI\
-%\x8b\x089\xd7\xc5\xd9\xacIf\xd6bl*\xc2/\x7f\xb3\x8cs\xe7\xab)\xbbr\xdes\xcb\
-\xdbg\xd8\xb4b\x98\x96\xc6Y\x94\xa7\xf0\xd1\xe8\xeeMp\xf0d\x1d\xbd\x03\x91\
-\x0bm\xa5T\xac\xbcz\x8a\xcdk\x87H\xc5\x0b\x94\xcb\x12%u\xde}\xaf\x9a\xdd\x9d\
-\x8d\xe4\xf2\x06w\xde:\xcc\xc6\x8e)\xca\xbe\xc6+o6r\xb4\xab\xeaC^\x03\x96\
-\xc7\xcd\xeb\xc7\xb8a\xe50\xd2w\x91\x1a\x8cf"\x9c=_\xc5\xa6\x15\xc3\x80\xe0\
-\x957\x97r\xb4\xab\xfa\x92\x9a\xd9\x9c\x81\x10p\xe7\xad\xa3l\xe8\x98\xc4\xf5\
-\xe5<\xdd\xcb\xcdo.F\x1f\x9b:\x86)\xfb\x1a/\xbf\xd9\xc6\xd1\xae\xf9\xf72\x0c\
-\x1d\xfe\xee\xeb9\xca\x03\xc3\xbc\xf6\x9d>\xbe\xf6/\x1d\xf4\x8eG\xf9\xe6\xd3\
-\x11\x16\xf2\n\xa0X\xb4\xe8\xbb\x95\x02\xf9\x84\x10\x02B\xc1\x8b\xdd\xeb\xba\
-`;\x95m\xf5\x85`\xc3\x9a2\xdf{z\x9ag\xfez\x10\xd7\x13\xfc\xe5\xbf.\xe2\x89\
-\xaf\xc7yk\xff\xc2^%\xd0\x87\x86\x86\x164`\x85\n\x9f\x06\xd7m\x9fdz8\xc3\x89\
-\xc3y\x1ey*@\xf7)\x9b\xd7v.b6\xbbp\xcb+\x98\xdb\xa5\xafP\xe1\x0bG8h\x13\x8d\
-\xe6\xb9\xefOa\xf3\x9d6\xcf\xbf\x18Z\xf0\xe2\x00\xd0\x17<b\x85\n\x9f\x02\xcf\
-\xfeg#A\xb3\x8e\xea\x98\xcf\xd3\xcfI^\xfa\xd9\'s;R\xc07*\xffA*T\xf8\x08*K\
-\xac\n\x15>\x86J\x81T\xa8\xf01\xfc\x0f\xa0J\x96s@\xaf\xd7\x90\x00\x00\x00\
-\x00IEND\xaeB`\x82'
-
-def getDocFactory008Bitmap():
- return wxBitmapFromImage(getDocFactory008Image())
-
-def getDocFactory008Image():
- stream = cStringIO.StringIO(getDocFactory008Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory008')
-catalog['DocFactory008'] = ImageClass()
-catalog['DocFactory008'].getData = getDocFactory008Data
-catalog['DocFactory008'].getImage = getDocFactory008Image
-catalog['DocFactory008'].getBitmap = getDocFactory008Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory009Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r]\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\x8c\
-\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xaaZEUA\xadh\xfbG\xfe\
-\x8c\xaa\xa8R\xd5\x055\x8a [Q\xd5\x8a\x92\xd28\t\x84\xa0\xd8\x90\x18\x1b\x1c\
-g<\xb61^\xc7\xd8\x9e\x19\xcf\xf2f\x9fy3o\xbd\xf7\xdd{O\xff\x18bp\t\xd8R\x9f\
-\x03\x84\xf7\xf9\xf3\xe9\xdc\xdf\xf7\xfb;\xe7\xfct\xcf;\xe7\x1e\xf1\x0f\xdfP\
-\x8a*U\xaa\xfcF\xf4P\xed\'m\xa1J\x95O/z\xb0Z U\xaa|$z8\xf1I[\xf8\xddB\xa00\
-\xb0\x91x\x17\xfd\xeeb\xe0b\xfe\xf6<\x08\x1b\xed\xffxP@Y\x05\xf0\xd0\xae\x88\
-\xae\xc4\xc7\x14%|$ee\xa1\x10WD\xe7\xb7\x89\x1e\x8a\x7f\xd2\x16~w\x10\xf84\
-\x15\xf6\x10u\xcf\xe3\x7f`nJ\t\xd2\xd4\xc9\xbbqr\xc1N\xe6\xf5%\xb8\x04\xae\
-\x90\x07\x8f\x16\xfbuj\xbc\xfe\x8b<\x00\xe8\x96\xc2\xd6\xea\xe8\xd3\xb6Q&TQ]\
-\r\x87\xa5\xeeO\t\x94\xc7\xd1\x0c\xc1\xa4\\AZ\xdeXQ\x8dO\x02=\\-\x90\x8aa1A\
-\x8b\xfe\x0cg^\xa9gn$\x02\x08\x90\x12\xa9+\xc2uE"\x8dE:V\xce\xe0XK\x18\x0c\
-\xfe-\x0e\r\x15\xf7\x10d\x8c\x96\xe2\x0b\x9c\xfaq\x9c\xb9t\x00\x84\x00!\x01\
-\x885\xdb\xac\xb8\xffM\x8aF#\xd3\xdc\\Q\xdd\x10c4\xd9?\xe4\xf8\x0fS\xc4\x16\
-\x97h[w\x98B\xf0Z\xca|\xb6\'\x98\x1e\xf9l\xfb\xffT\x11R\x82\x84\xb6\x06\xe1\
-\x17\x91\x9a"\x18\x17\x18\x01\x81BP\xca\x07\x998%\xc9O\xb4\xb2\xf2.\x89i\xfc\
-\x8a\xa1\xf0=\x17-C\x84\xef!\xdc2\xc2\xf7PRC\xe9\x06J\xfe\xe6\xe5\x90p\x1d\
-\xa4[\x06\xb8\xa8mH\xe9\x84\xc5\xd5(\xb7\x80\xd4\xb8\xe0\x01\x04\xa9\xa5&\
-\xa1P\x17f\xb0\x85\x88\xfcp\x1c_7Q\x9a\x8et\x8a $\xbea-\x14\xd8%4\x05\x8a\
-\xb8_$\x9c_\x8e\xa4D6\x1d\xe3\x9a\xa8ECh\x8a\x8c|\x7f\x82]V~J\xbd\xafo\x06\
-\x164\xbd2\xben-h\x95\xed\x85ff\xe0\xc3\xcf\x00\xbe\x19\xbc\xc8\xf3\xff\x17\
-\xbd\xc6\x1c\xaeX\xb0\xcf;\x96r\xc0\xd8\x80\xa1\xbfI,\xe5r\xfd\x1f\xdd\x84\
-\x16\n\x82\xf2)\xe7m\x86\x0f\xf73~"\xcd\xf9\x9e\x14\xd7\xdc\x11\xc51\xceR\
-\x10A\x84\xf203}\x98\x99>\xbcB\t\x81Zx\xf9\x04\x02\xd8\xa9\xe585\xad\xf0^!\t\
-\xbf\x8c5\xdf\x8f1s\x0ee;\x80ZxA\x18\x01\x8a\xf5\xd7\xa3\x85k\x91\x81\x9b\
-\xb0\xac\xddh)\x97\xeb\x1f\xdb\x8c\x11\t\x02`\x97\x153F\x04\x19\x90\xc4\xfc~\
-\xcc\xd9\xb3X\xf3}(\xdbE)\x05f\x10/X\x8bYL\xa3\x148\xf1vJ\xa9\xaeKj\x86\x85N\
-\xad7Onv\x05\xb8\xdd\x08\rJ\x85\xd5,\xb1&\x185\xa0$\x8d\xcb\xcbO\xf9\x04\xd2\
-\x071ri\xa4!q\xc3Mh\x85I|\xbb\x8c0-\x1c\xbd\x1e\x99\x9dBH\x81\xbdx\x15^\xb4\
-\x1e\x00#}\x12cv\x18\x84\xa2\x1co\xa5\xdc\xbc\xbcbc\xaaG8U\xb1`\x9fw\x0c\xa1\
-#\xcc\x1at\x99C\x0f\n\x8cX\x8a\x8cU\xc0\x03\xacP\x98\x8e\xdb\xd6\xe3\xe5v\
-\x92\x1b\xeb\xa3\x90\xb9\x8a\x845\x8en\xce\x13\xc9\x9eA/g\x18=9\xc3\xd4\xd1,\
-\x9e\xeb\xa3\x07u\x9a7%h\x8a\x8dR,.\xa2\x10\\\x8cT\x1e\x91\xdciTv\x8e\xa17\
-\xc7\xc8\x8d\xd8\x08\r\xcc\x88A\xeduQ\xeaC\xe3\xd8\xa1\x8d\x08#\x85.\xf3\xe8\
-A0\xa2)\n\x81\x12.\x1en\xd0\xc5a\x82\x88\x1a%\x9a\xeb\x85\xd2\x1cc\x87\xa7\
-\xc8\xf4\xe5\x01h\xde\x94$\xde\x1ab\xe2\xd8\x1czX\xa7nM\x86\x9c\xef\x10\xca\
-\xf5}\xa4fCx\x1a\xb3f\x0bc\x07N3\xb2\xef\x00\xca\xf7PRpz\xc7\xcfX\xfe\xd0}$\
-\xb4!p\x8e^V~\xba*\x11\x0b\x9c\xa0\xef\xe7iB\xf5\x16\xc9k\xc7\x98\xee\xcd2u|\
-\x9ee\xf7\'\ty?b\xf0\x97a\xe2\x9d\x0e\x89\x9a7\xb0#\xdb\x91^\x96\x80\xfb\x02\
-\xe9#A\xcc\x1a\x8fx\x97\xc0Q\x7f\x82\x12FE\xc6T\x0f\xb3\xaf"\x81\xaa\x80F\
-\x12\xc1\xed\xe8\xcc \x84@\xa8\x10&\xbf\xc4c\x06\xa5I<\xef\x16\x16\xad\xed\
-\xa2\x7f\xe7\xbfcO\x8e\x12K\xc5H\x94\xc7\x11\x85&\xce\xfc\xa0\x87\xc2\xe4\
-\x04\x81x\x0ci\x9a8\xf9Y\xc6\xf6\xa6)\xa6;h\xfb\xf2J\x0c\xf3$\xba\x93D\xb3\
-\xdb\xe8\xfd\xf1\x0f(NN`F#\x18\xe10\x08\x87|\xbfK\xf3\xea-h\xfe0\x826t\xa6\
-\xf1\xec"\xf6\xf4\x1cF\xd0\xc2\x14\x1aZ FI?\x00^\x8e\x80\xdb\xc1\xe9\x97^$?6\
-F \x11GZ\x16S\x07\xcf3\xb1\xdf\xc6w\xcb\x84\x1a\x1b\tn\xba\x1d\xdd\xce ?Ns\
-\xcd\xed(\x05\xc1\x9a\x085\xf5\x92\xfc\xf8 BJ\xc2\xf1%\xe8\x81\x18\x86J\xe3_\
-V~\'P\xd2\xc34\xd6\xe2\xcf\xf52qn\x92\xd9wB\x04k\x93,^\xdfNM\xddrp\xc2\x18\
-\xfe1\xf2\xefj,^\xd5F\xc1;\x88,\xf9\xe8Z\x17\xe5\x89c\xc4\xeb\x1a\x88\xd74\
-\x91\xe7\x00\x95:\xfd\xd6C\xec\xa9P\xa8*\x82%\x08\xeeF\x17S\x08\tB\x04\t\xf0\
-6\x8a\x01\x00\xa4f\x13\xac\xbd\x8f\x805\x8a=u\x08\x8d\xd5\x18\xa2\x8b\xc1}\
-\xcfQ\x9e<\xc4\xe2\x9b\xb7\xd3p\xe36Pe\xdcb\x91\xe1]\xffFa`7\x85\xf4J"\x9d\
-\x8b\xc0\xafcx\xef\xff\xe0N\xbfC\xdbm\x8f\x90\xe8\xda\x80\x0c\xf8hZ\x1c\xcf)\
-\xa2\xf4\x19L\xbd\x1b\xe1nA\x17\x93\xb8\xd9\xb3\x9c\xfb\xaf\xa7\x90\xa6Dh\
-\x92\xe6\xcdO\x12]\xb6\x0c\xe5e\xc9\x9c\xee\xc5\x998\xcc\xe2[\x1e\xa0\xe1\
-\xc6m\x08\xdd\xc7\xb7a\xe4\xf5\xe7\x98;\xb3\x1fC\xd7\x10f#\xba\x1bex\xef\x0b\
-\x1f\xab\xa9\xac]\xc4\xae\xbe\x83X\xc7\x93\x9c}\xfe)\x84\xee\xd1y\xef\x13\
-\x08k\x06\xa950\xb8\xef\'\x97\xce\xaf\xa3\x11e\xedD\x98[\xd0\xe5,\xa6\x1c\
-\xa5m\xeb_\x10\xeb\\\x85/\x06P\x81\xb7!\xb7\x8c\xc6u&\x83\xaf\xfe7\xa5\xb9/\
-\x13\x0c\x16Q^\x92\xd9\xfe^tFI\xadx\x08BC\x04\xc5kP\xa1\x12\xd1\x03\x13\x9f\
-\xfd\xbd\xeaO\r\xba\x86\x17\x88\xa0\xd9\x12)\x05\xf8\x11\xac\x19\r\xdc\x85>V\
-V\x1c\xd7\x0fc\x96\x04\xa6\x17F\xa8\x18\x94}\xec\x81AB\xc1f\x1a6<\x8cV\xde\
-\x89\xf4z\x90\xe6\x034\xac}\x90\xe1\xbe\x93\x94\xfa\xfb\x89-}\x14\xcf\x13\
-\xd8}\xe7\x08\x05\x1a\xa8[\xf3\x00\xd2\xfd\x11\xb2\xb0\x0fd\x02M\xe8\xe0\xcc\
-B)\x89g\x82V\x02\xbd\x08V(\x81nE\x91\x86\x86\x15L\xa1\xb9.J\xb6\x93\xe9\xfe6\
-\xa1@#\r\xeb\xb7\xa3;?E\x94\x8e\xe2[\x8fS\xb7\xf2\x1e\x8a\'{\xd0\x1d\x1d\xa1\
-\x12\xe0\x05.\xad\x99\x9b\x07=\x83g}\rSE\x90J\xa0\xe95h\xf6\x8bx\xc6\xe3\x97\
-\x95_M\xdbv\xb4\xc2^<+\x86fk\x84\xc2\x8b\x89\xb5oAw\xbe\x03\xceQ\xc8z(\xbdD\
-\xcd\xb2\xad\x04\xac\xd7\x98\xe9>H\xcb\xf6?\xc7\xf3\xf3d\x8f<O\xa2e5fr)2\xbf\
-\x0b\xb2@\x85\xce`tv/\xadH\xa0*@\xac\x1e6\x8e#\xc6\x82 \x01{\x1c\x0e\xd4\xc3\
-\x9c\x02\xc3Bm\xd8@i\xf0m\xd4\xa9\x10Vg;rn\x1aO\xa4\xf0\xce\x08\xf4X3\x14\
-\x02\xc8\x83#P\x08\xa25\xa7\xb1\x9anA\x1bk\x86\xc9\x18\xaa\x90@\x15\x8b\xb8\
-\xef\x82\x91h\xc4\x9f7\xd0\x0fOC\xe1\x83[\xc5\xb5\x10\xab\x83ui\xc4X\x00\xcb\
-\xe9\xa4}\xfb_\xa1E#\xe0\xfb\xf8S#\xc8\xa3gqZ\x17\xe1\x9c(a$\x9b\x11\xe5\x04\
-\xe2\xc0\x1c\xe4\x82\xc8\xb6a\x8c\xc6\x1b\xd0F\x1b\x11^\x12\xbc\x04*\xa7.\
-\xad\xf9k\xdd\xf5#\xc8\xb1\x00B\n(\xa5\xa17\x89\xbfT^V~\xe4\x13p\xb4\x056\
-\xc4a,\xb6\xb0D\xf5S\xd0\x1d\x81L+\x00"PF\xde\x18%\x12\xbf\x91\xec\xde\xb7\
-\xb1o(`\xa7\xd3\x94\x8f\xb94\xder7\x8c\xe5\xe1@\x00\xfc\xca\xcdi}\xe4\x99\
-\xc7+\x16\xec\xf3\x8e\xd1.HtMQ8\xb5\x04\x89\x86\x9f\x9fan\xffV\x90\ns\xad\
-\x8f\x9eu\x19\xf9\xe6(\x85\xd37Qw_3\xc5#6\xe6\xaa<\xaa\xb4\x89\xec\x99\x0c^v\
-\x16\'\xf4(\xf6;.\xa1e\x16\xf3\xddC\xcc\xed\xe9"\xd8\xd4\x84?;\x8b\x08\x01\
-\xe5\x9b\xc9\xec\x19\xc7yx\x9c\x92\xfa\x03\xec=.z\x8b\x8eq\x95\x86}\xb8\x8c\
-\x97.\x92X>\xb1\xe0Ah \nd\xfeY\xe0\x0e\t\xdc\x91:\xb4\xa6&\x92\x7f_\xc2\xcb\
-\xac\xa7\xd0\x9b\xa3<=\x86\x13x\x88\xe2~\x9b\xf0\xb2\x00\xf3\xfb\xfa\x99\xdb\
-\xd3E\xe8\xaa\x14~!\x8d\x90\xfe%5K\xfbl\x8c%>\x89k\xa7\xc8\x1f\xefD \xf1\xf3\
-\x93d^YG\xcd\x93\x85\xcb\xca\xcf\x9d\xca2\xb3\xe3\x8b\xc4\xaf\x1b\xa5\xd0\
-\xdb\xb2\xb0\xcd\x9b\x1fc\xfa\xfbwP\xee+_\xe8\xe3\xd0`\x80\xd8\xda\x07\x19yv\
-\x9e\x93\x7f\xb6\x13Ut\xb1\x9a\xee\xc0Z\xbc\x91\xcc7G)\xfe\xe2\x0f+:\xa6\xfa\
-Kk6V4\xe0\xe7\x99\xda\xc6y\xeef/\xe7S\xb58EI\xfd\xc8\x08\xdck\x91\x9f\x81\
-\xec\x98C\xdf7l2\xb9\x14\xd7\xfcq#\xc6\xf22\xaf\xefh\xe5\xba\xd8\x10\xd1\xc7\
-:9\xf2\x8fg\x18{z/\x1d\xb7/B\xae\x0eR:\x91\xe7\xf4k\x19\x8a\xed\x9d4l\x8e\
-\xd3;\xe0\x90He\t?\xd2\xc1\xe1\x7f\xf2\x99\xfcn7\x1d\xb75\xa2\xee\x88\xa2[\
-\xa0\x1b.\xc9\xafD\xe8\xd9\xd5\xce\xadr\x17\xe7SI\x90\x1a\x9d\x8c\xf0Z\xe4\
-\x1e\xa6\x93IH\x82\xd4\x14_\x1a\xecA\xbf\xaf\x9d#\xdf\x1b\xa4\xf0\xfd\x1e\
-\x9a\xd7\xd7\xe3o4\x19~O3\xd7\xd2A\xb2\xc1\xa2\xdd\x1d$;k\\R\xf3\xcd\xe8j\
-\x046w\x8b\x97\xe9\xaf\xabEI\x83v\x91\xe6\x17\xc95\xac\x19\x18\xb8\xbc\xfc\
-\x86]N/]\xc6]\xea \x83\xc9\x18BJ\xaeVC\xec\xbef=\xd3\xf1\xf0\x85>\x8e\xcd\
-\x0b\xb6\xb5\xba\xcc\xdc\xba\x9e\xf1\x13\xa3\x10\xd2Y\xfb\xe0f\xe6r5\xbc\xe4\
-\xc4\xb1\xd7T\xf6\xe3t\xfd\xb4_\xa8h\xc0\xcf3\xcd\xfe\x1c\xb6=\xc0\x94SbzRg\
-\xe8\xebi\xd0tl\xc7@\t\r\x84d\xc9\n\x97\xae\xdf\xcfs\xe8h\x07o\xf4\x87\x98\
-\xd0\xc3<v\xff\x04\x8b\xb7\x1a\x1c\xf9Y\x8eS\xcf\x9eCI\r_\x18\x84\x13\x92\
-\x15wI\xcc\xbaq^\xd9\xb1\x82\xe6z\x9f\x07\xb7M\xd2\xf0\x05\x8d\xd3\xfb\xf3\
-\x9c\xfa\xd6\xc0\x85\xb6\xb5-\x92{\xfe\xc6`J\x0bb\x97\xce2U\x0ecE%\x8e=\xc1\
-\xb9r\x8eq\xff\xbd\x835\x1f\xdc\xee\x04\x0fo\xcb\x11^%9\xbco\x8a\x9e\xb72(\
-\xa9\x11\xad7Xt\x8dd\xb4$\tF\xf2\xd8\xc5s\xbcud\x15\xbf\xb7\xf9\xe35G\xf5\
-\x16\x1c\xc7\xa7T\xe8c\xcc\xae%\x18s(\xdbS\x9c)\xe5\x99;zy\xf9\xbd\xbac\x05R\
-\xce\xe1\x94\xce0\xe3\x14\xb0j\x0c\xca\xf6Y\xce\x95\xaff\xdc\xff\xc0a\xe5$\
-\xb4\x9c\x9a\xa7as\x0b\'N\x8e\x10J\x984m\x8c\xd0\xfd\xf6\x0cGs\xc1\x8a\x8f\
-\xa9><\\=(\xac\x14\xf9l\x9eR\xbe\x8f\xce\x1b\x04\xe5\xee\x10\xb6c\xe0\x0b\
-\x9dHBR\xdf\xea\xd0\xb6\xdc\xa6uy\x89}\xdd\x1d<\xffR\x0b\xc5R\x9a\xf4\x88BzA\
-\xee\xddz\x98\xdav\x83\xb3\x87\x82\x14s\x1aVTp\xfd\x17\xb3\x84k\xe1[\xffy\
-\x17\xc7z\xb3\x18\xba\x86\xb2u\xee\x7f\xb4\x97\xabn\xd28\xb67\xc2\xec\x94E\
-\xacQ\xb1\xea\x0bY\xfa\x07R\xf4\x1c^\xc6\x97\xd6\xf6\xb1du\x84\x9az\x9f\xf4\
-\xb0\xc5\xf1\x93\xf3\xd8N\xe9\x82\xcftZQ\x1b\x81\xadO\x9c\xe1\xfc\xb1\x00\'\
-\xde\n\xa1\x99\x82u[\xb3\xb4^\x95\xe7\xc0\xae$\xd1\xa4\xc7\xb9\xb35\xecxe#\
-\xd9\x99Kh\x1e\xca\x11\xab\xc9R,\xf4\xd3\xb6r\x86\xa6\x8e"}\xe7\xa2\xbcs<\
-\x8f\x80\xcb\xce\xaf>\x95\xc1.\x1c\xa6u\x9dN\xac\xc1gxh\x8a\xe3\'f\xb0\x9d\
-\xecE\xfd\xbc\xbf\xc7\xe5\xfe-\x0ey\xa7DKg\x02!\xa7xmw\x89\xe1aY\xf11\x15\
-\x1b7\xbeZ\xbd0U!\x84\x80m\x9b{\xb9u]?\xa9d\x11!\x17\xba6\x9b5\xc9\xcc[L\xcc\
-D\xf8\xf9\xaf\x96q\xee|-eW^\xf4\xdc\xf2\xce96\xad\x18\xa5\xady\x1e\xe5)|4z\
-\xfb\x13\xf4\x9ch\xa0\x7f(r\xa1\xad\x94\x8a\x95W\xcf\xb0y\xed\x08\xa9x\x81rY\
-\xa2\xa4\xce;\xef\xd6\xb2\xbb\xbb\x99\\\xde\xe0\xce[G\xd9\xd85C\xd9\xd7x\xf9\
-\x8df\x8e\x9c\xaa\xf9\x90\xd7\x80\xe5q\xf3\xfa\tnX9\x8a\xf4]\xa4\x06\xe3\x99\
-\x08g\xcf\xd7\xb0i\xc5( x\xf9\x8d\xa5\x1c9U{I\xcdl\xce@\x08\xb8\xf3\xd6q6tM\
-\xe3\xfa\xf2"\xdd\xcb\xcdo!\xc6\x00\x9b\xbaF)\xfb\x1a/\xbd\xd1\xc1\x91S\x17\
-\xdf\xc70t\xf8\xbb\xaf\xe6(\x0f\x8d\xf2\xeaw\x06\xf8\xca\xbft\xd1?\x19\xe5\
-\xebOG\xb8\x12W\xff\xc4\xa2E\xdf\xad\x16H\x85\x11\x02B\xc1\xf7\xbb\xd5u\xc1v\
-\xaa\xdb\xe9\x95`\xc3\x9a2\xdf{z\x96g\xfez\x18\xd7\x13\xfc\xe5\xbf.\xe2\x89\
-\xaf\xc6ys\xff\x95\xb9J\xa0\x8f\x8c\x8c\\\x91\xc0U\xaa\\\t\xae\xdb>\xcd\xech\
-\x86\xe3\x87\xf2<\xf2T\x80\xde\x936\xaf\xee\\\xc4|\xb6\xf2\xcb+X\xd8\xad\xaf\
-R\xe53C8h\x13\x8d\xe6\xb9\xefOa\xf3\x9d6\xcf\xbd\x10\xbab\xc5\x01\xa0_\xb1\
-\xc8U\xaa\\\x01\x9e\xfd\x8ff\x82f\x03\xb51\x9f\xa7\xbf%y\xf1\'W\xe6v\xe4\xaf\
-\x11\xf0\xb5\xea\x7f\x90*U>\x82\xea\x12\xabJ\x95\x8f\xa1Z U\xaa|\x0c\xff\x0b\
-\x84\xde\x96s_\x12\xdfl\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory009Bitmap():
- return wxBitmapFromImage(getDocFactory009Image())
-
-def getDocFactory009Image():
- stream = cStringIO.StringIO(getDocFactory009Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory009')
-catalog['DocFactory009'] = ImageClass()
-catalog['DocFactory009'].getData = getDocFactory009Data
-catalog['DocFactory009'].getImage = getDocFactory009Image
-catalog['DocFactory009'].getBitmap = getDocFactory009Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory010Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r_\
-IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\x8a\
-.F\x83\xc0v\x93\xd4(Z\xb8N\xdd(\x89\x1d\xc7\x88d\'\xb2d+\nEI\x96\xb5R\x96DR\
-\\.w\xf2\x92w=\xe7\x9es\xa6?\xe8\xcaV\x1c[\x02LV\xa9u\x9f\x9f\x17s\xbe\xf7{g\
-\xe6\xc3\x99;sF\xfc\xdd\xb7\x94\xa2B\x85\n\xbf\x11=T}\xa5S\xa8P\xe1\xb7\x17=\
-X)\x90\n\x15>\x15=\x9c\xb8\xd2)|1\x10(\x0cl$\xdeE\xbf\xbb\x18\xb8\x98\xffw9\
-\x08\x1b\xed\xd7rP@Y\x05\xf0\xd0\x16DW\xe2c\x8a\x12>\x92\xb2\xb2P\x88\x05\
-\xd1\xb9\x12\xe8\xa1\xf8\x95N\xe1\xff?\x02\x9f\x86\xc2\x1e\xa2\xeey\xfc\x8f\
-\xcdM)A\x9a:y7N.\xd8\xce\xac\xbe\x04\x97\xc0\x02\xe5\xe0\xd1d\xbfE\x95\xd7{Q\
-\x0e\x00\xba\xa5\xb0\xb5\x1az\xb4m\x94\t\xcd\xab\xae\x86\xc3R\xf7\xa7\x04\
-\xca\xa3h\x86`\\\xae -o\x9eW\x8d+\x89\x1e\xae\x14\xc8\xe7\xc6b\x8c&\xfd9\xce\
-\xbc^\xcb\xccP\x04\x10 %RW\x84k\x8aD\xea\x8b\xb4\xad\x9c\xc2\xb1\x96\xd0\x1f\
-\xfck\x1c\xea\xe6=\x87 #4\x15_\xe6\xd4\x8f\xe3\xcc\xa4\x03 \x04\x08\t@\xac\
-\xd1f\xc5\x83\xefP4\xea\x99\xe4\xd6y\xd5\r1B\x83\xfdC\x8e\xff0Elq\x89\x96u\
-\x87)\x04\xaf\xa7\xcc\x17cb\xe9\x91/\x86\x8f+JH\t\x12\xda\x1a\x84_Dj\x8a`\\`\
-\x04\x04\nA)\x1fd\xec\x94$?\xd6\xcc\xca{$\xa6\xf1+\x06\xc2\xf7]\xb4\x0c\x11\
-\xbe\x87p\xcb\x08\xdfCI\r\xa5\x1b(\xf9\x9b\x97C\xc2u\x90n\x19\xe0\xa2\xb6!\
-\xa5\x13\x16\xd7\xa2\xdc\x02R\xe3B\x0e H-5\t\x85:0\x83MD\xe4\'\xe3\xf8\xba\
-\x89\xd2t\xa4S\x04!\xf1\rk\xae\xc0.\xa1)P\xc4\xfd"\xe1\xfcr$%\xb2\xe9\x18\
-\xd7E-\xeaB\x13d\xe4G\x13\xeb\xb2\xfc)\xf5\x91\xbe\x19\x98\xd3\xf4\xca\xf8\
-\xba5\xa7U\xb6\xe7\x9a\x99\x81O>\x03\xf8f\xf0\xa2\x9c\xe7\x0b\xbd\xca\x1c\
-\x9c\xf7\xa0W\x1b\x96r\xc0\xd8\x80\xa1\xbfC,\xe5r\xe3\x1f\xdc\x82\x16\n\x82\
-\xf2)\xe7m\x06\x0f\xf72z"\xcd\xf9\xae\x14\xd7\xdd\x15\xc51\xceR\x10A\x84\xf2\
-03=\x98\x99\x1e\xbcB\t\x81\x9a{\xf9\x04\x02\xd8\xa9\xe58U\xcd\xf0a!\t\xbf\
-\x8c5\xdb\x8b1u\x0ee;\x80\x9a{A\x18\x01\x8a\xb57\xa2\x85\xab\x91\x81[\xb0\
-\xac\xddh)\x97\x1b\x9f\xd8\x8c\x11\t\x02`\x97\x15SF\x04\x19\x90\xc4\xfc^\xcc\
-\xe9\xb3X\xb3=(\xdbE)\x05f\x10/X\x8dYL\xa3\x148\xf1VJ\xa9\x8eKj\x86\x85N\xb5\
-7Knz\x05\xb8\x9d\x08\rJ\x85\xd5,\xb1\xc6\x186\xa0$\x8d\xcb\xf3\xa7|\x02\xe9\
-\x83\x18\xb94\xd2\x90\xb8\xe1\x06\xb4\xc28\xbe]F\x98\x16\x8e^\x8b\xccN \xa4\
-\xc0^\xbc\n/Z\x0b\x80\x91>\x891=\x08BQ\x8e7Sn\\>\xefc\xabG85\xefA\xaf6\x0c\
-\xa1#\xcc*t\x99C\x0f\n\x8cX\x8a\x8cU\xc0\x03\xacP\x98\xb6;\xd6\xe3\xe5v\x92\
-\x1b\xe9\xa1\x90\xb9\x86\x845\x8an\xce\x12\xc9\x9eA/g\x18>9\xc5\xc4\xd1,\x9e\
-\xeb\xa3\x07u\x1a7%h\x88\rS,.\xa2\x10\\\x8cT\x1e\x91\xdciTv\x86\x81wF\xc8\r\
-\xd9\x08\r\xcc\x88A\xf5\rQjC\xa3\xd8\xa1\x8d\x08#\x85.\xf3\xe8A0\xa2)\n\x81\
-\x12.\x1en\xd0\xc5a\x8c\x88\x1a&\x9a\xeb\x86\xd2\x0c#\x87\'\xc8\xf4\xe4\x01h\
-\xdc\x94$\xde\x1cb\xec\xd8\x0czX\xa7fM\x86\x9c\xef\x10\xca\xf5|\xaaf]x\x12\
-\xb3j\x0b#\x07N3\xb4\xef\x00\xca\xf7PRpz\xc7\xcfX\xfe\xc8\x03$\xb4\x01p\x8e^\
-\x96?]\x95\x88\x05N\xd0\xf3\xf34\xa1Z\x8b\xe4\xf5#Lvg\x998>\xcb\xb2\x07\x93\
-\x84\xbc\x1f\xd1\xff\xcb0\xf1v\x87D\xd5\xdb\xd8\x91\xedH/K\xc0}\x99\xf4\x91 \
-f\x95G\xbcC\xe0\xa8?B\tc^\xc7V\x0f\xb3o^\x03^\x8dh$\x11\xdc\x89\xce\x14B\x08\
-\x84\na\xf2K<\xa6P\x9a\xc4\xf3nc\xd1\xda\x0ezw\xfe\x1b\xf6\xf80\xb1T\x8cDy\
-\x14Qh\xe0\xcc\x0f\xba(\x8c\x8f\x11\x88\xc7\x90\xa6\x89\x93\x9ffdo\x9ab\xba\
-\x8d\x96\xaf\xae\xc40O\xa2;I4\xbb\x85\xee\x1f\xff\x80\xe2\xf8\x18f4\x82\x11\
-\x0e\x83p\xc8\xf7\xba4\xae\xde\x82\xe6\x0f"hAg\x12\xcf.bO\xce`\x04-L\xa1\xa1\
-\x05b\x94\xf4\x03\xe0\xe5\x08\xb8m\x9c~\xf5\x15\xf2##\x04\x12q\xa4e1q\xf0<c\
-\xfbm|\xb7L\xa8\xbe\x9e\xe0\xa6;\xd1\xed\x0c\xf2\xb34\xd7\xdc\x89R\x10\xac\
-\x8aPU+\xc9\x8f\xf6#\xa4$\x1c_\x82\x1e\x88a\xa84\xfee\xf9;\x81\x92\x1e\xa6\
-\xb1\x16\x7f\xa6\x9b\xb1s\xe3L\xbf\x1f"X\x9dd\xf1\xfaV\xaaj\x96\x83\x13\xc6\
-\xf0\x8f\x91\xff@c\xf1\xaa\x16\n\xdeAd\xc9G\xd7:(\x8f\x1d#^SG\xbc\xaa\x81<\
-\x07\x98\xefSo=\xc4\x9ey\x0ey\xf5!X\x82\xe0^t1\x81\x90 D\x90\x00\xef\xa1\xe8\
-\x03@j6\xc1\xea\x07\x08X\xc3\xd8\x13\x87\xd0X\x8d!:\xe8\xdf\xf7"\xe5\xf1C,\
-\xbeu;u7o\x03U\xc6-\x16\x19\xdc\xf5\xaf\x14\xfavSH\xaf$\xd2\xbe\x08\xfc\x1a\
-\x06\xf7\xfe7\xee\xe4\xfb\xb4\xdc\xf1\x18\x89\x8e\r\xc8\x80\x8f\xa6\xc5\xf1\
-\x9c"J\x9f\xc2\xd4;\x11\xee\x16t1\x8e\x9b=\xcb\xb9\xff|\x06iJ\x84&i\xdc\xfc4\
-\xd1e\xcbP^\x96\xcc\xe9n\x9c\xb1\xc3,\xbe\xed!\xean\xde\x86\xd0}|\x1b\x86\
-\xdez\x91\x993\xfb1t\ra\xd6\xa3\xbbQ\x06\xf7\xbe\xfc\x99\x9a\xca\xdaE\xec\
-\xda\xbb\x88\xb5=\xcd\xd9\x97\x9eA\xe8\x1e\xed\xf7?\x85\xb0\xa6\x90Z\x1d\xfd\
-\xfb~ri\x7fm\xf5(k\'\xc2\xdc\x82.\xa71\xe50-[\xff\x8cX\xfb*|\xd1\x87\n\xbc\
-\x07\xb9e\xd4\xaf3\xe9\x7f\xe3\xbf(\xcd|\x95`\xb0\x88\xf2\x92L\xf7v\xa33Lj\
-\xc5#\x10\x1a (\xde\x84y.\x11=0\xf6\xc5\xd9\xb3\xbeb\xe8\x1a^ \x82fK\xa4\x14\
-\xe0G\xb0\xa64p\xe7\xfaVYq\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1\xfb\xfa\t\x05\
-\x1b\xa9\xdb\xf0(Zy\'\xd2\xebB\x9a\x0fQ\xb7\xf6a\x06{NR\xea\xed%\xb6\xf4q<O`\
-\xf7\x9c#\x14\xa8\xa3f\xcdCH\xf7G\xc8\xc2>\x90\t4\xa1\x833\r\xa5$\x9e\tZ\t\
-\xf4"X\xa1\x04\xba\x15E\x1a\x1aV0\x85\xe6\xba(\xd9J\xa6\xf3_\x08\x05\xea\xa9\
-[\xbf\x1d\xdd\xf9)\xa2t\x14\xdfz\x92\x9a\x95\xf7Q<\xd9\x85\xee\xe8\x08\x95\
-\x00/pi\xcd\xdc,\xe8\x19<\xeb\x1b\x98*\x82T\x02M\xafB\xb3_\xc13\x9e\xbc,\x7f\
-U-\xdb\xd1\n{\xf1\xac\x18\x9a\xad\x11\n/&\xd6\xba\x05\xdd\xf9\x0e8G!\xeb\xa1\
-\xf4\x12U\xcb\xb6\x12\xb0\xded\xaa\xf3 M\xdb\xff\x14\xcf\xcf\x93=\xf2\x12\
-\x89\xa6\xd5\x98\xc9\xa5\xc8\xfc.\xc8\x02\xf3|\x06\xa3\xb3{\xe9\xbc\x06\xbc*\
-\x89\xd5\xc2\xc6Q\xc4H\x10$`\x8f\xc2\x81Z\x98Q`X\xa8\r\x1b(\xf5\xbf\x87:\x15\
-\xc2joE\xceL\xe2\x89\x14\xde\x19\x81\x1ek\x84B\x00yp\x08\nA\xb4\xc64V\xc3mh#\
-\x8d0\x1eC\x15\x12\xa8b\x11\xf7\x030\x12\xf5\xf8\xb3\x06\xfa\xe1I(||\xab\xb8\
-\x1ab5\xb0.\x8d\x18\t`9\xed\xb4n\xff\x0b\xb4h\x04|\x1f\x7fb\x08y\xf4,N\xf3"\
-\x9c\x13%\x8cd#\xa2\x9c@\x1c\x98\x81\\\x10\xd92\x88Q\x7f\x13\xdap=\xc2K\x82\
-\x97@\xe5\xd4\xa55\xffWw\xfd\x10r$\x80\x90\x02Ji\xe8N\xe2/\x95\x97\xe5\x8f|\
-\x02\x8e6\xc1\x868\x8c\xc4\xe6\x96\xa8~\n:#\x90i\x06@\x04\xca\xc8\x9b\xa3D\
-\xe27\x93\xdd\xfb\x1e\xf6M\x05\xect\x9a\xf21\x97\xfa\xdb\xee\x85\x91<\x1c\
-\x08\x80?\xffsY\x1fz\xee\xc9y\x0fz\xb5a\xb4\n\x12\x1d\x13\x14N-A\xa2\xe1\xe7\
-\xa7\x98\xd9\xbf\x15\xa4\xc2\\\xeb\xa3g]\x86\xbe=L\xe1\xf4-\xd4<\xd0H\xf1\
-\x88\x8d\xb9*\x8f*m"{&\x83\x97\x9d\xc6\t=\x8e\xfd\xbeKh\x99\xc5l\xe7\x003{:\
-\x0864\xe0OO#B@\xf9V2{Fq\x1e\x1d\xa5\xa4~\x0f{\x8f\x8b\xde\xa4c\\\xa3a\x1f.\
-\xe3\xa5\x8b$\x96\x8f\xcd\xe5 4\x10\x052\xff(p\x07\x04\xeeP\rZC\x03\xc9\xbf-\
-\xe1e\xd6S\xe8\xceQ\x9e\x1c\xc1\t<Bq\xbfMxY\x80\xd9}\xbd\xcc\xec\xe9 tM\n\
-\xbf\x90FH\xff\x92\x9a\xa5}6\xc6\x12\x9f\xc4\xf5\x13\xe4\x8f\xb7#\x90\xf8\
-\xf9q2\xaf\xaf\xa3\xea\xe9\xc2e\xf9s\'\xb2L\xed\xf82\xf1\x1b\x86)t7\xcdm\xf3\
-\xe6G\x98\xfc\xfe]\x94{\xca\x17\xfa8\xd4\x1f \xb6\xf6a\x86\x9e\x9f\xe5\xe4\
-\x9f\xecD\x15]\xac\x86\xbb\xb0\x16o$\xf3\xeda\x8a\xbf\xf8\xfd\x05\x19[\xfd\
-\xd55\x1b\x17$\xf0\xd5Du\xfd,\xf7\xb2\x97\xf3\xa9j\x9c\xa2\xa4vh\x08\xee\xb7\
-\xc8OAv\xc4\xa1\xe7[6\x99\\\x8a\xeb\xfe\xb0\x1ecy\x99\xb7v4sCl\x80\xe8\x13\
-\xed\x1c\xf9\xfb3\x8c<\xbb\x97\xb6;\x17!W\x07)\x9d\xc8s\xfa\xcd\x0c\xc5\xd6v\
-\xea6\xc7\xe9\xeesH\xa4\xb2\x84\x1fk\xe3\xf0?\xf8\x8c\x7f\xb7\x93\xb6;\xeaQw\
-E\xd1-\xd0\r\x97\xe4\xd7"t\xedj\xe5v\xb9\x8b\xf3\xa9$H\x8dv\x86x3r\x1f\x93\
-\xc9$$Aj\x8a\xaf\xf4w\xa1?\xd0\xca\x91\xef\xf5S\xf8~\x17\x8d\xebk\xf17\x9a\
-\x0c~\xa8\x99kj#Yg\xd1\xea\xf6\x93\x9d6.\xa9\xf9Nt5\x02\x9b{\xc5k\xf4\xd6T\
-\xa3\xa4A\xabH\xf3\x8b\xe4\x1a\xd6\xf4\xf5]\x9e\xbfA\x97\xd3K\x97q\x8f:H\x7f\
-2\x86\x90\x92k\xd5\x00\xbb\xaf[\xcfd<|\xa1\x8fc\xb3\x82m\xcd.S\xb7\xafg\xf4\
-\xc40\x84t\xd6>\xbc\x99\x99\\\x15\xaf:q\xec5\x0b\xf3Q\xba~\xda/,H\xe0\xab\
-\x89F\x7f\x06\xdb\xeec\xc2)19\xae3\xf0\xcd4h:\xb6c\xa0\x84\x06B\xb2d\x85K\
-\xc7\xef\xe69t\xb4\x8d\xb7{C\x8c\xe9a\x9exp\x8c\xc5[\r\x8e\xfc,\xc7\xa9\xe7\
-\xcf\xa1\xa4\x86/\x0c\xc2\t\xc9\x8a{$f\xcd(\xaf\xefXAc\xad\xcf\xc3\xdb\xc6\
-\xa9\xfb\x92\xc6\xe9\xfdyN\xbd\xd0w\xa1mu\x93\xe4\xbe\xbf2\x98\xd0\x82\xd8\
-\xa5\xb3L\x94\xc3XQ\x89c\x8fq\xae\x9cc\xd4\xff\xf0`\xcd\x07\xb73\xc1\xa3\xdb\
-r\x84WI\x0e\xef\x9b\xa0\xeb\xdd\x0cJjDk\r\x16]\'\x19.I\x82\x91<v\xf1\x1c\xef\
-\x1eY\xc5\xefl\xfel\xcda\xbd\t\xc7\xf1)\x15z\x18\xb1\xab\t\xc6\x1c\xca\xf6\
-\x04gJyf\x8e^\x9e\xbf7v\xac@\xca\x19\x9c\xd2\x19\xa6\x9c\x02V\x95A\xd9>\xcb\
-\xb9\xf2\xb5\x8c\xfa\x1f;\xac\x1c\x87\xa6S\xb3\xd4mn\xe2\xc4\xc9!B\t\x93\x86\
-\x8d\x11:\xdf\x9b\xe2h.\xb8`c\xab\x0f\x0eV\x0e\n?/\xf9l\x9eR\xbe\x87\xf6\x9b\
-\x04\xe5\xce\x10\xb6c\xe0\x0b\x9dHBR\xdb\xec\xd0\xb2\xdc\xa6yy\x89}\x9dm\xbc\
-\xf4j\x13\xc5R\x9a\xf4\x90BzA\xee\xdfz\x98\xeaV\x83\xb3\x87\x82\x14s\x1aVTp\
-\xe3\x97\xb3\x84\xab\xe1\x85\xff\xb8\x87c\xddY\x0c]C\xd9:\x0f>\xde\xcd5\xb7h\
-\x1c\xdb\x1baz\xc2"V\xafX\xf5\xa5,\xbd})\xba\x0e/\xe3+k{X\xb2:BU\xadOz\xd0\
-\xe2\xf8\xc9Yl\xa7t!\xcftZQ\x1d\x81\xadO\x9d\xe1\xfc\xb1\x00\'\xde\r\xa1\x99\
-\x82u[\xb34_\x93\xe7\xc0\xae$\xd1\xa4\xc7\xb9\xb3U\xecx}#\xd9\xa9Kh\x1e\xca\
-\x11\xab\xcaR,\xf4\xd2\xb2r\x8a\x86\xb6"=\xe7\xa2\xbc\x7f<\x8f\x80\xcb\xf6W\
-\x9b\xca`\x17\x0e\xd3\xbcN\'V\xe7380\xc1\xf1\x13S\xd8N\xf6\xa2~\xde\xdf\xe5\
-\xf2\xe0\x16\x87\xbcS\xa2\xa9=\x81\x90\x13\xbc\xb9\xbb\xc4\xe0\xa0\\\xb0\xb1\
-\x15\x1b7\xbeQ\xb90\xf59\x11\x02\xb6m\xee\xe6\xf6u\xbd\xa4\x92E\x84\x9c\xeb\
-\xd2l\xd6$3k16\x15\xe1\xe7\xbfZ\xc6\xb9\xf3\xd5\x94]y\xd1s\xcb\xdbg\xd8\xb4b\
-\x98\x96\xc6Y\x94\xa7\xf0\xd1\xe8\xeeM\xd0u\xa2\x8e\xde\x81\xc8\x85\xb6R*V^;\
-\xc5\xe6\xb5C\xa4\xe2\x05\xcae\x89\x92:\xef\x7fP\xcd\xee\xceFry\x83\xbbo\x1f\
-fc\xc7\x14e_\xe3\xb5\xb7\x1b9r\xaa\xea\x13\xb9\x06,\x8f[\xd7\x8fq\xd3\xcaa\
-\xa4\xef"5\x18\xcdD8{\xbe\x8aM+\x86\x01\xc1ko/\xe5\xc8\xa9\xeaKjfs\x06B\xc0\
-\xdd\xb7\x8f\xb2\xa1c\x12\xd7\x97\x17\xe9^\xae\xbf\xb9\x18}l\xea\x18\xa6\xec\
-k\xbc\xfav\x1bGN]|\x0f\xc3\xd0\xe1o\xbe\x9e\xa3<0\xcc\x1b\xdf\xe9\xe3k\xff\
-\xd4A\xefx\x94o>\x1ba!\xaf\xfc\x89E\x8b\xbe[)\x90yB\x08\x08\x05?\xeaN\xd7\
-\x05\xdb\xa9l\xa3\xcf\x07\x1b\xd6\x94\xf9\xde\xb3\xd3<\xf7\x97\x83\xb8\x9e\
-\xe0\xcf\xffy\x11O}=\xce;\xfb\x17\xf6*\x81>44\xb4\xa0\x02\x15*\xcc\x077l\x9f\
-dz8\xc3\xf1Cy\x1e{&@\xf7I\x9b7v.b6\xbbp\xcb+\x98\xdb\xb5\xafP\xe1\xb7\x9ep\
-\xd0&\x1a\xcd\xf3\xc0\x1f\xc3\xe6\xbbm^|9\xb4\xe0\xc5\x01\xa0/\xb8B\x85\n\
-\xf3\xc0\xf3\xff\xdeH\xd0\xac\xa3:\xe6\xf3\xec\x0b\x92W~\xb20\xb7#\x7f\x1d\
-\x01\xdf\xa8\xfc\x07\xa9P\xe1S\xa8,\xb1*T\xf8\x0c*\x05R\xa1\xc2g\xf0?ir\x96s\
-C-\x0e\xd3\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory010Bitmap():
- return wxBitmapFromImage(getDocFactory010Image())
-
-def getDocFactory010Image():
- stream = cStringIO.StringIO(getDocFactory010Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory010')
-catalog['DocFactory010'] = ImageClass()
-catalog['DocFactory010'].getData = getDocFactory010Data
-catalog['DocFactory010'].getImage = getDocFactory010Image
-catalog['DocFactory010'].getBitmap = getDocFactory010Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory011Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r`\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\x8c\
-\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xaaZEUA\xadh\xfbG\xfe\
-\x8c\xaa\xa8R\xd5\x055\x8a\x80&)\xaaZQR\x1a\'\x81\x10\x14\x1b\x12c\x83\xe3\
-\x8c7\x8c\xd71\xb6g\xc6\xb3\xbc\xd9g\xde\xcc[\xef}\xf7\xde\xd3?\x86\x02.\x01\
-[\xd4\xcf\x10\xe7}\xfe|:\xf7\xf7\xfd}\xcf9?\xdd\xf3\xce\xb9G\xfc\xdd\xb7\x94\
-\xa2J\x95*\xbf\x16=T\xfby\xa7P\xa5\xca\x17\x17=X-\x90*U>\x11=\x9c\xf8\xbcS\
-\xf8\xcdF\xa00\xb0\x91x\xe7\xfd\xeeb\xe0b^\xbe\x1c\x84\x8d\xf6\x7frP@Y\x05\
-\xf0\xd0*\xa2+\xf11E\t\x1fIYY(DEt>O\xf4P\xfc\xf3N\xe17\x17\x81OSa\x17Q\xf7\
-\x1c\xfeG\xe6\xa6\x94 M\x9d\xbc\x1b\'\x17\xecdN_\x84K\xa0B9x\xb4\xd8oP\xe3\
-\xf5\x9d\x97\x03\x80n)l\xad\x8e^m\x0beB\x97TW\xc3a\xb1\xfbS\x02\xe514C0!\x97\
-\x91\x967^R\x8d/\x02z\xb8Z \x9f\x19\x8bqZ\xf4g8\xfdj=\xb3\xc3\x11@\x80\x94H]\
-\x11\xae+\x12i,\xd2\xb1|\x1a\xc7Z\xc4@\xf0\xafqh\xb8\xe49\x04\x19\xa5\xa5\
-\xf8"\'\x7f\x1cg6\x1d\x00!@H\x00b\xcd6\xcb\xee\x7f\x8b\xa2\xd1\xc8\x147_R\
-\xdd\x10\xa34\xd9?\xe4\xd8\x0fS\xc4\x16\x96h[s\x88B\xf0Z\xca\\Y\x13J\x8f\\Y~\
-.+!%Hh\xab\x10~\x11\xa9)\x82q\x81\x11\x10(\x04\xa5|\x90\xf1\x93\x92\xfcx+\
-\xcb\xef\x92\x98\xc6\xaf\x18\x0c\xdfs\xde2D\xf8\x1e\xc2-#|\x0f%5\x94n\xa0\
-\xe4\xaf_\x0e\t\xd7A\xbae\x80\xf3\xda\x86\x94NX\\\x8dr\x0bH\x8d\x0fr\x00Aj\
-\xb1I(\xd4\x85\x19l!"?\x1e\xc7\xd7M\x94\xa6#\x9d"\x08\x89oX\xf3\x05v\x01M\
-\x81"\xee\x17\t\xe7\x97")\x91M\xc7\xb8&j\xd1\x10\x9a$#?\x9cP\x17\xe5O\xa9\
-\x0f\xf5\xcd\xc0\xbc\xa6W\xc6\xd7\xady\xad\xb2=\xdf\xcc\x0c|\xfc\x19\xc07\
-\x83\xe7\xe5|\xa9\xd1k\xcc\xa1\x8a\x05\xbf\xd2\xb1\x94\x03\xc6:\x0c\xfd-b)\
-\x97\xeb\xff\xe0&\xb4P\x10\x94O9o3t\xa8\x8f\xb1\xe3i\xce\xedOq\xcd\x1dQ\x1c\
-\xe3\x0c\x05\x11D(\x0f3\xd3\x8b\x99\xe9\xc5+\x94\x10\xa8\xf9\x97O \x80\x9dZ\
-\x8aS\xd3\n\xef\x17\x92\xf0\xcbXs}\x18\xd3gQ\xb6\x03\xa8\xf9\x17\x84\x11\xa0\
-X\x7f=Z\xb8\x16\x19\xb8\t\xcb\xda\x89\x96r\xb9\xfe\xb1\x8d\x18\x91 \x00vY1mD\
-\x90\x01I\xcc\xef\xc3\x9c9\x835\xd7\x8b\xb2]\x94R`\x06\xf1\x82\xb5\x98\xc54J\
-\x81\x13o\xa7\x94\xea\xba\xa0fX\xe8\xd4zs\xe4f\x96\x81\xdb\x8d\xd0\xa0TX\xc9\
-"k\x9c\x11\x03J\xd2\xb88\x7f\xca\'\x90>\x80\x91K#\r\x89\x1bnB+L\xe0\xdbe\x84\
-i\xe1\xe8\xf5\xc8\xec$B\n\xec\x85+\xf0\xa2\xf5\x00\x18\xe9\x13\x183C \x14\
-\xe5x+\xe5\xe6\xa5\x15\x1bc=\xc2\xc9\x8a\x05\xbf\xd21\x84\x8e0k\xd0e\x0e=(0b\
-)2V\x01\x0f\xb0Ba:n[\x8b\x97\xdbNn\xb4\x97B\xe6*\x12\xd6\x18\xba9G${\x1a\xbd\
-\x9ca\xe4\xc44\x93G\xb2x\xae\x8f\x1e\xd4i\xde\x90\xa0)6B\xb1\xb8\x80Bp!RyDr\
-\xa7P\xd9Y\x06\xdf\x1a%7l#40#\x06\xb5\xd7E\xa9\x0f\x8da\x87\xd6#\x8c\x14\xba\
-\xcc\xa3\x07\xc1\x88\xa6(\x04J\xb8x\xb8A\x17\x87q"j\x84h\xae\x07J\xb3\x8c\
-\x1e\x9a$\xd3\x9b\x07\xa0yC\x92xk\x88\xf1\xa3\xb3\xe8a\x9d\xbaU\x19r\xbeC(\
-\xd7\xfb\x89\x9a\r\xe1)\xcc\x9aM\x8c\xee;\xc5\xf0\x9e}(\xdfCI\xc1\xa9m?c\xe9\
-C\xf7\x91\xd0\x06\xc19rQ\xfetU"\x168N\xef\xcf\xd3\x84\xea-\x92\xd7\x8e2\xd5\
-\x93e\xf2\xd8\x1cK\xeeO\x12\xf2~\xc4\xc0/\xc3\xc4;\x1d\x125obG\xb6"\xbd,\x01\
-\xf7E\xd2\x87\x83\x985\x1e\xf1.\x81\xa3\xfe\x08%\x8c\x8a\x8c\xb1\x1efOE\x02\
-\xff6\xa0\x91Dp;:\xd3\x08!\x10*\x84\xc9/\xf1\x98Fi\x12\xcf\xbb\x85\x05\xab\
-\xbb\xe8\xdb\xfeo\xd8\x13#\xc4R1\x12\xe51D\xa1\x89\xd3?\xd8Oab\x9c@<\x864M\
-\x9c\xfc\x0c\xa3\xbb\xd3\x14\xd3\x1d\xb4}u9\x86y\x02\xddI\xa2\xd9m\xf4\xfc\
-\xf8\x07\x14\'\xc61\xa3\x11\x8cp\x18\x84C\xbe\xcf\xa5y\xe5&4\x7f\x08A\x1b:Sx\
-v\x11{j\x16#ha\n\r-\x10\xa3\xa4\xef\x03/G\xc0\xed\xe0\xd4\xcb/\x91\x1f\x1d%\
-\x90\x88#-\x8b\xc9\x03\xe7\x18\xdfk\xe3\xbbeB\x8d\x8d\x047\xdc\x8eng\x90\x9f\
-\xa6\xb9\xeav\x94\x82`M\x84\x9azI~l\x00!%\xe1\xf8"\xf4@\x0cC\xa5\xf1/\xca\
-\xdfq\x94\xf40\x8d\xd5\xf8\xb3=\x8c\x9f\x9d`\xe6\xdd\x10\xc1\xda$\x0b\xd7\
-\xb6SS\xb7\x14\x9c0\x86\x7f\x94\xfc{\x1a\x0bW\xb4Q\xf0\x0e K>\xba\xd6Ey\xfc(\
-\xf1\xba\x06\xe25M\xe4\xd9G\xa5N\xbb\xf5\x10\xbb*\x14\xfa\xcaG\xb0\x08\xc1\
-\xdd\xe8b\x12!A\x88 \x01\xdeA\xd1\x0f\x80\xd4l\x82\xb5\xf7\x11\xb0F\xb0\'\
-\x0f\xa2\xb1\x12Ct1\xb0\xe7y\xca\x13\x07Yx\xf3V\x1an\xdc\x02\xaa\x8c[,2\xb4\
-\xe3_)\xf4\xef\xa4\x90^N\xa4s\x01\xf8u\x0c\xed\xfeo\xdc\xa9wi\xbb\xed\x11\
-\x12]\xeb\x90\x01\x1fM\x8b\xe39E\x94>\x8d\xa9w#\xdcM\xe8b\x027{\x86\xb3\xff\
-\xf9\x14\xd2\x94\x08M\xd2\xbc\xf1I\xa2K\x96\xa0\xbc,\x99S=8\xe3\x87Xx\xcb\
-\x034\xdc\xb8\x05\xa1\xfb\xf86\x0c\xbf\xf1<\xb3\xa7\xf7b\xe8\x1a\xc2lDw\xa3\
-\x0c\xed~\xf1S5\x95\xb5\x83\xd8\xd5w\x10\xebx\x923/<\x85\xd0=:\xef}\x02aM#\
-\xb5\x06\x06\xf6\xfc\xe4\xc2\xfe:\x1aQ\xd6v\x84\xb9\t]\xce`\xca\x11\xda6\xff\
-\x19\xb1\xce\x15\xf8\xa2\x1f\x15x\x07rKh\\c2\xf0\xda\x7fQ\x9a\xfd*\xc1`\x11\
-\xe5%\x99\xe9\xebAg\x84\xd4\xb2\x87 4HP\xbc\x0e\x15*\x11=0~\xe5\xed]_6t\r/\
-\x10A\xb3%R\n\xf0#X\xd3\x1a\xb8\xf3}\xaa\xac8\xae\x1f\xc6,\tL/\x8cP1(\xfb\
-\xd8\xfd\x03\x84\x82\xcd4\xac{\x18\xad\xbc\x1d\xe9\xedG\x9a\x0f\xd0\xb0\xfaA\
-\x86zOP\xea\xeb#\xb6\xf8Q<O`\xf7\x9e%\x14h\xa0n\xd5\x03H\xf7G\xc8\xc2\x1e\
-\x90\t4\xa1\x833\x03\xa5$\x9e\tZ\t\xf4"X\xa1\x04\xba\x15E\x1a\x1aV0\x85\xe6\
-\xba(\xd9N\xa6\xfb_\x08\x05\x1aiX\xbb\x15\xdd\xf9)\xa2t\x04\xdfz\x9c\xba\xe5\
-\xf7P<\xb1\x1f\xdd\xd1\x11*\x01^\xe0\xc2\x9a\xb99\xd03x\xd670U\x04\xa9\x04\
-\x9a^\x83f\xbf\x84g<~Q\xfej\xda\xb6\xa2\x15v\xe3Y14[#\x14^H\xac}\x13\xba\xf3\
-\x1dp\x8e@\xd6C\xe9%j\x96l&`\xbd\xcet\xf7\x01Z\xb6\xfe)\x9e\x9f\'{\xf8\x05\
-\x12-+1\x93\x8b\x91\xf9\x1d\x90\x05*t\x06\xa3\xb3sqE\x02\xffV\x10\xab\x87\
-\xf5c\x88\xd1 H\xc0\x1e\x83}\xf50\xab\xc0\xb0P\xeb\xd6Q\x1ax\x07u2\x84\xd5\
-\xd9\x8e\x9c\x9d\xc2\x13)\xbc\xd3\x02=\xd6\x0c\x85\x00\xf2\xc00\x14\x82h\xcd\
-i\xac\xa6[\xd0F\x9ba"\x86*$P\xc5"\xee{`$\x1a\xf1\xe7\x0c\xf4CSP\xf8\xe8Vq-\
-\xc4\xea`M\x1a1\x1a\xc0r:i\xdf\xfa\x17h\xd1\x08\xf8>\xfe\xe40\xf2\xc8\x19\
-\x9c\xd6\x058\xc7K\x18\xc9fD9\x81\xd87\x0b\xb9 \xb2m\x08\xa3\xf1\x06\xb4\x91\
-F\x84\x97\x04/\x81\xca\xa9\x0bk\xfe\xaf\xee\xdaa\xe4h\x00!\x05\x94\xd2\xd0\
-\x93\xc4_,/\xca\x1f\xf9\x04\x1ci\x81uq\x18\x8d\xcd/Q\xfd\x14tG \xd3\n\x80\
-\x08\x94\x917F\x89\xc4o$\xbb\xfb\x1d\xec\x1b\n\xd8\xe94\xe5\xa3.\x8d\xb7\xdc\
-\r\xa3y\xd8\x17\x00\xbfrsX\x1f~\xe6\xf1\x8a\x05\xbf\xd21\xda\x05\x89\xaeI\n\
-\'\x17!\xd1\xf0\xf3\xd3\xcc\xee\xdd\x0cRa\xae\xf6\xd1\xb3.\xc3\xdf\x1e\xa1p\
-\xea&\xea\xeek\xa6x\xd8\xc6\\\x91G\x956\x90=\x9d\xc1\xcb\xce\xe0\x84\x1e\xc5\
-~\xd7%\xb4\xc4b\xae{\x90\xd9]]\x04\x9b\x9a\xf0gf\x10!\xa0|3\x99]c8\x0f\x8fQR\
-\xbf\x87\xbd\xcbEo\xd11\xae\xd2\xb0\x0f\x95\xf1\xd2E\x12K\xc7\xe7s\x10\x1a\
-\x88\x02\x99\x7f\x14\xb8\x83\x02w\xb8\x0e\xad\xa9\x89\xe4\xdf\x96\xf02k)\xf4\
-\xe4(O\x8d\xe2\x04\x1e\xa2\xb8\xd7&\xbc$\xc0\xdc\x9e>fwu\x11\xba*\x85_H#\xa4\
-\x7fA\xcd\xd2\x1e\x1bc\x91O\xe2\xdaI\xf2\xc7:\x11H\xfc\xfc\x04\x99W\xd7P\xf3\
-d\xe1\xa2\xfc\xb9\x93Y\xa6\xb7}\x99\xf8u#\x14zZ\xe6\xb7y\xf3\xa3L}\xff\x0e\
-\xca\xbd\xe5\x0f\xfa84\x10 \xb6\xfaA\x86\x9f\x9d\xe3\xc4\x9flG\x15]\xac\xa6;\
-\xb0\x16\xae\'\xf3\xed\x11\x8a\xbf\xf8\xfd\x8a\x8e\xb1\xfe\xf2\xaa\xf5\x15\
-\x15\xb8\x92\xa9m\x9c\xe3nvs.U\x8bS\x94\xd4\x0f\x0f\xc3\xbd\x16\xf9i\xc8\x8e\
-:\xf4~\xcb&\x93Kq\xcd\x1f6b,-\xf3\xc6\xb6V\xae\x8b\r\x12}\xac\x93\xc3\x7f\
-\x7f\x9a\xd1\xa7w\xd3q\xfb\x02\xe4\xca \xa5\xe3yN\xbd\x9e\xa1\xd8\xdeI\xc3\
-\xc68=\xfd\x0e\x89T\x96\xf0#\x1d\x1c\xfa\x07\x9f\x89\xefv\xd3q[#\xea\x8e(\
-\xba\x05\xba\xe1\x92\xfcZ\x84\xfd;\xda\xb9U\xee\xe0\\*\tR\xa3\x93a^\x8f\xdc\
-\xc3T2\tI\x90\x9a\xe2+\x03\xfb\xd1\xefk\xe7\xf0\xf7\x06(|\x7f?\xcdk\xeb\xf1\
-\xd7\x9b\x0c\xbd\xaf\x99k\xe9 \xd9`\xd1\xee\x0e\x90\x9d1.\xa8\xf9Vt%\x02\x9b\
-\xbb\xc5+\xf4\xd5\xd5\xa2\xa4A\xbbH\xf3\x8b\xe4*V\xf5\xf7_\x9c\xbf!\x97S\x8b\
-\x97p\x97:\xc0@2\x86\x90\x92\xab\xd5 ;\xafY\xcbT<\xfcA\x1f\xc7\xe6\x04[Z]\
-\xa6o]\xcb\xd8\xf1\x11\x08\xe9\xac~p#\xb3\xb9\x1a^v\xe2\xd8\xab*\xfb1\xba~\
-\xca/TT\xe0J\xa6\xd9\x9f\xc5\xb6\xfb\x99tJLM\xe8\x0c~3\r\x9a\x8e\xed\x18(\
-\xa1\x81\x90,Z\xe6\xd2\xf5\xbby\x0e\x1e\xe9\xe0\xcd\xbe\x10\xe3z\x98\xc7\xee\
-\x1fg\xe1f\x83\xc3?\xcbq\xf2\xd9\xb3(\xa9\xe1\x0b\x83pB\xb2\xec.\x89Y7\xc6\
-\xab\xdb\x96\xd1\\\xef\xf3\xe0\x96\t\x1a\xbe\xa4qjo\x9e\x93\xcf\xf5\x7f\xd0\
-\xb6\xb6Er\xcf_\x19LjA\xec\xd2\x19&\xcba\xac\xa8\xc4\xb1\xc79[\xce1\xe6\xbf\
-\x7f\xb0\xe6\x83\xdb\x9d\xe0\xe1-9\xc2+$\x87\xf6L\xb2\xff\xed\x0cJjD\xeb\r\
-\x16\\#\x19)I\x82\x91<v\xf1,o\x1f^\xc1\xefl\xfct\xcd\x11\xbd\x05\xc7\xf1)\
-\x15z\x19\xb5k\t\xc6\x1c\xca\xf6$\xa7Kyf\x8f\\\x9c\xbf\xd7\xb6-C\xcaY\x9c\
-\xd2i\xa6\x9d\x02V\x8dA\xd9>\xc3\xd9\xf2\xd5\x8c\xf9\x1f9\xac\x9c\x80\x96\
-\x93s4ll\xe1\xf8\x89aB\t\x93\xa6\xf5\x11\xba\xdf\x99\xe6H.X\xf11\xd6\x87\x86\
-\xaa\x07\x85\x9f\x95|6O)\xdfK\xe7\r\x82rw\x08\xdb1\xf0\x85N$!\xa9ouh[j\xd3\
-\xba\xb4\xc4\x9e\xee\x0e^x\xb9\x85b)MzX!\xbd \xf7n>Dm\xbb\xc1\x99\x83A\x8a9\
-\r+*\xb8\xfe\xcbY\xc2\xb5\xf0\xdc\x7f\xdc\xc5\xd1\x9e,\x86\xae\xa1l\x9d\xfb\
-\x1f\xed\xe1\xaa\x9b4\x8e\xee\x8e03i\x11kT\xac\xf8R\x96\xbe\xfe\x14\xfb\x0f-\
-\xe1+\xab{Y\xb42BM\xbdOz\xc8\xe2\xd8\x899l\xa7\xf4A\x9e\xe9\xb4\xa26\x02\x9b\
-\x9f8\xcd\xb9\xa3\x01\x8e\xbf\x1dB3\x05k6gi\xbd*\xcf\xbe\x1dI\xa2I\x8f\xb3gj\
-\xd8\xf6\xeaz\xb2\xd3\x17\xd0<\x98#V\x93\xa5X\xe8\xa3m\xf94M\x1dEz\xcfFy\xf7\
-X\x1e\x01\x17\xed\xaf>\x95\xc1.\x1c\xa2u\x8dN\xac\xc1ghp\x92c\xc7\xa7\xb1\
-\x9d\xecy\xfd\xbcw\xbf\xcb\xfd\x9b\x1c\xf2N\x89\x96\xce\x04BN\xf2\xfa\xce\
-\x12CC\xb2\xe2c,\xd6\xaf\x7f\xadza\xea3"\x04l\xd9\xd8\xc3\xadk\xfaH%\x8b\x08\
-9\xdf\x95\xd9\xacIf\xceb|:\xc2\xcf\x7f\xb5\x84\xb3\xe7j)\xbb\xf2\xbc\xe7\x96\
-v\xce\xb2a\xd9\x08m\xcds(O\xe1\xa3\xd1\xd3\x97`\xff\xf1\x06\xfa\x06#\x1f\xb4\
-\x95R\xb1\xfc\xeai6\xae\x1e&\x15/P.K\x94\xd4y\xf7\xbdZvv7\x93\xcb\x1b\xdcy\
-\xeb\x08\xeb\xbb\xa6)\xfb\x1a\xaf\xbc\xd9\xcc\xe1\x935\x1f\xcb5`y\xdc\xbcv\
-\x9c\x1b\x96\x8f }\x17\xa9\xc1X&\xc2\x99s5lX6\x02\x08^ys1\x87O\xd6^P3\x9b3\
-\x10\x02\xee\xbcu\x8cu]S\xb8\xbe<O\xf7b\xfd\xcd\xc7\xe8gC\xd7\x08e_\xe3\xe57\
-;8|\xf2\xfc\xfb\x17\x86\x0e\x7f\xf3\xf5\x1c\xe5\xc1\x11^\xfbN?_\xfb\xa7.\xfa\
-&\xa2|\xf3\xe9\x08\x97\xe3\xaa\x9fX\xb0\xe0\xbb\xd5\x02\xf9\x7f"\x04\x84\x82\
-\x1fv\xa3\xeb\x82\xedT\xb7\xcf/\x05\xebV\x95\xf9\xde\xd33<\xf3\x97C\xb8\x9e\
-\xe0\xcf\xffy\x01O|=\xce[{/\xcfU\x02}xx\xf8\xb2\x08U\xa9\xf2Y\xb8n\xeb\x143#\
-\x19\x8e\x1d\xcc\xf3\xc8S\x01zN\xd8\xbc\xb6}\x01s\xd9\xca/\xaf`~\xf7\xbeJ\
-\x95/,\xe1\xa0M4\x9a\xe7\xbe?\x86\x8dw\xda<\xffb\xe8\xb2\x15\x07\x80~\xd9\
-\x94\xaaT\xf9\x0c<\xfb\xef\xcd\x04\xcd\x06jc>O?\'y\xe9\'\x95\xb9\x1d\xf9I\
-\x08\xf8F\xf5?H\x95*\x9f@u\x89U\xa5\xca\xa7P-\x90*U>\x85\xff\x01N\x06\x96s\
-\x10h\xbf\xfe\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory011Bitmap():
- return wxBitmapFromImage(getDocFactory011Image())
-
-def getDocFactory011Image():
- stream = cStringIO.StringIO(getDocFactory011Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory011')
-catalog['DocFactory011'] = ImageClass()
-catalog['DocFactory011'].getData = getDocFactory011Data
-catalog['DocFactory011'].getImage = getDocFactory011Image
-catalog['DocFactory011'].getBitmap = getDocFactory011Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory012Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r]\
-IDATx\x9c\xed\x9bip]\xd5}\xc0\x7f\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\
-\xb6\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em?\xe4c\xa6\x93\xe9L\
-\xa7\x0b\xd3L\x06\xc8R\xa6\xd3\x0e%\xa5q\x12\x08abCblp\x1cy\xc3x\x95\xb1-\
-\xc9Z\x9ev\xe9Io\xbd\xf7\xdd{O?\x88\x18\\\x02\x16\x1d$\x88\xe7\xfd>\xbe9\xf7\
-\xfe\xfe\xffs\xce\x7f\xdey\xe7\xbc#\xfe\xe1[JQ\xa1B\x85\xdf\x8a\x1e\xaa\xfe\
-\xbcC\xa8P\xe1\x8b\x8b\x1e\xac\x14H\x85\n\x1f\x8b\x1eN|\xde!\xfcn"P\x18\xd8H\
-\xbcK>w1p1\x17.\x06a\xa3\xfd\x9f\x18\x14PV\x01<\xb4y\xf1J|LQ\xc2GRV\x16\n1/\
-\x9e/\x02z(\xfey\x87\xf0\xbb\x87\xc0\xa7\xa1\xb0\x87\xa8{\x01\xffCsSJ\x90\
-\xa6N\xde\x8d\x93\x0b\xb63\xa3/\xc1%0O1x4\xd9oP\xe5\xf5\\\x12\x03\x80n)l\xad\
-\x86nm\x1beB\x9f\xa9W\xc3a\xa9\xfb3\x02\xe5\x114C0&W\x90\x967~\xa6\x8e/\x12z\
-\xb8R \x9f\x1a\x8bQ\x9a\xf4g8\xfbj-\xd3\x83\x11@\x80\x94H]\x11\xae)\x12\xa9/\
-\xd2\xb6r\x12\xc7ZB_\xf0oq\xa8\xfb\xccc\x082LS\xf1EN\xff$\xcet:\x00B\x80\x90\
-\x00\xc4\x1amV\xdc\xff\x16E\xa3\x9e\tn\xfeL\xbd!\x86i\xb0\x7f\xc4\x89\x1f\
-\xa5\x88-.\xd1\xb2\xee\x08\x85\xe0\xb5\x94\xb92\'\x92\x1e\xb92\xf3\x9aWBJ\
-\x90\xd0\xd6 \xfc"RS\x04\xe3\x02# P\x08J\xf9 \xa3\xa7%\xf9\xd1fV\xde%1\x8d_\
-\xd3\x1f\xbe\xe7\x92e\x88\xf0=\x84[F\xf8\x1eJj(\xdd@\xc9\xdf\xbe\x1c\x12\xae\
-\x83t\xcb\x00\x97\xb4\r)\x9d\xb0\xb8\x1a\xe5\x16\x90\x1a\x17c\x00Aj\xa9I(\
-\xd4\x81\x19l""?\xfa\x1e_7Q\x9a\x8et\x8a $\xbea\xcd\x16\xd8e\x9c\x02E\xdc/\
-\x12\xce/GR"\x9b\x8eqM\xd4\xa2.4NF~0\x91\xe6\x94\x9fR\x1f\xf8\xcd\xc0\xac\
-\xd3+\xe3\xeb\xd6\xac\xabl\xcf63\x03\x1f}\x06\xf0\xcd\xe0%1\xcf\x17z\x9590\
-\xef\x92+\rK9`l\xc0\xd0\xdf"\x96r\xb9\xfe\x8fnB\x0b\x05A\xf9\x94\xf36\x03Gz\
-\x189\x99\xe6\xc2\xc1\x14\xd7\xdc\x11\xc51\xceQ\x10A\x84\xf203\xdd\x98\x99n\
-\xbcB\t\x81\x9a\xfd\xf2\t\x04\xb0S\xcbq\xaa\x9a\xe1\xfdB\x12~\x19k\xa6\x07c\
-\xf2<\xcav\x005\xfb\x05a\x04(\xd6^\x8f\x16\xaeF\x06n\xc2\xb2v\xa3\xa5\\\xae\
-\x7fl3F$\x08\x80]VL\x1a\x11d@\x12\xf3{0\xa7\xcea\xcdt\xa3l\x17\xa5\x14\x98A\
-\xbc`5f1\x8dR\xe0\xc4[)\xa5:.\xeb\x0c\x0b\x9djo\x86\xdc\xd4\np;\x11\x1a\x94\
-\n\xabYb\x8d2d@I\x1as\xcbO\xf9\x04\xd2\x870ri\xa4!q\xc3\rh\x851|\xbb\x8c0-\
-\x1c\xbd\x16\x99\x1dGH\x81\xbdx\x15^\xb4\x16\x00#}\ncj\x00\x84\xa2\x1co\xa6\
-\xdc\xb8|\xde\xc7Z\x8fpz\xde%W\x1a\x86\xd0\x11f\x15\xba\xcc\xa1\x07\x05F,E\
-\xc6*\xe0\x01V(L\xdbm\xeb\xf1r;\xc9\rwS\xc8\\E\xc2\x1aA7g\x88d\xcf\xa2\x973\
-\x0c\x9d\x9ad\xfcX\x16\xcf\xf5\xd1\x83:\x8d\x9b\x124\xc4\x86(\x16\x17Q\x08.F\
-*\x8fH\xee\x0c*;M\xff[\xc3\xe4\x06m\x84\x06f\xc4\xa0\xfa\xba(\xb5\xa1\x11\
-\xec\xd0F\x84\x91B\x97y\xf4 \x18\xd1\x14\x85@\t\x17\x0f7\xe8\xe20JD\r\x11\
-\xcduAi\x9a\xe1#\xe3d\xba\xf3\x004nJ\x12o\x0e1z|\x1a=\xacS\xb3&C\xcew\x08\
-\xe5\xba?\xd6Y\x17\x9e\xc0\xac\xda\xc2\xf0\x813\x0c\xee;\x80\xf2=\x94\x14\
-\x9c\xd9\xf1s\x96?t\x1f\t\xad\x1f\x9ccs\xcaOW%b\x81\x93t\xff"M\xa8\xd6"y\xed\
-0\x13]Y\xc6O\xcc\xb0\xec\xfe$!\xef\xc7\xf4\xfd*L\xbc\xdd!Q\xf5&vd;\xd2\xcb\
-\x12p_$}4\x88Y\xe5\x11\xef\x108\xeaOP\xc2\x98\xd7\xb1\xd6\xc3\xec\x9bW\xc1\
-\x95\x88F\x12\xc1\xed\xe8L"\x84@\xa8\x10&\xbf\xc2c\x12\xa5I<\xef\x16\x16\xad\
-\xed\xa0g\xe7\xbfc\x8f\r\x11K\xc5H\x94G\x10\x85\x06\xce\xfe\xf0 \x85\xb1Q\
-\x02\xf1\x18\xd24q\xf2S\x0c\xefMSL\xb7\xd1\xf2\xd5\x95\x18\xe6)t\'\x89f\xb7\
-\xd0\xf5\x93\x1fR\x1c\x1b\xc5\x8cF0\xc2a\x10\x0e\xf9\x1e\x97\xc6\xd5[\xd0\
-\xfc\x01\x04-\xe8L\xe0\xd9E\xec\x89i\x8c\xa0\x85)4\xb4@\x8c\x92~\x00\xbc\x1c\
-\x01\xb7\x8d3/\xbfD~x\x98@"\x8e\xb4,\xc6\x0f]`t\xbf\x8d\xef\x96\t\xd5\xd7\
-\x13\xdct;\xba\x9dA~\x92s\xcd\xed(\x05\xc1\xaa\x08U\xb5\x92\xfcH\x1fBJ\xc2\
-\xf1%\xe8\x81\x18\x86J\xe3\xcf)\xbf\x93(\xe9a\x1ak\xf1\xa7\xbb\x18=?\xc6\xd4\
-\xbb!\x82\xd5I\x16\xafo\xa5\xaaf98a\x0c\xff8\xf9\xf74\x16\xafj\xa1\xe0\x1dB\
-\x96|t\xad\x83\xf2\xe8q\xe25u\xc4\xab\x1a\xc8s\x80\xf9>\xe5\xd6C\xec\x99g\
-\xc5\x95\x87`\t\x82\xbb\xd1\xc58B\x82\x10A\x02\xbc\x83\xa2\x17\x00\xa9\xd9\
-\x04\xab\xef#`\ra\x8f\x1fFc5\x86\xe8\xa0o\xdf\xf3\x94\xc7\x0e\xb3\xf8\xe6\
-\xed\xd4\xdd\xb8\rT\x19\xb7Xd`\xd7\xbfQ\xe8\xddM!\xbd\x92H\xfb"\xf0k\x18\xd8\
-\xfb?\xb8\x13\xef\xd2r\xdb#$:6 \x03>\x9a\x16\xc7s\x8a(}\x12S\xefD\xb8[\xd0\
-\xc5\x18n\xf6\x1c\xe7\xff\xeb)\xa4)\x11\x9a\xa4q\xf3\x93D\x97-CyY2g\xbapF\
-\x8f\xb0\xf8\x96\x07\xa8\xbbq\x1bB\xf7\xf1m\x18|\xe3y\xa6\xcf\xee\xc7\xd05\
-\x84Y\x8f\xeeF\x19\xd8\xfb\xe2\':\x95\xb5\x8b\xd8\xd5w\x10k{\x92s/<\x85\xd0=\
-\xda\xef}\x02aM"\xb5:\xfa\xf6\xfd\xf4\xf2\xf9\xb5\xd5\xa3\xac\x9d\x08s\x0b\
-\xba\x9c\xc2\x94C\xb4l\xfd\x0bb\xed\xab\xf0E/*\xf0\x0e\xe4\x96Q\xbf\xce\xa4\
-\xef\xb5\xff\xa64\xfdU\x82\xc1"\xcaK2\xd5\xd3\x85\xce\x10\xa9\x15\x0fA\xa8\
-\x9f\xa0x\x1d\xe6\xb9D\xf4\xc0\xe8\x95\xbb\x87=o\xe8\x1a^ \x82fK\xa4\x14\xe0\
-G\xb0&5pg\xfbRYq\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1{\xfb\x08\x05\x1b\xa9\xdb\
-\xf00Zy\'\xd2;\x884\x1f\xa0n\xed\x83\x0ct\x9f\xa2\xd4\xd3Cl\xe9\xa3x\x9e\xc0\
-\xee>O(PG\xcd\x9a\x07\x90\xee\x8f\x91\x85} \x13hB\x07g\nJI<\x13\xb4\x12\xe8E\
-\xb0B\tt+\x8a44\xac`\n\xcduQ\xb2\x95L\xe7w\x08\x05\xea\xa9[\xbf\x1d\xdd\xf9\
-\x19\xa2t\x0c\xdfz\x9c\x9a\x95\xf7P<u\x10\xdd\xd1\x11*\x01^\xe0\xf2\xce\xdc\
-\x0c\xe8\x19<\xeb\x1b\x98*\x82T\x02M\xafB\xb3_\xc23\x1e\x9fS~U-\xdb\xd1\n{\
-\xf1\xac\x18\x9a\xad\x11\n/&\xd6\xba\x05\xdd\xf9.8\xc7 \xeb\xa1\xf4\x12U\xcb\
-\xb6\x12\xb0^g\xb2\xf3\x10M\xdb\xff\x1c\xcf\xcf\x93=\xfa\x02\x89\xa6\xd5\x98\
-\xc9\xa5\xc8\xfc.\xc8\x02\xf3|\x06\xa3\xb3{\xe9\xbc\n\xaeHb\xb5\xb0q\x041\
-\x1c\x04\t\xd8#p\xa0\x16\xa6\x15\x18\x16j\xc3\x06J}\xef\xa0N\x87\xb0\xda[\
-\x91\xd3\x13x"\x85wV\xa0\xc7\x1a\xa1\x10@\x1e\x1a\x84B\x10\xad1\x8d\xd5p\x0b\
-\xdap#\x8c\xc5P\x85\x04\xaaX\xc4}\x0f\x8cD=\xfe\x8c\x81~d\x02\n\x1f\xde*\xae\
-\x86X\r\xacK#\x86\x03XN;\xad\xdb\xff\n-\x1a\x01\xdf\xc7\x1f\x1fD\x1e;\x87\
-\xd3\xbc\x08\xe7d\t#\xd9\x88(\'\x10\x07\xa6!\x17D\xb6\x0c`\xd4\xdf\x806T\x8f\
-\xf0\x92\xe0%P9uy\xe7o\xbc\xeb\x07\x91\xc3\x01\x84\x14PJCW\x12\x7f\xa9\x9cS~\
-\xe4\x13p\xac\t6\xc4a86\xbbD\xf5S\xd0\x19\x81L3\x00"PF\xde\x18%\x12\xbf\x91\
-\xec\xdew\xb0o(`\xa7\xd3\x94\x8f\xbb\xd4\xdfr7\x0c\xe7\xe1@\x00\xfc\xf9\x9f\
-\xbb\xfa\xe03\x8f\xcf\xbb\xe4J\xc3h\x15$:\xc6)\x9c^\x82D\xc3\xcfO2\xbd\x7f+H\
-\x85\xb9\xd6G\xcf\xba\x0c~{\x88\xc2\x99\x9b\xa8\xb9\xaf\x91\xe2Q\x1bsU\x1eU\
-\xdaD\xf6l\x06/;\x85\x13z\x14\xfb]\x97\xd02\x8b\x99\xce~\xa6\xf7t\x10lh\xc0\
-\x9f\x9aB\x84\x80\xf2\xcdd\xf6\x8c\xe0<<BI\xfd\x01\xf6\x1e\x17\xbdI\xc7\xb8J\
-\xc3>R\xc6K\x17I,\x1f\x9d\x8dAh \nd\xfeY\xe0\xf6\x0b\xdc\xc1\x1a\xb4\x86\x06\
-\x92\x7f_\xc2\xcb\xac\xa7\xd0\x95\xa3<1\x8c\x13x\x88\xe2~\x9b\xf0\xb2\x003\
-\xfbz\x98\xde\xd3A\xe8\xaa\x14~!\x8d\x90\xfee\x9d\xa5}6\xc6\x12\x9f\xc4\xb5\
-\xe3\xe4O\xb4#\x90\xf8\xf912\xaf\xae\xa3\xea\xc9\xc2\x9c\xf2s\xc7\xb3L\xee\
-\xf82\xf1\xeb\x86(t5\xcdn\xf3\xe6\x87\x99\xf8\xc1\x1d\x94\xbb\xcb\x17\xfb8\
-\xd4\x17 \xb6\xf6A\x06\x9f\x9d\xe1\xd4\x9f\xedD\x15]\xac\x86;\xb0\x16o$\xf3\
-\xed!\x8a\xbf\xfc\xc3\x05\x19k\xfd\xe55\x1b\x17Dt%Q]?\xc3\xdd\xec\xe5B\xaa\
-\x1a\xa7(\xa9\x1d\x1c\x84{-\xf2\x93\x90\x1dv\xe8\xfe\x96M&\x97\xe2\x9a?\xae\
-\xc7X^\xe6\x8d\x1d\xcd\\\x17\xeb\'\xfaX;G\xff\xf1,\xc3O\xef\xa5\xed\xf6E\xc8\
-\xd5AJ\'\xf3\x9cy=C\xb1\xb5\x9d\xba\xcdq\xbaz\x1d\x12\xa9,\xe1G\xda8\xf2O>c\
-\xdf\xeb\xa4\xed\xb6z\xd4\x1dQt\x0bt\xc3%\xf9\xb5\x08\x07w\xb5r\xab\xdc\xc5\
-\x85T\x12\xa4F;\x83\xbc\x1e\xb9\x87\x89d\x12\x92 5\xc5W\xfa\x0e\xa2\xdf\xd7\
-\xca\xd1\xef\xf7Q\xf8\xc1A\x1a\xd7\xd7\xe2o4\x19x\xdf\x99kj#Yg\xd1\xea\xf6\
-\x91\x9d2.\xeb|+\xba\x1a\x81\xcd\xdd\xe2\x15zj\xaaQ\xd2\xa0U\xa4\xf9er\rkz{\
-\xe7\x96\xdf\x80\xcb\x99\xa5\xcb\xb8K\x1d\xa2/\x19CH\xc9\xd5\xaa\x9f\xdd\xd7\
-\xacg"\x1e\xbe\xd8\xc7\xb1\x19\xc1\xb6f\x97\xc9[\xd73rr\x08B:k\x1f\xdc\xcct\
-\xae\x8a\x97\x9d8\xf6\x9a\x85\xf9\x13\xba~\xc6/,\x88\xe8J\xa2\xd1\x9f\xc6\
-\xb6{\x19wJL\x8c\xe9\xf4\x7f3\r\x9a\x8e\xed\x18(\xa1\x81\x90,Y\xe1\xd2\xf1\
-\xfby\x0e\x1fk\xe3\xcd\x9e\x10\xa3z\x98\xc7\xee\x1fe\xf1V\x83\xa3?\xcfq\xfa\
-\xd9\xf3(\xa9\xe1\x0b\x83pB\xb2\xe2.\x89Y3\xc2\xab;V\xd0X\xeb\xf3\xe0\xb61\
-\xea\xbe\xa4qf\x7f\x9e\xd3\xcf\xf5^l[\xdd$\xb9\xe7o\x0c\xc6\xb5 v\xe9\x1c\
-\xe3\xe50VT\xe2\xd8\xa3\x9c/\xe7\x18\xf1\xdf?X\xf3\xc1\xedL\xf0\xf0\xb6\x1c\
-\xe1U\x92#\xfb\xc69\xf8v\x06%5\xa2\xb5\x06\x8b\xae\x91\x0c\x95$\xc1H\x1e\xbb\
-x\x9e\xb7\x8f\xae\xe2\xf76\x7f\xb2sHo\xc2q|J\x85n\x86\xedj\x821\x87\xb2=\xce\
-\xd9R\x9e\xe9cs\xcb\xef\xb5\x1d+\x90r\x1a\xa7t\x96I\xa7\x80UeP\xb6\xcfq\xbe|\
-5#\xfe\x87\x0e+\xc7\xa0\xe9\xf4\x0cu\x9b\x9b8yj\x90P\xc2\xa4ac\x84\xcew&9\
-\x96\x0b.\xd8X\xeb\x03\x03\x95\x83\xc2OK>\x9b\xa7\x94\xef\xa6\xfd\x06A\xb93\
-\x84\xed\x18\xf8B\'\x92\x90\xd46;\xb4,\xb7i^^b_g\x1b/\xbc\xdcD\xb1\x94&=\xa8\
-\x90^\x90{\xb7\x1e\xa1\xba\xd5\xe0\xdc\xe1 \xc5\x9c\x86\x15\x15\\\xff\xe5,\
-\xe1jx\xee?\xef\xe2xW\x16C\xd7P\xb6\xce\xfd\x8fvq\xd5M\x1a\xc7\xf7F\x98\x1a\
-\xb7\x88\xd5+V})KOo\x8a\x83G\x96\xf1\x95\xb5\xdd,Y\x1d\xa1\xaa\xd6\'=`q\xe2\
-\xd4\x0c\xb6S\xba\x18g:\xad\xa8\x8e\xc0\xd6\'\xcer\xe1x\x80\x93o\x87\xd0L\
-\xc1\xba\xadY\x9a\xaf\xcas`W\x92h\xd2\xe3\xfc\xb9*v\xbc\xba\x91\xec\xe4e\x9c\
-\x87s\xc4\xaa\xb2\x14\x0b=\xb4\xac\x9c\xa4\xa1\xadH\xf7\xf9(\xef\x9e\xc8#`\
-\xce\xf9\xd5\xa62\xd8\x85#4\xaf\xd3\x89\xd5\xf9\x0c\xf4\x8fs\xe2\xe4$\xb6\
-\x93\xbd\xa4\x9f\xf7\x1ft\xb9\x7f\x8bC\xde)\xd1\xd4\x9e@\xc8q^\xdf]b`@.\xd8X\
-\x8b\x8d\x1b_\xab\\\x98\xfa\x94\x08\x01\xdb6wq\xeb\xba\x1eR\xc9"B\xceva6k\
-\x92\x99\xb1\x18\x9d\x8c\xf0\x8b_/\xe3\xfc\x85j\xca\xae\xbc\xe4\xb9\xe5\xed\
-\xd3lZ1DK\xe3\x0c\xcaS\xf8ht\xf5$8x\xb2\x8e\x9e\xfe\xc8\xc5\xb6R*V^=\xc9\xe6\
-\xb5\x83\xa4\xe2\x05\xcae\x89\x92:\xef\xbeW\xcd\xee\xceFry\x83;o\x1dbc\xc7$e\
-_\xe3\x957\x1b9z\xba\xea#\xb1\x06,\x8f\x9b\xd7\x8fr\xc3\xca!\xa4\xef"5\x18\
-\xc9D8w\xa1\x8aM+\x86\x00\xc1+o.\xe5\xe8\xe9\xea\xcb:\xb39\x03!\xe0\xce[G\
-\xd8\xd01\x81\xeb\xcbK\xbcs\xcdo\xf6\x1d\xbdl\xea\x18\xa2\xeck\xbc\xfcf\x1bG\
-O_z\xef\xc2\xd0\xe1\xef\xbe\x9e\xa3\xdc?\xc4k\xdf\xed\xe5k\xff\xd2A\xcfX\x94\
-o>\x1da!\xaf\xf8\x89E\x8b\xbeW)\x90\xff\'B@(\xf8A\xf7\xb9.\xd8Ne\xdb\xfc\xb3\
-`\xc3\x9a2\xdf\x7fz\x8ag\xfez\x00\xd7\x13\xfc\xe5\xbf.\xe2\x89\xaf\xc7yk\xff\
-\xc2\\%\xf8\r\xfa\xe0\xe0\xe0\x82\n+T\x98\x0b\xd7m\x9f`j(\xc3\x89\xc3y\x1ey*\
-@\xd7)\x9b\xd7v.b&\xbbp\xcb+\x98\xdd\xc5\xafP\xe1\x0bG8h\x13\x8d\xe6\xb9\xef\
-Oa\xf3\x9d6\xcf\xbf\x18Z\xf0\xe2\x00\xd0\x17\xdcX\xa1\xc2\x1cx\xf6?\x1a\t\
-\x9auT\xc7|\x9e~N\xf2\xd2O\xe7\xe7v\xe4\xe5\x10\xf0\x8d\xcao\x90\n\x15>\x86\
-\xca\x12\xabB\x85O\xa0R \x15*|\x02\xff\x0b2\x9a\x96s\xa7\x89\xfa\x81\x00\x00\
-\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory012Bitmap():
- return wxBitmapFromImage(getDocFactory012Image())
-
-def getDocFactory012Image():
- stream = cStringIO.StringIO(getDocFactory012Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory012')
-catalog['DocFactory012'] = ImageClass()
-catalog['DocFactory012'].getData = getDocFactory012Data
-catalog['DocFactory012'].getImage = getDocFactory012Image
-catalog['DocFactory012'].getBitmap = getDocFactory012Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory013Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r]\
-IDATx\x9c\xed\x9bil\\\xc7}\xc0\x7f3\xef\xda\x93{pyJ$%\x92\xb2-\x9b\x92\xac[>\
-\x95\xc8N\\\xc9G}\xa9>Z\xbb(Z\x04Em\xb4p\xdb\x0f\xf9\x18\x14A\x81\xa2\x87\
-\xd1 \xb0\x9d\xa3F\xd1\xc2u\xeaFI\xec8F$;\x91%[Q\xa8\xcb\xb2N\xca\x92H\x8a\
-\xc7\xf2&\x97\xdc\xf3\xbd}\xefM?\xd0\x95\xad\xf8\x10\x0b\xc8\x94%\xec\xef\
-\xe3b\xde\xfb\xfd\xff3\xf3\xc7\xce\xce\xec\x88\x7f\xf8\x8eRT\xa8P\xe1S\xd1C\
-\xd5\x97;\x84\n\x15\xbe\xbc\xe8\xc1J\x81T\xa8\xf0\x99\xe8\xe1\xc4\xe5\x0e\
-\xe1\xcaB\xa00\xb0\x91x\x17|\xeeb\xe0b\xce_\x0c\xc2F\xfb\x9d\x18\x14PV\x01<\
-\xb4/\xc4+\xf11E\t\x1fIYY(\xc4\x17\xe2\xf92\xa1\x87\xe2\x97;\x84+\x07\x81OCa\
-\x17Q\xf7\x1c\xfe\xc7\xe6\xa6\x94 M\x9d\xbc\x1b\'\x17lgF_\x84K\xe0\x0b\x8a\
-\xc1\xa3\xc9~\x8b*\xaf\xe7\x82\x18\x00tKak5tk[(\x13\xba\xa4^\r\x87\xc5\xee/\
-\x08\x94G\xd0\x0c\xc1\x98\\FZ\xde|I\x1d_F\xf4p\xa5@\xe6\x8c\xc5(M\xfas\x9c~\
-\xbd\x96\xe9\xc1\x08 @J\xa4\xae\x08\xd7\x14\x89\xd4\x17i[>\x89c-\xa2/\xf8\
-\xb78\xd4]\xf2\x18\x82\x0c\xd3T|\x99\x93?\x8b3\x9d\x0e\x80\x10 $\x00\xb1F\
-\x9be\x0f\xbeC\xd1\xa8g\x82[/\xa97\xc40\r\xf6O8\xf6\x93\x14\xb1\x85%Z\xd6\
-\x1c\xa2\x10\xbc\x9e2W\xf7\x04\xd2#Ww~\x97\x94\x90\x12$\xb4U\x08\xbf\x88\xd4\
-\x14\xc1\xb8\xc0\x08\x08\x14\x82R>\xc8\xe8II~\xb4\x99\xe5\xf7HL\xe3\xb7\xf4\
-\x87\xef\xbb`\x19"|\x0f\xe1\x96\x11\xbe\x87\x92\x1aJ7P\xf2\xd3\x97C\xc2u\x90\
-n\x19\xe0\x82\xb6!\xa5\x13\x16\xd7\xa2\xdc\x02R\xe3|\x0c H-6\t\x85:0\x83MD\
-\xe4\'\xdf\xe3\xeb&J\xd3\x91N\x11\x84\xc47\xac\xd9\x02\xbb\x88S\xa0\x88\xfbE\
-\xc2\xf9\xa5HJd\xd31\xae\x8bZ\xd4\x85\xc6\xc9\xc8\x8f&\xd0\x9c\xf2S\xea#\xbf\
-\x19\x98uze|\xdd\x9au\x95\xed\xd9ff\xe0\x93\xcf\x00\xbe\x19\xbc \xe6/\x1a\
-\xbd\xca\x1c\x987\xd9\x95\x8e\xa5\x1c0\xd6a\xe8\xef\x10K\xb9\xdc\xf8G\xb7\
-\xa0\x85\x82\xa0|\xcay\x9b\x81C=\x8c\x1cOsn\x7f\x8a\xeb\xee\x8a\xe2\x18g(\
-\x88 By\x98\x99n\xccL7^\xa1\x84@\xcd~\xf9\x04\x02\xd8\xa9\xa58U\xcd\xf0a!\t\
-\xbf\x8c5\xd3\x831y\x16e;\x80\x9a\xfd\x820\x02\x14koD\x0bW#\x03\xb7`Y;\xd1R.\
-7>\xb1\x11#\x12\x04\xc0.+&\x8d\x082 \x89\xf9=\x98Sg\xb0f\xbaQ\xb6\x8bR\n\xcc\
- ^\xb0\x1a\xb3\x98F)p\xe2\xad\x94R\x1d\x17u\x86\x85N\xb57Cnj\x19\xb8\x9d\x08\
-\rJ\x85\x95,\xb2F\x192\xa0$\x8d\xb9\xe5\xa7|\x02\xe9\x03\x18\xb94\xd2\x90\
-\xb8\xe1\x06\xb4\xc2\x18\xbe]F\x98\x16\x8e^\x8b\xcc\x8e#\xa4\xc0^\xb8\x02/Z\
-\x0b\x80\x91>\x8115\x00BQ\x8e7Sn\\:oc\xaeG89o\xb2+\x1dC\xe8\x08\xb3\n]\xe6\
-\xd0\x83\x02#\x96"c\x15\xf0\x00+\x14\xa6\xed\x8e\xb5x\xb9\xed\xe4\x86\xbb)d\
-\xae!a\x8d\xa0\x9b3D\xb2\xa7\xd1\xcb\x19\x86NL2~$\x8b\xe7\xfa\xe8A\x9d\xc6\r\
-\t\x1abC\x14\x8b\x0b(\x04\x17"\x95G$w\n\x95\x9d\xa6\xff\x9dar\x836B\x033bP}C\
-\x94\xda\xd0\x08vh=\xc2H\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18%\
-\xa2\x86\x88\xe6\xba\xa04\xcd\xf0\xa1q2\xddy\x00\x1a7$\x897\x87\x18=:\x8d\
-\x1e\xd6\xa9Y\x95!\xe7;\x84r\xdd\x9f\xe9\xac\x0bO`Vmbx\xdf)\x06\xf7\xecC\xf9\
-\x1eJ\nNm\xfb%K\x1fy\x80\x84\xd6\x0f\xce\x919\xe5\xa7\xab\x12\xb1\xc0q\xba\
-\x7f\x95&Tk\x91\xbc~\x98\x89\xae,\xe3\xc7fX\xf2`\x92\x90\xf7S\xfa~\x13&\xde\
-\xee\x90\xa8z\x1b;\xb2\x15\xe9e\t\xb8/\x93>\x1c\xc4\xac\xf2\x88w\x08\x1c\xf5\
-\'(a\xcc\xcb\x98\xeba\xf6\xcc\x8b\xe8j@#\x89\xe0Nt&\x11B T\x08\x93\xdf\xe01\
-\x89\xd2$\x9ew\x1b\x0bVw\xd0\xb3\xfd\xdf\xb1\xc7\x86\x88\xa5b$\xca#\x88B\x03\
-\xa7\x7f\xbc\x9f\xc2\xd8(\x81x\x0ci\x9a8\xf9)\x86w\xa7)\xa6\xdbh\xf9\xfar\
-\x0c\xf3\x04\xba\x93D\xb3[\xe8\xfa\xd9\x8f)\x8e\x8dbF#\x18\xe10\x08\x87|\x8f\
-K\xe3\xcaMh\xfe\x00\x82\x16t&\xf0\xec"\xf6\xc44F\xd0\xc2\x14\x1aZ FI\xdf\x07\
-^\x8e\x80\xdb\xc6\xa9W_!?<L \x11GZ\x16\xe3\x07\xce1\xba\xd7\xc6w\xcb\x84\xea\
-\xeb\tn\xb8\x13\xdd\xce ?\xcf\xb9\xeaN\x94\x82`U\x84\xaaZI~\xa4\x0f!%\xe1\
-\xf8"\xf4@\x0cC\xa5\xf1\xe7\x94\xdfq\x94\xf40\x8d\xd5\xf8\xd3]\x8c\x9e\x1dc\
-\xea\xfd\x10\xc1\xea$\x0b\xd7\xb6RU\xb3\x14\x9c0\x86\x7f\x94\xfc\x07\x1a\x0b\
-W\xb4P\xf0\x0e K>\xba\xd6Ay\xf4(\xf1\x9a:\xe2U\r\xe4\xd9\xc7|\x9dn\xeb!v\xcd\
-\x93\xea\xcaG\xb0\x08\xc1\xbd\xe8b\x1c!A\x88 \x01\xdeC\xd1\x0b\x80\xd4l\x82\
-\xd5\x0f\x10\xb0\x86\xb0\xc7\x0f\xa2\xb1\x12Ct\xd0\xb7\xe7E\xcac\x07Yx\xebV\
-\xean\xde\x02\xaa\x8c[,2\xb0\xe3\xdf(\xf4\xee\xa4\x90^N\xa4}\x01\xf85\x0c\
-\xec\xfe\x1f\xdc\x89\xf7i\xb9\xe31\x12\x1d\xeb\x90\x01\x1fM\x8b\xe39E\x94>\
-\x89\xa9w"\xdcM\xe8b\x0c7{\x86\xb3\xff\xf5\x0c\xd2\x94\x08M\xd2\xb8\xf1i\xa2\
-K\x96\xa0\xbc,\x99S]8\xa3\x87Xx\xdbC\xd4\xdd\xbc\x05\xa1\xfb\xf86\x0c\xbe\
-\xf5"\xd3\xa7\xf7b\xe8\x1a\xc2\xacGw\xa3\x0c\xec~\xf9s\x9d\xca\xdaA\xec\xda\
-\xbb\x88\xb5=\xcd\x99\x97\x9eA\xe8\x1e\xed\xf7?\x85\xb0&\x91Z\x1d}{~~\xf1\
-\xfc\xda\xeaQ\xd6v\x84\xb9\t]Na\xca!Z6\xff\x05\xb1\xf6\x15\xf8\xa2\x17\x15x\
-\x0frK\xa8_c\xd2\xf7\xc6\x7fS\x9a\xfe:\xc1`\x11\xe5%\x99\xea\xe9Bg\x88\xd4\
-\xb2G \xd4OP\xbc\t\xf3T"z`\xf4\xea\xdf\xcb\xbed\xe8\x1a^ \x82fK\xa4\x14\xe0G\
-\xb0&5pg\xfbPYq\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1{\xfb\x08\x05\x1b\xa9[\xf7\
-(Zy;\xd2\xdb\x8f4\x1f\xa2n\xf5\xc3\x0ct\x9f\xa0\xd4\xd3Cl\xf1\xe3x\x9e\xc0\
-\xee>K(PG\xcd\xaa\x87\x90\xeeO\x91\x85= \x13hB\x07g\nJI<\x13\xb4\x12\xe8E\
-\xb0B\tt+\x8a44\xac`\n\xcduQ\xb2\x95L\xe7\xf7\x08\x05\xea\xa9[\xbb\x15\xdd\
-\xf9\x05\xa2t\x04\xdfz\x92\x9a\xe5\xf7Q<\xb1\x1f\xdd\xd1\x11*\x01^\xe0\xe2\
-\xce\xdc\x0c\xe8\x19<\xeb[\x98*\x82T\x02M\xafB\xb3_\xc13\x9e\x9cS~U-[\xd1\n\
-\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xba\t\xdd\xf9>8G \xeb\xa1\xf4\x12UK6\
-\x13\xb0\xded\xb2\xf3\x00M[\xff\x1c\xcf\xcf\x93=\xfc\x12\x89\xa6\x95\x98\xc9\
-\xc5\xc8\xfc\x0e\xc8\x02\xf3t\x06\xa3\xb3s\xf1\xbc\x88\xae\nb\xb5\xb0~\x041\
-\x1c\x04\t\xd8#\xb0\xaf\x16\xa6\x15\x18\x16j\xdd:J}\xef\xa1N\x86\xb0\xda[\
-\x91\xd3\x13x"\x85wZ\xa0\xc7\x1a\xa1\x10@\x1e\x18\x84B\x10\xad1\x8d\xd5p\x1b\
-\xdap#\x8c\xc5P\x85\x04\xaaX\xc4\xfd\x00\x8cD=\xfe\x8c\x81~h\x02\n\x1f\xdf*\
-\xae\x86X\r\xacI#\x86\x03XN;\xad[\xff\n-\x1a\x01\xdf\xc7\x1f\x1fD\x1e9\x83\
-\xd3\xbc\x00\xe7x\t#\xd9\x88(\'\x10\xfb\xa6!\x17D\xb6\x0c`\xd4\xdf\x846T\x8f\
-\xf0\x92\xe0%P9uq\xe7\xffy\xd7\x0e"\x87\x03\x08)\xa0\x94\x86\xae$\xfeb9\xa7\
-\xfc\xc8\'\xe0H\x13\xac\x8b\xc3plv\x89\xea\xa7\xa03\x02\x99f\x00D\xa0\x8c\
-\xbc9J$~3\xd9\xdd\xefa\xdfT\xc0N\xa7)\x1fu\xa9\xbf\xed^\x18\xce\xc3\xbe\x00\
-\xf8\xf37g\xf5\xc1\xe7\x9e\x9c7\xd9\x95\x8e\xd1*Ht\x8cS8\xb9\x08\x89\x86\x9f\
-\x9fdz\xeff\x90\ns\xb5\x8f\x9eu\x19\xfc\xee\x10\x85S\xb7P\xf3@#\xc5\xc36\xe6\
-\x8a<\xaa\xb4\x81\xec\xe9\x0c^v\n\'\xf48\xf6\xfb.\xa1%\x163\x9d\xfdL\xef\xea\
- \xd8\xd0\x80?5\x85\x08\x01\xe5[\xc9\xec\x1a\xc1yt\x84\x92\xfa\x03\xec].z\
-\x93\x8eq\x8d\x86}\xa8\x8c\x97.\x92X::\x1b\x83\xd0@\x14\xc8\xfc\xb3\xc0\xed\
-\x17\xb8\x835h\r\r$\xff\xbe\x84\x97YK\xa1+Gyb\x18\'\xf0\x08\xc5\xbd6\xe1%\
-\x01f\xf6\xf40\xbd\xab\x83\xd05)\xfcB\x1a!\xfd\x8b:K{l\x8cE>\x89\xeb\xc7\xc9\
-\x1fkG \xf1\xf3cd^_C\xd5\xd3\x859\xe5\xe7\x8eg\x99\xdc\xf6U\xe27\x0cQ\xe8j\
-\x9a\xdd\xe6\xcd\x0f3\xf1\xa3\xbb(w\x97\xcf\xf7q\xa8/@l\xf5\xc3\x0c>?\xc3\
-\x89?\xdb\x8e*\xbaX\rwa-\\O\xe6\xbbC\x14\x7f\xfd\x87\xf3:\xe6\xfa\xab\xab\
-\xd6\xcf\xab\xf0J\xa6\xba~\x86{\xd9\xcd\xb9T5NQR;8\x08\xf7[\xe4\'!;\xec\xd0\
-\xfd\x1d\x9bL.\xc5u\x7f\\\x8f\xb1\xb4\xcc[\xdb\x9a\xb9!\xd6O\xf4\x89v\x0e\
-\xff\xe3i\x86\x9f\xddM\xdb\x9d\x0b\x90+\x83\x94\x8e\xe79\xf5f\x86bk;u\x1b\
-\xe3t\xf5:$RY\xc2\x8f\xb5q\xe8\x9f|\xc6~\xd0I\xdb\x1d\xf5\xa8\xbb\xa2\xe8\
-\x16\xe8\x86K\xf2\x1b\x11\xf6\xefh\xe5v\xb9\x83s\xa9$H\x8dv\x06y3r\x1f\x13\
-\xc9$$Aj\x8a\xaf\xf5\xedG\x7f\xa0\x95\xc3?\xec\xa3\xf0\xa3\xfd4\xae\xad\xc5_\
-o2\xf0\xa13\xd7\xd4F\xb2\xce\xa2\xd5\xed#;e\\\xd4\xf9Nt%\x02\x9b{\xc5k\xf4\
-\xd4T\xa3\xa4A\xabH\xf3\xeb\xe4*V\xf5\xf6\xce-\xbf\x01\x97S\x8b\x97p\x8f:@_2\
-\x86\x90\x92kU?;\xaf[\xcbD<|\xbe\x8fc3\x82-\xcd.\x93\xb7\xafe\xe4\xf8\x10\
-\x84tV?\xbc\x91\xe9\\\x15\xaf:q\xecU\xf3\xfb\xe7s\xfd\x94_\x98W\xe1\x95L\xa3\
-?\x8dm\xf72\xee\x94\x98\x18\xd3\xe9\xffv\x1a4\x1d\xdb1PB\x03!Y\xb4\xcc\xa5\
-\xe3\xf7\xf3\x1c<\xd2\xc6\xdb=!F\xf50O<8\xca\xc2\xcd\x06\x87\x7f\x99\xe3\xe4\
-\xf3gQR\xc3\x17\x06\xe1\x84d\xd9=\x12\xb3f\x84\xd7\xb7-\xa3\xb1\xd6\xe7\xe1-\
-c\xd4}E\xe3\xd4\xde<\'_\xe8=\xdf\xb6\xbaIr\xdf\xdf\x18\x8ckA\xec\xd2\x19\xc6\
-\xcba\xac\xa8\xc4\xb1G9[\xce1\xe2\x7fx\xb0\xe6\x83\xdb\x99\xe0\xd1-9\xc2+$\
-\x87\xf6\x8c\xb3\xff\xdd\x0cJjDk\r\x16\\\'\x19*I\x82\x91<v\xf1,\xef\x1e^\xc1\
-\xefm\xfc|\xe7\x90\xde\x84\xe3\xf8\x94\n\xdd\x0c\xdb\xd5\x04c\x0ee{\x9c\xd3\
-\xa5<\xd3G\xe6\x96\xdf\x1b\xdb\x96!\xe54N\xe94\x93N\x01\xab\xca\xa0l\x9f\xe1\
-l\xf9ZF\xfc\x8f\x1dV\x8eA\xd3\xc9\x19\xea66q\xfc\xc4 \xa1\x84I\xc3\xfa\x08\
-\x9d\xefMr$\x17\x9c\xf71\xd7\x07\x06*\x07\x85s%\x9f\xcdS\xcaw\xd3~\x93\xa0\
-\xdc\x19\xc2v\x0c|\xa1\x13IHj\x9b\x1dZ\x96\xda4/-\xb1\xa7\xb3\x8d\x97^m\xa2X\
-J\x93\x1eTH/\xc8\xfd\x9b\x0fQ\xddjp\xe6`\x90bN\xc3\x8a\nn\xfcj\x96p5\xbc\xf0\
-\x9f\xf7p\xb4+\x8b\xa1k([\xe7\xc1\xc7\xbb\xb8\xe6\x16\x8d\xa3\xbb#L\x8d[\xc4\
-\xea\x15+\xbe\x92\xa5\xa77\xc5\xfeCK\xf8\xda\xean\x16\xad\x8cPU\xeb\x93\x1e\
-\xb08vb\x06\xdb)\x9d\x8f3\x9dVTG`\xf3S\xa79w4\xc0\xf1wCh\xa6`\xcd\xe6,\xcd\
-\xd7\xe4\xd9\xb7#I4\xe9q\xf6L\x15\xdb^_Ov\xf2"\xce\x839bUY\x8a\x85\x1eZ\x96O\
-\xd2\xd0V\xa4\xfbl\x94\xf7\x8f\xe5\x110\xe7\xfcjS\x19\xec\xc2!\x9a\xd7\xe8\
-\xc4\xea|\x06\xfa\xc79v|\x12\xdb\xc9^\xd0\xcf{\xf7\xbb<\xb8\xc9!\xef\x94hjO \
-\xe48o\xee,10 \xe7y\xc4A\xac_\xffF\xe5\xc2\xd4\x1c\x11\x02\xb6l\xec\xe2\xf65\
-=\xa4\x92E\x84\x9c\xed\xbal\xd6$3c1:\x19\xe1W\xbf]\xc2\xd9s\xd5\x94]y\xc1sK\
-\xdb\xa7\xd9\xb0l\x88\x96\xc6\x19\x94\xa7\xf0\xd1\xe8\xeaI\xb0\xffx\x1d=\xfd\
-\x91\xf3m\xa5T,\xbfv\x92\x8d\xab\x07I\xc5\x0b\x94\xcb\x12%u\xde\xff\xa0\x9a\
-\x9d\x9d\x8d\xe4\xf2\x06w\xdf>\xc4\xfa\x8eI\xca\xbe\xc6ko7r\xf8d\xd5\'b\rX\
-\x1e\xb7\xae\x1d\xe5\xa6\xe5CH\xdfEj0\x92\x89p\xe6\\\x15\x1b\x96\r\x01\x82\
-\xd7\xde^\xcc\xe1\x93\xd5\x17ufs\x06B\xc0\xdd\xb7\x8f\xb0\xaec\x02\xd7\x97\
-\x17x\xe7\x9a\xdf\xec;z\xd9\xd01D\xd9\xd7x\xf5\xed6\x0e\x9f\xbc\xf0\xbe\x85\
-\xa1\xc3\xdf}3G\xb9\x7f\x887\xbe\xdf\xcb7\xfe\xa5\x83\x9e\xb1(\xdf~6\xc2\xe5\
-\xb8\xda\'\x16,\xf8A\xa5@\xfe\x9f\x08\x01\xa1\xe0G\xdd\xe6\xba`;\x95\xed\xf2\
-K\xc1\xbaUe~\xf8\xec\x14\xcf\xfd\xf5\x00\xae\'\xf8\xcb\x7f]\xc0S\xdf\x8c\xf3\
-\xce\xde\xf9\xb9J\xf0\xbb\xe8\x83\x83\x83\x97E\\\xa1\xc2\xa7q\xc3\xd6\t\xa6\
-\x862\x1c;\x98\xe7\xb1g\x02t\x9d\xb0yc\xfb\x02f\xb2\xf3\xbf\xbc\x82\xd9\xdd\
-\xfc\n\x15\xbe4\x84\x836\xd1h\x9e\x07\xfe\x146\xdem\xf3\xe2\xcb\xa1\xcbV\x1c\
-\x00\xfae3W\xa8\xf0)<\xff\x1f\x8d\x04\xcd:\xaac>\xcf\xbe y\xe5\xe7_\xcc\xed\
-\xc8\xb9"\xe0[\x95\xdf \x15*|\x06\x95%V\x85\n\x9fC\xa5@*T\xf8\x1c\xfe\x17\
-\x17.\x96sS\xb0\xcaT\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory013Bitmap():
- return wxBitmapFromImage(getDocFactory013Image())
-
-def getDocFactory013Image():
- stream = cStringIO.StringIO(getDocFactory013Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory013')
-catalog['DocFactory013'] = ImageClass()
-catalog['DocFactory013'].getData = getDocFactory013Data
-catalog['DocFactory013'].getImage = getDocFactory013Image
-catalog['DocFactory013'].getBitmap = getDocFactory013Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory014Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r`\
-IDATx\x9c\xed\x9bip]\xd5}\xc0\x7f\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\
-\xb6\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em?\xe4c\xa6\x93\xe9L\
-\xa7\x0b\xd3L\x06\xd2$e:\xedPR\x1a\'\x81\x10&6$\xc6\x06\xc7\x917\x8cW\x19\
-\xdb\x92\xac\xe5i\x97\x9e\xf4\xd6{\xdf\xbd\xf7\xf4\x83(\xe0\x12\x90\xda\x82\
-\x84\x87\xf7\xfb\xf8\xe6\xdc\xf7\xfb\xff\xcf9\xff\xb9\xe7\x9d\xf3\x8e\xf8\
-\x9bo)E\x85\n\x15~#z\xa8z\xb1C\xa8P\xe1\xf3\x8b\x1e\xac\x14H\x85\n\x1f\x8b\
-\x1eN,v\x08W\x06\x02\x85\x81\x8d\xc4\xbb\xecs\x17\x03\x17s\xe1b\x106\xda\xff\
-\x88A\x01e\x15\xc0C\xfbL\xbc\x12\x1fS\x94\xf0\x91\x94\x95\x85B|&\x9e\xcf#z(\
-\xbe\xd8!|\xfe\x11\xf84\x14\xf6\x11u/\xe1\x7fhnJ\t\xd2\xd4\xc9\xbbqr\xc1vf\
-\xf4e\xb8\x04>\xa3\x18<\x9a\xec\xd7\xa9\xf2z.\x8b\x01@\xb7\x14\xb6VC\xb7\xb6\
-\x832\xa1O\xd5\xab\xe1\xb0\xdc\xfd\x19\x81\xf2\x08\x9a!\x18\x93\xabH\xcb\x1b\
-?U\xc7\xe7\x19=\\)\x909\xb1\x18\xa5I\x7f\x86\xf3\xaf\xd42=\x18\x01\x04H\x89\
-\xd4\x15\xe1\x9a"\x91\xfa"m\xab\'q\xace\xf4\x05\xff\x12\x87\xbaO=\x86 \xc34\
-\x15_\xe0\xecO\xe2L\xa7\x03 \x04\x08\t@\xac\xd1f\xd5\xfdoR4\xea\x99\xe0\xe6O\
-\xd5\x1bb\x98\x06\xfbG\x9c\xfaQ\x8a\xd8\xd2\x12-\x1b\x8eQ\x08^K\x99/\xc6\xc4\
-\xd1#_\x8c<\xff_\x84\x94 \xa1\xadC\xf8E\xa4\xa6\x08\xc6\x05F@\xa0\x10\x94\
-\xf2AF\xcfJ\xf2\xa3\xcd\xac\xbeKb\x1a\xbf\xa6?|\xcfe\xcb\x10\xe1{\x08\xb7\
-\x8c\xf0=\x94\xd4P\xba\x81\x92\xbfy9$\\\x07\xe9\x96\x01.k\x1bR:aq5\xca- 5\
-\xde\x8f\x01\x04\xa9\xe5&\xa1P\x07f\xb0\x89\x88\xfc\xe8\xf7\xf8\xba\x89\xd2t\
-\xa4S\x04!\xf1\rk\xb6\xc0\xe6p\n\x14q\xbfH8\xbf\x12I\x89l:\xc65Q\x8b\xba\xd0\
-8\x19\xf9\xc1\xc4\x99W~J}\xe07\x03\xb3N\xaf\x8c\xaf[\xb3\xae\xb2=\xdb\xcc\
-\x0c|\xf4\x19\xc07\x83\x97\xc5\xbcP\xe8U\xe6\xc0\x82K\xaf4,\xe5\x80\xb1\tC\
-\x7f\x93X\xca\xe5\xfa\xdf\xbb\t-\x14\x04\xe5S\xce\xdb\x0c\x1c\xeba\xe4t\x9aK\
-\x87S\\sG\x14\xc7\xb8@A\x04\x11\xca\xc3\xcctcf\xba\xf1\n%\x04j\xf6\xe5\x13\
-\x08`\xa7V\xe2T5\xc3{\x85$\xfc2\xd6L\x0f\xc6\xe4E\x94\xed\x00j\xf6\x05a\x04(\
-\xd6^\x8f\x16\xaeF\x06n\xc2\xb2\xf6\xa2\xa5\\\xae\x7fl+F$\x08\x80]VL\x1a\x11\
-d@\x12\xf3{0\xa7.`\xcdt\xa3l\x17\xa5\x14\x98A\xbc`5f1\x8dR\xe0\xc4[)\xa5:\
-\xe6t\x86\x85N\xb57Cnj\x15\xb8\x9d\x08\rJ\x85\xb5,\xb3F\x192\xa0$\x8d\xf9\
-\xe5\xa7|\x02\xe9#\x18\xb94\xd2\x90\xb8\xe1\x06\xb4\xc2\x18\xbe]F\x98\x16\
-\x8e^\x8b\xcc\x8e#\xa4\xc0^\xba\x06/Z\x0b\x80\x91>\x8315\x00BQ\x8e7Sn\\\xb9\
-\xe0c\xafG8\xbb\xe0\xd2+\rC\xe8\x08\xb3\n]\xe6\xd0\x83\x02#\x96"c\x15\xf0\
-\x00+\x14\xa6\xed\xb6\x8dx\xb9\xdd\xe4\x86\xbb)d\xae"a\x8d\xa0\x9b3D\xb2\xe7\
-\xd1\xcb\x19\x86\xceL2~"\x8b\xe7\xfa\xe8A\x9d\xc6-\t\x1abC\x14\x8bK(\x04\x97\
-"\x95G$w\x0e\x95\x9d\xa6\xff\xcdar\x836B\x033bP}]\x94\xda\xd0\x08vh3\xc2H\
-\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18%\xa2\x86\x88\xe6\xba\xa04\
-\xcd\xf0\xb1q2\xddy\x00\x1a\xb7$\x897\x87\x18=9\x8d\x1e\xd6\xa9Y\x97!\xe7;\
-\x84r\xdd\x1f\xeb\xac\x0bO`Vmc\xf8\xd09\x06\x0f\x1cB\xf9\x1eJ\n\xce\xed\xfa9\
-+\x1f\xba\x8f\x84\xd6\x0f\xce\x89y\xe5\xa7\xab\x12\xb1\xc0i\xba\x7f\x91&Tk\
-\x91\xbcv\x98\x89\xae,\xe3\xa7fXq\x7f\x92\x90\xf7c\xfa~\x15&\xde\xee\x90\xa8\
-z\x03;\xb2\x13\xe9e\t\xb8/\x90>\x1e\xc4\xac\xf2\x88w\x08\x1c\xf5\x07(a,\xe8\
-\xd8\xeba\x0e,\xa8\xf0JD#\x89\xe0vt&\x11B T\x08\x93_\xe11\x89\xd2$\x9ew\x0bK\
-\xd6w\xd0\xb3\xfb_\xb0\xc7\x86\x88\xa5b$\xca#\x88B\x03\xe7\x7fx\x98\xc2\xd8(\
-\x81x\x0ci\x9a8\xf9)\x86\xf7\xa7)\xa6\xdbh\xf9\xeaj\x0c\xf3\x0c\xba\x93D\xb3\
-[\xe8\xfa\xc9\x0f)\x8e\x8dbF#\x18\xe10\x08\x87|\x8fK\xe3\xdamh\xfe\x00\x82\
-\x16t&\xf0\xec"\xf6\xc44F\xd0\xc2\x14\x1aZ FI?\x04^\x8e\x80\xdb\xc6\xb9\x97^\
-$?<L \x11GZ\x16\xe3G.1z\xd0\xc6w\xcb\x84\xea\xeb\tn\xb9\x1d\xdd\xce ?\xc9\
-\xb9\xeev\x94\x82`U\x84\xaaZI~\xa4\x0f!%\xe1\xf82\xf4@\x0cC\xa5\xf1\xe7\x95\
-\xdfi\x94\xf40\x8d\xf5\xf8\xd3]\x8c^\x1cc\xea\x9d\x10\xc1\xea$K7\xb6RU\xb3\
-\x12\x9c0\x86\x7f\x92\xfc\xbb\x1aK\xd7\xb4P\xf0\x8e K>\xba\xd6Ay\xf4$\xf1\
-\x9a:\xe2U\r\xe49\xc4B\x9fj\xeb!\xf6-\xb0\xf2\xcaC\xb0\x0c\xc1\xdd\xe8b\x1c!\
-A\x88 \x01\xdeF\xd1\x0b\x80\xd4l\x82\xd5\xf7\x11\xb0\x86\xb0\xc7\x8f\xa2\xb1\
-\x16Ct\xd0w\xe09\xcacGYz\xf3N\xean\xdc\x01\xaa\x8c[,2\xb0\xe7\x9f)\xf4\xee\
-\xa5\x90^M\xa4}\t\xf85\x0c\xec\xffO\xdc\x89wh\xb9\xed\x11\x12\x1d\x9b\x90\
-\x01\x1fM\x8b\xe39E\x94>\x89\xa9w"\xdcm\xe8b\x0c7{\x81\x8b\xff\xfe\x14\xd2\
-\x94\x08M\xd2\xb8\xf5I\xa2+V\xa0\xbc,\x99s]8\xa3\xc7Xz\xcb\x03\xd4\xdd\xb8\
-\x03\xa1\xfb\xf86\x0c\xbe\xfe\x1c\xd3\xe7\x0fb\xe8\x1a\xc2\xacGw\xa3\x0c\xec\
-\x7f\xe1\x13\x9d\xca\xdaC\xec\xea;\x88\xb5=\xc9\x85\xe7\x9fB\xe8\x1e\xed\xf7\
->\x81\xb0&\x91Z\x1d}\x07~:w~m\xf5(k7\xc2\xdc\x86.\xa70\xe5\x10-\xdb\xff\x84X\
-\xfb\x1a|\xd1\x8b\n\xbc\r\xb9\x15\xd4o0\xe9{\xf5?(M\x7f\x95`\xb0\x88\xf2\x92\
-L\xf5t\xa13Dj\xd5C\x10\xea\'(^\x83\x05.\x11=0\xfa\xc5\xd9\xd3\xfe?\xa3kx\x81\
-\x08\x9a-\x91R\x80\x1f\xc1\x9a\xd4\xc0\x9d\xed;e\xc5q\xfd0fI`za\x84\x8aA\xd9\
-\xc7\xee\xed#\x14l\xa4n\xd3\xc3h\xe5\xddH\xef0\xd2|\x80\xba\xf5\x0f2\xd0}\
-\x86RO\x0f\xb1\xe5\x8f\xe2y\x02\xbb\xfb"\xa1@\x1d5\xeb\x1e@\xba?F\x16\x0e\
-\x80L\xa0\t\x1d\x9c)(%\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\
-\xd7E\xc9V2\x9d\xffD(PO\xdd\xc6\x9d\xe8\xce\xcf\x10\xa5\x13\xf8\xd6\xe3\xd4\
-\xac\xbe\x87\xe2\x99\xc3\xe8\x8e\x8eP\t\xf0\x02s;s3\xa0g\xf0\xaco`\xaa\x08R\
-\t4\xbd\n\xcd~\x11\xcfx|^\xf9U\xb5\xecD+\xec\xc7\xb3bh\xb6F(\xbc\x94X\xeb6t\
-\xe7\xbb\xe0\x9c\x80\xac\x87\xd2KT\xad\xd8N\xc0z\x8d\xc9\xce#4\xed\xfcc<?O\
-\xf6\xf8\xf3$\x9a\xd6b&\x97#\xf3{ \x0b,\xf0\x19\x8c\xce\xde\xe5\x0b*\xbc"\
-\x89\xd5\xc2\xe6\x11\xc4p\x10$`\x8f\xc0\xa1Z\x98V`X\xa8M\x9b(\xf5\xbd\x8d:\
-\x1b\xc2joENO\xe0\x89\x14\xdey\x81\x1ek\x84B\x00yd\x10\nA\xb4\xc64V\xc3-h\
-\xc3\x8d0\x16C\x15\x12\xa8b\x11\xf7]0\x12\xf5\xf83\x06\xfa\xb1\t(|x\xab\xb8\
-\x1ab5\xb0!\x8d\x18\x0e`9\xed\xb4\xee\xfc3\xb4h\x04|\x1f\x7f|\x10y\xe2\x02N\
-\xf3\x12\x9c\xd3%\x8cd#\xa2\x9c@\x1c\x9a\x86\\\x10\xd92\x80Q\x7f\x03\xdaP=\
-\xc2K\x82\x97@\xe5\xd4\xdc\xce\xff\xf6n\x1cD\x0e\x07\x10R@)\r]I\xfc\xe5r^\
-\xf9\x91O\xc0\x89&\xd8\x14\x87\xe1\xd8\xec\x12\xd5OAg\x042\xcd\x00\x88@\x19y\
-c\x94H\xfcF\xb2\xfb\xdf\xc6\xbe\xa1\x80\x9dNS>\xe9R\x7f\xcb\xdd0\x9c\x87C\
-\x01\xf0\x17~\xae\xea\x83\xcf<\xbe\xe0\xd2+\r\xa3U\x90\xe8\x18\xa7pv\x19\x12\
-\r??\xc9\xf4\xc1\xed \x15\xe6z\x1f=\xeb2\xf8\xed!\n\xe7n\xa2\xe6\xbeF\x8a\
-\xc7m\xcc5yTi\x0b\xd9\xf3\x19\xbc\xec\x14N\xe8Q\xecw\\B+,f:\xfb\x99\xde\xd7A\
-\xb0\xa1\x01\x7fj\n\x11\x02\xca7\x93\xd97\x82\xf3\xf0\x08%\xf5;\xd8\xfb\\\
-\xf4&\x1d\xe3*\r\xfbX\x19/]$\xb1rt6\x06\xa1\x81(\x90\xf9{\x81\xdb/p\x07k\xd0\
-\x1a\x1aH\xfeu\t/\xb3\x91BW\x8e\xf2\xc40N\xe0!\x8a\x07m\xc2+\x02\xcc\x1c\xe8\
-az_\x07\xa1\xabR\xf8\x854B\xfas:K\x07l\x8ce>\x89k\xc7\xc9\x9fjG \xf1\xf3cd^\
-\xd9@\xd5\x93\x85y\xe5\xe7\x8eg\x99\xdc\xf5e\xe2\xd7\rQ\xe8j\x9a\xdd\xe6\xcd\
-\x0f3\xf1\x83;(w\x97\xdf\xef\xe3P_\x80\xd8\xfa\x07\x19|v\x863\x7f\xb4\x1bUt\
-\xb1\x1a\xee\xc0Z\xba\x99\xcc\xb7\x87(\xfe\xf2w\x17e\xec\xf5\x97\xd6m^\x14\
-\xf1\x95Du\xfd\x0cw\xb3\x9fK\xa9j\x9c\xa2\xa4vp\x10\xee\xb5\xc8OBv\xd8\xa1\
-\xfb[6\x99\\\x8ak~\xbf\x1ece\x99\xd7w5s]\xac\x9f\xe8c\xed\x1c\xff\xdb\xf3\
-\x0c?\xbd\x9f\xb6\xdb\x97 \xd7\x06)\x9d\xces\xee\xb5\x0c\xc5\xd6v\xea\xb6\
-\xc6\xe9\xeauH\xa4\xb2\x84\x1fi\xe3\xd8\xdf\xf9\x8c}\xaf\x93\xb6\xdb\xeaQwD\
-\xd1-\xd0\r\x97\xe4\xd7"\x1c\xde\xd3\xca\xadr\x0f\x97RI\x90\x1a\xed\x0c\xf2Z\
-\xe4\x1e&\x92IH\x82\xd4\x14_\xe9;\x8c~_+\xc7\xbf\xdfG\xe1\x07\x87i\xdcX\x8b\
-\xbf\xd9d\xe0=g\xae\xa9\x8dd\x9dE\xab\xdbGv\xca\x98\xd3\xf9ft-\x02\x9b\xbb\
-\xc5\xcb\xf4\xd4T\xa3\xa4A\xabH\xf3\xcb\xe4:\xd6\xf5\xf6\xce/\xbf\x01\x97s\
-\xcbWp\x97:B_2\x86\x90\x92\xabU?{\xaf\xd9\xc8D<\xfc~\x1f\xc7f\x04;\x9a]&o\
-\xdd\xc8\xc8\xe9!\x08\xe9\xac\x7fp+\xd3\xb9*^r\xe2\xd8\xeb\x16\xe7O\xe7\xfa9\
-\xbf\xb0(\xe2+\x89F\x7f\x1a\xdb\xeee\xdc)11\xa6\xd3\xff\xcd4h:\xb6c\xa0\x84\
-\x06B\xb2l\x95K\xc7o\xe79z\xa2\x8d7zB\x8c\xeaa\x1e\xbb\x7f\x94\xa5\xdb\r\x8e\
-\xff<\xc7\xd9g/\xa2\xa4\x86/\x0c\xc2\t\xc9\xaa\xbb$f\xcd\x08\xaf\xecZEc\xad\
-\xcf\x83;\xc6\xa8\xfb\x92\xc6\xb9\x83y\xce~\xa7\xf7\xfd\xb6\xd5M\x92{\xfe\
-\xc2`\\\x0bb\x97.0^\x0ecE%\x8e=\xca\xc5r\x8e\x11\xff\xbd\x835\x1f\xdc\xce\
-\x04\x0f\xef\xc8\x11^#9v`\x9c\xc3oePR#Zk\xb0\xe4\x1a\xc9PI\x12\x8c\xe4\xb1\
-\x8b\x17y\xeb\xf8\x1a~k\xeb\';\x87\xf4&\x1c\xc7\xa7T\xe8f\xd8\xae&\x18s(\xdb\
-\xe3\x9c/\xe5\x99>1\xbf\xfc^\xdd\xb5\n)\xa7qJ\xe7\x99t\nXU\x06e\xfb\x02\x17\
-\xcbW3\xe2\x7f\xe8\xb0r\x0c\x9a\xce\xceP\xb7\xb5\x89\xd3g\x06\t%L\x1a6G\xe8|\
-{\x92\x13\xb9\xe0"\x8d<\xe8\x03\x03\x95\x83\xc2\xb9\xc8g\xf3\x94\xf2\xdd\xb4\
-\xdf (w\x86\xb0\x1d\x03_\xe8D\x12\x92\xdaf\x87\x96\x956\xcd+K\x1c\xe8l\xe3\
-\xf9\x97\x9a(\x96\xd2\xa4\x07\x15\xd2\x0br\xef\xf6cT\xb7\x1a\\8\x1a\xa4\x98\
-\xd3\xb0\xa2\x82\xeb\xbf\x9c%\\\r\xdf\xf9\xb7\xbb8\xd9\x95\xc5\xd05\x94\xads\
-\xff\xa3]\\u\x93\xc6\xc9\xfd\x11\xa6\xc6-b\xf5\x8a5_\xca\xd2\xd3\x9b\xe2\xf0\
-\xb1\x15|e}7\xcb\xd6F\xa8\xaa\xf5I\x0fX\x9c:3\x83\xed\x94\xde\x8f3\x9dVTG`\
-\xfb\x13\xe7\xb9t2\xc0\xe9\xb7Bh\xa6`\xc3\xf6,\xcdW\xe59\xb4\'I4\xe9q\xf1B\
-\x15\xbb^\xd9Lvr\x0e\xe7\xd1\x1c\xb1\xaa,\xc5B\x0f-\xab\'ih+\xd2}1\xca;\xa7\
-\xf2\x08\x98w~\xb5\xa9\x0cv\xe1\x18\xcd\x1btbu>\x03\xfd\xe3\x9c:=\x89\xedd/\
-\xeb\xe7\x83\x87]\xee\xdf\xe6\x90wJ4\xb5\'\x10r\x9c\xd7\xf6\x96\x18\x18\x90\
-\x0b<\xe2\x1f 6o~\xb5raj\x0e\x84\x80\x1d[\xbb\xb8uC\x0f\xa9d\x11!g\xbb,\x9b5\
-\xc9\xccX\x8cNF\xf8\xc5\xafWp\xf1R5eW^\xf6\xdc\xca\xf6i\xb6\xac\x1a\xa2\xa5q\
-\x06\xe5)|4\xbaz\x12\x1c>]GO\x7f\xe4\xfd\xb6R*V_=\xc9\xd6\xf5\x83\xa4\xe2\
-\x05\xcae\x89\x92:\xef\xbc[\xcd\xde\xceFry\x83;o\x1dbs\xc7$e_\xe3\xe57\x1a9~\
-\xb6\xea#\xb1\x06,\x8f\x9b7\x8er\xc3\xea!\xa4\xef"5\x18\xc9D\xb8p\xa9\x8a-\
-\xab\x86\x00\xc1\xcbo,\xe7\xf8\xd9\xea9\x9d\xd9\x9c\x81\x10p\xe7\xad#l\xea\
-\x98\xc0\xf5\xe5e\xde\xf9\xe67\xfb\x1d\xbdl\xe9\x18\xa2\xeck\xbc\xf4F\x1b\
-\xc7\xcf^~\xcf\xc2\xd0\xe1\xaf\xbe\x9e\xa3\xdc?\xc4\xab\xdf\xed\xe5k\xff\xd0\
-A\xcfX\x94o>\x1da1\xaf\xf4\x89%K\xbeW)\x90y"\x04\x84\x82\x1ft\x97\xeb\x82\
-\xedT\xb6\xc9?\r6\xad+\xf3\xfd\xa7\xa7x\xe6\xcf\x07p=\xc1\x9f\xfe\xe3\x12\
-\x9e\xf8z\x9c7\x0f.\xccU\x82\x8fC\x1f\x1c\x1c\\\xd4\x00*T\x00\xb8n\xe7\x04SC\
-\x19N\x1d\xcd\xf3\xc8S\x01\xba\xce\xd8\xbc\xba{\t3\xd9\xc5[^\xc1\xec\xae~\
-\x85\n\x8bN8h\x13\x8d\xe6\xb9\xef\x0fa\xeb\x9d6\xcf\xbd\x10Z\xf4\xe2\x00\xd0\
-\x17;\x80\n\x15\x00\x9e\xfd\xd7F\x82f\x1d\xd51\x9f\xa7\xbf#y\xf1\xa7\x9f\xcd\
-\xed\xc8\xff-\x02\xbeQ\xf9\rR\xa1\xc2\xc7\xb0\xf8\xef\xb0\n\x15>\xc7T\n\xa4B\
-\x85O\xe0\xbf\x00\xfb\xb3\x96s\xe4!\xad\xbd\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory014Bitmap():
- return wxBitmapFromImage(getDocFactory014Image())
-
-def getDocFactory014Image():
- stream = cStringIO.StringIO(getDocFactory014Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory014')
-catalog['DocFactory014'] = ImageClass()
-catalog['DocFactory014'].getData = getDocFactory014Data
-catalog['DocFactory014'].getImage = getDocFactory014Image
-catalog['DocFactory014'].getBitmap = getDocFactory014Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory015Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rb\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda\xe3\xb1g\
-\xc6\x80al\xe3\xdd\xacN\x0c\t\xb5Y\xca\xe6\xb2\xb4PU\xad\xa2\xaa\xa0V\xb4\
-\xfd#\x7fFUT\xa9\xea\x82\x1aE\x90\xad\xa8jEIi\x9c\x04BPlH\x8c\r\x8e3\xde0^\
-\xc7\xd8\x9e\x19\xcf\xf2f\x9fy3o\xbd\xf7\xdd{O\xff\x18\n\xb8\xc4xZ\x01o\x10\
-\xef\xf3\xe7\xd3\xbd\xef\xf3\xfd\x9d{\x8e\xeey\xe7\xbc#\xfe\xee[JQ\xa5J\x95\
-\xdf\x8a\x1e\xaa\xadt\x84*U\x16.z\xb0:@\xaaT\xb9,z8Q\xe9\x08\x0b\x1b\x81\xc2\
-\xc0F\xe2]\xf2\xb9\x8b\x81\x8b\xf9\xd9e\x106\xda\xff\xca\xa0\x80\xb2\n\xe0\
-\xa1}*^\x89\x8f)J\xf8H\xca\xcaB!>\x15\xcfBF\x0f\xc5+\x1da\xe1"\xf0i*\xec%\
-\xea^\xc4\xffP\xdf\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\x1d\xcc\xeaKq\t|J\x19<Z\
-\xec\xd7\xa9\xf1z/\xc9\x00\xa0[\n[\xab\xa3G\xdbN\x99\xd0\'\xea\xd5pX\xe6\xfe\
-\x9c@y\x14\xcd\x10\x8c\xcb\x95\xa4\xe5\x8d\x9f\xa8\xe3\xf3\x80\x1e\xae\x0e\
-\x90\xcbb1F\x8b\xfe\x0c\xe7^\xa9gf(\x02\x08\x90\x12\xa9+\xc2uE"\x8dE\xdaWM\
-\xe1XK\xe9\x0f\xfe5\x0e\r\x9fx\x86 #\xb4\x14_\xe0\xccO\xe3\xcc\xa4\x03 \x04\
-\x08\t@\xac\xd9f\xe5\xfdoR4\x1a\x99\xe4\xe6O\xd4\x1bb\x84&\xfb\xc7\x9c\xfcq\
-\x8a\xd8\xe2\x12\xad\xeb\x8fR\x08^K\x99/V\x87\xd1#_\xacz\xffO\x84\x94 \xa1\
-\xadE\xf8E\xa4\xa6\x08\xc6\x05F@\xa0\x10\x94\xf2A\xc6\xceH\xf2cKXu\x97\xc44~\
-\xc3@\xf8\x9eK\xa6!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%\x7f\xfbtH\xb8\x0e\
-\xd2-\x03\\rmH\xe9\x84\xc5\xd5(\xb7\x80\xd4x?\x03\x08R\xcbLB\xa1N\xcc`\x0b\
-\x11\xf9\xd1\xef\xf1u\x13\xa5\xe9H\xa7\x08B\xe2\x1b\xd6\xdc\x00\xbb\x82S\xa0\
-\x88\xfbE\xc2\xf9\x15HJd\xd31\xae\x89Z4\x84&\xc8\xc8\x0f:\xcc\xbc\xeaS\xea\
-\x03\xbf\x19\x98sze|\xdd\x9as\x95\xed\xb9\xcb\xcc\xc0G\xef\x01|3xI\xe6\xcf\
-\x1a\xbd\xc6\x1c\xac\x98|\xa1c)\x07\x8c\x8d\x18\xfa\x9b\xc4R.\xd7\xff\xc1Mh\
-\xa1 (\x9fr\xdef\xf0h/\xa3\xa7\xd2\\<\x94\xe2\x9a;\xa28\xc6y\n"\x88P\x1ef\
-\xa6\x073\xd3\x83W(!Ps/\x9f@\x00;\xb5\x02\xa7f\t\xbc7\x90\x84_\xc6\x9a\xed\
-\xc5\x98\xba\x80\xb2\x1d@\xcd\xbd \x8c\x00\xc5\xfa\xeb\xd1\xc2\xb5\xc8\xc0MX\
-\xd6\x1e\xb4\x94\xcb\xf5\x8fm\xc1\x88\x04\x01\xb0\xcb\x8a)#\x82\x0cHb~/\xe6\
-\xf4y\xac\xd9\x1e\x94\xed\xa2\x94\x023\x88\x17\xac\xc5,\xa6Q\n\x9cx\x1b\xa5T\
-\xe7\x15\x9da\xa1S\xeb\xcd\x92\x9b^\tn\x17B\x83Ra\rK\xad1\x86\r(Ic~\xf5)\x9f\
-@\xfa0F.\x8d4$n\xb8\t\xad0\x8eo\x97\x11\xa6\x85\xa3\xd7#\xb3\x13\x08)\xb0\
-\x17\xaf\xc6\x8b\xd6\x03`\xa4OcL\x0f\x82P\x94\xe3K(7\xaf\xa8\xc0\xd3\x9fC\
-\x8fp\xa6b\xf2\x85\x8e!t\x84Y\x83.s\xe8A\x81\x11K\x91\xb1\nx\x80\x15\n\xd3~\
-\xdb\x06\xbc\xdc.r#=\x142W\x91\xb0F\xd1\xcdY"\xd9s\xe8\xe5\x0c\xc3\xa7\xa7\
-\x988\x9e\xc5s}\xf4\xa0N\xf3\xe6\x04M\xb1a\x8a\xc5E\x14\x82\x8b\x91\xca#\x92\
-;\x8b\xca\xce0\xf0\xe6\x08\xb9!\x1b\xa1\x81\x191\xa8\xbd.J}h\x14;\xb4\ta\xa4\
-\xd0e\x1e=\x08F4E!P\xc2\xc5\xc3\r\xba8\x8c\x11Q\xc3Ds\xddP\x9aa\xe4\xe8\x04\
-\x99\x9e<\x00\xcd\x9b\x93\xc4\x97\x84\x18;1\x83\x1e\xd6\xa9[\x9b!\xe7;\x84r=\
-\x97u6\x84\'1k\xb62r\xf0,C\xfb\x0f\xa2|\x0f%\x05gw\xfe\x82\x15\x0f\xddGB\x1b\
-\x00\xe7\xf8\xbc\xea\xd3U\x89X\xe0\x14=\xbfL\x13\xaa\xb7H^;\xc2dw\x96\x89\
-\x93\xb3,\xbf?I\xc8\xfb\t\xfd\xbf\x0e\x13\xefpH\xd4\xbc\x81\x1d\xd9\x81\xf4\
-\xb2\x04\xdc\x17H\x1f\x0bb\xd6x\xc4;\x05\x8e\xfa#\x940*\xd2\x07\xf40\xfb+"\
-\xfe<\xa0\x91Dp;:S\x08!\x10*\x84\xc9\xaf\xf1\x98Bi\x12\xcf\xbb\x85E\xeb:\xe9\
-\xdd\xf5\xaf\xd8\xe3\xc3\xc4R1\x12\xe5QD\xa1\x89s?:Da|\x8c@<\x864M\x9c\xfc4#\
-\xfb\xd2\x14\xd3\xed\xb4~u\x15\x86y\x1a\xddI\xa2\xd9\xadt\xff\xf4G\x14\xc7\
-\xc70\xa3\x11\x8cp\x18\x84C\xbe\xd7\xa5y\xcdV4\x7f\x10A+:\x93xv\x11{r\x06#ha\
-\n\r-\x10\xa3\xa4\x1f\x04/G\xc0m\xe7\xecK/\x92\x1f\x19!\x90\x88#-\x8b\x89\
-\xc3\x17\x19;`\xe3\xbbeB\x8d\x8d\x047\xdf\x8eng\x90\x1f\xe7\\{;JA\xb0&BM\xbd\
-$?\xda\x8f\x90\x92p|)z \x86\xa1\xd2\xf8\xf3\xaa\xef\x14Jz\x98\xc6:\xfc\x99n\
-\xc6.\x8c3\xfdN\x88`m\x92\xc5\x1b\xda\xa8\xa9[\x01N\x18\xc3?A\xfe]\x8d\xc5\
-\xab[)x\x87\x91%\x1f]\xeb\xa4<v\x82x]\x03\xf1\x9a&\xf2\x1c\xa4R\xbb\xd9z\x88\
-\xbd\x15R/|\x04K\x11\xdc\x8d.&\x10\x12\x84\x08\x12\xe0m\x14}\x00H\xcd&X{\x1f\
-\x01k\x18{\xe2\x08\x1ak0D\'\xfd\xfb\x9f\xa3<~\x84\xc57\xef\xa0\xe1\xc6\xed\
-\xa0\xca\xb8\xc5"\x83\xbb\xff\x85B\xdf\x1e\n\xe9UD:\x16\x81_\xc7\xe0\xbe\xff\
-\xc2\x9d|\x87\xd6\xdb\x1e!\xd1\xb9\x11\x19\xf0\xd1\xb48\x9eSD\xe9S\x98z\x17\
-\xc2\xdd\x8a.\xc6q\xb3\xe7\xb9\xf0\x1fO!M\x89\xd0$\xcd[\x9e$\xba|9\xca\xcb\
-\x929\xdb\x8d3v\x94\xc5\xb7<@\xc3\x8d\xdb\x11\xba\x8fo\xc3\xd0\xeb\xcf1s\xee\
-\x00\x86\xae!\xccFt7\xca\xe0\xbe\x17>\xd6\xa9\xac\xdd\xc4\xae\xbe\x83X\xfb\
-\x93\x9c\x7f\xfe)\x84\xee\xd1q\xef\x13\x08k\n\xa95\xd0\xbf\xffgW\xae\xaf\xbd\
-\x11e\xedB\x98[\xd1\xe54\xa6\x1c\xa6u\xdb\x9f\x11\xebX\x8d/\xfaP\x81\xb7!\
-\xb7\x9c\xc6\xf5&\xfd\xaf\xfe\'\xa5\x99\xaf\x12\x0c\x16Q^\x92\xe9\xdent\x86I\
-\xad|\x08B\x03\x04\xc5kP\xa1!\xa2\x07\xc6\xbexk\xdb\xf3F\xd7\xf0\x02\x114["\
-\xa5\x00?\x825\xa5\x81;\xd7f\xca\x8a\xe3\xfaa\xcc\x92\xc0\xf4\xc2\x08\x15\
-\x83\xb2\x8f\xdd\xd7O(\xd8L\xc3\xc6\x87\xd1\xca\xbb\x90\xde!\xa4\xf9\x00\r\
-\xeb\x1ed\xb0\xe74\xa5\xde^b\xcb\x1e\xc5\xf3\x04v\xcf\x05B\x81\x06\xea\xd6>\
-\x80t\x7f\x82,\xec\x07\x99@\x13:8\xd3PJ\xe2\x99\xa0\x95@/\x82\x15J\xa0[Q\xa4\
-\xa1a\x05Sh\xae\x8b\x92md\xba\xbeK(\xd0H\xc3\x86\x1d\xe8\xce\xcf\x11\xa5\xe3\
-\xf8\xd6\xe3\xd4\xad\xba\x87\xe2\xe9C\xe8\x8e\x8eP\t\xf0\x02Wv\xe6fA\xcf\xe0\
-Y\xdf\xc0T\x11\xa4\x12hz\r\x9a\xfd"\x9e\xf1\xf8\xbc\xea\xabi\xdd\x81V\xd8\
-\x87g\xc5\xd0l\x8dPx1\xb1\xb6\xad\xe8\xce\xf7\xc09\x0eY\x0f\xa5\x97\xa8Y\xbe\
-\x8d\x80\xf5\x1aS]\x87i\xd9\xf1\xa7x~\x9e\xec\xb1\xe7I\xb4\xac\xc1L.C\xe6wC\
-\x16\xa8\xd0\x1e\x8c\xce\x9ee\x15\x11\x7f.\x88\xd5\xc3\xa6Q\xc4H\x10$`\x8f\
-\xc2\xc1z\x98Q`X\xa8\x8d\x1b)\xf5\xbf\x8d:\x13\xc2\xeahC\xceL\xe2\x89\x14\
-\xde9\x81\x1ek\x86B\x00yx\x08\nA\xb4\xe64V\xd3-h#\xcd0\x1eC\x15\x12\xa8b\x11\
-\xf7]0\x12\x8d\xf8\xb3\x06\xfa\xd1I(|x\xa9\xb8\x16bu\xb0>\x8d\x18\t`9\x1d\
-\xb4\xed\xf8\x0b\xb4h\x04|\x1f\x7fb\x08y\xfc<\xce\x92E8\xa7J\x18\xc9fD9\x818\
-8\x03\xb9 \xb2u\x10\xa3\xf1\x06\xb4\xe1F\x84\x97\x04/\x81\xca\xa9+;\xff\xc7\
-\xbba\x089\x12@H\x01\xa54t\'\xf1\x97\xc9y\xd5G>\x01\xc7[`c\x1cFbsST?\x05]\
-\x11\xc8,\x01@\x04\xca\xc8\x1b\xa3D\xe27\x92\xdd\xf76\xf6\r\x05\xect\x9a\xf2\
-\t\x97\xc6[\xee\x86\x91<\x1c\x0c\x80_\xb9>\xaa\x0f=\xf3x\xc5\xe4\x0b\x1d\xa3\
-M\x90\xe8\x9c\xa0pf)\x12\r??\xc5\xcc\x81m \x15\xe6:\x1f=\xeb2\xf4\xeda\ngo\
-\xa2\xee\xbef\x8a\xc7l\xcc\xd5yTi3\xd9s\x19\xbc\xec4N\xe8Q\xecw\\B\xcb-f\xbb\
-\x06\x98\xd9\xdbI\xb0\xa9\t\x7fz\x1a\x11\x02\xca7\x93\xd9;\x8a\xf3\xf0(%\xf5\
-{\xd8{]\xf4\x16\x1d\xe3*\r\xfbh\x19/]$\xb1bl.\x83\xd0@\x14\xc8\xfc\xa3\xc0\
-\x1d\x10\xb8CuhMM$\xff\xb6\x84\x97\xd9@\xa1;Gyr\x04\'\xf0\x10\xc5\x036\xe1\
-\xe5\x01f\xf7\xf72\xb3\xb7\x93\xd0U)\xfcB\x1a!\xfd+:K\xfbm\x8c\xa5>\x89k\'\
-\xc8\x9f\xec@ \xf1\xf3\xe3d^YO\xcd\x93\x85y\xd5\xe7Nd\x99\xda\xf9e\xe2\xd7\r\
-S\xe8n\x99[\xe6\xcd\x8f0\xf9\xc3;(\xf7\x94\xdfo\xe3P\x7f\x80\xd8\xba\x07\x19\
-zv\x96\xd3\x7f\xb2\x0bUt\xb1\x9a\xee\xc0Z\xbc\x89\xcc\xb7\x87)\xfe\xea\xf7+\
-\xd7\x01\x00\xfd\xa5\xb5\x9b*\x1a`!S\xdb8\xcb\xdd\xec\xe3b\xaa\x16\xa7(\xa9\
-\x1f\x1a\x82{-\xf2S\x90\x1dq\xe8\xf9\x96M&\x97\xe2\x9a?l\xc4XQ\xe6\xf5\x9dK\
-\xb8.6@\xf4\xb1\x0e\x8e\xfd\xfd9F\x9e\xdeG\xfb\xed\x8b\x90k\x82\x94N\xe59\
-\xfbZ\x86b[\x07\r[\xe2t\xf79$RY\xc2\x8f\xb4s\xf4\x1f|\xc6\xbf\xdfE\xfbm\x8d\
-\xa8;\xa2\xe8\x16\xe8\x86K\xf2k\x11\x0e\xedn\xe3V\xb9\x9b\x8b\xa9$H\x8d\x0e\
-\x86x-r\x0f\x93\xc9$$Aj\x8a\xaf\xf4\x1fB\xbf\xaf\x8dc?\xe8\xa7\xf0\xc3C4o\
-\xa8\xc7\xdfd2\xf8\x9e3\xd7\xd2N\xb2\xc1\xa2\xcd\xed\';m\\\xd1\xf9ft\r\x02\
-\x9b\xbb\xc5\xcb\xf4\xd6\xd5\xa2\xa4A\x9bH\xf3\xab\xe4Z\xd6\xf6\xf5\xcd\xaf\
-\xbeA\x97\xb3\xcb\x96s\x97:L\x7f2\x86\x90\x92\xab\xd5\x00{\xae\xd9\xc0d<\xfc\
-~\x1b\xc7f\x05\xdb\x97\xb8L\xdd\xba\x81\xd1S\xc3\x10\xd2Y\xf7\xe0\x16fr5\xbc\
-\xe4\xc4\xb1\xd7V\xf6\xcf\xe6\xfaY\xbfP\xd1\x00\x0b\x99f\x7f\x06\xdb\xeec\
-\xc2)19\xae3\xf0\xcd4h:\xb6c\xa0\x84\x06B\xb2t\xa5K\xe7\xef\xe69r\xbc\x9d7zC\
-\x8c\xe9a\x1e\xbb\x7f\x8c\xc5\xdb\x0c\x8e\xfd"\xc7\x99g/\xa0\xa4\x86/\x0c\
-\xc2\t\xc9\xca\xbb$f\xdd(\xaf\xec\\Is\xbd\xcf\x83\xdb\xc7i\xf8\x92\xc6\xd9\
-\x03y\xce|\xa7\xef\xfdkk[$\xf7\xfc\x95\xc1\x84\x16\xc4.\x9dg\xa2\x1c\xc6\x8a\
-J\x1c{\x8c\x0b\xe5\x1c\xa3\xfe{\x1bk>\xb8]\t\x1e\xde\x9e#\xbcZrt\xff\x04\x87\
-\xde\xca\xa0\xa4F\xb4\xde`\xd15\x92\xe1\x92$\x18\xc9c\x17/\xf0\xd6\xb1\xd5\
-\xfc\xce\x96\x8fw\x0e\xeb-8\x8eO\xa9\xd0\xc3\x88]K0\xe6P\xb6\'8W\xca3s|~\xf5\
-\xbd\xbas%R\xce\xe0\x94\xce1\xe5\x14\xb0j\x0c\xca\xf6y.\x94\xaff\xd4\xff\xd0\
-f\xe58\xb4\x9c\x99\xa5aK\x0b\xa7N\x0f\x11J\x984m\x8a\xd0\xf5\xf6\x14\xc7s\
-\xc1\n=\xf9\x0f\xd0\x07\x07\xab\x1b\x85\x97#\x9f\xcdS\xca\xf7\xd0q\x83\xa0\
-\xdc\x15\xc2v\x0c|\xa1\x13IH\xea\x978\xb4\xae\xb0Y\xb2\xa2\xc4\xfe\xaev\x9e\
-\x7f\xa9\x85b)MzH!\xbd \xf7n;Jm\x9b\xc1\xf9#A\x8a9\r+*\xb8\xfe\xcbY\xc2\xb5\
-\xf0\x9d\x7f\xbf\x8b\x13\xddY\x0c]C\xd9:\xf7?\xda\xcdU7i\x9c\xd8\x17az\xc2"\
-\xd6\xa8X\xfd\xa5,\xbd})\x0e\x1d]\xceW\xd6\xf5\xb0tM\x84\x9az\x9f\xf4\xa0\
-\xc5\xc9\xd3\xb3\xd8N\xe9\xfd\x9c\xe9\xb4\xa26\x02\xdb\x9e8\xc7\xc5\x13\x01N\
-\xbd\x15B3\x05\xeb\xb7eYrU\x9e\x83\xbb\x93D\x93\x1e\x17\xce\xd7\xb0\xf3\x95M\
-d\xa7\xae\xe0<\x92#V\x93\xa5X\xe8\xa5u\xd5\x14M\xedEz.Dy\xe7d\x1e\x01\xf3\
-\xae\xaf>\x95\xc1.\x1ce\xc9z\x9dX\x83\xcf\xe0\xc0\x04\'OMa;\xd9K\xda\xf9\xc0\
-!\x97\xfb\xb7:\xe4\x9d\x12-\x1d\t\x84\x9c\xe0\xb5=%\x06\x07\xe5g\xfc\xc4?\
-\x8a\xd8\xb4\xe9\xd5\xea\x81\xa9\xcb \x04l\xdf\xd2\xcd\xad\xeb{I%\x8b\x089\
-\xd7T\xd9\xacIf\xd6bl*\xc2/\x7f\xb3\x9c\x0b\x17k)\xbb\xf2\x92\xfbVt\xcc\xb0y\
-\xe50\xad\xcd\xb3(O\xe1\xa3\xd1\xdd\x9b\xe0\xd0\xa9\x06z\x07"\xef_+\xa5b\xd5\
-\xd5SlY7D*^\xa0\\\x96(\xa9\xf3\xce\xbb\xb5\xec\xe9j&\x977\xb8\xf3\xd6a6uNQ\
-\xf65^~\xa3\x99cgj>\x925`y\xdc\xbca\x8c\x1bV\r#}\x17\xa9\xc1h&\xc2\xf9\x8b5l\
-^9\x0c\x08^~c\x19\xc7\xce\xd4^\xd1\x99\xcd\x19\x08\x01w\xde:\xca\xc6\xceI\\_\
-^\xe2\x9do}s\xdf\xd1\xc7\xe6\xcea\xca\xbe\xc6Ko\xb4s\xec\xcc\xa5\xe7+\x0c\
-\x1d\xfe\xe6\xeb9\xca\x03\xc3\xbc\xfa\xbd>\xbe\xf6O\x9d\xf4\x8eG\xf9\xe6\xd3\
-\x11\x16\xc2Q>\xb1h\xd1\xf7\x17@\x8c\x85\x8d\x10\x10\n~\xd0L\xae\x0b\xb6S]\
-\x1e\xff$\xd8\xb8\xb6\xcc\x0f\x9e\x9e\xe6\x99\xbf\x1c\xc4\xf5\x04\x7f\xfe\
-\xcf\x8bx\xe2\xebq\xde<\xf0\xd9\x1c%\xb8\x12\xfa\xd0\xd0P\xa53T\xf9\x02s\xdd\
-\x8eI\xa6\x873\x9c<\x92\xe7\x91\xa7\x02t\x9f\xb6yu\xd7"f\xb3\x95\x9f^\xc1\
-\xdc\xea~\x95*\x15#\x1c\xb4\x89F\xf3\xdc\xf7\xc7\xb0\xe5N\x9b\xe7^\x08-\x98\
-\xc1\x01\xa0W:@\x95/6\xcf\xfe[3A\xb3\x81\xda\x98\xcf\xd3\xdf\x91\xbc\xf8\xb3\
-O\xe7t\xe4\xff\x17\x01\xdf\xa8\xfe\x06\xa9R\xe52,\x9cwY\x95*\x0b\x90\xea\x00\
-\xa9R\xe5c\xf8o\xe0G\x96s<\x06!\xc2\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory015Bitmap():
- return wxBitmapFromImage(getDocFactory015Image())
-
-def getDocFactory015Image():
- stream = cStringIO.StringIO(getDocFactory015Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory015')
-catalog['DocFactory015'] = ImageClass()
-catalog['DocFactory015'].getData = getDocFactory015Data
-catalog['DocFactory015'].getImage = getDocFactory015Image
-catalog['DocFactory015'].getBitmap = getDocFactory015Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory016Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rf\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\x8c\
-\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xaaZEUA\xadh\xfbG\xfe\
-\x8c\xaa\xa8R\xd5\x055\x8a\x80,EU+JJ\xe3$\x10\x82bCblp\x9c\xf1\x86\xf16cl\
-\xcf\x8cgy\xb3\xcf\xbc\x99\xb7\xde\xfb\xee\xbd\xa7\x7f\x0c58\x04<R\x817\x11\
-\xf3\xf9\xf3\xe9\xdc\xf7\xfd~\xcf=?\x9ds\xcf\xd1\x11\xff\xf0-\xa5Xd\x91E~+z\
-\xa8\xba\xd2\x16\x16Yd\xe1\xa2\x07\x17\x0bd\x91E>\x16=\x9c\xa8\xb4\x85\x85\
-\x89@a`#\xf1.\xfb\xdd\xc5\xc0\xc5\xfc\xfc<\x08\x1b\xed7<(\xa0\xac\x02xh\x9f\
-\x89\xae\xc4\xc7\x14%|$ee\xa1\x10\x9f\x89\xce\xef\x02z(^i\x0b\x0b\x0f\x81OCa\
-\x1fQ\xf7"\xfe\x87\xc6\xa6\x94 M\x9d\xbc\x1b\'\x17lgV_\x86K\xe03\xf2\xe0\xd1\
-d\xbfA\x95\xd7{\x99\x07\x00\xddR\xd8Z\r=\xda\x0e\xca\x84>U]\r\x87\xe5\xee\
-\xcf\x08\x94G\xd1\x0c\xc1\xb8\\EZ\xde\xf8\xa9j\xfc.\xa1\x87\x17\x0b\xe4#X\
-\x8c\xd1\xa4?\xc3\xb9Wk\x99\x19\x8a\x00\x02\xa4D\xea\x8apM\x91H}\x91\xb6\xd5\
-S8\xd62\xfa\x83\x7f\x8bC\xdd\xa7\xee!\xc8\x08M\xc5\x17\xe9\xfaI\x9c\x99t\x00\
-\x84\x00!\x01\x885\xda\xac\xba\xff-\x8aF=\x93\xdc\xfc\xa9\xea\x86\x18\xa1\
-\xc1\xfe\x11\xa7~\x94"\xb6\xb4D\xcb\x86c\x14\x82\xd7R\xe6\x8b9P\xf4\xc8\x173\
-\xf7\'\x12R\x82\x84\xb6\x0e\xe1\x17\x91\x9a"\x18\x17\x18\x01\x81BP\xca\x07\
-\x19\xeb\x92\xe4\xc7\x9aY}\x97\xc44~\xcd@\xf8\x9e\xcb\x96!\xc2\xf7\x10n\x19\
-\xe1{(\xa9\xa1t\x03%\x7f\xfbrH\xb8\x0e\xd2-\x03\\\xd66\xa4t\xc2\xe2j\x94[@j\
-\\\xf2\x00\x82\xd4r\x93P\xa8\x033\xd8DD~\xf4\x7f|\xddDi:\xd2)\x82\x90\xf8\
-\x865W`W\xd0\x14(\xe2~\x91p~%\x92\x12\xd9t\x8ck\xa2\x16u\xa1\t2\xf2\x83\x812\
-\xaf|J}\xa0o\x06\xe64\xbd2\xben\xcdi\x95\xed\xb9ff\xe0\xa3\xcf\x00\xbe\x19\
-\xbc\xccs\xa5\xd0\xab\xcc\xc1J{XpX\xca\x01c\x13\x86\xfe\x16\xb1\x94\xcb\xf5\
-\x7ft\x13Z(\x08\xca\xa7\x9c\xb7\x19<\xd6\xcb\xe8\xe94\x17\x0f\xa7\xb8\xe6\
-\x8e(\x8eq\x9e\x82\x08"\x94\x87\x99\xe9\xc1\xcc\xf4\xe0\x15J\x08\xd4\xdc\xe4\
-\x13\x08`\xa7V\xe2T5\xc3\xfb\x85$\xfc2\xd6l/\xc6\xd4\x05\x94\xed\x00jn\x820\
-\x02\x14k\xafG\x0bW#\x037aY{\xd1R.\xd7?\xb6\x15#\x12\x04\xc0.+\xa6\x8c\x082 \
-\x89\xf9\xbd\x98\xd3\xe7\xb1f{P\xb6\x8bR\n\xcc ^\xb0\x1a\xb3\x98F)p\xe2\xad\
-\x94R\x1dW\xd4\x0c\x0b\x9djo\x96\xdc\xf4*p;\x11\x1a\x94\nkYf\x8d1l@I\x1a\xf3\
-\xcb\xa7|\x02\xe9#\x18\xb94\xd2\x90\xb8\xe1\x06\xb4\xc28\xbe]F\x98\x16\x8e^\
-\x8b\xccN \xa4\xc0^\xba\x06/Z\x0b\x80\x91>\x831=\x08BQ\x8e7Sn\\Y\x81\xb7\x7f\
-9z\x84\xaeJ{Xp\x18BG\x98U\xe82\x87\x1e\x14\x18\xb1\x14\x19\xab\x80\x07X\xa10\
-m\xb7m\xc4\xcb\xed&7\xd2C!s\x15\tk\x14\xdd\x9c%\x92=\x87^\xce0|f\x8a\x89\x13\
-Y<\xd7G\x0f\xea4nI\xd0\x10\x1b\xa6X\\B!\xb8\x14\xa9<"\xb9\xb3\xa8\xec\x0c\
-\x03o\x8d\x90\x1b\xb2\x11\x1a\x98\x11\x83\xea\xeb\xa2\xd4\x86F\xb1C\x9b\x11F\
-\n]\xe6\xd1\x83`DS\x14\x02%\\<\xdc\xa0\x8b\xc3\x18\x115L4\xd7\r\xa5\x19F\x8e\
-M\x90\xe9\xc9\x03\xd0\xb8%I\xbc9\xc4\xd8\xc9\x19\xf4\xb0N\xcd\xba\x0c9\xdf!\
-\x94\xeb\xf9X\xcd\xba\xf0$f\xd56F\x0e\x9de\xe8\xc0!\x94\xef\xa1\xa4\xe0\xec\
-\xae\x9f\xb3\xf2\xa1\xfbHh\x03\xe0\x9c\x98W>]\x95\x88\x05N\xd3\xf3\x8b4\xa1Z\
-\x8b\xe4\xb5#Lvg\x9985\xcb\x8a\xfb\x93\x84\xbc\x1f\xd3\xff\xab0\xf1v\x87D\
-\xd5\x9b\xd8\x91\x9dH/K\xc0}\x91\xf4\xf1 f\x95G\xbcC\xe0\xa8?A\t\xa3\xa2cA\
-\x0fs\xa0\xa2\x06\x16"\x1aI\x04\xb7\xa33\x85\x10\x02\xa1B\x98\xfc\n\x8f)\x94\
-&\xf1\xbc[X\xb2\xbe\x83\xde\xdd\xff\x8e=>L,\x15#Q\x1eE\x14\x1a8\xf7\xc3\xc3\
-\x14\xc6\xc7\x08\xc4cH\xd3\xc4\xc9O3\xb2?M1\xddF\xcbWWc\x98g\xd0\x9d$\x9a\
-\xddB\xf7O~Hq|\x0c3\x1a\xc1\x08\x87A8\xe4{]\x1a\xd7nC\xf3\x07\x11\xb4\xa03\
-\x89g\x17\xb1\'g0\x82\x16\xa6\xd0\xd0\x021J\xfa!\xf0r\x04\xdc6\xce\xbe\xfc\
-\x12\xf9\x91\x11\x02\x898\xd2\xb2\x988r\x91\xb1\x836\xbe[&T_Op\xcb\xed\xe8v\
-\x06\xf9I\x9a\xebnG)\x08VE\xa8\xaa\x95\xe4G\xfb\x11R\x12\x8e/C\x0f\xc40T\x1a\
-\x7f^\xf9N\xa3\xa4\x87i\xac\xc7\x9f\xe9f\xec\xc28\xd3\xef\x86\x08V\'Y\xba\
-\xb1\x95\xaa\x9a\x95\xe0\x841\xfc\x93\xe4\xdf\xd3X\xba\xa6\x85\x82w\x04Y\xf2\
-\xd1\xb5\x0e\xcac\'\x89\xd7\xd4\x11\xafj \xcf!*}\x8a\xad\x87\xd8Wa\x0b\x0b\
-\x0f\xc12\x04w\xa3\x8b\t\x84\x04!\x82\x04x\x07E\x1f\x00R\xb3\tV\xdfG\xc0\x1a\
-\xc6\x9e8\x8a\xc6Z\x0c\xd1A\xff\x81\xe7)\x8f\x1fe\xe9\xcd;\xa9\xbbq\x07\xa82\
-n\xb1\xc8\xe0\x9e\x7f\xa3\xd0\xb7\x97Bz5\x91\xf6%\xe0\xd70\xb8\xff\x7fp\'\
-\xdf\xa5\xe5\xb6GHtlB\x06|4-\x8e\xe7\x14Q\xfa\x14\xa6\xde\x89p\xb7\xa1\x8bq\
-\xdc\xecy.\xfc\xd7SHS"4I\xe3\xd6\'\x89\xaeX\x81\xf2\xb2d\xcev\xe3\x8c\x1dc\
-\xe9-\x0fPw\xe3\x0e\x84\xee\xe3\xdb0\xf4\xc6\xf3\xcc\x9c;\x88\xa1k\x08\xb3\
-\x1e\xdd\x8d2\xb8\xff\xc5O\xd4T\xd6\x1ebW\xdfA\xac\xedI\xce\xbf\xf0\x14B\xf7\
-h\xbf\xf7\t\x845\x85\xd4\xea\xe8?\xf0\xd3+\xe7k\xabGY\xbb\x11\xe66t9\x8d)\
-\x87i\xd9\xfe\x17\xc4\xda\xd7\xe0\x8b>T\xe0\x1d\xc8\xad\xa0~\x83I\xffk\xffMi\
-\xe6\xab\x04\x83E\x94\x97d\xba\xb7\x1b\x9daR\xab\x1e\x82\xd0\x00A\xf1:T\xb8D\
-\xf4\xc0X\xe5?\x84\x16\x1c\xba\x86\x17\x88\xa0\xd9\x12)\x05\xf8\x11\xac)\r\
-\xdc\xb9\xbeRV\x1c\xd7\x0fc\x96\x04\xa6\x17F\xa8\x18\x94}\xec\xbe~B\xc1F\xea\
-6=\x8cV\xde\x8d\xf4\x0e#\xcd\x07\xa8[\xff \x83=g(\xf5\xf6\x12[\xfe(\x9e\'\
-\xb0{.\x10\n\xd4Q\xb3\xee\x01\xa4\xfbcd\xe1\x00\xc8\x04\x9a\xd0\xc1\x99\x86R\
-\x12\xcf\x04\xad\x04z\x11\xacP\x02\xdd\x8a"\r\r+\x98Bs]\x94l%\xd3\xf9\x1dB\
-\x81z\xea6\xeeDw~\x86(\x9d\xc0\xb7\x1e\xa7f\xf5=\x14\xcf\x1cFwt\x84J\x80\x17\
-\xb8\xb2fn\x16\xf4\x0c\x9e\xf5\rL\x15A*\x81\xa6W\xa1\xd9/\xe1\x19\x8f\xcf+_U\
-\xcbN\xb4\xc2~<+\x86fk\x84\xc2K\x89\xb5nCw\xbe\x0b\xce\t\xc8z(\xbdD\xd5\x8a\
-\xed\x04\xac\xd7\x99\xea<B\xd3\xce?\xc7\xf3\xf3d\x8f\xbf@\xa2i-fr92\xbf\x07\
-\xb2@\x85\xcf`t\xf6.\xaf\xa8\x81\x05I\xac\x166\x8f"F\x82 \x01{\x14\x0e\xd5\
-\xc2\x8c\x02\xc3Bm\xdaD\xa9\xff\x1dTW\x08\xab\xbd\x1593\x89\'Rx\xe7\x04z\xac\
-\x11\n\x01\xe4\x91!(\x04\xd1\x1a\xd3X\r\xb7\xa0\x8d4\xc2x\x0cUH\xa0\x8aE\xdc\
-\xf7\xc0H\xd4\xe3\xcf\x1a\xe8\xc7&\xa1\xf0\xe1\xad\xe2j\x88\xd5\xc0\x864b$\
-\x80\xe5\xb4\xd3\xba\xf3\xaf\xd0\xa2\x11\xf0}\xfc\x89!\xe4\x89\xf38\xcdKpN\
-\x970\x92\x8d\x88r\x02qh\x06rAd\xcb F\xfd\rh\xc3\xf5\x08/\t^\x02\x95SW\xd6\
-\xfc?\xdd\x8dC\xc8\x91\x00B\n(\xa5\xa1;\x89\xbf\\\xce+\x1f\xf9\x04\x9ch\x82M\
-q\x18\x89\xcd-Q\xfd\x14tF \xd3\x0c\x80\x08\x94\x917F\x89\xc4o$\xbb\xff\x1d\
-\xec\x1b\n\xd8\xe94\xe5\x93.\xf5\xb7\xdc\r#y8\x14\x00\xbf\xf2cS\x1fz\xe6\xf1\
-J{Xp\x18\xad\x82D\xc7\x04\x85\xaeeH4\xfc\xfc\x143\x07\xb7\x83T\x98\xeb}\xf4\
-\xac\xcb\xd0\xb7\x87)\x9c\xbd\x89\x9a\xfb\x1a)\x1e\xb71\xd7\xe4Q\xa5-d\xcfe\
-\xf0\xb2\xd38\xa1G\xb1\xdfu\t\xad\xb0\x98\xed\x1c`f_\x07\xc1\x86\x06\xfc\xe9\
-iD\x08(\xdfLf\xdf(\xce\xc3\xa3\x94\xd4\x1f`\xefs\xd1\x9bt\x8c\xab4\xecce\xbc\
-t\x91\xc4\xca\xb19\x0fB\x03Q \xf3\xcf\x02w@\xe0\x0e\xd5\xa054\x90\xfc\xfb\
-\x12^f#\x85\xee\x1c\xe5\xc9\x11\x9c\xc0C\x14\x0f\xda\x84W\x04\x98=\xd0\xcb\
-\xcc\xbe\x0eBW\xa5\xf0\x0bi\x84\xf4\xaf\xa8Y:`c,\xf3I\\;A\xfeT;\x02\x89\x9f\
-\x1f\'\xf3\xea\x06\xaa\x9e,\xcc+\x9f;\x91ej\xd7\x97\x89_7L\xa1\xbbin\x9b7?\
-\xc2\xe4\x0f\xee\xa0\xdcS\xbe\xd4\xc7\xa1\xfe\x00\xb1\xf5\x0f2\xf4\xec,g\xfe\
-l7\xaa\xe8b5\xdc\x81\xb5t3\x99o\x0fS\xfc\xe5\x1fVn\x00|\x08\xfd\xe5u\x9b+\
-\xeda\xc1Q]?\xcb\xdd\xec\xe7b\xaa\x1a\xa7(\xa9\x1d\x1a\x82{-\xf2S\x90\x1dq\
-\xe8\xf9\x96M&\x97\xe2\x9a?\xae\xc7XY\xe6\x8d]\xcd\\\x17\x1b \xfaX;\xc7\xff\
-\xf1\x1c#O\xef\xa7\xed\xf6%\xc8\xb5AJ\xa7\xf3\x9c}=C\xb1\xb5\x9d\xba\xadq\
-\xba\xfb\x1c\x12\xa9,\xe1G\xda8\xf6O>\xe3\xdf\xeb\xa4\xed\xb6z\xd4\x1dQt\x0b\
-t\xc3%\xf9\xb5\x08\x87\xf7\xb4r\xab\xdc\xc3\xc5T\x12\xa4F;C\xbc\x1e\xb9\x87\
-\xc9d\x12\x92 5\xc5W\xfa\x0f\xa3\xdf\xd7\xca\xf1\xef\xf7S\xf8\xc1a\x1a7\xd6\
-\xe2o6\x19|_3\xd7\xd4F\xb2\xce\xa2\xd5\xed\';m\\Q\xf3\xad\xe8Z\x046w\x8bW\
-\xe8\xad\xa9FI\x83V\x91\xe6\x97\xc9u\xac\xeb\xeb\x9b_\xbeA\x97\xb3\xcbWp\x97\
-:B\x7f2\x86\x90\x92\xab\xd5\x00{\xaf\xd9\xc8d<|\xa9\x8fc\xb3\x82\x1d\xcd.S\
-\xb7nd\xf4\xf40\x84t\xd6?\xb8\x95\x99\\\x15/;q\xecu\x95\xfe<\x9fC?\xeb\x17*\
-\xeda\xc1\xd1\xe8\xcf`\xdb}L8%&\xc7u\x06\xbe\x99\x06M\xc7v\x0c\x94\xd0@H\x96\
-\xadr\xe9\xf8\xfd<GO\xb4\xf1fo\x881=\xccc\xf7\x8f\xb1t\xbb\xc1\xf1\x9f\xe7\
-\xe8z\xf6\x02Jj\xf8\xc2 \x9c\x90\xac\xbaKb\xd6\x8c\xf2\xea\xaeU4\xd6\xfa<\
-\xb8c\x9c\xba/i\x9c=\x98\xa7\xeb\xb9\xbeKm\xab\x9b$\xf7\xfc\x8d\xc1\x84\x16\
-\xc4.\x9dg\xa2\x1c\xc6\x8aJ\x1c{\x8c\x0b\xe5\x1c\xa3\xfe\xfb\x07k>\xb8\x9d\t\
-\x1e\xde\x91#\xbcFr\xec\xc0\x04\x87\xdf\xce\xa0\xa4F\xb4\xd6`\xc95\x92\xe1\
-\x92$\x18\xc9c\x17/\xf0\xf6\xf15\xfc\xde\xd6O\xd6\x1c\xd6\x9bp\x1c\x9fR\xa1\
-\x87\x11\xbb\x9a`\xcc\xa1lOp\xae\x94g\xe6\xc4\xfc\xf2\xbd\xb6k\x15R\xce\xe0\
-\x94\xce1\xe5\x14\xb0\xaa\x0c\xca\xf6y.\x94\xaff\xd4\xff\xd0a\xe584u\xcdR\
-\xb7\xb5\x89\xd3g\x86\x08%L\x1a6G\xe8|g\x8a\x13\xb9`\x85\xde\xfcG\xd1\x07\
-\x07\x17\x0f\n\x7f\x93|6O)\xdfC\xfb\r\x82rg\x08\xdb1\xf0\x85N$!\xa9mvhYi\xd3\
-\xbc\xb2\xc4\x81\xce6^x\xb9\x89b)MzH!\xbd \xf7n?Fu\xab\xc1\xf9\xa3A\x8a9\r+*\
-\xb8\xfe\xcbY\xc2\xd5\xf0\xdc\x7f\xde\xc5\xc9\xee,\x86\xae\xa1l\x9d\xfb\x1f\
-\xed\xe6\xaa\x9b4N\xee\x8f0=a\x11\xabW\xac\xf9R\x96\xde\xbe\x14\x87\x8f\xad\
-\xe0+\xeb{X\xb66BU\xadOz\xd0\xe2\xd4\x99Yl\xa7t\xc9g:\xad\xa8\x8e\xc0\xf6\'\
-\xceq\xf1d\x80\xd3o\x87\xd0L\xc1\x86\xedY\x9a\xaf\xcashO\x92h\xd2\xe3\xc2\
-\xf9*v\xbd\xba\x99\xec\xd4\x154\x8f\xe6\x88Ue)\x16ziY=EC[\x91\x9e\x0bQ\xde=\
-\x95G\xc0\xbc\xf3\xd5\xa62\xd8\x85c4o\xd0\x89\xd5\xf9\x0c\x0eLp\xea\xf4\x14\
-\xb6\x93\xbd\xac\x9f\x0f\x1ev\xb9\x7f\x9bC\xde)\xd1\xd4\x9e@\xc8\t^\xdf[bpP~\
-\xceo\xfc\xe3\x11\x9b7\xbf\xb60\xe6\xb2\x05\x84\x10\xb0ck7\xb7n\xe8%\x95,"\
-\xe4\\\x17e\xb3&\x99Y\x8b\xb1\xa9\x08\xbf\xf8\xf5\n.\\\xac\xa6\xec\xca\xcb\
-\x9e[\xd9>\xc3\x96U\xc3\xb44\xce\xa2<\x85\x8fFwo\x82\xc3\xa7\xeb\xe8\x1d\x88\
-\\j+\xa5b\xf5\xd5Sl]?D*^\xa0\\\x96(\xa9\xf3\xee{\xd5\xec\xedl$\x977\xb8\xf3\
-\xd6a6wLQ\xf65^y\xb3\x91\xe3]U\x1f\xf1\x1a\xb0<n\xde8\xc6\r\xab\x87\x91\xbe\
-\x8b\xd4`4\x13\xe1\xfc\xc5*\xb6\xac\x1a\x06\x04\xaf\xbc\xb9\x9c\xe3]\xd5W\
-\xd4\xcc\xe6\x0c\x84\x80;o\x1deS\xc7$\xae//\xd3\x9do\xbe\xb9\xff\xe8cK\xc70e\
-_\xe3\xe57\xdb8\xdeu\xf9\xbd\nC\x87\xbf\xfbz\x8e\xf2\xc00\xaf}\xb7\x8f\xaf\
-\xfdK\x07\xbd\xe3Q\xbe\xf9t\x84\x85t\x85O,Y\xf2\xbd\x05dga!\x04\x84\x82\x1ft\
-\x8f\xeb\x82\xed,n\x8b\x7f\x1alZW\xe6\xfbOO\xf3\xcc_\x0f\xe2z\x82\xbf\xfc\
-\xd7%<\xf1\xf58o\x1d\xfc|\xae\x12\xcc\x17}hh\xa8\xd2\x1e\x16\xf9\x02r\xdd\
-\xceI\xa6\x873\x9c:\x9a\xe7\x91\xa7\x02t\x9f\xb1ym\xf7\x12f\xb3\x0bgy\x05s\
-\xbb\xfc\x8b,\xf2\xb9\x13\x0e\xdaD\xa3y\xee\xfbS\xd8z\xa7\xcd\xf3/\x86\x16\\\
-q\x00\xe8\x956\xb0\xc8\x17\x93g\xff\xa3\x91\xa0YGu\xcc\xe7\xe9\xe7$/\xfd\xf4\
-\xb3\xb9\x1d\xf9\xffE\xc07\x16\xbfA\x16Y\xe4cXxs\xda"\x8b, \x16\x0bd\x91E>\
-\x81\xff\x05\xc4\xdb\x96s\xad\x0c>\xba\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory016Bitmap():
- return wxBitmapFromImage(getDocFactory016Image())
-
-def getDocFactory016Image():
- stream = cStringIO.StringIO(getDocFactory016Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory016')
-catalog['DocFactory016'] = ImageClass()
-catalog['DocFactory016'].getData = getDocFactory016Data
-catalog['DocFactory016'].getImage = getDocFactory016Image
-catalog['DocFactory016'].getBitmap = getDocFactory016Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory017Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ri\
-IDATx\x9c\xed\x9byl]U~\xc7?\xe7\xdc\xed\xad~\x8b\x9f\xd7\xc4vb;@\xc0I\xc8\
-\x1e\xd6\xcc\x04fh\xc2R\xb6\x94\xa5\x85\xaaj5\xaa\njE\xdb?\xe6\xcfQ5\xaaTuA\
-\x1d\x8d\x80Y\x8a\xaaV\x0c3t230\x0c\x9a\x04fB\x02\x99\x8c\xe3$\x84\xac\x0eIl\
-\xc7\xcb\xf3n?\xfb\xad\xf7\xbe{\xef\xe9\x1f\x86@\xca\x92T\x02\xfc\x10\xfe\
-\xfc\xf9t\xee\xfb~\xbf\xe7\x9e\x9f\xce\xb9\xe7\xe8\x88\x7f\xfa\x8eR,\xb0\xc0\
-\x02\x1f\x89\x1e\xaa\x9eo\x0b\x0b,P\xb9\xe8\xc1\x85\x02Y`\x81\x8fE\x0f\'\xe6\
-\xdbBe!P\x18\xd8H\xbc\x8b~w1p1??\x0f\xc2F\xfb?\x1e\x14PV\x01<\xb4\xcfDW\xe2c\
-\x8a\x12>\x92\xb2\xb2P\x88\xcfD\xe7\x8b\x84\x1e\x8a\xcf\xb7\x85\xcaA\xe0\xd3\
-P\xd8C\xd4=\x8f\xff\x81\xb1)%HS\'\xef\xc6\xc9\x05\xdb\x99\xd5\x97\xe0\x12\
-\xf8\x8c<x4\xd9\xafQ\xe5\xf5^\xe4\x01@\xb7\x14\xb6VC\x8f\xb6\x8d2\xa1OUW\xc3\
-a\xa9\xfb+\x02\xe5Q4C0.W\x90\x96\xd7\x7f\xaa\x1a_D\xf4\xf0B\x81\\\xc0b\x8c&\
-\xfd)\xce\xbc\\\xcb\xccP\x04\x10 %RW\x84k\x8aD\xea\x8b\xb4\xad\x9c\xc2\xb1\
-\x96\xd0\x1f\xfc{\x1c\xea>u\x0fAFh*>\xcf\xa9_\xc4\x99I\x07@\x08\x10\x12\x80X\
-\xa3\xcd\x8a{\xdf\xa0h\xd43\xc9\x8d\x9f\xaan\x88\x11\x1a\xec\x9fq\xfcg)b\x8b\
-K\xb4\xac;L!x5e\xbe\xdc\x03D\x8f|\xb9\xf3_DH\t\x12\xda\x1a\x84_Dj\x8a`\\`\
-\x04\x04\nA)\x1fd\xec\x94$?\xd6\xcc\xca;$\xa6\xf1{\x06\xc2w]\xb4\x0c\x11\xbe\
-\x87p\xcb\x08\xdfCI\r\xa5\x1b(\xf9\xd1\xcb!\xe1:H\xb7\x0cpQ\xdb\x90\xd2\t\
-\x8b+Qn\x01\xa9q\xc1\x03\x08RKMB\xa1\x0e\xcc`\x13\x11\xf9\xe1\xff\xf1u\x13\
-\xa5\xe9H\xa7\x08B\xe2\x1b\xd6\\\x81]BS\xa0\x88\xfbE\xc2\xf9\xe5HJd\xd31\xae\
-\x8aZ\xd4\x85&\xc8\xc8\xf7\x07\xc8e\xe5S\xea}}30\xa7\xe9\x95\xf1ukN\xabl\xcf\
-53\x03\x1f~\x06\xf0\xcd\xe0E\x9e\xe7\x1b\xbd\xca\x1c\x9co\x0f\x15\x83\xa5\
-\x1c06`\xe8o\x10K\xb9\\\xfb\'7\xa0\x85\x82\xa0|\xcay\x9b\xc1\xc3\xbd\x8c\x9e\
-Hs\xbe+\xc5U\xb7Eq\x8c\xb3\x14D\x10\xa1<\xccL\x0ff\xa6\x07\xafPB\xa0\xe6&\
-\x9f@\x00;\xb5\x1c\xa7\xaa\x19\xde-$\xe1\x97\xb1f{1\xa6\xce\xa1l\x07Ps\x13\
-\x84\x11\xa0X{-Z\xb8\x1a\x19\xb8\x01\xcb\xda\x8d\x96r\xb9\xf6\x91\xcd\x18\
-\x91 \x00vY1eD\x90\x01I\xcc\xef\xc5\x9c>\x8b5\xdb\x83\xb2]\x94R`\x06\xf1\x82\
-\xd5\x98\xc54J\x81\x13o\xa5\x94\xea\xb8\xa4fX\xe8T{\xb3\xe4\xa6W\x80\xdb\x89\
-\xd0\xa0TX\xcd\x12k\x8ca\x03J\xd2\xb8\xbc|\xca\'\x90>\x88\x91K#\r\x89\x1bn@+\
-\x8c\xe3\xdbe\x84i\xe1\xe8\xb5\xc8\xec\x04B\n\xec\xc5\xab\xf0\xa2\xb5\x00\
-\x18\xe9\x93\x18\xd3\x83 \x14\xe5x3\xe5\xc6\xe5\xf3\xf0\xf6?\x1a=\xc2\xa9\
-\xf9\xf6P1\x18BG\x98U\xe82\x87\x1e\x14\x18\xb1\x14\x19\xab\x80\x07X\xa10m\
-\xb7\xac\xc7\xcb\xed$7\xd2C!s\x05\tk\x14\xdd\x9c%\x92=\x83^\xce0|r\x8a\x89\
-\xa3Y<\xd7G\x0f\xea4nJ\xd0\x10\x1b\xa6X\\D!\xb8\x18\xa9<"\xb9\xd3\xa8\xec\
-\x0c\x03o\x8c\x90\x1b\xb2\x11\x1a\x98\x11\x83\xeak\xa2\xd4\x86F\xb1C\x1b\x11\
-F\n]\xe6\xd1\x83`DS\x14\x02%\\<\xdc\xa0\x8b\xc3\x18\x115L4\xd7\r\xa5\x19F\
-\x0eO\x90\xe9\xc9\x03\xd0\xb8)I\xbc9\xc4\xd8\xb1\x19\xf4\xb0N\xcd\x9a\x0c9\
-\xdf!\x94\xeb\xf9X\xcd\xba\xf0$f\xd5\x16F\x0e\x9cfh\xdf\x01\x94\xef\xa1\xa4\
-\xe0\xf4\x8e_\xb3\xfc\x81{Hh\x03\xe0\x1c\xbd\xac|\xba*\x11\x0b\x9c\xa0\xe77i\
-B\xb5\x16\xc9\xabG\x98\xec\xce2q|\x96e\xf7&\ty?\xa7\xffwa\xe2\xed\x0e\x89\
-\xaa\xd7\xb1#\xdb\x91^\x96\x80\xfb<\xe9#A\xcc*\x8fx\x87\xc0Q\x7f\x86\x12\xc6\
-\xfc\x0e\x86w\xd1\xc3\xec\x9bo\x0f\x15\x83F\x12\xc1\xad\xe8L!\x84@\xa8\x10&\
-\xbf\xc3c\n\xa5I<\xef&\x16\xad\xed\xa0w\xe7\x7fb\x8f\x0f\x13K\xc5H\x94G\x11\
-\x85\x06\xce\xfc\xb4\x8b\xc2\xf8\x18\x81x\x0ci\x9a8\xf9iF\xf6\xa6)\xa6\xdbh\
-\xf9\xfaJ\x0c\xf3$\xba\x93D\xb3[\xe8\xfe\xc5O)\x8e\x8faF#\x18\xe10\x08\x87|\
-\xafK\xe3\xea-h\xfe \x82\x16t&\xf1\xec"\xf6\xe4\x0cF\xd0\xc2\x14\x1aZ FI?\
-\x00^\x8e\x80\xdb\xc6\xe9\x17_ ?2B \x11GZ\x16\x13\x07\xcf3\xb6\xdf\xc6w\xcb\
-\x84\xea\xeb\tn\xba\x15\xdd\xce ?Is\xcd\xad(\x05\xc1\xaa\x08U\xb5\x92\xfch?B\
-J\xc2\xf1%\xe8\x81\x18\x86J\xe3_V\xbe\x13(\xe9a\x1ak\xf1g\xba\x19;7\xce\xf4\
-\xdb!\x82\xd5I\x16\xafo\xa5\xaaf98a\x0c\xff\x18\xf9w4\x16\xafj\xa1\xe0\x1dD\
-\x96|t\xad\x83\xf2\xd81\xe25u\xc4\xab\x1a\xc8s\x80J9\xbd\xd6C\xec\x99o\x0f\
-\x15\x83`\t\x82;\xd1\xc5\x04B\x82\x10A\x02\xbc\x85\xa2\x0f\x00\xa9\xd9\x04\
-\xab\xef!`\rcO\x1cBc5\x86\xe8\xa0\x7f\xdf\xb3\x94\xc7\x0f\xb1\xf8\xc6\xed\
-\xd4]\xbf\rT\x19\xb7Xdp\xd7\x7fP\xe8\xdbM!\xbd\x92H\xfb"\xf0k\x18\xdc\xfb?\
-\xb8\x93o\xd3r\xcbC$:6 \x03>\x9a\x16\xc7s\x8a(}\nS\xefD\xb8[\xd0\xc58n\xf6,\
-\xe7~\xf4\x04\xd2\x94\x08M\xd2\xb8\xf9q\xa2\xcb\x96\xa1\xbc,\x99\xd3\xdd8c\
-\x87Y|\xd3}\xd4]\xbf\r\xa1\xfb\xf86\x0c\xbd\xf6,3g\xf6c\xe8\x1a\xc2\xacGw\
-\xa3\x0c\xee}\xfe\x135\x95\xb5\x8b\xd8\x95\xb7\x11k{\x9c\xb3\xcf=\x81\xd0=\
-\xda\xef~\x0caM!\xb5:\xfa\xf7\xfd\xf2\xd2\xf9\xda\xeaQ\xd6N\x84\xb9\x05]Nc\
-\xcaaZ\xb6\xfe\x15\xb1\xf6U\xf8\xa2\x0f\x15x\x0br\xcb\xa8_g\xd2\xff\xcaO(\
-\xcd|\x9d`\xb0\x88\xf2\x92L\xf7v\xa33Lj\xc5\x03\x10\x1a (^\x85\n)\x11=0V9\
-\x1fD\xf3\x8e\xae\xe1\x05"h\xb6DJ\x01~\x04kJ\x03w\xae\x8f\x94\x15\xc7\xf5\
-\xc3\x98%\x81\xe9\x85\x11*\x06e\x1f\xbb\xaf\x9fP\xb0\x91\xba\r\x0f\xa2\x95w"\
-\xbd.\xa4y\x1fuk\xefg\xb0\xe7$\xa5\xde^bK\x1f\xc6\xf3\x04v\xcf9B\x81:j\xd6\
-\xdc\x87t\x7f\x8e,\xec\x03\x99@\x13:8\xd3PJ\xe2\x99\xa0\x95@/\x82\x15J\xa0[Q\
-\xa4\xa1a\x05Sh\xae\x8b\x92\xadd:\xbfG(PO\xdd\xfa\xed\xe8\xce\xaf\x10\xa5\
-\xa3\xf8\xd6\xa3\xd4\xac\xbc\x8b\xe2\xc9.tGG\xa8\x04x\x81Kk\xe6fA\xcf\xe0Y\
-\xdf\xc2T\x11\xa4\x12hz\x15\x9a\xfd\x02\x9e\xf1\xe8e\xe5\xabj\xd9\x8eV\xd8\
-\x8bg\xc5\xd0l\x8dPx1\xb1\xd6-\xe8\xce\xf7\xc19\nY\x0f\xa5\x97\xa8Z\xb6\x95\
-\x80\xf5*S\x9d\x07i\xda\xfe\x97x~\x9e\xec\x91\xe7H4\xad\xc6L.E\xe6wA\x16\xa8\
-\x903\x18\x9d\xddK\xe7\xdbC\xe5\x10\xab\x85\x8d\xa3\x88\x91 H\xc0\x1e\x85\
-\x03\xb50\xa3\xc0\xb0P\x1b6P\xea\x7f\x0bu*\x84\xd5\xde\x8a\x9c\x99\xc4\x13)\
-\xbc3\x02=\xd6\x08\x85\x00\xf2\xe0\x10\x14\x82h\x8di\xac\x86\x9b\xd0F\x1aa<\
-\x86*$P\xc5"\xee;`$\xea\xf1g\r\xf4\xc3\x93P\xf8\xe0Vq5\xc4j`]\x1a1\x12\xc0r\
-\xdai\xdd\xfe7h\xd1\x08\xf8>\xfe\xc4\x10\xf2\xe8Y\x9c\xe6E8\'J\x18\xc9FD9\
-\x8180\x03\xb9 \xb2e\x10\xa3\xfe:\xb4\xe1z\x84\x97\x04/\x81\xca\xa9Kk\xbe\
-\xa7\xbb~\x089\x12@H\x01\xa54t\'\xf1\x97\xca\xcb\xcaG>\x01G\x9b`C\x1cFbsKT?\
-\x05\x9d\x11\xc84\x03 \x02e\xe4\xf5Q"\xf1\xeb\xc9\xee}\x0b\xfb\xba\x02v:M\
-\xf9\x98K\xfdMw\xc2H\x1e\x0e\x04\xc0\xaf\x9c1\xa9\x0f=\xf5\xe8|{\xa8\x18\x8c\
-VA\xa2c\x82\xc2\xa9%H4\xfc\xfc\x143\xfb\xb7\x82T\x98k}\xf4\xac\xcb\xd0w\x87)\
-\x9c\xbe\x81\x9a{\x1a)\x1e\xb11W\xe5Q\xa5Md\xcfd\xf0\xb2\xd38\xa1\x87\xb1\
-\xdfv\t-\xb3\x98\xed\x1c`fO\x07\xc1\x86\x06\xfc\xe9iD\x08(\xdfHf\xcf(\xce\
-\x83\xa3\x94\xd4\x1fa\xefq\xd1\x9bt\x8c+4\xec\xc3e\xbct\x91\xc4\xf2\xb19\x0f\
-B\x03Q \xf3\xaf\x02w@\xe0\x0e\xd5\xa054\x90\xfc\xc7\x12^f=\x85\xee\x1c\xe5\
-\xc9\x11\x9c\xc0\x03\x14\xf7\xdb\x84\x97\x05\x98\xdd\xd7\xcb\xcc\x9e\x0eBW\
-\xa4\xf0\x0bi\x84\xf4/\xa9Y\xdagc,\xf1I\\=A\xfex;\x02\x89\x9f\x1f\'\xf3\xf2:\
-\xaa\x1e/\\V>w"\xcb\xd4\x8e\xaf\x12\xbff\x98Bw\xd3\xdc6o~\x84\xc9\x1f\xdfF\
-\xb9\xa7|\xa1\x8fC\xfd\x01bk\xefg\xe8\xe9YN\xfe\xc5NT\xd1\xc5j\xb8\rk\xf1F2\
-\xdf\x1d\xa6\xf8\xdb?\x9e\xbf\x01\xf0\x11\xe8/\xae\xd98\xdf\x1e*\x86\xea\xfa\
-Y\xeed/\xe7S\xd58EI\xed\xd0\x10\xdcm\x91\x9f\x82\xec\x88C\xcfwl2\xb9\x14W\
-\xfdi=\xc6\xf22\xaf\xedh\xe6\x9a\xd8\x00\xd1G\xda9\xf2\xcfg\x18yr/m\xb7.B\
-\xae\x0eR:\x91\xe7\xf4\xab\x19\x8a\xad\xed\xd4m\x8e\xd3\xdd\xe7\x90He\t?\xd4\
-\xc6\xe1\x7f\xf1\x19\xffA\'m\xb7\xd4\xa3n\x8b\xa2[\xa0\x1b.\xc9oD\xe8\xda\
-\xd5\xca\xcdr\x17\xe7SI\x90\x1a\xed\x0c\xf1j\xe4.&\x93IH\x82\xd4\x14_\xeb\
-\xefB\xbf\xa7\x95#?\xec\xa7\xf0\xe3.\x1a\xd7\xd7\xe2o4\x19|W3\xd7\xd4F\xb2\
-\xce\xa2\xd5\xed\';m\\R\xf3\x8d\xe8j\x046w\x8a\x97\xe8\xad\xa9FI\x83V\x91\
-\xe6\xb7\xc95\xac\xe9\xeb\xbb\xbc|\x83.\xa7\x97.\xe3\x0eu\x90\xfed\x0c!%W\
-\xaa\x01v_\xb5\x9e\xc9x\xf8B\x1f\xc7f\x05\xdb\x9a]\xa6n^\xcf\xe8\x89a\x08\
-\xe9\xac\xbd\x7f33\xb9*^t\xe2\xd8k*\xe3\xdb\xe3=\xf4\xd3~a\xbe=T\x0c\x8d\xfe\
-\x0c\xb6\xdd\xc7\x84Sbr\\g\xe0\xdbi\xd0tl\xc7@\t\r\x84d\xc9\n\x97\x8e?\xccs\
-\xe8h\x1b\xaf\xf7\x86\x18\xd3\xc3<r\xef\x18\x8b\xb7\x1a\x1c\xf9u\x8eSO\x9fCI\
-\r_\x18\x84\x13\x92\x15wH\xcc\x9aQ^\xde\xb1\x82\xc6Z\x9f\xfb\xb7\x8dS\xf7\
-\x15\x8d\xd3\xfb\xf3\x9cz\xa6\xefB\xdb\xea&\xc9]\x7fg0\xa1\x05\xb1Kg\x99(\
-\x87\xb1\xa2\x12\xc7\x1e\xe3\\9\xc7\xa8\xff\xee\xc1\x9a\x0fng\x82\x07\xb7\
-\xe5\x08\xaf\x92\x1c\xde7A\xd7\x9b\x19\x94\xd4\x88\xd6\x1a,\xbaJ2\\\x92\x04#\
-y\xec\xe29\xde<\xb2\x8a?\xd8\xfc\xc9\x9a\xc3z\x13\x8e\xe3S*\xf40bW\x13\x8c9\
-\x94\xed\t\xce\x94\xf2\xcc\x1c\xbd\xbc|\xaf\xecX\x81\x9438\xa53L9\x05\xac*\
-\x83\xb2}\x96s\xe5+\x19\xf5?pX9\x0eM\xa7f\xa9\xdb\xdc\xc4\x89\x93C\x84\x12&\
-\r\x1b#t\xbe5\xc5\xd1\\p\x9e\xde\xfc\xc7\xa3\x0f\x0e.\x1c\x14\xbeG>\x9b\xa7\
-\x94\xef\xa1\xfd:A\xb93\x84\xed\x18\xf8B\'\x92\x90\xd46;\xb4,\xb7i^^b_g\x1b\
-\xcf\xbd\xd8D\xb1\x94&=\xa4\x90^\x90\xbb\xb7\x1e\xa6\xba\xd5\xe0\xec\xa1 \
-\xc5\x9c\x86\x15\x15\\\xfb\xd5,\xe1jx\xe6\xbf\xef\xe0Xw\x16C\xd7P\xb6\xce\
-\xbd\x0fws\xc5\r\x1a\xc7\xf6F\x98\x9e\xb0\x88\xd5+V}%Ko_\x8a\xae\xc3\xcb\xf8\
-\xda\xda\x1e\x96\xac\x8ePU\xeb\x93\x1e\xb48~r\x16\xdb)]\xf0\x99N+\xaa#\xb0\
-\xf5\xb13\x9c?\x16\xe0\xc4\x9b!4S\xb0nk\x96\xe6+\xf2\x1c\xd8\x95$\x9a\xf48w\
-\xb6\x8a\x1d/o$;u\t\xcdC9bUY\x8a\x85^ZVN\xd1\xd0V\xa4\xe7\\\x94\xb7\x8f\xe7\
-\x11p\xd9\xf9jS\x19\xec\xc2a\x9a\xd7\xe9\xc4\xea|\x06\x07&8~b\n\xdb\xc9^\xd4\
-\xcf\xfb\xbb\\\xee\xdd\xe2\x90wJ4\xb5\'\x10r\x82Ww\x97\x18\x1c\x94\x9f\xf3\
-\x1b\xbf4b\xe3\xc6W*kN\x9bG\x84\x80m\x9b\xbb\xb9y]/\xa9d\x11!\xe7\xba&\x9b5\
-\xc9\xccZ\x8cME\xf8\xcd\xef\x97q\xee|5eW^\xf4\xdc\xf2\xf6\x196\xad\x18\xa6\
-\xa5q\x16\xe5)|4\xba{\x13t\x9d\xa8\xa3w r\xa1\xad\x94\x8a\x95WN\xb1y\xed\x10\
-\xa9x\x81rY\xa2\xa4\xce\xdb\xefT\xb3\xbb\xb3\x91\\\xde\xe0\xf6\x9b\x87\xd9\
-\xd81E\xd9\xd7x\xe9\xf5F\x8e\x9c\xaa\xfa\x90\xd7\x80\xe5q\xe3\xfa1\xae[9\x8c\
-\xf4]\xa4\x06\xa3\x99\x08g\xcfW\xb1i\xc50 x\xe9\xf5\xa5\x1c9U}I\xcdl\xce@\
-\x08\xb8\xfd\xe6Q6tL\xe2\xfa\xf2"\xdd\xcb\xcd7\xf7\x1f}l\xea\x18\xa6\xeck\
-\xbc\xf8z\x1bGN]|\x9f\xc2\xd0\xe1\x1f\xbe\x99\xa3<0\xcc+\xdf\xef\xe3\x1b\xff\
-\xd6A\xefx\x94o?\x19\xa1\x12\xaf\xee\x89E\x8b~P\x81\xb6\xe6\x17! \x14|\xbf[\
-\\\x17l\xa72\xb6\x1d\xbf\xe8lXS\xe6\x87ON\xf3\xd4\xdf\x0e\xe2z\x82\xbf\xfe\
-\xf7E<\xf6\xcd8o\xec\xff|\xae\x12\xfc\x7f\xd1\x87\x86\x86\xe6\xdb\xc3\x02_"\
-\xae\xd9>\xc9\xf4p\x86\xe3\x87\xf2<\xf4D\x80\xee\x936\xaf\xec\\\xc4l\xb6\xf2\
-\x96W0\xb7\xdb\xbf\xc0\x02\x9f\x1b\xe1\xa0M4\x9a\xe7\x9e?\x87\xcd\xb7\xdb<\
-\xfb|\xa8b\x8b\x03@\x9fo\x03\x0b|\xb9x\xfa\xbf\x1a\t\x9auT\xc7|\x9e|F\xf2\
-\xc2/?\x9b\xdb\x91\x9f\x16\x02\xbe\xb5\xf0\r\xb2\xc0\x02\x1fC\xe5\xcem\x0b,P\
-\x01,\x14\xc8\x02\x0b|\x02\xff\x0b\xa9o\x96s\xa0\x18\xcc\xe5\x00\x00\x00\x00\
-IEND\xaeB`\x82'
-
-def getDocFactory017Bitmap():
- return wxBitmapFromImage(getDocFactory017Image())
-
-def getDocFactory017Image():
- stream = cStringIO.StringIO(getDocFactory017Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory017')
-catalog['DocFactory017'] = ImageClass()
-catalog['DocFactory017'].getData = getDocFactory017Data
-catalog['DocFactory017'].getImage = getDocFactory017Image
-catalog['DocFactory017'].getBitmap = getDocFactory017Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory018Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rd\
-IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\x8a\
-.F\x83\xc0v\x93\xd4(Z\xb8N\xdd(\x89\x1d\xc7\x88d\'\xb2d+\n\xb5Y\xd6JY\x12Iq\
-\xb9\xdc\xc9K\xde\xf5\x9c{\xce\x99\xfe\xa0#[q,\x11\x85\xadK#|~\x1e\xcc9\xef\
-\xfb}3\x1ff\xce\x0cF\xfc\xc3\xb7\x94b\x81\x05\x16\xf8\xad\xe8\xa1\xeaJ[X`\
-\x81\xf9\x8b\x1e\\(\x90\x05\x16\xf8T\xf4p\xa2\xd2\x16\xe6\x07\x02\x85\x81\
-\x8d\xc4\xbb\xe4\xb9\x8b\x81\x8by\xf5<\x08\x1b\xed7<(\xa0\xac\x02xh\x9f\x8b\
-\xae\xc4\xc7\x14%|$ee\xa1\x10\x9f\x8b\xce\x17\x11=\x14\xaf\xb4\x85\xca#\xf0i\
-(\xec!\xea^\xc0\xff\xd8\xd8\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\xed\xcc\xe8Kp\t\
-|N\x1e<\x9a\xec\xb7\xa8\xf2z.\xf1\x00\xa0[\n[\xab\xa1[\xdbF\x99\xd0g\xaa\xab\
-\xe1\xb0\xd4\xfd)\x81\xf2\x08\x9a!\x18\x93+H\xcb\x9b?S\x8d/2zx\xa1@\xb0\x18\
-\xa5I\x7f\x8e\xb3\xaf\xd72=\x18\x01\x04H\x89\xd4\x15\xe1\x9a"\x91\xfa"m+\'q\
-\xac%\xf4\x05\xff\x16\x87\xba\xcf\xdcC\x90a\x9a\x8a/s\xfa\xc7q\xa6\xd3\x01\
-\x10\x02\x84\x04 \xd6h\xb3\xe2\xc1w(\x1a\xf5Lp\xebg\xaa\x1bb\x98\x06\xfb\x87\
-\x9c\xf8a\x8a\xd8\xe2\x12-\xeb\x8eP\x08^O\x99\x85\x81\x01\xa0G\x16\xf2@H\t\
-\x12\xda\x1a\x84_Dj\x8a`\\`\x04\x04\nA)\x1fd\xf4\xb4$?\xda\xcc\xca{$\xa6\xf1\
-+\xfa\xc3\xf7]\xb2\x0c\x11\xbe\x87p\xcb\x08\xdfCI\r\xa5\x1b(\xf9\xdb\x97C\
-\xc2u\x90n\x19\xe0\x92\xb6!\xa5\x13\x16\xd7\xa2\xdc\x02R\xe3\xa2\x07\x10\xa4\
-\x96\x9a\x84B\x1d\x98\xc1&"\xf2\x93\xdf\xf1u\x13\xa5\xe9H\xa7\x08B\xe2\x1b\
-\xd6l\x81]AS\xa0\x88\xfbE\xc2\xf9\xe5HJd\xd31\xae\x8bZ\xd4\x85\xc6\xc9\xc8\
-\x8f\x06\xc6\x9c\xe2S\xea#}30\xab\xe9\x95\xf1ukV\xabl\xcf63\x03\x9f|\x07\xf0\
-\xcd\xe0%\x9e\xe7\x0bz\x959Pi\x0f\x15\xc7R\x0e\x18\x1b0\xf4w\x88\xa5\\n\xfc\
-\xa3[\xd0BAP>\xe5\xbc\xcd\xc0\x91\x1eFN\xa6\xb9p0\xc5uwEq\x8cs\x14D\x10\xa1<\
-\xccL7f\xa6\x1b\xafPB\xa0f\'\x9f@\x00;\xb5\x1c\xa7\xaa\x19>,$\xe1\x97\xb1fz0\
-&\xcf\xa3l\x07P\xb3\x13\x84\x11\xa0X{#Z\xb8\x1a\x19\xb8\x05\xcb\xda\x8d\x96r\
-\xb9\xf1\x89\xcd\x18\x91 \x00vY1iD\x90\x01I\xcc\xef\xc1\x9c:\x875\xd3\x8d\
-\xb2]\x94R`\x06\xf1\x82\xd5\x98\xc54J\x81\x13o\xa5\x94\xea\xb8\xa2fX\xe8T{3\
-\xe4\xa6V\x80\xdb\x89\xd0\xa0TX\xcd\x12k\x94!\x03J\xd2\x98[|\xca\'\x90>\x84\
-\x91K#\r\x89\x1bn@+\x8c\xe1\xdbe\x84i\xe1\xe8\xb5\xc8\xec8B\n\xec\xc5\xab\
-\xf0\xa2\xb5\x00\x18\xe9S\x18S\x03 \x14\xe5x3\xe5\xc6\xe5\x15\xe8\xfd\xcb\
-\xa3G8]i\x0f\x15\xc7\x10:\xc2\xacB\x979\xf4\xa0\xc0\x88\xa5\xc8X\x05<\xc0\n\
-\x85i\xbbc=^n\'\xb9\xe1n\n\x99kHX#\xe8\xe6\x0c\x91\xecY\xf4r\x86\xa1S\x93\
-\x8c\x1f\xcb\xe2\xb9>zP\xa7qS\x82\x86\xd8\x10\xc5\xe2"\n\xc1\xc5H\xe5\x11\
-\xc9\x9dAe\xa7\xe9\x7fg\x98\xdc\xa0\x8d\xd0\xc0\x8c\x18T\xdf\x10\xa564\x82\
-\x1d\xda\x880R\xe82\x8f\x1e\x04#\x9a\xa2\x10(\xe1\xe2\xe1\x06]\x1cF\x89\xa8!\
-\xa2\xb9.(M3|d\x9cLw\x1e\x80\xc6MI\xe2\xcd!F\x8fO\xa3\x87uj\xd6d\xc8\xf9\x0e\
-\xa1\\\xf7\xa7j\xd6\x85\'0\xab\xb60|\xe0\x0c\x83\xfb\x0e\xa0|\x0f%\x05gv\xfc\
-\x8c\xe5\x8f<@B\xeb\x07\xe7\xd8\x9c\xe2\xd3U\x89X\xe0$\xdd?O\x13\xaa\xb5H^?\
-\xccDW\x96\xf1\x133,{0I\xc8\xfb\x11}\xbf\x0c\x13owHT\xbd\x8d\x1d\xd9\x8e\xf4\
-\xb2\x04\xdc\x97I\x1f\rbVy\xc4;\x04\x8e\xfa\x13\x940*;\x18~\x03=\xcc\xbeJ{\
-\xa88\x1aI\x04w\xa23\x89\x10\x02\xa1B\x98\xfc\x12\x8fI\x94&\xf1\xbc\xdbX\xb4\
-\xb6\x83\x9e\x9d\xff\x81=6D,\x15#Q\x1eA\x14\x1a8\xfb\x83\x83\x14\xc6F\t\xc4c\
-H\xd3\xc4\xc9O1\xbc7M1\xddF\xcbWWb\x98\xa7\xd0\x9d$\x9a\xddB\xd7\x8f\x7f@ql\
-\x143\x1a\xc1\x08\x87A8\xe4{\\\x1aWoA\xf3\x07\x10\xb4\xa03\x81g\x17\xb1\'\
-\xa61\x82\x16\xa6\xd0\xd0\x021J\xfa\x01\xf0r\x04\xdc6\xce\xbc\xfa\n\xf9\xe1a\
-\x02\x898\xd2\xb2\x18?t\x81\xd1\xfd6\xbe[&T_Op\xd3\x9d\xe8v\x06y9\xcd5w\xa2\
-\x14\x04\xab"T\xd5J\xf2#}\x08)\t\xc7\x97\xa0\x07b\x18*\x8d?\xa7\xf8N\xa2\xa4\
-\x87i\xac\xc5\x9f\xeeb\xf4\xfc\x18S\xef\x87\x08V\'Y\xbc\xbe\x95\xaa\x9a\xe5\
-\xe0\x841\xfc\xe3\xe4?\xd0X\xbc\xaa\x85\x82w\x08Y\xf2\xd1\xb5\x0e\xca\xa3\
-\xc7\x89\xd7\xd4\x11\xafj \xcf\x01\xe6\xdb\xa9\xb5\x1ebO\xa5=T\x1c\xc1\x12\
-\x04\xf7\xa2\x8bq\x84\x04!\x82\x04x\x0fE/\x00R\xb3\tV?@\xc0\x1a\xc2\x1e?\x8c\
-\xc6j\x0c\xd1A\xdf\xbe\x17)\x8f\x1df\xf1\xad\xdb\xa9\xbby\x1b\xa82n\xb1\xc8\
-\xc0\xae\x7f\xa7\xd0\xbb\x9bBz%\x91\xf6E\xe0\xd70\xb0\xf7\x7fq\'\xde\xa7\xe5\
-\x8e\xc7Htl@\x06|4-\x8e\xe7\x14Q\xfa$\xa6\xde\x89p\xb7\xa0\x8b1\xdc\xec9\xce\
-\xff\xf73HS"4I\xe3\xe6\xa7\x89.[\x86\xf2\xb2d\xcet\xe1\x8c\x1ea\xf1m\x0fQw\
-\xf36\x84\xee\xe3\xdb0\xf8\xd6\x8bL\x9f\xdd\x8f\xa1k\x08\xb3\x1e\xdd\x8d2\
-\xb0\xf7\xe5\xcbj*k\x17\xb1k\xef"\xd6\xf64\xe7^z\x06\xa1{\xb4\xdf\xff\x14\
-\xc2\x9aDju\xf4\xed\xfb\xc9\x95\xe3k\xabGY;\x11\xe6\x16t9\x85)\x87h\xd9\xfa\
-\x17\xc4\xdaW\xe1\x8b^T\xe0=\xc8-\xa3~\x9dI\xdf\x1b\xffCi\xfa\xab\x04\x83E\
-\x94\x97d\xaa\xa7\x0b\x9d!R+\x1e\x81P?A\xf1&\xcc\xb3\x12\xd1\x03\xa3\xf3\xef\
-\xc7\xe8\xaa\xa3kx\x81\x08\x9a-\x91R\x80\x1f\xc1\x9a\xd4\xc0\x9d\xcd\x8d\xb2\
-\xe2\xb8~\x18\xb3$0\xbd0B\xc5\xa0\xecc\xf7\xf6\x11\n6R\xb7\xe1Q\xb4\xf2N\xa4\
-w\x10i>D\xdd\xda\x87\x19\xe8>E\xa9\xa7\x87\xd8\xd2\xc7\xf1<\x81\xdd}\x9eP\
-\xa0\x8e\x9a5\x0f!\xdd\x1f!\x0b\xfb@&\xd0\x84\x0e\xce\x14\x94\x92x&h%\xd0\
-\x8b`\x85\x12\xe8V\x14ihX\xc1\x14\x9a\xeb\xa2d+\x99\xce\x7f#\x14\xa8\xa7n\
-\xfdvt\xe7\xa7\x88\xd21|\xebIjV\xdeG\xf1\xd4AtGG\xa8\x04x\x81+k\xe6f@\xcf\
-\xe0Y\xdf\xc0T\x11\xa4\x12hz\x15\x9a\xfd\n\x9e\xf1\xe4\x9c\xe2\xabj\xd9\x8eV\
-\xd8\x8bg\xc5\xd0l\x8dPx1\xb1\xd6-\xe8\xcew\xc09\x06Y\x0f\xa5\x97\xa8Z\xb6\
-\x95\x80\xf5&\x93\x9d\x87h\xda\xfe\xe7x~\x9e\xec\xd1\x97H4\xad\xc6L.E\xe6wA\
-\x16\x98gg0:\xbb\x97V\xdaC\xe5\x89\xd5\xc2\xc6\x11\xc4p\x10$`\x8f\xc0\x81Z\
-\x98V`X\xa8\r\x1b(\xf5\xbd\x87:\x1d\xc2joENO\xe0\x89\x14\xdeY\x81\x1ek\x84B\
-\x00yh\x10\nA\xb4\xc64V\xc3mh\xc3\x8d0\x16C\x15\x12\xa8b\x11\xf7\x030\x12\
-\xf5\xf83\x06\xfa\x91\t(||\xab\xb8\x1ab5\xb0.\x8d\x18\x0e`9\xed\xb4n\xff+\
-\xb4h\x04|\x1f\x7f|\x10y\xec\x1cN\xf3"\x9c\x93%\x8cd#\xa2\x9c@\x1c\x98\x86\\\
-\x10\xd92\x80Q\x7f\x13\xdaP=\xc2K\x82\x97@\xe5\xd4\x955\x7f\xad\xbb~\x109\
-\x1c@H\x01\xa54t%\xf1\x97\xca9\xc5G>\x01\xc7\x9a`C\x1c\x86c\xb3KT?\x05\x9d\
-\x11\xc84\x03 \x02e\xe4\xcdQ"\xf1\x9b\xc9\xee}\x0f\xfb\xa6\x02v:M\xf9\xb8K\
-\xfdm\xf7\xc2p\x1e\x0e\x04\xc0\x9f\x7fcQ\x1f|\xee\xc9J{\xa88F\xab \xd11N\xe1\
-\xf4\x12$\x1a~~\x92\xe9\xfd[A*\xcc\xb5>z\xd6e\xf0\xdbC\x14\xce\xdcB\xcd\x03\
-\x8d\x14\x8f\xda\x98\xab\xf2\xa8\xd2&\xb2g3x\xd9)\x9c\xd0\xe3\xd8\xef\xbb\
-\x84\x96Y\xcct\xf63\xbd\xa7\x83`C\x03\xfe\xd4\x14"\x04\x94o%\xb3g\x04\xe7\
-\xd1\x11J\xea\x0f\xb0\xf7\xb8\xe8M:\xc65\x1a\xf6\x912^\xbaHb\xf9\xe8\xac\x07\
-\xa1\x81(\x90\xf9g\x81\xdb/p\x07k\xd0\x1a\x1aH\xfe}\t/\xb3\x9eBW\x8e\xf2\xc4\
-0N\xe0\x11\x8a\xfbm\xc2\xcb\x02\xcc\xec\xebazO\x07\xa1kR\xf8\x854B\xfaW\xd4,\
-\xed\xb31\x96\xf8$\xae\x1f\'\x7f\xa2\x1d\x81\xc4\xcf\x8f\x91y}\x1dUO\x17\xe6\
-\x14\x9f;\x9eer\xc7\x97\x89\xdf0D\xa1\xabiv\x9b7?\xcc\xc4\xf7\xef\xa2\xdc]\
-\xbe\x98\xe3P_\x80\xd8\xda\x87\x19|~\x86S\x7f\xb6\x13Ut\xb1\x1a\xee\xc2Z\xbc\
-\x91\xcc\xb7\x87(\xfe\xe2\x0f+7\x00.\x83\xfe\xea\x9a\x8d\x95\xf6Pq\xaa\xebg\
-\xb8\x97\xbd\\HU\xe3\x14%\xb5\x83\x83p\xbfE~\x12\xb2\xc3\x0e\xdd\xdf\xb2\xc9\
-\xe4R\\\xf7\xc7\xf5\x18\xcb\xcb\xbc\xb5\xa3\x99\x1bb\xfdD\x9fh\xe7\xe8?\x9ee\
-\xf8\xd9\xbd\xb4\xdd\xb9\x08\xb9:H\xe9d\x9e3of(\xb6\xb6S\xb79NW\xafC"\x95%\
-\xfcX\x1bG\xfe\xc9g\xec\xbb\x9d\xb4\xddQ\x8f\xba+\x8an\x81n\xb8$\xbf\x16\xe1\
-\xe0\xaeVn\x97\xbb\xb8\x90J\x82\xd4hg\x907#\xf71\x91LB\x12\xa4\xa6\xf8J\xdfA\
-\xf4\x07Z9\xfa\xbd>\n\xdf?H\xe3\xfaZ\xfc\x8d&\x03\x1fj\xe6\x9a\xdaH\xd6Y\xb4\
-\xba}d\xa7\x8c+j\xbe\x13]\x8d\xc0\xe6^\xf1\x1a=5\xd5(i\xd0*\xd2\xfc"\xb9\x86\
-5\xbd\xbds\x8bo\xc0\xe5\xcc\xd2e\xdc\xa3\x0e\xd1\x97\x8c!\xa4\xe4Z\xd5\xcf\
-\xee\xeb\xd63\x11\x0f_\xccqlF\xb0\xad\xd9e\xf2\xf6\xf5\x8c\x9c\x1c\x82\x90\
-\xce\xda\x8773\x9d\xab\xe2U\'\x8e\xbdf~\xfd{\xfc\x1a\xfd\x8c_\xa8\xb4\x87\
-\x8a\xd3\xe8Oc\xdb\xbd\x8c;%&\xc6t\xfa\xbf\x99\x06M\xc7v\x0c\x94\xd0@H\x96\
-\xacp\xe9\xf8\xfd<\x87\x8f\xb5\xf1vO\x88Q=\xcc\x13\x0f\x8e\xb2x\xab\xc1\xd1\
-\x9f\xe58\xfd\xfcy\x94\xd4\xf0\x85A8!Yq\x8f\xc4\xac\x19\xe1\xf5\x1d+h\xac\
-\xf5yx\xdb\x18u_\xd28\xb3?\xcf\xe9\x17z/\xb6\xadn\x92\xdc\xf77\x06\xe3Z\x10\
-\xbbt\x8e\xf1r\x18+*q\xecQ\xce\x97s\x8c\xf8\x1f\x1e\xac\xf9\xe0v&xt[\x8e\xf0\
-*\xc9\x91}\xe3\x1c|7\x83\x92\x1a\xd1Z\x83E\xd7I\x86J\x92`$\x8f]<\xcf\xbbGW\
-\xf1{\x9b/\xaf9\xa47\xe18>\xa5B7\xc3v5\xc1\x98C\xd9\x1e\xe7l)\xcf\xf4\xb1\
-\xb9\xc5\xf7\xc6\x8e\x15H9\x8dS:\xcb\xa4S\xc0\xaa2(\xdb\xe78_\xbe\x96\x11\
-\xffc\x87\x95c\xd0tz\x86\xba\xcdM\x9c<5H(a\xd2\xb01B\xe7{\x93\x1c\xcb\x05+\
-\xd4\xf3WF\x1f\x18X8(\xccg\xf3\x94\xf2\xdd\xb4\xdf$(w\x86\xb0\x1d\x03_\xe8D\
-\x12\x92\xdaf\x87\x96\xe56\xcd\xcbK\xec\xebl\xe3\xa5W\x9b(\x96\xd2\xa4\x07\
-\x15\xd2\x0br\xff\xd6#T\xb7\x1a\x9c;\x1c\xa4\x98\xd3\xb0\xa2\x82\x1b\xbf\x9c\
-%\\\r/\xfc\xd7=\x1c\xef\xcab\xe8\x1a\xca\xd6y\xf0\xf1.\xae\xb9E\xe3\xf8\xde\
-\x08S\xe3\x16\xb1z\xc5\xaa/e\xe9\xe9Mq\xf0\xc82\xbe\xb2\xb6\x9b%\xab#T\xd5\
-\xfa\xa4\x07,N\x9c\x9a\xc1vJ\x17}\xa6\xd3\x8a\xea\x08l}\xea,\x17\x8e\x078\
-\xf9n\x08\xcd\x14\xac\xdb\x9a\xa5\xf9\x9a<\x07v%\x89&=\xce\x9f\xabb\xc7\xeb\
-\x1b\xc9N^A\xf3p\x8eXU\x96b\xa1\x87\x96\x95\x934\xb4\x15\xe9>\x1f\xe5\xfd\
-\x13y\x04\xcc9\xbe\xdaT\x06\xbbp\x84\xe6u:\xb1:\x9f\x81\xfeqN\x9c\x9c\xc4v\
-\xb2\x97\xe4y\xffA\x97\x07\xb78\xe4\x9d\x12M\xed\t\x84\x1c\xe7\xcd\xdd%\x06\
-\x06\xe4U\xee\xf1\xb9#6n|c~\xcemW\x11!`\xdb\xe6.n_\xd7C*YD\xc8\xd9\x94d\xb3&\
-\x99\x19\x8b\xd1\xc9\x08?\xff\xd52\xce_\xa8\xa6\xec\xcaK\xde[\xde>\xcd\xa6\
-\x15C\xb44\xce\xa0<\x85\x8fFWO\x82\x83\'\xeb\xe8\xe9\x8f\\l+\xa5b\xe5\xb5\
-\x93l^;H*^\xa0\\\x96(\xa9\xf3\xfe\x07\xd5\xec\xeel$\x977\xb8\xfb\xf6!6vLR\
-\xf65^{\xbb\x91\xa3\xa7\xab>\xe15`y\xdc\xba~\x94\x9bV\x0e!}\x17\xa9\xc1H&\
-\xc2\xb9\x0bUlZ1\x04\x08^{{)GOW_Q3\x9b3\x10\x02\xee\xbe}\x84\r\x1d\x13\xb8\
-\xbe\xbcDw\xae\xf1\xcd~\xa3\x97M\x1dC\x94}\x8dW\xdfn\xe3\xe8\xe9K\xefQ\x18:\
-\xfc\xdd\xd7s\x94\xfb\x87x\xe3;\xbd|\xed_:\xe8\x19\x8b\xf2\xcdg#\xcc\xe7+{b\
-\xd1\xa2\xef\xcec{W\x17! \x14\xfc(\x1d\xae\x0b\xb63\xbf\xb6\x1d\xbf\xa8lXS\
-\xe6{\xcfN\xf1\xdc_\x0f\xe0z\x82\xbf\xfc\xd7E<\xf5\xf58\xef\xec\xbf:W\t\xfe\
-\xbf\xe8\x83\x83\x83\x95\xf6\xb0\xc0\xef\x007l\x9f`j(\xc3\x89\xc3y\x1e{&@\
-\xd7)\x9b7v.b&;\x7f\x97W0\xbb\xeb\xbf\xc0\x02\x9f;\xe1\xa0M4\x9a\xe7\x81?\
-\x85\xcdw\xdb\xbc\xf8rh\xde\x17\x07\x80^i\x03\x0b\xfcn\xf0\xfc\x7f6\x124\xeb\
-\xa8\x8e\xf9<\xfb\x82\xe4\x95\x9f|>\xb7#?k\x04|c\xe1\x1fd\x81\x05>\x85\xf9?\
-\xc7-\xb0@\x05Y(\x90\x05\x16\xb8\x0c\xff\x07\x8e\x03\x96sM\x85\xe7\xa0\x00\
-\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory018Bitmap():
- return wxBitmapFromImage(getDocFactory018Image())
-
-def getDocFactory018Image():
- stream = cStringIO.StringIO(getDocFactory018Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory018')
-catalog['DocFactory018'] = ImageClass()
-catalog['DocFactory018'].getData = getDocFactory018Data
-catalog['DocFactory018'].getImage = getDocFactory018Image
-catalog['DocFactory018'].getBitmap = getDocFactory018Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory019Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rj\
-IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\x8a\
-.F\x83\xc0v\x93\xd4(Z\xb8N\xdd(\x89\x1d\xc7\x88d\'\xb2d+\n\xb5Y\xd6JY\x12Iq\
-\xb9\xdc\xc9K\xde\xf5\x9c{\xce\x99\xfe\xa0#[\xf5"\x16\xb5|%\x9b\xcf\xcf\x839\
-\xe7}\xbfo\xe6\xc3\xcc\x99\xc1\x88\xbf\xfb\x8eR\xcc3\xcf<\x1f\x8b\x1e\xaa\
-\xae\xb4\x85y\xe6\xb9|\xd1\x83\xf3\x052\xcf<\x9f\x88\x1eNT\xdaBe\x11(\x0cl$\
-\xde\x05\xcf]\x0c\\\xcc\xcf\xcf\x83\xb0\xd1\xfe\x97\x07\x05\x94U\x00\x0f\xed\
-\x92\xe8J|LQ\xc2GRV\x16\nqIt\xaed\xf4P\xbc\xd2\x16*\x87\xc0\xa7\xa1\xb0\x8b\
-\xa8{\x0e\xffCcSJ\x90\xa6N\xde\x8d\x93\x0b\xb63\xa3/\xc2%p\x89<x4\xd9oP\xe5\
-\xf5\\\xe0\x01@\xb7\x14\xb6VC\xb7\xb6\x852\xa1\xcfTW\xc3a\xb1\xfbs\x02\xe5\
-\x114C0&\x97\x91\x967~\xa6\x1a_\x04\xf4\xf0\x97\xb8@,Fi\xd2\x9f\xe1\xf4\xab\
-\xb5L\x0fF\x00\x01R"uE\xb8\xa6H\xa4\xbeH\xdb\xf2I\x1ck\x11}\xc1\xbf\xc6\xa1\
-\xee3\xf7\x10d\x98\xa6\xe2\x8b\x9c\xfci\x9c\xe9t\x00\x84\x00!\x01\x885\xda,\
-\xbb\xff-\x8aF=\x13\xdc\xfc\x99\xea\x86\x18\xa6\xc1\xfe1\xc7~\x9c"\xb6\xb0D\
-\xcb\x9aC\x14\x82\xd7R\xe6K< >\x06=\xf2%\xceGH\t\x12\xda*\x84_Dj\x8a`\\`\x04\
-\x04\nA)\x1fd\xf4\xa4$?\xda\xcc\xf2\xbb$\xa6\xf1\x1b\xfa\xc3\xf7\\\xb0\x0c\
-\x11\xbe\x87p\xcb\x08\xdfCI\r\xa5\x1b(\xf9\xf1\xcb!\xe1:H\xb7\x0cpA\xdb\x90\
-\xd2\t\x8b\xabQn\x01\xa9q\xde\x03\x08R\x8bMB\xa1\x0e\xcc`\x13\x11\xf9\xd1\
-\xef\xf8\xba\x89\xd2t\xa4S\x04!\xf1\rk\xb6\xc0.\xa2)P\xc4\xfd"\xe1\xfcR$%\
-\xb2\xe9\x18\xd7D-\xeaB\xe3d\xe4\x07\x03bN\xf1)\xf5\x81\xbe\x19\x98\xd5\xf4\
-\xca\xf8\xba5\xabU\xb6g\x9b\x99\x81\x8f\xbe\x03\xf8f\xf0\x02\xcf\x97\x1bz\
-\x959Pi\x0f\x15\xc3R\x0e\x18\xeb0\xf4\xb7\x88\xa5\\\xae\xff\x83\x9b\xd0BAP>\
-\xe5\xbc\xcd\xc0\xa1\x1eF\x8e\xa79\xb7?\xc55wDq\x8c3\x14D\x10\xa1<\xccL7f\
-\xa6\x1b\xafPB\xa0f\'\x9f@\x00;\xb5\x14\xa7\xaa\x19\xde/$\xe1\x97\xb1fz0&\
-\xcf\xa2l\x07P\xb3\x13\x84\x11\xa0X{=Z\xb8\x1a\x19\xb8\t\xcb\xda\x89\x96r\
-\xb9\xfe\xb1\x8d\x18\x91 \x00vY1iD\x90\x01I\xcc\xef\xc1\x9c:\x835\xd3\x8d\
-\xb2]\x94R`\x06\xf1\x82\xd5\x98\xc54J\x81\x13o\xa5\x94\xea\xb8\xa8fX\xe8T{3\
-\xe4\xa6\x96\x81\xdb\x89\xd0\xa0TX\xc9"k\x94!\x03J\xd2\x98[|\xca\'\x90>\x80\
-\x91K#\r\x89\x1bn@+\x8c\xe1\xdbe\x84i\xe1\xe8\xb5\xc8\xec8B\n\xec\x85+\xf0\
-\xa2\xb5\x00\x18\xe9\x13\x18S\x03 \x14\xe5x3\xe5\xc6\xa5\x15\xe8\xfd\xb9\xa1\
-G8Yi\x0f\x15\xc3\x10:\xc2\xacB\x979\xf4\xa0\xc0\x88\xa5\xc8X\x05<\xc0\n\x85i\
-\xbbm-^n;\xb9\xe1n\n\x99\xabHX#\xe8\xe6\x0c\x91\xeci\xf4r\x86\xa1\x13\x93\
-\x8c\x1f\xc9\xe2\xb9>zP\xa7qC\x82\x86\xd8\x10\xc5\xe2\x02\n\xc1\x85H\xe5\x11\
-\xc9\x9dBe\xa7\xe9\x7fk\x98\xdc\xa0\x8d\xd0\xc0\x8c\x18T_\x17\xa564\x82\x1dZ\
-\x8f0R\xe82\x8f\x1e\x04#\x9a\xa2\x10(\xe1\xe2\xe1\x06]\x1cF\x89\xa8!\xa2\xb9\
-.(M3|h\x9cLw\x1e\x80\xc6\rI\xe2\xcd!F\x8fN\xa3\x87ujVe\xc8\xf9\x0e\xa1\\\xf7\
-\'j\xd6\x85\'0\xab61\xbc\xef\x14\x83{\xf6\xa1|\x0f%\x05\xa7\xb6\xfd\x82\xa5\
-\x0f\xddGB\xeb\x07\xe7\xc8\x9c\xe2\xd3U\x89X\xe08\xdd\xbfL\x13\xaa\xb5H^;\
-\xccDW\x96\xf1c3,\xb9?I\xc8\xfb\t}\xbf\x0e\x13owHT\xbd\x89\x1d\xd9\x8a\xf4\
-\xb2\x04\xdc\x17I\x1f\x0ebVy\xc4;\x04\x8e\xfa#\x940*;\x18>\x01=\xcc\x9eJ{\
-\xa8\x18\x1aI\x04\xb7\xa33\x89\x10\x02\xa1B\x98\xfc\x1a\x8fI\x94&\xf1\xbc[X\
-\xb0\xba\x83\x9e\xed\xff\x86=6D,\x15#Q\x1eA\x14\x1a8\xfd\xa3\xfd\x14\xc6F\t\
-\xc4cH\xd3\xc4\xc9O1\xbc;M1\xddF\xcb\xd7\x97c\x98\'\xd0\x9d$\x9a\xddB\xd7O\
-\x7fDql\x143\x1a\xc1\x08\x87A8\xe4{\\\x1aWnB\xf3\x07\x10\xb4\xa03\x81g\x17\
-\xb1\'\xa61\x82\x16\xa6\xd0\xd0\x021J\xfa>\xf0r\x04\xdc6N\xbd\xfc\x12\xf9\
-\xe1a\x02\x898\xd2\xb2\x18?p\x8e\xd1\xbd6\xbe[&T_Op\xc3\xed\xe8v\x06\xf9i\
-\x9a\xabnG)\x08VE\xa8\xaa\x95\xe4G\xfa\x10R\x12\x8e/B\x0f\xc40T\x1a\x7fN\xf1\
-\x1dGI\x0f\xd3X\x8d?\xdd\xc5\xe8\xd91\xa6\xde\r\x11\xacN\xb2pm+U5K\xc1\tc\
-\xf8G\xc9\xbf\xa7\xb1pE\x0b\x05\xef\x00\xb2\xe4\xa3k\x1d\x94G\x8f\x12\xaf\
-\xa9#^\xd5@\x9e}\\\xae\xa7\xd5z\x88]\x95\xf6P1\x04\x8b\x10\xdc\x8d.\xc6\x11\
-\x12\x84\x08\x12\xe0\x1d\x14\xbd\x00H\xcd&X}\x1f\x01k\x08{\xfc \x1a+1D\x07}{\
-\x9e\xa7<v\x90\x857o\xa5\xee\xc6-\xa0\xca\xb8\xc5"\x03;\xfe\x95B\xefN\n\xe9\
-\xe5D\xda\x17\x80_\xc3\xc0\xee\xff\xc6\x9dx\x97\x96\xdb\x1e!\xd1\xb1\x0e\x19\
-\xf0\xd1\xb48\x9eSD\xe9\x93\x98z\'\xc2\xdd\x84.\xc6p\xb3g8\xfb\x9fO!M\x89\
-\xd0$\x8d\x1b\x9f$\xbad\t\xca\xcb\x929\xd5\x853z\x88\x85\xb7<@\xdd\x8d[\x10\
-\xba\x8fo\xc3\xe0\x1b\xcf3}z/\x86\xae!\xcczt7\xca\xc0\xee\x17?USY;\x88]}\x07\
-\xb1\xb6\'9\xf3\xc2S\x08\xdd\xa3\xfd\xde\'\x10\xd6$R\xab\xa3o\xcf\xcf.\x1e_[\
-=\xca\xda\x8e07\xa1\xcb)L9D\xcb\xe6?#\xd6\xbe\x02_\xf4\xa2\x02\xef@n\t\xf5kL\
-\xfa^\xfb/J\xd3_\'\x18,\xa2\xbc$S=]\xe8\x0c\x91Z\xf6\x10\x84\xfa\t\x8a\xd7\
-\xe12-\x11=0z\xf9\xfe ]rt\r/\x10A\xb3%R\n\xf0#X\x93\x1a\xb8\xb39QV\x1c\xd7\
-\x0fc\x96\x04\xa6\x17F\xa8\x18\x94}\xec\xde>B\xc1F\xea\xd6=\x8cV\xde\x8e\xf4\
-\xf6#\xcd\x07\xa8[\xfd \x03\xdd\'(\xf5\xf4\x10[\xfc(\x9e\'\xb0\xbb\xcf\x12\n\
-\xd4Q\xb3\xea\x01\xa4\xfb\x13da\x0f\xc8\x04\x9a\xd0\xc1\x99\x82R\x12\xcf\x04\
-\xad\x04z\x11\xacP\x02\xdd\x8a"\r\r+\x98Bs]\x94l%\xd3\xf9/\x84\x02\xf5\xd4\
-\xad\xdd\x8a\xee\xfc\x1cQ:\x82o=N\xcd\xf2{(\x9e\xd8\x8f\xee\xe8\x08\x95\x00/\
-pq\xcd\xdc\x0c\xe8\x19<\xeb[\x98*\x82T\x02M\xafB\xb3_\xc23\x1e\x9fS|U-[\xd1\
-\n\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xba\t\xdd\xf9\x1e8G \xeb\xa1\xf4\x12U\
-K6\x13\xb0^g\xb2\xf3\x00M[\xff\x14\xcf\xcf\x93=\xfc\x02\x89\xa6\x95\x98\xc9\
-\xc5\xc8\xfc\x0e\xc8\x02\x97\xe9\x19\x8c\xce\xce\xc5\x95\xf6P9b\xb5\xb0~\x04\
-1\x1c\x04\t\xd8#\xb0\xaf\x16\xa6\x15\x18\x16j\xdd:J}\xef\xa0N\x86\xb0\xda[\
-\x91\xd3\x13x"\x85wZ\xa0\xc7\x1a\xa1\x10@\x1e\x18\x84B\x10\xad1\x8d\xd5p\x0b\
-\xdap#\x8c\xc5P\x85\x04\xaaX\xc4}\x0f\x8cD=\xfe\x8c\x81~h\x02\n\x1f\xde*\xae\
-\x86X\r\xacI#\x86\x03XN;\xad[\xff\x02-\x1a\x01\xdf\xc7\x1f\x1fD\x1e9\x83\xd3\
-\xbc\x00\xe7x\t#\xd9\x88(\'\x10\xfb\xa6!\x17D\xb6\x0c`\xd4\xdf\x806T\x8f\xf0\
-\x92\xe0%P9uq\xcd\xdf\xea\xae\x1dD\x0e\x07\x10R@)\r]I\xfc\xc5rN\xf1\x91O\xc0\
-\x91&X\x17\x87\xe1\xd8\xec\x12\xd5OAg\x042\xcd\x00\x88@\x19yc\x94H\xfcF\xb2\
-\xbb\xdf\xc1\xbe\xa1\x80\x9dNS>\xeaR\x7f\xcb\xdd0\x9c\x87}\x01\xf0/\xdf1\xa8\
-\x0f>\xf3x\xa5=T\x0c\xa3U\x90\xe8\x18\xa7pr\x11\x12\r??\xc9\xf4\xde\xcd \x15\
-\xe6j\x1f=\xeb2\xf8\xdd!\n\xa7n\xa2\xe6\xbeF\x8a\x87m\xcc\x15yTi\x03\xd9\xd3\
-\x19\xbc\xec\x14N\xe8Q\xecw]BK,f:\xfb\x99\xde\xd5A\xb0\xa1\x01\x7fj\n\x11\
-\x02\xca7\x93\xd95\x82\xf3\xf0\x08%\xf5{\xd8\xbb\\\xf4&\x1d\xe3*\r\xfbP\x19/\
-]$\xb1tt\xd6\x83\xd0@\x14\xc8\xfc\xa3\xc0\xed\x17\xb8\x835h\r\r$\xff\xb6\x84\
-\x97YK\xa1+Gyb\x18\'\xf0\x10\xc5\xbd6\xe1%\x01f\xf6\xf40\xbd\xab\x83\xd0U)\
-\xfcB\x1a!\xfd\x8bj\x96\xf6\xd8\x18\x8b|\x12\xd7\x8e\x93?\xd6\x8e@\xe2\xe7\
-\xc7\xc8\xbc\xba\x86\xaa\'\x0bs\x8a\xcf\x1d\xcf2\xb9\xed\xab\xc4\xaf\x1b\xa2\
-\xd0\xd54\xbb\xcd\x9b\x1ff\xe2\x87wP\xee.\x9f\xcfq\xa8/@l\xf5\x83\x0c>;\xc3\
-\x89?\xd9\x8e*\xbaX\rw`-\\O\xe6\xbbC\x14\x7f\xf5\xfb\x95\x1b\x00s@\x7fy\xd5\
-\xfaJ{\xa8\x18\xd5\xf53\xdc\xcdn\xce\xa5\xaaq\x8a\x92\xda\xc1A\xb8\xd7"?\t\
-\xd9a\x87\xee\xef\xd8dr)\xae\xf9\xc3z\x8c\xa5e\xde\xd8\xd6\xccu\xb1~\xa2\x8f\
-\xb5s\xf8\xefO3\xfc\xf4n\xdan_\x80\\\x19\xa4t<\xcf\xa9\xd73\x14[\xdb\xa9\xdb\
-\x18\xa7\xab\xd7!\x91\xca\x12~\xa4\x8dC\xff\xe03\xf6\xfdN\xdan\xabG\xdd\x11E\
-\xb7@7\\\x92\xdf\x88\xb0\x7fG+\xb7\xca\x1d\x9cK%Aj\xb43\xc8\xeb\x91{\x98H&!\
-\tRS|\xado?\xfa}\xad\x1c\xfeA\x1f\x85\x1f\xee\xa7qm-\xfez\x93\x81\xf75sMm$\
-\xeb,Z\xdd>\xb2S\xc6E5\xdf\x8a\xaeD`s\xb7x\x85\x9e\x9aj\x944h\x15i~\x95\\\
-\xc5\xaa\xde\xde\xb9\xc57\xe0rj\xf1\x12\xeeR\x07\xe8K\xc6\x10Rr\xb5\xeag\xe7\
-5k\x99\x88\x87\xcf\xe786#\xd8\xd2\xec2y\xebZF\x8e\x0fAHg\xf5\x83\x1b\x99\xce\
-U\xf1\xb2\x13\xc7^uy\xfe{\xfc\x16\xfd\x94_\xa8\xb4\x87\x8a\xd1\xe8Oc\xdb\xbd\
-\x8c;%&\xc6t\xfa\xbf\x9d\x06M\xc7v\x0c\x94\xd0@H\x16-s\xe9\xf8\xdd<\x07\x8f\
-\xb4\xf1fO\x88Q=\xccc\xf7\x8f\xb2p\xb3\xc1\xe1_\xe48\xf9\xecY\x94\xd4\xf0\
-\x85A8!Yv\x97\xc4\xac\x19\xe1\xd5m\xcbh\xac\xf5yp\xcb\x18u_\xd18\xb57\xcf\
-\xc9\xe7z\xcf\xb7\xadn\x92\xdc\xf3W\x06\xe3Z\x10\xbbt\x86\xf1r\x18+*q\xecQ\
-\xce\x96s\x8c\xf8\xef\x1f\xac\xf9\xe0v&xxK\x8e\xf0\n\xc9\xa1=\xe3\xec\x7f;\
-\x83\x92\x1a\xd1Z\x83\x05\xd7H\x86J\x92`$\x8f]<\xcb\xdb\x87W\xf0;\x1b?]sHo\
-\xc2q|J\x85n\x86\xedj\x821\x87\xb2=\xce\xe9R\x9e\xe9#s\x8b\xef\xb5m\xcb\x90r\
-\x1a\xa7t\x9aI\xa7\x80UeP\xb6\xcfp\xb6|5#\xfe\x87\x0e+\xc7\xa0\xe9\xe4\x0cu\
-\x1b\x9b8~b\x90P\xc2\xa4a}\x84\xcew&9\x92\x0bV\xa8\xe7\xe7\x8e>0\xf0\xe5=(\
-\xccg\xf3\x94\xf2\xdd\xb4\xdf (w\x86\xb0\x1d\x03_\xe8D\x12\x92\xdaf\x87\x96\
-\xa56\xcdKK\xec\xe9l\xe3\x85\x97\x9b(\x96\xd2\xa4\x07\x15\xd2\x0br\xef\xe6CT\
-\xb7\x1a\x9c9\x18\xa4\x98\xd3\xb0\xa2\x82\xeb\xbf\x9a%\\\r\xcf\xfd\xc7]\x1c\
-\xed\xcab\xe8\x1a\xca\xd6\xb9\xff\xd1.\xae\xbaI\xe3\xe8\xee\x08S\xe3\x16\xb1\
-z\xc5\x8a\xafd\xe9\xe9M\xb1\xff\xd0\x12\xbe\xb6\xba\x9bE+#T\xd5\xfa\xa4\x07,\
-\x8e\x9d\x98\xc1vJ\xe7}\xa6\xd3\x8a\xea\x08l~\xe24\xe7\x8e\x068\xfev\x08\xcd\
-\x14\xac\xd9\x9c\xa5\xf9\xaa<\xfbv$\x89&=\xce\x9e\xa9b\xdb\xab\xeb\xc9N^D\
-\xf3`\x8eXU\x96b\xa1\x87\x96\xe5\x934\xb4\x15\xe9>\x1b\xe5\xddcy\x04\xcc9\
-\xbe\xdaT\x06\xbbp\x88\xe65:\xb1:\x9f\x81\xfeq\x8e\x1d\x9f\xc4v\xb2\x17\xe4y\
-\xef~\x97\xfb79\xe4\x9d\x12M\xed\t\x84\x1c\xe7\xf5\x9d%\x06\x06\xe4\xe7\xdc\
-\xe3\xffw\xc4\xfa\xf5\xaf]\xdes\xdc%D\x08\xd8\xb2\xb1\x8b[\xd7\xf4\x90J\x16\
-\x11r6\x15\xd9\xacIf\xc6bt2\xc2/\x7f\xb3\x84\xb3\xe7\xaa)\xbb\xf2\x82\xf7\
-\x96\xb6O\xb3a\xd9\x10-\x8d3(O\xe1\xa3\xd1\xd5\x93`\xff\xf1:z\xfa#\xe7\xdbJ\
-\xa9X~\xf5$\x1bW\x0f\x92\x8a\x17(\x97%J\xea\xbc\xfb^5;;\x1b\xc9\xe5\r\xee\
-\xbcu\x88\xf5\x1d\x93\x94}\x8dW\xdel\xe4\xf0\xc9\xaa\x8fx\rX\x1e7\xaf\x1d\
-\xe5\x86\xe5CH\xdfEj0\x92\x89p\xe6\\\x15\x1b\x96\r\x01\x82W\xde\\\xcc\xe1\
-\x93\xd5\x17\xd5\xcc\xe6\x0c\x84\x80;o\x1da]\xc7\x04\xae//\xd0\x9dk|\xb3\xdf\
-\xe8eC\xc7\x10e_\xe3\xe57\xdb8|\xf2\xc2\xfb\x13\x86\x0e\x7f\xf3\xcd\x1c\xe5\
-\xfe!^\xfb^/\xdf\xf8\xa7\x0ez\xc6\xa2|\xfb\xe9\x08W\xc2U=\xb1`\xc1\xf7\xaf\
-\x00\x9b\x97\x16! \x14\xfc \r\xae\x0b\xb6syn;^i\xac[U\xe6\x07OO\xf1\xcc_\x0e\
-\xe0z\x82?\xff\xe7\x05<\xf1\xcd8o\xed\xfd|\xae\x12\xfc\x7f\xd1\x07\x07\x07+\
-\xeda\x9e/0\xd7m\x9d`j(\xc3\xb1\x83y\x1ey*@\xd7\t\x9b\xd7\xb6/`&{\xf9/\xaf`v\
-\xf7\x7f\x9ey.\x19\xe1\xa0M4\x9a\xe7\xbe?\x86\x8dw\xda<\xffb\xe8\x8a)\x0e\
-\x00\xbd\xd2\x06\xe6\xf9b\xf3\xec\xbf7\x124\xeb\xa8\x8e\xf9<\xfd\x9c\xe4\xa5\
-\x9f]\x9a\xdb\x91\x97\n\x01\xdf\xfa\xd2\xff\x83\xcc3\xcf\'q\xe5\xccu\xf3\xcc\
-S\x01\xe6\x0bd\x9ey>\x85\xff\x01r\x97\x96s\xecS\xe3\x03\x00\x00\x00\x00IEND\
-\xaeB`\x82'
-
-def getDocFactory019Bitmap():
- return wxBitmapFromImage(getDocFactory019Image())
-
-def getDocFactory019Image():
- stream = cStringIO.StringIO(getDocFactory019Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory019')
-catalog['DocFactory019'] = ImageClass()
-catalog['DocFactory019'].getData = getDocFactory019Data
-catalog['DocFactory019'].getImage = getDocFactory019Image
-catalog['DocFactory019'].getBitmap = getDocFactory019Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory020Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rl\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1n\xcc\xe2\xc4\x90P\x9b\xa5l.K\x0b\x9dN;\x99Na\xda\xa1\xed\x1f\xf93\xd3\
-\xc9t\xa6\xd3\x85i&\x03d)\xd3i\x87\x92\xd28\t\x840\xb1!168\x8e\xbca\xbc\xca\
-\xd8\x96d-O\xbb\xf4\xa4\xb7\xde\xfb\xee\xbd\xa7\x7f\x88\x18\\\x12,:F\xb2A\
-\x9f?\xef\x9c{\xbf\xdf\xef\xb9\xe77\xe7\xdc{\xe6\x88\x7f\xf8\x96R\xcc3\xcf<\
-\xbf\x15=T9\xd7\x16\xe6\x99\xe7\xcaE\x0f\xce\x17\xc8<\xf3\xfcN\xf4pb\xae-\
-\xcc\r\x02\x85\x81\x8d\xc4\xbb\xe8\xba\x8b\x81\x8b9{\x1e\x84\x8d\xf6\x7f<(\
-\xa0\xac\x02xh\x9f\x89\xae\xc4\xc7\x14%|$ee\xa1\x10\x9f\x89\xce\xe7\x01=\x14\
-\x9fk\x0b\xb3\x8f\xc0\xa7\xae\xb0\x9b\xa8{\x1e\xff#cSJ\x90\xa6N\xde\x8d\x93\
-\x0b\xb62\xa5/\xc2%\xf0\x19y\xf0h\xb0\xdf\xa4\xc2\xeb\xba\xc8\x03\x80n)l\xad\
-\x8aNm+eB\x97UW\xc3a\xb1\xfb3\x02\xe5!4C0"\x97\x91\x96\x1b/\xab\xc6\xe7\t=\
-\xfc\x05,\x10\x8ba\x1a\xf4g9\xf3Z5\x93\xfd\x11@\x80\x94H]\x11\xae*\x12\xa9-\
-\xd2\xb2|\x1c\xc7ZDO\xf0oq\xa8\xb9\xec\x1e\x82\x0c\xd2P|\x89S?\x893\x99\x0e\
-\x80\x10 $\x00\xb1z\x9be\x0f\xbcM\xd1\xa8e\x8c[.\xabn\x88A\xea\xec\x1fq\xfcG\
-)b\x0bK4\xad9L!x=e\xbe\x80\x03a\x06\xe8\x91/`\xbf\x84\x94 \xa1\xadB\xf8E\xa4\
-\xa6\x08\xc6\x05F@\xa0\x10\x94\xf2A\x86OI\xf2\xc3\x8d,\xbf[b\x1a\xbf\xa67|\
-\xefE\xcb\x10\xe1{\x08\xb7\x8c\xf0=\x94\xd4P\xba\x81\x92\xbf}9$\\\x07\xe9\
-\x96\x01.j\x1bR:aq-\xca- 5.x\x00Aj\xb1I(\xd4\x86\x19l "?\xfe\x1c_7Q\x9a\x8et\
-\x8a $\xbeaM\x17\xd8%4\x05\x8a\xb8_$\x9c_\x8a\xa4D6\x1d\xe3\xba\xa8EMh\x94\
-\x8c\xfcp \xcc(\x9fR\x1f\xea\x9b\x81iM\xaf\x8c\xaf[\xd3Ze{\xba\x99\x19\xf8\
-\xf8=\x80o\x06/\xf2|\xa5\xa2W\x98}s\xeda\xd6\xb1\x94\x03\xc6:\x0c\xfdmb)\x97\
-\x1b\xff\xe8f\xb4P\x10\x94O9o\xd3w\xb8\x8b\xa1\x13i\xce\x1fHq\xdd\x9dQ\x1c\
-\xe3,\x05\x11D(\x0f3\xd3\x89\x99\xe9\xc4+\x94\x10\xa8\xe9\xc9\'\x10\xc0N-\
-\xc5\xa9h\x84\x0f\nI\xf8e\xac\xa9.\x8c\xf1s(\xdb\x01\xd4\xf4\x04a\x04(V\xdf\
-\x88\x16\xaeD\x06n\xc6\xb2v\xa1\xa5\\n||\x13F$\x08\x80]V\x8c\x1b\x11d@\x12\
-\xf3\xbb0\'\xcebMu\xa2l\x17\xa5\x14\x98A\xbc`%f1\x8dR\xe0\xc4\x9b)\xa5\xda.\
-\xa9\x19\x16:\x95\xde\x14\xb9\x89e\xe0\xb6#4(\x15V\xb2\xc8\x1af\xc0\x80\x924\
-f\x96O\xf9\x04\xd2\x071ri\xa4!q\xc3uh\x85\x11|\xbb\x8c0-\x1c\xbd\x1a\x99\x1d\
-EH\x81\xbdp\x05^\xb4\x1a\x00#}\x12c\xa2\x0f\x84\xa2\x1co\xa4\\\xbft\x0e\xde\
-\xfe\xa7C\x8fpj\xae=\xcc:\x86\xd0\x11f\x05\xba\xcc\xa1\x07\x05F,E\xc6*\xe0\
-\x01V(L\xcb\xedk\xf1r;\xc8\rvR\xc8\\C\xc2\x1aB7\xa7\x88d\xcf\xa0\x973\x0c\
-\x9c\x1cg\xf4h\x16\xcf\xf5\xd1\x83:\xf5\x1b\x12\xd4\xc5\x06(\x16\x17P\x08.D*\
-\x8fH\xee4*;I\xef\xdb\x83\xe4\xfam\x84\x06f\xc4\xa0\xf2\x86(\xd5\xa1!\xec\
-\xd0z\x84\x91B\x97y\xf4 \x18\xd1\x14\x85@\t\x17\x0f7\xe8\xe20LD\r\x10\xcdu@i\
-\x92\xc1\xc3\xa3d:\xf3\x00\xd4oH\x12o\x0c1|l\x12=\xacS\xb5*C\xcew\x08\xe5:\
-\x7f\xa7fMx\x0c\xb3b3\x83\xfbO\xd3\xbfw?\xca\xf7PRpz\xfb\xcfY\xfa\xf0\xfd$\
-\xb4^p\x8e\xce(\x9f\xaeJ\xc4\x02\'\xe8\xfcE\x9aP\xb5E\xf2\xfaA\xc6:\xb2\x8c\
-\x1e\x9fb\xc9\x03IB\xde\x8f\xe9\xf9U\x98x\xabC\xa2\xe2-\xec\xc86\xa4\x97%\
-\xe0\xbeD\xfaH\x10\xb3\xc2#\xde&p\xd4\x9f\xa0\x841\xb7\x83\xe1\x12\xe8a\xf6\
-\xce\xb5\x87YG#\x89\xe0\x0et\xc6\x11B T\x08\x93_\xe11\x8e\xd2$\x9ew+\x0bV\
-\xb7\xd1\xb5\xe3\xdf\xb1G\x06\x88\xa5b$\xcaC\x88B\x1dg~x\x80\xc2\xc80\x81x\
-\x0ci\x9a8\xf9\t\x06\xf7\xa4)\xa6[h\xfa\xear\x0c\xf3$\xba\x93D\xb3\x9b\xe8\
-\xf8\xc9\x0f)\x8e\x0ccF#\x18\xe10\x08\x87|\x97K\xfd\xca\xcdh~\x1f\x82&t\xc6\
-\xf0\xec"\xf6\xd8$F\xd0\xc2\x14\x1aZ FI\xdf\x0f^\x8e\x80\xdb\xc2\xe9W^&?8H \
-\x11GZ\x16\xa3\x07\xcf3\xbc\xcf\xc6w\xcb\x84jk\tn\xb8\x03\xdd\xce ?Is\xd5\
-\x1d(\x05\xc1\x8a\x08\x15\xd5\x92\xfcP\x0fBJ\xc2\xf1E\xe8\x81\x18\x86J\xe3\
-\xcf(\xdf\t\x94\xf40\x8d\xd5\xf8\x93\x1d\x0c\x9f\x1ba\xe2\xbd\x10\xc1\xca$\
-\x0b\xd76SQ\xb5\x14\x9c0\x86\x7f\x8c\xfc\xfb\x1a\x0bW4Q\xf0\x0e"K>\xba\xd6Fy\
-\xf8\x18\xf1\xaa\x1a\xe2\x15u\xe4\xd9\xcf\x95\xbeK\xad\x87\xd8=\xd7\x1ef\x1d\
-\xc1"\x04\xf7\xa0\x8bQ\x84\x04!\x82\x04x\x17E7\x00R\xb3\tV\xdeO\xc0\x1a\xc0\
-\x1e=\x84\xc6J\x0c\xd1F\xcf\xde\x17(\x8f\x1cb\xe1-\xdb\xa8\xd9\xb8\x15T\x19\
-\xb7X\xa4o\xe7\xbfQ\xe8\xdeE!\xbd\x9cH\xeb\x02\xf0\xab\xe8\xdb\xf3?\xb8c\xef\
-\xd1t\xfb\xa3$\xda\xd6!\x03>\x9a\x16\xc7s\x8a(}\x1cSoG\xb8\x9b\xd1\xc5\x08n\
-\xf6,\xe7\xfe\xebi\xa4)\x11\x9a\xa4~\xd3SD\x97,AyY2\xa7;p\x86\x0f\xb3\xf0\
-\xd6\x07\xa9\xd9\xb8\x15\xa1\xfb\xf86\xf4\xbf\xf9\x02\x93g\xf6a\xe8\x1a\xc2\
-\xacEw\xa3\xf4\xedy\xe9\x135\x95\xb5\x93\xd8\xb5w\x12ky\x8a\xb3/>\x8d\xd0=Z\
-\xef{\x12a\x8d#\xb5\x1az\xf6\xfe\xf4\xd2\xf9ZjQ\xd6\x0e\x84\xb9\x19]N`\xca\
-\x01\x9a\xb6\xfc\x05\xb1\xd6\x15\xf8\xa2\x1b\x15x\x17rK\xa8]c\xd2\xf3\xfa\
-\x7fS\x9a\xfc*\xc1`\x11\xe5%\x99\xe8\xea@g\x80\xd4\xb2\x87!\xd4KP\xbc\x01Wx\
-\x89\xe8\x81\xe1+\xffC\xe9\xb2\xa3kx\x81\x08\x9a-\x91R\x80\x1f\xc1\x1a\xd7\
-\xc0\x9d\xee\x0be\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\xee!\x14\xac\xa7f\xdd#\
-h\xe5\x1dH\xef\x00\xd2|\x90\x9a\xd5\x0f\xd1\xd7y\x92RW\x17\xb1\xc5\x8f\xe1y\
-\x02\xbb\xf3\x1c\xa1@\rU\xab\x1eD\xba?F\x16\xf6\x82L\xa0\t\x1d\x9c\t(%\xf1L\
-\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9f2\xed\xdf!\x14\xa8\
-\xa5f\xed6t\xe7g\x88\xd2Q|\xeb\t\xaa\x96\xdfK\xf1\xe4\x01tGG\xa8\x04x\x81Kk\
-\xe6\xa6@\xcf\xe0Y\xdf\xc0T\x11\xa4\x12hz\x05\x9a\xfd2\x9e\xf1\xc4\x8c\xf2U4\
-mC+\xec\xc1\xb3bh\xb6F(\xbc\x90X\xf3ft\xe7\xbb\xe0\x1c\x85\xac\x87\xd2KT,\
-\xd9B\xc0z\x83\xf1\xf6\x834l\xfbs<?O\xf6\xc8\x8b$\x1aVb&\x17#\xf3;!\x0b\\\
-\xe1{0:\xbb\x16\xcf\xb5\x87\xd9\'V\r\xeb\x87\x10\x83A\x90\x80=\x04\xfb\xabaR\
-\x81a\xa1\xd6\xad\xa3\xd4\xf3.\xeaT\x08\xab\xb5\x1999\x86\'Rxg\x04z\xac\x1e\
-\n\x01\xe4\xc1~(\x04\xd1\xea\xd3Xu\xb7\xa2\r\xd6\xc3H\x0cUH\xa0\x8aE\xdc\xf7\
-\xc1H\xd4\xe2O\x19\xe8\x87\xc7\xa0\xf0\xd1_\xc5\x95\x10\xab\x825i\xc4`\x00\
-\xcbi\xa5y\xdb_\xa1E#\xe0\xfb\xf8\xa3\xfd\xc8\xa3gq\x1a\x17\xe0\x9c(a$\xeb\
-\x11\xe5\x04b\xff$\xe4\x82\xc8\xa6>\x8c\xda\x9b\xd0\x06j\x11^\x12\xbc\x04*\
-\xa7.\xad\xf9\x1b\xdd\xb5\xfd\xc8\xc1\x00B\n(\xa5\xa1#\x89\xbfX\xce(\x1f\xf9\
-\x04\x1cm\x80uq\x18\x8cM/Q\xfd\x14\xb4G \xd3\x08\x80\x08\x94\x91\x1b\xa3D\
-\xe2\x1b\xc9\xeey\x17\xfb\xa6\x02v:M\xf9\x98K\xed\xad\xf7\xc0`\x1e\xf6\x07\
-\xc0\xbf\xf2\xc7\x9e\xde\xff\xec\x13s\xeda\xd61\x9a\x05\x89\xb6Q\n\xa7\x16!\
-\xd1\xf0\xf3\xe3L\xee\xdb\x02Ra\xae\xf6\xd1\xb3.\xfd\xdf\x1e\xa0p\xfaf\xaa\
-\xee\xaf\xa7x\xc4\xc6\\\x91G\x956\x90=\x93\xc1\xcbN\xe0\x84\x1e\xc3~\xcf%\
-\xb4\xc4b\xaa\xbd\x97\xc9\xddm\x04\xeb\xea\xf0\'&\x10!\xa0|\x0b\x99\xddC8\
-\x8f\x0cQR\x7f\x80\xbd\xdbEo\xd01\xae\xd1\xb0\x0f\x97\xf1\xd2E\x12K\x87\xa7=\
-\x08\rD\x81\xcc?\x0b\xdc^\x81\xdb_\x85VWG\xf2\xefKx\x99\xb5\x14:r\x94\xc7\
-\x06q\x02\x0fS\xdcg\x13^\x12`jo\x17\x93\xbb\xdb\x08]\x93\xc2/\xa4\x11\xd2\
-\xbf\xa4fi\xaf\x8d\xb1\xc8\'q\xfd(\xf9\xe3\xad\x08$~~\x84\xcckk\xa8x\xaa0\
-\xa3|\xeeh\x96\xf1\xed_&~\xc3\x00\x85\x8e\x86\xe9\xdf\xbc\xf9A\xc6~p\'\xe5\
-\xce\xf2\x85>\x0e\xf5\x04\x88\xad~\x88\xfe\xe7\xa68\xf9g;PE\x17\xab\xeeN\xac\
-\x85\xeb\xc9|{\x80\xe2/\xffp\xee\x06\xc0\xa7@\x7fe\xd5\xfa\xb9\xf60\xebT\xd6\
-Nq\x0f{8\x9f\xaa\xc4)J\xaa\xfb\xfb\xe1>\x8b\xfc8d\x07\x1d:\xbfe\x93\xc9\xa5\
-\xb8\xee\x8fk1\x96\x96ys{#7\xc4z\x89>\xde\xca\x91\x7f<\xc3\xe03{h\xb9c\x01re\
-\x90\xd2\x89<\xa7\xdf\xc8Pln\xa5fS\x9c\x8en\x87D*K\xf8\xd1\x16\x0e\xff\x93\
-\xcf\xc8\xf7\xdai\xb9\xbd\x16ug\x14\xdd\x02\xddpI~-\xc2\x81\x9d\xcd\xdc&wr>\
-\x95\x04\xa9\xd1J?oD\xeee,\x99\x84$HM\xf1\x95\x9e\x03\xe8\xf77s\xe4\xfb=\x14\
-~p\x80\xfa\xb5\xd5\xf8\xebM\xfa>\xd0\xcc5\xb4\x90\xac\xb1hv{\xc8N\x18\x97\
-\xd4|;\xba\x12\x81\xcd=\xe2U\xba\xaa*Q\xd2\xa0Y\xa4\xf9er\x15\xab\xba\xbbg\
-\x96\xaf\xcf\xe5\xf4\xe2%\xdc\xad\x0e\xd2\x93\x8c!\xa4\xe4Z\xd5\xcb\xae\xeb\
-\xd62\x16\x0f_\xe8\xe3\xd8\x94`k\xa3\xcb\xf8mk\x19:1\x00!\x9d\xd5\x0fmb2W\
-\xc1+N\x1c{\xd5\x95\xfd\xed\xf1\x1b\xf4\xd3~a\xae=\xcc:\xf5\xfe$\xb6\xdd\xcd\
-\xa8SblD\xa7\xf7\x9bi\xd0tl\xc7@\t\r\x84d\xd12\x97\xb6\xdf\xcfs\xe8h\x0bou\
-\x85\x18\xd6\xc3<\xfe\xc00\x0b\xb7\x18\x1c\xf9y\x8eS\xcf\x9dCI\r_\x18\x84\
-\x13\x92ewK\xcc\xaa!^\xdb\xbe\x8c\xfaj\x9f\x87\xb6\x8eP\xf3%\x8d\xd3\xfb\xf2\
-\x9cz\xbe\xfbB\xdb\xca\x06\xc9\xbd\x7fc0\xaa\x05\xb1Kg\x19-\x87\xb1\xa2\x12\
-\xc7\x1e\xe6\\9\xc7\x90\xff\xc1\xc6\x9a\x0fn{\x82G\xb6\xe6\x08\xaf\x90\x1c\
-\xde;\xca\x81w2(\xa9\x11\xad6Xp\x9dd\xa0$\tF\xf2\xd8\xc5s\xbcsd\x05\xbf\xb7\
-\xe9\x935\x07\xf4\x06\x1c\xc7\xa7T\xe8d\xd0\xae$\x18s(\xdb\xa3\x9c)\xe5\x99<\
-:\xb3|\xafo_\x86\x94\x938\xa53\x8c;\x05\xac\n\x83\xb2}\x96s\xe5k\x19\xf2?\
-\xb2Y9\x02\r\xa7\xa6\xa8\xd9\xd4\xc0\x89\x93\xfd\x84\x12&u\xeb#\xb4\xbf;\xce\
-\xd1\\p\x8e\xde\xfc\xa7G\xef\xeb\xfb\xe2m\x14\xe6\xb3yJ\xf9NZo\x12\x94\xdbC\
-\xd8\x8e\x81/t"\tIu\xa3C\xd3R\x9b\xc6\xa5%\xf6\xb6\xb7\xf0\xe2+\r\x14Ki\xd2\
-\xfd\n\xe9\x05\xb9o\xcba*\x9b\r\xce\x1e\nR\xcciXQ\xc1\x8d_\xce\x12\xae\x84\
-\xe7\xff\xf3n\x8eud1t\re\xeb<\xf0X\x07\xd7\xdc\xacqlO\x84\x89Q\x8bX\xadb\xc5\
-\x97\xb2tu\xa78px\t_Y\xdd\xc9\xa2\x95\x11*\xaa}\xd2}\x16\xc7ONa;\xa5\x0b>\
-\xd3iEe\x04\xb6<y\x86\xf3\xc7\x02\x9cx\'\x84f\n\xd6l\xc9\xd2xM\x9e\xfd;\x93D\
-\x93\x1e\xe7\xceV\xb0\xfd\xb5\xf5d\xc7/\xa1y(G\xac"K\xb1\xd0E\xd3\xf2q\xeaZ\
-\x8at\x9e\x8b\xf2\xde\xf1<\x02f\x9c\xaf:\x95\xc1.\x1c\xa6q\x8dN\xac\xc6\xa7\
-\xafw\x94\xe3\'\xc6\xb1\x9d\xecE\xfd\xbc\xef\x80\xcb\x03\x9b\x1d\xf2N\x89\
-\x86\xd6\x04B\x8e\xf2\xc6\xae\x12}}r\x96\xdf\xf8\xff\x1f\xb1~\xfd\xebW\xc7\\\
-w\x19\x11\x02\xb6n\xea\xe0\xb65]\xa4\x92E\x84\x9c\xee\x82l\xd6$3e1<\x1e\xe1\
-\x17\xbf^\xc2\xb9\xf3\x95\x94]y\xd1}K[\'\xd9\xb0l\x80\xa6\xfa)\x94\xa7\xf0\
-\xd1\xe8\xe8Jp\xe0D\r]\xbd\x91\x0bm\xa5T,\xbfv\x9cM\xab\xfbI\xc5\x0b\x94\xcb\
-\x12%u\xde{\xbf\x92]\xed\xf5\xe4\xf2\x06w\xdd6\xc0\xfa\xb6q\xca\xbe\xc6\xabo\
-\xd5s\xe4T\xc5\xc7\xbc\x06,\x8f[\xd6\x0es\xd3\xf2\x01\xa4\xef"5\x18\xcaD8{\
-\xbe\x82\r\xcb\x06\x00\xc1\xabo-\xe6\xc8\xa9\xcaKjfs\x06B\xc0]\xb7\r\xb1\xae\
-m\x0c\xd7\x97\x17\xe9\xce4\xdf\xf43\xba\xd9\xd06@\xd9\xd7x\xe5\xad\x16\x8e\
-\x9c\xba\xf8\xdc\x84\xa1\xc3\xdf}=G\xb9w\x80\xd7\xbf\xdb\xcd\xd7\xfe\xa5\x8d\
-\xae\x91(\xdf|&\xc2\xd5tDO,X\xf0\xbd\xab\xc8\xee\xe5E\x08\x08\x05?\x8c\xef\
-\xba`;W\xf6o\xc7\xab\x85u\xab\xca|\xff\x99\t\x9e\xfd\xeb>\\O\xf0\x97\xff\xba\
-\x80\'\xbf\x1e\xe7\xed}\xb3s\x94\xe0r\xa1\xf7\xf7\xf7\xcf\xb5\x87y>\x87\xdc\
-\xb0m\x8c\x89\x81\x0c\xc7\x0f\xe5y\xf4\xe9\x00\x1d\'m^\xdf\xb1\x80\xa9\xec\
-\xd5\xb3\xbc\x82\xe9]\x80y\xe6\xb9\xec\x84\x836\xd1h\x9e\xfb\xff\x146\xdde\
-\xf3\xc2K\xa1\xab\xae8\x00\xf4\xb960\xcf\xe7\x93\xe7\xfe\xa3\x9e\xa0YCe\xcc\
-\xe7\x99\xe7%/\xff\xf4\xb39\x1d\xf9Y#\xe0\x1b_\xd8o\x90y\xe6\xb9\x14W\xdf\
-\x9c7\xcf<\xb3\xc8|\x81\xcc3\xcf\'\xf0\xbfW+\x96s\x12b\xdf\x03\x00\x00\x00\
-\x00IEND\xaeB`\x82'
-
-def getDocFactory020Bitmap():
- return wxBitmapFromImage(getDocFactory020Image())
-
-def getDocFactory020Image():
- stream = cStringIO.StringIO(getDocFactory020Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory020')
-catalog['DocFactory020'] = ImageClass()
-catalog['DocFactory020'].getData = getDocFactory020Data
-catalog['DocFactory020'].getImage = getDocFactory020Image
-catalog['DocFactory020'].getBitmap = getDocFactory020Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory021Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rk\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em\xff\xc8\x9f\x99N\xa63\x9d\
-.L3\x19H\x93\x94\xe9\xb4CIi\x9c\x04B\x98\xd8\x90\x18\x1b\x1cG\xde0^elK\xb2\
-\x96\xa7]z\xd2[\xef}\xf7\xde\xd3?D\x0c.\t\xd6\x80\x91\x10\xe8\xf3\xe7\x9ds\
-\xef\xf7\xfb=\xf7\xfc\xe6\x9c{\xcf\x1c\xf1\x0f\xdfR\x8a\x05\x16X\xe0\xb7\xa2\
-\x87*\xe7\xda\xc2\x02\x0b|v\xd1\x83\x0b\x05\xb2\xc0\x02\xbf\x13=\x9c\x98k\
-\x0b\xb3\x8b@a`#\xf1.\xb9\xeeb\xe0b\xce\x9e\x07a\xa3\xfd?\x0f\n(\xab\x00\x1e\
-\xda\xa7\xa2+\xf11E\t\x1fIYY(\xc4\xa7\xa2\xf3yB\x0f\xc5\xe7\xda\xc2\xec!\xf0\
-\xa9+\xec!\xea^\xc0\xff\xc0\xd8\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\xadL\xe9Kp\
-\t|J\x1e<\x1a\xec\xd7\xa9\xf0\xba.\xf1\x00\xa0[\n[\xab\xa2S\xdbF\x99\xd0\x15\
-\xd5\xd5pX\xea\xfe\x8c@y\x08\xcd\x10\x8c\xc8\x15\xa4\xe5\x8dWT\xe3\xf3\x88\
-\x1e\xfe\x02\x15\x88\xc50\r\xfa3\x9c}\xa5\x9a\xc9\xfe\x08 @J\xa4\xae\x08W\
-\x15\x89\xd4\x16iY9\x8ec-\xa1\'\xf8\xb78\xd4\\q\x0fA\x06i(\xbe\xc0\xe9\x9f\
-\xc4\x99L\x07@\x08\x10\x12\x80X\xbd\xcd\x8a\xfb\xdf\xa4h\xd42\xc6\xcdWT7\xc4\
- u\xf6\x8f8\xf1\xa3\x14\xb1\xc5%\x9a\xd6\x1d\xa1\x10\xbc\x962_\xa0\x01\xf01\
-\xd0#_\xa0\xfe\t)AB[\x83\xf0\x8bHM\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x0c\x9f\
-\x96\xe4\x87\x1bYy\x97\xc44~Mo\xf8\x9eK\x96!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\
-\x03%\x7f\xfbrH\xb8\x0e\xd2-\x03\\\xd26\xa4t\xc2\xe2j\x94[@j\\\xf4\x00\x82\
-\xd4R\x93P\xa8\r3\xd8@D~\xf89\xben\xa24\x1d\xe9\x14AH|\xc3\x9a.\xb0\xcbh\n\
-\x14q\xbfH8\xbf\x1cI\x89l:\xc65Q\x8b\x9a\xd0(\x19\xf9\xfe\x00\x98Q>\xa5\xde\
-\xd77\x03\xd3\x9a^\x19_\xb7\xa6\xb5\xca\xf6t33\xf0\xe1{\x00\xdf\x0c^\xe2\xf9\
-\xb3\x8e^a\xf6\xcd\xb5\x87Y\xc3R\x0e\x18\x1b0\xf47\x89\xa5\\\xae\xff\xa3\x9b\
-\xd0BAP>\xe5\xbcM\xdf\x91.\x86N\xa6\xb9p0\xc55wDq\x8cs\x14D\x10\xa1<\xccL\'f\
-\xa6\x13\xafPB\xa0\xa6\'\x9f@\x00;\xb5\x1c\xa7\xa2\x11\xde+$\xe1\x97\xb1\xa6\
-\xba0\xc6\xcf\xa3l\x07P\xd3\x13\x84\x11\xa0X}=Z\xb8\x12\x19\xb8\t\xcb\xda\
-\x8d\x96r\xb9\xfe\xb1\xcd\x18\x91 \x00vY1nD\x90\x01I\xcc\xef\xc2\x9c8\x875\
-\xd5\x89\xb2]\x94R`\x06\xf1\x82\x95\x98\xc54J\x81\x13o\xa6\x94j\xbb\xacfX\
-\xe8TzS\xe4&V\x80\xdb\x8e\xd0\xa0TX\xcd\x12k\x98\x01\x03J\xd2\x98Y>\xe5\x13H\
-\x1f\xc2\xc8\xa5\x91\x86\xc4\r\xd7\xa1\x15F\xf0\xed2\xc2\xb4p\xf4jdv\x14!\
-\x05\xf6\xe2Ux\xd1j\x00\x8c\xf4)\x8c\x89>\x10\x8ar\xbc\x91r\xfd\xf29x\xfb\
-\x1f\x0f=\xc2\xe9\xb9\xf60k\x18BG\x98\x15\xe82\x87\x1e\x14\x18\xb1\x14\x19\
-\xab\x80\x07X\xa10-\xb7\xad\xc7\xcb\xed$7\xd8I!s\x15\tk\x08\xdd\x9c"\x92=\
-\x8b^\xce0pj\x9c\xd1cY<\xd7G\x0f\xea\xd4oJP\x17\x1b\xa0X\\D!\xb8\x18\xa9<"\
-\xb93\xa8\xec$\xbdo\x0e\x92\xeb\xb7\x11\x1a\x98\x11\x83\xca\xeb\xa2T\x87\x86\
-\xb0C\x1b\x11F\n]\xe6\xd1\x83`DS\x14\x02%\\<\xdc\xa0\x8b\xc30\x115@4\xd7\x01\
-\xa5I\x06\x8f\x8c\x92\xe9\xcc\x03P\xbf)I\xbc1\xc4\xf0\xf1I\xf4\xb0N\xd5\x9a\
-\x0c9\xdf!\x94\xeb\xfc\x9d\x9a5\xe11\xcc\x8a-\x0c\x1e8C\xff\xbe\x03(\xdfCI\
-\xc1\x99\x1d?g\xf9C\xf7\x91\xd0z\xc196\xa3|\xba*\x11\x0b\x9c\xa4\xf3\x17iB\
-\xd5\x16\xc9k\x07\x19\xeb\xc82zb\x8ae\xf7\'\ty?\xa6\xe7Wa\xe2\xad\x0e\x89\
-\x8a7\xb0#\xdb\x91^\x96\x80\xfb\x02\xe9\xa3A\xcc\n\x8fx\x9b\xc0Q\x7f\x82\x12\
-\xc6\xdc\x0e\x86\x19\xa2\x87\xd97\xd7\x1ef\r\x8d$\x82\xdb\xd1\x19G\x08\x81P!\
-L~\x85\xc78J\x93x\xde-,Z\xdbF\xd7\xce\xff\xc0\x1e\x19 \x96\x8a\x91(\x0f!\nu\
-\x9c\xfd\xe1A\n#\xc3\x04\xe21\xa4i\xe2\xe4\'\x18\xdc\x9b\xa6\x98n\xa1\xe9\
-\xab+1\xccS\xe8N\x12\xcdn\xa2\xe3\'?\xa482\x8c\x19\x8d`\x84\xc3 \x1c\xf2].\
-\xf5\xab\xb7\xa0\xf9}\x08\x9a\xd0\x19\xc3\xb3\x8b\xd8c\x93\x18A\x0bShh\x81\
-\x18%\xfd\x00x9\x02n\x0bg^z\x91\xfc\xe0 \x81D\x1ciY\x8c\x1e\xba\xc0\xf0~\x1b\
-\xdf-\x13\xaa\xad%\xb8\xe9vt;\x83\xfc(\xcd5\xb7\xa3\x14\x04+"TTK\xf2C=\x08)\
-\t\xc7\x97\xa0\x07b\x18*\x8d?\xa3|\'Q\xd2\xc34\xd6\xe2Ov0|~\x84\x89wB\x04+\
-\x93,^\xdfLE\xd5rp\xc2\x18\xfeq\xf2\xefj,^\xd5D\xc1;\x84,\xf9\xe8Z\x1b\xe5\
-\xe1\xe3\xc4\xabj\x88W\xd4\x91\xe7\x00\xf3ewZ\x0f\xb1g\xae=\xcc\x1a\x82%\x08\
-\xeeF\x17\xa3\x08\tB\x04\t\xf06\x8an\x00\xa4f\x13\xac\xbc\x8f\x805\x80=z\x18\
-\x8d\xd5\x18\xa2\x8d\x9e}\xcfQ\x1e9\xcc\xe2\x9b\xb7Ss\xe36Pe\xdcb\x91\xbe]\
-\xffN\xa1{7\x85\xf4J"\xad\x8b\xc0\xaf\xa2o\xef\xff\xe2\x8e\xbdC\xd3m\x8f\x90\
-h\xdb\x80\x0c\xf8hZ\x1c\xcf)\xa2\xf4qL\xbd\x1d\xe1nA\x17#\xb8\xd9s\x9c\xff\
-\xef\xa7\x90\xa6Dh\x92\xfa\xcdO\x12]\xb6\x0c\xe5e\xc9\x9c\xe9\xc0\x19>\xc2\
-\xe2[\x1e\xa0\xe6\xc6m\x08\xdd\xc7\xb7\xa1\xff\xf5\xe7\x98<\xbb\x1fC\xd7\x10\
-f-\xba\x1b\xa5o\xef\x0b\x1f\xa9\xa9\xac]\xc4\xae\xbe\x83X\xcb\x93\x9c{\xfe)\
-\x84\xee\xd1z\xef\x13\x08k\x1c\xa9\xd5\xd0\xb3\xef\xa7\x97\xcf\xd7R\x8b\xb2v\
-"\xcc-\xe8r\x02S\x0e\xd0\xb4\xf5/\x88\xb5\xae\xc2\x17\xdd\xa8\xc0\xdb\x90[F\
-\xed:\x93\x9eW\xff\x87\xd2\xe4W\t\x06\x8b(/\xc9DW\x07:\x03\xa4V<\x04\xa1^\
-\x82\xe25\x98\'%\xa2\x07\x86\xe7\xcf\x07\xd3\'F\xd7\xf0\x02\x114["\xa5\x00?\
-\x825\xae\x81;\xdd\x07\xca\x8a\xe3\xfaa\xcc\x92\xc0\xf4\xc2\x08\x15\x83\xb2\
-\x8f\xdd\xddC(XO\xcd\x86\x87\xd1\xca;\x91\xdeA\xa4\xf9\x005k\x1f\xa4\xaf\xf3\
-\x14\xa5\xae.bK\x1f\xc5\xf3\x04v\xe7yB\x81\x1a\xaa\xd6<\x80t\x7f\x8c,\xec\
-\x03\x99@\x13:8\x13PJ\xe2\x99\xa0\x95@/\x82\x15J\xa0[Q\xa4\xa1a\x05Sh\xae\
-\x8b\x92\xcdd\xda\xff\x8dP\xa0\x96\x9a\xf5\xdb\xd1\x9d\x9f!J\xc7\xf0\xad\xc7\
-\xa9Zy\x0f\xc5S\x07\xd1\x1d\x1d\xa1\x12\xe0\x05.\xaf\x99\x9b\x02=\x83g}\x03S\
-E\x90J\xa0\xe9\x15h\xf6\x8bx\xc6\xe33\xcaW\xd1\xb4\x1d\xad\xb0\x17\xcf\x8a\
-\xa1\xd9\x1a\xa1\xf0bb\xcd[\xd0\x9d\xef\x82s\x0c\xb2\x1eJ/Q\xb1l+\x01\xeb5\
-\xc6\xdb\x0f\xd1\xb0\xfd\xcf\xf1\xfc<\xd9\xa3\xcf\x93hX\x8d\x99\\\x8a\xcc\
-\xef\x82,0O\xf6`tv/\x9dk\x0f\xb3G\xac\x1a6\x0e!\x06\x83 \x01{\x08\x0eT\xc3\
-\xa4\x02\xc3Bm\xd8@\xa9\xe7m\xd4\xe9\x10Vk3rr\x0cO\xa4\xf0\xce\n\xf4X=\x14\
-\x02\xc8C\xfdP\x08\xa2\xd5\xa7\xb1\xeanA\x1b\xac\x87\x91\x18\xaa\x90@\x15\
-\x8b\xb8\xef\x82\x91\xa8\xc5\x9f2\xd0\x8f\x8cA\xe1\x83\xbf\x8a+!V\x05\xeb\
-\xd2\x88\xc1\x00\x96\xd3J\xf3\xf6\xbfB\x8bF\xc0\xf7\xf1G\xfb\x91\xc7\xce\xe1\
-4.\xc29Y\xc2H\xd6#\xca\t\xc4\x81I\xc8\x05\x91M}\x18\xb57\xa0\r\xd4"\xbc$x\tT\
-N]^\xf37\xba\xeb\xfb\x91\x83\x01\x84\x14PJCG\x12\x7f\xa9\x9cQ>\xf2\t8\xd6\
-\x00\x1b\xe20\x18\x9b^\xa2\xfa)h\x8f@\xa6\x11\x00\x11(#o\x8c\x12\x89\xdfHv\
-\xef\xdb\xd87\x14\xb0\xd3i\xca\xc7]jo\xb9\x1b\x06\xf3p \x00\xfe\xfc\x19sz\
-\xff3\x8f\xcf\xb5\x87Y\xc3h\x16$\xdaF)\x9c^\x82D\xc3\xcf\x8f3\xb9\x7f+H\x85\
-\xb9\xd6G\xcf\xba\xf4\x7f{\x80\xc2\x99\x9b\xa8\xba\xaf\x9e\xe2Q\x1bsU\x1eU\
-\xdaD\xf6l\x06/;\x81\x13z\x14\xfb\x1d\x97\xd02\x8b\xa9\xf6^&\xf7\xb4\x11\xac\
-\xab\xc3\x9f\x98@\x84\x80\xf2\xcdd\xf6\x0c\xe1<<DI\xfd\x01\xf6\x1e\x17\xbdA\
-\xc7\xb8J\xc3>R\xc6K\x17I,\x1f\x9e\xf6 4\x10\x052\xff,p{\x05n\x7f\x15Z]\x1d\
-\xc9\xbf/\xe1e\xd6S\xe8\xc8Q\x1e\x1b\xc4\t<Dq\xbfMxY\x80\xa9}]L\xeei#tU\n\
-\xbf\x90FH\xff\xb2\x9a\xa5}6\xc6\x12\x9f\xc4\xb5\xa3\xe4O\xb4"\x90\xf8\xf9\
-\x112\xaf\xac\xa3\xe2\xc9\xc2\x8c\xf2\xb9\xa3Y\xc6w|\x99\xf8u\x03\x14:\x1a\
-\xa6\x7f\xf3\xe6\x07\x19\xfb\xc1\x1d\x94;\xcb\x17\xfb8\xd4\x13 \xb6\xf6A\xfa\
-\x9f\x9d\xe2\xd4\x9f\xedD\x15]\xac\xba;\xb0\x16o$\xf3\xed\x01\x8a\xbf\xfc\
-\xc3\xb9\x1b\x00\x1f\x03\xfd\xa55\x1b\xe7\xda\xc3\xacQY;\xc5\xdd\xec\xe5B\
-\xaa\x12\xa7(\xa9\xee\xef\x87{-\xf2\xe3\x90\x1dt\xe8\xfc\x96M&\x97\xe2\x9a?\
-\xae\xc5X^\xe6\xf5\x1d\x8d\\\x17\xeb%\xfaX+G\xff\xf1,\x83O\xef\xa5\xe5\xf6E\
-\xc8\xd5AJ\'\xf3\x9cy-C\xb1\xb9\x95\x9a\xcdq:\xba\x1d\x12\xa9,\xe1GZ8\xf2O>#\
-\xdfk\xa7\xe5\xb6Z\xd4\x1dQt\x0bt\xc3%\xf9\xb5\x08\x07w5s\xab\xdc\xc5\x85T\
-\x12\xa4F+\xfd\xbc\x16\xb9\x87\xb1d\x12\x92 5\xc5Wz\x0e\xa2\xdf\xd7\xcc\xd1\
-\xef\xf7P\xf8\xc1A\xea\xd7W\xe3o4\xe9{O3\xd7\xd0B\xb2\xc6\xa2\xd9\xed!;a\\V\
-\xf3\xcd\xe8j\x046w\x8b\x97\xe9\xaa\xaaDI\x83f\x91\xe6\x97\xc95\xac\xe9\xee\
-\x9eY\xbe>\x973K\x97q\x97:DO2\x86\x90\x92\xabU/\xbb\xafY\xcfX<|\xb1\x8fcS\
-\x82m\x8d.\xe3\xb7\xaeg\xe8\xe4\x00\x84t\xd6>\xb8\x99\xc9\\\x05/9q\xec5\xf3\
-\xe3\xdb\xe37\xe8g\xfc\xc2\\{\x985\xea\xfdIl\xbb\x9bQ\xa7\xc4\xd8\x88N\xef7\
-\xd3\xa0\xe9\xd8\x8e\x81\x12\x1a\x08\xc9\x92\x15.m\xbf\x9f\xe7\xf0\xb1\x16\
-\xde\xe8\n1\xac\x87y\xec\xfea\x16o58\xfa\xf3\x1c\xa7\x9f=\x8f\x92\x1a\xbe0\
-\x08\'$+\xee\x92\x98UC\xbc\xb2c\x05\xf5\xd5>\x0fn\x1b\xa1\xe6K\x1ag\xf6\xe79\
-\xfd\x9d\xee\x8bm+\x1b$\xf7\xfc\x8d\xc1\xa8\x16\xc4.\x9dc\xb4\x1c\xc6\x8aJ\
-\x1c{\x98\xf3\xe5\x1cC\xfe{\x1bk>\xb8\xed\t\x1e\xde\x96#\xbcJrd\xdf(\x07\xdf\
-\xca\xa0\xa4F\xb4\xda`\xd15\x92\x81\x92$\x18\xc9c\x17\xcf\xf3\xd6\xd1U\xfc\
-\xde\xe6\x8f\xd6\x1c\xd0\x1bp\x1c\x9fR\xa1\x93A\xbb\x92`\xcc\xa1l\x8fr\xb6\
-\x94g\xf2\xd8\xcc\xf2\xbd\xbac\x05RN\xe2\x94\xce2\xee\x14\xb0*\x0c\xca\xf69\
-\xce\x97\xaff\xc8\xff\xc0f\xe5\x084\x9c\x9e\xa2fs\x03\'O\xf5\x13J\x98\xd4m\
-\x8c\xd0\xfe\xf68\xc7r\xc19z\xf3\x1f\x1f\xbd\xaf\xef\x8b\xb3Q\x98\xcf\xe6)\
-\xe5;i\xbdAPn\x0fa;\x06\xbe\xd0\x89$$\xd5\x8d\x0eM\xcbm\x1a\x97\x97\xd8\xd7\
-\xde\xc2\xf3/5P,\xa5I\xf7+\xa4\x17\xe4\xde\xadG\xa8l68w8H1\xa7aE\x05\xd7\x7f\
-9K\xb8\x12\xbe\xf3_wq\xbc#\x8b\xa1k([\xe7\xfeG;\xb8\xea&\x8d\xe3{#L\x8cZ\xc4\
-j\x15\xab\xbe\x94\xa5\xab;\xc5\xc1#\xcb\xf8\xca\xdaN\x96\xac\x8ePQ\xed\x93\
-\xee\xb38qj\n\xdb)]\xf4\x99N+*#\xb0\xf5\x89\xb3\\8\x1e\xe0\xe4[!4S\xb0nk\x96\
-\xc6\xab\xf2\x1c\xd8\x95$\x9a\xf48\x7f\xae\x82\x1d\xafl$;~\x19\xcd\xc39b\x15\
-Y\x8a\x85.\x9aV\x8eS\xd7R\xa4\xf3|\x94wN\xe4\x110\xe3|\xd5\xa9\x0cv\xe1\x08\
-\x8d\xebtb5>}\xbd\xa3\x9c89\x8e\xedd/\xe9\xe7\xfd\x07]\xee\xdf\xe2\x90wJ4\
-\xb4&\x10r\x94\xd7v\x97\xe8\xeb\x93\xb3\xfc\xc6?9b\xe3\xc6W\xe7\xd7\x9c\xf7\
-\t\x10\x02\xb6m\xee\xe0\xd6u]\xa4\x92E\x84\x9c\x8e\x9e\xcd\x9ad\xa6,\x86\xc7\
-#\xfc\xe2\xd7\xcb8\x7f\xa1\x92\xb2+/\xb9oy\xeb$\x9bV\x0c\xd0T?\x85\xf2\x14>\
-\x1a\x1d]\t\x0e\x9e\xac\xa1\xab7r\xb1\xad\x94\x8a\x95W\x8f\xb3ym?\xa9x\x81rY\
-\xa2\xa4\xce;\xefV\xb2\xbb\xbd\x9e\\\xde\xe0\xce[\x07\xd8\xd86N\xd9\xd7x\xf9\
-\x8dz\x8e\x9e\xae\xf8\x90\xd7\x80\xe5q\xf3\xfaanX9\x80\xf4]\xa4\x06C\x99\x08\
-\xe7.T\xb0i\xc5\x00 x\xf9\x8d\xa5\x1c=]yY\xcdl\xce@\x08\xb8\xf3\xd6!6\xb4\
-\x8d\xe1\xfa\xf2\x12\xdd\x99\xe6\x9b~F7\x9b\xda\x06(\xfb\x1a/\xbd\xd1\xc2\
-\xd1\xd3\x97\x9e\x970t\xf8\xbb\xaf\xe7(\xf7\x0e\xf0\xeaw\xbb\xf9\xda\xbf\xb4\
-\xd15\x12\xe5\x9bOG\x98\x8fG\xf3\xc4\xa2E\xdf\x9b\x87\xb6?\x19B@(\xf8~l\xd7\
-\x05\xdb\x99\x1f\xbf\x1d?\xeblXS\xe6\xfbOO\xf0\xcc_\xf7\xe1z\x82\xbf\xfc\xd7\
-E<\xf1\xf58o\xee\x9f\x9d\xa3\x04W\x1a\xbd\xbf\xbf\x7f\xae=,\xf09\xe2\xba\xed\
-cL\x0cd8q8\xcf#O\x05\xe88e\xf3\xea\xceELe\xe7\xdf\xf2\n\xa6w\x03\x16X\xe0\
-\x8a\x11\x0e\xdaD\xa3y\xee\xfbS\xd8|\xa7\xcds/\x84\xe6mq\x00\xe8sm`\x81\xcf\
-\x17\xcf\xfeg=A\xb3\x86\xca\x98\xcf\xd3\xdf\x91\xbc\xf8\xd3O\xe7t\xe4l!\xe0\
-\x1b_\xb8o\x90\x05\x16\x98)\xf3w\xee[`\x81Y`\xa1@\x16X\xe0#\xf8?;\xbf\x96s\
-\x031\xa3\xd0\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory021Bitmap():
- return wxBitmapFromImage(getDocFactory021Image())
-
-def getDocFactory021Image():
- stream = cStringIO.StringIO(getDocFactory021Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory021')
-catalog['DocFactory021'] = ImageClass()
-catalog['DocFactory021'].getData = getDocFactory021Data
-catalog['DocFactory021'].getImage = getDocFactory021Image
-catalog['DocFactory021'].getBitmap = getDocFactory021Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory022Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rk\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em\xff\xc8\x9f\x99N\xa63\x9d\
-.L3\x19\xa0I\xcat\xda\xa1\xa44N\x02!LlH\x8c\r\x8e#o\x18o\x92\xb1-\xc9Z\x9ev\
-\xe9Io\xbd\xf7\xdd{O\xff\x101\xb8$\xd8\x0c\x16\x8a@\x9f?\xdf\x9c\xfb\xbe\xdf\
-\xef9\xe77\xe7\xdc{\xe6\x88\x7f\xf8\x96R,\xb0\xc0\x02\xbf\x11=T9\xd7\x16\x16\
-X\xe0w\x17=\xb8P \x0b,\xf0[\xd1\xc3\x89\xb9\xb6\xf0\xd9 P\x18\xd8H\xbc\x8b~w\
-1p1?;\x0f\xc2F\xfb\x7f\x1e\x14PV\x01<\xb4Y\xd1\x95\xf8\x98\xa2\x84\x8f\xa4\
-\xac,\x14bVt>\x8f\xe8\xa1\xf8\\[\x98}\x04>u\x85=D\xdd\xf3\xf8\x1f\x9a\x9bR\
-\x824u\xf2n\x9c\\\xb0\x95i}\t.\x81Y\xf2\xe0\xd1`\xbfA\x85\xd7}\x91\x07\x00\
-\xddR\xd8Z\x15]\xda6\xca\x84\xae\xa8\xae\x86\xc3R\xf7\xa7\x04\xca\xc3h\x86`T\
-\xae -o\xbc\xa2\x1a\x9fg\xf4\xf0\x17\xa0@,Fh\xd0\x9f\xe1\xcc\xab\xd5L\rD\x00\
-\x01R"uE\xb8\xaaH\xa4\xb6H\xcb\xca\t\x1ck\t\xbd\xc1\xbf\xc5\xa1\xe6\x8a{\x08\
-2DC\xf1E:~\x1cg*\x1d\x00!@H\x00b\xf56+\xee\x7f\x8b\xa2Q\xcb87_Q\xdd\x10C\xd4\
-\xd9?\xe4\xc4\x0fS\xc4\x16\x97hZw\x84B\xf0Z\xca|\x01\x06\xfe\n\xa0G\xbe\x00\
-\xfd\x14R\x82\x84\xb6\x06\xe1\x17\x91\x9a"\x18\x17\x18\x01\x81BP\xca\x07\x19\
-\xe9\x90\xe4G\x1aYy\x97\xc44~E_\xf8\x9e\x8b\xb6!\xc2\xf7\x10n\x19\xe1{(\xa9\
-\xa1t\x03%\x7f\xf3vH\xb8\x0e\xd2-\x03\\\xd46\xa4t\xc2\xe2j\x94[@j\\\xf0\x00\
-\x82\xd4R\x93P\xa8\r3\xd8@D~\xf4\x7f|\xddDi:\xd2)\x82\x90\xf8\x865S`\x97\xd0\
-\x14(\xe2~\x91p~9\x92\x12\xd9t\x8ck\xa2\x165\xa112\xf2\x83\x81\xbf\xac|J}\
-\xa0o\x06f4\xbd2\xben\xcdh\x95\xed\x99ff\xe0\xa3\xcf\x00\xbe\x19\xbc\xc8\xf3\
-|A\xaf0\xfb\xe7\xda\xc3\xacc)\x07\x8c\r\x18\xfa[\xc4R.\xd7\xff\xd1Mh\xa1 (\
-\x9fr\xde\xa6\xffH7\xc3\'\xd3\x9c?\x98\xe2\x9a;\xa28\xc6Y\n"\x88P\x1ef\xa6\
-\x0b3\xd3\x85W(!P3\x8bO \x80\x9dZ\x8eS\xd1\x08\xef\x17\x92\xf0\xcbX\xd3\xdd\
-\x18\x13\xe7P\xb6\x03\xa8\x99\x05\xc2\x08P\xac\xbe\x1e-\\\x89\x0c\xdc\x84e\
-\xedFK\xb9\\\xff\xd8f\x8cH\x10\x00\xbb\xac\x980"\xc8\x80$\xe6wcN\x9e\xc5\x9a\
-\xeeB\xd9.J)0\x83x\xc1J\xccb\x1a\xa5\xc0\x897SJ\xb5]R3,t*\xbdir\x93+\xc0mGhP\
-*\xacf\x895\xc2\xa0\x01%i\\^>\xe5\x13H\x1f\xc2\xc8\xa5\x91\x86\xc4\r\xd7\xa1\
-\x15F\xf1\xed2\xc2\xb4p\xf4jdv\x0c!\x05\xf6\xe2Ux\xd1j\x00\x8c\xf4)\x8c\xc9~\
-\x10\x8ar\xbc\x91r\xfd\xf29\x18\xfdO\x87\x1e\xa1c\xae=\xcc:\x86\xd0\x11f\x05\
-\xba\xcc\xa1\x07\x05F,E\xc6*\xe0\x01V(L\xcbm\xeb\xf1r;\xc9\ruQ\xc8\\E\xc2\
-\x1aF7\xa7\x89d\xcf\xa0\x973\x0c\x9e\x9a`\xecX\x16\xcf\xf5\xd1\x83:\xf5\x9b\
-\x12\xd4\xc5\x06)\x16\x17Q\x08.F*\x8fH\xee4*;E\xdf[C\xe4\x06l\x84\x06f\xc4\
-\xa0\xf2\xba(\xd5\xa1a\xec\xd0F\x84\x91B\x97y\xf4 \x18\xd1\x14\x85@\t\x17\
-\x0f7\xe8\xe20BD\r\x12\xcduBi\x8a\xa1#cd\xba\xf2\x00\xd4oJ\x12o\x0c1r|\n=\
-\xacS\xb5&C\xcew\x08\xe5\xba~\xabfMx\x1c\xb3b\x0bC\x07N3\xb0\xef\x00\xca\xf7\
-PRpz\xc7\xcfX\xfe\xd0}$\xb4>p\x8e]V>]\x95\x88\x05N\xd2\xf5\xf34\xa1j\x8b\xe4\
-\xb5C\x8cwf\x19;1\xcd\xb2\xfb\x93\x84\xbc\x1f\xd1\xfb\xcb0\xf1V\x87D\xc5\x9b\
-\xd8\x91\xedH/K\xc0}\x91\xf4\xd1 f\x85G\xbcM\xe0\xa8?A\tcn\'\xc3\'D\x0f\xb3o\
-\xae=\xcc:\x1aI\x04\xb7\xa33\x81\x10\x02\xa1B\x98\xfc\x12\x8f\t\x94&\xf1\xbc\
-[X\xb4\xb6\x8d\xee\x9d\xff\x81=:H,\x15#Q\x1eF\x14\xea8\xf3\x83\x83\x14FG\x08\
-\xc4cH\xd3\xc4\xc9O2\xb47M1\xddB\xd3WWb\x98\xa7\xd0\x9d$\x9a\xddD\xe7\x8f\
-\x7f@qt\x043\x1a\xc1\x08\x87A8\xe4\xbb]\xeaWoA\xf3\xfb\x114\xa13\x8eg\x17\
-\xb1\xc7\xa70\x82\x16\xa6\xd0\xd0\x021J\xfa\x01\xf0r\x04\xdc\x16N\xbf\xfc\
-\x12\xf9\xa1!\x02\x898\xd2\xb2\x18;t\x9e\x91\xfd6\xbe[&T[Kp\xd3\xed\xe8v\x06\
-\xf9q\x9aknG)\x08VD\xa8\xa8\x96\xe4\x87{\x11R\x12\x8e/A\x0f\xc40T\x1a\xff\
-\xb2\xf2\x9dDI\x0f\xd3X\x8b?\xd5\xc9\xc8\xb9Q&\xdf\r\x11\xacL\xb2x}3\x15U\
-\xcb\xc1\tc\xf8\xc7\xc9\xbf\xa7\xb1xU\x13\x05\xef\x10\xb2\xe4\xa3km\x94G\x8e\
-\x13\xaf\xaa!^QG\x9e\x03\xcc\xb7Si=\xc4\x9e\xb9\xf60\xeb\x08\x96 \xb8\x1b]\
-\x8c!$\x08\x11$\xc0;(z\x00\x90\x9aM\xb0\xf2>\x02\xd6 \xf6\xd8a4Vc\x886z\xf7=\
-Oy\xf40\x8bo\xdeN\xcd\x8d\xdb@\x95q\x8bE\xfaw\xfd;\x85\x9e\xdd\x14\xd2+\x89\
-\xb4.\x02\xbf\x8a\xfe\xbd\xff\x8b;\xfe.M\xb7=B\xa2m\x032\xe0\xa3iq<\xa7\x88\
-\xd2\'0\xf5v\x84\xbb\x05]\x8c\xe2f\xcfr\xee\xbf\x9fB\x9a\x12\xa1I\xea7?It\
-\xd92\x94\x97%s\xba\x13g\xe4\x08\x8boy\x80\x9a\x1b\xb7!t\x1f\xdf\x86\x817\
-\x9eg\xea\xcc~\x0c]C\x98\xb5\xe8n\x94\xfe\xbd/~\xac\xa6\xb2v\x11\xbb\xfa\x0e\
-b-Or\xf6\x85\xa7\x10\xbaG\xeb\xbdO \xac\t\xa4VC\xef\xbe\x9f\\:_K-\xca\xda\
-\x890\xb7\xa0\xcbIL9H\xd3\xd6\xbf \xd6\xba\n_\xf4\xa0\x02\xef@n\x19\xb5\xebL\
-z_\xfb\x1fJS_%\x18,\xa2\xbc$\x93\xdd\x9d\xe8\x0c\x92Z\xf1\x10\x84\xfa\x08\
-\x8a\xd7a\x9e\x95\x88\x1e\x18\x99\x7f/N\x9f\x18]\xc3\x0bD\xd0l\x89\x94\x02\
-\xfc\x08\xd6\x84\x06\xeeLve\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\xe9%\x14\xac\
-\xa7f\xc3\xc3h\xe5\x9dH\xef \xd2|\x80\x9a\xb5\x0f\xd2\xdfu\x8aRw7\xb1\xa5\
-\x8f\xe2y\x02\xbb\xeb\x1c\xa1@\rUk\x1e@\xba?B\x16\xf6\x81L\xa0\t\x1d\x9cI(%\
-\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9f2\xed\xffF(PK\
-\xcd\xfa\xed\xe8\xceO\x11\xa5c\xf8\xd6\xe3T\xad\xbc\x87\xe2\xa9\x83\xe8\x8e\
-\x8eP\t\xf0\x02\x97\xd6\xccM\x83\x9e\xc1\xb3\xbe\x81\xa9"H%\xd0\xf4\n4\xfb%<\
-\xe3\xf1\xcb\xcaW\xd1\xb4\x1d\xad\xb0\x17\xcf\x8a\xa1\xd9\x1a\xa1\xf0bb\xcd[\
-\xd0\x9d\xef\x80s\x0c\xb2\x1eJ/Q\xb1l+\x01\xebu&\xda\x0f\xd1\xb0\xfd\xcf\xf1\
-\xfc<\xd9\xa3/\x90hX\x8d\x99\\\x8a\xcc\xef\x82,0\xcf\xce`tv/\x9dk\x0f\xb3O\
-\xac\x1a6\x0e#\x86\x82 \x01{\x18\x0eT\xc3\x94\x02\xc3Bm\xd8@\xa9\xf7\x1dTG\
-\x08\xab\xb5\x1995\x8e\'Rxg\x04z\xac\x1e\n\x01\xe4\xa1\x01(\x04\xd1\xea\xd3X\
-u\xb7\xa0\r\xd5\xc3h\x0cUH\xa0\x8aE\xdc\xf7\xc0H\xd4\xe2O\x1b\xe8G\xc6\xa1\
-\xf0\xe1O\xc5\x95\x10\xab\x82ui\xc4P\x00\xcbi\xa5y\xfb_\xa1E#\xe0\xfb\xf8c\
-\x03\xc8cgq\x1a\x17\xe1\x9c,a$\xeb\x11\xe5\x04\xe2\xc0\x14\xe4\x82\xc8\xa6~\
-\x8c\xda\x1b\xd0\x06k\x11^\x12\xbc\x04*\xa7.\xad\xf9k\xdd\xf5\x03\xc8\xa1\
-\x00B\n(\xa5\xa13\x89\xbfT^V>\xf2\t8\xd6\x00\x1b\xe20\x14\x9b\xd9\xa2\xfa)h\
-\x8f@\xa6\x11\x00\x11(#o\x8c\x12\x89\xdfHv\xef;\xd87\x14\xb0\xd3i\xca\xc7]jo\
-\xb9\x1b\x86\xf2p \x00\xfe\xfc\x9bk\xfa\xc03\x8f\xcf\xb5\x87Y\xc7h\x16$\xda\
-\xc6(t,A\xa2\xe1\xe7\'\x98\xda\xbf\x15\xa4\xc2\\\xeb\xa3g]\x06\xbe=H\xe1\xf4\
-MT\xddWO\xf1\xa8\x8d\xb9*\x8f*m"{&\x83\x97\x9d\xc4\t=\x8a\xfd\xaeKh\x99\xc5t\
-{\x1fS{\xda\x08\xd6\xd5\xe1ON"B@\xf9f2{\x86q\x1e\x1e\xa6\xa4\xfe\x00{\x8f\
-\x8b\xde\xa0c\\\xa5a\x1f)\xe3\xa5\x8b$\x96\x8f\xccx\x10\x1a\x88\x02\x99\x7f\
-\x16\xb8}\x02w\xa0\n\xad\xae\x8e\xe4\xdf\x97\xf02\xeb)t\xe6(\x8f\x0f\xe1\x04\
-\x1e\xa2\xb8\xdf&\xbc,\xc0\xf4\xben\xa6\xf6\xb4\x11\xba*\x85_H#\xa4\x7fI\xcd\
-\xd2>\x1bc\x89O\xe2\xda1\xf2\'Z\x11H\xfc\xfc(\x99W\xd7Q\xf1d\xe1\xb2\xf2\xb9\
-cY&v|\x99\xf8u\x83\x14:\x1bf>\xf3\xe6\x87\x18\xff\xfe\x1d\x94\xbb\xca\x17\
-\xfa8\xd4\x1b \xb6\xf6A\x06\x9e\x9d\xe6\xd4\x9f\xedD\x15]\xac\xba;\xb0\x16o$\
-\xf3\xedA\x8a\xbf\xf8\xc3\xb9\x9b\x00\x9f\x02\xfd\xe55\x1b\xe7\xda\xc3\xacSY\
-;\xcd\xdd\xec\xe5|\xaa\x12\xa7(\xa9\x1e\x18\x80{-\xf2\x13\x90\x1dr\xe8\xfa\
-\x96M&\x97\xe2\x9a?\xae\xc5X^\xe6\x8d\x1d\x8d\\\x17\xeb#\xfaX+G\xff\xf1\x0cC\
-O\xef\xa5\xe5\xf6E\xc8\xd5AJ\'\xf3\x9c~=C\xb1\xb9\x95\x9a\xcdq:{\x1c\x12\xa9\
-,\xe1GZ8\xf2O>\xa3\xdfm\xa7\xe5\xb6Z\xd4\x1dQt\x0bt\xc3%\xf9\xb5\x08\x07w5s\
-\xab\xdc\xc5\xf9T\x12\xa4F+\x03\xbc\x1e\xb9\x87\xf1d\x12\x92 5\xc5Wz\x0f\xa2\
-\xdf\xd7\xcc\xd1\xef\xf5R\xf8\xfeA\xea\xd7W\xe3o4\xe9\x7f_3\xd7\xd0B\xb2\xc6\
-\xa2\xd9\xed%;i\\R\xf3\xad\xe8j\x046w\x8bW\xe8\xae\xaaDI\x83f\x91\xe6\x17\
-\xc95\xac\xe9\xe9\xb9\xbc|\xfd.\xa7\x97.\xe3.u\x88\xded\x0c!%W\xab>v_\xb3\
-\x9e\xf1x\xf8B\x1f\xc7\xa6\x05\xdb\x1a]&n]\xcf\xf0\xc9A\x08\xe9\xac}p3S\xb9\
-\n^v\xe2\xd8k\xe6\xd7\xbb\xc7\xaf\xd1O\xfb\x85\xb9\xf60\xeb\xd4\xfbS\xd8v\
-\x0fcN\x89\xf1Q\x9d\xbeo\xa6A\xd3\xb1\x1d\x03%4\x10\x92%+\\\xda~?\xcf\xe1c-\
-\xbc\xd9\x1dbD\x0f\xf3\xd8\xfd#,\xdejp\xf4g9:\x9e=\x87\x92\x1a\xbe0\x08\'$+\
-\xee\x92\x98U\xc3\xbc\xbac\x05\xf5\xd5>\x0fn\x1b\xa5\xe6K\x1a\xa7\xf7\xe7\
-\xe9x\xae\xe7B\xdb\xca\x06\xc9=\x7fc0\xa6\x05\xb1Kg\x19+\x87\xb1\xa2\x12\xc7\
-\x1e\xe1\\9\xc7\xb0\xff\xfe\xc1\x9a\x0fn{\x82\x87\xb7\xe5\x08\xaf\x92\x1c\
-\xd97\xc6\xc1\xb73(\xa9\x11\xad6Xt\x8dd\xb0$\tF\xf2\xd8\xc5s\xbc}t\x15\xbf\
-\xb7\xf9\xe35\x07\xf5\x06\x1c\xc7\xa7T\xe8b\xc8\xae$\x18s(\xdbc\x9c)\xe5\x99\
-:vy\xf9^\xdb\xb1\x02)\xa7pJg\x98p\nX\x15\x06e\xfb,\xe7\xcaW3\xec\x7f\xe8\xb0\
-r\x14\x1a:\xa6\xa9\xd9\xdc\xc0\xc9S\x03\x84\x12&u\x1b#\xb4\xbf3\xc1\xb1\\p\
-\x8eF\xfe\xd3\xa3\xf7\xf7\x7f\xfe\x0f\n\xf3\xd9<\xa5|\x17\xad7\x08\xca\xed!l\
-\xc7\xc0\x17:\x91\x84\xa4\xba\xd1\xa1i\xb9M\xe3\xf2\x12\xfb\xda[x\xe1\xe5\
-\x06\x8a\xa54\xe9\x01\x85\xf4\x82\xdc\xbb\xf5\x08\x95\xcd\x06g\x0f\x07)\xe64\
-\xac\xa8\xe0\xfa/g\tW\xc2s\xffu\x17\xc7;\xb3\x18\xba\x86\xb2u\xee\x7f\xb4\
-\x93\xabn\xd28\xbe7\xc2\xe4\x98E\xacV\xb1\xeaKY\xba{R\x1c<\xb2\x8c\xaf\xac\
-\xedb\xc9\xea\x08\x15\xd5>\xe9~\x8b\x13\xa7\xa6\xb1\x9d\xd2\x05\x9f\xe9\xb4\
-\xa22\x02[\x9f8\xc3\xf9\xe3\x01N\xbe\x1dB3\x05\xeb\xb6fi\xbc*\xcf\x81]I\xa2I\
-\x8fsg+\xd8\xf1\xeaF\xb2\x13\x97\xd0<\x9c#V\x91\xa5X\xe8\xa6i\xe5\x04u-E\xba\
-\xceEy\xf7D\x1e\x01\x97\x9d\xaf:\x95\xc1.\x1c\xa1q\x9dN\xac\xc6\xa7\xbfo\x8c\
-\x13\'\'\xb0\x9d\xecE\xfd\xbc\xff\xa0\xcb\xfd[\x1c\xf2N\x89\x86\xd6\x04B\x8e\
-\xf1\xfa\xee\x12\xfd\xfd\xf23\x1e\xf1+\x87\xd8\xb8\xf1\xb5\xf9\xb9\xf6}\x02\
-\x84\x80m\x9b;\xb9u]7\xa9d\x11!g"g\xb3&\x99i\x8b\x91\x89\x08?\xff\xd52\xce\
-\x9d\xaf\xa4\xec\xca\x8b\x9e[\xde:\xc5\xa6\x15\x834\xd5O\xa3<\x85\x8fFgw\x82\
-\x83\'k\xe8\xee\x8b\\h+\xa5b\xe5\xd5\x13l^;@*^\xa0\\\x96(\xa9\xf3\xee{\x95\
-\xecn\xaf\'\x977\xb8\xf3\xd6A6\xb6MP\xf65^y\xb3\x9e\xa3\x1d\x15\x1f\xf1\x1a\
-\xb0<n^?\xc2\r+\x07\x91\xbe\x8b\xd4`8\x13\xe1\xec\xf9\n6\xad\x18\x04\x04\xaf\
-\xbc\xb9\x94\xa3\x1d\x95\x97\xd4\xcc\xe6\x0c\x84\x80;o\x1dfC\xdb8\xae//\xd2\
-\xbd\xdc|3\xff\xd1\xc3\xa6\xb6A\xca\xbe\xc6\xcbo\xb6p\xb4\xe3\xe2{\x12\x86\
-\x0e\x7f\xf7\xf5\x1c\xe5\xbeA^\xfbN\x0f_\xfb\x976\xbaG\xa3|\xf3\xe9\x08\xf3\
-\xf9J\x9eX\xb4\xe8\xbb\xf3\xd8\xfe\'C\x08\x08\x05?\x88\xeb\xba`;\xf3\xeb\xb3\
-\xe3\xef*\x1b\xd6\x94\xf9\xde\xd3\x93<\xf3\xd7\xfd\xb8\x9e\xe0/\xffu\x11O|=\
-\xce[\xfb?\x9b\xab\x04\xb3\x85>000\xd7\x1e\x16\xf8\x1cp\xdd\xf6q&\x073\x9c8\
-\x9c\xe7\x91\xa7\x02t\x9e\xb2ym\xe7"\xa6\xb3\xf3w{\x053\xa7\x02\x0b,\xf0\xa9\
-\t\x07m\xa2\xd1<\xf7\xfd)l\xbe\xd3\xe6\xf9\x17C\xf3\xbe8\x00\xf4\xb96\xb0\
-\xc0\xe7\x83g\xff\xb3\x9e\xa0YCe\xcc\xe7\xe9\xe7$/\xfddvnG~\xd6\x08\xf8\xc6\
-\x17\xe6\x1dd\x81\x05>)\xf3\x7f\r\\`\x81Yd\xa1@\x16X\xe0c\xf8? S\x96sPy\t\
-\xae\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory022Bitmap():
- return wxBitmapFromImage(getDocFactory022Image())
-
-def getDocFactory022Image():
- stream = cStringIO.StringIO(getDocFactory022Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory022')
-catalog['DocFactory022'] = ImageClass()
-catalog['DocFactory022'].getData = getDocFactory022Data
-catalog['DocFactory022'].getImage = getDocFactory022Image
-catalog['DocFactory022'].getBitmap = getDocFactory022Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory023Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ri\
-IDATx\x9c\xed\x9bYl]\xc7}\xc6\x7f3g\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb>\xe41(\x82\x02E\
-\x17\xa3A`g\xabQ\xb4p\x9d\xbaQ\x12;\x8e\x11\xc9Nd\xc9V\x14j\xb3\xac\x8d\x94%\
-\x91\x14\x97\xcb\x9d\xbc\xe4]\xcf\xb9\xe7\x9c\xe9\x03\x1d\xd9\xaa\x13I0D3T\
-\xf9{\xbc\x98s\xbf\xef\x9b\x99?f\xce\x19\x8c\xf8\x87o(\xc5\x02\x0b,\xf0\x1b\
-\xd1C\x95sma\x81\x05~w\xd1\x83\x0b\x05\xb2\xc0\x02\xbf\x15=\x9c\x98k\x0b\xb3\
-\x8b@a`#\xf1.\xfa\xdd\xc5\xc0\xc5\xfc\xfc<\x08\x1b\xed\xffxP@Y\x05\xf0\xd0fE\
-W\xe2c\x8a\x12>\x92\xb2\xb2P\x88Y\xd1\xb9\x96\xd1C\xf1\xb9\xb60{\x08|\xea\n{\
-\x88\xba\xe7\xf1?17\xa5\x04i\xea\xe4\xdd8\xb9`+\xd3\xfa\x12\\\x02\xb3\xe4\
-\xc1\xa3\xc1~\x9b\n\xaf\xfb"\x0f\x00\xba\xa5\xb0\xb5*\xba\xb4m\x94\t]U]\r\
-\x87\xa5\xeeO\t\x94\x87\xd1\x0c\xc1\xa8\\AZ\xdezU5\xfe?\xa0\x87\xaf\xe1\x02\
-\xb1\x18\xa1A\x7f\x813oT35\x10\x01\x04H\x89\xd4\x15\xe1\xaa"\x91\xda"-+\'p\
-\xac%\xf4\x06\xff\x16\x87\x9a\xab\xee!\xc8\x10\r\xc5W\xe8\xf8q\x9c\xa9t\x00\
-\x84\x00!\x01\x88\xd5\xdb\xacx\xf8]\x8aF-\xe3\xdc~UuC\x0cQg\xff\x90\x13?L\
-\x11[\\\xa2i\xdd\x11\n\xc1\x1b)s\r\x0f\xf8,\xa0G\xae\xe1\xfe\n)AB[\x83\xf0\
-\x8bHM\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8ctH\xf2#\x8d\xac\xbcOb\x1a\xbf\xa2/\
-\xfc\xc0E\xdb\x10\xe1{\x08\xb7\x8c\xf0=\x94\xd4P\xba\x81\x92\xbfy;$\\\x07\
-\xe9\x96\x01.j\x1bR:aq=\xca- 5.x\x00Aj\xa9I(\xd4\x86\x19l "?\xfd?\xben\xa24\
-\x1d\xe9\x14AH|\xc3\x9a)\xb0\xcbh\n\x14q\xbfH8\xbf\x1cI\x89l:\xc6\rQ\x8b\x9a\
-\xd0\x18\x19\xf9\xf1\x80_Q>\xa5>\xd67\x033\x9a^\x19_\xb7f\xb4\xca\xf6L33\xf0\
-\xe9g\x00\xdf\x0c^\xe4y\xbe\xa1W\x98\xfds\xeda\xd6\xb0\x94\x03\xc6\x06\x0c\
-\xfd]b)\x97\x9b\xff\xe86\xb4P\x10\x94O9o\xd3\x7f\xa4\x9b\xe1\x93i\xce\x1fLq\
-\xc3=Q\x1c\xe3,\x05\x11D(\x0f3\xd3\x85\x99\xe9\xc2+\x94\x10\xa8\x99\xc5\'\
-\x10\xc0N-\xc7\xa9h\x84\x8f\nI\xf8e\xac\xe9n\x8c\x89s(\xdb\x01\xd4\xcc\x02a\
-\x04(V\xdf\x8c\x16\xaeD\x06n\xc3\xb2v\xa3\xa5\\n~j3F$\x08\x80]VL\x18\x11d@\
-\x12\xf3\xbb1\'\xcfbMw\xa1l\x17\xa5\x14\x98A\xbc`%f1\x8dR\xe0\xc4\x9b)\xa5\
-\xda.\xab\x19\x16:\x95\xde4\xb9\xc9\x15\xe0\xb6#4(\x15V\xb3\xc4\x1aa\xd0\x80\
-\x924\xae,\x9f\xf2\t\xa4\x0fa\xe4\xd2HC\xe2\x86\xeb\xd0\n\xa3\xf8v\x19aZ8z52\
-;\x86\x90\x02{\xf1*\xbch5\x00F\xfa\x14\xc6d?\x08E9\xdeH\xb9~\xf9\x1c\x8c\xfe\
-\xd5A\x8f\xd01\xd7\x1ef\rC\xe8\x08\xb3\x02]\xe6\xd0\x83\x02#\x96"c\x15\xf0\
-\x00+\x14\xa6\xe5\xae\xf5x\xb9\x9d\xe4\x86\xba(d\xae#a\r\xa3\x9b\xd3D\xb2g\
-\xd0\xcb\x19\x06OM0v,\x8b\xe7\xfa\xe8A\x9d\xfaM\t\xeab\x83\x14\x8b\x8b(\x04\
-\x17#\x95G$w\x1a\x95\x9d\xa2\xef\xdd!r\x036B\x033bPyS\x94\xea\xd00vh#\xc2H\
-\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18!\xa2\x06\x89\xe6:\xa14\
-\xc5\xd0\x9112]y\x00\xea7%\x897\x86\x189>\x85\x1e\xd6\xa9Z\x93!\xe7;\x84r]\
-\xbfU\xb3&<\x8eY\xb1\x85\xa1\x03\xa7\x19\xd8w\x00\xe5{()8\xbd\xe3g,\x7f\xec!\
-\x12Z\x1f8\xc7\xae(\x9f\xaeJ\xc4\x02\'\xe9\xfay\x9aP\xb5E\xf2\xc6!\xc6;\xb3\
-\x8c\x9d\x98f\xd9\xc3IB\xde\x8f\xe8\xfde\x98x\xabC\xa2\xe2\x1d\xec\xc8v\xa4\
-\x97%\xe0\xbeB\xfah\x10\xb3\xc2#\xde&p\xd4\x9f\xa0\x841\xb7\x93\xe13\xa2\x87\
-\xd97\xd7\x1ef\r\x8d$\x82\xbb\xd1\x99@\x08\x81P!L~\x89\xc7\x04J\x93x\xde\x1d\
-,Z\xdbF\xf7\xce\x7f\xc7\x1e\x1d$\x96\x8a\x91(\x0f#\nu\x9c\xf9\xc1A\n\xa3#\
-\x04\xe21\xa4i\xe2\xe4\'\x19\xda\x9b\xa6\x98n\xa1\xe9\xcb+1\xccS\xe8N\x12\
-\xcdn\xa2\xf3\xc7?\xa08:\x82\x19\x8d`\x84\xc3 \x1c\xf2\xdd.\xf5\xab\xb7\xa0\
-\xf9\xfd\x08\x9a\xd0\x19\xc7\xb3\x8b\xd8\xe3S\x18A\x0bShh\x81\x18%\xfd\x00x9\
-\x02n\x0b\xa7_{\x95\xfc\xd0\x10\x81D\x1ciY\x8c\x1d:\xcf\xc8~\x1b\xdf-\x13\
-\xaa\xad%\xb8\xe9nt;\x83\xbc\x94\xe6\x9a\xbbQ\n\x82\x15\x11*\xaa%\xf9\xe1^\
-\x84\x94\x84\xe3K\xd0\x031\x0c\x95\xc6\xbf\xa2|\'Q\xd2\xc34\xd6\xe2Ou2rn\x94\
-\xc9\x0fB\x04+\x93,^\xdfLE\xd5rp\xc2\x18\xfeq\xf2\x1fj,^\xd5D\xc1;\x84,\xf9\
-\xe8Z\x1b\xe5\x91\xe3\xc4\xabj\x88W\xd4\x91\xe7\x00\xf3\xf54Z\x0f\xb1g\xae=\
-\xcc\x1a\x82%\x08\xeeG\x17c\x08\tB\x04\t\xf0>\x8a\x1e\x00\xa4f\x13\xac|\x88\
-\x805\x88=v\x18\x8d\xd5\x18\xa2\x8d\xde}/Q\x1e=\xcc\xe2\xdb\xb7Ss\xeb6Pe\xdc\
-b\x91\xfe]\xffF\xa1g7\x85\xf4J"\xad\x8b\xc0\xaf\xa2\x7f\xef\xff\xe0\x8e\x7f@\
-\xd3]O\x90h\xdb\x80\x0c\xf8hZ\x1c\xcf)\xa2\xf4\tL\xbd\x1d\xe1nA\x17\xa3\xb8\
-\xd9\xb3\x9c\xfb\xaf\xe7\x90\xa6Dh\x92\xfa\xcd\xcf\x12]\xb6\x0c\xe5e\xc9\x9c\
-\xee\xc4\x199\xc2\xe2;\x1e\xa1\xe6\xd6m\x08\xdd\xc7\xb7a\xe0\xed\x97\x98:\
-\xb3\x1fC\xd7\x10f-\xba\x1b\xa5\x7f\xef+\x97\xd4T\xd6.b\xd7\xdfC\xac\xe5Y\
-\xce\xbe\xfc\x1cB\xf7h}\xf0\x19\x845\x81\xd4j\xe8\xdd\xf7\x93\xcb\xe7k\xa9EY\
-;\x11\xe6\x16t9\x89)\x07i\xda\xfa\x17\xc4ZW\xe1\x8b\x1eT\xe0}\xc8-\xa3v\x9dI\
-\xef\x9b\xffMi\xea\xcb\x04\x83E\x94\x97d\xb2\xbb\x13\x9dAR+\x1e\x83P\x1fA\
-\xf1\x16\xcc\xd3\x12\xd1\x03#\xf3\xf7\x05\xea\xb2\xe8\x1a^ \x82fK\xa4\x14\
-\xe0G\xb0&4pg2++\x8e\xeb\x871K\x02\xd3\x0b#T\x0c\xca>vO/\xa1`=5\x1b\x1eG+\
-\xefDz\x07\x91\xe6#\xd4\xac}\x94\xfe\xaeS\x94\xba\xbb\x89-}\x12\xcf\x13\xd8]\
-\xe7\x08\x05j\xa8Z\xf3\x08\xd2\xfd\x11\xb2\xb0\x0fd\x02M\xe8\xe0LB)\x89g\x82\
-V\x02\xbd\x08V(\x81nE\x91\x86\x86\x15L\xa1\xb9.J6\x93i\xff6\xa1@-5\xeb\xb7\
-\xa3;?E\x94\x8e\xe1[OS\xb5\xf2\x01\x8a\xa7\x0e\xa2;:B%\xc0\x0b\\^37\rz\x06\
-\xcf\xfa\x1a\xa6\x8a \x95@\xd3+\xd0\xecW\xf1\x8c\xa7\xaf(_E\xd3v\xb4\xc2^<+\
-\x86fk\x84\xc2\x8b\x895oAw\xbe\x03\xce1\xc8z(\xbdD\xc5\xb2\xad\x04\xac\xb7\
-\x98h?D\xc3\xf6?\xc7\xf3\xf3d\x8f\xbeL\xa2a5fr)2\xbf\x0b\xb2\xc0<=\x83\xd1\
-\xd9\xbdt\xae=\xcc\x1e\xb1j\xd88\x8c\x18\n\x82\x04\xeca8P\rS\n\x0c\x0b\xb5a\
-\x03\xa5\xde\xf7Q\x1d!\xac\xd6f\xe4\xd48\x9eH\xe1\x9d\x11\xe8\xb1z(\x04\x90\
-\x87\x06\xa0\x10D\xabOc\xd5\xdd\x816T\x0f\xa31T!\x81*\x16q?\x04#Q\x8b?m\xa0\
-\x1f\x19\x87\xc2\'?\x15WB\xac\n\xd6\xa5\x11C\x01,\xa7\x95\xe6\xed\x7f\x85\
-\x16\x8d\x80\xef\xe3\x8f\r \x8f\x9d\xc5i\\\x84s\xb2\x84\x91\xacG\x94\x13\x88\
-\x03S\x90\x0b"\x9b\xfa1joA\x1b\xacExI\xf0\x12\xa8\x9c\xba\xbc\xe6\xafu\xd7\
-\x0f \x87\x02\x08)\xa0\x94\x86\xce$\xfeRyE\xf9\xc8\'\xe0X\x03l\x88\xc3Plf\
-\x8b\xea\xa7\xa0=\x02\x99F\x00D\xa0\x8c\xbc5J$~+\xd9\xbd\xefc\xdfR\xc0N\xa7)\
-\x1fw\xa9\xbd\xe3~\x18\xca\xc3\x81\x00\xf8\xf3w\x8e\xe9\x03/<=\xd7\x1ef\r\
-\xa3Y\x90h\x1b\xa3\xd0\xb1\x04\x89\x86\x9f\x9f`j\xffV\x90\ns\xad\x8f\x9eu\
-\x19\xf8\xe6 \x85\xd3\xb7Q\xf5P=\xc5\xa36\xe6\xaa<\xaa\xb4\x89\xec\x99\x0c^v\
-\x12\'\xf4$\xf6\x07.\xa1e\x16\xd3\xed}L\xedi#XW\x87?9\x89\x08\x01\xe5\xdb\
-\xc9\xec\x19\xc6y|\x98\x92\xfa\x03\xec=.z\x83\x8eq\x9d\x86}\xa4\x8c\x97.\x92\
-X>2\xe3Ah \nd\xfeY\xe0\xf6\t\xdc\x81*\xb4\xba:\x92\x7f_\xc2\xcb\xac\xa7\xd0\
-\x99\xa3<>\x84\x13x\x8c\xe2~\x9b\xf0\xb2\x00\xd3\xfb\xba\x99\xda\xd3F\xe8\
-\xba\x14~!\x8d\x90\xfee5K\xfbl\x8c%>\x89\x1b\xc7\xc8\x9fhE \xf1\xf3\xa3d\xde\
-XG\xc5\xb3\x85+\xca\xe7\x8ee\x99\xd8\xf1E\xe27\rR\xe8l\x98\xf9\xcc\x9b\x1fb\
-\xfc\xfb\xf7P\xee*_\xe8\xe3Po\x80\xd8\xdaG\x19xq\x9aS\x7f\xb6\x13Ut\xb1\xea\
-\xee\xc1Z\xbc\x91\xcc7\x07)\xfe\xe2\x0f\xe7n\x02\\\x05\xf4\xd7\xd6l\x9ck\x0f\
-\xb3Fe\xed4\xf7\xb3\x97\xf3\xa9J\x9c\xa2\xa4z`\x00\x1e\xb4\xc8O@v\xc8\xa1\
-\xeb\x1b6\x99\\\x8a\x1b\xfe\xb8\x16cy\x99\xb7w4rS\xac\x8f\xe8S\xad\x1c\xfd\
-\xc73\x0c=\xbf\x97\x96\xbb\x17!W\x07)\x9d\xccs\xfa\xad\x0c\xc5\xe6Vj6\xc7\
-\xe9\xecqH\xa4\xb2\x84\x9fh\xe1\xc8?\xf9\x8c~\xb7\x9d\x96\xbbjQ\xf7D\xd1-\
-\xd0\r\x97\xe4W"\x1c\xdc\xd5\xcc\x9dr\x17\xe7SI\x90\x1a\xad\x0c\xf0V\xe4\x01\
-\xc6\x93IH\x82\xd4\x14_\xea=\x88\xfeP3G\xbf\xd7K\xe1\xfb\x07\xa9__\x8d\xbf\
-\xd1\xa4\xff#\xcd\\C\x0b\xc9\x1a\x8bf\xb7\x97\xec\xa4qY\xcdw\xa3\xab\x11\xd8\
-\xdc/^\xa7\xbb\xaa\x12%\r\x9aE\x9a_$\xd7\xb0\xa6\xa7\xe7\xca\xf2\xf5\xbb\x9c\
-^\xba\x8c\xfb\xd4!z\x931\x84\x94\\\xaf\xfa\xd8}\xc3z\xc6\xe3\xe1\x0b}\x1c\
-\x9b\x16lkt\x99\xb8s=\xc3\'\x07!\xa4\xb3\xf6\xd1\xcdL\xe5*x\xcd\x89c\xaf\x99\
-\x9f\xef\x1e\xbfF?\xed\x17\xe6\xda\xc3\xacQ\xefOa\xdb=\x8c9%\xc6Gu\xfa\xbe\
-\x9e\x06M\xc7v\x0c\x94\xd0@H\x96\xacpi\xfb\xfd<\x87\x8f\xb5\xf0Nw\x88\x11=\
-\xccS\x0f\x8f\xb0x\xab\xc1\xd1\x9f\xe5\xe8x\xf1\x1cJj\xf8\xc2 \x9c\x90\xac\
-\xb8ObV\r\xf3\xc6\x8e\x15\xd4W\xfb<\xbam\x94\x9a/h\x9c\xde\x9f\xa7\xe3[=\x17\
-\xdaV6H\x1e\xf8\x1b\x831-\x88]:\xcbX9\x8c\x15\x958\xf6\x08\xe7\xca9\x86\xfd\
-\x8f\x0e\xd6|p\xdb\x13<\xbe-Gx\x95\xe4\xc8\xbe1\x0e\xbe\x97AI\x8dh\xb5\xc1\
-\xa2\x1b$\x83%I0\x92\xc7.\x9e\xe3\xbd\xa3\xab\xf8\xbd\xcd\x97\xd6\x1c\xd4\
-\x1bp\x1c\x9fR\xa1\x8b!\xbb\x92`\xcc\xa1l\x8fq\xa6\x94g\xea\xd8\x95\xe5{s\
-\xc7\n\xa4\x9c\xc2)\x9da\xc2)`U\x18\x94\xed\xb3\x9c+_\xcf\xb0\xff\x89\xc3\
-\xcaQh\xe8\x98\xa6fs\x03\'O\r\x10J\x98\xd4m\x8c\xd0\xfe\xfe\x04\xc7r\xc19\
-\x1a\xf9\xab\x87\xde\xdf\x7f\xed\x1e\x14\xe6\xb3yJ\xf9.Zo\x11\x94\xdbC\xd8\
-\x8e\x81/t"\tIu\xa3C\xd3r\x9b\xc6\xe5%\xf6\xb5\xb7\xf0\xf2k\r\x14Ki\xd2\x03\
-\n\xe9\x05yp\xeb\x11*\x9b\r\xce\x1e\x0eR\xcciXQ\xc1\xcd_\xcc\x12\xae\x84o\
-\xfd\xe7}\x1c\xef\xccb\xe8\x1a\xca\xd6y\xf8\xc9N\xae\xbbM\xe3\xf8\xde\x08\
-\x93c\x16\xb1Z\xc5\xaa/d\xe9\xeeIq\xf0\xc82\xbe\xb4\xb6\x8b%\xab#TT\xfb\xa4\
-\xfb-N\x9c\x9a\xc6vJ\x17|\xa6\xd3\x8a\xca\x08l}\xe6\x0c\xe7\x8f\x078\xf9^\
-\x08\xcd\x14\xac\xdb\x9a\xa5\xf1\xba<\x07v%\x89&=\xce\x9d\xad`\xc7\x1b\x1b\
-\xc9N\\F\xf3p\x8eXE\x96b\xa1\x9b\xa6\x95\x13\xd4\xb5\x14\xe9:\x17\xe5\x83\
-\x13y\x04\\q\xbe\xeaT\x06\xbbp\x84\xc6u:\xb1\x1a\x9f\xfe\xbe1N\x9c\x9c\xc0v\
-\xb2\x17\xf5\xf3\xfe\x83.\x0foq\xc8;%\x1aZ\x13\x089\xc6[\xbbK\xf4\xf7\xcb\
-\xcfy\xc4\xaf>b\xe3\xc67\xe7\xf7\x1ax\t\x84\x80m\x9b;\xb9s]7\xa9d\x11!g\xa2f\
-\xb3&\x99i\x8b\x91\x89\x08?\xff\xd52\xce\x9d\xaf\xa4\xec\xca\x8b\x9e[\xde:\
-\xc5\xa6\x15\x834\xd5O\xa3<\x85\x8fFgw\x82\x83\'k\xe8\xee\x8b\\h+\xa5b\xe5\
-\xf5\x13l^;@*^\xa0\\\x96(\xa9\xf3\xc1\x87\x95\xecn\xaf\'\x977\xb8\xf7\xceA6\
-\xb6MP\xf65^\x7f\xa7\x9e\xa3\x1d\x15\x9f\xf2\x1a\xb0<n_?\xc2-+\x07\x91\xbe\
-\x8b\xd4`8\x13\xe1\xec\xf9\n6\xad\x18\x04\x04\xaf\xbf\xb3\x94\xa3\x1d\x95\
-\x97\xd5\xcc\xe6\x0c\x84\x80{\xef\x1cfC\xdb8\xae//\xd2\xbd\xd2|3\xff\xd1\xc3\
-\xa6\xb6A\xca\xbe\xc6k\xef\xb4p\xb4\xe3\xe2\xfb\x11\x86\x0e\x7f\xf7\xd5\x1c\
-\xe5\xbeA\xde\xfcN\x0f_\xf9\x976\xbaG\xa3|\xfd\xf9\x08\xd7\xc2U<\xb1h\xd1w\
-\xaf\x81\x18\x97F\x08\x08\x05?\x8e\xe9\xba`;\xf3\xf3\xb3\xe3\xef\x1a\x1b\xd6\
-\x94\xf9\xde\xf3\x93\xbc\xf0\xd7\xfd\xb8\x9e\xe0/\xffu\x11\xcf|5\xce\xbb\xfb\
-?\x9f\xab\x04\xb3\x8d>000\xd7\x1e\x16\x98\xc7\xdc\xb4}\x9c\xc9\xc1\x0c\'\x0e\
-\xe7y\xe2\xb9\x00\x9d\xa7l\xde\xdc\xb9\x88\xe9\xec\xfc\xdf^\xc1\xcc\xe9\xc0\
-\x02\x0b|f\xc2A\x9bh4\xcfC\x7f\n\x9b\xef\xb5y\xe9\x95\xd05S\x1c\x00\xfa\\\
-\x1bX`~\xf3\xe2\x7f\xd4\x134k\xa8\x8c\xf9<\xff-\xc9\xab?\x99\x9d\xdb\x91s\
-\x85\x80\xaf]\xf3\xef \x0b,\xf0Y\xb9v\xd6\xc2\x05\x16\x98\x05\x16\nd\x81\x05\
-.\xc1\xff\x02\x04\xe7\x96s]oO\x1d\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory023Bitmap():
- return wxBitmapFromImage(getDocFactory023Image())
-
-def getDocFactory023Image():
- stream = cStringIO.StringIO(getDocFactory023Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory023')
-catalog['DocFactory023'] = ImageClass()
-catalog['DocFactory023'].getData = getDocFactory023Data
-catalog['DocFactory023'].getImage = getDocFactory023Image
-catalog['DocFactory023'].getBitmap = getDocFactory023Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory024Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rj\
-IDATx\x9c\xed\x9bYl]\xc7}\xc6\x7f3g\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb>\xe41(\x82\x02E\
-\x17\xa3A`;K\x8d\xa2\x85\xe3\xc4\x8d\x92\xd8q\x8cHv"K\xb6\xa2P\x0b-k\xa5,\
-\x89\xa4\xb8\\\xee\xe4%\xefz\xce=\xe7L\x1f\xe8\xc8V\x9dX,B\x99\x91\xc2\xdf\
-\xe3\xc5\x9c\xfb}\xdf\xcc\xfc1s\xce`\xc4?}M)\x16X`\x81_\x8b\x1e\xaa\x9co\x0b\
-\x0b,\xf0\xbb\x8b\x1e\\(\x90\x05\x16\xf8\x8d\xe8\xe1\xc4|[\xb8<\x08\x14\x066\
-\x12\xef\xa2\xdf]\x0c\\\xcc\xcf\xce\x83\xb0\xd1\xfe\x8f\x07\x05\x94U\x00\x0f\
-\xed\xb2\xe8J|LQ\xc2GRV\x16\nqYt~\x1f\xd0C\xf1\xf9\xb60\xf7\x08|\xea\n{\x88\
-\xba\xe7\xf1?67\xa5\x04i\xea\xe4\xdd8\xb9`+\xd3\xfa\x12\\\x02\x97\xc9\x83G\
-\x83\xfd\x16\x15^\xf7E\x1e\x00tKakUti\xdb(\x13\x9aS]\r\x87\xa5\xeeO\x08\x94\
-\x87\xd1\x0c\xc1\xa8\\AZ\xde<\xa7\x1a\xbfO\xe8\xe1\xab\xb0@,Fh\xd0\x9f\xe3\
-\xcc\xeb\xd5L\rD\x00\x01R"uE\xb8\xaaH\xa4\xb6H\xcb\xca\t\x1ck\t\xbd\xc1\xbf\
-\xc7\xa1f\xce=\x04\x19\xa2\xa1\xf82\xa7~\x14g*\x1d\x00!@H\x00b\xf56+\x1e|\
-\x87\xa2Q\xcb8\xb7\xce\xa9n\x88!\xea\xec\x1fp\xfc\x07)b\x8bK4\xad\xeb\xa0\
-\x10\xbc\x9e2W\xe1@\x7f\x06\xe8\x91\xab\xb0\xdfBJ\x90\xd0\xd6 \xfc"RS\x04\
-\xe3\x02# P\x08J\xf9 #\xa7$\xf9\x91FV\xde#1\x8d_\xd2\x17\xbe\xef\xa2m\x88\
-\xf0=\x84[F\xf8\x1eJj(\xdd@\xc9_\xbf\x1d\x12\xae\x83t\xcb\x00\x17\xb5\r)\x9d\
-\xb0\xb8\x16\xe5\x16\x90\x1a\x17<\x80 \xb5\xd4$\x14j\xc3\x0c6\x10\x91\x9f\
-\xfc\x1f_7Q\x9a\x8et\x8a $\xbea\xcd\x14\xd8%4\x05\x8a\xb8_$\x9c_\x8e\xa4D6\
-\x1d\xe3\xba\xa8EMh\x8c\x8c\xfch\xa0g\x95O\xa9\x8f\xf4\xcd\xc0\x8c\xa6W\xc6\
-\xd7\xad\x19\xad\xb2=\xd3\xcc\x0c|\xf2\x19\xc07\x83\x17y\xbeR\xd1+\xcc\xfe\
-\xf9\xf60\xe7X\xca\x01c\x03\x86\xfe\x0e\xb1\x94\xcb\x8d\x7fr\x0bZ(\x08\xca\
-\xa7\x9c\xb7\xe9\xef\xe8f\xf8D\x9a\xf3\x07S\\wW\x14\xc78KA\x04\x11\xca\xc3\
-\xcctaf\xba\xf0\n%\x04jf\xf1\t\x04\xb0S\xcbq*\x1a\xe1\xc3B\x12~\x19k\xba\x1b\
-c\xe2\x1c\xcav\x005\xb3@\x18\x01\x8a\xd57\xa2\x85+\x91\x81[\xb0\xac\xddh)\
-\x97\x1b\x9f\xd8\x8c\x11\t\x02`\x97\x15\x13F\x04\x19\x90\xc4\xfcn\xcc\xc9\
-\xb3X\xd3](\xdbE)\x05f\x10/X\x89YL\xa3\x148\xf1fJ\xa9\xb6Kj\x86\x85N\xa57Mnr\
-\x05\xb8\xed\x08\rJ\x85\xd5,\xb1F\x184\xa0$\x8d\xd9\xe5S>\x81\xf4!\x8c\\\x1a\
-iH\xdcp\x1dZa\x14\xdf.#L\x0bG\xafFf\xc7\x10R`/^\x85\x17\xad\x06\xc0H\x9f\xc4\
-\x98\xec\x07\xa1(\xc7\x1b)\xd7/\x9f\x87\xd1\x9f[\xf4\x08\xa7\xe6\xdb\xc3\x9c\
-c\x08\x1daV\xa0\xcb\x1czP`\xc4Rd\xac\x02\x1e`\x85\xc2\xb4\xdc\xb1\x1e/\xb7\
-\x93\xdcP\x17\x85\xcc5$\xacats\x9aH\xf6\x0cz9\xc3\xe0\xc9\t\xc6\x8ef\xf1\\\
-\x1f=\xa8S\xbf)A]l\x90bq\x11\x85\xe0b\xa4\xf2\x88\xe4N\xa3\xb2S\xf4\xbd3Dn\
-\xc0Fh`F\x0c*o\x88R\x1d\x1a\xc6\x0emD\x18)t\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\
-\x83.\x0e#D\xd4 \xd1\\\'\x94\xa6\x18\xea\x18#\xd3\x95\x07\xa0~S\x92xc\x88\
-\x91cS\xe8a\x9d\xaa5\x19r\xbeC(\xd7\xf5\x1b5k\xc2\xe3\x98\x15[\x18:p\x9a\x81\
-}\x07P\xbe\x87\x92\x82\xd3;~\xca\xf2G\x1e \xa1\xf5\x81stV\xf9tU"\x168A\xd7\
-\xcf\xd2\x84\xaa-\x92\xd7\x0f1\xde\x99e\xec\xf84\xcb\x1eL\x12\xf2~H\xef/\xc2\
-\xc4[\x1d\x12\x15ocG\xb6#\xbd,\x01\xf7e\xd2G\x82\x98\x15\x1e\xf16\x81\xa3\
-\xfe\x0c%\x8c\xf9\x9d\x0c\xbf%z\x98}\xf3\xeda\xce\xd1H"\xb8\x13\x9d\t\x84\
-\x10\x08\x15\xc2\xe4\x17xL\xa04\x89\xe7\xdd\xc6\xa2\xb5mt\xef\xfcO\xec\xd1Ab\
-\xa9\x18\x89\xf20\xa2P\xc7\x99\xef\x1f\xa40:B \x1eC\x9a&N~\x92\xa1\xbdi\x8a\
-\xe9\x16\x9a\xbe\xb8\x12\xc3<\x89\xee$\xd1\xec&:\x7f\xf4}\x8a\xa3#\x98\xd1\
-\x08F8\x0c\xc2!\xdf\xedR\xbfz\x0b\x9a\xdf\x8f\xa0\t\x9dq<\xbb\x88=>\x85\x11\
-\xb40\x85\x86\x16\x88Q\xd2\x0f\x80\x97#\xe0\xb6p\xfa\xd5W\xc8\x0f\r\x11H\xc4\
-\x91\x96\xc5\xd8\xa1\xf3\x8c\xec\xb7\xf1\xdd2\xa1\xdaZ\x82\x9b\xeeD\xb73\xc8\
-O\xd3\\s\'JA\xb0"BE\xb5$?\xdc\x8b\x90\x92p|\tz \x86\xa1\xd2\xf8\xb3\xcaw\x02\
-%=Lc-\xfeT\'#\xe7F\x99|?D\xb02\xc9\xe2\xf5\xcdTT-\x07\'\x8c\xe1\x1f#\xff\x81\
-\xc6\xe2UM\x14\xbcC\xc8\x92\x8f\xae\xb5Q\x1e9F\xbc\xaa\x86xE\x1dy\x0ep\xa5\
-\x9fB\xeb!\xf6\xcc\xb7\x879G\xb0\x04\xc1\xbd\xe8b\x0c!A\x88 \x01\xdeC\xd1\
-\x03\x80\xd4l\x82\x95\x0f\x10\xb0\x06\xb1\xc7\x0e\xa3\xb1\x1aC\xb4\xd1\xbb\
-\xefE\xca\xa3\x87Y|\xebvjn\xde\x06\xaa\x8c[,\xd2\xbf\xeb?(\xf4\xec\xa6\x90^I\
-\xa4u\x11\xf8U\xf4\xef\xfd\x1f\xdc\xf1\xf7i\xba\xe31\x12m\x1b\x90\x01\x1fM\
-\x8b\xe39E\x94>\x81\xa9\xb7#\xdc-\xe8b\x147{\x96s\xdfy\x06iJ\x84&\xa9\xdf\
-\xfc4\xd1e\xcbP^\x96\xcc\xe9N\x9c\x91\x0e\x16\xdf\xf6\x1057oC\xe8>\xbe\r\x03\
-o\xbd\xc8\xd4\x99\xfd\x18\xba\x860k\xd1\xdd(\xfd{_\xfeTMe\xed"v\xed]\xc4Z\
-\x9e\xe6\xecK\xcf t\x8f\xd6\xfb\x9fBX\x13H\xad\x86\xde}?\xbet\xbe\x96Z\x94\
-\xb5\x13anA\x97\x93\x98r\x90\xa6\xad\x7fE\xacu\x15\xbe\xe8A\x05\xde\x83\xdc2\
-j\xd7\x99\xf4\xbe\xf1=JS_$\x18,\xa2\xbc$\x93\xdd\x9d\xe8\x0c\x92Z\xf1\x08\
-\x84\xfa\x08\x8a7\xe1\n/\x11=0r\xe5\xbfH}\x02]\xc3\x0bD\xd0l\x89\x94\x02\xfc\
-\x08\xd6\x84\x06\xeeLVe\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\xe9%\x14\xac\xa7\
-f\xc3\xa3h\xe5\x9dH\xef \xd2|\x88\x9a\xb5\x0f\xd3\xdfu\x92Rw7\xb1\xa5\x8f\
-\xe3y\x02\xbb\xeb\x1c\xa1@\rUk\x1eB\xba?D\x16\xf6\x81L\xa0\t\x1d\x9cI(%\xf1L\
-\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9f2\xed\xdf \x14\xa8\
-\xa5f\xfdvt\xe7\'\x88\xd2Q|\xebI\xaaV\xdeG\xf1\xe4AtGG\xa8\x04x\x81Kk\xe6\
-\xa6A\xcf\xe0Y_\xc1T\x11\xa4\x12hz\x05\x9a\xfd\n\x9e\xf1\xe4\xac\xf2U4mG+\
-\xec\xc5\xb3bh\xb6F(\xbc\x98X\xf3\x16t\xe7\x9b\xe0\x1c\x85\xac\x87\xd2KT,\
-\xdbJ\xc0z\x93\x89\xf6C4l\xffK<?O\xf6\xc8K$\x1aVc&\x97"\xf3\xbb \x0b\\\xe1g0\
-:\xbb\x97\xce\xb7\x87\xb9\'V\r\x1b\x87\x11CA\x90\x80=\x0c\x07\xaaaJ\x81a\xa1\
-6l\xa0\xd4\xfb\x1e\xeaT\x08\xab\xb5\x1995\x8e\'Rxg\x04z\xac\x1e\n\x01\xe4\
-\xa1\x01(\x04\xd1\xea\xd3Xu\xb7\xa1\r\xd5\xc3h\x0cUH\xa0\x8aE\xdc\x0f\xc0H\
-\xd4\xe2O\x1b\xe8\x1d\xe3P\xf8\xf8\xa7\xe2J\x88U\xc1\xba4b(\x80\xe5\xb4\xd2\
-\xbc\xfdo\xd0\xa2\x11\xf0}\xfc\xb1\x01\xe4\xd1\xb38\x8d\x8bpN\x940\x92\xf5\
-\x88r\x02q`\nrAdS?F\xedMh\x83\xb5\x08/\t^\x02\x95S\x97\xd6\xfc\x95\xee\xfa\
-\x01\xe4P\x00!\x05\x94\xd2\xd0\x99\xc4_*g\x95\x8f|\x02\x8e6\xc0\x868\x0c\xc5\
-f\xb6\xa8~\n\xda#\x90i\x04@\x04\xca\xc8\x9b\xa3D\xe27\x93\xdd\xfb\x1e\xf6M\
-\x05\xect\x9a\xf21\x97\xda\xdb\xee\x85\xa1<\x1c\x08\x80\x7f\xe5\xcf-}\xe0\
-\xb9\'\xe7\xdb\xc3\x9cc4\x0b\x12mc\x14N-A\xa2\xe1\xe7\'\x98\xda\xbf\x15\xa4\
-\xc2\\\xeb\xa3g]\x06\xbe>H\xe1\xf4-T=PO\xf1\x88\x8d\xb9*\x8f*m"{&\x83\x97\
-\x9d\xc4\t=\x8e\xfd\xbeKh\x99\xc5t{\x1fS{\xda\x08\xd6\xd5\xe1ON"B@\xf9V2{\
-\x86q\x1e\x1d\xa6\xa4\xfe\x08{\x8f\x8b\xde\xa0c\\\xa3aw\x94\xf1\xd2E\x12\xcb\
-Gf<\x08\rD\x81\xcc\xbf\n\xdc>\x81;P\x85VWG\xf2\x1fKx\x99\xf5\x14:s\x94\xc7\
-\x87p\x02\x8fP\xdco\x13^\x16`z_7S{\xda\x08]\x93\xc2/\xa4\x11\xd2\xbf\xa4fi\
-\x9f\x8d\xb1\xc4\'q\xfd\x18\xf9\xe3\xad\x08$~~\x94\xcc\xeb\xeb\xa8x\xba0\xab\
-|\xeeX\x96\x89\x1d\x9f\'~\xc3 \x85\xce\x86\x99\xcf\xbc\xf9!\xc6\xbf{\x17\xe5\
-\xae\xf2\x85>\x0e\xf5\x06\x88\xad}\x98\x81\xe7\xa79\xf9\x17;QE\x17\xab\xee.\
-\xac\xc5\x1b\xc9|}\x90\xe2\xcf\xffx\xfe&\xc0\x1c\xa2\xbf\xbaf\xe3|{\x98s*k\
-\xa7\xb9\x97\xbd\x9cOU\xe2\x14%\xd5\x03\x03p\xbfE~\x02\xb2C\x0e]_\xb3\xc9\
-\xe4R\\\xf7\xa7\xb5\x18\xcb\xcb\xbc\xb5\xa3\x91\x1bb}D\x9fh\xe5\xc8?\x9fa\
-\xe8\xd9\xbd\xb4\xdc\xb9\x08\xb9:H\xe9D\x9e\xd3of(6\xb7R\xb39Ng\x8fC"\x95%\
-\xfcX\x0b\x1d\xff\xe23\xfa\xadvZ\xee\xa8E\xdd\x15E\xb7@7\\\x92_\x8appW3\xb7\
-\xcb]\x9cO%Aj\xb42\xc0\x9b\x91\xfb\x18O&!\tRS|\xa1\xf7 \xfa\x03\xcd\x1c\xf9v\
-/\x85\xef\x1e\xa4~}5\xfeF\x93\xfe\x0f5s\r-$k,\x9a\xdd^\xb2\x93\xc6%5\xdf\x89\
-\xaeF`s\xafx\x8d\xee\xaaJ\x944h\x16i~\x9e\\\xc3\x9a\x9e\x9e\xd9\xe5\xebw9\
-\xbdt\x19\xf7\xa8C\xf4&c\x08)\xb9V\xf5\xb1\xfb\xba\xf5\x8c\xc7\xc3\x17\xfa86\
--\xd8\xd6\xe82q\xfbz\x86O\x0cBHg\xed\xc3\x9b\x99\xcaU\xf0\xaa\x13\xc7^se\xbf\
-{\xfc\n\xfd\xb4_\x98o\x0fsN\xbd?\x85m\xf70\xe6\x94\x18\x1f\xd5\xe9\xfbj\x1a4\
-\x1d\xdb1PB\x03!Y\xb2\xc2\xa5\xed\x0f\xf3\x1c>\xda\xc2\xdb\xdd!F\xf40O<8\xc2\
-\xe2\xad\x06G~\x9a\xe3\xd4\xf3\xe7PR\xc3\x17\x06\xe1\x84d\xc5=\x12\xb3j\x98\
-\xd7w\xac\xa0\xbe\xda\xe7\xe1m\xa3\xd4|N\xe3\xf4\xfe<\xa7^\xe8\xb9\xd0\xb6\
-\xb2Ar\xdf\xdf\x19\x8ciA\xec\xd2Y\xc6\xcaa\xac\xa8\xc4\xb1G8W\xce1\xec\x7fx\
-\xb0\xe6\x83\xdb\x9e\xe0\xd1m9\xc2\xab$\x1d\xfb\xc68\xf8n\x06%5\xa2\xd5\x06\
-\x8b\xae\x93\x0c\x96$\xc1H\x1e\xbbx\x8ew\x8f\xac\xe2\x0f6\x7f\xba\xe6\xa0\
-\xde\x80\xe3\xf8\x94\n]\x0c\xd9\x95\x04c\x0ee{\x8c3\xa5<SGg\x97\xef\x8d\x1d+\
-\x90r\n\xa7t\x86\t\xa7\x80UaP\xb6\xcfr\xae|-\xc3\xfe\xc7\x0e+G\xa1\xe1\xd445\
-\x9b\x1b8qr\x80P\xc2\xa4nc\x84\xf6\xf7&8\x9a\x0b\xce\xd3\xc8\xcf=z\x7f\xff\
-\xd5wP\x98\xcf\xe6)\xe5\xbbh\xbdIPn\x0fa;\x06\xbe\xd0\x89$$\xd5\x8d\x0eM\xcb\
-m\x1a\x97\x97\xd8\xd7\xde\xc2K\xaf6P,\xa5I\x0f(\xa4\x17\xe4\xfe\xad\x1dT6\
-\x1b\x9c=\x1c\xa4\x98\xd3\xb0\xa2\x82\x1b?\x9f%\\\t/\xfc\xf7=\x1c\xeb\xccb\
-\xe8\x1a\xca\xd6y\xf0\xf1N\xae\xb9E\xe3\xd8\xde\x08\x93c\x16\xb1Z\xc5\xaa\
-\xcfe\xe9\xeeIq\xb0c\x19_X\xdb\xc5\x92\xd5\x11*\xaa}\xd2\xfd\x16\xc7ONc;\xa5\
-\x0b>\xd3iEe\x04\xb6>u\x86\xf3\xc7\x02\x9cx7\x84f\n\xd6m\xcd\xd2xM\x9e\x03\
-\xbb\x92D\x93\x1e\xe7\xceV\xb0\xe3\xf5\x8dd\'.\xa1y8G\xac"K\xb1\xd0M\xd3\xca\
-\t\xeaZ\x8at\x9d\x8b\xf2\xfe\xf1<\x02f\x9d\xaf:\x95\xc1.t\xd0\xb8N\'V\xe3\
-\xd3\xdf7\xc6\xf1\x13\x13\xd8N\xf6\xa2~\xde\x7f\xd0\xe5\xc1-\x0ey\xa7DCk\x02\
-!\xc7xsw\x89\xfe~\xf9\x19\x8f\xf8\xe5Cl\xdc\xf8\xc6\xd5\xb1\x16~\x0c!`\xdb\
-\xe6Nn_\xd7M*YD\xc8\x99\x88\xd9\xacIf\xdabd"\xc2\xcf~\xb9\x8cs\xe7+)\xbb\xf2\
-\xa2\xe7\x96\xb7N\xb1i\xc5 M\xf5\xd3(O\xe1\xa3\xd1\xd9\x9d\xe0\xe0\x89\x1a\
-\xba\xfb"\x17\xdaJ\xa9Xy\xed\x04\x9b\xd7\x0e\x90\x8a\x17(\x97%J\xea\xbc\xffA\
-%\xbb\xdb\xeb\xc9\xe5\r\xee\xbe}\x90\x8dm\x13\x94}\x8d\xd7\xde\xae\xe7\xc8\
-\xa9\x8aOx\rX\x1e\xb7\xae\x1f\xe1\xa6\x95\x83H\xdfEj0\x9c\x89p\xf6|\x05\x9bV\
-\x0c\x02\x82\xd7\xde^\xca\x91S\x95\x97\xd4\xcc\xe6\x0c\x84\x80\xbbo\x1ffC\
-\xdb8\xae//\xd2\x9dm\xbe\x99\xff\xe8aS\xdb e_\xe3\xd5\xb7[8r\xea\xe2{\x11\
-\x86\x0e\xff\xf0\xe5\x1c\xe5\xbeA\xde\xf8f\x0f_\xfa\xb76\xbaG\xa3|\xf5\xd9\
-\x08W\xd3\x15<\xb1h\xd1\xb7\xae\xa28\x17#\x04\x84\x82\x1f\xc5s]\xb0\x9d+\xfb\
-\xb3\xe3\xef\n\x1b\xd6\x94\xf9\xf6\xb3\x93<\xf7\xb7\xfd\xb8\x9e\xe0\xaf\xff}\
-\x11O}9\xce;\xfb?\x9b\xab\x04\x9f\x15\xfa\xc0\xc0\xc0|{X\xe0\n\xe4\x86\xed\
-\xe3L\x0ef8~8\xcfc\xcf\x04\xe8<i\xf3\xc6\xceELg\xaf\x9e\xed\x15\xcc\x9c\x12,\
-\xb0\xc0\xff\x9bp\xd0&\x1a\xcd\xf3\xc0\x9f\xc3\xe6\xbbm^|9t\xd5\x15\x07\x80>\
-\xdf\x06\x16\xb82y\xfe\xbf\xea\t\x9a5T\xc6|\x9e}A\xf2\xca\x8f/\xcf\xed\xc8\
-\xf9F\xc0W\xae\xdaw\x90\x05\x16\xf8m\xb9\xfa\xd6\xc4\x05\x16\x98C\x16\nd\x81\
-\x05>\x85\xff\x05\xe9l\x96s2)\xef7\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory024Bitmap():
- return wxBitmapFromImage(getDocFactory024Image())
-
-def getDocFactory024Image():
- stream = cStringIO.StringIO(getDocFactory024Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory024')
-catalog['DocFactory024'] = ImageClass()
-catalog['DocFactory024'].getData = getDocFactory024Data
-catalog['DocFactory024'].getImage = getDocFactory024Image
-catalog['DocFactory024'].getBitmap = getDocFactory024Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory025Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rc\
-IDATx\x9c\xed\x9bYl]\xc7}\xc6\x7f3g\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb>\xe41(\x82\x02E\
-\x17\xa3A`\xbbIj\x14-\\\'N\x94\xc4\x8ecD\xb2\x13Y\xb2\x15\x85\xa2$\xcbZ)K").\
-\x97;y\xc9\xbb\x9es\xcf9\xd3\x07:\xb2U\'\x16\x1f(3f\xf8{\xbc\x98s\xbf\xef\
-\x9b\x99?f\xce\x19\x8c\xf8\xa7o(\xc5"\x8b,\xf2\x1b\xd1C\x95\xf3ma\x91E~w\xd1\
-\x83\x8b\x05\xb2\xc8"\xbf\x15=\x9c\x98o\x0bs\x8b@a`#\xf1.\xfb\xdd\xc5\xc0\
-\xc5\xfc\xec<\x08\x1b\xed\xffyP@Y\x05\xf0\xd0\xae\x8a\xae\xc4\xc7\x14%|$ee\
-\xa1\x10WE\xe7\xf7\t=\x14\x9fo\x0bs\x87\xc0\xa7\xae\xb0\x8f\xa8{\x11\xffcsSJ\
-\x90\xa6N\xde\x8d\x93\x0b\xb62\xad/\xc3%p\x95<x4\xd8oQ\xe1u_\xe6\x01@\xb7\
-\x14\xb6VE\x97\xb6\x832\xa19\xd5\xd5pX\xee\xfe\x94@y\x18\xcd\x10\x8c\xcaU\
-\xa4\xe5\xcds\xaa\xf1\xfb\x88\x1e^@\x05b1B\x83\xfe\x1c\xe7^\xaffj \x02\x08\
-\x90\x12\xa9+\xc2UE"\xb5EZVO\xe0X\xcb\xe8\r\xfe=\x0e5s\xee!\xc8\x10\r\xc5\
-\x979\xf3\xe38S\xe9\x00\x08\x01B\x02\x10\xab\xb7Y\xf5\xe0;\x14\x8dZ\xc6\xb9u\
-NuC\x0cQg\xff\x90\x93?L\x11[Z\xa2i\xc3Q\n\xc1\xeb)\xb3\x80\x06x\x1e\xd0#\x0b\
-\xa8\xffBJ\x90\xd0\xd6!\xfc"RS\x04\xe3\x02# P\x08J\xf9 #g$\xf9\x91FV\xdf#1\
-\x8d_\xd1\x17\xbe\xef\xb2m\x88\xf0=\x84[F\xf8\x1eJj(\xdd@\xc9\xdf\xbc\x1d\
-\x12\xae\x83t\xcb\x00\x97\xb5\r)\x9d\xb0\xb8\x16\xe5\x16\x90\x1a\x97<\x80 \
-\xb5\xdc$\x14j\xc3\x0c6\x10\x91\x9f\xfc\x1f_7Q\x9a\x8et\x8a $\xbea\xcd\x14\
-\xd8\x154\x05\x8a\xb8_$\x9c_\x89\xa4D6\x1d\xe3\xba\xa8EMh\x8c\x8c\xfch\x80g\
-\x95O\xa9\x8f\xf4\xcd\xc0\x8c\xa6W\xc6\xd7\xad\x19\xad\xb2=\xd3\xcc\x0c|\xf2\
-\x19\xc07\x83\x97y\xfe\xbc\xa3W\x98\xfd\xf3\xeda\xce\xb0\x94\x03\xc6&\x0c\
-\xfd\x1db)\x97\x1b\xff\xe4\x16\xb4P\x10\x94O9o\xd3\x7f\xb4\x9b\xe1Si.v\xa4\
-\xb8\xee\xae(\x8eq\x9e\x82\x08"\x94\x87\x99\xe9\xc2\xcct\xe1\x15J\x08\xd4\
-\xcc\xe2\x13\x08`\xa7V\xe2T4\xc2\x87\x85$\xfc2\xd6t7\xc6\xc4\x05\x94\xed\x00\
-jf\x810\x02\x14\xaboD\x0bW"\x03\xb7`Y{\xd1R.7>\xb1\x15#\x12\x04\xc0.+&\x8c\
-\x082 \x89\xf9\xdd\x98\x93\xe7\xb1\xa6\xbbP\xb6\x8bR\n\xcc ^\xb0\x12\xb3\x98\
-F)p\xe2\xcd\x94RmW\xd4\x0c\x0b\x9dJo\x9a\xdc\xe4*p\xdb\x11\x1a\x94\nkYf\x8d0\
-h@I\x1a\xb3\xcb\xa7|\x02\xe9\xc3\x18\xb94\xd2\x90\xb8\xe1:\xb4\xc2(\xbe]F\
-\x98\x16\x8e^\x8d\xcc\x8e!\xa4\xc0^\xba\x06/Z\r\x80\x91>\x8d1\xd9\x0fBQ\x8e7\
-R\xae_9\x0f\xa3\x7fu\xd0#\x9c\x99o\x0fs\x86!t\x84Y\x81.s\xe8A\x81\x11K\x91\
-\xb1\nx\x80\x15\n\xd3r\xc7F\xbc\xdcnrC]\x142\xd7\x90\xb0\x86\xd1\xcdi"\xd9s\
-\xe8\xe5\x0c\x83\xa7\'\x18;\x9e\xc5s}\xf4\xa0N\xfd\x96\x04u\xb1A\x8a\xc5%\
-\x14\x82K\x91\xca#\x92;\x8b\xcaN\xd1\xf7\xce\x10\xb9\x01\x1b\xa1\x81\x191\
-\xa8\xbc!Juh\x18;\xb4\x19a\xa4\xd0e\x1e=\x08F4E!P\xc2\xc5\xc3\r\xba8\x8c\x10\
-Q\x83Ds\x9dP\x9ab\xe8\xe8\x18\x99\xae<\x00\xf5[\x92\xc4\x1bC\x8c\x9c\x98B\
-\x0f\xebT\xad\xcb\x90\xf3\x1dB\xb9\xae\xdf\xaaY\x13\x1e\xc7\xac\xd8\xc6\xd0\
-\xa1\xb3\x0c\x1c8\x84\xf2=\x94\x14\x9c\xdd\xf53V>\xf2\x00\t\xad\x0f\x9c\xe3\
-\xb3\xca\xa7\xab\x12\xb1\xc0)\xba~\x9e&Tm\x91\xbc~\x88\xf1\xce,c\'\xa7Y\xf1`\
-\x92\x90\xf7#z\x7f\x19&\xde\xea\x90\xa8x\x1b;\xb2\x13\xe9e\t\xb8/\x93>\x16\
-\xc4\xac\xf0\x88\xb7\t\x1c\xf5g(a\xcc\xefd\x98#\xf40\x07\xe6\xdb\xc3\x9c\xa1\
-\x91Dp\':\x13\x08!\x10*\x84\xc9/\xf1\x98@i\x12\xcf\xbb\x8d%\xeb\xdb\xe8\xde\
-\xfd_\xd8\xa3\x83\xc4R1\x12\xe5aD\xa1\x8es?\xe8\xa00:B \x1eC\x9a&N~\x92\xa1\
-\xfdi\x8a\xe9\x16\x9a\xbe\xbc\x1a\xc3<\x8d\xee$\xd1\xec&:\x7f\xfc\x03\x8a\
-\xa3#\x98\xd1\x08F8\x0c\xc2!\xdf\xedR\xbfv\x1b\x9a\xdf\x8f\xa0\t\x9dq<\xbb\
-\x88=>\x85\x11\xb40\x85\x86\x16\x88Q\xd2\x0f\x81\x97#\xe0\xb6p\xf6\xd5W\xc8\
-\x0f\r\x11H\xc4\x91\x96\xc5\xd8\xe1\x8b\x8c\x1c\xb4\xf1\xdd2\xa1\xdaZ\x82[\
-\xeeD\xb73\xc8O\xd3\\w\'JA\xb0"BE\xb5$?\xdc\x8b\x90\x92p|\x19z \x86\xa1\xd2\
-\xf8\xb3\xcaw\n%=Lc=\xfeT\'#\x17F\x99|?D\xb02\xc9\xd2\x8d\xcdTT\xad\x04\'\
-\x8c\xe1\x9f \xff\x81\xc6\xd25M\x14\xbc\xc3\xc8\x92\x8f\xae\xb5Q\x1e9A\xbc\
-\xaa\x86xE\x1dy\x0e\xb1PN\x9f\xf5\x10\xfb\xe6\xdb\xc3\x9c!X\x86\xe0^t1\x86\
-\x90 D\x90\x00\xef\xa1\xe8\x01@j6\xc1\xca\x07\x08X\x83\xd8cG\xd0X\x8b!\xda\
-\xe8=\xf0"\xe5\xd1#,\xbdu\'57\xef\x00U\xc6-\x16\xe9\xdf\xf3\x9f\x14z\xf6RH\
-\xaf&\xd2\xba\x04\xfc*\xfa\xf7\x7f\x1fw\xfc}\x9a\xeex\x8cD\xdb&d\xc0G\xd3\
-\xe2xN\x11\xa5O`\xea\xed\x08w\x1b\xba\x18\xc5\xcd\x9e\xe7\xc2\xff>\x834%B\
-\x93\xd4o}\x9a\xe8\x8a\x15(/K\xe6l\'\xce\xc8Q\x96\xde\xf6\x1057\xef@\xe8>\
-\xbe\r\x03o\xbd\xc8\xd4\xb9\x83\x18\xba\x860k\xd1\xdd(\xfd\xfb_\xfeTMe\xed!v\
-\xed]\xc4Z\x9e\xe6\xfcK\xcf t\x8f\xd6\xfb\x9fBX\x13H\xad\x86\xde\x03?\xb9r\
-\xbe\x96Z\x94\xb5\x1banC\x97\x93\x98r\x90\xa6\xed\x7fE\xacu\r\xbe\xe8A\x05\
-\xde\x83\xdc\nj7\x98\xf4\xbe\xf1=JS_&\x18,\xa2\xbc$\x93\xdd\x9d\xe8\x0c\x92Z\
-\xf5\x08\x84\xfa\x08\x8a7a\x81\x94\x88\x1e\x18Y8/T\xe8\x1a^ \x82fK\xa4\x14\
-\xe0G\xb0&4pg2*+\x8e\xeb\x871K\x02\xd3\x0b#T\x0c\xca>vO/\xa1`=5\x9b\x1eE+\
-\xefFz\x1dH\xf3!j\xd6?L\x7f\xd7iJ\xdd\xdd\xc4\x96?\x8e\xe7\t\xec\xae\x0b\x84\
-\x025T\xad{\x08\xe9\xfe\x08Y8\x002\x81&tp&\xa1\x94\xc43A+\x81^\x04+\x94@\xb7\
-\xa2HC\xc3\n\xa6\xd0\\\x17%\x9b\xc9\xb4\xff\x07\xa1@-5\x1bw\xa2;?E\x94\x8e\
-\xe3[OR\xb5\xfa>\x8a\xa7;\xd0\x1d\x1d\xa1\x12\xe0\x05\xae\xac\x99\x9b\x06=\
-\x83g}\rSE\x90J\xa0\xe9\x15h\xf6+x\xc6\x93\xb3\xcaW\xd1\xb4\x13\xad\xb0\x1f\
-\xcf\x8a\xa1\xd9\x1a\xa1\xf0Rb\xcd\xdb\xd0\x9do\x81s\x1c\xb2\x1eJ/Q\xb1b;\
-\x01\xebM&\xda\x0f\xd3\xb0\xf3/\xf1\xfc<\xd9c/\x91hX\x8b\x99\\\x8e\xcc\xef\
-\x81,\xb0@\xce`t\xf6.\x9fo\x0fsG\xac\x1a6\x0f#\x86\x82 \x01{\x18\x0eU\xc3\
-\x94\x02\xc3Bm\xdaD\xa9\xf7=\xd4\x99\x10Vk3rj\x1cO\xa4\xf0\xce\t\xf4X=\x14\
-\x02\xc8\xc3\x03P\x08\xa2\xd5\xa7\xb1\xeanC\x1b\xaa\x87\xd1\x18\xaa\x90@\x15\
-\x8b\xb8\x1f\x80\x91\xa8\xc5\x9f6\xd0\x8f\x8eC\xe1\xe3\x9f\x8a+!V\x05\x1b\
-\xd2\x88\xa1\x00\x96\xd3J\xf3\xce\xbfA\x8bF\xc0\xf7\xf1\xc7\x06\x90\xc7\xcf\
-\xe34.\xc19U\xc2H\xd6#\xca\t\xc4\xa1)\xc8\x05\x91M\xfd\x18\xb57\xa1\r\xd6"\
-\xbc$x\tTN]Y\xf3\xd7\xba\x1b\x07\x90C\x01\x84\x14PJCg\x12\x7f\xb9\x9cU>\xf2\
-\t8\xde\x00\x9b\xe20\x14\x9b\xd9\xa2\xfa)h\x8f@\xa6\x11\x00\x11(#o\x8e\x12\
-\x89\xdfLv\xff{\xd87\x15\xb0\xd3i\xca\'\\jo\xbb\x17\x86\xf2p(\x00\xfe\xc2\
-\x99S\xfa\xc0sO\xce\xb7\x879\xc3h\x16$\xda\xc6(\x9cY\x86D\xc3\xcfO0up;H\x85\
-\xb9\xdeG\xcf\xba\x0c|s\x90\xc2\xd9[\xa8z\xa0\x9e\xe21\x1bsM\x1eU\xdaB\xf6\\\
-\x06/;\x89\x13z\x1c\xfb}\x97\xd0\n\x8b\xe9\xf6>\xa6\xf6\xb5\x11\xac\xab\xc3\
-\x9f\x9cD\x84\x80\xf2\xadd\xf6\r\xe3<:LI\xfd\x11\xf6>\x17\xbdA\xc7\xb8F\xc3>\
-Z\xc6K\x17I\xac\x1c\x99\xf1 4\x10\x052\xff*p\xfb\x04\xee@\x15Z]\x1d\xc9\x7f,\
-\xe1e6R\xe8\xccQ\x1e\x1f\xc2\t<B\xf1\xa0MxE\x80\xe9\x03\xddL\xedk#tM\n\xbf\
-\x90FH\xff\x8a\x9a\xa5\x036\xc62\x9f\xc4\xf5c\xe4O\xb6"\x90\xf8\xf9Q2\xafo\
-\xa0\xe2\xe9\xc2\xac\xf2\xb9cY&v}\x91\xf8\r\x83\x14:\x1bf>\xf3\xe6\x87\x18\
-\xff\xee]\x94\xbb\xca\x97\xfa8\xd4\x1b \xb6\xfea\x06\x9e\x9f\xe6\xf4_\xecF\
-\x15]\xac\xba\xbb\xb0\x96n&\xf3\xcdA\x8a\xbf\xf8\xe3\xf9\x9b\x00W\x01\xfd\
-\xd5u\x9b\xe7\xdb\xc3\x9cQY;\xcd\xbd\xec\xe7b\xaa\x12\xa7(\xa9\x1e\x18\x80\
-\xfb-\xf2\x13\x90\x1dr\xe8\xfa\x86M&\x97\xe2\xba?\xad\xc5XY\xe6\xad]\x8d\xdc\
-\x10\xeb#\xfaD+\xc7\xfe\xf9\x1cC\xcf\xee\xa7\xe5\xce%\xc8\xb5AJ\xa7\xf2\x9c}\
-3C\xb1\xb9\x95\x9a\xadq:{\x1c\x12\xa9,\xe1\xc7Z8\xfa/>\xa3\xdfn\xa7\xe5\x8eZ\
-\xd4]Qt\x0bt\xc3%\xf9\x95\x08\x1d{\x9a\xb9]\xee\xe1b*\tR\xa3\x95\x01\xde\x8c\
-\xdc\xc7x2\tI\x90\x9a\xe2K\xbd\x1d\xe8\x0f4s\xec;\xbd\x14\xbe\xdbA\xfd\xc6j\
-\xfc\xcd&\xfd\x1fj\xe6\x1aZH\xd6X4\xbb\xbdd\'\x8d+j\xbe\x13]\x8b\xc0\xe6^\
-\xf1\x1a\xddU\x95(i\xd0,\xd2\xfc"\xb9\x8eu==\xb3\xcb\xd7\xefrv\xf9\n\xeeQ\
-\x87\xe9M\xc6\x10Rr\xad\xeac\xefu\x1b\x19\x8f\x87/\xf5qlZ\xb0\xa3\xd1e\xe2\
-\xf6\x8d\x0c\x9f\x1a\x84\x90\xce\xfa\x87\xb72\x95\xab\xe0U\'\x8e\xbdna\xbc{\
-\xfc\x1a\xfd\xac_\x98o\x0fsF\xbd?\x85m\xf70\xe6\x94\x18\x1f\xd5\xe9\xfbz\x1a\
-4\x1d\xdb1PB\x03!Y\xb6\xca\xa5\xed\x0f\xf3\x1c9\xde\xc2\xdb\xdd!F\xf40O<8\
-\xc2\xd2\xed\x06\xc7~\x96\xe3\xcc\xf3\x17PR\xc3\x17\x06\xe1\x84d\xd5=\x12\
-\xb3j\x98\xd7w\xad\xa2\xbe\xda\xe7\xe1\x1d\xa3\xd4|A\xe3\xec\xc1<g^\xe8\xb9\
-\xd4\xb6\xb2Ar\xdf\xdf\x19\x8ciA\xec\xd2y\xc6\xcaa\xac\xa8\xc4\xb1G\xb8P\xce\
-1\xec\x7fx\xb0\xe6\x83\xdb\x9e\xe0\xd1\x1d9\xc2k$G\x0f\x8c\xd1\xf1n\x06%5\
-\xa2\xd5\x06K\xae\x93\x0c\x96$\xc1H\x1e\xbbx\x81w\x8f\xad\xe1\x0f\xb6~\xba\
-\xe6\xa0\xde\x80\xe3\xf8\x94\n]\x0c\xd9\x95\x04c\x0ee{\x8cs\xa5<S\xc7g\x97\
-\xef\x8d]\xab\x90r\n\xa7t\x8e\t\xa7\x80UaP\xb6\xcfs\xa1|-\xc3\xfe\xc7\x0e+G\
-\xa1\xe1\xcc45[\x1b8uz\x80P\xc2\xa4ns\x84\xf6\xf7&8\x9e\x0b\xce\xd3\xc8_=\
-\xf4\xfe\xfe\x85sP\x98\xcf\xe6)\xe5\xbbh\xbdIPn\x0fa;\x06\xbe\xd0\x89$$\xd5\
-\x8d\x0eM+m\x1aW\x968\xd0\xde\xc2K\xaf6P,\xa5I\x0f(\xa4\x17\xe4\xfe\xedG\xa9\
-l68\x7f$H1\xa7aE\x057~1K\xb8\x12^\xf8\x9f{8\xd1\x99\xc5\xd05\x94\xad\xf3\xe0\
-\xe3\x9d\\s\x8b\xc6\x89\xfd\x11&\xc7,b\xb5\x8a5_\xc8\xd2\xdd\x93\xa2\xe3\xe8\
-\n\xbe\xb4\xbe\x8bek#TT\xfb\xa4\xfb-N\x9e\x9e\xc6vJ\x97|\xa6\xd3\x8a\xca\x08\
-l\x7f\xea\x1c\x17O\x048\xf5n\x08\xcd\x14l\xd8\x9e\xa5\xf1\x9a<\x87\xf6$\x89&\
-=.\x9c\xaf`\xd7\xeb\x9b\xc9N\\A\xf3H\x8eXE\x96b\xa1\x9b\xa6\xd5\x13\xd4\xb5\
-\x14\xe9\xba\x10\xe5\xfd\x93y\x04\xcc:_u*\x83]8J\xe3\x06\x9dX\x8dO\x7f\xdf\
-\x18\'OM`;\xd9\xcb\xfa\xf9`\x87\xcb\x83\xdb\x1c\xf2N\x89\x86\xd6\x04B\x8e\
-\xf1\xe6\xde\x12\xfd\xfd\xf23\x1e\xf1\xab\x8f\xd8\xbc\xf9\x8d\x05\xb3&\n\x01\
-;\xb6vr\xfb\x86nR\xc9"B\xceD\xcbfM2\xd3\x16#\x13\x11~\xfe\xab\x15\\\xb8XI\
-\xd9\x95\x97=\xb7\xb2u\x8a-\xab\x06i\xaa\x9fFy\n\x1f\x8d\xce\xee\x04\x1d\xa7\
-j\xe8\xee\x8b\\j+\xa5b\xf5\xb5\x13l]?@*^\xa0\\\x96(\xa9\xf3\xfe\x07\x95\xecm\
-\xaf\'\x977\xb8\xfb\xf6A6\xb7MP\xf65^{\xbb\x9ecg*>\xe15`y\xdc\xbaq\x84\x9bV\
-\x0f"}\x17\xa9\xc1p&\xc2\xf9\x8b\x15lY5\x08\x08^{{9\xc7\xceT^Q3\x9b3\x10\x02\
-\xee\xbe}\x98Mm\xe3\xb8\xbe\xbcLw\xb6\xf9f\xfe\xa3\x87-m\x83\x94}\x8dW\xdfn\
-\xe1\xd8\x99\xcb\xefC\x18:\xfc\xc3Ws\x94\xfb\x06y\xe3[=|\xe5\xdf\xda\xe8\x1e\
-\x8d\xf2\xf5g#,\xc4\xabwb\xc9\x92o/\xb8XB@(\xf8Q,\xd7\x05\xdbY\x18\x9f\x1d\
-\xe7\x9bM\xeb\xca|\xe7\xd9I\x9e\xfb\xdb~\\O\xf0\xd7\xff\xbe\x84\xa7\xbe\x1a\
-\xe7\x9d\x83\x9f\xcdU\x82\xcf\x1a}```\xbe=,\xf29\xe2\x86\x9d\xe3L\x0ef8y$\
-\xcfc\xcf\x04\xe8<m\xf3\xc6\xee%Lg\x17\xde\xf6\nfN\x0b\x16Yd\xd6\x84\x836\
-\xd1h\x9e\x07\xfe\x1c\xb6\xdem\xf3\xe2\xcb\xa1\x05[\x1c\x00\xfa|\x1bX\xe4\
-\xf3\xc5\xf3\xff]O\xd0\xac\xa12\xe6\xf3\xec\x0b\x92W~runG\xfe\xae \xe0k\x0b\
-\xee\x1dd\x91E\xe6\x8a\x85\xbb6.\xb2\xc8\x1c\xb0X \x8b,\xf2)\xfc\x1f\xce\x00\
-\x96s5\xe9\x04\xb0\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory025Bitmap():
- return wxBitmapFromImage(getDocFactory025Image())
-
-def getDocFactory025Image():
- stream = cStringIO.StringIO(getDocFactory025Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory025')
-catalog['DocFactory025'] = ImageClass()
-catalog['DocFactory025'].getData = getDocFactory025Data
-catalog['DocFactory025'].getImage = getDocFactory025Image
-catalog['DocFactory025'].getBitmap = getDocFactory025Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory026Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\re\
-IDATx\x9c\xed\x9bYl]\xc7}\xc6\x7f3g\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb>\xe41(\x82\x02E\
-\x17\xa3A`g\xabQ\xb4p\x9d\xbaQ\x12;\x8e\x11\xc9Nd\xc9V\x14j\xa1e\xad\x94%.\
-\xe2r\xb9\x93\x97\xbc\xeb9\xf7\x9c3}\xa0#[qb\t\x90d\xda\x0c\x7f\x8f\x17s\xee\
-\xf7}3\xf3\xc7\xcc9\x83\x11\xff\xf4\r\xa5X`\x81\x05~+z\xa8r\xae-,\xb0\xc0g\
-\x17=\xb8P \x0b,\xf0;\xd1\xc3\x89\xb9\xb6pe\x10(\x0cl$\xde\x05\xbf\xbb\x18\
-\xb8\x98\x9f\x9e\x07a\xa3\xfd\x86\x07\x05\x94U\x00\x0f\xed\xaa\xe8J|LQ\xc2GR\
-V\x16\nqUt~\x1f\xd1C\xf1\xb9\xb6p\xf9\x08|\xea\n{\x88\xba\xe7\xf0?27\xa5\x04\
-i\xea\xe4\xdd8\xb9`+3\xfa\x12\\\x02W\xc9\x83G\x83\xfd&\x15^\xcf\x05\x1e\x00t\
-KakUtk\xdb(\x13\xba\xa2\xba\x1a\x0eK\xdd\x9f\x12(\x8f\xa0\x19\x821\xb9\x82\
-\xb4\xbc\xf9\x8aj\xfc>\xa3\x87\xe7A\x81X\x8c\xd2\xa0?\xc7\x99\xd7\xaa\x99\
-\x1e\x8c\x00\x02\xa4D\xea\x8apU\x91Hm\x91\x96\x95\x938\xd6\x12\xfa\x82\x7f\
-\x8fC\xcd\x15\xf7\x10d\x98\x86\xe2K\x9c\xfaq\x9c\xe9t\x00\x84\x00!\x01\x88\
-\xd5\xdb\xacx\xf0m\x8aF-\x13\xdczEuC\x0cSg\xff\x90\xe3?L\x11[\\\xa2i]\x07\
-\x85\xe0\xf5\x94\x99\x07\x03\xfb\x19@\x8f\xcc\x83~\x0c)AB[\x83\xf0\x8bHM\x11\
-\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9e\x92\xe4G\x1bYy\x8f\xc44~E\x7f\xf8\xbe\
-\x0b\xb6!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%\x7f\xfbvH\xb8\x0e\xd2-\x03\\\
-\xd06\xa4t\xc2\xe2Z\x94[@j\x9c\xf7\x00\x82\xd4R\x93P\xa8\r3\xd8@D~\xfc\x7f|\
-\xddDi:\xd2)\x82\x90\xf8\x865[`\x17\xd1\x14(\xe2~\x91p~9\x92\x12\xd9t\x8c\
-\xeb\xa2\x165\xa1q2\xf2\xc3\x81\xbd\xa4|J}\xa8o\x06f5\xbd2\xben\xcdj\x95\xed\
-\xd9ff\xe0\xe3\xcf\x00\xbe\x19\xbc\xc0\xf3|A\xaf0\x07\xe6\xda\xc3ec)\x07\x8c\
-\r\x18\xfa\xdb\xc4R.7\xfe\xc9-h\xa1 (\x9fr\xdef\xa0\xa3\x87\x91\x13i\xce\x1d\
-Lq\xdd]Q\x1c\xe3,\x05\x11D(\x0f3\xd3\x8d\x99\xe9\xc6+\x94\x10\xa8\xd9\xc5\'\
-\x10\xc0N-\xc7\xa9h\x84\x0f\nI\xf8e\xac\x99\x1e\x8c\xc9.\x94\xed\x00jv\x810\
-\x02\x14\xaboD\x0bW"\x03\xb7`Y\xbb\xd1R.7>\xb1\x19#\x12\x04\xc0.+&\x8d\x082 \
-\x89\xf9=\x98Sg\xb1f\xbaQ\xb6\x8bR\n\xcc ^\xb0\x12\xb3\x98F)p\xe2\xcd\x94Rm\
-\x17\xd5\x0c\x0b\x9dJo\x86\xdc\xd4\np\xdb\x11\x1a\x94\n\xabYb\x8d2d@I\x1a\
-\x97\x96O\xf9\x04\xd2\x870ri\xa4!q\xc3uh\x851|\xbb\x8c0-\x1c\xbd\x1a\x99\x1d\
-GH\x81\xbdx\x15^\xb4\x1a\x00#}\x12cj\x00\x84\xa2\x1co\xa4\\\xbf|\x0eF\xff\
-\xea\xa2G85\xd7\x1e.\x1bC\xe8\x08\xb3\x02]\xe6\xd0\x83\x02#\x96"c\x15\xf0\
-\x00+\x14\xa6\xe5\x8e\xf5x\xb9\x9d\xe4\x86\xbb)d\xae!a\x8d\xa0\x9b3D\xb2g\
-\xd0\xcb\x19\x86NN2~4\x8b\xe7\xfa\xe8A\x9d\xfaM\t\xeabC\x14\x8b\x8b(\x04\x17\
-#\x95G$w\x1a\x95\x9d\xa6\xff\xedar\x836B\x033bPyC\x94\xea\xd0\x08vh#\xc2H\
-\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18%\xa2\x86\x88\xe6:\xa14\
-\xcdp\xc78\x99\xee<\x00\xf5\x9b\x92\xc4\x1bC\x8c\x1e\x9bF\x0f\xebT\xad\xc9\
-\x90\xf3\x1dB\xb9\xee\xdf\xa9Y\x13\x9e\xc0\xac\xd8\xc2\xf0\x81\xd3\x0c\xee;\
-\x80\xf2=\x94\x14\x9c\xde\xf13\x96?\xf2\x00\t\xad\x1f\x9c\xa3\x97\x94OW%b\
-\x81\x13t\xff<M\xa8\xda"y\xfd0\x13\x9dY\xc6\x8f\xcf\xb0\xec\xc1$!\xefG\xf4\
-\xfd2L\xbc\xd5!Q\xf1\x16vd;\xd2\xcb\x12p_"}$\x88Y\xe1\x11o\x138\xea\xcfP\xc2\
-\x98\xdb\xc9p\x85\xd1\xc3\xec\x9bk\x0f\x97\x8dF\x12\xc1\x9d\xe8L"\x84@\xa8\
-\x10&\xbf\xc4c\x12\xa5I<\xef6\x16\xadm\xa3g\xe7\x7fb\x8f\r\x11K\xc5H\x94G\
-\x10\x85:\xce\xfc\xe0 \x85\xb1Q\x02\xf1\x18\xd24q\xf2S\x0c\xefMSL\xb7\xd0\
-\xf4\xe5\x95\x18\xe6It\'\x89f7\xd1\xf9\xe3\x1fP\x1c\x1b\xc5\x8cF0\xc2a\x10\
-\x0e\xf9\x1e\x97\xfa\xd5[\xd0\xfc\x01\x04M\xe8L\xe0\xd9E\xec\x89i\x8c\xa0\
-\x85)4\xb4@\x8c\x92~\x00\xbc\x1c\x01\xb7\x85\xd3\xaf\xbcL~x\x98@"\x8e\xb4,\
-\xc6\x0f\x9dct\xbf\x8d\xef\x96\t\xd5\xd6\x12\xdct\'\xba\x9dA~\x92\xe6\x9a;Q\
-\n\x82\x15\x11*\xaa%\xf9\x91>\x84\x94\x84\xe3K\xd0\x031\x0c\x95\xc6\xbf\xa4|\
-\'P\xd2\xc34\xd6\xe2Ow2\xda5\xc6\xd4{!\x82\x95I\x16\xafo\xa6\xa2j98a\x0c\xff\
-\x18\xf9\xf75\x16\xafj\xa2\xe0\x1dB\x96|t\xad\x8d\xf2\xe81\xe2U5\xc4+\xea\
-\xc8s\x80\xf9v\xea\xac\x87\xd83\xd7\x1e.\x1b\xc1\x12\x04\xf7\xa2\x8bq\x84\
-\x04!\x82\x04x\x17E/\x00R\xb3\tV>@\xc0\x1a\xc2\x1e?\x8c\xc6j\x0c\xd1F\xdf\
-\xbe\x17(\x8f\x1df\xf1\xad\xdb\xa9\xb9y\x1b\xa82n\xb1\xc8\xc0\xae\xff\xa0\
-\xd0\xbb\x9bBz%\x91\xd6E\xe0W1\xb0\xf7\xffp\'\xde\xa3\xe9\x8e\xc7H\xb4m@\x06\
-|4-\x8e\xe7\x14Q\xfa$\xa6\xde\x8ep\xb7\xa0\x8b1\xdc\xecY\xba\xfe\xe7\x19\xa4\
-)\x11\x9a\xa4~\xf3\xd3D\x97-CyY2\xa7;qF;X|\xdbC\xd4\xdc\xbc\r\xa1\xfb\xf86\
-\x0c\xbe\xf9\x02\xd3g\xf6c\xe8\x1a\xc2\xacEw\xa3\x0c\xec}\xe9\x135\x95\xb5\
-\x8b\xd8\xb5w\x11ky\x9a\xb3/>\x83\xd0=Z\xef\x7f\naM"\xb5\x1a\xfa\xf6\xfd\xe4\
-\xe2\xf9ZjQ\xd6N\x84\xb9\x05]Na\xca!\x9a\xb6\xfe\x15\xb1\xd6U\xf8\xa2\x17\
-\x15x\x17r\xcb\xa8]g\xd2\xf7\xfa\xffR\x9a\xfe2\xc1`\x11\xe5%\x99\xea\xe9Dg\
-\x88\xd4\x8aG \xd4OP\xbc\x01\xf3\xacD\xf4\xc0\xe8<x\xb1\xd25\xbc@\x04\xcd\
-\x96H)\xc0\x8f`Mj\xe0\xcefSV\x1c\xd7\x0fc\x96\x04\xa6\x17F\xa8\x18\x94}\xec\
-\xde>B\xc1zj6<\x8aV\xde\x89\xf4\x0e"\xcd\x87\xa8Y\xfb0\x03\xdd\')\xf5\xf4\
-\x10[\xfa8\x9e\'\xb0\xbb\xbb\x08\x05j\xa8Z\xf3\x10\xd2\xfd\x11\xb2\xb0\x0fd\
-\x02M\xe8\xe0LA)\x89g\x82V\x02\xbd\x08V(\x81nE\x91\x86\x86\x15L\xa1\xb9.J6\
-\x93i\xff6\xa1@-5\xeb\xb7\xa3;?E\x94\x8e\xe2[OR\xb5\xf2>\x8a\'\x0f\xa2;:B%\
-\xc0\x0b\\\\37\x03z\x06\xcf\xfa\x1a\xa6\x8a \x95@\xd3+\xd0\xec\x97\xf1\x8c\'\
-/)_E\xd3v\xb4\xc2^<+\x86fk\x84\xc2\x8b\x895oAw\xbe\x03\xceQ\xc8z(\xbdD\xc5\
-\xb2\xad\x04\xac7\x98l?D\xc3\xf6\xbf\xc4\xf3\xf3d\x8f\xbcH\xa2a5fr)2\xbf\x0b\
-\xb2\xc0<;\x83\xd1\xd9\xbdt\xae=\\>\xb1j\xd88\x82\x18\x0e\x82\x04\xec\x118P\
-\r\xd3\n\x0c\x0b\xb5a\x03\xa5\xbewQ\xa7BX\xad\xcd\xc8\xe9\t<\x91\xc2;#\xd0c\
-\xf5P\x08 \x0f\rB!\x88V\x9f\xc6\xaa\xbb\rm\xb8\x1e\xc6b\xa8B\x02U,\xe2\xbe\
-\x0fF\xa2\x16\x7f\xc6@\xef\x98\x80\xc2G?\x15WB\xac\n\xd6\xa5\x11\xc3\x01,\
-\xa7\x95\xe6\xed\x7f\x83\x16\x8d\x80\xef\xe3\x8f\x0f"\x8f\x9e\xc5i\\\x84s\
-\xa2\x84\x91\xacG\x94\x13\x88\x03\xd3\x90\x0b"\x9b\x060joB\x1b\xaaExI\xf0\
-\x12\xa8\x9c\xba\xb8\xe6\xafu\xd7\x0f"\x87\x03\x08)\xa0\x94\x86\xce$\xfeRyI\
-\xf9\xc8\'\xe0h\x03l\x88\xc3plv\x8b\xea\xa7\xa0=\x02\x99F\x00D\xa0\x8c\xbc9J\
-$~3\xd9\xbd\xefb\xdfT\xc0N\xa7)\x1fs\xa9\xbd\xed^\x18\xce\xc3\x81\x00\xf8\
-\xf3`.\xfd\x06\xfa\xe0sO\xce\xb5\x87\xcb\xc6h\x16$\xda\xc6)\x9cZ\x82D\xc3\
-\xcfO2\xbd\x7f+H\x85\xb9\xd6G\xcf\xba\x0c~s\x88\xc2\xe9[\xa8z\xa0\x9e\xe2\
-\x11\x1bsU\x1eU\xdaD\xf6L\x06/;\x85\x13z\x1c\xfb=\x97\xd02\x8b\x99\xf6~\xa6\
-\xf7\xb4\x11\xac\xab\xc3\x9f\x9aB\x84\x80\xf2\xadd\xf6\x8c\xe0<:BI\xfd\x11\
-\xf6\x1e\x17\xbdA\xc7\xb8F\xc3\xee(\xe3\xa5\x8b$\x96\x8f\xcez\x10\x1a\x88\
-\x02\x99\x7f\x15\xb8\xfd\x02w\xb0\n\xad\xae\x8e\xe4?\x96\xf02\xeb)t\xe6(O\
-\x0c\xe3\x04\x1e\xa1\xb8\xdf&\xbc,\xc0\xcc\xbe\x1e\xa6\xf7\xb4\x11\xba&\x85_\
-H#\xa4\x7fQ\xcd\xd2>\x1bc\x89O\xe2\xfaq\xf2\xc7[\x11H\xfc\xfc\x18\x99\xd7\
-\xd6Q\xf1t\xe1\x92\xf2\xb9\xe3Y&w|\x91\xf8\rC\x14:\x1bf?\xf3\xe6\x87\x99\xf8\
-\xfe]\x94\xbb\xcb\xe7\xfb8\xd4\x17 \xb6\xf6a\x06\x9f\x9f\xe1\xe4_\xecD\x15]\
-\xac\xba\xbb\xb0\x16o$\xf3\xcd!\x8a\xbf\xf8\xe3\xb9\x9b\x00W\x11\xfd\x955\
-\x1b\xe7\xda\xc3eSY;\xc3\xbd\xec\xe5\\\xaa\x12\xa7(\xa9\x1e\x1c\x84\xfb-\xf2\
-\x93\x90\x1dv\xe8\xfe\x86M&\x97\xe2\xba?\xad\xc5X^\xe6\xcd\x1d\x8d\xdc\x10\
-\xeb\'\xfaD+G\xfe\xf9\x0c\xc3\xcf\xee\xa5\xe5\xceE\xc8\xd5AJ\'\xf2\x9c~#C\
-\xb1\xb9\x95\x9a\xcdq:{\x1d\x12\xa9,\xe1\xc7Z\xe8\xf8\x17\x9f\xb1\xef\xb6\
-\xd3rG-\xea\xae(\xba\x05\xba\xe1\x92\xfcJ\x84\x83\xbb\x9a\xb9]\xee\xe2\\*\tR\
-\xa3\x95A\xde\x88\xdc\xc7D2\tI\x90\x9a\xe2K}\x07\xd1\x1fh\xe6\xc8\xf7\xfa(|\
-\xff \xf5\xeb\xab\xf17\x9a\x0c|\xa0\x99kh!Yc\xd1\xec\xf6\x91\x9d2.\xaa\xf9vt\
-5\x02\x9b{\xc5\xab\xf4TU\xa2\xa4A\xb3H\xf3\x8b\xe4\x1a\xd6\xf4\xf6^Z\xbe\x01\
-\x97\xd3K\x97q\x8f:D_2\x86\x90\x92kU?\xbb\xaf[\xcfD<|\xbe\x8fc3\x82m\x8d.\
-\x93\xb7\xafg\xe4\xc4\x10\x84t\xd6>\xbc\x99\xe9\\\x05\xaf8q\xec5\xf3\xeb\xdd\
-\xe3\xd7\xe8\xa7\xfd\xc2\\{\xb8l\xea\xfdil\xbb\x97q\xa7\xc4\xc4\x98N\xff\xd7\
-\xd3\xa0\xe9\xd8\x8e\x81\x12\x1a\x08\xc9\x92\x15.m\x7f\x98\xe7\xf0\xd1\x16\
-\xde\xea\t1\xaa\x87y\xe2\xc1Q\x16o58\xf2\xb3\x1c\xa7\x9e\xefBI\r_\x18\x84\
-\x13\x92\x15\xf7H\xcc\xaa\x11^\xdb\xb1\x82\xfaj\x9f\x87\xb7\x8dQ\xf3\x05\x8d\
-\xd3\xfb\xf3\x9c\xfaV\xef\xf9\xb6\x95\r\x92\xfb\xfe\xce`\\\x0bb\x97\xce2^\
-\x0ecE%\x8e=JW9\xc7\x88\xff\xc1\xc1\x9a\x0fn{\x82G\xb7\xe5\x08\xaf\x92t\xec\
-\x1b\xe7\xe0;\x19\x94\xd4\x88V\x1b,\xbaN2T\x92\x04#y\xecb\x17\xef\x1cY\xc5\
-\x1fl\xfed\xcd!\xbd\x01\xc7\xf1)\x15\xba\x19\xb6+\t\xc6\x1c\xca\xf68gJy\xa6\
-\x8f^Z\xbe\xd7w\xac@\xcai\x9c\xd2\x19&\x9d\x02V\x85A\xd9>KW\xf9ZF\xfc\x8f\
-\x1cV\x8eA\xc3\xa9\x19j67p\xe2\xe4 \xa1\x84I\xdd\xc6\x08\xed\xefNr4\x17\x9c\
-\xa3\x91\xbf\xfa\xe8\x03\x03\x9f\xff\x83\xc2|6O)\xdfM\xebM\x82r{\x08\xdb1\
-\xf0\x85N$!\xa9nthZn\xd3\xb8\xbc\xc4\xbe\xf6\x16^|\xa5\x81b)MzP!\xbd \xf7o\
-\xed\xa0\xb2\xd9\xe0\xec\xe1 \xc5\x9c\x86\x15\x15\xdc\xf8\xc5,\xe1J\xf8\xd6\
-\x7f\xdf\xc3\xb1\xce,\x86\xae\xa1l\x9d\x07\x1f\xef\xe4\x9a[4\x8e\xed\x8d05n\
-\x11\xabU\xac\xfaB\x96\x9e\xde\x14\x07;\x96\xf1\xa5\xb5\xdd,Y\x1d\xa1\xa2\
-\xda\'=`q\xfc\xe4\x0c\xb6S:\xef3\x9dVTF`\xebSg8w,\xc0\x89wBh\xa6`\xdd\xd6,\
-\x8d\xd7\xe49\xb0+I4\xe9\xd1u\xb6\x82\x1d\xafm$;y\x11\xcd\xc39b\x15Y\x8a\x85\
-\x1e\x9aVNR\xd7R\xa4\xbb+\xca{\xc7\xf3\x08\xb8\xe4|\xd5\xa9\x0cv\xa1\x83\xc6\
-u:\xb1\x1a\x9f\x81\xfeq\x8e\x9f\x98\xc4v\xb2\x17\xf4\xf3\xfe\x83.\x0fnq\xc8;\
-%\x1aZ\x13\x089\xce\x1b\xbbK\x0c\x0c\xc8Oy\xc4?=\xc4\xc6\x8d\xaf\x7f\xee\xd7\
-F!`\xdb\xe6Nn_\xd7C*YD\xc8\xd9H\xd9\xacIf\xc6bt2\xc2\xcf\x7f\xb5\x8c\xaes\
-\x95\x94]y\xc1s\xcb[\xa7\xd9\xb4b\x88\xa6\xfa\x19\x94\xa7\xf0\xd1\xe8\xecIp\
-\xf0D\r=\xfd\x91\xf3m\xa5T\xac\xbcv\x92\xcdk\x07I\xc5\x0b\x94\xcb\x12%u\xde{\
-\xbf\x92\xdd\xed\xf5\xe4\xf2\x06w\xdf>\xc4\xc6\xb6I\xca\xbe\xc6\xabo\xd5s\
-\xe4T\xc5\xc7\xbc\x06,\x8f[\xd7\x8fr\xd3\xca!\xa4\xef"5\x18\xc9D8{\xae\x82M+\
-\x86\x00\xc1\xabo-\xe5\xc8\xa9\xca\x8bjfs\x06B\xc0\xdd\xb7\x8f\xb0\xa1m\x02\
-\xd7\x97\x17\xe8^j\xbe\xd9\xff\xe8eS\xdb\x10e_\xe3\x95\xb7Z8r\xea\xc2{\x10\
-\x86\x0e\xff\xf0\xd5\x1c\xe5\xfe!^\xffN/_\xf9\xb76z\xc6\xa2|\xfd\xd9\x08\xf3\
-\xf9\xca\x9dX\xb4\xe8\xbb\xf3&\x9e\x10\x10\n~\x18\xc7u\xc1v\xe6\xd7g\xc7\xb9\
-b\xc3\x9a2\xdf{v\x8a\xe7\xfev\x00\xd7\x13\xfc\xf5\xbf/\xe2\xa9\xaf\xc6y{\xff\
-\xa7s\x95`\xae\xd0\x07\x07\x07\xe7\xda\xc3\x02\x9f\x03n\xd8>\xc1\xd4P\x86\
-\xe3\x87\xf3<\xf6L\x80\xce\x936\xaf\xef\\\xc4Lv\xfen\xaf`\xf6\xd4`\x81\x05.J\
-8h\x13\x8d\xe6y\xe0\xcfa\xf3\xdd6/\xbc\x14\x9a\xf7\xc5\x01\xa0\xcf\xb5\x81\
-\x05>\x1f<\xff_\xf5\x04\xcd\x1a*c>\xcf~K\xf2\xf2O\xae\xce\xed\xc8\xcf\x1a\
-\x02\xbe6o\xdeA\x16X\xe0J3\xff\xd7\xc8\x05\x16\xb8\x0c\x16\nd\x81\x05>\x81\
-\xff\x07\xb2\x94\x96s\xb0\xd3\xbf\xdb\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory026Bitmap():
- return wxBitmapFromImage(getDocFactory026Image())
-
-def getDocFactory026Image():
- stream = cStringIO.StringIO(getDocFactory026Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory026')
-catalog['DocFactory026'] = ImageClass()
-catalog['DocFactory026'].getData = getDocFactory026Data
-catalog['DocFactory026'].getImage = getDocFactory026Image
-catalog['DocFactory026'].getBitmap = getDocFactory026Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory027Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rg\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em\xff\xc8\x9f\x99N\xa63\x9d\
-.L3\x19\xc8V\xa6\xd3\x0e%\xa5q\x12\x08abCblp\x1cY\xb60^elK\xb2\x96\xa7]z\xd2\
-[\xef}\xf7\xde\xd3?D\x0c.\x01{\\la\xa3\xcf\x9fo\xce}\xdf\xef\xf7\x9c\xf3\x9b\
-s\xee=s\xc4?|K)\xe6\x99g\x9e\xdf\x89\x1e\xaa\x9ck\x0b\xf3\xcc\xf3\xf9E\x0f\
-\xce\x17\xc8<\xf3|"z81\xd7\x16\xfe\x7f\x08\x14\x066\x12\xef\x9c\xdf]\x0c\\\
-\xcc\xcb\xe7A\xd8h\xff\xc7\x83\x02\xca*\x80\x87vIt%>\xa6(\xe1#)+\x0b\x85\xb8\
-$:_d\xf4P|\xae-\\<\x02\x9f\xba\xc2.\xa2\xee\x19\xfc\x8f\xccM)A\x9a:y7N.\xd8\
-\xca\x8c\xbe\x08\x97\xc0%\xf2\xe0\xd1`\xbfI\x85\xd7s\x8e\x07\x00\xddR\xd8Z\
-\x15\xdd\xda\x16\xca\x84>S]\r\x87\xc5\xee\xcf\t\x94G\xd0\x0c\xc1\x98\\FZ\xde\
-\xfc\x99j\xcc\x03z\xf8\n.\x10\x8bQ\x1a\xf4\xe78\xf9Z5\xd3\x83\x11@\x80\x94H]\
-\x11\xae*\x12\xa9-\xd2\xb2|\x12\xc7ZD_\xf0oq\xa8\xf9\xcc=\x04\x19\xa6\xa1\
-\xf8\x12\xc7\x7f\x1ag:\x1d\x00!@H\x00b\xf56\xcb\x1e|\x9b\xa2Q\xcb\x04\xb7~\
-\xa6\xba!\x86\xa9\xb3\x7f\xcc\x91\x1f\xa7\x88-,\xd1\xb4\xa6\x93B\xf0z\xca\\\
-\xc1\x03\xfa9D\x8f\\\xc1\xfd\x19R\x82\x84\xb6\n\xe1\x17\x91\x9a"\x18\x17\x18\
-\x01\x81BP\xca\x07\x19=.\xc9\x8f6\xb2\xfc\x1e\x89i\xfc\x86\xfe\xf0}\xe7lC\
-\x84\xef!\xdc2\xc2\xf7PRC\xe9\x06J\xfe\xee\xed\x90p\x1d\xa4[\x068\xa7mH\xe9\
-\x84\xc5\xb5(\xb7\x80\xd48\xeb\x01\x04\xa9\xc5&\xa1P\x1bf\xb0\x81\x88\xfc\
-\xf8\xff\xf8\xba\x89\xd2t\xa4S\x04!\xf1\rk\xb6\xc0\xce\xa3)P\xc4\xfd"\xe1\
-\xfcR$%\xb2\xe9\x18\xd7E-jB\xe3d\xe4\x87\x03zA\xf9\x94\xfaP\xdf\x0c\xccjze|\
-\xdd\x9a\xd5*\xdb\xb3\xcd\xcc\xc0\xc7\x9f\x01|3x\x8e\xe7\xab\r\xbd\xc2\x1c\
-\x98k\x0f\x17\x8d\xa5\x1c0\xd6a\xe8o\x13K\xb9\xdc\xf8G\xb7\xa0\x85\x82\xa0|\
-\xcay\x9b\x81\xce\x1eF\x8e\xa69\xd3\x91\xe2\xba\xbb\xa28\xc6)\n"\x88P\x1ef\
-\xa6\x1b3\xd3\x8dW(!P\xb3\x8bO \x80\x9dZ\x8aS\xd1\x08\x1f\x14\x92\xf0\xcbX3=\
-\x18\x93\xa7Q\xb6\x03\xa8\xd9\x05\xc2\x08P\xac\xbe\x11-\\\x89\x0c\xdc\x82e\
-\xedDK\xb9\xdc\xf8\xc4F\x8cH\x10\x00\xbb\xac\x984"\xc8\x80$\xe6\xf7`N\x9d\
-\xc2\x9a\xe9F\xd9.J)0\x83x\xc1J\xccb\x1a\xa5\xc0\x897SJ\xb5\x9dW3,t*\xbd\x19\
-rS\xcb\xc0mGhP*\xacd\x915\xca\x90\x01%i\\X>\xe5\x13H\xef\xc7\xc8\xa5\x91\x86\
-\xc4\r\xd7\xa1\x15\xc6\xf0\xed2\xc2\xb4p\xf4jdv\x1c!\x05\xf6\xc2\x15x\xd1j\
-\x00\x8c\xf41\x8c\xa9\x01\x10\x8ar\xbc\x91r\xfd\xd29\x18\xfd\xcb\x83\x1e\xe1\
-\xf8\\{\xb8h\x0c\xa1#\xcc\nt\x99C\x0f\n\x8cX\x8a\x8cU\xc0\x03\xacP\x98\x96;\
-\xd6\xe2\xe5\xb6\x93\x1b\xee\xa6\x90\xb9\x86\x845\x82n\xce\x10\xc9\x9eD/g\
-\x18:6\xc9\xf8\xa1,\x9e\xeb\xa3\x07u\xea7$\xa8\x8b\rQ,.\xa0\x10\\\x88T\x1e\
-\x91\xdc\tTv\x9a\xfe\xb7\x87\xc9\r\xda\x08\r\xcc\x88A\xe5\rQ\xaaC#\xd8\xa1\
-\xf5\x08#\x85.\xf3\xe8A0\xa2)\n\x81\x12.\x1en\xd0\xc5a\x94\x88\x1a"\x9a\xeb\
-\x82\xd24\xc3\x9d\xe3d\xba\xf3\x00\xd4oH\x12o\x0c1zx\x1a=\xacS\xb5*C\xcew\
-\x08\xe5\xba?Q\xb3&<\x81Y\xb1\x89\xe1}\'\x18\xdc\xb3\x0f\xe5{()8\xb1\xed\x17\
-,}\xe4\x01\x12Z?8\x87.(\x9f\xaeJ\xc4\x02G\xe9\xfee\x9aP\xb5E\xf2\xfaa&\xba\
-\xb2\x8c\x1f\x99a\xc9\x83IB\xdeO\xe8\xfbu\x98x\xabC\xa2\xe2-\xec\xc8V\xa4\
-\x97%\xe0\xbeD\xfa`\x10\xb3\xc2#\xde&p\xd4\x9f\xa0\x841\xb7\x93\xe1\x12\xa1\
-\x87\xd93\xd7\x1e.\x1a\x8d$\x82;\xd1\x99D\x08\x81P!L~\x8d\xc7$J\x93x\xdem,X\
-\xddF\xcf\xf6\x7f\xc7\x1e\x1b"\x96\x8a\x91(\x8f \nu\x9c\xfcQ\x07\x85\xb1Q\
-\x02\xf1\x18\xd24q\xf2S\x0c\xefNSL\xb7\xd0\xf4\xd5\xe5\x18\xe61t\'\x89f7\xd1\
-\xf5\xd3\x1fQ\x1c\x1b\xc5\x8cF0\xc2a\x10\x0e\xf9\x1e\x97\xfa\x95\x9b\xd0\xfc\
-\x01\x04M\xe8L\xe0\xd9E\xec\x89i\x8c\xa0\x85)4\xb4@\x8c\x92\xbe\x0f\xbc\x1c\
-\x01\xb7\x85\x13\xaf\xbcL~x\x98@"\x8e\xb4,\xc6\xf7\x9fat\xaf\x8d\xef\x96\t\
-\xd5\xd6\x12\xdcp\'\xba\x9dA~\x9a\xe6\xaa;Q\n\x82\x15\x11*\xaa%\xf9\x91>\x84\
-\x94\x84\xe3\x8b\xd0\x031\x0c\x95\xc6\xbf\xa0|GQ\xd2\xc34V\xe3Ow1zz\x8c\xa9\
-\xf7B\x04+\x93,\\\xdbLE\xd5Rp\xc2\x18\xfea\xf2\xefk,\\\xd1D\xc1\xdb\x8f,\xf9\
-\xe8Z\x1b\xe5\xd1\xc3\xc4\xabj\x88W\xd4\x91g\x1fW\xebi\xb3\x1eb\xd7\\{\xb8h\
-\x04\x8b\x10\xdc\x8b.\xc6\x11\x12\x84\x08\x12\xe0]\x14\xbd\x00H\xcd&X\xf9\
-\x00\x01k\x08{\xfc\x00\x1a+1D\x1b}{^\xa0<v\x80\x85\xb7n\xa5\xe6\xe6-\xa0\xca\
-\xb8\xc5"\x03;\xfe\x8dB\xefN\n\xe9\xe5DZ\x17\x80_\xc5\xc0\xee\xff\xc1\x9dx\
-\x8f\xa6;\x1e#\xd1\xb6\x0e\x19\xf0\xd1\xb48\x9eSD\xe9\x93\x98z;\xc2\xdd\x84.\
-\xc6p\xb3\xa78\xfd_\xcf M\x89\xd0$\xf5\x1b\x9f&\xbad\t\xca\xcb\x929\xd1\x853\
-\xda\xc9\xc2\xdb\x1e\xa2\xe6\xe6-\x08\xdd\xc7\xb7a\xf0\xcd\x17\x98>\xb9\x17C\
-\xd7\x10f-\xba\x1be`\xf7K\x9f\xaa\xa9\xac\x1d\xc4\xae\xbd\x8bX\xcb\xd3\x9cz\
-\xf1\x19\x84\xee\xd1z\xffS\x08k\x12\xa9\xd5\xd0\xb7\xe7g\xe7\xcf\xd7R\x8b\
-\xb2\xb6#\xccM\xe8r\nS\x0e\xd1\xb4\xf9/\x88\xb5\xae\xc0\x17\xbd\xa8\xc0\xbb\
-\x90[B\xed\x1a\x93\xbe\xd7\xff\x9b\xd2\xf4W\t\x06\x8b(/\xc9TO\x17:C\xa4\x96=\
-\x02\xa1~\x82\xe2\r\xb8JKD\x0f\x8c^\xc1/X\xba\x86\x17\x88\xa0\xd9\x12)\x05\
-\xf8\x11\xacI\r\xdc\xd9L\xca\x8a\xe3\xfaa\xcc\x92\xc0\xf4\xc2\x08\x15\x83\
-\xb2\x8f\xdd\xdbG(XO\xcd\xbaG\xd1\xca\xdb\x91^\x07\xd2|\x88\x9a\xd5\x0f3\xd0\
-}\x8cRO\x0f\xb1\xc5\x8f\xe3y\x02\xbb\xfb4\xa1@\rU\xab\x1eB\xba?A\x16\xf6\x80\
-L\xa0\t\x1d\x9c)(%\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\
-\xc9f2\xed\xdf%\x14\xa8\xa5f\xedVt\xe7\xe7\x88\xd2!|\xebI\xaa\x96\xdfG\xf1X\
-\x07\xba\xa3#T\x02\xbc\xc0\xf95s3\xa0g\xf0\xaco`\xaa\x08R\t4\xbd\x02\xcd~\
-\x19\xcfx\xf2\x82\xf2U4mE+\xec\xc6\xb3bh\xb6F(\xbc\x90X\xf3&t\xe7{\xe0\x1c\
-\x82\xac\x87\xd2KT,\xd9L\xc0z\x83\xc9\xf6\xfd4l\xfds<?O\xf6\xe0\x8b$\x1aVb&\
-\x17#\xf3; \x0b\\\xa5g0:;\x17\xcf\xb5\x87\x8b\'V\r\xebG\x10\xc3A\x90\x80=\
-\x02\xfb\xaaaZ\x81a\xa1\xd6\xad\xa3\xd4\xf7.\xeax\x08\xab\xb5\x199=\x81\'Rx\
-\'\x05z\xac\x1e\n\x01\xe4\xfeA(\x04\xd1\xea\xd3Xu\xb7\xa1\r\xd7\xc3X\x0cUH\
-\xa0\x8aE\xdc\xf7\xc1H\xd4\xe2\xcf\x18\xe8\x9d\x13P\xf8\xe8\xa7\xe2J\x88U\
-\xc1\x9a4b8\x80\xe5\xb4\xd2\xbc\xf5\xaf\xd0\xa2\x11\xf0}\xfc\xf1A\xe4\xa1S8\
-\x8d\x0bp\x8e\x960\x92\xf5\x88r\x02\xb1o\x1arAd\xd3\x00F\xedMhC\xb5\x08/\t^\
-\x02\x95S\xe7\xd7\xfc\xad\xee\xdaA\xe4p\x00!\x05\x94\xd2\xd0\x95\xc4_,/(\x1f\
-\xf9\x04\x1cj\x80uq\x18\x8e\xcdnQ\xfd\x14\xb4G \xd3\x08\x80\x08\x94\x917G\
-\x89\xc4o&\xbb\xfb]\xec\x9b\n\xd8\xe94\xe5\xc3.\xb5\xb7\xdd\x0b\xc3y\xd8\x17\
-\x00\xff\n\x9eC\xe7A\x1f|\xee\xc9\xb9\xf6p\xd1\x18\xcd\x82D\xdb8\x85\xe3\x8b\
-\x90h\xf8\xf9I\xa6\xf7n\x06\xa90W\xfb\xe8Y\x97\xc1o\x0fQ8q\x0bU\x0f\xd4S<hc\
-\xae\xc8\xa3J\x1b\xc8\x9e\xcc\xe0e\xa7pB\x8fc\xbf\xe7\x12Zb1\xd3\xde\xcf\xf4\
-\xae6\x82uu\xf8SS\x88\x10P\xbe\x95\xcc\xae\x11\x9cGG(\xa9?\xc0\xde\xe5\xa27\
-\xe8\x18\xd7h\xd8\x9de\xbct\x91\xc4\xd2\xd1Y\x0fB\x03Q \xf3\xcf\x02\xb7_\xe0\
-\x0eV\xa1\xd5\xd5\x91\xfc\xfb\x12^f-\x85\xae\x1c\xe5\x89a\x9c\xc0#\x14\xf7\
-\xda\x84\x97\x04\x98\xd9\xd3\xc3\xf4\xae6B\xd7\xa4\xf0\x0bi\x84\xf4\xcf\xabY\
-\xdacc,\xf2I\\?N\xfeH+\x02\x89\x9f\x1f#\xf3\xda\x1a*\x9e.\\P>w<\xcb\xe4\xb6/\
-\x13\xbfa\x88BW\xc3\xecg\xde\xfc0\x13?\xbc\x8brw\xf9l\x1f\x87\xfa\x02\xc4V?\
-\xcc\xe0\xf33\x1c\xfb\xb3\xed\xa8\xa2\x8bUw\x17\xd6\xc2\xf5d\xbe=D\xf1W\x7f8\
-w\x13\xe02\xa0\xbf\xb2j\xfd\\{\xb8h*kg\xb8\x97\xdd\x9cIU\xe2\x14%\xd5\x83\
-\x83p\xbfE~\x12\xb2\xc3\x0e\xdd\xdf\xb2\xc9\xe4R\\\xf7\xc7\xb5\x18K\xcb\xbc\
-\xb9\xad\x91\x1bb\xfdD\x9fh\xe5\xe0?\x9ed\xf8\xd9\xdd\xb4\xdc\xb9\x00\xb92H\
-\xe9h\x9e\x13od(6\xb7R\xb31NW\xafC"\x95%\xfcX\x0b\x9d\xff\xe43\xf6\xfdvZ\xee\
-\xa8E\xdd\x15E\xb7@7\\\x92_\x8b\xd0\xb1\xa3\x99\xdb\xe5\x0e\xce\xa4\x92 5Z\
-\x19\xe4\x8d\xc8}L$\x93\x90\x04\xa9)\xbe\xd2\xd7\x81\xfe@3\x07\x7f\xd0G\xe1\
-\x87\x1d\xd4\xaf\xad\xc6_o2\xf0\x81f\xae\xa1\x85d\x8dE\xb3\xdbGv\xca8\xaf\
-\xe6\xdb\xd1\x95\x08l\xee\x15\xaf\xd2SU\x89\x92\x06\xcd"\xcd\xaf\x92\xabX\
-\xd5\xdb{a\xf9\x06\\N,^\xc2=j?}\xc9\x18BJ\xaeU\xfd\xec\xbcn-\x13\xf1\xf0\xd9\
->\x8e\xcd\x08\xb64\xbaL\xde\xbe\x96\x91\xa3C\x10\xd2Y\xfd\xf0F\xa6s\x15\xbc\
-\xe2\xc4\xb1W]\x9d\xef\x1e\xbfE?\xe1\x17\xe6\xda\xc3ES\xefOc\xdb\xbd\x8c;%&\
-\xc6t\xfa\xbf\x99\x06M\xc7v\x0c\x94\xd0@H\x16-si\xfb\xfd<\x07\x0e\xb5\xf0VO\
-\x88Q=\xcc\x13\x0f\x8e\xb2p\xb3\xc1\xc1_\xe48\xfe\xfci\x94\xd4\xf0\x85A8!Yv\
-\x8f\xc4\xac\x1a\xe1\xb5m\xcb\xa8\xaf\xf6yx\xcb\x185_\xd28\xb17\xcf\xf1\xef\
-\xf4\x9em[\xd9 \xb9\xefo\x0c\xc6\xb5 v\xe9\x14\xe3\xe50VT\xe2\xd8\xa3\x9c.\
-\xe7\x18\xf1?8X\xf3\xc1mO\xf0\xe8\x96\x1c\xe1\x15\x92\xce=\xe3t\xbc\x93AI\
-\x8dh\xb5\xc1\x82\xeb$C%I0\x92\xc7.\x9e\xe6\x9d\x83+\xf8\xbd\x8d\x9f\xae9\
-\xa47\xe08>\xa5B7\xc3v%\xc1\x98C\xd9\x1e\xe7d)\xcf\xf4\xa1\x0b\xcb\xf7\xfa\
-\xb6eH9\x8dS:\xc9\xa4S\xc0\xaa0(\xdb\xa78]\xbe\x96\x11\xff#\x87\x95c\xd0p|\
-\x86\x9a\x8d\r\x1c=6H(aR\xb7>B\xfb\xbb\x93\x1c\xca\x05\xe7h\xe4/\x1f\xfa\xc0\
-\xc0\x95{P\x98\xcf\xe6)\xe5\xbbi\xbdIPn\x0fa;\x06\xbe\xd0\x89$$\xd5\x8d\x0eM\
-Km\x1a\x97\x96\xd8\xd3\xde\xc2\x8b\xaf4P,\xa5I\x0f*\xa4\x17\xe4\xfe\xcd\x9dT\
-6\x1b\x9c:\x10\xa4\x98\xd3\xb0\xa2\x82\x1b\xbf\x9c%\\\t\xdf\xf9\xcf{8\xdc\
-\x95\xc5\xd05\x94\xad\xf3\xe0\xe3]\\s\x8b\xc6\xe1\xdd\x11\xa6\xc6-b\xb5\x8a\
-\x15_\xca\xd2\xd3\x9b\xa2\xa3s\t_Y\xdd\xcd\xa2\x95\x11*\xaa}\xd2\x03\x16G\
-\x8e\xcd`;\xa5\xb3>\xd3iEe\x046?u\x923\x87\x03\x1c}\'\x84f\n\xd6l\xce\xd2xM\
-\x9e};\x92D\x93\x1e\xa7OU\xb0\xed\xb5\xf5d\'\xcf\xa3y G\xac"K\xb1\xd0C\xd3\
-\xf2I\xeaZ\x8at\x9f\x8e\xf2\xde\x91<\x02.8_u*\x83]\xe8\xa4q\x8dN\xac\xc6g\
-\xa0\x7f\x9c#G\'\xb1\x9d\xec9\xfd\xbc\xb7\xc3\xe5\xc1M\x0ey\xa7DCk\x02!\xc7y\
-cg\x89\x81\x01y\x99G\xfc\xf2#\xd6\xaf\x7f\xfd\x8a]#\x85\x80-\x1b\xbb\xb8}M\
-\x0f\xa9d\x11!g\xa3d\xb3&\x99\x19\x8b\xd1\xc9\x08\xbf\xfc\xcd\x12N\x9f\xa9\
-\xa4\xec\xcas\x9e[\xda:\xcd\x86eC4\xd5\xcf\xa0<\x85\x8fFWO\x82\x8e\xa35\xf4\
-\xf4G\xce\xb6\x95R\xb1\xfc\xdaI6\xae\x1e$\x15/P.K\x94\xd4y\xef\xfdJv\xb6\xd7\
-\x93\xcb\x1b\xdc}\xfb\x10\xeb\xdb&)\xfb\x1a\xaf\xbeU\xcf\xc1\xe3\x15\x1f\xf3\
-\x1a\xb0<n];\xcaM\xcb\x87\x90\xbe\x8b\xd4`$\x13\xe1\xd4\x99\n6,\x1b\x02\x04\
-\xaf\xbe\xb5\x98\x83\xc7+\xcf\xab\x99\xcd\x19\x08\x01w\xdf>\xc2\xba\xb6\t\\_\
-\x9e\xa3{\xa1\xf9f\xff\xa3\x97\rmC\x94}\x8dW\xdej\xe1\xe0\xf1s\xef?\x18:\xfc\
-\xdd\xd7s\x94\xfb\x87x\xfd{\xbd|\xed_\xda\xe8\x19\x8b\xf2\xcdg#|\x11\xae\xda\
-\x89\x05\x0b\xbe\x7f\xc5\xc7\x14\x02B\xc1\x0fc\xb8.\xd8\xce\xd5\xf9\xd9\xf1r\
-\xb3nU\x99\x1f<;\xc5s\x7f=\x80\xeb\t\xfe\xf2_\x17\xf0\xd4\xd7\xe3\xbc\xbd\
-\xf7\xf2\\%\x98k\xf4\xc1\xc1\xc1\xb9\xf60\xcf\xe7\x98\x1b\xb6N05\x94\xe1\xc8\
-\x81<\x8f=\x13\xa0\xeb\x98\xcd\xeb\xdb\x170\x93\xbd\xfa\xb7W0{z0\xcf<\x9fH8h\
-\x13\x8d\xe6y\xe0Oa\xe3\xdd6/\xbc\x14\xfa\xc2\x14\x07\x80>\xd7\x06\xe6\xf9|\
-\xf3\xfc\x7f\xd4\x134k\xa8\x8c\xf9<\xfb\x1d\xc9\xcb?\xbb4\xb7#?\xaf\x08\xf8\
-\xc6\x15\xff\x0e2\xcf<\x97\x8a/\xceZ9\xcf<\x17\xc1|\x81\xcc3\xcf\xa7\xf0\xbf\
-\x97(\x96s\xce\x83$\xfb\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory027Bitmap():
- return wxBitmapFromImage(getDocFactory027Image())
-
-def getDocFactory027Image():
- stream = cStringIO.StringIO(getDocFactory027Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory027')
-catalog['DocFactory027'] = ImageClass()
-catalog['DocFactory027'].getData = getDocFactory027Data
-catalog['DocFactory027'].getImage = getDocFactory027Image
-catalog['DocFactory027'].getBitmap = getDocFactory027Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory028Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rg\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\x8c\
-\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xaaZEUA\xadh\xfbG\xfe\
-\x8c\xaa\xa8R\xd5\x055\x8a\x80,EU+JJ\xe3$\x10\x82bCblp\x9c\xf1\x86\xf1:\xc6\
-\x9e\xc5\xb3\xbc\xd9g\xde\xcc[\xef}\xf7\xde\xd3?\x86\x18\\\x12<\xae\xb0\x07\
-\x9b\xf9\xfc\xf9t\xee\xfb~\xbf\xe7\x9c\x9f\xce\xb9\xf7\xe8\x88\x7f\xf8\x96R\
-\xcc3\xcf<\xbf\x15=T9\xd7\x16\xe6\x99\xe7\xf3\x8b\x1e\x9c/\x90y\xe6\xf9\x9d\
-\xe8\xe1\xc4\\[\xf8\xff!P\x18\xd8H\xbc\xf3~w1p1/\x9f\x07a\xa3\xfd\x1f\x0f\n(\
-\xab\x00\x1e\xda%\xd1\x95\xf8\x98\xa2\x84\x8f\xa4\xac,\x14\xe2\x92\xe8\xcc\
-\x03z(>\xd7\x16.\x1e\x81O]a\x17Q\xf7,\xfe\xc7\xe6\xa6\x94 M\x9d\xbc\x1b\'\
-\x17leZ_\x84K\xe0\x12y\xf0h\xb0\xdf\xa2\xc2\xeb>\xcf\x03\x80n)l\xad\x8a.m\
-\x0beB\x9f\xa9\xae\x86\xc3b\xf7g\x04\xca\xc3h\x86`T.#-o\xfeL5\xe6\xf9\x08=|\
-\x05\x16\x88\xc5\x08\r\xfas\x9c~\xbd\x9a\xa9\x81\x08 @J\xa4\xae\x08W\x15\x89\
-\xd4\x16iY>\x81c-\xa27\xf8\xb78\xd4|\xe6\x1e\x82\x0c\xd1P|\x99\x93?\x893\x95\
-\x0e\x80\x10 $\x00\xb1z\x9be\x0f\xbeC\xd1\xa8e\x9c[?S\xdd\x10C\xd4\xd9?\xe2\
-\xd8\x8fR\xc4\x16\x96hZs\x88B\xf0z\xca\\\x81\x03y\x05\xa0G\xae\xc0~\r)AB[\
-\x85\xf0\x8bHM\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9c\x94\xe4G\x1aY~\x8f\xc4\
-4~M_\xf8\xbe\xf3\xb6!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%\x7f\xfbvH\xb8\x0e\
-\xd2-\x03\x9c\xd76\xa4t\xc2\xe2Z\x94[@j\x9c\xf3\x00\x82\xd4b\x93P\xa8\r3\xd8\
-@D~\xf2\x7f|\xddDi:\xd2)\x82\x90\xf8\x865S`\x17\xd0\x14(\xe2~\x91p~)\x92\x12\
-\xd9t\x8c\xeb\xa2\x165\xa112\xf2\xa3\x81\x9cU>\xa5>\xd27\x033\x9a^\x19_\xb7f\
-\xb4\xca\xf6L33\xf0\xc9g\x00\xdf\x0c\x9e\xe7\xf9jE\xaf0\xfb\xe7\xda\xc3Ec)\
-\x07\x8cu\x18\xfa;\xc4R.7\xfe\xd1-h\xa1 (\x9fr\xde\xa6\xffP7\xc3\xc7\xd3\x9c\
-\xdd\x9f\xe2\xba\xbb\xa28\xc6\x19\n"\x88P\x1ef\xa6\x0b3\xd3\x85W(!P3\x8bO \
-\x80\x9dZ\x8aS\xd1\x08\x1f\x16\x92\xf0\xcbX\xd3\xdd\x18\x13\x9d(\xdb\x01\xd4\
-\xcc\x02a\x04(V\xdf\x88\x16\xaeD\x06n\xc1\xb2v\xa2\xa5\\n|b#F$\x08\x80]VL\
-\x18\x11d@\x12\xf3\xbb1\'\xcf`Mw\xa1l\x17\xa5\x14\x98A\xbc`%f1\x8dR\xe0\xc4\
-\x9b)\xa5\xda.\xa8\x19\x16:\x95\xde4\xb9\xc9e\xe0\xb6#4(\x15V\xb2\xc8\x1aa\
-\xd0\x80\x924f\x97O\xf9\x04\xd2\x070ri\xa4!q\xc3uh\x85Q|\xbb\x8c0-\x1c\xbd\
-\x1a\x99\x1dCH\x81\xbdp\x05^\xb4\x1a\x00#}\x02c\xb2\x1f\x84\xa2\x1co\xa4\\\
-\xbft\x0eF\xff\xf2\xa2G89\xd7\x1e.\x1aC\xe8\x08\xb3\x02]\xe6\xd0\x83\x02#\
-\x96"c\x15\xf0\x00+\x14\xa6\xe5\x8e\xb5x\xb9\xed\xe4\x86\xba(d\xae!a\r\xa3\
-\x9b\xd3D\xb2\xa7\xd1\xcb\x19\x06OL0v$\x8b\xe7\xfa\xe8A\x9d\xfa\r\t\xeab\x83\
-\x14\x8b\x0b(\x04\x17"\x95G$w\n\x95\x9d\xa2\xef\x9d!r\x036B\x033bPyC\x94\xea\
-\xd00vh=\xc2H\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18!\xa2\x06\x89\
-\xe6:\xa04\xc5\xd0\xa112]y\x00\xea7$\x897\x86\x189:\x85\x1e\xd6\xa9Z\x95!\
-\xe7;\x84r]\xbfS\xb3&<\x8eY\xb1\x89\xa1}\xa7\x18\xd8\xb3\x0f\xe5{()8\xb5\xed\
-\xe7,}\xe4\x01\x12Z\x1f8Gf\x95OW%b\x81\xe3t\xfd"M\xa8\xda"y\xfd\x10\xe3\x1dY\
-\xc6\x8eM\xb3\xe4\xc1$!\xef\xc7\xf4\xfe*L\xbc\xd5!Q\xf16vd+\xd2\xcb\x12p_&}8\
-\x88Y\xe1\x11o\x138\xeaOP\xc2\x98\xdb\xc9p\x89\xd1\xc3\xec\x99k\x0f\x17\x8dF\
-\x12\xc1\x9d\xe8L \x84@\xa8\x10&\xbf\xc2c\x02\xa5I<\xef6\x16\xacn\xa3{\xfb\
-\xbfc\x8f\x0e\x12K\xc5H\x94\x87\x11\x85:N\xffp?\x85\xd1\x11\x02\xf1\x18\xd24\
-q\xf2\x93\x0c\xedNSL\xb7\xd0\xf4\xd5\xe5\x18\xe6\tt\'\x89f7\xd1\xf1\x93\x1fR\
-\x1c\x1d\xc1\x8cF0\xc2a\x10\x0e\xf9n\x97\xfa\x95\x9b\xd0\xfc~\x04M\xe8\x8c\
-\xe3\xd9E\xec\xf1)\x8c\xa0\x85)4\xb4@\x8c\x92\xbe\x0f\xbc\x1c\x01\xb7\x85S\
-\xaf\xbeB~h\x88@"\x8e\xb4,\xc6\x0e\x9ced\xaf\x8d\xef\x96\t\xd5\xd6\x12\xdcp\
-\'\xba\x9dA~\x9a\xe6\xaa;Q\n\x82\x15\x11*\xaa%\xf9\xe1^\x84\x94\x84\xe3\x8b\
-\xd0\x031\x0c\x95\xc6\x9fU\xbe\xe3(\xe9a\x1a\xab\xf1\xa7:\x18\xe9\x1ce\xf2\
-\xfd\x10\xc1\xca$\x0b\xd76SQ\xb5\x14\x9c0\x86\x7f\x94\xfc\x07\x1a\x0bW4Q\xf0\
-\x0e K>\xba\xd6Fy\xe4(\xf1\xaa\x1a\xe2\x15u\xe4\xd9\xc7\xd5~\xca\xac\x87\xd8\
-5\xd7\x1e.\x1a\xc1"\x04\xf7\xa2\x8b1\x84\x04!\x82\x04x\x0fE\x0f\x00R\xb3\tV>\
-@\xc0\x1a\xc4\x1e;\x88\xc6J\x0c\xd1F\xef\x9e\x17)\x8f\x1ed\xe1\xad[\xa9\xb9y\
-\x0b\xa82n\xb1H\xff\x8e\x7f\xa3\xd0\xb3\x93Bz9\x91\xd6\x05\xe0W\xd1\xbf\xfb\
-\x7fp\xc7\xdf\xa7\xe9\x8e\xc7H\xb4\xadC\x06|4-\x8e\xe7\x14Q\xfa\x04\xa6\xde\
-\x8ep7\xa1\x8bQ\xdc\xec\x19:\xff\xeb\x19\xa4)\x11\x9a\xa4~\xe3\xd3D\x97,AyY2\
-\xa7:pF\x0e\xb1\xf0\xb6\x87\xa8\xb9y\x0bB\xf7\xf1m\x18x\xebE\xa6N\xef\xc5\
-\xd05\x84Y\x8b\xeeF\xe9\xdf\xfd\xf2\xa7j*k\x07\xb1k\xef"\xd6\xf24g^z\x06\xa1\
-{\xb4\xde\xff\x14\xc2\x9a@j5\xf4\xee\xf9\xe9\x85\xf3\xb5\xd4\xa2\xac\xed\x08\
-s\x13\xba\x9c\xc4\x94\x834m\xfe\x0bb\xad+\xf0E\x0f*\xf0\x1e\xe4\x96P\xbb\xc6\
-\xa4\xf7\x8d\xff\xa64\xf5U\x82\xc1"\xcaK2\xd9\xdd\x81\xce \xa9e\x8f@\xa8\x8f\
-\xa0x\x13\xae\xf2\x12\xd1\x03#W\xe0\x8b\x96\xae\xe1\x05"h\xb6DJ\x01~\x04kB\
-\x03w&\x8b\xb2\xe2\xb8~\x18\xb3$0\xbd0B\xc5\xa0\xecc\xf7\xf4\x12\n\xd6S\xb3\
-\xeeQ\xb4\xf2v\xa4\xb7\x1fi>D\xcd\xea\x87\xe9\xef:A\xa9\xbb\x9b\xd8\xe2\xc7\
-\xf1<\x81\xdd\xd5I(PC\xd5\xaa\x87\x90\xee\x8f\x91\x85= \x13hB\x07g\x12JI<\
-\x13\xb4\x12\xe8E\xb0B\tt+\x8a44\xac`\n\xcduQ\xb2\x99L\xfbw\x08\x05j\xa9Y\
-\xbb\x15\xdd\xf9\x19\xa2t\x04\xdfz\x92\xaa\xe5\xf7Q<\xb1\x1f\xdd\xd1\x11*\
-\x01^\xe0\xc2\x9a\xb9i\xd03x\xd670U\x04\xa9\x04\x9a^\x81f\xbf\x82g<9\xab|\
-\x15M[\xd1\n\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xbc\t\xdd\xf9.8G \xeb\xa1\
-\xf4\x12\x15K6\x13\xb0\xded\xa2\xfd\x00\r[\xff\x1c\xcf\xcf\x93=\xfc\x12\x89\
-\x86\x95\x98\xc9\xc5\xc8\xfc\x0e\xc8\x02W\xf9\x19\x8c\xce\xce\xc5s\xed\xe1\
-\xe2\x89U\xc3\xfaa\xc4P\x10$`\x0f\xc3\xbej\x98R`X\xa8u\xeb(\xf5\xbe\x87:\x19\
-\xc2jmFN\x8d\xe3\x89\x14\xdei\x81\x1e\xab\x87B\x00y`\x00\nA\xb4\xfa4V\xddmhC\
-\xf50\x1aC\x15\x12\xa8b\x11\xf7\x030\x12\xb5\xf8\xd3\x06\xfa\xa1q(|\xfcSq%\
-\xc4\xaa`M\x1a1\x14\xc0rZi\xde\xfaWh\xd1\x08\xf8>\xfe\xd8\x00\xf2\xc8\x19\
-\x9c\xc6\x058\xc7K\x18\xc9zD9\x81\xd87\x05\xb9 \xb2\xa9\x1f\xa3\xf6&\xb4\xc1\
-Z\x84\x97\x04/\x81\xca\xa9\x0bk\xfeFw\xed\x00r(\x80\x90\x02Ji\xe8H\xe2/\x96\
-\xb3\xcaG>\x01G\x1a`]\x1c\x86b3[T?\x05\xed\x11\xc84\x02 \x02e\xe4\xcdQ"\xf1\
-\x9b\xc9\xee~\x0f\xfb\xa6\x02v:M\xf9\xa8K\xedm\xf7\xc2P\x1e\xf6\x05\xc0\xbf\
-\x02\xe7\xceE\xa2\x0f<\xf7\xe4\\{\xb8h\x8cfA\xa2m\x8c\xc2\xc9EH4\xfc\xfc\x04\
-S{7\x83T\x98\xab}\xf4\xac\xcb\xc0\xb7\x07)\x9c\xba\x85\xaa\x07\xea)\x1e\xb61\
-W\xe4Q\xa5\rdOg\xf0\xb2\x938\xa1\xc7\xb1\xdfw\t-\xb1\x98n\xefcjW\x1b\xc1\xba\
-:\xfc\xc9ID\x08(\xdfJf\xd70\xce\xa3\xc3\x94\xd4\x1f`\xefr\xd1\x1bt\x8ck4\xec\
-Ce\xbct\x91\xc4\xd2\x91\x19\x0fB\x03Q \xf3\xcf\x02\xb7O\xe0\x0eT\xa1\xd5\xd5\
-\x91\xfc\xfb\x12^f-\x85\x8e\x1c\xe5\xf1!\x9c\xc0#\x14\xf7\xda\x84\x97\x04\
-\x98\xde\xd3\xcd\xd4\xae6B\xd7\xa4\xf0\x0bi\x84\xf4/\xa8Y\xdacc,\xf2I\\?F\
-\xfeX+\x02\x89\x9f\x1f%\xf3\xfa\x1a*\x9e.\xcc*\x9f;\x96eb\xdb\x97\x89\xdf0H\
-\xa1\xa3a\xe63o~\x88\xf1\x1f\xdcE\xb9\xab|\xae\x8fC\xbd\x01b\xab\x1ff\xe0\
-\xf9iN\xfc\xd9vT\xd1\xc5\xaa\xbb\x0bk\xe1z2\xdf\x1e\xa4\xf8\xcb?\x9c\xbb\tp\
-\x19\xd1_]\xb5~\xae=\\4\x95\xb5\xd3\xdc\xcbn\xce\xa6*q\x8a\x92\xea\x81\x01\
-\xb8\xdf"?\x01\xd9!\x87\xaeo\xd9dr)\xae\xfb\xe3Z\x8c\xa5e\xde\xda\xd6\xc8\r\
-\xb1>\xa2O\xb4r\xf8\x1fO3\xf4\xecnZ\xee\\\x80\\\x19\xa4t<\xcf\xa973\x14\x9b[\
-\xa9\xd9\x18\xa7\xa3\xc7!\x91\xca\x12~\xac\x85C\xff\xe43\xfa\xbdvZ\xee\xa8E\
-\xdd\x15E\xb7@7\\\x92_\x8b\xb0\x7fG3\xb7\xcb\x1d\x9cM%Aj\xb42\xc0\x9b\x91\
-\xfb\x18O&!\tRS|\xa5w?\xfa\x03\xcd\x1c\xfe~/\x85\x1f\xec\xa7~m5\xfez\x93\xfe\
-\x0f5s\r-$k,\x9a\xdd^\xb2\x93\xc6\x055\xdf\x89\xaeD`s\xafx\x8d\xee\xaaJ\x944\
-h\x16i~\x99\\\xc5\xaa\x9e\x9e\xd9\xe5\xebw9\xb5x\t\xf7\xa8\x03\xf4&c\x08)\
-\xb9V\xf5\xb1\xf3\xba\xb5\x8c\xc7\xc3\xe7\xfa86-\xd8\xd2\xe82q\xfbZ\x86\x8f\
-\x0fBHg\xf5\xc3\x1b\x99\xcaU\xf0\xaa\x13\xc7^uu\xbf{\xfc\x06\xfd\x94_\x98k\
-\x0f\x17M\xbd?\x85m\xf70\xe6\x94\x18\x1f\xd5\xe9\xfbf\x1a4\x1d\xdb1PB\x03!Y\
-\xb4\xcc\xa5\xed\xf7\xf3\x1c<\xd2\xc2\xdb\xdd!F\xf40O<8\xc2\xc2\xcd\x06\x87\
-\x7f\x9e\xe3\xe4\xf3\x9d(\xa9\xe1\x0b\x83pB\xb2\xec\x1e\x89Y5\xcc\xeb\xdb\
-\x96Q_\xed\xf3\xf0\x96Qj\xbe\xa4qjo\x9e\x93/\xf4\x9ck[\xd9 \xb9\xefo\x0c\xc6\
-\xb4 v\xe9\x0cc\xe50VT\xe2\xd8#t\x96s\x0c\xfb\x1f\x1e\xac\xf9\xe0\xb6\'xtK\
-\x8e\xf0\n\xc9\xa1=c\xec\x7f7\x83\x92\x1a\xd1j\x83\x05\xd7I\x06K\x92`$\x8f]\
-\xec\xe4\xdd\xc3+\xf8\xbd\x8d\x9f\xae9\xa87\xe08>\xa5B\x17Cv%\xc1\x98C\xd9\
-\x1e\xe3t)\xcf\xd4\x91\xd9\xe5{c\xdb2\xa4\x9c\xc2)\x9df\xc2)`U\x18\x94\xed3t\
-\x96\xafe\xd8\xff\xd8a\xe5(4\x9c\x9c\xa6fc\x03\xc7O\x0c\x10J\x98\xd4\xad\x8f\
-\xd0\xfe\xde\x04Gr\xc19\x1a\xf9\xcb\x8f\xde\xdf\x7f\xe5\x1d\x14\xe6\xb3yJ\
-\xf9.Zo\x12\x94\xdbC\xd8\x8e\x81/t"\tIu\xa3C\xd3R\x9b\xc6\xa5%\xf6\xb4\xb7\
-\xf0\xd2\xab\r\x14Ki\xd2\x03\n\xe9\x05\xb9\x7f\xf3!*\x9b\r\xce\x1c\x0cR\xcci\
-XQ\xc1\x8d_\xce\x12\xae\x84\x17\xfe\xf3\x1e\x8evd1t\re\xeb<\xf8x\x07\xd7\xdc\
-\xa2qtw\x84\xc91\x8bX\xadb\xc5\x97\xb2t\xf7\xa4\xd8\x7fh\t_Y\xdd\xc5\xa2\x95\
-\x11*\xaa}\xd2\xfd\x16\xc7NLc;\xa5s>\xd3iEe\x046?u\x9a\xb3G\x03\x1c\x7f7\x84\
-f\n\xd6l\xce\xd2xM\x9e};\x92D\x93\x1e\x9dg*\xd8\xf6\xfaz\xb2\x13\x17\xd0<\
-\x98#V\x91\xa5X\xe8\xa6i\xf9\x04u-E\xba:\xa3\xbc\x7f,\x8f\x80Y\xe7\xabNe\xb0\
-\x0b\x87h\\\xa3\x13\xab\xf1\xe9\xef\x1b\xe3\xd8\xf1\tl\'{^?\xef\xdd\xef\xf2\
-\xe0&\x87\xbcS\xa2\xa15\x81\x90c\xbc\xb9\xb3D\x7f\xbf\xbc\xcc#>w\x88\xf5\xeb\
-\xdf\xb8\xe2\xd6J!`\xcb\xc6\x0en_\xd3M*YD\xc8\x99\x08\xd9\xacIf\xdabd"\xc2/~\
-\xbd\x84\xce\xb3\x95\x94]y\xdesK[\xa7\xd8\xb0l\x90\xa6\xfai\x94\xa7\xf0\xd1\
-\xe8\xe8N\xb0\xffx\r\xdd}\x91sm\xa5T,\xbfv\x82\x8d\xab\x07H\xc5\x0b\x94\xcb\
-\x12%u\xde\xff\xa0\x92\x9d\xed\xf5\xe4\xf2\x06w\xdf>\xc8\xfa\xb6\t\xca\xbe\
-\xc6ko\xd7s\xf8d\xc5\'\xbc\x06,\x8f[\xd7\x8ep\xd3\xf2A\xa4\xef"5\x18\xceD8s\
-\xb6\x82\r\xcb\x06\x01\xc1ko/\xe6\xf0\xc9\xca\x0bjfs\x06B\xc0\xdd\xb7\x0f\
-\xb3\xaem\x1c\xd7\x97\xe7\xe9\xce6\xdf\xcc\x7f\xf4\xb0\xa1m\x90\xb2\xaf\xf1\
-\xea\xdb-\x1c>y\xfe\xbd\x07C\x87\xbf\xfbz\x8er\xdf o|\xb7\x87\xaf\xfdK\x1b\
-\xdd\xa3Q\xbe\xf9l\x84/\xd2\x15;\xb1`\xc1\xf7\xae\xd8\xb8B@(\xf8\x91}\xd7\
-\x05\xdb\xb9\xba?;^.\xd6\xad*\xf3\xfdg\'y\xee\xaf\xfbq=\xc1_\xfe\xeb\x02\x9e\
-\xfaz\x9cw\xf6^\x9e\xab\x04\x9f\x17\xf4\x81\x81\x81\xb9\xf60\xcf\xe7\x90\x1b\
-\xb6\x8e39\x98\xe1\xd8\xc1<\x8f=\x13\xa0\xe3\x84\xcd\x1b\xdb\x170\x9d\xfd\
-\xe2l\xaf`\xe6\x14a\x9ey>A8h\x13\x8d\xe6y\xe0Oa\xe3\xdd6/\xbe\x1c\xfa\xc2\
-\x15\x07\x80>\xd7\x06\xe6\xf9|\xf2\xfc\x7f\xd4\x134k\xa8\x8c\xf9<\xfb\x82\
-\xe4\x95\x9f^\x9a\xdb\x91\x9fw\x04|\xe3\x8a}\x07\x99g\x9eK\xcd\x17o\xcd\x9cg\
-\x9e\x8b`\xbe@\xe6\x99\xe7S\xf8_{\xbc\x96s\x8a1j\xe2\x00\x00\x00\x00IEND\xae\
-B`\x82'
-
-def getDocFactory028Bitmap():
- return wxBitmapFromImage(getDocFactory028Image())
-
-def getDocFactory028Image():
- stream = cStringIO.StringIO(getDocFactory028Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory028')
-catalog['DocFactory028'] = ImageClass()
-catalog['DocFactory028'].getData = getDocFactory028Data
-catalog['DocFactory028'].getImage = getDocFactory028Image
-catalog['DocFactory028'].getBitmap = getDocFactory028Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory029Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rg\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xdd\xb7\xe8-zZmI\xb6$\x03\x06\xd9\
-\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xd3i\'\xd3)L;\xb4\xfd#\x7ff:\x99\
-\xcet\xba0\xcdd [\x99N;\x94\x94\xc6I \x84\x89\r\x89\xb1\xc1qd\x1bc\xbc\xca\
-\xd8\x96d-O\xbb\xf4\xa4\xb7\xde\xfb\xee\xbd\xa7\x7f\x88\x18\\\x12\xacN\x01\
-\xe1Z\x9f?\xdf\x9c\xfb\xbe\xdf\xef9\xe77\xe7\xdc{\xe6\x88\xbf\xfb\x86R,\xb0\
-\xc0\x02\xbf\x11=\\=\xdf\x16\x16X\xe0\xf3\x8bn/\x14\xc8\x02\x0b\xfcV\xf4Hr\
-\xbe-\xfc\xef\x10(\x0c\x1c$\xfeE\xbf{\x18x\x98\x9f\x9d\x07\xe1\xa0\xfd\x0f\
-\x0f\n\xa8\xa8\x10>\xda\xa7\xa2+\t0E\x99\x00IEY(\xc4\xa7\xa2\xb3\xc0\x07\xe8\
-\xe1\xc4|[\x98;\x82\x80\x86\xe2\x1eb\xdey\x82\x0f\xcdM)A\x9a:\x05/A\xdengF_\
-\x82G\xe8S\xf2\xe0\xd3\xe4\xbcN\x95\xdfs\x91\x07\x00\xddR8Z\r\xdd\xda6*\x84?\
-Q]\r\x97\xa5\xdeO\tUF\xd0\x0c\xc1\x98\\AF\xde\xf8\x89j,\xf0Q\xf4\xc8eT \x16\
-\xa34\xe9\xcfp\xe6\x95Z\xa6\x07\xa3\x80\x00)\x91\xba"RS"Z_\xa2m\xe5$\xae\xb5\
-\x84>\xfb\xafq\xa9\xfb\xc4=\xd8\x0c\xd3Tz\x81S?N0\x9d\t\x81\x10 $\x00\xf1F\
-\x87\x15\xf7\xbfI\xc9\xa8g\x82\x9b?Q\xdd0\xc348?\xe4\xf8\x0f\xd3\xc4\x17\x97\
-iYw\x98\xa2}-\x15.\xa3\x01\xbc\x0c\xd1\xa3\x97Q\xff\x86\x95 \xa9\xadA\x04%\
-\xa4\xa6\xb0\x13\x02#$P\x08\xca\x05\x9b\xd1S\x92\xc2h3+\xef\x92\x98\xc6\xaf\
-\xe8\x8f\xdcs\xd16D\x04>\xc2\xab \x02\x1f%5\x94n\xa0\xe4o\xde\x0e\t\xcfEz\
-\x15\x80\x8b\xda\x86\x95ND\\\x8d\xf2\x8aH\x8d\x0b\x1e@\x90^j\x12\x0ew`\xdaMD\
-\xe5G\xff\'\xd0M\x94\xa6#\xdd\x12\x08I`X\xb3\x05v\tM\x81"\x11\x94\x88\x14\
-\x96#)\x93\xcb\xc4\xb9&fQ\x17\x1e\'+?\x18\xc09\xe5S\xea\x03}34\xab\xe9W\x08t\
-kV\xab\xe2\xcc63C\x1f}\x06\x08L\xfb"\xcf\xff\xdf\xd1\xab\xcc\x81\xf9\xf60g,\
-\xe5\x82\xb1\x01C\x7f\x93x\xda\xe3\xfa?\xb8\t-l\x83\n\xa8\x14\x1c\x06\x0e\
-\xf70r"\xc3\xf9\x83i\xae\xb9#\x86k\x9c\xa5(l\x84\xf21\xb3\xdd\x98\xd9n\xfcb\
-\x19\x81\x9a]|B!\x9c\xf4r\xdc\xaafx\xbf\x90DP\xc1\x9a\xe9\xc1\x98<\x87r\\@\
-\xcd.\x10F\x88R\xed\xf5h\x91jd\xe8&,k7Z\xda\xe3\xfa\xc76cDm\x00\x9c\x8ab\xd2\
-\x88"C\x92x\xd0\x839u\x16k\xa6\x1b\xe5x(\xa5\xc0\xb4\xf1\xedj\xccR\x06\xa5\
-\xc0M\xb4RNw\\R3"t\xaa\xfd\x19\xf2S+\xc0\xebDhP.\xaef\x895\xca\x90\x01ei\xcc\
--\x9f\n\x08e\x0ea\xe43HC\xe2E\x1a\xd0\x8ac\x04N\x05aZ\xb8z-27\x8e\x90\x02g\
-\xf1*\xfcX-\x00F\xe6$\xc6\xd4\x00\x08E%\xd1L\xa5q\xf9<\x8c\xfe\xfc\xa0G95\
-\xdf\x1e\xe6\x8c!t\x84Y\x85.\xf3\xe8\xb6\xc0\x88\xa7\xc9ZE|\xc0\nGh\xbbm=~~\
-\'\xf9\xe1n\x8a\xd9\xabHZ#\xe8\xe6\x0c\xd1\xdc\x19\xf4J\x96\xa1\x93\x93\x8c\
-\x1f\xcd\xe1{\x01\xba\xad\xd3\xb8)IC|\x88Ri\x11E{1R\xf9D\xf3\xa7Q\xb9i\xfa\
-\xdf\x1c&?\xe8 40\xa3\x06\xd5\xd7\xc5\xa8\r\x8f\xe0\x847"\x8c4\xba,\xa0\xdb`\
-\xc4\xd2\x14Ce<|<\xdb\xc3e\x94\xa8\x1a"\x96\xef\x82\xf24\xc3\x87\xc7\xc9v\
-\x17\x00h\xdc\x94"\xd1\x1cf\xf4\xd84zD\xa7fM\x96|\xe0\x12\xcew\xffV\xcd\xba\
-\xc8\x04f\xd5\x16\x86\x0f\x9cfp\xdf\x01T\xe0\xa3\xa4\xe0\xf4\x8e\x9f\xb1\xfc\
-\xa1\xfbHj\xfd\xe0\x1e\x9dS>]\x95\x89\x87N\xd0\xfd\xf3\x0c\xe1Z\x8b\xd4\xb5\
-\xc3Lt\xe5\x18?>\xc3\xb2\xfbS\x84\xfd\x1f\xd1\xf7\xcb\x08\x89v\x97d\xd5\x1b8\
-\xd1\xedH?G\xc8{\x81\xcc\x11\x1b\xb3\xca\'\xd1!p\xd5\x1f\xa1\x841\xbf\x93\
-\xe13B\x8f\xb0o\xbe=\xcc\x19\x8d\x14\x82\xdb\xd1\x99D\x08\x81PaL~\x89\xcf$J\
-\x93\xf8\xfe-,Z\xdbA\xcf\xce\x7f\xc5\x19\x1b"\x9e\x8e\x93\xac\x8c \x8a\r\x9c\
-\xf9\xc1A\x8ac\xa3\x84\x12q\xa4i\xe2\x16\xa6\x18\xde\x9b\xa1\x94i\xa3\xe5\
-\xcb+1\xcc\x93\xe8n\n\xcdi\xa1\xeb\xc7?\xa046\x8a\x19\x8bbD" \\\n=\x1e\x8d\
-\xab\xb7\xa0\x05\x03\x08Z\xd0\x99\xc0wJ8\x13\xd3\x18\xb6\x85)4\xb4P\x9c\xb2~\
-\x00\xfc<!\xaf\x8d\xd3/\xbdHax\x98P2\x81\xb4,\xc6\x0f\x9dgt\xbfC\xe0U\x08\
-\xd7\xd7co\xba\x1d\xdd\xc9"?Ns\xcd\xed(\x05vU\x94\xaaZIa\xa4\x0f!%\x91\xc4\
-\x12\xf4P\x1cCe\x08\xe6\x94\xef\x04J\xfa\x98\xc6Z\x82\xe9.F\xcf\x8d1\xf5n\
-\x18\xbb:\xc5\xe2\xf5\xadT\xd5,\x077\x82\x11\x1c\xa3\xf0\x9e\xc6\xe2U-\x14\
-\xfdC\xc8r\x80\xaeuP\x19=F\xa2\xa6\x8eDU\x03\x05\x0ep\xa5\x9c.\xeba\xf6\xcc\
-\xb7\x879#X\x82\xe0nt1\x8e\x90 \x84M\x88wP\xf4\x02 5\x07\xbb\xfa>B\xd6\x10\
-\xce\xf8\xdbh\xac\xc6\x10\x1d\xf4\xed{\x8e\xca\xd8\xdb,\xbey;u7n\x03U\xc1+\
-\x95\x18\xd8\xf5/\x14{wS\xcc\xac$\xda\xbe\x08\x82\x1a\x06\xf6\xfe\x17\xde\
-\xc4\xbb\xb4\xdc\xf6\x08\xc9\x8e\r\xc8P\x80\xa6%\xf0\xdd\x12J\x9f\xc4\xd4;\
-\x11\xde\x16t1\x86\x97;\xcb\xb9\xffx\niJ\x84&i\xdc\xfc$\xb1e\xcbP~\x8e\xec\
-\xe9.\xdc\xd1\xc3,\xbe\xe5\x01\xean\xdc\x86\xd0\x03\x02\x07\x06_\x7f\x8e\xe9\
-3\xfb1t\ra\xd6\xa3{1\x06\xf6\xbe\xf0\xb1\x9a\xca\xdaE\xfc\xea;\x88\xb7=\xc9\
-\xd9\xe7\x9fB\xe8>\xed\xf7>\x81\xb0&\x91Z\x1d}\xfb~r\xe9|m\xf5(k\'\xc2\xdc\
-\x82.\xa70\xe5\x10-[\xff\x8cx\xfb*\x02\xd1\x8b\n\xbd\x03\xf9e\xd4\xaf3\xe9{\
-\xf5?)O\x7f\x19\xdb.\xa1\xfc\x14S=]\xe8\x0c\x91^\xf1\x10\x84\xfb\xb1\xc5kp\
-\x85\x94\x88\x1e\x1a\xbd\x8c^\xb8t\r?\x14Es$R\n\x08\xa2X\x93\x1ax\xb3\x19\
-\x94\x95\xc0\x0b"\x98e\x81\xe9G\x10*\x0e\x95\x00\xa7\xb7\x8f\xb0\xddH\xdd\
-\x86\x87\xd1*;\x91\xfeA\xa4\xf9\x00uk\x1fd\xa0\xfb$\xe5\x9e\x1e\xe2K\x1f\xc5\
-\xf7\x05N\xf79\xc2\xa1:j\xd6<\x80\xf4~\x84,\xee\x03\x99D\x13:\xb8SPN\xe1\x9b\
-\xa0\x95A/\x81\x15N\xa2[1\xa4\xa1a\xd9i4\xcfC\xc9V\xb2\x9d\xdf&\x1c\xaa\xa7n\
-\xfdvt\xf7\xa7\x88\xf2Q\x02\xebqjV\xdeC\xe9\xe4AtWG\xa8$\xf8\xa1Kk\xe6g@\xcf\
-\xe2[_\xc3TQ\xa4\x12hz\x15\x9a\xf3"\xbe\xf1\xf8\x9c\xf2U\xb5lG+\xee\xc5\xb7\
-\xe2h\x8eF8\xb2\x98x\xeb\x16t\xf7;\xe0\x1e\x85\x9c\x8f\xd2\xcbT-\xdbJ\xc8z\
-\x8d\xc9\xceC4m\xffS\xfc\xa0@\xee\xc8\xf3$\x9bVc\xa6\x96"\x0b\xbb \x07\\!g0:\
-\xbb\x97\xce\xb7\x87\xb9\x13\xaf\x85\x8d#\x88a\x1b$\xe0\x8c\xc0\x81Z\x98V`X\
-\xa8\r\x1b(\xf7\xbd\x83:\x15\xc6joENO\xe0\x8b4\xfe\x19\x81\x1eo\x84b\x08yh\
-\x10\x8a6Zc\x06\xab\xe1\x16\xb4\xe1F\x18\x8b\xa3\x8aIT\xa9\x84\xf7\x1e\x18\
-\xc9z\x82\x19\x03\xfd\xf0\x04\x14?\xfc\xa9\xb8\x1a\xe25\xb0.\x83\x18\x0ea\
-\xb9\xed\xb4n\xff\x0b\xb4X\x14\x82\x80`|\x10y\xf4,n\xf3"\xdc\x13e\x8cT#\xa2\
-\x92D\x1c\x98\x86\xbc\x8dl\x19\xc0\xa8\xbf\x01m\xa8\x1e\xe1\xa7\xc0O\xa2\xf2\
-\xea\xd2\x9a\xbf\xd6]?\x88\x1c\x0e!\xa4\x80r\x06\xbaR\x04K\xe5\x9c\xf2QH\xc2\
-\xd1&\xd8\x90\x80\xe1\xf8\xec\x165HCg\x14\xb2\xcd\x00\x88P\x05yc\x8ch\xe2Fr{\
-\xdf\xc1\xb9\xa1\x88\x93\xc9P9\xe6Q\x7f\xcb\xdd0\\\x80\x03!\x08.\xa39\xf3\
-\x7fD\x1f|\xe6\xf1\xf9\xf60g\x8cVA\xb2c\x9c\xe2\xa9%H4\x82\xc2$\xd3\xfb\xb7\
-\x82T\x98k\x03\xf4\x9c\xc7\xe07\x87(\x9e\xbe\x89\x9a\xfb\x1a)\x1dq0W\x15P\
-\xe5M\xe4\xced\xf1sS\xb8\xe1Gq\xde\xf5\x08/\xb3\x98\xe9\xecgzO\x07vC\x03\xc1\
-\xd4\x14"\x0cTn&\xbbg\x04\xf7\xe1\x11\xca\xea\xf7p\xf6x\xe8M:\xc6U\x1a\xce\
-\xe1\n~\xa6Dr\xf9\xe8\xac\x07\xa1\x81(\x92\xfdG\x81\xd7/\xf0\x06k\xd0\x1a\
-\x1aH\xfdm\x19?\xbb\x9ebW\x9e\xca\xc40n\xe8!J\xfb\x1d"\xcbB\xcc\xec\xebazO\
-\x07\xe1\xab\xd2\x04\xc5\x0cB\x06\x97\xd4,\xefs0\x96\x04$\xaf\x1d\xa7p\xbc\
-\x1d\x81$(\x8c\x91}e\x1dUO\x16\xe7\x94\xcf\x1b\xcf1\xb9\xe3\x8b$\xae\x1b\xa2\
-\xd8\xd54\xfb\x99\xb70\xcc\xc4\xf7\xef\xa0\xd2]\xb9\xd0\xc7\xe1\xbe\x10\xf1\
-\xb5\x0f2\xf8\xec\x0c\'\xffd\'\xaa\xe4a5\xdc\x81\xb5x#\xd9o\x0eQ\xfa\xc5\xef\
-\xcf\xdf\x04\x98\x07\xf4\x97\xd6l\x9co\x0fs\xa6\xba~\x86\xbb\xd9\xcb\xf9t5nI\
-R;8\x08\xf7Z\x14&!7\xec\xd2\xfd\r\x87l>\xcd5\x7fX\x8f\xb1\xbc\xc2\xeb;\x9a\
-\xb9.\xdeO\xec\xb1v\x8e\xfc\xfd\x19\x86\x9f\xdeK\xdb\xed\x8b\x90\xabm\xca\'\
-\n\x9c~-K\xa9\xb5\x9d\xba\xcd\t\xbaz]\x92\xe9\x1c\x91G\xda8\xfc\x0f\x01c\xdf\
-\xed\xa4\xed\xb6z\xd4\x1d1t\x0bt\xc3#\xf5\x95(\x07w\xb5r\xab\xdc\xc5\xf9t\n\
-\xa4F;\x83\xbc\x16\xbd\x87\x89T\nR 5\xc5\x97\xfa\x0e\xa2\xdf\xd7\xca\x91\xef\
-\xf5Q\xfc\xfeA\x1a\xd7\xd7\x12l4\x19x_3\xdf\xd4F\xaa\xce\xa2\xd5\xeb#7e\\R\
-\xf3\xcd\xd8j\x04\x0ew\x8b\x97\xe9\xa9\xa9FI\x83V\x91\xe1\x17\xa95\xac\xe9\
-\xed\x9d[\xbe\x01\x8f\xd3K\x97q\x97:D_*\x8e\x90\x92\xabU?\xbb\xafY\xcfD"r\
-\xa1\x8f\xe33\x82m\xcd\x1e\x93\xb7\xaeg\xe4\xc4\x10\x84u\xd6>\xb8\x99\xe9|\
-\x15/\xb9\t\x9c5W\xc6\xbb\xc7\xaf\xd1O\x07\xc5\xf9\xf60g\x1a\x83i\x1c\xa7\
-\x97q\xb7\xcc\xc4\x98N\xff\xd73\xa0\xe98\xae\x81\x12\x1a\x08\xc9\x92\x15\x1e\
-\x1d\xbf[\xe0\xed\xa3m\xbc\xd1\x13fT\x8f\xf0\xd8\xfd\xa3,\xdejp\xe4gyN={\x0e\
-%5\x02a\x10IJV\xdc%1kFxe\xc7\n\x1ak\x03\x1e\xdc6F\xdd\x174N\xef/p\xea[\xbd\
-\x17\xdaV7I\xee\xf9+\x83q\xcd\xc6)\x9fe\xbc\x12\xc1\x8aI\\g\x94s\x95<#\xc1\
-\xfb\x07k\x01x\x9dI\x1e\xde\x96\'\xb2Jrx\xdf8\x07\xdf\xca\xa2\xa4F\xac\xd6`\
-\xd15\x92\xa1\xb2\xc4\x8e\x16pJ\xe7x\xeb\xc8*~g\xf3\xc7k\x0e\xe9M\xb8n@\xb9\
-\xd8\xcd\xb0S\x8d\x1dw\xa98\xe3\x9c)\x17\x98>:\xb7|\xaf\xeeX\x81\x94\xd3\xb8\
-\xe53L\xbaE\xac*\x83\x8as\x96s\x95\xab\x19\t>tX9\x06M\xa7f\xa8\xdb\xdc\xc4\
-\x89\x93\x83\x84\x93&\r\x1b\xa3t\xbe3\xc9\xd1\xbc=O#?\x7f\xe8\x03\x03\x97\
-\xcfAa!W\xa0\\\xe8\xa6\xfd\x06A\xa53\x8c\xe3\x1a\x04B\'\x9a\x94\xd46\xbb\xb4\
-,wh^^f_g\x1b\xcf\xbf\xd4D\xa9\x9c!3\xa8\x90\xbe\xcd\xbd[\x0fS\xddjp\xf6m\x9b\
-R^\xc3\x8a\t\xae\xffb\x8eH5|\xeb\xdf\xef\xe2XW\x0eC\xd7P\x8e\xce\xfd\x8fvq\
-\xd5M\x1a\xc7\xf6F\x99\x1a\xb7\x88\xd7+V}!GOo\x9a\x83\x87\x97\xf1\xa5\xb5\
-\xdd,Y\x1d\xa5\xaa6 3`q\xfc\xe4\x0c\x8e[\xbe\xe03\x93QTGa\xeb\x13g8\x7f,\xc4\
-\x89\xb7\xc2h\xa6`\xdd\xd6\x1c\xcdW\x158\xb0+E,\xe5s\xeel\x15;^\xd9Hn\xf2\
-\x12\x9ao\xe7\x89W\xe5(\x15{hY9IC[\x89\xees1\xde=^@\xc0\x9c\xf3\xd5\xa6\xb38\
-\xc5\xc34\xaf\xd3\x89\xd7\x05\x0c\xf4\x8fs\xfc\xc4$\x8e\x9b\xbb\xa8\x9f\xf7\
-\x1f\xf4\xb8\x7f\x8bK\xc1-\xd3\xd4\x9eD\xc8q^\xdb]f`@~\xc6#>\xff\x88\x8d\x1b\
-_\xbdl\xd6L!`\xdb\xe6.n]\xd7C:UB\xc8Y\xeb\xb9\x9cIv\xc6bt2\xca\xcf\x7f\xb5\
-\x8cs\xe7\xab\xa9x\xf2\xa2\xe7\x96\xb7O\xb3i\xc5\x10-\x8d3(_\x11\xa0\xd1\xd5\
-\x93\xe4\xe0\x89:z\xfa\xa3\x17\xdaJ\xa9Xy\xf5$\x9b\xd7\x0e\x92N\x14\xa9T$J\
-\xea\xbc\xfb^5\xbb;\x1b\xc9\x17\x0c\xee\xbcu\x88\x8d\x1d\x93T\x02\x8d\x97\
-\xdfh\xe4\xc8\xa9\xaa\x8fx\rY>7\xaf\x1f\xe5\x86\x95C\xc8\xc0Cj0\x92\x8dr\xf6\
-|\x15\x9bV\x0c\x01\x82\x97\xdfX\xca\x91S\xd5\x97\xd4\xcc\xe5\r\x84\x80;o\x1d\
-aC\xc7\x04^ /\xd2\x9dk\xbe\xd9\xff\xe8eS\xc7\x10\x95@\xe3\xa57\xda8r\xea\xe2\
-\xfb\x0e\x86\x0e\x7f\xf3\xd5<\x95\xfe!^\xfdN/_\xf9\xa7\x0ez\xc6b|\xfd\xe9(W\
-\xe2\xd5:\xb1h\xd1w/\xbb\xd8B@\xd8\xfe\xc0\xb6\xe7\x81\xe3^\x19\x9f\x1d?m6\
-\xac\xa9\xf0\xbd\xa7\xa7x\xe6/\x07\xf0|\xc1\x9f\xff\xf3"\x9e\xf8j\x827\xf7\
-\x7f6W\t>o\xe8\x83\x83\x83\xf3\xeda\x81\xcf\x11\xd7m\x9f`j(\xcb\xf1\xb7\x0b<\
-\xf2T\x88\xae\x93\x0e\xaf\xee\\\xc4L\xee\xca\xdb^\xc1\xeci\xc2\x02\x0b\\ b;\
-\xc4b\x05\xee\xfbc\xd8|\xa7\xc3s/\x84\xaf\xd8\xe2\x00\xd0\xe7\xdb\xc0\x02\
-\x9f/\x9e\xfd\xb7Fl\xb3\x8e\xeax\xc0\xd3\xdf\x92\xbc\xf8\x93O\xe7v\xe4\xe5\
-\x82\x80\xaf]v\xef \x0b,\xf0Yq\xe5\xae\x9d\x0b,0\x07\x16\nd\x81\x05>\x86\xff\
-\x06`P\x96s\xd1\x83=\xe9\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory029Bitmap():
- return wxBitmapFromImage(getDocFactory029Image())
-
-def getDocFactory029Image():
- stream = cStringIO.StringIO(getDocFactory029Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory029')
-catalog['DocFactory029'] = ImageClass()
-catalog['DocFactory029'].getData = getDocFactory029Data
-catalog['DocFactory029'].getImage = getDocFactory029Image
-catalog['DocFactory029'].getBitmap = getDocFactory029Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory030Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rb\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em\xff\xc8\x9f\x99N\xa63\x9d\
-.L3\x19\xc8V\xa6\xd3\x0e%\xa5q\x12\x08abCblp\x1cy\x11\xc6\xab\x8c\xad\xc5Z\
-\x9ev\xe9Io\xbd\xf7\xdd{O\xff\x101\xb8\x04\xa4?\x00\xd9\xb5>\x7f\xbe9\xf7}\
-\xbf\xdfs\xceo\xce\xb9\xf7\xcc\x11\xff\xf0-\xa5Xd\x91E~\'z\xa8r\xa1-,\xb2\
-\xc8\xe5\x8b\x1e\\,\x90E\x16\xf9D\xf4pb\xa1-\xcc\x0f\x81\xc2\xc0F\xe2]\xf2\
-\xbb\x8b\x81\x8b\xf9\xc5y\x106\xda\xff\xf1\xa0\x80\xb2\n\xe0\xa1}.\xba\x12\
-\x1fS\x94\xf0\x91\x94\x95\x85B|.:\x8b|\x1c=\x14_h\x0bs#\xf0\xa9+\xec#\xea^\
-\xc0\xff\xc8\xdc\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\xad\xcc\xe8\xcbp\t|N\x1e<\
-\x1a\xec7\xa9\xf0z.\xf1\x00\xa0[\n[\xab\xa2[\xdbA\x99\xd0g\xaa\xab\xe1\xb0\
-\xdc\xfd9\x81\xf2\x08\x9a!\x18\x93\xabH\xcb\x9b?S\x8dE>\x19=|\x05\x14\x88\
-\xc5(\r\xfas\x9c{\xad\x9a\xe9\xc1\x08 @J\xa4\xae\x08W\x15\x89\xd4\x16iY=\x89\
-c-\xa3/\xf8\xb78\xd4|\xe6\x1e\x82\x0c\xd3P|\x893?\x8d3\x9d\x0e\x80\x10 $\x00\
-\xb1z\x9bU\x0f\xbeM\xd1\xa8e\x82[?S\xdd\x10\xc3\xd4\xd9?\xe6\xe4\x8fS\xc4\
-\x96\x96h\xda\xd0A!x=e\xae\x80\x81\xfb\x7f\x80\x1e\xb9\x02\xfa9\xa4\x04\tm\
-\x1d\xc2/"5E0.0\x02\x02\x85\xa0\x94\x0f2zF\x92\x1fmd\xf5=\x12\xd3\xf8\r\xfd\
-\xe1\xfb.\xd9\x86\x08\xdfC\xb8e\x84\xef\xa1\xa4\x86\xd2\r\x94\xfc\xdd\xdb!\
-\xe1:H\xb7\x0cpI\xdb\x90\xd2\t\x8bkQn\x01\xa9q\xd1\x03\x08R\xcbMB\xa16\xcc`\
-\x03\x11\xf9\xf1\xff\xf1u\x13\xa5\xe9H\xa7\x08B\xe2\x1b\xd6l\x81\xcd\xa1)P\
-\xc4\xfd"\xe1\xfcJ$%\xb2\xe9\x18\xd7E-jB\xe3d\xe4\x87\x037\xaf|J}\xa8o\x06f5\
-\xbd2\xben\xcdj\x95\xed\xd9ff\xe0\xe3\xcf\x00\xbe\x19\xbc\xc4\xf3\xd5\x82^a\
-\x0e,\xb4\x879\xb1\x94\x03\xc6&\x0c\xfdmb)\x97\x1b\xff\xe8\x16\xb4P\x10\x94O\
-9o3\xd0\xd1\xc3\xc8\xa94\x17\x0e\xa7\xb8\xee\xae(\x8eq\x9e\x82\x08"\x94\x87\
-\x99\xe9\xc6\xcct\xe3\x15J\x08\xd4\xec\xe2\x13\x08`\xa7V\xe2T4\xc2\x07\x85$\
-\xfc2\xd6L\x0f\xc6d\x17\xcav\x005\xbb@\x18\x01\x8a\xd57\xa2\x85+\x91\x81[\
-\xb0\xac\xbdh)\x97\x1b\x9f\xd8\x8a\x11\t\x02`\x97\x15\x93F\x04\x19\x90\xc4\
-\xfc\x1e\xcc\xa9\xf3X3\xdd(\xdbE)\x05f\x10/X\x89YL\xa3\x148\xf1fJ\xa9\xb695\
-\xc3B\xa7\xd2\x9b!7\xb5\n\xdcv\x84\x06\xa5\xc2Z\x96Y\xa3\x0c\x19P\x92\xc6\
-\xfc\xf2)\x9f@\xfa\x08F.\x8d4$n\xb8\x0e\xad0\x86o\x97\x11\xa6\x85\xa3W#\xb3\
-\xe3\x08)\xb0\x97\xae\xc1\x8bV\x03`\xa4OcL\r\x80P\x94\xe3\x8d\x94\xebW.\xc0\
-\xe8/,z\x843\x0b\xedaN\x0c\xa1#\xcc\nt\x99C\x0f\n\x8cX\x8a\x8cU\xc0\x03\xacP\
-\x98\x96;6\xe2\xe5v\x93\x1b\xee\xa6\x90\xb9\x86\x845\x82n\xce\x10\xc9\x9eC/g\
-\x18:=\xc9\xf8\xf1,\x9e\xeb\xa3\x07u\xea\xb7$\xa8\x8b\rQ,.\xa1\x10\\\x8aT\
-\x1e\x91\xdcYTv\x9a\xfe\xb7\x87\xc9\r\xda\x08\r\xcc\x88A\xe5\rQ\xaaC#\xd8\
-\xa1\xcd\x08#\x85.\xf3\xe8A0\xa2)\n\x81\x12.\x1en\xd0\xc5a\x94\x88\x1a"\x9a\
-\xeb\x84\xd24\xc3\x1d\xe3d\xba\xf3\x00\xd4oI\x12o\x0c1zb\x1a=\xacS\xb5.C\xce\
-w\x08\xe5\xba?Q\xb3&<\x81Y\xb1\x8d\xe1Cg\x19<p\x08\xe5{()8\xbb\xeb\x17\xac|\
-\xe4\x01\x12Z?8\xc7\xe7\x95OW%b\x81St\xff2M\xa8\xda"y\xfd0\x13\x9dY\xc6O\xce\
-\xb0\xe2\xc1$!\xef\'\xf4\xfd:L\xbc\xd5!Q\xf1\x16vd\'\xd2\xcb\x12p_"},\x88Y\
-\xe1\x11o\x138\xeaOP\xc2X\xd8\xc9\xf0\x05\xa3\x879\xb0\xd0\x1e\xe6D#\x89\xe0\
-Nt&\x11B T\x08\x93_\xe31\x89\xd2$\x9ew\x1bK\xd6\xb7\xd1\xb3\xfb\xdf\xb1\xc7\
-\x86\x88\xa5b$\xca#\x88B\x1d\xe7~t\x98\xc2\xd8(\x81x\x0ci\x9a8\xf9)\x86\xf7\
-\xa7)\xa6[h\xfa\xeaj\x0c\xf34\xba\x93D\xb3\x9b\xe8\xfc\xe9\x8f(\x8e\x8dbF#\
-\x18\xe10\x08\x87|\x8fK\xfd\xdamh\xfe\x00\x82&t&\xf0\xec"\xf6\xc44F\xd0\xc2\
-\x14\x1aZ FI?\x04^\x8e\x80\xdb\xc2\xd9W^&?<L \x11GZ\x16\xe3G.0z\xd0\xc6w\xcb\
-\x84jk\tn\xb9\x13\xdd\xce ?Ms\xdd\x9d(\x05\xc1\x8a\x08\x15\xd5\x92\xfcH\x1fB\
-J\xc2\xf1e\xe8\x81\x18\x86J\xe3\xcf+\xdf)\x94\xf40\x8d\xf5\xf8\xd3\x9d\x8cv\
-\x8d1\xf5^\x88`e\x92\xa5\x1b\x9b\xa9\xa8Z\tN\x18\xc3?A\xfe}\x8d\xa5k\x9a(xG\
-\x90%\x1f]k\xa3<z\x82xU\r\xf1\x8a:\xf2\x1c\xe2j;U\xd6C\xec[h\x0fs"X\x86\xe0^\
-t1\x8e\x90 D\x90\x00\xef\xa2\xe8\x05@j6\xc1\xca\x07\x08XC\xd8\xe3G\xd1X\x8b!\
-\xda\xe8;\xf0\x02\xe5\xb1\xa3,\xbdu\'57\xef\x00U\xc6-\x16\x19\xd8\xf3o\x14z\
-\xf7RH\xaf&\xd2\xba\x04\xfc*\x06\xf6\xff\x0f\xee\xc4{4\xdd\xf1\x18\x89\xb6M\
-\xc8\x80\x8f\xa6\xc5\xf1\x9c"J\x9f\xc4\xd4\xdb\x11\xee6t1\x86\x9b=O\xd7\x7f=\
-\x834%B\x93\xd4o}\x9a\xe8\x8a\x15(/K\xe6l\'\xceh\x07Ko{\x88\x9a\x9bw t\x1f\
-\xdf\x86\xc17_`\xfa\xdcA\x0c]C\x98\xb5\xe8n\x94\x81\xfd/}\xaa\xa6\xb2\xf6\
-\x10\xbb\xf6.b-Os\xfe\xc5g\x10\xbaG\xeb\xfdO!\xacI\xa4VC\xdf\x81\x9f\xcd\x9d\
-\xaf\xa5\x16e\xedF\x98\xdb\xd0\xe5\x14\xa6\x1c\xa2i\xfb_\x10k]\x83/zQ\x81w!\
-\xb7\x82\xda\r&}\xaf\xff7\xa5\xe9\xaf\x12\x0c\x16Q^\x92\xa9\x9eNt\x86H\xadz\
-\x04B\xfd\x04\xc5\x1bp\x95\x95\x88\x1e\x18\xbd\x02^\xbct\r/\x10A\xb3%R\n\xf0\
-#X\x93\x1a\xb8\xb3\xde\x95\x15\xc7\xf5\xc3\x98%\x81\xe9\x85\x11*\x06e\x1f\
-\xbb\xb7\x8fP\xb0\x9e\x9aM\x8f\xa2\x95w#\xbd\xc3H\xf3!j\xd6?\xcc@\xf7iJ==\
-\xc4\x96?\x8e\xe7\t\xec\xee.B\x81\x1a\xaa\xd6=\x84t\x7f\x82,\x1c\x00\x99@\
-\x13:8SPJ\xe2\x99\xa0\x95@/\x82\x15J\xa0[Q\xa4\xa1a\x05Sh\xae\x8b\x92\xcdd\
-\xda\xbfK(PK\xcd\xc6\x9d\xe8\xce\xcf\x11\xa5\xe3\xf8\xd6\x93T\xad\xbe\x8f\
-\xe2\xe9\xc3\xe8\x8e\x8eP\t\xf0\x02sk\xe6f@\xcf\xe0Y\xdf\xc0T\x11\xa4\x12hz\
-\x05\x9a\xfd2\x9e\xf1\xe4\xbc\xf2U4\xedD+\xec\xc7\xb3bh\xb6F(\xbc\x94X\xf36t\
-\xe7{\xe0\x1c\x87\xac\x87\xd2KT\xac\xd8N\xc0z\x83\xc9\xf6#4\xec\xfcs<?O\xf6\
-\xd8\x8b$\x1a\xd6b&\x97#\xf3{ \x0b\\eg0:{\x97/\xb4\x87\xb9\x89U\xc3\xe6\x11\
-\xc4p\x10$`\x8f\xc0\xa1j\x98V`X\xa8M\x9b(\xf5\xbd\x8b:\x13\xc2jmFNO\xe0\x89\
-\x14\xde9\x81\x1e\xab\x87B\x00yd\x10\nA\xb4\xfa4V\xddmh\xc3\xf50\x16C\x15\
-\x12\xa8b\x11\xf7}0\x12\xb5\xf83\x06z\xc7\x04\x14>\xfa\xa9\xb8\x12bU\xb0!\
-\x8d\x18\x0e`9\xad4\xef\xfc+\xb4h\x04|\x1f\x7f|\x10y\xfc<N\xe3\x12\x9cS%\x8c\
-d=\xa2\x9c@\x1c\x9a\x86\\\x10\xd94\x80Q{\x13\xdaP-\xc2K\x82\x97@\xe5\xd4\xdc\
-\x9a\xbf\xd5\xdd8\x88\x1c\x0e \xa4\x80R\x1a:\x93\xf8\xcb\xe5\xbc\xf2\x91O\
-\xc0\xf1\x06\xd8\x14\x87\xe1\xd8\xec\x16\xd5OA{\x042\x8d\x00\x88@\x19ys\x94H\
-\xfcf\xb2\xfb\xdf\xc5\xbe\xa9\x80\x9dNS>\xe1R{\xdb\xbd0\x9c\x87C\x01\xf0\xaf\
-\x80\xb9\xf2\x19\xa3\x0f>\xf7\xe4B{\x98\x13\xa3Y\x90h\x1b\xa7pf\x19\x12\r??\
-\xc9\xf4\xc1\xed \x15\xe6z\x1f=\xeb2\xf8\xed!\ngo\xa1\xea\x81z\x8a\xc7l\xcc5\
-yTi\x0b\xd9s\x19\xbc\xec\x14N\xe8q\xec\xf7\\B+,f\xda\xfb\x99\xde\xd7F\xb0\
-\xae\x0e\x7fj\n\x11\x02\xca\xb7\x92\xd97\x82\xf3\xe8\x08%\xf5\x07\xd8\xfb\\\
-\xf4\x06\x1d\xe3\x1a\r\xbb\xa3\x8c\x97.\x92X9:\xebAh \nd\xfeY\xe0\xf6\x0b\
-\xdc\xc1*\xb4\xba:\x92\x7f_\xc2\xcbl\xa4\xd0\x99\xa3<1\x8c\x13x\x84\xe2A\x9b\
-\xf0\x8a\x003\x07z\x98\xde\xd7F\xe8\x9a\x14~!\x8d\x90\xfe\x9c\x9a\xa5\x036\
-\xc62\x9f\xc4\xf5\xe3\xe4O\xb6"\x90\xf8\xf912\xafm\xa0\xe2\xe9\xc2\xbc\xf2\
-\xb9\xe3Y&w}\x99\xf8\rC\x14:\x1bf?\xf3\xe6\x87\x99\xf8\xe1]\x94\xbb\xcb\x17\
-\xfb8\xd4\x17 \xb6\xfea\x06\x9f\x9f\xe1\xf4\x9f\xedF\x15]\xac\xba\xbb\xb0\
-\x96n&\xf3\xed!\x8a\xbf\xfa\xc3\x85\x9b\x00\x0b\x88\xfe\xca\xba\xcd\x0b\xeda\
-N*kg\xb8\x97\xfd\\HU\xe2\x14%\xd5\x83\x83p\xbfE~\x12\xb2\xc3\x0e\xdd\xdf\xb2\
-\xc9\xe4R\\\xf7\xc7\xb5\x18+\xcb\xbc\xb9\xab\x91\x1bb\xfdD\x9fh\xe5\xd8?\x9e\
-c\xf8\xd9\xfd\xb4\xdc\xb9\x04\xb96H\xe9T\x9e\xb3od(6\xb7R\xb35Ng\xafC"\x95%\
-\xfcX\x0b\x1d\xff\xe43\xf6\xfdvZ\xee\xa8E\xdd\x15E\xb7@7\\\x92_\x8bpxO3\xb7\
-\xcb=\\H%Aj\xb42\xc8\x1b\x91\xfb\x98H&!\tRS|\xa5\xef0\xfa\x03\xcd\x1c\xfbA\
-\x1f\x85\x1f\x1e\xa6~c5\xfef\x93\x81\x0f4s\r-$k,\x9a\xdd>\xb2S\xc6\x9c\x9aoG\
-\xd7"\xb0\xb9W\xbcJOU%J\x1a4\x8b4\xbfJ\xaec]o\xef\xfc\xf2\r\xb8\x9c]\xbe\x82\
-{\xd4\x11\xfa\x921\x84\x94\\\xab\xfa\xd9{\xddF&\xe2\xe1\x8b}\x1c\x9b\x11\xec\
-ht\x99\xbc}##\xa7\x86 \xa4\xb3\xfe\xe1\xadL\xe7*x\xc5\x89c\xaf\xbb\xba\xde=~\
-\x8b~\xd6/,\xb4\x879\xa9\xf7\xa7\xb1\xed^\xc6\x9d\x12\x13c:\xfd\xdfL\x83\xa6\
-c;\x06Jh $\xcbV\xb9\xb4\xfd~\x9e\xa3\xc7[x\xab\'\xc4\xa8\x1e\xe6\x89\x07GY\
-\xba\xdd\xe0\xd8/r\x9cy\xbe\x0b%5|a\x10NHV\xdd#1\xabFxm\xd7*\xea\xab}\x1e\
-\xde1F\xcd\x974\xce\x1e\xccs\xe6;\xbd\x17\xdbV6H\xee\xfb\x1b\x83q-\x88]:\xcf\
-x9\x8c\x15\x958\xf6(]\xe5\x1c#\xfe\x07\x07k>\xb8\xed\t\x1e\xdd\x91#\xbcF\xd2\
-q`\x9c\xc3\xefdPR#Zm\xb0\xe4:\xc9PI\x12\x8c\xe4\xb1\x8b]\xbcsl\r\xbf\xb7\xf5\
-\xd35\x87\xf4\x06\x1c\xc7\xa7T\xe8f\xd8\xae$\x18s(\xdb\xe3\x9c+\xe5\x99>>\
-\xbf|\xaf\xefZ\x85\x94\xd38\xa5sL:\x05\xac\n\x83\xb2}\x9e\xae\xf2\xb5\x8c\
-\xf8\x1f9\xac\x1c\x83\x8633\xd4lm\xe0\xd4\xe9AB\t\x93\xba\xcd\x11\xda\xdf\
-\x9d\xe4x.\xb8@#\xbf\xf0\xe8\x03\x03\x97\xffAa>\x9b\xa7\x94\xef\xa6\xf5&A\
-\xb9=\x84\xed\x18\xf8B\'\x92\x90T7:4\xad\xb4i\\Y\xe2@{\x0b/\xbe\xd2@\xb1\x94\
-&=\xa8\x90^\x90\xfb\xb7wP\xd9lp\xfeh\x90bN\xc3\x8a\nn\xfcr\x96p%|\xe7?\xef\
-\xe1Dg\x16C\xd7P\xb6\xce\x83\x8fwr\xcd-\x1a\'\xf6G\x98\x1a\xb7\x88\xd5*\xd6|\
-)KOo\x8a\xc3\x1d+\xf8\xca\xfan\x96\xad\x8dPQ\xed\x93\x1e\xb08yz\x06\xdb)]\
-\xf4\x99N+*#\xb0\xfd\xa9s\\8\x11\xe0\xd4;!4S\xb0a{\x96\xc6k\xf2\x1c\xda\x93$\
-\x9a\xf4\xe8:_\xc1\xae\xd76\x93\x9d\x9cC\xf3h\x8eXE\x96b\xa1\x87\xa6\xd5\x93\
-\xd4\xb5\x14\xe9\xee\x8a\xf2\xde\xc9<\x02\xe6\x9d\xaf:\x95\xc1.t\xd0\xb8A\'V\
-\xe33\xd0?\xce\xc9S\x93\xd8N\xf6\x92~>x\xd8\xe5\xc1m\x0ey\xa7DCk\x02!\xc7yco\
-\x89\x81\x01\xf9\x05\x8f\xf8\xe5\x83\xd8\xbc\xf9\xf5\xcb~\xed\x14\x02vl\xed\
-\xe4\xf6\r=\xa4\x92E\x84\x9c\xb5\x9c\xcd\x9adf,F\'#\xfc\xf27+\xe8\xbaPI\xd9\
-\x95\x97<\xb7\xb2u\x9a-\xab\x86h\xaa\x9fAy\n\x1f\x8d\xce\x9e\x04\x87O\xd5\
-\xd0\xd3\x1f\xb9\xd8VJ\xc5\xeak\'\xd9\xba~\x90T\xbc@\xb9,QR\xe7\xbd\xf7+\xd9\
-\xdb^O.op\xf7\xedCln\x9b\xa4\xeck\xbc\xfaV=\xc7\xceT|\xcck\xc0\xf2\xb8u\xe3(\
-7\xad\x1eB\xfa.R\x83\x91L\x84\xf3\x17*\xd8\xb2j\x08\x10\xbc\xfa\xd6r\x8e\x9d\
-\xa9\x9cS3\x9b3\x10\x02\xee\xbe}\x84Mm\x13\xb8\xbe\xbcDw\xbe\xf9f\xff\xa3\
-\x97-mC\x94}\x8dW\xdej\xe1\xd8\x99K\xef9\x18:\xfc\xdd\xd7s\x94\xfb\x87x\xfd{\
-\xbd|\xed_\xda\xe8\x19\x8b\xf2\xcdg#\\\xcdW\xea\xc4\x92%\xdf\xbfb\xe2\x0b\
-\x01\xa1\xe0\x87v]\x17l\xe7\xea\xfa\xec\xf8y\xb1i]\x99\x1f<;\xc5s\x7f=\x80\
-\xeb\t\xfe\xf2_\x97\xf0\xd4\xd7\xe3\xbc}\xf0\x8b\xb9Jp\xb9\xa2\x0f\x0e\x0e.\
-\xb4\x87E.\x03n\xd89\xc1\xd4P\x86\x93G\xf3<\xf6L\x80\xce\xd36\xaf\xef^\xc2L\
-\xf6\xea\xdd^\xc1\xec\xa9\xc2"\x8b\x10\x0e\xdaD\xa3y\x1e\xf8S\xd8z\xb7\xcd\
-\x0b/\x85\xae\xfa\xe2\x00\xd0\x17\xda\xc0"\x97\x07\xcf\xffG=A\xb3\x86\xca\
-\x98\xcf\xb3\xdf\x91\xbc\xfc\xb3\xcf\xe7v\xe4\x95\x86\x80o\\1\xef \x8b,\xf2E\
-\xb3\xb8\x86.\xb2\xc8\xa7\xb0X \x8b,\xf2)\xfc/D\xe4\x96s\x02\xa7\xcb\xe2\x00\
-\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory030Bitmap():
- return wxBitmapFromImage(getDocFactory030Image())
-
-def getDocFactory030Image():
- stream = cStringIO.StringIO(getDocFactory030Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory030')
-catalog['DocFactory030'] = ImageClass()
-catalog['DocFactory030'].getData = getDocFactory030Data
-catalog['DocFactory030'].getImage = getDocFactory030Image
-catalog['DocFactory030'].getBitmap = getDocFactory030Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory031Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rb\
-IDATx\x9c\xed\x9bYl]\xc7y\xc7\x7f3g\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb>\xe41(\x82\x02E\
-\x17\xa3A`\xa7Ij\x14-\\\xa7n\x94\xc4\x8ecD\xb2\x13Y\xb2\x15\x85\xda,k\xa5,\
-\x89\xa4\xb8\\\xee\xe4%\xefz\xce=\xe7L\x1f\xe8\xc8V\x1dJz\xb0M\xb6\xba\xbf\
-\xc7\x839\xe7\xff\xfff\xe6\xc3\xcc\x99\x0f#\xfe\xee[JQ\xa1B\x85\xdf\x8a\x1e\
-\xaa\x9eo\x0b\x15*,\\\xf4`%A*T\x98\x13=\x9c\x98o\x0b\x97G\xa00\xb0\x91x\x97<\
-w1p1\xbf8\x0f\xc2F\xfb_\x1e\x14PV\x01<\xb4\xcfEW\xe2c\x8a\x12>\x92\xb2\xb2P\
-\x88\xcfE\xa7\xc2\xdc\xe8\xa1\xf8|[\x98\x1b\x81OCa\x0fQ\xf7\x02\xfe\'\xe6\
-\xa6\x94 M\x9d\xbc\x1b\'\x17lgF_\x82K\xe0s\xf2\xe0\xd1d\xbfM\x95\xd7s\x89\
-\x07\x00\xddR\xd8Z\r\xdd\xda6\xca\x84>S]\r\x87\xa5\xee\xcf\x08\x94G\xd0\x0c\
-\xc1\x98\\AZ\xde\xfa\x99jT\xb82zx\x01\'\x88\xc5(M\xfa\x0b\x9c}\xa3\x96\xe9\
-\xc1\x08 @J\xa4\xae\x08\xd7\x14\x89\xd4\x17i[9\x89c-\xa1/\xf8\xd78\xd4}\xe6\
-\x1e\x82\x0c\xd3T|\x85\xd3?\x893\x9d\x0e\x80\x10 $\x00\xb1F\x9b\x15\x0f\xbfK\
-\xd1\xa8g\x82\xdb?S\xdd\x10\xc34\xd8?\xe2\xc4\x8fR\xc4\x16\x97hYw\x84B\xf0F\
-\xca,\xe0\x01\xfb\x7f\x88\x1eY\xc0\xfd\x1dR\x82\x84\xb6\x06\xe1\x17\x91\x9a"\
-\x18\x17\x18\x01\x81BP\xca\x07\x19=-\xc9\x8f6\xb3\xf2>\x89i\xfc\x9a\xfe\xf0\
-\x03\x97lC\x84\xef!\xdc2\xc2\xf7PRC\xe9\x06J\xfe\xf6\xed\x90p\x1d\xa4[\x06\
-\xb8\xa4mH\xe9\x84\xc5\xf5(\xb7\x80\xd4\xb8\xe8\x01\x04\xa9\xa5&\xa1P\x07f\
-\xb0\x89\x88\xfc\xf4w|\xddDi:\xd2)\x82\x90\xf8\x865\x9b`W\xd0\x14(\xe2~\x91p\
-~9\x92\x12\xd9t\x8c\x1b\xa2\x16u\xa1q2\xf2\xe3\x01\xbb\xaa\xf8\x94\xfaX\xdf\
-\x0c\xccjze|\xdd\x9a\xd5*\xdb\xb3\xcd\xcc\xc0\xa7\xdf\x01|3x\x89\xe7k\r\xbd\
-\xca\x1c\x98o\x0fsb)\x07\x8c\r\x18\xfa\xbb\xc4R.7\xff\xc1mh\xa1 (\x9fr\xdef\
-\xe0H\x0f#\'\xd3\\8\x98\xe2\x86{\xa28\xc69\n"\x88P\x1ef\xa6\x1b3\xd3\x8dW(!P\
-\xb3\x8bO \x80\x9dZ\x8eS\xd5\x0c\x1f%\x92\xf0\xcbX3=\x18\x93\xe7Q\xb6\x03\
-\xa8\xd9\x05\xc2\x08P\xac\xbd\x19-\\\x8d\x0c\xdc\x86e\xedFK\xb9\xdc\xfc\xd4f\
-\x8cH\x10\x00\xbb\xac\x984"\xc8\x80$\xe6\xf7`N\x9d\xc3\x9a\xe9F\xd9.J)0\x83x\
-\xc1j\xccb\x1a\xa5\xc0\x89\xb7RJu\\Q3,t\xaa\xbd\x19rS+\xc0\xedDhP*\xacf\x895\
-\xca\x90\x01%i\\]|\xca\'\x90>\x84\x91K#\r\x89\x1bn@+\x8c\xe1\xdbe\x84i\xe1\
-\xe8\xb5\xc8\xec8B\n\xec\xc5\xab\xf0\xa2\xb5\x00\x18\xe9S\x18S\x03 \x14\xe5x\
-3\xe5\xc6\xe5\xf30\xfa\x0b\x03=\xc2\xe9\xf9\xf60\'\x86\xd0\x11f\x15\xba\xcc\
-\xa1\x07\x05F,E\xc6*\xe0\x01V(L\xdb]\xeb\xf1r;\xc9\rwS\xc8\\G\xc2\x1aA7g\x88\
-d\xcf\xa2\x973\x0c\x9d\x9ad\xfcX\x16\xcf\xf5\xd1\x83:\x8d\x9b\x124\xc4\x86(\
-\x16\x17Q\x08.F*\x8fH\xee\x0c*;M\xff\xbb\xc3\xe4\x06m\x84\x06f\xc4\xa0\xfa\
-\xa6(\xb5\xa1\x11\xec\xd0F\x84\x91B\x97y\xf4 \x18\xd1\x14\x85@\t\x17\x0f7\
-\xe8\xe20JD\r\x11\xcduAi\x9a\xe1#\xe3d\xba\xf3\x004nJ\x12o\x0e1z|\x1a=\xacS\
-\xb3&C\xcew\x08\xe5\xba\xe7\xd4\xac\x0bO`Vma\xf8\xc0\x19\x06\xf7\x1d@\xf9\
-\x1eJ\n\xce\xec\xf89\xcb\x1f{\x88\x84\xd6\x0f\xce\xb1\xab\x8aOW%b\x81\x93t\
-\xff"M\xa8\xd6"y\xe30\x13]Y\xc6O\xcc\xb0\xec\xe1$!\xef\xc7\xf4\xfd*L\xbc\xdd\
-!Q\xf5\x0evd;\xd2\xcb\x12p_!}4\x88Y\xe5\x11\xef\x108\xea\x8fP\xc2\x98\xdf\
-\xc90O\xe8a\xf6\xcd\xb7\x879\xd1H"\xb8\x1b\x9dI\x84\x10\x08\x15\xc2\xe4WxL\
-\xa24\x89\xe7\xdd\xc1\xa2\xb5\x1d\xf4\xec\xfc7\xec\xb1!b\xa9\x18\x89\xf2\x08\
-\xa2\xd0\xc0\xd9\x1f\x1e\xa406J \x1eC\x9a&N~\x8a\xe1\xbdi\x8a\xe96Z\xbe\xba\
-\x12\xc3<\x85\xee$\xd1\xec\x16\xba~\xf2C\x8ac\xa3\x98\xd1\x08F8\x0c\xc2!\xdf\
-\xe3\xd2\xb8z\x0b\x9a?\x80\xa0\x05\x9d\t<\xbb\x88=1\x8d\x11\xb40\x85\x86\x16\
-\x88Q\xd2\x0f\x80\x97#\xe0\xb6q\xe6\xb5W\xc9\x0f\x0f\x13H\xc4\x91\x96\xc5\
-\xf8\xa1\x0b\x8c\xee\xb7\xf1\xdd2\xa1\xfaz\x82\x9b\xeeF\xb73\xc8\xcbi\xae\
-\xb9\x1b\xa5 X\x15\xa1\xaaV\x92\x1f\xe9CHI8\xbe\x04=\x10\xc3Pi\xfc\xab\x8a\
-\xef$Jz\x98\xc6Z\xfc\xe9.F\xcf\x8f1\xf5A\x88`u\x92\xc5\xeb[\xa9\xaaY\x0eN\
-\x18\xc3?N\xfeC\x8d\xc5\xabZ(x\x87\x90%\x1f]\xeb\xa0<z\x9cxM\x1d\xf1\xaa\x06\
-\xf2\x1c\xe0Z\xad&\xeb!\xf6\xcc\xb7\x879\x11,Ap?\xba\x18GH\x10"H\x80\xf7Q\
-\xf4\x02 5\x9b`\xf5C\x04\xac!\xec\xf1\xc3h\xac\xc6\x10\x1d\xf4\xed{\x89\xf2\
-\xd8a\x16\xdf\xbe\x9d\xba[\xb7\x81*\xe3\x16\x8b\x0c\xec\xfaW\n\xbd\xbb)\xa4W\
-\x12i_\x04~\r\x03{\xff\x1bw\xe2\x03Z\xeez\x82D\xc7\x06d\xc0G\xd3\xe2xN\x11\
-\xa5Ob\xea\x9d\x08w\x0b\xba\x18\xc3\xcd\x9e\xe3\xfc\x7f>\x874%B\x934n~\x96\
-\xe8\xb2e(/K\xe6L\x17\xce\xe8\x11\x16\xdf\xf1\x08u\xb7nC\xe8>\xbe\r\x83o\xbf\
-\xc4\xf4\xd9\xfd\x18\xba\x860\xeb\xd1\xdd(\x03{_\xb9\xac\xa6\xb2v\x11\xbb\
-\xfe\x1ebm\xcfr\xee\xe5\xe7\x10\xbaG\xfb\x83\xcf \xacI\xa4VG\xdf\xbe\x9f^9\
-\xbe\xb6z\x94\xb5\x13anA\x97S\x98r\x88\x96\xad\x7fF\xac}\x15\xbe\xe8E\x05\
-\xde\x87\xdc2\xea\xd7\x99\xf4\xbd\xf9_\x94\xa6\xbfJ0XDyI\xa6z\xba\xd0\x19"\
-\xb5\xe21\x08\xf5\x13\x14o\xc15\x9a"z`t\x01\xff\x80\xe9\x1a^ \x82fK\xa4\x14\
-\xe0G\xb0&5pg=++\x8e\xeb\x871K\x02\xd3\x0b#T\x0c\xca>vo\x1f\xa1`#u\x1b\x1eG+\
-\xefDz\x07\x91\xe6#\xd4\xad}\x94\x81\xeeS\x94zz\x88-}\x12\xcf\x13\xd8\xdd\
-\xe7\t\x05\xea\xa8Y\xf3\x08\xd2\xfd1\xb2\xb0\x0fd\x02M\xe8\xe0LA)\x89g\x82V\
-\x02\xbd\x08V(\x81nE\x91\x86\x86\x15L\xa1\xb9.J\xb6\x92\xe9\xfc\x17B\x81z\
-\xea\xd6oGw~\x86(\x1d\xc3\xb7\x9e\xa6f\xe5\x03\x14O\x1dDwt\x84J\x80\x17\xb8\
-\xb2fn\x06\xf4\x0c\x9e\xf5\rL\x15A*\x81\xa6W\xa1\xd9\xaf\xe2\x19O_U|U-\xdb\
-\xd1\n{\xf1\xac\x18\x9a\xad\x11\n/&\xd6\xba\x05\xdd\xf9.8\xc7 \xeb\xa1\xf4\
-\x12U\xcb\xb6\x12\xb0\xdeb\xb2\xf3\x10M\xdb\xff\x14\xcf\xcf\x93=\xfa2\x89\
-\xa6\xd5\x98\xc9\xa5\xc8\xfc.\xc8\x02\xd7h\rFg\xf7\xd2\xf9\xf607\xb1Z\xd88\
-\x82\x18\x0e\x82\x04\xec\x118P\x0b\xd3\n\x0c\x0b\xb5a\x03\xa5\xbe\xf7Q\xa7CX\
-\xed\xad\xc8\xe9\t<\x91\xc2;+\xd0c\x8dP\x08 \x0f\rB!\x88\xd6\x98\xc6j\xb8\
-\x03m\xb8\x11\xc6b\xa8B\x02U,\xe2~\x08F\xa2\x1e\x7f\xc6@?2\x01\x85O\x1e\x15W\
-C\xac\x06\xd6\xa5\x11\xc3\x01,\xa7\x9d\xd6\xed\x7f\x81\x16\x8d\x80\xef\xe3\
-\x8f\x0f"\x8f\x9d\xc3i^\x84s\xb2\x84\x91lD\x94\x13\x88\x03\xd3\x90\x0b"[\x06\
-0\xeaoA\x1b\xaaGxI\xf0\x12\xa8\x9c\xba\xb2\xe6ot\xd7\x0f"\x87\x03\x08)\xa0\
-\x94\x86\xae$\xfeRyU\xf1\x91O\xc0\xb1&\xd8\x10\x87\xe1\xd8\xec\x16\xd5OAg\
-\x042\xcd\x00\x88@\x19yk\x94H\xfcV\xb2{\xdf\xc7\xbe\xa5\x80\x9dNS>\xeeR\x7f\
-\xc7\xfd0\x9c\x87\x03\x01\xf0\x17\xf0\x1c\xf9\x9c\xd1\x07_xz\xbe=\xcc\x89\
-\xd1*Ht\x8cS8\xbd\x04\x89\x86\x9f\x9fdz\xffV\x90\ns\xad\x8f\x9eu\x19\xfc\xf6\
-\x10\x853\xb7Q\xf3P#\xc5\xa36\xe6\xaa<\xaa\xb4\x89\xec\xd9\x0c^v\n\'\xf4$\
-\xf6\x07.\xa1e\x163\x9d\xfdL\xef\xe9 \xd8\xd0\x80?5\x85\x08\x01\xe5\xdb\xc9\
-\xec\x19\xc1y|\x84\x92\xfa=\xec=.z\x93\x8eq\x9d\x86}\xa4\x8c\x97.\x92X>:\xeb\
-Ah \nd\xfeQ\xe0\xf6\x0b\xdc\xc1\x1a\xb4\x86\x06\x92\x7f[\xc2\xcb\xac\xa7\xd0\
-\x95\xa3<1\x8c\x13x\x8c\xe2~\x9b\xf0\xb2\x003\xfbz\x98\xde\xd3A\xe8\xba\x14~\
-!\x8d\x90\xfe\x155K\xfbl\x8c%>\x89\x1b\xc7\xc9\x9fhG \xf1\xf3cd\xdeXG\xd5\
-\xb3\x85\xab\x8a\xcf\x1d\xcf2\xb9\xe3\xcb\xc4o\x1a\xa2\xd0\xd54{\xcc\x9b\x1f\
-f\xe2\x07\xf7P\xee._\xec\xe3P_\x80\xd8\xdaG\x19|q\x86S\x7f\xb2\x13Ut\xb1\x1a\
-\xee\xc1Z\xbc\x91\xcc\xb7\x87(\xfe\xf2\xf7\xe7o\x02,\x00\xf4\xd7\xd6l\x9co\
-\x0fsR]?\xc3\xfd\xec\xe5B\xaa\x1a\xa7(\xa9\x1d\x1c\x84\x07-\xf2\x93\x90\x1dv\
-\xe8\xfe\x96M&\x97\xe2\x86?\xac\xc7X^\xe6\xed\x1d\xcd\xdc\x14\xeb\'\xfaT;G\
-\xff\xfe,\xc3\xcf\xef\xa5\xed\xeeE\xc8\xd5AJ\'\xf3\x9cy+C\xb1\xb5\x9d\xba\
-\xcdq\xbaz\x1d\x12\xa9,\xe1\'\xda8\xf2\x0f>c\xdf\xeb\xa4\xed\xaez\xd4=Qt\x0b\
-t\xc3%\xf9\xb5\x08\x07w\xb5r\xa7\xdc\xc5\x85T\x12\xa4F;\x83\xbc\x15y\x80\x89\
-d\x12\x92 5\xc5W\xfa\x0e\xa2?\xd4\xca\xd1\xef\xf7Q\xf8\xc1A\x1a\xd7\xd7\xe2o\
-4\x19\xf8H3\xd7\xd4F\xb2\xce\xa2\xd5\xed#;e\\Q\xf3\xdd\xe8j\x046\xf7\x8b\xd7\
-\xe9\xa9\xa9FI\x83V\x91\xe6\x97\xc95\xac\xe9\xed\xbd\xba\xf8\x06\\\xce,]\xc6\
-}\xea\x10}\xc9\x18BJ\xaeW\xfd\xec\xbea=\x13\xf1\xf0\xc5>\x8e\xcd\x08\xb65\
-\xbbL\xde\xb9\x9e\x91\x93C\x10\xd2Y\xfb\xe8f\xa6sU\xbc\xe6\xc4\xb1\xd7\\\x9b\
-\xff\x1e\xbfA?\xe3\x17\xe6\xdb\xc3\x9c4\xfa\xd3\xd8v/\xe3N\x89\x891\x9d\xfeo\
-\xa6A\xd3\xb1\x1d\x03%4\x10\x92%+\\:~7\xcf\xe1cm\xbc\xd3\x13bT\x0f\xf3\xd4\
-\xc3\xa3,\xdejp\xf4\xe79N\xbfx\x1e%5|a\x10NHV\xdc\'1kFxc\xc7\n\x1ak}\x1e\xdd\
-6F\xdd\x974\xce\xec\xcfs\xfa;\xbd\x17\xdbV7I\x1e\xf8+\x83q-\x88]:\xc7x9\x8c\
-\x15\x958\xf6(\xe7\xcb9F\xfc\x8f\nk>\xb8\x9d\t\x1e\xdf\x96#\xbcJrd\xdf8\x07\
-\xdf\xcb\xa0\xa4F\xb4\xd6`\xd1\r\x92\xa1\x92$\x18\xc9c\x17\xcf\xf3\xde\xd1U\
-\xfc\xce\xe6\xcbk\x0e\xe9M8\x8eO\xa9\xd0\xcd\xb0]M0\xe6P\xb6\xc79[\xca3}\xec\
-\xea\xe2{s\xc7\n\xa4\x9c\xc6)\x9de\xd2)`U\x19\x94\xeds\x9c/_\xcf\x88\xff\x89\
-b\xe5\x184\x9d\x9e\xa1ns\x13\'O\r\x12J\x984l\x8c\xd0\xf9\xfe$\xc7r\xc1y\x1a\
-\xf9\x85\x83>0\xb0p\x0b\x85\xf9l\x9eR\xbe\x9b\xf6[\x04\xe5\xce\x10\xb6c\xe0\
-\x0b\x9dHBR\xdb\xec\xd0\xb2\xdc\xa6yy\x89}\x9dm\xbc\xfcZ\x13\xc5R\x9a\xf4\
-\xa0BzA\x1e\xdcz\x84\xeaV\x83s\x87\x83\x14s\x1aVTp\xf3\x97\xb3\x84\xab\xe1;\
-\xffq\x1f\xc7\xbb\xb2\x18\xba\x86\xb2u\x1e~\xb2\x8b\xebn\xd38\xbe7\xc2\xd4\
-\xb8E\xac^\xb1\xeaKYzzS\x1c<\xb2\x8c\xaf\xac\xedf\xc9\xea\x08U\xb5>\xe9\x01\
-\x8b\x13\xa7f\xb0\x9d\xd2E\x9f\xe9\xb4\xa2:\x02[\x9f9\xcb\x85\xe3\x01N\xbe\
-\x17B3\x05\xeb\xb6fi\xbe.\xcf\x81]I\xa2I\x8f\xf3\xe7\xaa\xd8\xf1\xc6F\xb2\
-\x93W\xd0<\x9c#V\x95\xa5X\xe8\xa1e\xe5$\rmE\xba\xcfG\xf9\xe0D\x1e\x01W\x1d_m\
-*\x83]8B\xf3:\x9dX\x9d\xcf@\xff8\'NNb;\xd9K\xfay\xffA\x97\x87\xb78\xe4\x9d\
-\x12M\xed\t\x84\x1c\xe7\xad\xdd%\x06\x06\xe4\x17<\xe2\x0b\x0f\xb1q\xe3\x9b\
-\x0bv\r\x15\x02\xb6m\xee\xe2\xceu=\xa4\x92E\x84\x9c\xb5\x9a\xcd\x9adf,F\'#\
-\xfc\xe2\xd7\xcb8\x7f\xa1\x9a\xb2+/yoy\xfb4\x9bV\x0c\xd1\xd28\x83\xf2\x14>\
-\x1a]=\t\x0e\x9e\xac\xa3\xa7?r\xb1\xad\x94\x8a\x95\xd7O\xb2y\xed \xa9x\x81rY\
-\xa2\xa4\xce\x07\x1fV\xb3\xbb\xb3\x91\\\xde\xe0\xde;\x87\xd8\xd81I\xd9\xd7x\
-\xfd\x9dF\x8e\x9e\xae\xfa\x94\xd7\x80\xe5q\xfb\xfaQnY9\x84\xf4]\xa4\x06#\x99\
-\x08\xe7.T\xb1i\xc5\x10 x\xfd\x9d\xa5\x1c=]}E\xcdl\xce@\x08\xb8\xf7\xce\x116\
-tL\xe0\xfa\xf2\x12\xdd\xab\x8do\xf6\x1b\xbdl\xea\x18\xa2\xeck\xbc\xf6N\x1bGO\
-_z\xbf\xc1\xd0\xe1o\xbe\x9e\xa3\xdc?\xc4\x9b\xdf\xed\xe5k\xff\xd4A\xcfX\x94o\
->\x1f\xa1r\x95\x0e\xc4\xa2E\xdf[\xf0\xdd \x04\x84\x82\x1f\xdbt]\xb0\x9dk\xf3\
-\xd8\xf1\xb3f\xc3\x9a2\xdf\x7f~\x8a\x17\xfer\x00\xd7\x13\xfc\xf9?/\xe2\x99\
-\xaf\xc7yw\xff\x17s\x95`\xa1\xa3\x0f\x0e\x0e\xce\xb7\x87\n\xf3\xc8M\xdb\'\
-\x98\x1a\xcap\xe2p\x9e\'\x9e\x0b\xd0u\xca\xe6\xcd\x9d\x8b\x98\xc9V\xb6W0[]\
-\xa8p\r\x13\x0e\xdaD\xa3y\x1e\xfac\xd8|\xaf\xcdK\xaf\x84*\xc9\xf1\t\xf4\xf96\
-Pa~y\xf1\xdf\x1b\t\x9auT\xc7|\x9e\xff\x8e\xe4\xd5\x9f~>\xb7#\xff\xaf"\xe0\
-\x1b\x0b\xfe\x1f\xa4B\x85\xf9\xa2\xb2\x96V\xa8p\x19*\tR\xa1\xc2e\xf8\x1f)x\
-\x96s\xfb\xc1\xd7\xb6\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory031Bitmap():
- return wxBitmapFromImage(getDocFactory031Image())
-
-def getDocFactory031Image():
- stream = cStringIO.StringIO(getDocFactory031Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory031')
-catalog['DocFactory031'] = ImageClass()
-catalog['DocFactory031'].getData = getDocFactory031Data
-catalog['DocFactory031'].getImage = getDocFactory031Image
-catalog['DocFactory031'].getBitmap = getDocFactory031Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory032Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rb\
-IDATx\x9c\xed\x9bYl]\xc7y\xc7\x7f3g\xbb+\xef\xc2\xcbU")\x91\x94m\xd9\x94d\
-\xed\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb>\xe41(\x82\x02E\
-\x17\xa3A`\xa7Ij\x14-\\\xa7n\x94\xc4\x8ecD\xb2\x13Y\xb2\x15\x85\xda,k\xa5,\
-\x89\xa4\xb8\\\xee\xe4%\xefz\xce=\xe7L\x1f\xe8\xd8V\xe9X|\xb0M\x06\xba\xbf\
-\xc7\x839\xe7\xff\xff\xbe\x99\x0f3g\x06#\xfe\xe1[JQ\xa1B\x85OD\x0fU/\xb4\x85\
-\n\x15\x16/z\xb0R \x15*\xfcV\xf4pb\xa1-|2\x02\x85\x81\x8d\xc4\xbb\xec\xb9\
-\x8b\x81\x8b\xf9\xc5y\x106\xda\xff\xf3\xa0\x80\xb2\n\xe0\xa1}.\xba\x12\x1fS\
-\x94\xf0\x91\x94\x95\x85B|.:\x15\xae\x8c\x1e\x8a/\xb4\x85\xb9\x08|\x1a\n\xfb\
-\x88\xba\x97\xf0?66\xa5\x04i\xea\xe4\xdd8\xb9`;3\xfa2\\\x02\x9f\x93\x07\x8f&\
-\xfbM\xaa\xbc\x9e\xcb<\x00\xe8\x96\xc2\xd6j\xe8\xd6vP&\xf4\x99\xeaj8,w\x7fF\
-\xa0<\x82f\x08\xc6\xe4*\xd2\xf2\xe6\xcfT\xa3\xc2\xfc\xd1\xc3\x8b\xb0@,Fi\xd2\
-\x9f\xe3\xfck\xb5L\x0fF\x00\x01R"uE\xb8\xa6H\xa4\xbeH\xdb\xeaI\x1ck\x19}\xc1\
-\xbf\xc5\xa1\xee3\xf7\x10d\x98\xa6\xe2K\x9c\xfdI\x9c\xe9t\x00\x84\x00!\x01\
-\x885\xda\xacz\xf0m\x8aF=\x13\xdc\xfa\x99\xea\x86\x18\xa6\xc1\xfe\x11\xa7~\
-\x94"\xb6\xb4D\xcb\x86c\x14\x82\xd7Sf\x11v\xd4U\x80\x1eY\x84y\x0f)AB[\x87\
-\xf0\x8bHM\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9e\x95\xe4G\x9bY}\x8f\xc44~M\
-\x7f\xf8\xbe\xcb\x96!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%?y9$\\\x07\xe9\x96\
-\x01.k\x1bR:aq-\xca- 5>\xf4\x00\x82\xd4r\x93P\xa8\x033\xd8DD\xce\xfd\x8e\xaf\
-\x9b(MG:E\x10\x12\xdf\xb0f\x0b\xec\n\x9a\x02E\xdc/\x12\xce\xafDR"\x9b\x8eq]\
-\xd4\xa2.4NF~\xd4Q\xf3\x8aO\xa9\x8f\xf4\xcd\xc0\xac\xa6W\xc6\xd7\xadY\xad\
-\xb2=\xdb\xcc\x0c\xcc}\x07\xf0\xcd\xe0e\x9e\xafV\xf4*s`\xa1=\xcc\xc1R\x0e\
-\x18\x9b0\xf4\xb7\x89\xa5\\n\xfc\xa3[\xd0BAP>\xe5\xbc\xcd\xc0\xb1\x1eFN\xa7\
-\xb9t8\xc5uwEq\x8c\x0b\x14D\x10\xa1<\xccL7f\xa6\x1b\xafPB\xa0f\'\x9f@\x00;\
-\xb5\x12\xa7\xaa\x19>($\xe1\x97\xb1fz0&/\xa2l\x07P\xb3\x13\x84\x11\xa0X{#Z\
-\xb8\x1a\x19\xb8\x05\xcb\xda\x8b\x96r\xb9\xf1\x89\xad\x18\x91 \x00vY1iD\x90\
-\x01I\xcc\xef\xc1\x9c\xba\x805\xd3\x8d\xb2]\x94R`\x06\xf1\x82\xd5\x98\xc54J\
-\x81\x13o\xa5\x94\xea\xb8\xa2fX\xe8T{3\xe4\xa6V\x81\xdb\x89\xd0\xa0TX\xcb2k\
-\x94!\x03J\xd2\x98_|\xca\'\x90>\x82\x91K#\r\x89\x1bn@+\x8c\xe1\xdbe\x84i\xe1\
-\xe8\xb5\xc8\xec8B\n\xec\xa5k\xf0\xa2\xb5\x00\x18\xe93\x18S\x03 \x14\xe5x3\
-\xe5\xc6\x95\x0b\xd0\xfb\x8b\x0b=\xc2\xd9\x85\xf60\x07C\xe8\x08\xb3\n]\xe6\
-\xd0\x83\x02#\x96"c\x15\xf0\x00+\x14\xa6\xed\x8e\x8dx\xb9\xdd\xe4\x86\xbb)d\
-\xae!a\x8d\xa0\x9b3D\xb2\xe7\xd1\xcb\x19\x86\xceL2~"\x8b\xe7\xfa\xe8A\x9d\
-\xc6-\t\x1abC\x14\x8bK(\x04\x97"\x95G$w\x0e\x95\x9d\xa6\xff\xedar\x836B\x033\
-bP}C\x94\xda\xd0\x08vh3\xc2H\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\
-\x18%\xa2\x86\x88\xe6\xba\xa04\xcd\xf0\xb1q2\xddy\x00\x1a\xb7$\x897\x87\x18=\
-9\x8d\x1e\xd6\xa9Y\x97!\xe7;\x84r\xdd\xbfU\xb3.<\x81Y\xb5\x8d\xe1C\xe7\x18<p\
-\x08\xe5{()8\xb7\xeb\xe7\xac|\xe4\x01\x12Z?8\'\xe6\x15\x9f\xaeJ\xc4\x02\xa7\
-\xe9\xfeE\x9aP\xadE\xf2\xfaa&\xba\xb2\x8c\x9f\x9aa\xc5\x83IB\xde\x8f\xe9\xfb\
-U\x98x\xbbC\xa2\xea-\xec\xc8N\xa4\x97%\xe0\xbeD\xfax\x10\xb3\xca#\xde!p\xd4\
-\x9f\xa0\x84\xb1\xb0\x83a\x81\xd1\xc3\x1cXh\x0fs\xd0H"\xb8\x13\x9dI\x84\x10\
-\x08\x15\xc2\xe4WxL\xa24\x89\xe7\xdd\xc6\x92\xf5\x1d\xf4\xec\xfe\x0f\xec\xb1\
-!b\xa9\x18\x89\xf2\x08\xa2\xd0\xc0\xf9\x1f\x1e\xa606J \x1eC\x9a&N~\x8a\xe1\
-\xfdi\x8a\xe96Z\xbe\xba\x1a\xc3<\x83\xee$\xd1\xec\x16\xba~\xf2C\x8ac\xa3\x98\
-\xd1\x08F8\x0c\xc2!\xdf\xe3\xd2\xb8v\x1b\x9a?\x80\xa0\x05\x9d\t<\xbb\x88=1\
-\x8d\x11\xb40\x85\x86\x16\x88Q\xd2\x0f\x81\x97#\xe0\xb6q\xee\x95\x97\xc9\x0f\
-\x0f\x13H\xc4\x91\x96\xc5\xf8\x91K\x8c\x1e\xb4\xf1\xdd2\xa1\xfaz\x82[\xeeD\
-\xb73\xc8O\xd3\\w\'JA\xb0*BU\xad$?\xd2\x87\x90\x92p|\x19z \x86\xa1\xd2\xf8\
-\xf3\x8a\xef4Jz\x98\xc6z\xfc\xe9.F/\x8e1\xf5^\x88`u\x92\xa5\x1b[\xa9\xaaY\tN\
-\x18\xc3?I\xfe}\x8d\xa5kZ(xG\x90%\x1f]\xeb\xa0<z\x92xM\x1d\xf1\xaa\x06\xf2\
-\x1c\xe2j?E\xd6C\xec[h\x0fs\x10,Cp/\xba\x18GH\x10"H\x80wQ\xf4\x02 5\x9b`\xf5\
-\x03\x04\xac!\xec\xf1\xa3h\xac\xc5\x10\x1d\xf4\x1dx\x81\xf2\xd8Q\x96\xde\xba\
-\x93\xba\x9bw\x80*\xe3\x16\x8b\x0c\xec\xf9w\n\xbd{)\xa4W\x13i_\x02~\r\x03\
-\xfb\xff\x17w\xe2=Z\xeex\x8cD\xc7&d\xc0G\xd3\xe2xN\x11\xa5Ob\xea\x9d\x08w\
-\x1b\xba\x18\xc3\xcd^\xe0\xe2\x7f?\x834%B\x934n}\x9a\xe8\x8a\x15(/K\xe6\\\
-\x17\xce\xe81\x96\xde\xf6\x10u7\xef@\xe8>\xbe\r\x83o\xbe\xc0\xf4\xf9\x83\x18\
-\xba\x860\xeb\xd1\xdd(\x03\xfb_\xfaTMe\xed!v\xed]\xc4\xda\x9e\xe6\xc2\x8b\
-\xcf t\x8f\xf6\xfb\x9fBX\x93H\xad\x8e\xbe\x03?\xbdr|m\xf5(k7\xc2\xdc\x86.\
-\xa70\xe5\x10-\xdb\xff\x82X\xfb\x1a|\xd1\x8b\n\xbc\x0b\xb9\x15\xd4o0\xe9{\
-\xfd\x7f(M\x7f\x95`\xb0\x88\xf2\x92L\xf5t\xa13Dj\xd5#\x10\xea\'(\xde\x80\xab\
-\xbcD\xf4\xc0\xe8"\xfc\x11\xd35\xbc@\x04\xcd\x96H)\xc0\x8f`Mj\xe0\xcezUV\x1c\
-\xd7\x0fc\x96\x04\xa6\x17F\xa8\x18\x94}\xec\xde>B\xc1F\xea6=\x8aV\xde\x8d\
-\xf4\x0e#\xcd\x87\xa8[\xff0\x03\xddg(\xf5\xf4\x10[\xfe8\x9e\'\xb0\xbb/\x12\n\
-\xd4Q\xb3\xee!\xa4\xfbcd\xe1\x00\xc8\x04\x9a\xd0\xc1\x99\x82R\x12\xcf\x04\
-\xad\x04z\x11\xacP\x02\xdd\x8a"\r\r+\x98Bs]\x94l%\xd3\xf9o\x84\x02\xf5\xd4m\
-\xdc\x89\xee\xfc\x0cQ:\x81o=I\xcd\xea\xfb(\x9e9\x8c\xee\xe8\x08\x95\x00/pe\
-\xcd\xdc\x0c\xe8\x19<\xeb\x1b\x98*\x82T\x02M\xafB\xb3_\xc63\x9e\x9cW|U-;\xd1\
-\n\xfb\xf1\xac\x18\x9a\xad\x11\n/%\xd6\xba\r\xdd\xf9.8\' \xeb\xa1\xf4\x12U+\
-\xb6\x13\xb0\xde`\xb2\xf3\x08M;\xff\x1c\xcf\xcf\x93=\xfe"\x89\xa6\xb5\x98\
-\xc9\xe5\xc8\xfc\x1e\xc8\x02W\xf9\x19\x8c\xce\xde\xe5\x0b\xeda.\xb1Z\xd8<\
-\x82\x18\x0e\x82\x04\xec\x118T\x0b\xd3\n\x0c\x0b\xb5i\x13\xa5\xbewQgCX\xed\
-\xad\xc8\xe9\t<\x91\xc2;/\xd0c\x8dP\x08 \x8f\x0cB!\x88\xd6\x98\xc6j\xb8\rm\
-\xb8\x11\xc6b\xa8B\x02U,\xe2\xbe\x0fF\xa2\x1e\x7f\xc6@?6\x01\x85\x8fo\x15WC\
-\xac\x066\xa4\x11\xc3\x01,\xa7\x9d\xd6\x9d\x7f\x85\x16\x8d\x80\xef\xe3\x8f\
-\x0f"O\\\xc0i^\x82s\xba\x84\x91lD\x94\x13\x88C\xd3\x90\x0b"[\x060\xeaoB\x1b\
-\xaaGxI\xf0\x12\xa8\x9c\xba\xb2\xe6ot7\x0e"\x87\x03\x08)\xa0\x94\x86\xae$\
-\xfer9\xaf\xf8\xc8\'\xe0D\x13l\x8a\xc3plv\x89\xea\xa7\xa03\x02\x99f\x00D\xa0\
-\x8c\xbc9J$~3\xd9\xfd\xefb\xdfT\xc0N\xa7)\x9ft\xa9\xbf\xed^\x18\xce\xc3\xa1\
-\x00\xf8\x8bpl|\xc1\xe8\x83\xcf=\xb9\xd0\x1e\xe6`\xb4\n\x12\x1d\xe3\x14\xce.\
-C\xa2\xe1\xe7\'\x99>\xb8\x1d\xa4\xc2\\\xef\xa3g]\x06\xbf=D\xe1\xdc-\xd4<\xd0\
-H\xf1\xb8\x8d\xb9&\x8f*m!{>\x83\x97\x9d\xc2\t=\x8e\xfd\x9eKh\x85\xc5Lg?\xd3\
-\xfb:\x0864\xe0OM!B@\xf9V2\xfbFp\x1e\x1d\xa1\xa4\xfe\x00{\x9f\x8b\xde\xa4c\\\
-\xa3a\x1f+\xe3\xa5\x8b$V\x8e\xcez\x10\x1a\x88\x02\x99\x7f\x16\xb8\xfd\x02w\
-\xb0\x06\xad\xa1\x81\xe4\xdf\x97\xf02\x1b)t\xe5(O\x0c\xe3\x04\x1e\xa1x\xd0&\
-\xbc"\xc0\xcc\x81\x1e\xa6\xf7u\x10\xba&\x85_H#\xa4\x7fE\xcd\xd2\x01\x1bc\x99\
-O\xe2\xfaq\xf2\xa7\xda\x11H\xfc\xfc\x18\x99\xd76P\xf5ta^\xf1\xb9\xe3Y&w}\x99\
-\xf8\rC\x14\xba\x9af\xb7y\xf3\xc3L\xfc\xe0.\xca\xdd\xe5\x0fs\x1c\xea\x0b\x10\
-[\xff0\x83\xcf\xcfp\xe6\xcfv\xa3\x8a.V\xc3]XK7\x93\xf9\xf6\x10\xc5_\xfe\xe1\
-\xc2\r\x80E\x84\xfe\xca\xba\xcd\x0b\xeda\x0e\xd5\xf53\xdc\xcb~.\xa5\xaaq\x8a\
-\x92\xda\xc1A\xb8\xdf"?\t\xd9a\x87\xeeo\xd9dr)\xae\xfb\xe3z\x8c\x95e\xde\xdc\
-\xd5\xcc\r\xb1~\xa2O\xb4s\xfc\x1f\xcf3\xfc\xec~\xda\xee\\\x82\\\x1b\xa4t:\
-\xcf\xb972\x14[\xdb\xa9\xdb\x1a\xa7\xab\xd7!\x91\xca\x12~\xac\x8dc\xff\xe43\
-\xf6\xbdN\xda\xee\xa8G\xdd\x15E\xb7@7\\\x92_\x8bpxO+\xb7\xcb=\\J%Aj\xb43\xc8\
-\x1b\x91\xfb\x98H&!\tRS|\xa5\xef0\xfa\x03\xad\x1c\xff~\x1f\x85\x1f\x1c\xa6qc\
--\xfef\x93\x81\x0f4sMm$\xeb,Z\xdd>\xb2S\xc6\x155\xdf\x8e\xaeE`s\xafx\x95\x9e\
-\x9aj\x944h\x15i~\x99\\\xc7\xba\xde\xde\xf9\xc57\xe0rn\xf9\n\xeeQG\xe8K\xc6\
-\x10Rr\xad\xeag\xefu\x1b\x99\x88\x87?\xccqlF\xb0\xa3\xd9e\xf2\xf6\x8d\x8c\
-\x9c\x1e\x82\x90\xce\xfa\x87\xb72\x9d\xab\xe2\x15\'\x8e\xbd\xee\xea\xfe\xf7\
-\xf8\r\xfa9\xbf\xb0\xd0\x1e\xe6\xd0\xe8Oc\xdb\xbd\x8c;%&\xc6t\xfa\xbf\x99\
-\x06M\xc7v\x0c\x94\xd0@H\x96\xadr\xe9\xf8\xfd<GO\xb4\xf1VO\x88Q=\xcc\x13\x0f\
-\x8e\xb2t\xbb\xc1\xf1\x9f\xe78\xfb\xfcE\x94\xd4\xf0\x85A8!Yu\x8f\xc4\xac\x19\
-\xe1\xb5]\xabh\xac\xf5yx\xc7\x18u_\xd28w0\xcf\xd9\xef\xf4~\xd8\xb6\xbaIr\xdf\
-\xdf\x18\x8ckA\xec\xd2\x05\xc6\xcba\xac\xa8\xc4\xb1G\xb9X\xce1\xe2\x7fp\xb0\
-\xe6\x83\xdb\x99\xe0\xd1\x1d9\xc2k$\xc7\x0e\x8cs\xf8\x9d\x0cJjDk\r\x96\\\'\
-\x19*I\x82\x91<v\xf1"\xef\x1c_\xc3\xefm\xfdt\xcd!\xbd\t\xc7\xf1)\x15\xba\x19\
-\xb6\xab\t\xc6\x1c\xca\xf68\xe7Ky\xa6O\xcc/\xbe\xd7w\xadB\xcai\x9c\xd2y&\x9d\
-\x02V\x95A\xd9\xbe\xc0\xc5\xf2\xb5\x8c\xf8\x1f;\xac\x1c\x83\xa6\xb33\xd4mm\
-\xe2\xf4\x99AB\t\x93\x86\xcd\x11:\xdf\x9d\xe4D.\xb8@=\xbf\xf8\xd0\x07\x06\
-\x16\xdfAa>\x9b\xa7\x94\xef\xa6\xfd&A\xb93\x84\xed\x18\xf8B\'\x92\x90\xd46;\
-\xb4\xac\xb4i^Y\xe2@g\x1b/\xbe\xd2D\xb1\x94&=\xa8\x90^\x90\xfb\xb7\x1f\xa3\
-\xba\xd5\xe0\xc2\xd1 \xc5\x9c\x86\x15\x15\xdc\xf8\xe5,\xe1j\xf8\xce\x7f\xdd\
-\xc3\xc9\xae,\x86\xae\xa1l\x9d\x07\x1f\xef\xe2\x9a[4N\xee\x8f05n\x11\xabW\
-\xac\xf9R\x96\x9e\xde\x14\x87\x8f\xad\xe0+\xeb\xbbY\xb66BU\xadOz\xc0\xe2\xd4\
-\x99\x19l\xa7\xf4\xa1\xcftZQ\x1d\x81\xedO\x9d\xe7\xd2\xc9\x00\xa7\xdf\t\xa1\
-\x99\x82\r\xdb\xb34_\x93\xe7\xd0\x9e$\xd1\xa4\xc7\xc5\x0bU\xeczm3\xd9\xc9+h\
-\x1e\xcd\x11\xab\xcaR,\xf4\xd0\xb2z\x92\x86\xb6"\xdd\x17\xa3\xbcw*\x8f\x80y\
-\xc7W\x9b\xca`\x17\x8e\xd1\xbcA\'V\xe73\xd0?\xce\xa9\xd3\x93\xd8N\xf6\xb2<\
-\x1f<\xec\xf2\xe06\x87\xbcS\xa2\xa9=\x81\x90\xe3\xbc\xb1\xb7\xc4\xc0\x80\xfc\
-\x82{|\xf1"6o~}\xd1\xcd\xa5B\xc0\x8e\xad]\xdc\xbe\xa1\x87T\xb2\x88\x90\xb3\
-\x16\xb3Y\x93\xcc\x8c\xc5\xe8d\x84_\xfcz\x05\x17/USv\xe5e\xef\xadl\x9ff\xcb\
-\xaa!Z\x1agP\x9e\xc2G\xa3\xab\'\xc1\xe1\xd3u\xf4\xf4G>l+\xa5b\xf5\xb5\x93l]?\
-H*^\xa0\\\x96(\xa9\xf3\xde\xfb\xd5\xec\xedl$\x977\xb8\xfb\xf6!6wLR\xf65^}\
-\xab\x91\xe3g\xab\xe6x\rX\x1e\xb7n\x1c\xe5\xa6\xd5CH\xdfEj0\x92\x89p\xe1R\
-\x15[V\r\x01\x82W\xdfZ\xce\xf1\xb3\xd5W\xd4\xcc\xe6\x0c\x84\x80\xbbo\x1faS\
-\xc7\x04\xae//\xd3\x9do|\xb3\xdf\xe8eK\xc7\x10e_\xe3\x95\xb7\xda8~\xf6\xf2{\
-\r\x86\x0e\x7f\xf7\xf5\x1c\xe5\xfe!^\xffn/_\xfb\x97\x0ez\xc6\xa2|\xf3\xd9\
-\x08\x95+t\x1f!\x96,\xf9\xde\xa2M\x87\x10\x10\n~d\xcfu\xc1v\xae\xeem\xc7\xcf\
-\x8aM\xeb\xca|\xff\xd9)\x9e\xfb\xeb\x01\\O\xf0\x97\xff\xba\x84\xa7\xbe\x1e\
-\xe7\xed\x83_\xccU\x82\xdf\x15\xf4\xc1\xc1\xc1\x85\xf6Pa\x01\xb8a\xe7\x04SC\
-\x19N\x1d\xcd\xf3\xd83\x01\xba\xce\xd8\xbc\xbe{\t3\xd9\xca\xf2\xea\xe3T\xb2q\
-\x95\x12\x0e\xdaD\xa3y\x1e\xf8S\xd8z\xb7\xcd\x0b/\x85*\xc5\xf1\t\xe8\x0bm\
-\xa0\xc2\xc2\xf0\xfc\x7f6\x124\xeb\xa8\x8e\xf9<\xfb\x1d\xc9\xcb?\xfd|nG\xfe\
-\xae#\xe0\x1b\x8b\xf6\x1f\xa4B\x85\x85\xa62\xa7V\xa8\xf0)T\n\xa4B\x85O\xe1\
-\xff\x00\x0e\x0c\x96s\xfbJR\xd9\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory032Bitmap():
- return wxBitmapFromImage(getDocFactory032Image())
-
-def getDocFactory032Image():
- stream = cStringIO.StringIO(getDocFactory032Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory032')
-catalog['DocFactory032'] = ImageClass()
-catalog['DocFactory032'].getData = getDocFactory032Data
-catalog['DocFactory032'].getImage = getDocFactory032Image
-catalog['DocFactory032'].getBitmap = getDocFactory032Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory033Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ra\
-IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\x8a\
-.F\x83\xc0N\x93\xd4(Z\xb8N\xdd(\x89\x1d\xc7\x88d\'\xb2d+\n\xb5Y\xd6JY\x12Iq\
-\xb9\xdc\xc9K\xde\xf5\x9c{\xce\x99\xfe\xa0K[\xb5#\xb1\x80m\xb2\xf5}~\x1e\xcc\
-9\xef\xfb}3\x1ff\xce\x0cF\xfc\xcd\xb7\x94\xa2B\x85\n\x9f\x88\x1e\xaa^h\x0b\
-\x15*,^\xf4`\xa5@*T\xf8\x8d\xe8\xe1\xc4B[\xb8\x1c\x81\xc2\xc0F\xe2]\xf6\xdc\
-\xc5\xc0\xc5\xfc\xfc<\x08\x1b\xed\x7fxP@Y\x05\xf0\xd0>\x13]\x89\x8f)J\xf8H\
-\xca\xcaB!>\x13\x9d\n\xf3G\x0f\xc5\x17\xda\xc2\x87\x08|\x1a\n\xfb\x88\xba\
-\x97\xf0?26\xa5\x04i\xea\xe4\xdd8\xb9`;3\xfa2\\\x02\x9f\x91\x07\x8f&\xfbM\
-\xaa\xbc\x9e\xcb<\x00\xe8\x96\xc2\xd6j\xe8\xd6vP&\xf4\xa9\xeaj8,w\x7fF\xa0<\
-\x82f\x08\xc6\xe4*\xd2\xf2\xe6OU\xa3\xc2\xff\x1e=\xbc\x88\n\xc4b\x94&\xfd9\
-\xce\xbfV\xcb\xf4`\x04\x10 %RW\x84k\x8aD\xea\x8b\xb4\xad\x9e\xc4\xb1\x96\xd1\
-\x17\xfcK\x1c\xea>u\x0fA\x86i*\xbe\xc4\xd9\x9f\xc4\x99N\x07@\x08\x10\x12\x80\
-X\xa3\xcd\xaa\x07\xdf\xa6h\xd43\xc1\xad\x9f\xaan\x88a\x1a\xec\x1fq\xeaG)bKK\
-\xb4l8F!x=e\x16Q\x07}\x01\xd1#\x8b(\xff!%Hh\xeb\x10~\x11\xa9)\x82q\x81\x11\
-\x10(\x04\xa5|\x90\xd1\xb3\x92\xfch3\xab\xef\x91\x98\xc6\xaf\xe9\x0f\xdfw\
-\xd92D\xf8\x1e\xc2-#|\x0f%5\x94n\xa0\xe4\'/\x87\x84\xeb \xdd2\xc0emCJ\',\xae\
-E\xb9\x05\xa4\xc6\x9c\x07\x10\xa4\x96\x9b\x84B\x1d\x98\xc1&"\xf2\xe3\xdf\xf1\
-u\x13\xa5\xe9H\xa7\x08B\xe2\x1b\xd6l\x81]ES\xa0\x88\xfbE\xc2\xf9\x95HJd\xd31\
-\xae\x8bZ\xd4\x85\xc6\xc9\xc8\x0f;h^\xf1)\xf5\xa1\xbe\x19\x98\xd5\xf4\xca\
-\xf8\xba5\xabU\xb6g\x9b\x99\x81\x8f\xbf\x03\xf8f\xf02\xcf_t\xf4*s`\xa1=\xcca\
-)\x07\x8cM\x18\xfa\xdb\xc4R.7\xfe\xde-h\xa1 (\x9fr\xdef\xe0X\x0f#\xa7\xd3\\:\
-\x9c\xe2\xba\xbb\xa28\xc6\x05\n"\x88P\x1ef\xa6\x1b3\xd3\x8dW(!P\xb3\x93O \
-\x80\x9dZ\x89S\xd5\x0c\x1f\x14\x92\xf0\xcbX3=\x18\x93\x17Q\xb6\x03\xa8\xd9\t\
-\xc2\x08P\xac\xbd\x11-\\\x8d\x0c\xdc\x82e\xedEK\xb9\xdc\xf8\xc4V\x8cH\x10\
-\x00\xbb\xac\x984"\xc8\x80$\xe6\xf7`N]\xc0\x9a\xe9F\xd9.J)0\x83x\xc1j\xccb\
-\x1a\xa5\xc0\x89\xb7RJu\\U3,t\xaa\xbd\x19rS\xab\xc0\xedDhP*\xace\x995\xca\
-\x90\x01%i\xcc/>\xe5\x13H\x1f\xc1\xc8\xa5\x91\x86\xc4\r7\xa0\x15\xc6\xf0\xed\
-2\xc2\xb4p\xf4Zdv\x1c!\x05\xf6\xd25x\xd1Z\x00\x8c\xf4\x19\x8c\xa9\x01\x10\
-\x8ar\xbc\x99r\xe3\xca\x05\xe8\xfd\xc5\x89\x1e\xe1\xecB{\x98\xc3\x10:\xc2\
-\xacB\x979\xf4\xa0\xc0\x88\xa5\xc8X\x05<\xc0\n\x85i\xbbc#^n7\xb9\xe1n\n\x99k\
-HX#\xe8\xe6\x0c\x91\xecy\xf4r\x86\xa13\x93\x8c\x9f\xc8\xe2\xb9>zP\xa7qK\x82\
-\x86\xd8\x10\xc5\xe2\x12\n\xc1\xa5H\xe5\x11\xc9\x9dCe\xa7\xe9\x7f{\x98\xdc\
-\xa0\x8d\xd0\xc0\x8c\x18T\xdf\x10\xa564\x82\x1d\xda\x8c0R\xe82\x8f\x1e\x04#\
-\x9a\xa2\x10(\xe1\xe2\xe1\x06]\x1cF\x89\xa8!\xa2\xb9.(M3|l\x9cLw\x1e\x80\xc6\
--I\xe2\xcd!FON\xa3\x87uj\xd6e\xc8\xf9\x0e\xa1\\\xf7o\xd4\xac\x0bO`Vmc\xf8\
-\xd09\x06\x0f\x1cB\xf9\x1eJ\n\xce\xed\xfa9+\x1fy\x80\x84\xd6\x0f\xce\x89y\
-\xc5\xa7\xab\x12\xb1\xc0i\xba\x7f\x91&Tk\x91\xbc~\x98\x89\xae,\xe3\xa7fX\xf1\
-`\x92\x90\xf7c\xfa~\x15&\xde\xee\x90\xa8z\x0b;\xb2\x13\xe9e\t\xb8/\x91>\x1e\
-\xc4\xac\xf2\x88w\x08\x1c\xf5\x07(a,\xec`X$\xe8a\x0e,\xb4\x8794\x92\x08\xeeD\
-g\x12!\x04B\x850\xf9\x15\x1e\x93(M\xe2y\xb7\xb1d}\x07=\xbb\xff\x05{l\x88X*F\
-\xa2<\x82(4p\xfe\x87\x87)\x8c\x8d\x12\x88\xc7\x90\xa6\x89\x93\x9fbx\x7f\x9ab\
-\xba\x8d\x96\xaf\xae\xc60\xcf\xa0;I4\xbb\x85\xae\x9f\xfc\x90\xe2\xd8(f4\x82\
-\x11\x0e\x83p\xc8\xf7\xb84\xae\xdd\x86\xe6\x0f hAg\x02\xcf.bOLc\x04-L\xa1\
-\xa1\x05b\x94\xf4C\xe0\xe5\x08\xb8m\x9c{\xe5e\xf2\xc3\xc3\x04\x12q\xa4e1~\
-\xe4\x12\xa3\x07m|\xb7L\xa8\xbe\x9e\xe0\x96;\xd1\xed\x0c\xf2J\x9a\xeb\xeeD)\
-\x08VE\xa8\xaa\x95\xe4G\xfa\x10R\x12\x8e/C\x0f\xc40T\x1a\x7f^\xf1\x9dFI\x0f\
-\xd3X\x8f?\xdd\xc5\xe8\xc51\xa6\xde\x0b\x11\xacN\xb2tc+U5+\xc1\tc\xf8\'\xc9\
-\xbf\xaf\xb1tM\x0b\x05\xef\x08\xb2\xe4\xa3k\x1d\x94GO\x12\xaf\xa9#^\xd5@\x9e\
-CTN\x8fg\xd1C\xec[h\x0fs\x08\x96!\xb8\x17]\x8c#$\x08\x11$\xc0\xbb(z\x01\x90\
-\x9aM\xb0\xfa\x01\x02\xd6\x10\xf6\xf8Q4\xd6b\x88\x0e\xfa\x0e\xbc@y\xec(Ko\
-\xddI\xdd\xcd;@\x95q\x8bE\x06\xf6\xfc3\x85\xde\xbd\x14\xd2\xab\x89\xb4/\x01\
-\xbf\x86\x81\xfd\xff\x89;\xf1\x1e-w<F\xa2c\x132\xe0\xa3iq<\xa7\x88\xd2\'1\
-\xf5N\x84\xbb\r]\x8c\xe1f/p\xf1\xdf\x9fA\x9a\x12\xa1I\x1a\xb7>Mt\xc5\n\x94\
-\x97%s\xae\x0bg\xf4\x18Ko{\x88\xba\x9bw t\x1f\xdf\x86\xc17_`\xfa\xfcA\x0c]C\
-\x98\xf5\xe8n\x94\x81\xfd/]QSY{\x88]{\x17\xb1\xb6\xa7\xb9\xf0\xe23\x08\xdd\
-\xa3\xfd\xfe\xa7\x10\xd6$R\xab\xa3\xef\xc0O\xaf\x1e_[=\xca\xda\x8d0\xb7\xa1\
-\xcb)L9D\xcb\xf6?!\xd6\xbe\x06_\xf4\xa2\x02\xefBn\x05\xf5\x1bL\xfa^\xff\x0fJ\
-\xd3_%\x18,\xa2\xbc$S=]\xe8\x0c\x91Z\xf5\x08\x84\xfa\t\x8a7\xa0R"\x00\xe8\
-\x81\xd1E\xf4C\xa6kx\x81\x08\x9a-\x91R\x80\x1f\xc1\x9a\xd4\xc0\x9d\xf5\xa8\
-\xac8\xae\x1f\xc6,\tL/\x8cP1(\xfb\xd8\xbd}\x84\x82\x8d\xd4mz\x14\xad\xbc\x1b\
-\xe9\x1dF\x9a\x0fQ\xb7\xfea\x06\xba\xcfP\xea\xe9!\xb6\xfcq<O`w_$\x14\xa8\xa3\
-f\xddCH\xf7\xc7\xc8\xc2\x01\x90\t4\xa1\x833\x05\xa5$\x9e\tZ\t\xf4"X\xa1\x04\
-\xba\x15E\x1a\x1aV0\x85\xe6\xba(\xd9J\xa6\xf3\x9f\x08\x05\xea\xa9\xdb\xb8\
-\x13\xdd\xf9\x19\xa2t\x02\xdfz\x92\x9a\xd5\xf7Q<s\x18\xdd\xd1\x11*\x01^\xe0\
-\xea\x9a\xb9\x19\xd03x\xd670U\x04\xa9\x04\x9a^\x85f\xbf\x8cg<9\xaf\xf8\xaaZv\
-\xa2\x15\xf6\xe3Y14[#\x14^J\xacu\x1b\xba\xf3]pN@\xd6C\xe9%\xaaVl\'`\xbd\xc1d\
-\xe7\x11\x9av\xfe1\x9e\x9f\'{\xfcE\x12Mk1\x93\xcb\x91\xf9=\x90\x05*g0\x00\
-\xe8\xec]\xbe\xd0\x1e>$V\x0b\x9bG\x10\xc3A\x90\x80=\x02\x87jaZ\x81a\xa16m\
-\xa2\xd4\xf7.\xeal\x08\xab\xbd\x159=\x81\'Rx\xe7\x05z\xac\x11\n\x01\xe4\x91A\
-(\x04\xd1\x1a\xd3X\r\xb7\xa1\r7\xc2X\x0cUH\xa0\x8aE\xdc\xf7\xc1H\xd4\xe3\xcf\
-\x18\xe8\xc7&\xa0\xf0\xd1\xad\xe2j\x88\xd5\xc0\x864b8\x80\xe5\xb4\xd3\xba\
-\xf3\xcf\xd0\xa2\x11\xf0}\xfc\xf1A\xe4\x89\x0b8\xcdKpN\x970\x92\x8d\x88r\x02\
-qh\x1arAd\xcb\x00F\xfdMhC\xf5\x08/\t^\x02\x95SW\xd7\xfco\xdd\x8d\x83\xc8\xe1\
-\x00B\n(\xa5\xa1+\x89\xbf\\\xce+>\xf2\t8\xd1\x04\x9b\xe20\x1c\x9b]\xa2\xfa)\
-\xe8\x8c@\xa6\x19\x00\x11(#o\x8e\x12\x89\xdfLv\xff\xbb\xd87\x15\xb0\xd3i\xca\
-\']\xeao\xbb\x17\x86\xf3p(\x00\xfe"\x1a\x13\x0b\x8c>\xf8\xdc\x93\x0b\xeda\
-\x0e\xa3U\x90\xe8\x18\xa7pv\x19\x12\r??\xc9\xf4\xc1\xed \x15\xe6z\x1f=\xeb2\
-\xf8\xed!\n\xe7n\xa1\xe6\x81F\x8a\xc7m\xcc5yTi\x0b\xd9\xf3\x19\xbc\xec\x14N\
-\xe8q\xec\xf7\\B+,f:\xfb\x99\xde\xd7A\xb0\xa1\x01\x7fj\n\x11\x02\xca\xb7\x92\
-\xd97\x82\xf3\xe8\x08%\xf5;\xd8\xfb\\\xf4&\x1d\xe3\x1a\r\xfbX\x19/]$\xb1rt\
-\xd6\x83\xd0@\x14\xc8\xfc\xbd\xc0\xed\x17\xb8\x835h\r\r$\xff\xba\x84\x97\xd9\
-H\xa1+Gyb\x18\'\xf0\x08\xc5\x836\xe1\x15\x01f\x0e\xf40\xbd\xaf\x83\xd05)\xfc\
-B\x1a!\xfd\xabj\x96\x0e\xd8\x18\xcb|\x12\xd7\x8f\x93?\xd5\x8e@\xe2\xe7\xc7\
-\xc8\xbc\xb6\x81\xaa\xa7\x0b\xf3\x8a\xcf\x1d\xcf2\xb9\xeb\xcb\xc4o\x18\xa2\
-\xd0\xd54\xbb\xcd\x9b\x1ff\xe2\x07wQ\xee.\xcf\xe58\xd4\x17 \xb6\xfea\x06\x9f\
-\x9f\xe1\xcc\x1f\xedF\x15]\xac\x86\xbb\xb0\x96n&\xf3\xed!\x8a\xbf\xfc\xdd\
-\x85\x1b\x00\x8b\x10\xfd\x95u\x9b\x17\xda\xc3\x1c\xd5\xf53\xdc\xcb~.\xa5\xaa\
-q\x8a\x92\xda\xc1A\xb8\xdf"?\t\xd9a\x87\xeeo\xd9dr)\xae\xfb\xfdz\x8c\x95e\
-\xde\xdc\xd5\xcc\r\xb1~\xa2O\xb4s\xfco\xcf3\xfc\xec~\xda\xee\\\x82\\\x1b\xa4\
-t:\xcf\xb972\x14[\xdb\xa9\xdb\x1a\xa7\xab\xd7!\x91\xca\x12~\xac\x8dc\x7f\xe7\
-3\xf6\xbdN\xda\xee\xa8G\xdd\x15E\xb7@7\\\x92_\x8bpxO+\xb7\xcb=\\J%Aj\xb43\
-\xc8\x1b\x91\xfb\x98H&!\tRS|\xa5\xef0\xfa\x03\xad\x1c\xff~\x1f\x85\x1f\x1c\
-\xa6qc-\xfef\x93\x81\x0f4sMm$\xeb,Z\xdd>\xb2S\xc6U5\xdf\x8e\xaeE`s\xafx\x95\
-\x9e\x9aj\x944h\x15i~\x99\\\xc7\xba\xde\xde\xf9\xc57\xe0rn\xf9\n\xeeQG\xe8K\
-\xc6\x10Rr\xad\xeag\xefu\x1b\x99\x88\x87\xe7r\x1c\x9b\x11\xechv\x99\xbc}##\
-\xa7\x87 \xa4\xb3\xfe\xe1\xadL\xe7\xaax\xc5\x89c\xaf\xab\xfc{|\x14\xfd\x9c_X\
-h\x0fs4\xfa\xd3\xd8v/\xe3N\x89\x891\x9d\xfeo\xa6A\xd3\xb1\x1d\x03%4\x10\x92e\
-\xab\\:~;\xcf\xd1\x13m\xbc\xd5\x13bT\x0f\xf3\xc4\x83\xa3,\xddnp\xfc\xe79\xce\
->\x7f\x11%5|a\x10NHV\xdd#1kFxm\xd7*\x1ak}\x1e\xde1F\xdd\x974\xce\x1d\xccs\
-\xf6;\xbdsm\xab\x9b$\xf7\xfd\x85\xc1\xb8\x16\xc4.]`\xbc\x1c\xc6\x8aJ\x1c{\
-\x94\x8b\xe5\x1c#\xfe\x07\x07k>\xb8\x9d\t\x1e\xdd\x91#\xbcFr\xec\xc08\x87\
-\xdf\xc9\xa0\xa4F\xb4\xd6`\xc9u\x92\xa1\x92$\x18\xc9c\x17/\xf2\xce\xf15\xfc\
-\xd6\xd6+k\x0e\xe9M8\x8eO\xa9\xd0\xcd\xb0]M0\xe6P\xb6\xc79_\xca3}b~\xf1\xbd\
-\xbek\x15RN\xe3\x94\xce3\xe9\x14\xb0\xaa\x0c\xca\xf6\x05.\x96\xafe\xc4\xff\
-\xc8a\xe5\x184\x9d\x9d\xa1nk\x13\xa7\xcf\x0c\x12J\x984l\x8e\xd0\xf9\xee$\'r\
-\xc1\x05\xea\xf9\xc5\x8b>0\xb0x\x0e\n\xf3\xd9<\xa5|7\xed7\t\xca\x9d!l\xc7\
-\xc0\x17:\x91\x84\xa4\xb6\xd9\xa1e\xa5M\xf3\xca\x12\x07:\xdbx\xf1\x95&\x8a\
-\xa54\xe9A\x85\xf4\x82\xdc\xbf\xfd\x18\xd5\xad\x06\x17\x8e\x06)\xe64\xac\xa8\
-\xe0\xc6/g\tW\xc3w\xfe\xed\x1eNve1t\re\xeb<\xf8x\x17\xd7\xdc\xa2qr\x7f\x84\
-\xa9q\x8bX\xbdb\xcd\x97\xb2\xf4\xf4\xa68|l\x05_Y\xdf\xcd\xb2\xb5\x11\xaaj}\
-\xd2\x03\x16\xa7\xce\xcc`;\xa59\x9f\xe9\xb4\xa2:\x02\xdb\x9f:\xcf\xa5\x93\
-\x01N\xbf\x13B3\x05\x1b\xb6gi\xbe&\xcf\xa1=I\xa2I\x8f\x8b\x17\xaa\xd8\xf5\
-\xdaf\xb2\x93W\xd1<\x9a#V\x95\xa5X\xe8\xa1e\xf5$\rmE\xba/Fy\xefT\x1e\x01\xf3\
-\x8e\xaf6\x95\xc1.\x1c\xa3y\x83N\xac\xceg\xa0\x7f\x9cS\xa7\'\xb1\x9d\xecey>x\
-\xd8\xe5\xc1m\x0ey\xa7DS{\x02!\xc7yco\x89\x81\x01\xf99\xf7\xf8\xe2Gl\xde\xfc\
-\xfa\xa2\x99S\x85\x80\x1d[\xbb\xb8}C\x0f\xa9d\x11!g\xade\xb3&\x99\x19\x8b\
-\xd1\xc9\x08\xbf\xf8\xf5\n.^\xaa\xa6\xec\xca\xcb\xde[\xd9>\xcd\x96UC\xb44\
-\xce\xa0<\x85\x8fFWO\x82\xc3\xa7\xeb\xe8\xe9\x8f\xcc\xb5\x95R\xb1\xfa\xdaI\
-\xb6\xae\x1f$\x15/P.K\x94\xd4y\xef\xfdj\xf6v6\x92\xcb\x1b\xdc}\xfb\x10\x9b;&\
-)\xfb\x1a\xaf\xbe\xd5\xc8\xf1\xb3U\x1f\xf3\x1a\xb0<n\xdd8\xcaM\xab\x87\x90\
-\xbe\x8b\xd4`$\x13\xe1\xc2\xa5*\xb6\xac\x1a\x02\x04\xaf\xbe\xb5\x9c\xe3g\xab\
-\xaf\xaa\x99\xcd\x19\x08\x01w\xdf>\xc2\xa6\x8e\t\\_^\xa6;\xdf\xf8f\xbf\xd1\
-\xcb\x96\x8e!\xca\xbe\xc6+o\xb5q\xfc\xec\xe5\xf7\x19\x0c\x1d\xfe\xea\xeb9\
-\xca\xfdC\xbc\xfe\xdd^\xbe\xf6\x0f\x1d\xf4\x8cE\xf9\xe6\xb3\x11*W\xe7>\x8eX\
-\xb2\xe4{\x8b.-B@(\xf8\xa1-\xd7\x05\xdb\xa9l;~\x1alZW\xe6\xfb\xcfN\xf1\xdc\
-\x9f\x0f\xe0z\x82?\xfd\xc7%<\xf5\xf58o\x1f\xfc|\xae\x12\xfc_C\x1f\x1c\x1c\\h\
-\x0f\x15>Gn\xd89\xc1\xd4P\x86SG\xf3<\xf6L\x80\xae36\xaf\xef^\xc2L\xb6\xb2\
-\xbc\xfa$*Y\xf9\x82\x11\x0e\xdaD\xa3y\x1e\xf8C\xd8z\xb7\xcd\x0b/\x85*\xc5q\
-\x05\xf4\x856P\xe1\xf3\xe5\xf9\x7fm$h\xd6Q\x1d\xf3y\xf6;\x92\x97\x7f\xfa\xd9\
-\xdc\x8e\xfc\xff\x82\x80o,\xba\x7f\x90\n\x15\x16\x0b\x95\xb9\xb5B\x85+P)\x90\
-\n\x15\xae\xc0\x7f\x01\xf2\x91\x96s\xa0O\xc2"\x00\x00\x00\x00IEND\xaeB`\x82'\
-
-
-def getDocFactory033Bitmap():
- return wxBitmapFromImage(getDocFactory033Image())
-
-def getDocFactory033Image():
- stream = cStringIO.StringIO(getDocFactory033Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory033')
-catalog['DocFactory033'] = ImageClass()
-catalog['DocFactory033'].getData = getDocFactory033Data
-catalog['DocFactory033'].getImage = getDocFactory033Image
-catalog['DocFactory033'].getBitmap = getDocFactory033Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory034Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rW\
-IDATx\x9c\xed\x9byl]U~\xc7?\xe7\xdc\xed\xad~\x8b\x9f\xd7\xc4vb;@\xc0I\xc8\
-\x1e\xd6\xcc\x04fh\xc2R\xb6\x94\xa5\x85\xaaj5\xaa\njE\xdb?\xe6\xcfQ5\xaaTuA\
-\x1d\x8d\x80Y\x8a\xaaV\x94)\x9d\xcc\x0c\x0c\x83&\x81\x99\x90@&\xe3l\x84\xac\
-\x0eIl\xc7\xcb\xf3n?\xfb\xad\xf7\xbe{\xef\xe9\x1f\xa6\x80\x0b$n\x05\xd8\xd3\
-\xbe\xcf\x9fW\xe7\xde\xef\xf7w~\xe7\xa7s\xee9:\xe2o\xbe\xa5\x14\x15*T\xf8D\
-\xf4P\xf5B[\xa8Pa\xf1\xa2\x07+\x05R\xa1\xc2\xa7\xa2\x87\x13\x0bma\x16\x81\
-\xc2\xc0F\xe2\xcdy\xeeb\xe0b~q\x1e\x84\x8d\xf6\xdf<(\xa0\xac\x02xh\x9f\x8b\
-\xae\xc4\xc7\x14%|$ee\xa1\x10\x9f\x8bN\x85\xff9z(\xbe\xd0\x16@\xe0\xd3P\xd8G\
-\xd4\xbd\x84\xff\x91\xb1)%HS\'\xef\xc6\xc9\x05\xdb\x99\xd1\x97\xe1\x12\xf8\
-\x9c<x4\xd9oP\xe5\xf5\xcc\xf1\x00\xa0[\n[\xab\xa1[\xdbA\x99\xd0g\xaa\xab\xe1\
-\xb0\xdc\xfd\x19\x81\xf2\x08\x9a!\x18\x93\xabH\xcb\x1b?S\x8d\n\xff{\xf4\xf0"\
-(\x10\x8bQ\x9a\xf4g8\xffj-\xd3\x83\x11@\x80\x94H]\x11\xae)\x12\xa9/\xd2\xb6z\
-\x12\xc7ZF_\xf0/q\xa8\xfb\xcc=\x04\x19\xa6\xa9\xf8"g\x7f\x12g:\x1d\x00!@H\
-\x00b\x8d6\xab\xee\x7f\x8b\xa2Q\xcf\x047\x7f\xa6\xba!\x86i\xb0\x7f\xc4\xa9\
-\x1f\xa5\x88--\xd1\xb2\xe1\x18\x85\xe0\xb5\x94Y\x04\x89\xa9\x80\x1eY\x04y\
-\x08)AB[\x87\xf0\x8bHM\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9e\x95\xe4G\x9bY}\
-\x97\xc44~M\x7f\xf8\x9e9\xcb\x10\xe1{\x08\xb7\x8c\xf0=\x94\xd4P\xba\x81\x92\
-\x9f\xbc\x1c\x12\xae\x83t\xcb\x00s\xda\x86\x94NX\\\x8dr\x0bH\x8d\x0f<\x80 \
-\xb5\xdc$\x14\xea\xc0\x0c6\x11\x91\x1f\xff\x8e\xaf\x9b(MG:E\x10\x12\xdf\xb0f\
-\x0b\xec\n\x9a\x02E\xdc/\x12\xce\xafDR"\x9b\x8eqM\xd4\xa2.4NF~\x98\x98y\xc5\
-\xa7\xd4\x87\xfaf`V\xd3+\xe3\xeb\xd6\xacV\xd9\x9emf\x06>\xfe\x0e\xe0\x9b\xc1\
-9\x9e+\xcc\xa2W\x99\x03\x0b\xed\x01K9`l\xc2\xd0\xdf"\x96r\xb9\xfe\xf7nB\x0b\
-\x05A\xf9\x94\xf36\x03\xc7z\x189\x9d\xe6\xd2\xe1\x14\xd7\xdc\x11\xc51.P\x10A\
-\x84\xf203\xdd\x98\x99n\xbcB\t\x81\x9a\x9d|\x02\x01\xec\xd4J\x9c\xaafx\xbf\
-\x90\x84_\xc6\x9a\xe9\xc1\x98\xbc\x88\xb2\x1d@\xcdN\x10F\x80b\xed\xf5h\xe1jd\
-\xe0&,k/Z\xca\xe5\xfa\xc7\xb6bD\x82\x00\xd8e\xc5\xa4\x11A\x06$1\xbf\x07s\xea\
-\x02\xd6L7\xcavQJ\x81\x19\xc4\x0bVc\x16\xd3(\x05N\xbc\x95R\xaa\xe3\x8a\x9aa\
-\xa1S\xed\xcd\x90\x9bZ\x05n\'B\x83Ra-\xcb\xacQ\x86\x0c(Ic~\xf1)\x9f@\xfa\x08\
-F.\x8d4$n\xb8\x01\xad0\x86o\x97\x11\xa6\x85\xa3\xd7"\xb3\xe3\x08)\xb0\x97\
-\xae\xc1\x8b\xd6\x02`\xa4\xcf`L\r\x80P\x94\xe3\xcd\x94\x1bW.@\xf6\x177z\x84\
-\xb3\x0b\xed\x01C\xe8\x08\xb3\n]\xe6\xd0\x83\x02#\x96"c\x15\xf0\x00+\x14\xa6\
-\xed\xb6\x8dx\xb9\xdd\xe4\x86\xbb)d\xae"a\x8d\xa0\x9b3D\xb2\xe7\xd1\xcb\x19\
-\x86\xceL2~"\x8b\xe7\xfa\xe8A\x9d\xc6-\t\x1abC\x14\x8bK(\x04\x97"\x95G$w\x0e\
-\x95\x9d\xa6\xff\xadar\x836B\x033bP}]\x94\xda\xd0\x08vh3\xc2H\xa1\xcb<z\x10\
-\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18%\xa2\x86\x88\xe6\xba\xa04\xcd\xf0\xb1q2\
-\xddy\x00\x1a\xb7$\x897\x87\x18=9\x8d\x1e\xd6\xa9Y\x97!\xe7;\x84r\xdd\x9f\
-\xaaY\x17\x9e\xc0\xac\xda\xc6\xf0\xa1s\x0c\x1e8\x84\xf2=\x94\x14\x9c\xdb\xf5\
-sV>t\x1f\t\xad\x1f\x9c\x13\xf3\x8aOW%b\x81\xd3t\xff"M\xa8\xd6"y\xed0\x13]Y\
-\xc6O\xcd\xb0\xe2\xfe$!\xef\xc7\xf4\xfd*L\xbc\xdd!Q\xf5&vd\'\xd2\xcb\x12p_$}\
-<\x88Y\xe5\x11\xef\x108\xea\x0fP\xc2X\xd8\xc1\xb0\xc8\xd0\xc3\x1cXh\x0fh$\
-\x11\xdc\x8e\xce$B\x08\x84\na\xf2+<&Q\x9a\xc4\xf3na\xc9\xfa\x0ezv\xff3\xf6\
-\xd8\x10\xb1T\x8cDy\x04Qh\xe0\xfc\x0f\x0fS\x18\x1b%\x10\x8f!M\x13\'?\xc5\xf0\
-\xfe4\xc5t\x1b-_]\x8da\x9eAw\x92hv\x0b]?\xf9!\xc5\xb1Q\xcch\x04#\x1c\x06\xe1\
-\x90\xefqi\\\xbb\r\xcd\x1f@\xd0\x82\xce\x04\x9e]\xc4\x9e\x98\xc6\x08Z\x98BC\
-\x0b\xc4(\xe9\x87\xc0\xcb\x11p\xdb8\xf7\xf2K\xe4\x87\x87\t$\xe2H\xcbb\xfc\
-\xc8%F\x0f\xda\xf8n\x99P}=\xc1-\xb7\xa3\xdb\x19\xe4\xe54\xd7\xdd\x8eR\x10\
-\xac\x8aPU+\xc9\x8f\xf4!\xa4$\x1c_\x86\x1e\x88a\xa84\xfe\xbc\xe2;\x8d\x92\
-\x1e\xa6\xb1\x1e\x7f\xba\x8b\xd1\x8bcL\xbd\x1b"X\x9dd\xe9\xc6V\xaajV\x82\x13\
-\xc6\xf0O\x92\x7fOc\xe9\x9a\x16\n\xde\x11d\xc9G\xd7:(\x8f\x9e$^SG\xbc\xaa\
-\x81<\x87\xa8\x9c\x1a\xcfE\x0f\xb1o\xa1= X\x86\xe0nt1\x8e\x90 D\x90\x00\xef\
-\xa0\xe8\x05@j6\xc1\xea\xfb\x08XC\xd8\xe3G\xd1X\x8b!:\xe8;\xf0<\xe5\xb1\xa3,\
-\xbdy\'u7\xee\x00U\xc6-\x16\x19\xd8\xf3O\x14z\xf7RH\xaf&\xd2\xbe\x04\xfc\x1a\
-\x06\xf6\xff\x07\xee\xc4\xbb\xb4\xdc\xf6\x08\x89\x8eM\xc8\x80\x8f\xa6\xc5\
-\xf1\x9c"J\x9f\xc4\xd4;\x11\xee6t1\x86\x9b\xbd\xc0\xc5\x7f{\niJ\x84&i\xdc\
-\xfa$\xd1\x15+P^\x96\xcc\xb9.\x9c\xd1c,\xbd\xe5\x01\xean\xdc\x81\xd0}|\x1b\
-\x06\xdfx\x9e\xe9\xf3\x071t\ra\xd6\xa3\xbbQ\x06\xf6\xbfxYMe\xed!v\xf5\x1d\
-\xc4\xda\x9e\xe4\xc2\x0bO!t\x8f\xf6{\x9f@X\x93H\xad\x8e\xbe\x03?\xbdr|m\xf5(\
-k7\xc2\xdc\x86.\xa70\xe5\x10-\xdb\xff\x84X\xfb\x1a|\xd1\x8b\n\xbc\x03\xb9\
-\x15\xd4o0\xe9{\xed\xdf)M\x7f\x95`\xb0\x88\xf2\x92L\xf5t\xa13Dj\xd5C\x10\xea\
-\'(^\x87J\x89\xccA\x0f\x8c.\x82\x1f3]\xc3\x0bD\xd0l\x89\x94\x02\xfc\x08\xd6\
-\xa4\x06\xee\xac7e\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\xed#\x14l\xa4n\xd3\
-\xc3h\xe5\xddH\xef0\xd2|\x80\xba\xf5\x0f2\xd0}\x86RO\x0f\xb1\xe5\x8f\xe2y\
-\x02\xbb\xfb"\xa1@\x1d5\xeb\x1e@\xba?F\x16\x0e\x80L\xa0\t\x1d\x9c)(%\xf1L\
-\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9V2\x9d\xdf!\x14\xa8\
-\xa7n\xe3Nt\xe7g\x88\xd2\t|\xebqjV\xdfC\xf1\xccatGG\xa8\x04x\x81+k\xe6f@\xcf\
-\xe0Y\xdf\xc0T\x11\xa4\x12hz\x15\x9a\xfd\x12\x9e\xf1\xf8\xbc\xe2\xabj\xd9\
-\x89V\xd8\x8fg\xc5\xd0l\x8dPx)\xb1\xd6m\xe8\xcew\xc19\x01Y\x0f\xa5\x97\xa8Z\
-\xb1\x9d\x80\xf5:\x93\x9dGh\xda\xf9\xc7x~\x9e\xec\xf1\x17H4\xad\xc5L.G\xe6\
-\xf7@\x16\xa8\x9c\xc1\xccAg\xef\xf2\x85\xf6\x00\xb1Z\xd8<\x82\x18\x0e\x82\
-\x04\xec\x118T\x0b\xd3\n\x0c\x0b\xb5i\x13\xa5\xbewPgCX\xed\xad\xc8\xe9\t<\
-\x91\xc2;/\xd0c\x8dP\x08 \x8f\x0cB!\x88\xd6\x98\xc6j\xb8\x05m\xb8\x11\xc6b\
-\xa8B\x02U,\xe2\xbe\x07F\xa2\x1e\x7f\xc6@?6\x01\x85\x8fn\x15WC\xac\x066\xa4\
-\x11\xc3\x01,\xa7\x9d\xd6\x9d\x7f\x86\x16\x8d\x80\xef\xe3\x8f\x0f"O\\\xc0i^\
-\x82s\xba\x84\x91lD\x94\x13\x88C\xd3\x90\x0b"[\x060\xeao@\x1b\xaaGxI\xf0\x12\
-\xa8\x9c\xba\xb2\xe6\x7f\xe9n\x1cD\x0e\x07\x10R@)\r]I\xfc\xe5r^\xf1\x91O\xc0\
-\x89&\xd8\x14\x87\xe1\xd8\xec\x12\xd5OAg\x042\xcd\x00\x88@\x19yc\x94H\xfcF\
-\xb2\xfb\xdf\xc1\xbe\xa1\x80\x9dNS>\xe9R\x7f\xcb\xdd0\x9c\x87C\x01\xf0\x17\
-\xc1XXd\xe8\x83\xcf<\xbe\xd0\x1e0Z\x05\x89\x8eq\ng\x97!\xd1\xf0\xf3\x93L\x1f\
-\xdc\x0eRa\xae\xf7\xd1\xb3.\x83\xdf\x1e\xa2p\xee&j\xeek\xa4x\xdc\xc6\\\x93G\
-\x95\xb6\x90=\x9f\xc1\xcbN\xe1\x84\x1e\xc5~\xd7%\xb4\xc2b\xa6\xb3\x9f\xe9}\
-\x1d\x04\x1b\x1a\xf0\xa7\xa6\x10!\xa0|3\x99}#8\x0f\x8fPR\xbf\x83\xbd\xcfEo\
-\xd21\xae\xd2\xb0\x8f\x95\xf1\xd2E\x12+Gg=\x08\rD\x81\xcc\xdf\x0b\xdc~\x81;X\
-\x83\xd6\xd0@\xf2\xafKx\x99\x8d\x14\xbar\x94\'\x86q\x02\x0fQ<h\x13^\x11`\xe6\
-@\x0f\xd3\xfb:\x08]\x95\xc2/\xa4\x11\xd2\xbf\xa2f\xe9\x80\x8d\xb1\xcc\'q\xed\
-8\xf9S\xed\x08$~~\x8c\xcc\xab\x1b\xa8z\xb20\xaf\xf8\xdc\xf1,\x93\xbb\xbeL\
-\xfc\xba!\n]M\xb3\xdb\xbc\xf9a&~p\x07\xe5\xee\xf2\x07}\x1c\xea\x0b\x10[\xff \
-\x83\xcf\xcep\xe6\x8fv\xa3\x8a.V\xc3\x1dXK7\x93\xf9\xf6\x10\xc5_\xfe\xee\xc2\
-\r\x80E\x8c\xfe\xf2\xba\xcd\x0b\xed\x81\xea\xfa\x19\xeef?\x97R\xd58EI\xed\
-\xe0 \xdck\x91\x9f\x84\xec\xb0C\xf7\xb7l2\xb9\x14\xd7\xfc~=\xc6\xca2o\xecj\
-\xe6\xbaX?\xd1\xc7\xda9\xfe\xb7\xe7\x19~z?m\xb7/A\xae\rR:\x9d\xe7\xdc\xeb\
-\x19\x8a\xad\xed\xd4m\x8d\xd3\xd5\xeb\x90He\t?\xd2\xc6\xb1\xbf\xf3\x19\xfb^\
-\'m\xb7\xd5\xa3\xee\x88\xa2[\xa0\x1b.\xc9\xafE8\xbc\xa7\x95[\xe5\x1e.\xa5\
-\x92 5\xda\x19\xe4\xf5\xc8=L$\x93\x90\x04\xa9)\xbe\xd2w\x18\xfd\xbeV\x8e\x7f\
-\xbf\x8f\xc2\x0f\x0e\xd3\xb8\xb1\x16\x7f\xb3\xc9\xc0\xfb\x9a\xb9\xa66\x92u\
-\x16\xadn\x1f\xd9)\xe3\x8a\x9aoE\xd7"\xb0\xb9[\xbcBOM5J\x1a\xb4\x8a4\xbfL\
-\xaec]o\xef\xfc\xe2\x1bp9\xb7|\x05w\xa9#\xf4%c\x08)\xb9Z\xf5\xb3\xf7\x9a\x8d\
-L\xc4\xc3\x1f\xf4qlF\xb0\xa3\xd9e\xf2\xd6\x8d\x8c\x9c\x1e\x82\x90\xce\xfa\
-\x07\xb72\x9d\xab\xe2e\'\x8e\xbd\xae\xf2\xef\xf1I\xe8\xe7\xfc\xc2B{\xa0\xd1\
-\x9f\xc6\xb6{\x19wJL\x8c\xe9\xf4\x7f3\r\x9a\x8e\xed\x18(\xa1\x81\x90,[\xe5\
-\xd2\xf1\xdby\x8e\x9eh\xe3\xcd\x9e\x10\xa3z\x98\xc7\xee\x1fe\xe9v\x83\xe3?\
-\xcfq\xf6\xd9\x8b(\xa9\xe1\x0b\x83pB\xb2\xea.\x89Y3\xc2\xab\xbbV\xd1X\xeb\
-\xf3\xe0\x8e1\xea\xbe\xa4q\xee`\x9e\xb3\xcf\xf5~\xd0\xb6\xbaIr\xcf_\x18\x8ck\
-A\xec\xd2\x05\xc6\xcba\xac\xa8\xc4\xb1G\xb9X\xce1\xe2\xbf\x7f\xb0\xe6\x83\
-\xdb\x99\xe0\xe1\x1d9\xc2k$\xc7\x0e\x8cs\xf8\xed\x0cJjDk\r\x96\\#\x19*I\x82\
-\x91<v\xf1"o\x1f_\xc3om\xbd\xbc\xe6\x90\xde\x84\xe3\xf8\x94\n\xdd\x0c\xdb\
-\xd5\x04c\x0ee{\x9c\xf3\xa5<\xd3\'\xe6\x17\xdfk\xbbV!\xe54N\xe9<\x93N\x01\
-\xab\xca\xa0l_\xe0b\xf9jF\xfc\x8f\x1cV\x8eA\xd3\xd9\x19\xea\xb66q\xfa\xcc \
-\xa1\x84I\xc3\xe6\x08\x9d\xefLr"\x17\\\xa0\xcc/~\xf4\x81\x81\x85?(\xccg\xf3\
-\x94\xf2\xdd\xb4\xdf (w\x86\xb0\x1d\x03_\xe8D\x12\x92\xdaf\x87\x96\x956\xcd+\
-K\x1c\xe8l\xe3\x85\x97\x9b(\x96\xd2\xa4\x07\x15\xd2\x0br\xef\xf6cT\xb7\x1a\\\
-8\x1a\xa4\x98\xd3\xb0\xa2\x82\xeb\xbf\x9c%\\\r\xcf\xfd\xeb]\x9c\xec\xcab\xe8\
-\x1a\xca\xd6\xb9\xff\xd1.\xae\xbaI\xe3\xe4\xfe\x08S\xe3\x16\xb1z\xc5\x9a/e\
-\xe9\xe9Mq\xf8\xd8\n\xbe\xb2\xbe\x9bek#T\xd5\xfa\xa4\x07,N\x9d\x99\xc1vJ\x1f\
-\xf8L\xa7\x15\xd5\x11\xd8\xfe\xc4y.\x9d\x0cp\xfa\xed\x10\x9a)\xd8\xb0=K\xf3U\
-y\x0e\xedI\x12Mz\\\xbcP\xc5\xaeW7\x93\x9d\xbc\x82\xe6\xd1\x1c\xb1\xaa,\xc5B\
-\x0f-\xab\'ih+\xd2}1\xca\xbb\xa7\xf2\x08\x98w|\xb5\xa9\x0cv\xe1\x18\xcd\x1bt\
-bu>\x03\xfd\xe3\x9c:=\x89\xedd\xe7\xf4\xf3\xc1\xc3.\xf7os\xc8;%\x9a\xda\x13\
-\x089\xce\xeb{K\x0c\x0c\xc8/8\xe3\xbf9\x88\xcd\x9b_[\xf0\xb9U\x08\xd8\xb1\
-\xb5\x8b[7\xf4\x90J\x16\x11r\xd6R6k\x92\x99\xb1\x18\x9d\x8c\xf0\x8b_\xaf\xe0\
-\xe2\xa5j\xca\xae\x9c\xf3\xde\xca\xf6i\xb6\xac\x1a\xa2\xa5q\x06\xe5)|4\xbaz\
-\x12\x1c>]GO\x7f\xe4\x83\xb6R*V_=\xc9\xd6\xf5\x83\xa4\xe2\x05\xcae\x89\x92:\
-\xef\xbeW\xcd\xde\xceFry\x83;o\x1dbs\xc7$e_\xe3\x957\x1b9~\xb6\xeac^\x03\x96\
-\xc7\xcd\x1bG\xb9a\xf5\x10\xd2w\x91\x1a\x8cd"\\\xb8T\xc5\x96UC\x80\xe0\x957\
-\x97s\xfcl\xf5\x155\xb39\x03!\xe0\xce[G\xd8\xd41\x81\xeb\xcb9\xba\xf3\x8do\
-\xf6\x1b\xbdl\xe9\x18\xa2\xeck\xbc\xfcf\x1b\xc7\xcf\xce\xbd\xc7`\xe8\xf0W_\
-\xcfQ\xee\x1f\xe2\xb5\xef\xf6\xf2\xb5\x7f\xe8\xa0g,\xca7\x9f\x8eP\xb92\xf7\
-\xe9\x88%K\xbe\xb7h\xbaG\x08\x08\x05?\xb4\xe3\xba`;\x95m\xc7\xcf\x82M\xeb\
-\xca|\xff\xe9)\x9e\xf9\xf3\x01\\O\xf0\xa7\xff\xb8\x84\'\xbe\x1e\xe7\xad\x83_\
-\xccU\x82\xdfT\xf4\xc1\xc1\xc1\x85\xf6P\xe1\x0b\xe0\xba\x9d\x13L\re8u4\xcf#O\
-\x05\xe8:c\xf3\xda\xee%\xccd+\xcb\xab\xcbQ\xe9\x9d\xff\'\x84\x836\xd1h\x9e\
-\xfb\xfe\x10\xb6\xdei\xf3\xfc\x8b\xa1Jq\xcc\x03}\xa1\rT\xf8bx\xf6_\x1a\t\x9a\
-uT\xc7|\x9e~N\xf2\xd2O?\x9f\xdb\x91\xff\xd7\x10\xf0\x8dE\xf3\x0fR\xa1\xc2b\
-\xa32\xc7V\xa8p\x19*\x05R\xa1\xc2e\xf8O\xd7%\x96s\x80I\xb1\xb6\x00\x00\x00\
-\x00IEND\xaeB`\x82'
-
-def getDocFactory034Bitmap():
- return wxBitmapFromImage(getDocFactory034Image())
-
-def getDocFactory034Image():
- stream = cStringIO.StringIO(getDocFactory034Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory034')
-catalog['DocFactory034'] = ImageClass()
-catalog['DocFactory034'].getData = getDocFactory034Data
-catalog['DocFactory034'].getImage = getDocFactory034Image
-catalog['DocFactory034'].getBitmap = getDocFactory034Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory035Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rR\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\x8c\
-\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xaaZEUA\xadh\xfbG\xfe\
-\x8c\xaa\xa8R\xd5\x055\x8a\x80&)\xaaZQR\x1a\'\x81\x10\x14\x1b\x12c\x83\xe3\
-\x8c7\x8c\xd71\xb6g\xc6\xb3\xbc\xd9g\xde\xcc[\xef}\xf7\xde\xd3?\x86\x1a\\\
-\x88=m\x81\x07\xd1\xfb\xfc\xf9t\xef\xfb|\x7f\xe7\xdc\xa3s\xee=:\xe2o\xbe\xa5\
-\x14U\xaaT\xf9X\xf4Pm\xa5#T\xa9\xf2\xf9E\x0fV\x07H\x95*\xbf\x16=\x9c\xa8l\
-\x00\x81\xc2\xc0F\xe2]\xf2\xbb\x8b\x81\x8b\xf9\xd9e\x106\xda\xff\xc8\xa0\x80\
-\xb2\n\xe0\xa1}*^\x89\x8f)J\xf8H\xca\xcaB!>\x15O\x95\xff;z(^9\xb9\xc0\xa7\
-\xa9\xb0\x87\xa8{\x01\xffC\xcf\xa6\x94 M\x9d\xbc\x1b\'\x17\xecdN_\x82K\xe0S\
-\xca\xe0\xd1b\xbfA\x8d\xd7wI\x06\x00\xddR\xd8Z\x1d\xbd\xda6\xca\x84>Q\xaf\
-\x86\xc3R\xf7\xa7\x04\xcach\x86`B\xae -o\xfcD\x1dU\xfe\xff\xe8\xe1\n\x0e\x10\
-\x8bqZ\xf4g8\xfbj=\xb3\xc3\x11@\x80\x94H]\x11\xae+\x12i,\xd2\xb1r\x1a\xc7Z\
-\xc2@\xf0/qh\xf8\xc43\x04\x19\xa5\xa5\xf8"\xa7\x7f\x1cg6\x1d\x00!@H\x00b\xcd\
-6+\xee\x7f\x8b\xa2\xd1\xc8\x147\x7f\xa2\xde\x10\xa34\xd9?\xe4\xc4\x0fS\xc4\
-\x16\x97h[w\x84B\xf0Z\xcaT\xb0C\xaa|\x04=R\xc1\xfe\x08)AB[\x83\xf0\x8bHM\x11\
-\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9f\x96\xe4\xc7[Yy\x97\xc44~\xc5`\xf8\x9eK\
-\x96!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%?~9$\\\x07\xe9\x96\x01.\xb96\xa4t\
-\xc2\xe2j\x94[@j\\\xcc\x00\x82\xd4R\x93P\xa8\x0b3\xd8BD~\xf4\x7f|\xddDi:\xd2\
-)\x82\x90\xf8\x865?\xc0\xae\xe0\x14(\xe2~\x91p~9\x92\x12\xd9t\x8ck\xa2\x16\r\
-\xa1I2\xf2\x83\x0eYP}J}\xe07\x03\xf3N\xaf\x8c\xaf[\xf3\xae\xb2=\x7f\x99\x19\
-\xf8\xe8=\x80o\x06/\xc9\\\xe5R\xf4\x1as\xa8brK9`l\xc0\xd0\xdf"\x96r\xb9\xfe\
-\xf7nB\x0b\x05A\xf9\x94\xf36CG\xfa\x18;\x99\xe6\xc2\xc1\x14\xd7\xdc\x11\xc51\
-\xceQ\x10A\x84\xf203\xbd\x98\x99^\xbcB\t\x81\x9a\x9f|\x02\x01\xec\xd4r\x9c\
-\x9aVx\x7f \t\xbf\x8c5\xd7\x871}\x1ee;\x80\x9a\x9f \x8c\x00\xc5\xfa\xeb\xd1\
-\xc2\xb5\xc8\xc0MX\xd6n\xb4\x94\xcb\xf5\x8fm\xc6\x88\x04\x01\xb0\xcb\x8ai#\
-\x82\x0cHb~\x1f\xe6\xcc9\xac\xb9^\x94\xed\xa2\x94\x023\x88\x17\xac\xc5,\xa6Q\
-\n\x9cx;\xa5T\xd7\x15\x9da\xa1S\xeb\xcd\x91\x9bY\x01n7B\x83Ra5K\xacqF\x0c(Ic\
-a\xf5)\x9f@\xfa\x10F.\x8d4$n\xb8\t\xad0\x81o\x97\x11\xa6\x85\xa3\xd7#\xb3\
-\x93\x08)\xb0\x17\xaf\xc2\x8b\xd6\x03`\xa4Oa\xcc\x0c\x81P\x94\xe3\xad\x94\
-\x9b\x97W\xa0\xf7\xbf\x18\xe8\x11NWLn\x08\x1da\xd6\xa0\xcb\x1czP`\xc4Rd\xac\
-\x02\x1e`\x85\xc2t\xdc\xb6\x1e/\xb7\x93\xdch/\x85\xccU$\xac1ts\x8eH\xf6,z9\
-\xc3\xc8\xa9i&\x8fe\xf1\\\x1f=\xa8\xd3\xbc)ASl\x84bq\x11\x85\xe0b\xa4\xf2\
-\x88\xe4\xce\xa0\xb2\xb3\x0c\xbe5Jn\xd8Fh`F\x0cj\xaf\x8bR\x1f\x1a\xc3\x0emD\
-\x18)t\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\x83.\x0e\xe3D\xd4\x08\xd1\\\x0f\x94f\
-\x19=2I\xa67\x0f@\xf3\xa6$\xf1\xd6\x10\xe3\xc7g\xd1\xc3:uk2\xe4|\x87P\xae\
-\xf7\xd7:\x1b\xc2S\x985[\x18=p\x86\xe1}\x07P\xbe\x87\x92\x823;~\xc6\xf2\x87\
-\xee#\xa1\r\x82slA\xf5\xe9\xaaD,p\x92\xde\x9f\xa7\t\xd5[$\xaf\x1de\xaa\'\xcb\
-\xe4\x899\x96\xdd\x9f$\xe4\xfd\x88\x81_\x86\x89w:$j\xde\xc4\x8elGzY\x02\xee\
-\x8b\xa4\x8f\x061k<\xe2]\x02G\xfd\x01J\x18\x15{\x0e>\xcf\xe8a\xf6UL\xae\x91D\
-p;:\xd3\x08!\x10*\x84\xc9/\xf1\x98Fi\x12\xcf\xbb\x85Ek\xbb\xe8\xdb\xf9/\xd8\
-\x13#\xc4R1\x12\xe51D\xa1\x89\xb3?8Hab\x9c@<\x864M\x9c\xfc\x0c\xa3{\xd3\x14\
-\xd3\x1d\xb4}u%\x86y\n\xddI\xa2\xd9m\xf4\xfc\xf8\x07\x14\'\xc61\xa3\x11\x8cp\
-\x18\x84C\xbe\xcf\xa5y\xf5\x164\x7f\x08A\x1b:Sxv\x11{j\x16#ha\n\r-\x10\xa3\
-\xa4\x1f\x00/G\xc0\xed\xe0\xcc\xcb/\x91\x1f\x1d%\x90\x88#-\x8b\xc9C\x17\x18\
-\xdfo\xe3\xbbeB\x8d\x8d\x047\xdd\x8eng\x90\x97s\xae\xb9\x1d\xa5 X\x13\xa1\
-\xa6^\x92\x1f\x1b@HI8\xbe\x04=\x10\xc3Pi\xfc\x05\xd5w\x12%=Lc-\xfel\x0f\xe3\
-\xe7\'\x98y7D\xb06\xc9\xe2\xf5\xed\xd4\xd4-\x07\'\x8c\xe1\x1f\'\xff\x9e\xc6\
-\xe2Um\x14\xbcC\xc8\x92\x8f\xaeuQ\x1e?N\xbc\xae\x81xM\x13y\x0eP\xdd-\xfex\
-\xf4\x10{*&\x17,Ap7\xba\x98DH\x10"H\x80wP\xf4\x03 5\x9b`\xed}\x04\xac\x11\
-\xec\xc9\xc3h\xac\xc6\x10]\x0c\xec{\x9e\xf2\xc4a\x16\xdf\xbc\x9d\x86\x1b\xb7\
-\x81*\xe3\x16\x8b\x0c\xed\xfag\n\xfd\xbb)\xa4W\x12\xe9\\\x04~\x1dC{\xff\x13w\
-\xea]\xdan{\x84D\xd7\x06d\xc0G\xd3\xe2xN\x11\xa5Oc\xea\xdd\x08w\x0b\xba\x98\
-\xc0\xcd\x9e\xe3\xfc\xbf?\x854%B\x934o~\x92\xe8\xb2e(/K\xe6L\x0f\xce\xf8\x11\
-\x16\xdf\xf2\x00\r7nC\xe8>\xbe\r\xc3o<\xcf\xec\xd9\xfd\x18\xba\x860\x1b\xd1\
-\xdd(C{_\xbc\xacSY\xbb\x88]}\x07\xb1\x8e\'9\xf7\xc2S\x08\xdd\xa3\xf3\xde\'\
-\x10\xd64Rk``\xdfO\xae\\_G#\xca\xda\x890\xb7\xa0\xcb\x19L9B\xdb\xd6?!\xd6\
-\xb9\n_\xf4\xa3\x02\xef@n\x19\x8d\xebL\x06^\xfb\x0fJ\xb3_%\x18,\xa2\xbc$3}=\
-\xe8\x8c\x90Z\xf1\x10\x84\x06\t\x8a\xd7\xa1:D>\x16=0^\xc1\x174]\xc3\x0bD\xd0\
-l\x89\x94\x02\xfc\x08\xd6\xb4\x06\xee|&e\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\
-\x1f \x14l\xa6a\xc3\xc3h\xe5\x9dH\xef \xd2|\x80\x86\xb5\x0f2\xd4{\x8aR_\x1f\
-\xb1\xa5\x8f\xe2y\x02\xbb\xf7<\xa1@\x03uk\x1e@\xba?B\x16\xf6\x81L\xa0\t\x1d\
-\x9c\x19(%\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9v2\
-\xdd\xffD(\xd0H\xc3\xfa\xed\xe8\xceO\x11\xa5c\xf8\xd6\xe3\xd4\xad\xbc\x87\
-\xe2\xa9\x83\xe8\x8e\x8eP\t\xf0\x02Wv\xe6\xe6@\xcf\xe0Y\xdf\xc0T\x11\xa4\x12\
-hz\r\x9a\xfd\x12\x9e\xf1\xf8\x82\xea\xabi\xdb\x8eV\xd8\x8bg\xc5\xd0l\x8dPx1\
-\xb1\xf6-\xe8\xcew\xc09\x06Y\x0f\xa5\x97\xa8Y\xb6\x95\x80\xf5:\xd3\xdd\x87h\
-\xd9\xfe\xc7x~\x9e\xec\xd1\x17H\xb4\xac\xc6L.E\xe6wA\x16\xa8\xee\xc1|,:\xbb\
-\x97V\xce\x1e\xab\x87\x8dc\x88\xd1 H\xc0\x1e\x83\x03\xf50\xab\xc0\xb0P\x1b6P\
-\x1ax\x07u:\x84\xd5\xd9\x8e\x9c\x9d\xc2\x13)\xbc\xb3\x02=\xd6\x0c\x85\x00\
-\xf2\xd00\x14\x82h\xcdi\xac\xa6[\xd0F\x9ba"\x86*$P\xc5"\xee{`$\x1a\xf1\xe7\
-\x0c\xf4#SP\xf8\xf0\xa7\xe2Z\x88\xd5\xc1\xba4b4\x80\xe5t\xd2\xbe\xfd\xcf\xd0\
-\xa2\x11\xf0}\xfc\xc9a\xe4\xb1s8\xad\x8bpN\x960\x92\xcd\x88r\x02q`\x16rAd\
-\xdb\x10F\xe3\rh#\x8d\x08/\t^\x02\x95SWv\xfe\xb7w\xfd0r4\x80\x90\x02Ji\xe8I\
-\xe2/\x95\x0b\xaa\x8f|\x02\x8e\xb5\xc0\x868\x8c\xc6\xe6\x97\xa8~\n\xba#\x90i\
-\x05@\x04\xca\xc8\x1b\xa3D\xe27\x92\xdd\xfb\x0e\xf6\r\x05\xect\x9a\xf2q\x97\
-\xc6[\xee\x86\xd1<\x1c\x08\x80_\xc1g\xe0s\x8e>\xfc\xcc\xe3\x15\x93\x1b\xed\
-\x82D\xd7$\x85\xd3K\x90h\xf8\xf9if\xf7o\x05\xa90\xd7\xfa\xe8Y\x97\xe1o\x8fP8\
-s\x13u\xf75S<jc\xae\xca\xa3J\x9b\xc8\x9e\xcd\xe0egpB\x8fb\xbf\xeb\x12Zf1\xd7\
-=\xc8\xec\x9e.\x82MM\xf833\x88\x10P\xbe\x99\xcc\x9e1\x9c\x87\xc7(\xa9\xdf\
-\xc1\xde\xe3\xa2\xb7\xe8\x18Wi\xd8G\xcax\xe9"\x89\xe5\xe3\xf3\x19\x84\x06\
-\xa2@\xe6\xef\x05\xee\xa0\xc0\x1d\xaeCkj"\xf9\xd7%\xbc\xccz\n=9\xcaS\xa38\
-\x81\x87(\xee\xb7\t/\x0b0\xb7\xaf\x8f\xd9=]\x84\xaeJ\xe1\x17\xd2\x08\xe9_\
-\xd1Y\xdagc,\xf1I\\;I\xfeD\'\x02\x89\x9f\x9f \xf3\xea:j\x9e,,\xa8>w2\xcb\xf4\
-\x8e/\x13\xbfn\x84BO\xcb\xfcg\xde\xfc(S\xdf\xbf\x83ro\xf9b\x1b\x87\x06\x02\
-\xc4\xd6>\xc8\xf0\xb3s\x9c\xfa\xa3\x9d\xa8\xa2\x8b\xd5t\x07\xd6\xe2\x8dd\xbe\
-=B\xf1\x17\xbf[\xb1\xfe\xff"\xa0\xbf\xbcfc\xc5\xe4\xb5\x8ds\xdc\xcd^.\xa4jq\
-\x8a\x92\xfa\xe1a\xb8\xd7"?\r\xd9Q\x87\xdeo\xd9dr)\xae\xf9\xfdF\x8c\xe5e\xde\
-\xd8\xd1\xcau\xb1A\xa2\x8fur\xf4o\xcf2\xfa\xf4^:n_\x84\\\x1d\xa4t2\xcf\x99\
-\xd73\x14\xdb;i\xd8\x1c\xa7\xa7\xdf!\x91\xca\x12~\xa4\x83#\x7f\xe73\xf1\xddn\
-:nkD\xdd\x11E\xb7@7\\\x92_\x8bppW;\xb7\xca]\\H%Ajt2\xcc\xeb\x91{\x98J&!\tRS|\
-e\xe0 \xfa}\xed\x1c\xfd\xde\x00\x85\xef\x1f\xa4y}=\xfeF\x93\xa1\xf7\x9d\xb9\
-\x96\x0e\x92\r\x16\xed\xee\x00\xd9\x19\xe3\x8a\xce\xb7\xa2\xab\x11\xd8\xdc-^\
-\xa1\xaf\xae\x16%\r\xdaE\x9a_$\xd7\xb0\xa6\xbf\x7fa\xf5\r\xb9\x9cY\xba\x8c\
-\xbb\xd4!\x06\x921\x84\x94\\\xad\x06\xd9}\xcdz\xa6\xe2\xe1\x8bm\x1c\x9b\x13l\
-ku\x99\xbeu=c\'G \xa4\xb3\xf6\xc1\xcd\xcc\xe6jx\xd9\x89c\xaf\xa9\xbe{\\\x0e\
-\xfd\x8c_\xa8\x98\xbc\xd9\x9f\xc5\xb6\xfb\x99tJLM\xe8\x0c~3\r\x9a\x8e\xed\
-\x18(\xa1\x81\x90,Y\xe1\xd2\xf5\xdby\x0e\x1f\xeb\xe0\xcd\xbe\x10\xe3z\x98\
-\xc7\xee\x1fg\xf1V\x83\xa3?\xcbq\xfa\xd9\xf3(\xa9\xe1\x0b\x83pB\xb2\xe2.\x89\
-Y7\xc6\xab;V\xd0\\\xef\xf3\xe0\xb6\t\x1a\xbe\xa4qf\x7f\x9e\xd3\xcf\xf5_\xbc\
-\xb6\xb6Er\xcf_\x18LjA\xec\xd29&\xcba\xac\xa8\xc4\xb1\xc79_\xce1\xe6\xbf\xbf\
-\xb1\xe6\x83\xdb\x9d\xe0\xe1m9\xc2\xab$G\xf6Mr\xf0\xed\x0cJjD\xeb\r\x16]#\
-\x19)I\x82\x91<v\xf1<o\x1f]\xc5om\xbe\xbcsDo\xc1q|J\x85^F\xedZ\x821\x87\xb2=\
-\xc9\xd9R\x9e\xd9c\x0b\xab\xef\xb5\x1d+\x90r\x16\xa7t\x96i\xa7\x80UcP\xb6\
-\xcfq\xbe|5c\xfe\x876+\'\xa0\xe5\xf4\x1c\r\x9b[8yj\x98P\xc2\xa4ic\x84\xeew\
-\xa69\x96\x0bV\xa8\xe7\xbf8\xe8CC\x95\xdb(\xccg\xf3\x94\xf2\xbdt\xde (w\x87\
-\xb0\x1d\x03_\xe8D\x12\x92\xfaV\x87\xb6\xe56\xad\xcbK\xec\xeb\xee\xe0\x85\
-\x97[(\x96\xd2\xa4\x87\x15\xd2\x0br\xef\xd6#\xd4\xb6\x1b\x9c;\x1c\xa4\x98\
-\xd3\xb0\xa2\x82\xeb\xbf\x9c%\\\x0b\xcf\xfd\xdb]\x1c\xef\xc9b\xe8\x1a\xca\
-\xd6\xb9\xff\xd1\x1e\xae\xbaI\xe3\xf8\xde\x083\x93\x16\xb1F\xc5\xaa/e\xe9\
-\xebOq\xf0\xc82\xbe\xb2\xb6\x97%\xab#\xd4\xd4\xfb\xa4\x87,N\x9c\x9a\xc3vJ\
-\x17s\xa6\xd3\x8a\xda\x08l}\xe2,\x17\x8e\x078\xf9v\x08\xcd\x14\xac\xdb\x9a\
-\xa5\xf5\xaa<\x07v%\x89&=\xce\x9f\xaba\xc7\xab\x1b\xc9N_\xc1y8G\xac&K\xb1\
-\xd0G\xdb\xcai\x9a:\x8a\xf4\x9e\x8f\xf2\xee\x89<\x02\x16\\_}*\x83]8B\xeb:\
-\x9dX\x83\xcf\xd0\xe0$\'NNc;\xd9K\xday\xffA\x97\xfb\xb78\xe4\x9d\x12-\x9d\t\
-\x84\x9c\xe4\xf5\xdd%\x86\x86\xe4g\xdc\xe3_<\xc4\xc6\x8d\xafUl\x8e\x15\x02\
-\xb6m\xee\xe1\xd6u}\xa4\x92E\x84\x9c\x8f\x92\xcd\x9ad\xe6,\xc6\xa7#\xfc\xfcW\
-\xcb8\x7f\xa1\x96\xb2+/\xb9oy\xe7,\x9bV\x8c\xd0\xd6<\x87\xf2\x14>\x1a=}\t\
-\x0e\x9el\xa0o0r\xf1Z)\x15+\xaf\x9ef\xf3\xdaaR\xf1\x02\xe5\xb2DI\x9dw\xdf\
-\xabeww3\xb9\xbc\xc1\x9d\xb7\x8e\xb0\xb1k\x9a\xb2\xaf\xf1\xca\x9b\xcd\x1c=]\
-\xf3\x91\xac\x01\xcb\xe3\xe6\xf5\xe3\xdc\xb0r\x04\xe9\xbbH\r\xc62\x11\xce]\
-\xa8a\xd3\x8a\x11@\xf0\xca\x9bK9z\xba\xf6\x8a\xcel\xce@\x08\xb8\xf3\xd616tM\
-\xe1\xfa\xf2\x12\xefB\xeb\x9b\xff\x8f~6u\x8dP\xf65^~\xb3\x83\xa3\xa7/=\xbf`\
-\xe8\xf0W_\xcfQ\x1e\x1c\xe1\xb5\xef\xf4\xf3\xb5\x7f\xe8\xa2o"\xca7\x9f\x8eP=\
-*we\xc4\xa2E\xdf\xadx3\t\x01\xa1\xe0\x071\\\x17l\xa7\xfa\xd9\xf1\x93`\xc3\
-\x9a2\xdf{z\x86g\xfe|\x08\xd7\x13\xfc\xe9?.\xe2\x89\xaf\xc7yk\xffgs\x94\xe0\
-\x8b\x8e><<\\\xe9\x0cU>E\xae\xdb>\xc5\xccH\x86\x13\x87\xf3<\xf2T\x80\x9eS6\
-\xaf\xed\\\xc4\\\xb6\xba\xbcZ\x08\xd5V\xfa\r\'\x1c\xb4\x89F\xf3\xdc\xf7\x87\
-\xb0\xf9N\x9b\xe7_\x0cU\x07\xc7\xff\x02\xbd\xd2\x01\xaa|\xba<\xfb\xaf\xcd\
-\x04\xcd\x06jc>O?\'y\xe9\'\x9f\xce\xe9\xc8\xdfT\x04|\xa3\xe2\xef U\xaa|^\xa9\
-\xce\xb5U\xaa\\\x86\xea\x00\xa9R\xe52\xfc\x17\xbb\xb9\x96s\xb1\xdd\x12m\x00\
-\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory035Bitmap():
- return wxBitmapFromImage(getDocFactory035Image())
-
-def getDocFactory035Image():
- stream = cStringIO.StringIO(getDocFactory035Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory035')
-catalog['DocFactory035'] = ImageClass()
-catalog['DocFactory035'].getData = getDocFactory035Data
-catalog['DocFactory035'].getImage = getDocFactory035Image
-catalog['DocFactory035'].getBitmap = getDocFactory035Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory036Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rQ\
-IDATx\x9c\xed\x9bYl]\xc7y\x80\xbf\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x1f\xf2\x18\x14A\x81\
-\xa2\x8b\xd1 \xb0\xb3\xd5(Z\xb8N\xdd(\x89\x1d\xc7\x88d\'\xb2d+\n\xb5Y\xd6JY\
-\x12Iq\xb9\xdc\xc9K\xde\xf5\x9c{\xce\x99>\xd0\x95\xad\xda\x96\xd8V\xa2*\xe3~\
-\x8f\x17s\xce\xf7\xff\xf3\xdf\xc1\xcc\x99\xc1\x88\xbf\xf9\x96RT\xa8P\xe13\
-\xd1C\xd5W;\x84\n\x15\xfe\xff\xa2\x07+\x03\xa4B\x85\xcfE\x0f\'\xae\x8eX\xa00\
-\xb0\x91x\x17\xfc\xeeb\xe0b\xce_\x0c\xc2F\xfbo1(\xa0\xac\x02xhW\xc4+\xf11E\t\
-\x1fIYY(\xc4\x15\xf1T\xf8\xbf\xa3\x87\xe2\xf3/\x15\xf84\x14v\x11u\xcf\xe1\
-\x7f\xe2\xbf)%HS\'\xef\xc6\xc9\x05\xdb\x99\xd1\x17\xe1\x12\xb8B1x4\xd9oS\xe5\
-\xf5\\\x10\x03\x80n)l\xad\x86nm\x0beB\x97\xd5\xab\xe1\xb0\xd8\xfd9\x81\xf2\
-\x08\x9a!\x18\x93\xcbH\xcb[/\xab\xa3\xc2\xe5C\x0f_\x85\x01b1J\x93\xfe\x02\
-\xa7\xdf\xa8ez0\x02\x08\x90\x12\xa9+\xc25E"\xf5E\xda\x96O\xe2X\x8b\xe8\x0b\
-\xfe%\x0eu\x97=\x86 \xc34\x15_\xe1\xe4O\xe3L\xa7\x03 \x04\x08\t@\xac\xd1f\
-\xd9\xc3\xefR4\xea\x99\xe0\xf6\xcb\xea\r1L\x83\xfdc\x8e\xfd8Ela\x89\x965\x87\
-(\x04o\xa4\xccU(D\x85K\xa2G\xaeB]BJ\x90\xd0V!\xfc"RS\x04\xe3\x02# P\x08J\xf9\
- \xa3\'%\xf9\xd1f\x96\xdf\'1\x8d\xdf\xd0\x1f~\xe0\x82e\x88\xf0=\x84[F\xf8\
-\x1eJj(\xdd@\xc9\xcf^\x0e\t\xd7A\xbae\x80\x0b\xda\x86\x94NX\\\x8fr\x0bH\x8d\
-\xf31\x80 \xb5\xd8$\x14\xea\xc0\x0c6\x11\x91\x9f~\x8f\xaf\x9b(MG:E\x10\x12\
-\xdf\xb0f\x07\xd8%\x9c\x02E\xdc/\x12\xce/ER"\x9b\x8eqC\xd4\xa2.4NF~\\\x889\
-\xe5\xa7\xd4\xc7~30\xeb\xf4\xca\xf8\xba5\xeb*\xdb\xb3\xcd\xcc\xc0\xa7\x9f\
-\x01|3xA\xcc\x15>\x1b\xbd\xca\x1c\x98w\xa9\xa5\x1c0\xd6a\xe8\xef\x12K\xb9\
-\xdc\xfc{\xb7\xa1\x85\x82\xa0|\xcay\x9b\x81C=\x8c\x1cOsn\x7f\x8a\x1b\xee\x89\
-\xe2\x18g(\x88 By\x98\x99n\xccL7^\xa1\x84@\xcdN>\x81\x00vj)NU3|4\x90\x84_\
-\xc6\x9a\xe9\xc1\x98<\x8b\xb2\x1d@\xcdN\x10F\x80b\xed\xcdh\xe1jd\xe06,k\'Z\
-\xca\xe5\xe6\xa76bD\x82\x00\xd8e\xc5\xa4\x11A\x06$1\xbf\x07s\xea\x0c\xd6L7\
-\xcavQJ\x81\x19\xc4\x0bVc\x16\xd3(\x05N\xbc\x95R\xaa\xe3\x92\xce\xb0\xd0\xa9\
-\xf6f\xc8M-\x03\xb7\x13\xa1A\xa9\xb0\x92E\xd6(C\x06\x94\xa41\xb7\xfc\x94O }\
-\x00#\x97F\x1a\x127\xdc\x80V\x18\xc3\xb7\xcb\x08\xd3\xc2\xd1k\x91\xd9q\x84\
-\x14\xd8\x0bW\xe0Ek\x010\xd2\'0\xa6\x06@(\xca\xf1f\xca\x8dK\xe7\xbd\xf6\xd7\
-\x1az\x84\x93\xf3.5\x84\x8e0\xab\xd0e\x0e=(0b)2V\x01\x0f\xb0Ba\xda\xeeZ\x8b\
-\x97\xdbNn\xb8\x9bB\xe6:\x12\xd6\x08\xba9C${\x1a\xbd\x9ca\xe8\xc4$\xe3G\xb2x\
-\xae\x8f\x1e\xd4i\xdc\x90\xa0!6D\xb1\xb8\x80Bp!RyDr\xa7P\xd9i\xfa\xdf\x1d&7h\
-#40#\x06\xd57E\xa9\r\x8d`\x87\xd6#\x8c\x14\xba\xcc\xa3\x07\xc1\x88\xa6(\x04J\
-\xb8x\xb8A\x17\x87Q"j\x88h\xae\x0bJ\xd3\x0c\x1f\x1a\'\xd3\x9d\x07\xa0qC\x92x\
-s\x88\xd1\xa3\xd3\xe8a\x9d\x9aU\x19r\xbeC(\xd7\xfd\xb9\xce\xba\xf0\x04f\xd5&\
-\x86\xf7\x9dbp\xcf>\x94\xef\xa1\xa4\xe0\xd4\xb6_\xb0\xf4\xb1\x87Hh\xfd\xe0\
-\x1c\x99S~\xba*\x11\x0b\x1c\xa7\xfb\x97iB\xb5\x16\xc9\x1b\x87\x99\xe8\xca2~l\
-\x86%\x0f\'\ty?\xa1\xef\xd7a\xe2\xed\x0e\x89\xaaw\xb0#[\x91^\x96\x80\xfb\n\
-\xe9\xc3A\xcc*\x8fx\x87\xc0Q\x7f\x80\x12\xc6\xbc\xd7\xffZB\x0f\xb3g\xde\xa5\
-\x1aI\x04w\xa33\x89\x10\x02\xa1B\x98\xfc\x1a\x8fI\x94&\xf1\xbc;X\xb0\xba\x83\
-\x9e\xed\xff\x8c=6D,\x15#Q\x1eA\x14\x1a8\xfd\xa3\xfd\x14\xc6F\t\xc4cH\xd3\
-\xc4\xc9O1\xbc;M1\xddF\xcbW\x97c\x98\'\xd0\x9d$\x9a\xddB\xd7O\x7fDql\x143\
-\x1a\xc1\x08\x87A8\xe4{\\\x1aWnB\xf3\x07\x10\xb4\xa03\x81g\x17\xb1\'\xa61\
-\x82\x16\xa6\xd0\xd0\x021J\xfa>\xf0r\x04\xdc6N\xbd\xf6*\xf9\xe1a\x02\x898\
-\xd2\xb2\x18?p\x8e\xd1\xbd6\xbe[&T_Op\xc3\xdd\xe8v\x06y1\xe7\xaa\xbbQ\n\x82U\
-\x11\xaaj%\xf9\x91>\x84\x94\x84\xe3\x8b\xd0\x031\x0c\x95\xc6\x9fS~\xc7Q\xd2\
-\xc34V\xe3Ow1zv\x8c\xa9\x0fB\x04\xab\x93,\\\xdbJU\xcdRp\xc2\x18\xfeQ\xf2\x1f\
-j,\\\xd1B\xc1;\x80,\xf9\xe8Z\x07\xe5\xd1\xa3\xc4k\xea\x88W5\x90g\x1f\x95S\
-\xe2\x8b\xa3\x87\xd85\xefR\xc1"\x04\xf7\xa3\x8bq\x84\x04!\x82\x04x\x1fE/\x00\
-R\xb3\tV?D\xc0\x1a\xc2\x1e?\x88\xc6J\x0c\xd1A\xdf\x9e\x97(\x8f\x1dd\xe1\xed[\
-\xa9\xbbu\x0b\xa82n\xb1\xc8\xc0\x8e\x7f\xa2\xd0\xbb\x93Bz9\x91\xf6\x05\xe0\
-\xd70\xb0\xfb?p\'>\xa0\xe5\xae\'Ht\xacC\x06|4-\x8e\xe7\x14Q\xfa$\xa6\xde\x89\
-p7\xa1\x8b1\xdc\xec\x19\xce\xfe\xdbsHS"4I\xe3\xc6g\x89.Y\x82\xf2\xb2dNu\xe1\
-\x8c\x1eb\xe1\x1d\x8fPw\xeb\x16\x84\xee\xe3\xdb0\xf8\xf6KL\x9f\xde\x8b\xa1k\
-\x08\xb3\x1e\xdd\x8d2\xb0\xfb\x95\x8b:\x95\xb5\x83\xd8\xf5\xf7\x10k{\x963/?\
-\x87\xd0=\xda\x1f|\x06aM"\xb5:\xfa\xf6\xfc\xec\xd2\xf9\xb5\xd5\xa3\xac\xed\
-\x08s\x13\xba\x9c\xc2\x94C\xb4l\xfe\x13b\xed+\xf0E/*\xf0>\xe4\x96P\xbf\xc6\
-\xa4\xef\xcd\x7f\xa74\xfdU\x82\xc1"\xcaK2\xd5\xd3\x85\xce\x10\xa9e\x8fA\xa8\
-\x9f\xa0x\x0b*C\xe4\xa2\xe8\x81\xd1\xab\xf0\xa1\xa6kx\x81\x08\x9a-\x91R\x80\
-\x1f\xc1\x9a\xd4\xc0\x9d\x8dEYq\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1{\xfb\x08\
-\x05\x1b\xa9[\xf78Zy;\xd2\xdb\x8f4\x1f\xa1n\xf5\xa3\x0ct\x9f\xa0\xd4\xd3Cl\
-\xf1\x93x\x9e\xc0\xee>K(PG\xcd\xaaG\x90\xeeO\x90\x85= \x13hB\x07g\nJI<\x13\
-\xb4\x12\xe8E\xb0B\tt+\x8a44\xac`\n\xcduQ\xb2\x95L\xe7w\t\x05\xea\xa9[\xbb\
-\x15\xdd\xf99\xa2t\x04\xdfz\x9a\x9a\xe5\x0fP<\xb1\x1f\xdd\xd1\x11*\x01^\xe0\
-\xd2\xce\xdc\x0c\xe8\x19<\xeb\x1b\x98*\x82T\x02M\xafB\xb3_\xc53\x9e\x9eS~U-[\
-\xd1\n\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xba\t\xdd\xf9\x1e8G \xeb\xa1\xf4\
-\x12UK6\x13\xb0\xdeb\xb2\xf3\x00M[\xff\x18\xcf\xcf\x93=\xfc2\x89\xa6\x95\x98\
-\xc9\xc5\xc8\xfc\x0e\xc8\x02\x953\x98\x8b\xa2\xb3s\xf1\xfc[c\xb5\xb0~\x041\
-\x1c\x04\t\xd8#\xb0\xaf\x16\xa6\x15\x18\x16j\xdd:J}\xef\xa3N\x86\xb0\xda[\
-\x91\xd3\x13x"\x85wZ\xa0\xc7\x1a\xa1\x10@\x1e\x18\x84B\x10\xad1\x8d\xd5p\x07\
-\xdap#\x8c\xc5P\x85\x04\xaaX\xc4\xfd\x10\x8cD=\xfe\x8c\x81~h\x02\n\x9f\xdc*\
-\xae\x86X\r\xacI#\x86\x03XN;\xad[\xff\x0c-\x1a\x01\xdf\xc7\x1f\x1fD\x1e9\x83\
-\xd3\xbc\x00\xe7x\t#\xd9\x88(\'\x10\xfb\xa6!\x17D\xb6\x0c`\xd4\xdf\x826T\x8f\
-\xf0\x92\xe0%P9ui\xe7\x7fy\xd7\x0e"\x87\x03\x08)\xa0\x94\x86\xae$\xfeb9\xa7\
-\xfc\xc8\'\xe0H\x13\xac\x8b\xc3plv\x89\xea\xa7\xa03\x02\x99f\x00D\xa0\x8c\
-\xbc5J$~+\xd9\xdd\xefc\xdfR\xc0N\xa7)\x1fu\xa9\xbf\xe3~\x18\xce\xc3\xbe\x00\
-\xf8W\xa1\xf6\xd7\x18\xfa\xe0\x0bO\xcf\xbb\xd4h\x15$:\xc6)\x9c\\\x84D\xc3\
-\xcfO2\xbdw3H\x85\xb9\xdaG\xcf\xba\x0c~{\x88\xc2\xa9\xdb\xa8y\xa8\x91\xe2a\
-\x1bsE\x1eU\xda@\xf6t\x06/;\x85\x13z\x12\xfb\x03\x97\xd0\x12\x8b\x99\xce~\
-\xa6wu\x10lh\xc0\x9f\x9aB\x84\x80\xf2\xeddv\x8d\xe0<>BI\xfd\x0e\xf6.\x17\xbd\
-I\xc7\xb8N\xc3>T\xc6K\x17I,\x1d\x9d\x8dAh \nd\xfe^\xe0\xf6\x0b\xdc\xc1\x1a\
-\xb4\x86\x06\x92\x7f]\xc2\xcb\xac\xa5\xd0\x95\xa3<1\x8c\x13x\x8c\xe2^\x9b\
-\xf0\x92\x003{z\x98\xde\xd5A\xe8\xba\x14~!\x8d\x90\xfe%\x9d\xa5=6\xc6"\x9f\
-\xc4\x8d\xe3\xe4\x8f\xb5#\x90\xf8\xf912o\xac\xa1\xea\xd9\xc2\x9c\xf2s\xc7\
-\xb3Ln\xfb2\xf1\x9b\x86(t5\xcdn\xf3\xe6\x87\x99\xf8\xe1=\x94\xbb\xcb\xe7\xfb\
-8\xd4\x17 \xb6\xfaQ\x06_\x9c\xe1\xc4\x1fmG\x15]\xac\x86{\xb0\x16\xae\'\xf3\
-\xed!\x8a\xbf\xfa\xddy\xaf\xfb\xb5\x88\xfe\xda\xaa\xf5\xf3.\xad\xae\x9f\xe1~\
-vs.U\x8dS\x94\xd4\x0e\x0e\xc2\x83\x16\xf9I\xc8\x0e;t\x7f\xcb&\x93Kq\xc3\xef\
-\xd7c,-\xf3\xf6\xb6fn\x8a\xf5\x13}\xaa\x9d\xc3\x7f{\x9a\xe1\xe7w\xd3v\xf7\
-\x02\xe4\xca \xa5\xe3yN\xbd\x95\xa1\xd8\xdaN\xdd\xc68]\xbd\x0e\x89T\x96\xf0\
-\x13m\x1c\xfa;\x9f\xb1\xefw\xd2vW=\xea\x9e(\xba\x05\xba\xe1\x92\xfcZ\x84\xfd\
-;Z\xb9S\xee\xe0\\*\tR\xa3\x9dA\xde\x8a<\xc0D2\tI\x90\x9a\xe2+}\xfb\xd1\x1fj\
-\xe5\xf0\x0f\xfa(\xfcp?\x8dkk\xf1\xd7\x9b\x0c|\xe4\xcc5\xb5\x91\xac\xb3hu\
-\xfb\xc8N\x19\x97t\xbe\x1b]\x89\xc0\xe6~\xf1:=5\xd5(i\xd0*\xd2\xfc*\xb9\x8aU\
-\xbd\xbds\xcbo\xc0\xe5\xd4\xe2%\xdc\xa7\x0e\xd0\x97\x8c!\xa4\xe4z\xd5\xcf\
-\xce\x1b\xd62\x11\x0f\x9f\xef\xe3\xd8\x8c`K\xb3\xcb\xe4\x9dk\x199>\x04!\x9d\
-\xd5\x8fnd:W\xc5kN\x1c{U\xe5\xdbc.\xe8\xa7\xfc\xc2\xbcK\x1b\xfdil\xbb\x97q\
-\xa7\xc4\xc4\x98N\xff7\xd3\xa0\xe9\xd8\x8e\x81\x12\x1a\x08\xc9\xa2e.\x1d\xbf\
-\x9d\xe7\xe0\x916\xde\xe9\t1\xaa\x87y\xea\xe1Q\x16n68\xfc\x8b\x1c\'_<\x8b\
-\x92\x1a\xbe0\x08\'$\xcb\xee\x93\x985#\xbc\xb1m\x19\x8d\xb5>\x8fn\x19\xa3\
-\xeeK\x1a\xa7\xf6\xe69\xf9\x9d\xde\xf3m\xab\x9b$\x0f\xfc\x85\xc1\xb8\x16\xc4\
-.\x9da\xbc\x1c\xc6\x8aJ\x1c{\x94\xb3\xe5\x1c#\xfeG\x07k>\xb8\x9d\t\x1e\xdf\
-\x92#\xbcBrh\xcf8\xfb\xdf\xcb\xa0\xa4F\xb4\xd6`\xc1\r\x92\xa1\x92$\x18\xc9c\
-\x17\xcf\xf2\xde\xe1\x15\xfc\xd6\xc6\x8b;\x87\xf4&\x1c\xc7\xa7T\xe8f\xd8\xae\
-&\x18s(\xdb\xe3\x9c.\xe5\x99>2\xb7\xfc\xde\xdc\xb6\x0c)\xa7qJ\xa7\x99t\nXU\
-\x06e\xfb\x0cg\xcb\xd73\xe2\x7f\xe2\xb0r\x0c\x9aN\xceP\xb7\xb1\x89\xe3\'\x06\
-\t%L\x1a\xd6G\xe8|\x7f\x92#\xb9\xe0\xbc\xd7\xfcZE\x1f\x18\x98\xff\x83\xc2|6O\
-)\xdfM\xfb-\x82rg\x08\xdb1\xf0\x85N$!\xa9mvhYj\xd3\xbc\xb4\xc4\x9e\xce6^~\
-\xad\x89b)MzP!\xbd \x0fn>Du\xab\xc1\x99\x83A\x8a9\r+*\xb8\xf9\xcbY\xc2\xd5\
-\xf0\x9d\x7f\xbd\x8f\xa3]Y\x0c]C\xd9:\x0f?\xd9\xc5u\xb7i\x1c\xdd\x1daj\xdc"V\
-\xafX\xf1\xa5,=\xbd)\xf6\x1fZ\xc2WVw\xb3he\x84\xaaZ\x9f\xf4\x80\xc5\xb1\x133\
-\xd8N\xe9|\x9c\xe9\xb4\xa2:\x02\x9b\x9f9\xcd\xb9\xa3\x01\x8e\xbf\x17B3\x05k6\
-gi\xbe.\xcf\xbe\x1dI\xa2I\x8f\xb3g\xaa\xd8\xf6\xc6z\xb2\x93\x97p\x1e\xcc\x11\
-\xab\xcaR,\xf4\xd0\xb2|\x92\x86\xb6"\xddg\xa3|p,\x8f\x809\xe7W\x9b\xca`\x17\
-\x0e\xd1\xbcF\'V\xe73\xd0?\xce\xb1\xe3\x93\xd8N\xf6\x82~\xde\xbb\xdf\xe5\xe1\
-M\x0ey\xa7DS{\x02!\xc7ykg\x89\x81\x019\xcf\x15\xbfv\x11\xeb\xd7\xbf9\xefs\
-\xad\x10\xb0ec\x17w\xae\xe9!\x95,"\xe4l\x08\xd9\xacIf\xc6bt2\xc2/\x7f\xb3\
-\x84\xb3\xe7\xaa)\xbb\xf2\x82\xe7\x96\xb6O\xb3a\xd9\x10-\x8d3(O\xe1\xa3\xd1\
-\xd5\x93`\xff\xf1:z\xfa#\xe7\xdbJ\xa9X~\xfd$\x1bW\x0f\x92\x8a\x17(\x97%J\xea\
-|\xf0a5;;\x1b\xc9\xe5\r\xee\xbds\x88\xf5\x1d\x93\x94}\x8d\xd7\xdfi\xe4\xf0\
-\xc9\xaaO\xc5\x1a\xb0<n_;\xca-\xcb\x87\x90\xbe\x8b\xd4`$\x13\xe1\xcc\xb9*6,\
-\x1b\x02\x04\xaf\xbf\xb3\x98\xc3\'\xab/\xe9\xcc\xe6\x0c\x84\x80{\xef\x1ca]\
-\xc7\x04\xae//\xf0\xce5\xbf\xd9w\xf4\xb2\xa1c\x88\xb2\xaf\xf1\xda;m\x1c>y\
-\xe1\xbd\x05C\x87\xbf\xfaz\x8er\xff\x10o~\xaf\x97\xaf\xfdC\x07=cQ\xbe\xf9|\
-\x84\xca\x15\xb9\xb9#\x16,\xf8\xfeU\xeb.! \x14\xfcX\xef\xba`;\x95m\xc7\xcb\
-\xc1\xbaUe~\xf0\xfc\x14/\xfc\xf9\x00\xae\'\xf8\xd3\x7f\\\xc03_\x8f\xf3\xee\
-\xde\xf9\xb9J\xf0EA\x1f\x1c\x1c\xbc\xda1T\xb8\x02\xdc\xb4u\x82\xa9\xa1\x0c\
-\xc7\x0e\xe6y\xe2\xb9\x00]\'l\xde\xdc\xbe\x80\x99ley\xf5?\xa1\xd2[_P\xc2A\
-\x9bh4\xcfC\x7f\x08\x1b\xef\xb5y\xe9\x95Pep\xfc/\xd0\xafv\x00\x15\xae\x0c/\
-\xfeK#A\xb3\x8e\xea\x98\xcf\xf3\xdf\x91\xbc\xfa\xb3+s;\xf2\x8b\x8e\x80oT>\
-\xd9*T\xf8\x1c*sn\x85\n\x17\xa12@*T\xb8\x08\xff\t\xa0M\x96s\x18I#\x89\x00\
-\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory036Bitmap():
- return wxBitmapFromImage(getDocFactory036Image())
-
-def getDocFactory036Image():
- stream = cStringIO.StringIO(getDocFactory036Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory036')
-catalog['DocFactory036'] = ImageClass()
-catalog['DocFactory036'].getData = getDocFactory036Data
-catalog['DocFactory036'].getImage = getDocFactory036Image
-catalog['DocFactory036'].getBitmap = getDocFactory036Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory037Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rP\
-IDATx\x9c\xed\x9bi\x8c]\xd5}\xc0\x7f\xe7\xdc\xed\xad\xf3\x96y\xb3\xda\xe3\
-\xb1g\xc6\x80al\xe3\xdd\xacN\x0c\t\xb5Y\xca\xe6\xb2\xb4PU\xad\xa2\xaa\xa0V\
-\xb4\xfd\x90\x8fQ\x15U\xaa\xba\xa0F\x11\x90\xa5\xa8jEIi\x9c\x04BPlH\x8c\r\
-\x8e3\xde0^\xc7\xd8\x9e\x19\xcf\xf2f\x9fy3o\xbd\xf7\xdd{O?\x0c5\xb8\x04{h\
-\xcd\xa3\xd0\xf7\xfb\xf8t\xee\xfd\xfd\xff\xe7\xff\x8e\xce\xb9\xe7\xe8\x88\
-\xbf\xf9\x96RT\xa9R\xe57\xa2\x87j?\xeb\x10\xaaT\xf9\xbf\x8b\x1e\xac\x0e\x90*\
-U>\x16=\x9c\xa8\xacP\xa00\xb0\x91x\x17\xfd\xeeb\xe0bV.\x06a\xa3\xfd\xb7\x18\
-\x14PV\x01<\xb4O\xc5+\xf11E\t\x1fIYY(\xc4\xa7\xe2\xa9r\xe5\xd0C\xf1\xca\xc9\
-\x04>M\x85\xddD\xdd\xf3\xf8\x1f\xfaoJ\t\xd2\xd4\xc9\xbbqr\xc1\x0ef\xf5\xc5\
-\xb8\x04>\xa5\x18<Z\xec7\xa8\xf1z/\x8a\x01@\xb7\x14\xb6VG\x8f\xb6\x952\xa1+\
-\xea\xd5pX\xe2\xfe\x8c@y\x14\xcd\x10\x8c\xcb\xe5\xa4\xe5\x8dW\xd4Q\xe5\xca\
-\xa3\x87+8@,\xc6h\xd1\x9f\xe1\xcc\xab\xf5\xcc\x0cE\x00\x01R"uE\xb8\xaeH\xa4\
-\xb1H\xfb\x8a)\x1ck1\xfd\xc1\xbf\xc4\xa1\xe1\x8a\xc7\x10d\x84\x96\xe2\x8b\
-\x9c\xfaI\x9c\x99t\x00\x84\x00!\x01\x885\xdb,\xbf\xff-\x8aF#\x93\xdc|E\xbd!F\
-h\xb2\x7f\xc4\xf1\x1f\xa5\x88-,\xd1\xba\xf60\x85\xe0\xb5\x94\xa9`\x01\xaa|b\
-\xf4H\x05\xeb\x13R\x82\x84\xb6\x1a\xe1\x17\x91\x9a"\x18\x17\x18\x01\x81BP\
-\xca\x07\x19;%\xc9\x8f-b\xc5]\x12\xd3\xf85\x03\xe1{.Z\x86\x08\xdfC\xb8e\x84\
-\xef\xa1\xa4\x86\xd2\r\x94\xfc\xcd\xcb!\xe1:H\xb7\x0cpQ\xdb\x90\xd2\t\x8b\
-\xabQn\x01\xa9q!\x06\x10\xa4\x96\x98\x84B\x9d\x98\xc1\x16"\xf2\xa3\xef\xf1u\
-\x13\xa5\xe9H\xa7\x08B\xe2\x1b\xd6\xdc\x00\xbb\x8cS\xa0\x88\xfbE\xc2\xf9eHJd\
-\xd31\xae\x89Z4\x84&\xc8\xc8\x0f\n0\xaf\xfc\x94\xfa\xc0o\x06\xe6\x9c^\x19_\
-\xb7\xe6\\e{\xae\x99\x19\xf8\xe83\x80o\x06/\x8a\xb9\xca\xa5\xd1k\xcc\xc1\x8a\
-\xc9,\xe5\x80\xb1\x1eC\x7f\x8bX\xca\xe5\xfa\xdf\xbb\t-\x14\x04\xe5S\xce\xdb\
-\x0c\x1e\xeee\xf4D\x9a\xf3\x07R\\sG\x14\xc78KA\x04\x11\xca\xc3\xcc\xf4`fz\
-\xf0\n%\x04jn\xf2\t\x04\xb0S\xcbpj\x16\xc1\xfb\x03I\xf8e\xac\xd9^\x8c\xa9s(\
-\xdb\x01\xd4\xdc\x04a\x04(\xd6_\x8f\x16\xaeE\x06n\xc2\xb2v\xa1\xa5\\\xae\x7f\
-l\x13F$\x08\x80]VL\x19\x11d@\x12\xf3{1\xa7\xcfb\xcd\xf6\xa0l\x17\xa5\x14\x98\
-A\xbc`-f1\x8dR\xe0\xc4\xdb(\xa5:/\xeb\x0c\x0b\x9dZo\x96\xdc\xf4rp\xbb\x10\
-\x1a\x94\n\xabXl\x8d1l@I\x1a\xf3\xcbO\xf9\x04\xd2\x071ri\xa4!q\xc3Mh\x85q|\
-\xbb\x8c0-\x1c\xbd\x1e\x99\x9d@H\x81\xbdp%^\xb4\x1e\x00#}\x12cz\x10\x84\xa2\
-\x1c_D\xb9yY\xc5j\xfeyG\x8fp\xaab2C\xe8\x08\xb3\x06]\xe6\xd0\x83\x02#\x96"c\
-\x15\xf0\x00+\x14\xa6\xfd\xb6ux\xb9\x1d\xe4Fz(d\xae"a\x8d\xa2\x9b\xb3D\xb2g\
-\xd0\xcb\x19\x86ON1q4\x8b\xe7\xfa\xe8A\x9d\xe6\x8d\t\x9ab\xc3\x14\x8b\x0b(\
-\x04\x17"\x95G$w\x1a\x95\x9da\xe0\xad\x11rC6B\x033bP{]\x94\xfa\xd0(vh\x03\
-\xc2H\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x18#\xa2\x86\x89\xe6\xba\
-\xa14\xc3\xc8\xe1\t2=y\x00\x9a7&\x89/\n1vl\x06=\xacS\xb7:C\xcew\x08\xe5z>\
-\xd6\xd9\x10\x9e\xc4\xac\xd9\xcc\xc8\xfe\xd3\x0c\xed\xdd\x8f\xf2=\x94\x14\
-\x9c\xde\xfes\x96=t\x1f\tm\x00\x9c\xa3\xf3\xcaOW%b\x81\x13\xf4\xfc"M\xa8\xde\
-"y\xed\x08\x93\xddY&\x8e\xcf\xb2\xf4\xfe$!\xef\xc7\xf4\xff*L\xbc\xc3!Q\xf3&v\
-d\x1b\xd2\xcb\x12p_$}$\x88Y\xe3\x11\xef\x148\xea\x0fP\xc2\xa8X\xdd?\xcf\xe8a\
-\xf6VL\xa6\x91Dp;:S\x08!\x10*\x84\xc9\xaf\xf0\x98Bi\x12\xcf\xbb\x85\x05k:\
-\xe9\xdd\xf1\xcf\xd8\xe3\xc3\xc4R1\x12\xe5QD\xa1\x893?<@a|\x8c@<\x864M\x9c\
-\xfc4#{\xd2\x14\xd3\xed\xb4~u\x05\x86y\x12\xddI\xa2\xd9\xadt\xff\xe4\x87\x14\
-\xc7\xc70\xa3\x11\x8cp\x18\x84C\xbe\xd7\xa5y\xd5f4\x7f\x10A+:\x93xv\x11{r\
-\x06#ha\n\r-\x10\xa3\xa4\xef\x07/G\xc0m\xe7\xf4\xcb/\x91\x1f\x19!\x90\x88#-\
-\x8b\x89\x83\xe7\x19\xdbg\xe3\xbbeB\x8d\x8d\x047\xde\x8eng\x90\x97r\xae\xbe\
-\x1d\xa5 X\x13\xa1\xa6^\x92\x1f\xedGHI8\xbe\x18=\x10\xc3Pi\xfcy\xe5w\x02%=Lc\
-\r\xfeL7c\xe7\xc6\x99~7D\xb06\xc9\xc2um\xd4\xd4-\x03\'\x8c\xe1\x1f#\xff\x9e\
-\xc6\xc2\x95\xad\x14\xbc\x83\xc8\x92\x8f\xaeuR\x1e;F\xbc\xae\x81xM\x13y\xf6S\
-=\x1d\x9e\x1fz\x88\xdd\x15\x93\t\x16#\xb8\x1b]L $\x08\x11$\xc0;(\xfa\x00\x90\
-\x9aM\xb0\xf6>\x02\xd60\xf6\xc4!4Va\x88N\xfa\xf7>Oy\xfc\x10\x0bo\xdeF\xc3\
-\x8d[A\x95q\x8bE\x06w\xfe\x13\x85\xbe]\x14\xd2+\x88t,\x00\xbf\x8e\xc1=\xff\
-\x81;\xf9.\xad\xb7=B\xa2s=2\xe0\xa3iq<\xa7\x88\xd2\xa70\xf5.\x84\xbb\x19]\
-\x8c\xe3f\xcfr\xee\xdf\x9eB\x9a\x12\xa1I\x9a7=It\xe9R\x94\x97%s\xba\x1bg\xec\
-0\x0boy\x80\x86\x1b\xb7"t\x1f\xdf\x86\xa17\x9eg\xe6\xcc>\x0c]C\x98\x8d\xe8n\
-\x94\xc1=/^\xd2\xa9\xac\x9d\xc4\xae\xbe\x83X\xfb\x93\x9c}\xe1)\x84\xee\xd1q\
-\xef\x13\x08k\n\xa95\xd0\xbf\xf7\xa7\x97\xcf\xaf\xbd\x11e\xed@\x98\x9b\xd1\
-\xe54\xa6\x1c\xa6u\xcb\x9f\x10\xebX\x89/\xfaP\x81w \xb7\x94\xc6\xb5&\xfd\xaf\
-\xfd;\xa5\x99\xaf\x12\x0c\x16Q^\x92\xe9\xdent\x86I-\x7f\x08B\x03\x04\xc5\xeb\
-P\x1d"\xf3B\x0f\x8cU\xf0\x83M\xd7\xf0\x02\x114["\xa5\x00?\x825\xa5\x81;\x17\
-\x83\xb2\xe2\xb8~\x18\xb3$0\xbd0B\xc5\xa0\xecc\xf7\xf5\x13\n6\xd3\xb0\xfea\
-\xb4\xf2\x0e\xa4w\x00i>@\xc3\x9a\x07\x19\xec9I\xa9\xb7\x97\xd8\x92G\xf1<\x81\
-\xdds\x8eP\xa0\x81\xba\xd5\x0f \xdd\x1f#\x0b{A&\xd0\x84\x0e\xce4\x94\x92x&h%\
-\xd0\x8b`\x85\x12\xe8V\x14ihX\xc1\x14\x9a\xeb\xa2d\x1b\x99\xae\xef\x10\n4\
-\xd2\xb0n\x1b\xba\xf33D\xe9(\xbe\xf58u+\xee\xa1x\xf2\x00\xba\xa3#T\x02\xbc\
-\xc0\xe5\x9d\xb9Y\xd03x\xd670U\x04\xa9\x04\x9a^\x83f\xbf\x84g<>\xaf\xfcjZ\
-\xb7\xa1\x15\xf6\xe0Y14[#\x14^H\xacm3\xba\xf3]p\x8eB\xd6C\xe9%j\x96n!`\xbd\
-\xceT\xd7AZ\xb6\xfd1\x9e\x9f\'{\xe4\x05\x12-\xab0\x93K\x90\xf9\x9d\x90\x05\
-\xaag0\xf3Bg\xd7\x92\xca\xd9b\xf5\xb0a\x141\x12\x04\t\xd8\xa3\xb0\xbf\x1ef\
-\x14\x18\x16j\xfdzJ\xfd\xef\xa0N\x85\xb0:\xda\x903\x93x"\x85wF\xa0\xc7\x9a\
-\xa1\x10@\x1e\x1c\x82B\x10\xad9\x8d\xd5t\x0b\xdaH3\x8c\xc7P\x85\x04\xaaX\xc4\
-}\x0f\x8cD#\xfe\xac\x81~x\x12\n\x1f\xde*\xae\x85X\x1d\xacM#F\x02XN\x07m\xdb\
-\xfe\x0c-\x1a\x01\xdf\xc7\x9f\x18B\x1e=\x8b\xb3h\x01\xce\x89\x12F\xb2\x19QN \
-\xf6\xcf@.\x88l\x1d\xc4h\xbc\x01m\xb8\x11\xe1%\xc1K\xa0r\xea\xf2\xce\xff\xf2\
-\xae\x1bB\x8e\x04\x10R@)\r\xddI\xfc%r^\xf9\x91O\xc0\xd1\x16X\x1f\x87\x91\xd8\
-\xdc\x12\xd5OAW\x042\x8b\x00\x10\x812\xf2\xc6(\x91\xf8\x8dd\xf7\xbc\x83}C\
-\x01;\x9d\xa6|\xcc\xa5\xf1\x96\xbba$\x0f\xfb\x03\xe0W\xb0\xe6\x9fs\xf4\xa1g\
-\x1e\xaf\x98\xcch\x13$:\'(\x9cZ\x8cD\xc3\xcfO1\xb3o\x0bH\x85\xb9\xc6G\xcf\
-\xba\x0c}{\x98\xc2\xe9\x9b\xa8\xbb\xaf\x99\xe2\x11\x1bse\x1eU\xdaH\xf6L\x06/\
-;\x8d\x13z\x14\xfb]\x97\xd0R\x8b\xd9\xae\x01fvw\x12lj\xc2\x9f\x9eF\x84\x80\
-\xf2\xcddv\x8f\xe2<<JI\xfd\x0e\xf6n\x17\xbdE\xc7\xb8J\xc3>\\\xc6K\x17I,\x1b\
-\x9b\x8bAh \nd\xfe^\xe0\x0e\x08\xdc\xa1:\xb4\xa6&\x92\x7f]\xc2\xcb\xac\xa3\
-\xd0\x9d\xa3<9\x82\x13x\x88\xe2>\x9b\xf0\xd2\x00\xb3{{\x99\xd9\xddI\xe8\xaa\
-\x14~!\x8d\x90\xfee\x9d\xa5\xbd6\xc6b\x9f\xc4\xb5\x13\xe4\x8fw \x90\xf8\xf9q\
-2\xaf\xae\xa5\xe6\xc9\xc2\xbc\xf2s\'\xb2Lm\xff2\xf1\xeb\x86)t\xb7\xccm\xf3\
-\xe6G\x98\xfc\xc1\x1d\x94{\xca\x17\xfa8\xd4\x1f \xb6\xe6A\x86\x9e\x9d\xe5\
-\xe4\x1f\xed@\x15]\xac\xa6;\xb0\x16n \xf3\xeda\x8a\xbf\xfc\xdd\x8a\xd5\xfb\
-\x8b\x80\xfe\xf2\xea\r\x15\x93\xd56\xcer7{8\x9f\xaa\xc5)J\xea\x87\x86\xe0^\
-\x8b\xfc\x14dG\x1cz\xbee\x93\xc9\xa5\xb8\xe6\xf7\x1b1\x96\x95yc\xfb"\xae\x8b\
-\r\x10}\xac\x83#\x7f{\x86\x91\xa7\xf7\xd0~\xfb\x02\xe4\xaa \xa5\x13yN\xbf\
-\x9e\xa1\xd8\xd6A\xc3\xa68\xdd}\x0e\x89T\x96\xf0#\xed\x1c\xfe;\x9f\xf1\xefu\
-\xd1~[#\xea\x8e(\xba\x05\xba\xe1\x92\xfcZ\x84\x03;\xdb\xb8U\xee\xe4|*\tR\xa3\
-\x83!^\x8f\xdc\xc3d2\tI\x90\x9a\xe2+\xfd\x07\xd0\xefk\xe3\xc8\xf7\xfb)\xfc\
-\xe0\x00\xcd\xeb\xea\xf17\x98\x0c\xbe\xef\xcc\xb5\xb4\x93l\xb0hs\xfb\xc9N\
-\x1b\x97u\xbe\x15]\x85\xc0\xe6n\xf1\n\xbdu\xb5(i\xd0&\xd2\xfc2\xb9\x9a\xd5}}\
-\xf3\xcbo\xd0\xe5\xf4\x92\xa5\xdc\xa5\x0e\xd2\x9f\x8c!\xa4\xe4j5\xc0\xaek\
-\xd61\x19\x0f_\xe8\xe3\xd8\xac`\xeb"\x97\xa9[\xd71zb\x18B:k\x1e\xdc\xc4L\xae\
-\x86\x97\x9d8\xf6\xea\xea\xb7\xc7\'A?\xed\x17*&k\xf6g\xb0\xed>&\x9c\x12\x93\
-\xe3:\x03\xdfL\x83\xa6c;\x06Jh $\x8b\x97\xbbt\xfev\x9eCG\xdby\xb37\xc4\x98\
-\x1e\xe6\xb1\xfb\xc7X\xb8\xc5\xe0\xc8\xcfs\x9cz\xf6\x1cJj\xf8\xc2 \x9c\x90,\
-\xbfKb\xd6\x8d\xf2\xea\xf6\xe54\xd7\xfb<\xb8u\x9c\x86/i\x9c\xde\x97\xe7\xd4s\
-}\x17\xda\xd6\xb6H\xee\xf9\x0b\x83\t-\x88]:\xcbD9\x8c\x15\x958\xf6\x18\xe7\
-\xca9F\xfd\xf7\x0f\xd6|p\xbb\x12<\xbc5Gx\xa5\xe4\xf0\xde\t\x0e\xbc\x9dAI\x8d\
-h\xbd\xc1\x82k$\xc3%I0\x92\xc7.\x9e\xe3\xed#+\xf9\xadM\x97v\x0e\xeb-8\x8eO\
-\xa9\xd0\xc3\x88]K0\xe6P\xb6\'8S\xca3st~\xf9\xbd\xb6}9R\xce\xe0\x94\xce0\xe5\
-\x14\xb0j\x0c\xca\xf6Y\xce\x95\xaff\xd4\xff\xd0a\xe58\xb4\x9c\x9a\xa5aS\x0b\
-\'N\x0e\x11J\x984m\x88\xd0\xf5\xce\x14Gs\xc1\x8a\xd5\xfa\x8b\x82>8X\xb9\x83\
-\xc2|6O)\xdfC\xc7\r\x82rW\x08\xdb1\xf0\x85N$!\xa9_\xe4\xd0\xba\xccf\xd1\xb2\
-\x12{\xbb\xday\xe1\xe5\x16\x8a\xa54\xe9!\x85\xf4\x82\xdc\xbb\xe50\xb5m\x06g\
-\x0f\x05)\xe64\xac\xa8\xe0\xfa/g\t\xd7\xc2s\xffz\x17\xc7\xba\xb3\x18\xba\x86\
-\xb2u\xee\x7f\xb4\x9b\xabn\xd28\xb6\'\xc2\xf4\x84E\xacQ\xb1\xf2KYz\xfbR\x1c8\
-\xbc\x94\xaf\xac\xe9a\xf1\xaa\x085\xf5>\xe9A\x8b\xe3\'g\xb1\x9d\xd2\x858\xd3\
-iEm\x04\xb6<q\x86\xf3\xc7\x02\x9cx;\x84f\n\xd6n\xc9\xb2\xe8\xaa<\xfbw&\x89&=\
-\xce\x9d\xada\xfb\xab\x1b\xc8N]\xc6y(G\xac&K\xb1\xd0K\xeb\x8a)\x9a\xda\x8b\
-\xf4\x9c\x8b\xf2\xee\xf1<\x02\xe6\x9d_}*\x83]8\xcc\xa2\xb5:\xb1\x06\x9f\xc1\
-\x81\t\x8e\x9f\x98\xc2v\xb2\x17\xf5\xf3\xbe\x03.\xf7ov\xc8;%Z:\x12\x089\xc1\
-\xeb\xbbJ\x0c\x0e\xca\x8a\xd5\xfa\x8b\x82\xd8\xb0\xe1\xb5\x8a\xcd\xb9B\xc0\
-\xd6M\xdd\xdc\xba\xb6\x97T\xb2\x88\x90s\xeal\xd6$3k16\x15\xe1\x17\xbf^\xca\
-\xb9\xf3\xb5\x94]y\xd1s\xcb:f\xd8\xb8|\x98\xd6\xe6Y\x94\xa7\xf0\xd1\xe8\xeeM\
-p\xe0D\x03\xbd\x03\x91\x0bm\xa5T\xac\xb8z\x8aMk\x86H\xc5\x0b\x94\xcb\x12%u\
-\xde}\xaf\x96]]\xcd\xe4\xf2\x06w\xde:\xcc\x86\xce)\xca\xbe\xc6+o6s\xe4T\xcdG\
-b\rX\x1e7\xaf\x1b\xe3\x86\x15\xc3H\xdfEj0\x9a\x89p\xf6|\r\x1b\x97\x0f\x03\
-\x82W\xde\\\xc2\x91S\xb5\x97ufs\x06B\xc0\x9d\xb7\x8e\xb2\xbes\x12\xd7\x97\
-\x17y\xe7\x9b\xdf\xdc;\xfa\xd8\xd89L\xd9\xd7x\xf9\xcdv\x8e\x9c\xba\xf8\xbe\
-\x82\xa1\xc3_}=Gy`\x98\xd7\xbe\xdb\xc7\xd7\xfe\xa1\x93\xde\xf1(\xdf|:B\xf5j\
-\xdc\'G,X\xf0\xbd\x8aw\x9b\x10\x10\n~\xa0u]\xb0\x9d\xea\xb6\xe3\x95`\xfd\xea\
-2\xdf\x7fz\x9ag\xfe|\x10\xd7\x13\xfc\xe9?.\xe0\x89\xaf\xc7yk_e\xae\x12|\xd1\
-\xd0\x87\x86\x86>\xeb\x18\xaa\\A\xae\xdb6\xc9\xf4p\x86\xe3\x87\xf2<\xf2T\x80\
-\xee\x936\xaf\xedX\xc0l\xb6\xba\xbc\xfa\x9fP\xed\xb5/\x18\xe1\xa0M4\x9a\xe7\
-\xbe?\x84Mw\xda<\xffb\xa8:8\xfe\x17\xe8\x9fu\x00U\xae,\xcf\xfeK3A\xb3\x81\
-\xda\x98\xcf\xd3\xcfI^\xfa\xe9\xa7s;\xf2\xff\x0b\x02\xbeQ\xfdt\xabR\xe5c\xa8\
-\xce\xbdU\xaa\\\x82\xea\x00\xa9R\xe5\x12\xfc\'\x84\xe1\x96s\xc0\xa1{O\x00\
-\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory037Bitmap():
- return wxBitmapFromImage(getDocFactory037Image())
-
-def getDocFactory037Image():
- stream = cStringIO.StringIO(getDocFactory037Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory037')
-catalog['DocFactory037'] = ImageClass()
-catalog['DocFactory037'].getData = getDocFactory037Data
-catalog['DocFactory037'].getImage = getDocFactory037Image
-catalog['DocFactory037'].getBitmap = getDocFactory037Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory038Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rR\
-IDATx\x9c\xed\x9bYl]\xc7y\x80\xbf\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x1f\xf2\x18\x14A\x81\
-\xa2\x8b\xd1 \xb0\xb3\xd5(Z\xb8N\xdd(\x89\x1d\xc7\x88d\'\xb2d+\nEI\x96\xb5R\
-\x96DR\\.w\xf2\x92w=\xe7\x9es\xa6\x0fte\xab\x8e-:\x11\xe5B\xbd\xdf\xe3\xc5\
-\x9c\xf3\xfd\xff\xfcw0sf0\xe2\xef\xbe\xa1\x14\x15*T\xf8\xb5\xe8\xa1\xea\xcf;\
-\x84\n\x15\xfe\xef\xa2\x07+\x03\xa4B\x85OD\x0f\'\xae\x8cH\xa00\xb0\x91x\x17\
-\xfd\xeeb\xe0b^\xb9\x18\x84\x8d\xf6\xbfbP@Y\x05\xf0\xd0\x16\xc4+\xf11E\t\x1f\
-IYY(\xc4\x82x*\\~\xf4P|\xe1%\x02\x9f\x86\xc2\x1e\xa2\xeey\xfc\x8f\xfc7\xa5\
-\x04i\xea\xe4\xdd8\xb9`;\xb3\xfa\x12\\\x02\x0b\x14\x83G\x93\xfd&U^\xefE1\x00\
-\xe8\x96\xc2\xd6j\xe8\xd1\xb6Q&tY\xbd\x1a\x0eK\xdd\x9f\x12(\x8f\xa2\x19\x82q\
-\xb9\x82\xb4\xbc\xf9\xb2:*,\x1cz\xf8\n\x0c\x10\x8b1\x9a\xf4\xe78\xf3Z-3C\x11\
-@\x80\x94H]\x11\xae)\x12\xa9/\xd2\xb6r\n\xc7ZB\x7f\xf0\xafq\xa8\xbb\xec1\x04\
-\x19\xa1\xa9\xf8\x12\xa7~\x1cg&\x1d\x00!@H\x00b\x8d6+\x1e|\x9b\xa2Q\xcf$\xb7\
-^Vo\x88\x11\x1a\xec\x1fr\xfc\x87)b\x8bK\xb4\xac;L!x=e\xae@\xc7W\xf8\xad\xd1#\
-W\xa0N!%Hhk\x10~\x11\xa9)\x82q\x81\x11\x10(\x04\xa5|\x90\xb1S\x92\xfcX3+\xef\
-\x91\x98\xc6\xaf\x18\x08\xdfw\xd12D\xf8\x1e\xc2-#|\x0f%5\x94n\xa0\xe4\xaf_\
-\x0e\t\xd7A\xbae\x80\x8b\xda\x86\x94NX\\\x8br\x0bH\x8d\x0b1\x80 \xb5\xd4$\
-\x14\xea\xc0\x0c6\x11\x91\x1f\x7f\x8f\xaf\x9b(MG:E\x10\x12\xdf\xb0\xe6\x06\
-\xd8%\x9c\x02E\xdc/\x12\xce/GR"\x9b\x8eq]\xd4\xa2.4AF~\xd8\xf1\xf3\xcaO\xa9\
-\x0f\xfdf`\xce\xe9\x95\xf1uk\xceU\xb6\xe7\x9a\x99\x81\x8f?\x03\xf8f\xf0\xa2\
-\x98+\xcc\x0f\xbd\xca\x1c\\p\x89\xa5\x1c06`\xe8o\x13K\xb9\xdc\xf8\x07\xb7\
-\xa0\x85\x82\xa0|\xcay\x9b\xc1\xc3\xbd\x8c\x9eHs\xbe+\xc5uwEq\x8c\xb3\x14D\
-\x10\xa1<\xccL\x0ff\xa6\x07\xafPB\xa0\xe6&\x9f@\x00;\xb5\x1c\xa7\xaa\x19>\
-\x18H\xc2/c\xcd\xf6bL\x9dC\xd9\x0e\xa0\xe6&\x08#@\xb1\xf6F\xb4p52p\x0b\x96\
-\xb5\x1b-\xe5r\xe3\x13\x9b1"A\x00\xec\xb2b\xca\x88 \x03\x92\x98\xdf\x8b9}\
-\x16k\xb6\x07e\xbb(\xa5\xc0\x0c\xe2\x05\xab1\x8bi\x94\x02\'\xdeJ)\xd5qIgX\
-\xe8T{\xb3\xe4\xa6W\x80\xdb\x89\xd0\xa0TX\xcd\x12k\x8ca\x03J\xd2\x98_~\xca\'\
-\x90>\x88\x91K#\r\x89\x1bn@+\x8c\xe3\xdbe\x84i\xe1\xe8\xb5\xc8\xec\x04B\n\
-\xec\xc5\xab\xf0\xa2\xb5\x00\x18\xe9\x93\x18\xd3\x83 \x14\xe5x3\xe5\xc6\xe5\
-\x0b^\xeb\xab\r=\xc2\xa9\x05\x97\x18BG\x98U\xe82\x87\x1e\x14\x18\xb1\x14\x19\
-\xab\x80\x07X\xa10mw\xac\xc7\xcb\xed$7\xd2C!s\r\tk\x14\xdd\x9c%\x92=\x83^\
-\xce0|r\x8a\x89\xa3Y<\xd7G\x0f\xea4nJ\xd0\x10\x1b\xa6X\\D!\xb8\x18\xa9<"\xb9\
-\xd3\xa8\xec\x0c\x03o\x8f\x90\x1b\xb2\x11\x1a\x98\x11\x83\xea\x1b\xa2\xd4\
-\x86F\xb1C\x1b\x11F\n]\xe6\xd1\x83`DS\x14\x02%\\<\xdc\xa0\x8b\xc3\x18\x115L4\
-\xd7\r\xa5\x19F\x0eO\x90\xe9\xc9\x03\xd0\xb8)I\xbc9\xc4\xd8\xb1\x19\xf4\xb0N\
-\xcd\x9a\x0c9\xdf!\x94\xeb\xf9Dg]x\x12\xb3j\x0b#\x07N3\xb4\xef\x00\xca\xf7PR\
-pz\xc7\xcfX\xfe\xc8\x03$\xb4\x01p\x8e\xce+?]\x95\x88\x05N\xd0\xf3\xf34\xa1Z\
-\x8b\xe4\xf5#Lvg\x998>\xcb\xb2\x07\x93\x84\xbc\x1f\xd1\xff\xcb0\xf1v\x87D\
-\xd5[\xd8\x91\xedH/K\xc0}\x89\xf4\x91 f\x95G\xbcC\xe0\xa8?B\tc\xc1\xeb}5\xa1\
-\x87\xd9\xb7\xe0\x12\x8d$\x82;\xd1\x99B\x08\x81P!L~\x89\xc7\x14J\x93x\xdem,Z\
-\xdbA\xef\xce\x7f\xc5\x1e\x1f&\x96\x8a\x91(\x8f"\n\r\x9c\xf9A\x17\x85\xf11\
-\x02\xf1\x18\xd24q\xf2\xd3\x8c\xecMSL\xb7\xd1\xf2\xe5\x95\x18\xe6It\'\x89f\
-\xb7\xd0\xfd\xe3\x1fP\x1c\x1f\xc3\x8cF0\xc2a\x10\x0e\xf9^\x97\xc6\xd5[\xd0\
-\xfcA\x04-\xe8L\xe2\xd9E\xec\xc9\x19\x8c\xa0\x85)4\xb4@\x8c\x92~\x00\xbc\x1c\
-\x01\xb7\x8d\xd3\xaf\xbcL~d\x84@"\x8e\xb4,&\x0e\x9egl\xbf\x8d\xef\x96\t\xd5\
-\xd7\x13\xdct\'\xba\x9dA~\x9as\xcd\x9d(\x05\xc1\xaa\x08U\xb5\x92\xfch?BJ\xc2\
-\xf1%\xe8\x81\x18\x86J\xe3\xcf+\xbf\x13(\xe9a\x1ak\xf1g\xba\x19;7\xce\xf4{!\
-\x82\xd5I\x16\xafo\xa5\xaaf98a\x0c\xff\x18\xf9\xf75\x16\xafj\xa1\xe0\x1dD\
-\x96|t\xad\x83\xf2\xd81\xe25u\xc4\xab\x1a\xc8s\x80\xca\xa9\xf0gC\x0f\xb1g\
-\xc1%\x82%\x08\xeeE\x17\x13\x08\tB\x04\t\xf0.\x8a>\x00\xa4f\x13\xac~\x80\x80\
-5\x8c=q\x08\x8d\xd5\x18\xa2\x83\xfe}/P\x1e?\xc4\xe2[\xb7Sw\xf36Pe\xdcb\x91\
-\xc1]\xffB\xa1o7\x85\xf4J"\xed\x8b\xc0\xafap\xef\x7f\xe1N\xbeG\xcb\x1d\x8f\
-\x91\xe8\xd8\x80\x0c\xf8hZ\x1c\xcf)\xa2\xf4)L\xbd\x13\xe1nA\x17\xe3\xb8\xd9\
-\xb3\x9c\xfb\x8fg\x90\xa6Dh\x92\xc6\xcdO\x13]\xb6\x0c\xe5e\xc9\x9c\xee\xc6\
-\x19;\xcc\xe2\xdb\x1e\xa2\xee\xe6m\x08\xdd\xc7\xb7a\xe8\xcd\x17\x989\xb3\x1f\
-C\xd7\x10f=\xba\x1bep\xefK\x9f\xeaT\xd6.b\xd7\xdeE\xac\xedi\xce\xbe\xf8\x0cB\
-\xf7h\xbf\xff)\x845\x85\xd4\xea\xe8\xdf\xf7\x93K\xe7\xd7V\x8f\xb2v"\xcc-\xe8\
-r\x1aS\x0e\xd3\xb2\xf5\xcf\x88\xb5\xaf\xc2\x17}\xa8\xc0\xbb\x90[F\xfd:\x93\
-\xfe\xd7\xff\x93\xd2\xcc\x97\t\x06\x8b(/\xc9to7:\xc3\xa4V<\x02\xa1\x01\x82\
-\xe2\r\xa8\x0c\x91\xcf\x84\x1e\x18\xbb\x02\x1fn\xba\x86\x17\x88\xa0\xd9\x12)\
-\x05\xf8\x11\xac)\r\xdc9\xb7\xb2\xe2\xb8~\x18\xb3$0\xbd0B\xc5\xa0\xecc\xf7\
-\xf5\x13\n6R\xb7\xe1Q\xb4\xf2N\xa4\xd7\x854\x1f\xa2n\xed\xc3\x0c\xf6\x9c\xa4\
-\xd4\xdbKl\xe9\xe3x\x9e\xc0\xee9G(PG\xcd\x9a\x87\x90\xee\x8f\x90\x85} \x13hB\
-\x07g\x1aJI<\x13\xb4\x12\xe8E\xb0B\tt+\x8a44\xac`\n\xcduQ\xb2\x95L\xe7\xb7\t\
-\x05\xea\xa9[\xbf\x1d\xdd\xf9)\xa2t\x14\xdfz\x92\x9a\x95\xf7Q<\xd9\x85\xee\
-\xe8\x08\x95\x00/pign\x16\xf4\x0c\x9e\xf55L\x15A*\x81\xa6W\xa1\xd9/\xe3\x19O\
-\xce+\xbf\xaa\x96\xedh\x85\xbdxV\x0c\xcd\xd6\x08\x85\x17\x13k\xdd\x82\xee|\
-\x07\x9c\xa3\x90\xf5Pz\x89\xaae[\tXo0\xd5y\x90\xa6\xed\x7f\x8a\xe7\xe7\xc9\
-\x1ey\x91D\xd3j\xcc\xe4Rd~\x17d\x81\xca\x19\xccgBg\xf7\xd2\x85\xb7\xc4ja\xe3\
-(b$\x08\x12\xb0G\xe1@-\xcc(0,\xd4\x86\r\x94\xfa\xdfE\x9d\na\xb5\xb7"g&\xf1D\
-\n\xef\x8c@\x8f5B!\x80<8\x04\x85 Zc\x1a\xab\xe16\xb4\x91F\x18\x8f\xa1\n\tT\
-\xb1\x88\xfb>\x18\x89z\xfcY\x03\xfd\xf0$\x14>\xbaU\\\r\xb1\x1aX\x97F\x8c\x04\
-\xb0\x9cvZ\xb7\xff\x05Z4\x02\xbe\x8f?1\x84<z\x16\xa7y\x11\xce\x89\x12F\xb2\
-\x11QN \x0e\xcc@.\x88l\x19\xc4\xa8\xbf\tm\xb8\x1e\xe1%\xc1K\xa0r\xea\xd2\xce\
-\xff\xf1\xae\x1fB\x8e\x04\x10R@)\r\xddI\xfc\xa5r^\xf9\x91O\xc0\xd1&\xd8\x10\
-\x87\x91\xd8\xdc\x12\xd5OAg\x042\xcd\x00\x88@\x19ys\x94H\xfcf\xb2{\xdf\xc5\
-\xbe\xa9\x80\x9dNS>\xe6R\x7f\xdb\xbd0\x92\x87\x03\x01\xf0\xaf@\xad\xaf2\xf4\
-\xa1\xe7\x9e\\p\x89\xd1*HtLP8\xb5\x04\x89\x86\x9f\x9fbf\xffV\x90\ns\xad\x8f\
-\x9eu\x19\xfa\xe60\x85\xd3\xb7P\xf3@#\xc5#6\xe6\xaa<\xaa\xb4\x89\xec\x99\x0c\
-^v\x1a\'\xf48\xf6{.\xa1e\x16\xb3\x9d\x03\xcc\xec\xe9 \xd8\xd0\x80?=\x8d\x08\
-\x01\xe5[\xc9\xec\x19\xc5yt\x94\x92\xfa=\xec=.z\x93\x8eq\x8d\x86}\xb8\x8c\
-\x97.\x92X>6\x17\x83\xd0@\x14\xc8\xfc\xa3\xc0\x1d\x10\xb8C5h\r\r$\xff\xb6\
-\x84\x97YO\xa1;Gyr\x04\'\xf0\x08\xc5\xfd6\xe1e\x01f\xf7\xf52\xb3\xa7\x83\xd0\
-5)\xfcB\x1a!\xfdK:K\xfbl\x8c%>\x89\xeb\'\xc8\x1foG \xf1\xf3\xe3d^[G\xd5\xd3\
-\x85y\xe5\xe7Nd\x99\xda\xf1E\xe27\x0cS\xe8n\x9a\xdb\xe6\xcd\x8f0\xf9\xfd\xbb\
-(\xf7\x94/\xf4q\xa8?@l\xed\xc3\x0c=?\xcb\xc9?\xd9\x89*\xbaX\rwa-\xdeH\xe6\
-\x9b\xc3\x14\x7f\xf1\xfb\x0b^\xe7\xab\x11\xfd\x955\x1b\x17\\R]?\xcb\xbd\xec\
-\xe5|\xaa\x1a\xa7(\xa9\x1d\x1a\x82\xfb-\xf2S\x90\x1dq\xe8\xf9\x86M&\x97\xe2\
-\xba?\xac\xc7X^\xe6\xcd\x1d\xcd\xdc\x10\x1b \xfaD;G\xfe\xfe\x0c#\xcf\xee\xa5\
-\xed\xceE\xc8\xd5AJ\'\xf2\x9c~#C\xb1\xb5\x9d\xba\xcdq\xba\xfb\x1c\x12\xa9,\
-\xe1\xc7\xda8\xfc\x0f>\xe3\xdf\xed\xa4\xed\x8ez\xd4]Qt\x0bt\xc3%\xf9\x95\x08\
-]\xbbZ\xb9]\xee\xe2|*\tR\xa3\x9d!\xde\x88\xdc\xc7d2\tI\x90\x9a\xe2K\xfd]\xe8\
-\x0f\xb4r\xe4{\xfd\x14\xbe\xdfE\xe3\xfaZ\xfc\x8d&\x83\x1f8sMm$\xeb,Z\xdd~\
-\xb2\xd3\xc6%\x9doGW#\xb0\xb9W\xbcJoM5J\x1a\xb4\x8a4\xbfH\xaeaM_\xdf\xfc\xf2\
-\x1bt9\xbdt\x19\xf7\xa8\x83\xf4\'c\x08)\xb9V\r\xb0\xfb\xba\xf5L\xc6\xc3\x17\
-\xfa86+\xd8\xd6\xec2u\xfbzFO\x0cCHg\xed\xc3\x9b\x99\xc9U\xf1\x8a\x13\xc7^S\
-\xf9\xf6\xf8M\xd0O\xfb\x85\x05\x974\xfa3\xd8v\x1f\x13N\x89\xc9q\x9d\x81\xaf\
-\xa7A\xd3\xb1\x1d\x03%4\x10\x92%+\\:~7\xcf\xa1\xa3m\xbc\xd5\x1bbL\x0f\xf3\
-\xc4\x83c,\xdejp\xe4g9N=\x7f\x0e%5|a\x10NHV\xdc#1kFym\xc7\n\x1ak}\x1e\xde6N\
-\xdd\x174N\xef\xcfs\xea[}\x17\xdaV7I\xee\xfb+\x83\t-\x88]:\xcbD9\x8c\x15\x95\
-8\xf6\x18\xe7\xca9F\xfd\x0f\x0e\xd6|p;\x13<\xba-Gx\x95\xe4\xf0\xbe\t\xba\xde\
-\xc9\xa0\xa4F\xb4\xd6`\xd1u\x92\xe1\x92$\x18\xc9c\x17\xcf\xf1\xce\x91U\xfc\
-\xce\xe6Ow\x0e\xebM8\x8eO\xa9\xd0\xc3\x88]M0\xe6P\xb6\'8S\xca3st~\xf9\xbd\
-\xbec\x05R\xce\xe0\x94\xce0\xe5\x14\xb0\xaa\x0c\xca\xf6Y\xce\x95\xafe\xd4\
-\xff\xc8a\xe584\x9d\x9a\xa5ns\x13\'N\x0e\x11J\x984l\x8c\xd0\xf9\xee\x14Gs\
-\xc1\x05\xaf\xf1\xd5\x8a>8\xb8\xf0\x07\x85\xf9l\x9eR\xbe\x87\xf6\x9b\x04\xe5\
-\xce\x10\xb6c\xe0\x0b\x9dHBR\xdb\xec\xd0\xb2\xdc\xa6yy\x89}\x9dm\xbc\xf8J\
-\x13\xc5R\x9a\xf4\x90BzA\xee\xdfz\x98\xeaV\x83\xb3\x87\x82\x14s\x1aVTp\xe3\
-\x17\xb3\x84\xab\xe1[\xff~\x0f\xc7\xba\xb3\x18\xba\x86\xb2u\x1e|\xbc\x9bkn\
-\xd18\xb67\xc2\xf4\x84E\xac^\xb1\xea\x0bYz\xfbRt\x1d^\xc6\x97\xd6\xf6\xb0du\
-\x84\xaaZ\x9f\xf4\xa0\xc5\xf1\x93\xb3\xd8N\xe9B\x9c\xe9\xb4\xa2:\x02[\x9f:\
-\xc3\xf9c\x01N\xbc\x13B3\x05\xeb\xb6fi\xbe&\xcf\x81]I\xa2I\x8fsg\xab\xd8\xf1\
-\xdaF\xb2S\x97p\x1e\xca\x11\xab\xcaR,\xf4\xd2\xb2r\x8a\x86\xb6"=\xe7\xa2\xbc\
-w<\x8f\x80y\xe7W\x9b\xca`\x17\x0e\xd3\xbcN\'V\xe7380\xc1\xf1\x13S\xd8N\xf6\
-\xa2~\xde\xdf\xe5\xf2\xe0\x16\x87\xbcS\xa2\xa9=\x81\x90\x13\xbc\xb1\xbb\xc4\
-\xe0\xa0\\\xf0\x1a_\xad\x88\x8d\x1b__\xf0\xb9W\x08\xd8\xb6\xb9\x9b\xdb\xd7\
-\xf5\x92J\x16\x11rN\x99\xcd\x9adf-\xc6\xa6"\xfc\xfcW\xcb8w\xbe\x9a\xb2+/zny\
-\xfb\x0c\x9bV\x0c\xd3\xd28\x8b\xf2\x14>\x1a\xdd\xbd\t\xbaN\xd4\xd1;\x10\xb9\
-\xd0VJ\xc5\xcak\xa7\xd8\xbcv\x88T\xbc@\xb9,QR\xe7\xbd\xf7\xab\xd9\xdd\xd9H.o\
-p\xf7\xed\xc3l\xec\x98\xa2\xeck\xbc\xfaV#GNU},\xd6\x80\xe5q\xeb\xfa1nZ9\x8c\
-\xf4]\xa4\x06\xa3\x99\x08g\xcfW\xb1i\xc50 x\xf5\xad\xa5\x1c9U}Ig6g \x04\xdc}\
-\xfb(\x1b:&q}y\x91w\xbe\xf9\xcd\xbd\xa3\x8fM\x1d\xc3\x94}\x8dW\xdej\xe3\xc8\
-\xa9\x8b\xef)\x18:\xfc\xcdWs\x94\x07\x86y\xfd;}|\xe5\x9f:\xe8\x1d\x8f\xf2\
-\xf5g#T\xae\xc4\xfd\xe6\x88E\x8b\xbe{\xc5\xbaO\x08\x08\x05?\xd4\xb9.\xd8Ne\
-\xdb\xf1r\xb0aM\x99\xef=;\xcds\x7f9\x88\xeb\t\xfe\xfc\x9f\x17\xf1\xd4W\xe3\
-\xbc\xbd\xff\xca\\%\xb8Z\xd1\x87\x86\x86>\xef\x18*\\\x06n\xd8>\xc9\xf4p\x86\
-\xe3\x87\xf2<\xf6L\x80\xee\x936\xaf\xef\\\xc4l\xb6\xb2\xbc\xfam\xa8\xf4\xdeU\
-B8h\x13\x8d\xe6y\xe0\x8fa\xf3\xdd6/\xbc\x14\xaa\x0c\x8e\xcb\x80\xfey\x07P\
-\xe1\xf2\xf0\xfc\xbf5\x124\xeb\xa8\x8e\xf9<\xfb-\xc9\xcb?Y\x98\xdb\x91\xff\
-\xdf\x10\xf0\xb5\xca\'\\\x85\n\x9f@e\x0e\xaeP\xe1S\xa8\x0c\x90\n\x15>\x85\
-\xff\x06iu\x96sI3\xf6x\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory038Bitmap():
- return wxBitmapFromImage(getDocFactory038Image())
-
-def getDocFactory038Image():
- stream = cStringIO.StringIO(getDocFactory038Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory038')
-catalog['DocFactory038'] = ImageClass()
-catalog['DocFactory038'].getData = getDocFactory038Data
-catalog['DocFactory038'].getImage = getDocFactory038Image
-catalog['DocFactory038'].getBitmap = getDocFactory038Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory039Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rU\
-IDATx\x9c\xed\x9bi\x8c]\xd5}\xc0\x7f\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\
-\x8c\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12j\xb3\x94\xcdei\xa1\xaaZEUA\xadh\xfb!\
-\x1f\xa3*\xaaTuA\x8d" KQ\xd5\x8a\x92\xd28\t\x84\xa0\xd8\x90\x18\x1b\x1cg\xbc\
-a\xbc\x8e\xb1=3\x9e\xe5\xcd>\xf3f\xdez\xef\xbb\xf7\x9e~\x18jp\t\xb6\x0b~\xa5\
-\x85\xf7\xfb\xf8t\xee\xff\xf7\xff\x9f\xf3\x8e\xce\xb9\xf7\xe8\x88\xbf\xf9\
-\x96RT\xa9R\xe57\xa2\x87j?\xeb\x14\xaaT\xf9\xbf\x8b\x1e\xacN\x90*U>\x16=\x9c\
-\xa8\xac@\xa00\xb0\x91x\x17\xfc\xeeb\xe0bVV\xfe\xe1\x1c\x84\x8d\xf6\xdfrP@Y\
-\x05\xf0\xd0*\xe2\x95\xf8\x98\xa2\x84\x8f\xa4\xac,\x14\xa2"\x9e*\x95C\x0f\
-\xc5+\x17\\\xe0\xd3T\xd8E\xd4=\x87\xff\xa1\xff\xa6\x94 M\x9d\xbc\x1b\'\x17\
-\xecdN_\x84K\xa0B9x\xb4\xd8oP\xe3\xf5]\x90\x03\x80n)l\xad\x8e^m\x0beBW\xd4\
-\xab\xe1\xb0\xd8\xfd\x19\x81\xf2\x18\x9a!\x98\x90\xcbH\xcb\x1b\xaf\xa8\xa3J\
-\xe5\xd1\xc3\x15\x9c \x16\xe3\xb4\xe8\xcfp\xfa\xd5zf\x87#\x80\x00)\x91\xba"\
-\\W$\xd2X\xa4c\xf94\x8e\xb5\x88\x81\xe0_\xe2\xd0p\xc5s\x082JK\xf1EN\xfe$\xce\
-l:\x00B\x80\x90\x00\xc4\x9am\x96\xdd\xff\x16E\xa3\x91)n\xbe\xa2\xde\x10\xa34\
-\xd9?\xe2\xd8\x8fR\xc4\x16\x96h[s\x88B\xf0Z\xcaT\xb0\xc3\xab\\q\xf4H\x05\xc7\
-+\xa4\x04\tm\x15\xc2/"5E0.0\x02\x02\x85\xa0\x94\x0f2~R\x92\x1foe\xf9]\x12\
-\xd3\xf85\x83\xe1{.\xd8\x86\x08\xdfC\xb8e\x84\xef\xa1\xa4\x86\xd2\r\x94\xfc\
-\xcd\xdb!\xe1:H\xb7\x0cpA\xdb\x90\xd2\t\x8b\xabQn\x01\xa9q>\x07\x10\xa4\x16\
-\x9b\x84B]\x98\xc1\x16"\xf2\xa3q|\xddDi:\xd2)\x82\x90\xf8\x865?\xc1.\xe1\x14\
-(\xe2~\x91p~)\x92\x12\xd9t\x8ck\xa2\x16\r\xa1I2\xf2\x83\x0e\xbf\xac\xfa\x94\
-\xfa\xc0o\x06\xe6\x9d^\x19_\xb7\xe6]e{\xbe\x99\x19\xf8\xe83\x80o\x06/\xc8\
-\xb9\xca\xff\x0c\xbd\xc6\x1c\xaaXpK9`\xac\xc3\xd0\xdf"\x96r\xb9\xfe\xf7nB\
-\x0b\x05A\xf9\x94\xf36C\x87\xfa\x18;\x9e\xe6\xdc\xfe\x14\xd7\xdc\x11\xc51\
-\xceP\x10A\x84\xf203\xbd\x98\x99^\xbcB\t\x81\x9a_|\x02\x01\xec\xd4R\x9c\x9aV\
-x\x7f"\t\xbf\x8c5\xd7\x871}\x16e;\x80\x9a_ \x8c\x00\xc5\xfa\xeb\xd1\xc2\xb5\
-\xc8\xc0MX\xd6N\xb4\x94\xcb\xf5\x8fm\xc4\x88\x04\x01\xb0\xcb\x8ai#\x82\x0cHb\
-~\x1f\xe6\xcc\x19\xac\xb9^\x94\xed\xa2\x94\x023\x88\x17\xac\xc5,\xa6Q\n\x9cx\
-;\xa5T\xd7%\x9da\xa1S\xeb\xcd\x91\x9bY\x06n7B\x83Ra%\x8b\xacqF\x0c(I\xe3\xf2\
-\xeaS>\x81\xf4\x01\x8c\\\x1aiH\xdcp\x13Za\x02\xdf.#L\x0bG\xafGf\'\x11R`/\\\
-\x81\x17\xad\x07\xc0H\x9f\xc0\x98\x19\x02\xa1(\xc7[)7/\xad\xd8\x18\x7f\xde\
-\xd1#\x9c\xacXpC\xe8\x08\xb3\x06]\xe6\xd0\x83\x02#\x96"c\x15\xf0\x00+\x14\
-\xa6\xe3\xb6\xb5x\xb9\xed\xe4F{)d\xae"a\x8d\xa1\x9bsD\xb2\xa7\xd1\xcb\x19FNL\
-3y$\x8b\xe7\xfa\xe8A\x9d\xe6\r\t\x9ab#\x14\x8b\x0b(\x04\x17"\x95G$w\n\x95\
-\x9de\xf0\xadQr\xc36B\x033bP{]\x94\xfa\xd0\x18vh=\xc2H\xa1\xcb<z\x10\x8ch\
-\x8aB\xa0\x84\x8b\x87\x1btq\x18\'\xa2F\x88\xe6z\xa04\xcb\xe8\xa1I2\xbdy\x00\
-\x9a7$\x89\xb7\x86\x18?:\x8b\x1e\xd6\xa9[\x95!\xe7;\x84r\xbd\x1f\xebl\x08Oa\
-\xd6lbt\xdf)\x86\xf7\xecC\xf9\x1eJ\nNm\xfb9K\x1f\xba\x8f\x846\x08\xce\x91\
-\xcb\xaaOW%b\x81\xe3\xf4\xfe"M\xa8\xde"y\xed(S=Y&\x8f\xcd\xb1\xe4\xfe$!\xef\
-\xc7\x0c\xfc*L\xbc\xd3!Q\xf3&vd+\xd2\xcb\x12p_$}8\x88Y\xe3\x11\xef\x128\xea\
-\x0fP\xc2\xa8\xd88\x7f\x9e\xd1\xc3\xec\xa9Xp\x8d$\x82\xdb\xd1\x99F\x08\x81P!\
-L~\x85\xc74J\x93x\xde-,X\xddE\xdf\xf6\x7f\xc6\x9e\x18!\x96\x8a\x91(\x8f!\nM\
-\x9c\xfe\xe1~\n\x13\xe3\x04\xe21\xa4i\xe2\xe4g\x18\xdd\x9d\xa6\x98\xee\xa0\
-\xed\xab\xcb1\xcc\x13\xe8N\x12\xcdn\xa3\xe7\'?\xa481\x8e\x19\x8d`\x84\xc3 \
-\x1c\xf2}.\xcd+7\xa1\xf9C\x08\xda\xd0\x99\xc2\xb3\x8b\xd8S\xb3\x18A\x0bShh\
-\x81\x18%}\x1fx9\x02n\x07\xa7^~\x89\xfc\xe8(\x81D\x1ciYL\x1e8\xc7\xf8^\x1b\
-\xdf-\x13jl$\xb8\xe1vt;\x83\xbc\x98s\xd5\xed(\x05\xc1\x9a\x085\xf5\x92\xfc\
-\xd8\x00BJ\xc2\xf1E\xe8\x81\x18\x86J\xe3_V}\xc7Q\xd2\xc34V\xe3\xcf\xf60~v\
-\x82\x99wC\x04k\x93,\\\xdbNM\xddRp\xc2\x18\xfeQ\xf2\xefi,\\\xd1F\xc1;\x80,\
-\xf9\xe8Z\x17\xe5\xf1\xa3\xc4\xeb\x1a\x88\xd74\x91g\x1f\xd5\xd3\xe0O\x86\x1e\
-bW\xc5\x82\x0b\x16!\xb8\x1b]L"$\x08\x11$\xc0;(\xfa\x01\x90\x9aM\xb0\xf6>\x02\
-\xd6\x08\xf6\xe4A4Vb\x88.\x06\xf6<Oy\xe2 \x0bo\xdeJ\xc3\x8d[@\x95q\x8bE\x86v\
-\xfc\x13\x85\xfe\x9d\x14\xd2\xcb\x89t.\x00\xbf\x8e\xa1\xdd\xff\x81;\xf5.m\
-\xb7=B\xa2k\x1d2\xe0\xa3iq<\xa7\x88\xd2\xa71\xf5n\x84\xbb\t]L\xe0f\xcfp\xf6\
-\xdf\x9eB\x9a\x12\xa1I\x9a7>It\xc9\x12\x94\x97%s\xaa\x07g\xfc\x10\x0boy\x80\
-\x86\x1b\xb7 t\x1f\xdf\x86\xe17\x9eg\xf6\xf4^\x0c]C\x98\x8d\xe8n\x94\xa1\xdd\
-/^\xd4\xa9\xac\x1d\xc4\xae\xbe\x83X\xc7\x93\x9cy\xe1)\x84\xee\xd1y\xef\x13\
-\x08k\x1a\xa950\xb0\xe7\xa7\x97\xae\xaf\xa3\x11emG\x98\x9b\xd0\xe5\x0c\xa6\
-\x1c\xa1m\xf3\x9f\x10\xeb\\\x81/\xfaQ\x81w \xb7\x84\xc65&\x03\xaf\xfd;\xa5\
-\xd9\xaf\x12\x0c\x16Q^\x92\x99\xbe\x1etFH-{\x08B\x83\x04\xc5\xebP\x9d"\x9f\
-\x08=0^\xc1\x178]\xc3\x0bD\xd0l\x89\x94\x02\xfc\x08\xd6\xb4\x06\xee\xbcSYq\\\
-?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1\xfb\x07\x08\x05\x9biX\xf70Zy;\xd2\xdb\x8f4\
-\x1f\xa0a\xf5\x83\x0c\xf5\x9e\xa0\xd4\xd7Gl\xf1\xa3x\x9e\xc0\xee=K(\xd0@\xdd\
-\xaa\x07\x90\xee\x8f\x91\x85= \x13hB\x07g\x06JI<\x13\xb4\x12\xe8E\xb0B\tt+\
-\x8a44\xac`\n\xcduQ\xb2\x9dL\xf7w\x08\x05\x1aiX\xbb\x15\xdd\xf9\x19\xa2t\x04\
-\xdfz\x9c\xba\xe5\xf7P<\xb1\x1f\xdd\xd1\x11*\x01^\xe0\xd2\xce\xdc\x1c\xe8\
-\x19<\xeb\x1b\x98*\x82T\x02M\xafA\xb3_\xc23\x1e\xbf\xac\xfaj\xda\xb6\xa2\x15\
-v\xe3Y14[#\x14^H\xac}\x13\xba\xf3]p\x8e@\xd6C\xe9%j\x96l&`\xbd\xcet\xf7\x01Z\
-\xb6\xfe1\x9e\x9f\'{\xf8\x05\x12-+1\x93\x8b\x91\xf9\x1d\x90\x05\xaag0\x9f\
-\x08\x9d\x9d\x8b+\x17=V\x0f\xeb\xc7\x10\xa3A\x90\x80=\x06\xfb\xeaaV\x81a\xa1\
-\xd6\xad\xa34\xf0\x0e\xead\x08\xab\xb3\x1d9;\x85\'Rx\xa7\x05z\xac\x19\n\x01\
-\xe4\x81a(\x04\xd1\x9a\xd3XM\xb7\xa0\x8d6\xc3D\x0cUH\xa0\x8aE\xdc\xf7\xc0H4\
-\xe2\xcf\x19\xe8\x87\xa6\xa0\xf0\xe1O\xc5\xb5\x10\xab\x835i\xc4h\x00\xcb\xe9\
-\xa4}\xeb\x9f\xa1E#\xe0\xfb\xf8\x93\xc3\xc8#gpZ\x17\xe0\x1c/a$\x9b\x11\xe5\
-\x04b\xdf,\xe4\x82\xc8\xb6!\x8c\xc6\x1b\xd0F\x1a\x11^\x12\xbc\x04*\xa7.\xed\
-\xfc/\xef\xdaa\xe4h\x00!\x05\x94\xd2\xd0\x93\xc4_,/\xab>\xf2\t8\xd2\x02\xeb\
-\xe20\x1a\x9b\xdf\xa2\xfa)\xe8\x8e@\xa6\x15\x00\x11(#o\x8c\x12\x89\xdfHv\xf7\
-;\xd87\x14\xb0\xd3i\xcaG]\x1ao\xb9\x1bF\xf3\xb0/\x00~\x05\xc7\xf8s\x8e>\xfc\
-\xcc\xe3\x15\x0bn\xb4\x0b\x12]\x93\x14N.B\xa2\xe1\xe7\xa7\x99\xdd\xbb\x19\
-\xa4\xc2\\\xed\xa3g]\x86\xbf=B\xe1\xd4M\xd4\xdd\xd7L\xf1\xb0\x8d\xb9"\x8f*m \
-{:\x83\x97\x9d\xc1\t=\x8a\xfd\xaeKh\x89\xc5\\\xf7 \xb3\xbb\xba\x0865\xe1\xcf\
-\xcc B@\xf9f2\xbb\xc6p\x1e\x1e\xa3\xa4~\x07{\x97\x8b\xde\xa2c\\\xa5a\x1f*\
-\xe3\xa5\x8b$\x96\x8e\xcf\xe7 4\x10\x052\x7f/p\x07\x05\xeep\x1dZS\x13\xc9\
-\xbf.\xe1e\xd6R\xe8\xc9Q\x9e\x1a\xc5\t<Dq\xafMxI\x80\xb9=}\xcc\xee\xea"tU\n\
-\xbf\x90FH\xff\x92\xce\xd2\x1e\x1bc\x91O\xe2\xdaI\xf2\xc7:\x11H\xfc\xfc\x04\
-\x99W\xd7P\xf3d\xe1\xb2\xeas\'\xb3Lo\xfb2\xf1\xebF(\xf4\xb4\xcc\x7f\xe6\xcd\
-\x8f2\xf5\x83;(\xf7\x96\xcf\xf7qh @l\xf5\x83\x0c?;\xc7\x89?\xda\x8e*\xbaXMw`\
--\\O\xe6\xdb#\x14\x7f\xf9\xbb\x15\x1b\xdf/\x02\xfa\xcb\xab\xd6W,xm\xe3\x1cw\
-\xb3\x9bs\xa9Z\x9c\xa2\xa4~x\x18\xee\xb5\xc8OCv\xd4\xa1\xf7[6\x99\\\x8ak~\
-\xbf\x11ci\x997\xb6\xb5r]l\x90\xe8c\x9d\x1c\xfe\xdb\xd3\x8c>\xbd\x9b\x8e\xdb\
-\x17 W\x06)\x1d\xcfs\xea\xf5\x0c\xc5\xf6N\x1a6\xc6\xe9\xe9wH\xa4\xb2\x84\x1f\
-\xe9\xe0\xd0\xdf\xf9L|\xaf\x9b\x8e\xdb\x1aQwD\xd1-\xd0\r\x97\xe4\xd7"\xec\
-\xdf\xd1\xce\xadr\x07\xe7RI\x90\x1a\x9d\x0c\xf3z\xe4\x1e\xa6\x92IH\x82\xd4\
-\x14_\x19\xd8\x8f~_;\x87\xbf?@\xe1\x07\xfbi^[\x8f\xbf\xded\xe8}g\xae\xa5\x83\
-d\x83E\xbb;@v\xc6\xb8\xa4\xf3\xad\xe8J\x046w\x8bW\xe8\xab\xabEI\x83v\x91\xe6\
-\x97\xc9U\xac\xea\xef\xbf\xbc\xfa\x86\\N-^\xc2]\xea\x00\x03\xc9\x18BJ\xaeV\
-\x83\xec\xbcf-S\xf1\xf0\xf9>\x8e\xcd\t\xb6\xb4\xbaL\xdf\xba\x96\xb1\xe3#\x10\
-\xd2Y\xfd\xe0Ffs5\xbc\xec\xc4\xb1WU\xdf=>\r\xfa)\xbfP\xb1\xe0\xcd\xfe,\xb6\
-\xdd\xcf\xa4SbjBg\xf0\x9bi\xd0tl\xc7@\t\r\x84d\xd12\x97\xae\xdf\xces\xf0H\
-\x07o\xf6\x85\x18\xd7\xc3<v\xff8\x0b7\x1b\x1c\xfey\x8e\x93\xcf\x9eEI\r_\x18\
-\x84\x13\x92ewI\xcc\xba1^\xdd\xb6\x8c\xe6z\x9f\x07\xb7L\xd0\xf0%\x8dS{\xf3\
-\x9c|\xae\xff|\xdb\xda\x16\xc9=\x7fa0\xa9\x05\xb1Kg\x98,\x87\xb1\xa2\x12\xc7\
-\x1e\xe7l9\xc7\x98\xff\xfe\xc1\x9a\x0fnw\x82\x87\xb7\xe4\x08\xaf\x90\x1c\xda\
-3\xc9\xfe\xb73(\xa9\x11\xad7Xp\x8dd\xa4$\tF\xf2\xd8\xc5\xb3\xbc}x\x05\xbf\
-\xb5\xf1\xe2\xce\x11\xbd\x05\xc7\xf1)\x15z\x19\xb5k\t\xc6\x1c\xca\xf6$\xa7Ky\
-f\x8f\\^}\xafm[\x86\x94\xb38\xa5\xd3L;\x05\xac\x1a\x83\xb2}\x86\xb3\xe5\xab\
-\x19\xf3?tX9\x01-\'\xe7h\xd8\xd8\xc2\xf1\x13\xc3\x84\x12&M\xeb#t\xbf3\xcd\
-\x91\\\xb0bc\xfbEA\x1f\x1a\xaa\xdcAa>\x9b\xa7\x94\xef\xa5\xf3\x06A\xb9;\x84\
-\xed\x18\xf8B\'\x92\x90\xd4\xb7:\xb4-\xb5i]ZbOw\x07/\xbc\xdcB\xb1\x94&=\xac\
-\x90^\x90{7\x1f\xa2\xb6\xdd\xe0\xcc\xc1 \xc5\x9c\x86\x15\x15\\\xff\xe5,\xe1Z\
-x\xee_\xef\xe2hO\x16C\xd7P\xb6\xce\xfd\x8f\xf6p\xd5M\x1aGwG\x98\x99\xb4\x885\
-*V|)K_\x7f\x8a\xfd\x87\x96\xf0\x95\xd5\xbd,Z\x19\xa1\xa6\xde\'=dq\xec\xc4\
-\x1c\xb6S:\x9fg:\xad\xa8\x8d\xc0\xe6\'Ns\xeeh\x80\xe3o\x87\xd0L\xc1\x9a\xcdY\
-Z\xaf\xca\xb3oG\x92h\xd2\xe3\xec\x99\x1a\xb6\xbd\xba\x9e\xec\xf4%\x9c\x07s\
-\xc4j\xb2\x14\x0b}\xb4-\x9f\xa6\xa9\xa3H\xef\xd9(\xef\x1e\xcb#\xe0\xb2\xeb\
-\xabOe\xb0\x0b\x87h]\xa3\x13k\xf0\x19\x1a\x9c\xe4\xd8\xf1il\'{A?\xef\xdd\xef\
-r\xff&\x87\xbcS\xa2\xa53\x81\x90\x93\xbc\xbe\xb3\xc4\xd0\x90\xac\xd8\xd8~Q\
-\x10\xeb\xd7\xbfV\xb15X\x08\xd8\xb2\xb1\x87[\xd7\xf4\x91J\x16\x11r^\x95\xcd\
-\x9ad\xe6,\xc6\xa7#\xfc\xe2\xd7K8{\xae\x96\xb2+/xni\xe7,\x1b\x96\x8d\xd0\xd6\
-<\x87\xf2\x14>\x1a=}\t\xf6\x1fo\xa0o0r\xbe\xad\x94\x8a\xe5WO\xb3q\xf50\xa9x\
-\x81rY\xa2\xa4\xce\xbb\xef\xd5\xb2\xb3\xbb\x99\\\xde\xe0\xce[GX\xdf5M\xd9\
-\xd7x\xe5\xcdf\x0e\x9f\xac\xf9H\xae\x01\xcb\xe3\xe6\xb5\xe3\xdc\xb0|\x04\xe9\
-\xbbH\r\xc62\x11\xce\x9c\xaba\xc3\xb2\x11@\xf0\xca\x9b\x8b9|\xb2\xf6\x92\xce\
-l\xce@\x08\xb8\xf3\xd61\xd6uM\xe1\xfa\xf2\x02\xef\xe5\xd67\x1f\xa3\x9f\r]#\
-\x94}\x8d\x97\xdf\xec\xe0\xf0\xc9\x0b\xef\'\x18:\xfc\xd5\xd7s\x94\x07Gx\xed\
-\xbb\xfd|\xed\x1f\xba\xe8\x9b\x88\xf2\xcd\xa7#T\xaf\xc2}z\xc4\x82\x05\xdf\
-\xabx7\n\x01\xa1\xe0\x07\x1a\xd7\x05\xdb\xa9~v\xbc\x12\xac[U\xe6\xfbO\xcf\
-\xf0\xcc\x9f\x0f\xe1z\x82?\xfd\xc7\x05<\xf1\xf58o\xed\xfd\xdf\xb9J\xf0yG\x1f\
-\x1e\x1e\xfe\xacs\xa8\xf2)\xb8n\xeb\x143#\x19\x8e\x1d\xcc\xf3\xc8S\x01zN\xd8\
-\xbc\xb6}\x01s\xd9\xea\xf6\xeaJP\xed\xc5\xff\xe7\x84\x836\xd1h\x9e\xfb\xfe\
-\x106\xdei\xf3\xfc\x8b\xa1\xea\xe4\xb8\x82\xe8\x9fu\x02U>\x1d\xcf\xfeK3A\xb3\
-\x81\xda\x98\xcf\xd3\xcfI^\xfaienG~Q\x11\xf0\x8d\xea\xab\\\x95*\x1fCu-\xaeR\
-\xe5"T\'H\x95*\x17\xe1?\x01N\t\x96s06i\xb5\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory039Bitmap():
- return wxBitmapFromImage(getDocFactory039Image())
-
-def getDocFactory039Image():
- stream = cStringIO.StringIO(getDocFactory039Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory039')
-catalog['DocFactory039'] = ImageClass()
-catalog['DocFactory039'].getData = getDocFactory039Data
-catalog['DocFactory039'].getImage = getDocFactory039Image
-catalog['DocFactory039'].getBitmap = getDocFactory039Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory040Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rT\
-IDATx\x9c\xed\x9bi\x8c]\xe5y\xc7\x7f\xef{\xb6\xbb\xce]\xe6\xcej\xcf\x8c=3\
-\x06\x0cc\x1b\xeffubH\xa8\xcdR6\x97\xa5\x85\xaaj\x15U\x05\xb5\xa2\xed\x87|\
-\x8c\xaa\xa8R\xd5\x055\x8a [Q\xd5\x8a\x92\xd28\t\x84\xa0\xd8\x90\x18\x1b\x1c\
-g\xbca\xbc\x8e\xb1=3\x9e\xe5\xce>sg\xeez\xce=\xe7\xbc\xfd0\x14pYl\xc1\x9d\
-\xd0\xca\xf7\xf7\xf1\xea=\xcf\xffY\xee\xa3w\xd3+\xfe\xee[JQ\xa5J\x95\x8fE\
-\x0f\xd5~\xd1.T\xa9\xf2\x7f\x17=Xm\x90*U>\x11=\x9cX\x18\xc3\x02\x85\x81\x8d\
-\xc4\xbb\xe8w\x17\x03\x17saD?\xce\x07a\xa3\xfd/\x1f\x14PV\x01<\xb4\x05\xd1\
-\x95\xf8\x98\xa2\x84\x8f\xa4\xac,\x14bAt\xaa,<z(^y\xa3\x02\x9f\xa6\xc2\x1e\
-\xa2\xee\x05\xfc\x0f\xfd7\xa5\x04i\xea\xe4\xdd8\xb9`\'s\xfa\x12\\\x02\x95w\
-\x00\x10x\xb4\xd8\xafS\xe3\xf5]\xe4\x03\x80n)l\xad\x8e^m\x1beB\x15\xd5\xd5pX\
-\xea\xfe\x9c@y\x0c\xcd\x10L\xc8\x15\xa4\xe5\x8d\x15\xd5\xa8\xf2\xdbC\x0f/@\
-\x83X\x8c\xd3\xa2?\xc3\xd9W\xea\x99\x1d\x8e\x00\x02\xa4D\xea\x8ap]\x91Hc\x91\
-\x8e\x95\xd38\xd6\x12\x06\x82\x7f\x8dCC\xc5}\x082JK\xf1\x05N\xff4\xcel:\x00B\
-\x80\x90\x00\xc4\x9amV\xdc\xff&E\xa3\x91)n\xae\xa8n\x88Q\x9a\xec\x1fs\xe2\
-\xc7)b\x8bK\xb4\xad;B!x-e\x16 \xd1U\x16\x1c=\xb2\x00u\x0b)AB[\x83\xf0\x8bHM\
-\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9f\x96\xe4\xc7[Yy\x97\xc44~\xc3`\xf8\
-\x9e\x8b\x96!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%?~9$\\\x07\xe9\x96\x01.\
-\x1a\x1bR:aq5\xca- 5\xde\xf7\x01\x04\xa9\xa5&\xa1P\x17f\xb0\x85\x88\xfc\xa8\
-\x1d_7Q\x9a\x8et\x8a $\xbea\xcd7\xd8%4\x05\x8a\xb8_$\x9c_\x8e\xa4D6\x1d\xe3\
-\x9a\xa8ECh\x92\x8c\xfc \xd1\x97\x15\x9fR\x1f\xe8\x9b\x81yM\xaf\x8c\xaf[\xf3\
-Ze{~\x98\x19\xf8\xe87\x80o\x06/\xf2\xb9\xcagC\xaf1\x87*n\xd4R\x0e\x18\x1b0\
-\xf47\x89\xa5\\\xae\xff\x83\x9b\xd0BAP>\xe5\xbc\xcd\xd0\x91>\xc6N\xa6\xb9p0\
-\xc55wDq\x8cs\x14D\x10\xa1<\xccL/f\xa6\x17\xafPB\xa0\xe6\'\x9f@\x00;\xb5\x1c\
-\xa7\xa6\x15\xdek$\xe1\x97\xb1\xe6\xfa0\xa6\xcf\xa3l\x07P\xf3\x13\x84\x11\
-\xa0X\x7f=Z\xb8\x16\x19\xb8\t\xcb\xda\x8d\x96r\xb9\xfe\xb1\xcd\x18\x91 \x00v\
-Y1mD\x90\x01I\xcc\xef\xc3\x9c9\x875\xd7\x8b\xb2]\x94R`\x06\xf1\x82\xb5\x98\
-\xc54J\x81\x13o\xa7\x94\xea\xba\xa4fX\xe8\xd4zs\xe4fV\x80\xdb\x8d\xd0\xa0TX\
-\xcd\x12k\x9c\x11\x03J\xd2\xb8\xbc\xf8\x94O }\x08#\x97F\x1a\x127\xdc\x84V\
-\x98\xc0\xb7\xcb\x08\xd3\xc2\xd1\xeb\x91\xd9I\x84\x14\xd8\x8bW\xe1E\xeb\x010\
-\xd2\xa70f\x86@(\xca\xf1V\xca\xcd\xcb+^\xdb+\r=\xc2\xe9\x8a\x1b5\x84\x8e0k\
-\xd0e\x0e=(0b)2V\x01\x0f\xb0Ba:n[\x8f\x97\xdbIn\xb4\x97B\xe6*\x12\xd6\x18\
-\xba9G${\x16\xbd\x9ca\xe4\xd44\x93\xc7\xb2x\xae\x8f\x1e\xd4i\xde\x94\xa0)6B\
-\xb1\xb8\x88Bp1RyDrgP\xd9Y\x06\xdf\x1c%7l#40#\x06\xb5\xd7E\xa9\x0f\x8da\x876\
-"\x8c\x14\xba\xcc\xa3\x07\xc1\x88\xa6(\x04J\xb8x\xb8A\x17\x87q"j\x84h\xae\
-\x07J\xb3\x8c\x1e\x99$\xd3\x9b\x07\xa0yS\x92xk\x88\xf1\xe3\xb3\xe8a\x9d\xba5\
-\x19r\xbeC(\xd7\xfb\x89\x9a\r\xe1)\xcc\x9a-\x8c\x1e8\xc3\xf0\xbe\x03(\xdfCI\
-\xc1\x99\x1d\xbf`\xf9C\xf7\x91\xd0\x06\xc19vY\xf1\xe9\xaaD,p\x92\xde_\xa6\t\
-\xd5[$\xaf\x1de\xaa\'\xcb\xe4\x899\x96\xdd\x9f$\xe4\xfd\x84\x81_\x87\x89w:$j\
-\xde\xc0\x8elGzY\x02\xee\x0b\xa4\x8f\x061k<\xe2]\x02G\xfd\x11J\x18\x15\xaf\
-\xef\x95\x84\x1ef_\xc5\x8dj$\x11\xdc\x8e\xce4B\x08\x84\na\xf2k<\xa6Q\x9a\xc4\
-\xf3na\xd1\xda.\xfav\xfe+\xf6\xc4\x08\xb1T\x8cDy\x0cQh\xe2\xec\x8f\x0eR\x98\
-\x18\'\x10\x8f!M\x13\'?\xc3\xe8\xde4\xc5t\x07m_]\x89a\x9eBw\x92hv\x1b=?\xfd\
-\x11\xc5\x89q\xcch\x04#\x1c\x06\xe1\x90\xefsi^\xbd\x05\xcd\x1fB\xd0\x86\xce\
-\x14\x9e]\xc4\x9e\x9a\xc5\x08Z\x98BC\x0b\xc4(\xe9\x07\xc0\xcb\x11p;8\xf3\xd2\
-\x8b\xe4GG\t$\xe2H\xcbb\xf2\xd0\x05\xc6\xf7\xdb\xf8n\x99Pc#\xc1M\xb7\xa3\xdb\
-\x19\xe4\xa7i\xae\xb9\x1d\xa5 X\x13\xa1\xa6^\x92\x1f\x1b@HI8\xbe\x04=\x10\
-\xc3Pi\xfc\xcb\x8a\xef$Jz\x98\xc6Z\xfc\xd9\x1e\xc6\xcfO0\xf3N\x88`m\x92\xc5\
-\xeb\xdb\xa9\xa9[\x0eN\x18\xc3?N\xfe]\x8d\xc5\xab\xda(x\x87\x90%\x1f]\xeb\
-\xa2<~\x9cx]\x03\xf1\x9a&\xf2\x1c\xa0z\x0b\xfc\xf9\xd0C\xec\xa9\xb8Q\xc1\x12\
-\x04w\xa3\x8bI\x84\x04!\x82\x04x\x1bE?\x00R\xb3\t\xd6\xdeG\xc0\x1a\xc1\x9e<\
-\x8c\xc6j\x0c\xd1\xc5\xc0\xbe\xe7(O\x1cf\xf1\xcd\xdbi\xb8q\x1b\xa82n\xb1\xc8\
-\xd0\xae\x7f\xa1\xd0\xbf\x9bBz%\x91\xceE\xe0\xd71\xb4\xf7\xbfp\xa7\xde\xa1\
-\xed\xb6GHtm@\x06|4-\x8e\xe7\x14Q\xfa4\xa6\xde\x8dp\xb7\xa0\x8b\t\xdc\xec9\
-\xce\xff\xc7SHS"4I\xf3\xe6\'\x89.[\x86\xf2\xb2d\xce\xf4\xe0\x8c\x1fa\xf1-\
-\x0f\xd0p\xe36\x84\xee\xe3\xdb0\xfc\xfas\xcc\x9e\xdd\x8f\xa1k\x08\xb3\x11\
-\xdd\x8d2\xb4\xf7\x85O\xd5T\xd6.bW\xdfA\xac\xe3I\xce=\xff\x14B\xf7\xe8\xbc\
-\xf7\t\x845\x8d\xd4\x1a\x18\xd8\xf7\xb3K\xc7\xd7\xd1\x88\xb2v"\xcc-\xe8r\x06\
-S\x8e\xd0\xb6\xf5\xcf\x88u\xae\xc2\x17\xfd\xa8\xc0\xdb\x90[F\xe3:\x93\x81W\
-\xff\x93\xd2\xecW\t\x06\x8b(/\xc9L_\x0f:#\xa4V<\x04\xa1A\x82\xe25\xa8\xb6\
-\xc8\xe7B\x0f\x8c/\xc0FN\xd7\xf0\x02\x114["\xa5\x00?\x825\xad\x81;\xaf\xa5\
-\xac8\xae\x1f\xc6,\tL/\x8cP1(\xfb\xd8\xfd\x03\x84\x82\xcd4lx\x18\xad\xbc\x13\
-\xe9\x1dD\x9a\x0f\xd0\xb0\xf6A\x86zOQ\xea\xeb#\xb6\xf4Q<O`\xf7\x9e\'\x14h\
-\xa0n\xcd\x03H\xf7\'\xc8\xc2>\x90\t4\xa1\x833\x03\xa5$\x9e\tZ\t\xf4"X\xa1\
-\x04\xba\x15E\x1a\x1aV0\x85\xe6\xba(\xd9N\xa6\xfb\xbb\x84\x02\x8d4\xac\xdf\
-\x8e\xee\xfc\x1cQ:\x86o=N\xdd\xca{(\x9e:\x88\xee\xe8\x08\x95\x00/pi\xcd\xdc\
-\x1c\xe8\x19<\xeb\x1b\x98*\x82T\x02M\xafA\xb3_\xc43\x1e\xbf\xac\xf8j\xda\xb6\
-\xa3\x15\xf6\xe2Y14[#\x14^L\xac}\x0b\xba\xf3=p\x8eA\xd6C\xe9%j\x96m%`\xbd\
-\xc6t\xf7!Z\xb6\xff)\x9e\x9f\'{\xf4y\x12-\xab1\x93K\x91\xf9]\x90\x05\xaaw0\
-\x9f\x0b\x9d\xddK+o5V\x0f\x1b\xc7\x10\xa3A\x90\x80=\x06\x07\xeaaV\x81a\xa16l\
-\xa04\xf06\xeat\x08\xab\xb3\x1d9;\x85\'Rxg\x05z\xac\x19\n\x01\xe4\xa1a(\x04\
-\xd1\x9a\xd3XM\xb7\xa0\x8d6\xc3D\x0cUH\xa0\x8aE\xdcw\xc1H4\xe2\xcf\x19\xe8G\
-\xa6\xa0\xf0\xe1\xa3\xe2Z\x88\xd5\xc1\xba4b4\x80\xe5t\xd2\xbe\xfd/\xd0\xa2\
-\x11\xf0}\xfc\xc9a\xe4\xb1s8\xad\x8bpN\x960\x92\xcd\x88r\x02q`\x16rAd\xdb\
-\x10F\xe3\rh#\x8d\x08/\t^\x02\x95S\x97\xd6\xfc\x1f\xdd\xf5\xc3\xc8\xd1\x00B\
-\n(\xa5\xa1\'\x89\xbfT^V|\xe4\x13p\xac\x056\xc4a46\xbfD\xf5S\xd0\x1d\x81L+\
-\x00"PF\xde\x18%\x12\xbf\x91\xec\xde\xb7\xb1o(`\xa7\xd3\x94\x8f\xbb4\xder7\
-\x8c\xe6\xe1@\x00\xfc\x05\xa8\xed\x15\x86>\xfc\xcc\xe3\x157j\xb4\x0b\x12]\
-\x93\x14N/A\xa2\xe1\xe7\xa7\x99\xdd\xbf\x15\xa4\xc2\\\xeb\xa3g]\x86\xbf=B\
-\xe1\xccM\xd4\xdd\xd7L\xf1\xa8\x8d\xb9*\x8f*m"{6\x83\x97\x9d\xc1\t=\x8a\xfd\
-\x8eKh\x99\xc5\\\xf7 \xb3{\xba\x0865\xe1\xcf\xcc B@\xf9f2{\xc6p\x1e\x1e\xa3\
-\xa4~\x0f{\x8f\x8b\xde\xa2c\\\xa5a\x1f)\xe3\xa5\x8b$\x96\x8f\xcf\xfb 4\x10\
-\x052\xff(p\x07\x05\xeep\x1dZS\x13\xc9\xbf-\xe1e\xd6S\xe8\xc9Q\x9e\x1a\xc5\t\
-<Dq\xbfMxY\x80\xb9}}\xcc\xee\xe9"tU\n\xbf\x90FH\xff\x92\x9a\xa5}6\xc6\x12\
-\x9f\xc4\xb5\x93\xe4Ot"\x90\xf8\xf9\t2\xaf\xac\xa3\xe6\xc9\xc2e\xc5\xe7Nf\
-\x99\xde\xf1e\xe2\xd7\x8dP\xe8i\x99?\xe6\xcd\x8f2\xf5\xc3;(\xf7\x96\xdf\xcfq\
-h @l\xed\x83\x0c?;\xc7\xa9?\xd9\x89*\xbaXMw`-\xdeH\xe6\xdb#\x14\x7f\xf5\xfb\
-\x15\xaf\xeb\x95\x88\xfe\xd2\x9a\x8d\x157Z\xdb8\xc7\xdd\xec\xe5B\xaa\x16\xa7\
-(\xa9\x1f\x1e\x86{-\xf2\xd3\x90\x1du\xe8\xfd\x96M&\x97\xe2\x9a?l\xc4X^\xe6\
-\xf5\x1d\xad\\\x17\x1b$\xfaX\'G\xff\xfe,\xa3O\xef\xa5\xe3\xf6E\xc8\xd5AJ\'\
-\xf3\x9cy-C\xb1\xbd\x93\x86\xcdqz\xfa\x1d\x12\xa9,\xe1G:8\xf2\x0f>\x13\xdf\
-\xef\xa6\xe3\xb6F\xd4\x1dQt\x0bt\xc3%\xf9\xb5\x08\x07w\xb5s\xab\xdc\xc5\x85T\
-\x12\xa4F\'\xc3\xbc\x16\xb9\x87\xa9d\x12\x92 5\xc5W\x06\x0e\xa2\xdf\xd7\xce\
-\xd1\x1f\x0cP\xf8\xe1A\x9a\xd7\xd7\xe3o4\x19zO3\xd7\xd2A\xb2\xc1\xa2\xdd\x1d\
- ;c\\R\xf3\xcd\xe8j\x046w\x8b\x97\xe9\xab\xabEI\x83v\x91\xe6W\xc95\xac\xe9\
-\xef\xbf\xbc\xf8\x86\\\xce,]\xc6]\xea\x10\x03\xc9\x18BJ\xaeV\x83\xec\xbef=S\
-\xf1\xf0\xfb9\x8e\xcd\t\xb6\xb5\xbaL\xdf\xba\x9e\xb1\x93#\x10\xd2Y\xfb\xe0ff\
-s5\xbc\xe4\xc4\xb1\xd7T\xf7\x1e\x95@?\xe3\x17*n\xb4\xd9\x9f\xc5\xb6\xfb\x99t\
-JLM\xe8\x0c~3\r\x9a\x8e\xed\x18(\xa1\x81\x90,Y\xe1\xd2\xf5\xbby\x0e\x1f\xeb\
-\xe0\x8d\xbe\x10\xe3z\x98\xc7\xee\x1fg\xf1V\x83\xa3\xbf\xc8q\xfa\xd9\xf3(\
-\xa9\xe1\x0b\x83pB\xb2\xe2.\x89Y7\xc6+;V\xd0\\\xef\xf3\xe0\xb6\t\x1a\xbe\xa4\
-qf\x7f\x9e\xd3\xdf\xe9\x7f\x7flm\x8b\xe4\x9e\xbf2\x98\xd4\x82\xd8\xa5sL\x96\
-\xc3XQ\x89c\x8fs\xbe\x9cc\xcc\x7f\xefb\xcd\x07\xb7;\xc1\xc3\xdbr\x84WI\x8e\
-\xec\x9b\xe4\xe0[\x19\x94\xd4\x88\xd6\x1b,\xbaF2R\x92\x04#y\xec\xe2y\xde:\
-\xba\x8a\xdf\xd9\xfc\xe9\x9a#z\x0b\x8e\xe3S*\xf42j\xd7\x12\x8c9\x94\xedI\xce\
-\x96\xf2\xcc\x1e\xbb\xbc\xf8^\xdd\xb1\x02)gqJg\x99v\nX5\x06e\xfb\x1c\xe7\xcb\
-W3\xe6\x7f\xe8\xb2r\x02ZN\xcf\xd1\xb0\xb9\x85\x93\xa7\x86\t%L\x9a6F\xe8~{\
-\x9ac\xb9`\xc5kz\xa5\xa2\x0f\rU\xfe\xa20\x9f\xcdS\xca\xf7\xd2y\x83\xa0\xdc\
-\x1d\xc2v\x0c|\xa1\x13IH\xea[\x1d\xda\x96\xdb\xb4./\xb1\xaf\xbb\x83\xe7_j\
-\xa1XJ\x93\x1eVH/\xc8\xbd[\x8fP\xdbnp\xeep\x90bN\xc3\x8a\n\xae\xffr\x96p-|\
-\xe7\xdf\xef\xe2xO\x16C\xd7P\xb6\xce\xfd\x8f\xf6p\xd5M\x1a\xc7\xf7F\x98\x99\
-\xb4\x885*V})K_\x7f\x8a\x83G\x96\xf1\x95\xb5\xbd,Y\x1d\xa1\xa6\xde\'=dq\xe2\
-\xd4\x1c\xb6Sz\xdf\xcftZQ\x1b\x81\xadO\x9c\xe5\xc2\xf1\x00\'\xdf\n\xa1\x99\
-\x82u[\xb3\xb4^\x95\xe7\xc0\xae$\xd1\xa4\xc7\xf9s5\xecxe#\xd9\xe9Kh\x1e\xce\
-\x11\xab\xc9R,\xf4\xd1\xb6r\x9a\xa6\x8e"\xbd\xe7\xa3\xbcs"\x8f\x80\xcb\x8e\
-\xaf>\x95\xc1.\x1c\xa1u\x9dN\xac\xc1ghp\x92\x13\'\xa7\xb1\x9d\xecEy\xde\x7f\
-\xd0\xe5\xfe-\x0ey\xa7DKg\x02!\'ymw\x89\xa1!Y\xf1\x9a^\xa9\x88\x8d\x1b_\xad\
-\xf8\\,\x04l\xdb\xdc\xc3\xad\xeb\xfaH%\x8b\x089/\x91\xcd\x9ad\xe6,\xc6\xa7#\
-\xfc\xf27\xcb8\x7f\xa1\x96\xb2+/\xfany\xe7,\x9bV\x8c\xd0\xd6<\x87\xf2\x14>\
-\x1a=}\t\x0e\x9el\xa0o0\xf2\xfeX)\x15+\xaf\x9ef\xf3\xdaaR\xf1\x02\xe5\xb2DI\
-\x9dw\xde\xadeww3\xb9\xbc\xc1\x9d\xb7\x8e\xb0\xb1k\x9a\xb2\xaf\xf1\xf2\x1b\
-\xcd\x1c=]\xf3\x11_\x03\x96\xc7\xcd\xeb\xc7\xb9a\xe5\x08\xd2w\x91\x1a\x8ce"\
-\x9c\xbbP\xc3\xa6\x15#\x80\xe0\xe57\x96r\xf4t\xed%5\xb39\x03!\xe0\xce[\xc7\
-\xd8\xd05\x85\xeb\xcb\x8bt/7\xbey\x1b\xfdl\xea\x1a\xa1\xeck\xbc\xf4F\x07GO_\
-\xfc.\xc1\xd0\xe1o\xbe\x9e\xa3<8\xc2\xab\xdf\xeb\xe7k\xff\xd4E\xdfD\x94o>\
-\x1d\xa1\xfa\x04\xaer\x88E\x8b\xbe\xbf`\xe9\x14\x02B\xc1\x0f\xcc\xbb.\xd8N\
-\xf5\xd8\xb1\x12lXS\xe6\x07O\xcf\xf0\xcc_\x0e\xe1z\x82?\xff\xe7E<\xf1\xf58o\
-\xee\xff\xed<%\xb8R\xd0\x87\x87\x87\xbfh\x1f\xaa|\x06\xae\xdb>\xc5\xccH\x86\
-\x13\x87\xf3<\xf2T\x80\x9eS6\xaf\xee\\\xc4\\\xb6\xba\xbc\xaa$\xd5l\xfe?%\x1c\
-\xb4\x89F\xf3\xdc\xf7\xc7\xb0\xf9N\x9b\xe7^\x08U\x9bc\x01\xd0\xbfh\x07\xaa|6\
-\x9e\xfd\xb7f\x82f\x03\xb51\x9f\xa7\xbf#y\xf1g\x0b\xf3:\xf2JG\xc07\xaa[\xba*\
-U>\x81\xea\x9c\\\xa5\xca\xa7Pm\x90*U>\x85\xff\x062\x9d\x96s,\xcf\xb5\'\x00\
-\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory040Bitmap():
- return wxBitmapFromImage(getDocFactory040Image())
-
-def getDocFactory040Image():
- stream = cStringIO.StringIO(getDocFactory040Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory040')
-catalog['DocFactory040'] = ImageClass()
-catalog['DocFactory040'].getData = getDocFactory040Data
-catalog['DocFactory040'].getImage = getDocFactory040Image
-catalog['DocFactory040'].getBitmap = getDocFactory040Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory041Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rW\
-IDATx\x9c\xed\x9by\x8c]\xd5}\xc7?\xe7\xdc\xed\xad\xf3\x96y\xb3\xda3c\xcf\x8c\
-\x01\xc3\xd8\xc6\xbbY\x9d\x18\x12\xd7f)\x9b\xcb\xd2BU\xb5\x8a\xaa\x82Z\xd1\
-\xf6\x8f\xfc\x19UQ\xa5\xaa\x0bj\x14\x01MRT\xb5\xa2\xa44N\x02!(6$\xc6\x06\xc7\
-\x19\x8fm\x8c\xd71\xb6g\xc6\xb3\xbc\xd9g\xde\xcc[\xef}\xf7\xde\xd3?\x86\x1a\
-\\\x82\xed\xa8\x0fh\xc5\xfb\xfc\xf9t\xee\xf7\xfb[\xde\xd19\xf7\x1e\x1d\xf17\
-\xdfR\x8a*U\xaa\xfcZ\xf4P\xed\xe7\x1dB\x95*\xffw\xd1\x83\xd5\tR\xa5\xca\'\
-\xa2\x87\x13\x95\x15\x14(\x0cl$\xde%\xbf\xbb\x18\xb8\x98\x955\xbb\\\x0c\xc2F\
-\xfb\x1f1(\xa0\xac\x02xh\x9f\x8a\xaf\xc4\xc7\x14%|$ee\xa1\x10\x9f\x8aO\x95\
-\xcf\x0e=\x14\xaf\x9c\x98\xc0\xa7\xa9\xb0\x97\xa8{\x01\xff#\xffM)A\x9a:y7N.\
-\xd8\xc9\xbc\xbe\x04\x97@\xe5\x8c/\x89\xc1\xa3\xc5~\x93\x1a\xaf\xff\x92\x18\
-\x00tKaku\xf4i\xdb)\x13\xaa\xa8\xaf\x86\xc3R\xf7\xa7\x04\xca\xe3h\x86`R\xae \
--o\xae\xa8G\x95\xcf\x1e=\\\xc1\tb1A\x8b\xfe,g_\xabgn$\x02\x08\x90\x12\xa9+\
-\xc2uE"\x8dE:V\xce\xe0XK\x18\x0c\xfe%\x0e\r\x953\xff\x80 c\xb4\x14_\xe2\xf4\
-\x8f\xe3\xcc\xa5\x03 \x04\x08\t@\xac\xd9f\xc5\x03oS4\x1a\x99\xe6\xd6\x8a\xfa\
-\x86\x18\xa3\xc9\xfe!\'~\x98"\xb6\xb8D\xdb\xba#\x14\x82\xd7S\xa6\x82\x05\xae\
-\xf2\x99\xa3G*\xd8\xbf\x90\x12$\xb45\x08\xbf\x88\xd4\x14\xc1\xb8\xc0\x08\x08\
-\x14\x82R>\xc8\xc4iI~\xa2\x95\x95wKL\xe3W\x0c\x85\xef\xbdd\x1b"|\x0f\xe1\x96\
-\x11\xbe\x87\x92\x1aJ7P\xf2\xd7o\x87\x84\xeb \xdd2\xc0%cCJ\',\xaeE\xb9\x05\
-\xa4\xc6\xc5\x18@\x90Zj\x12\nua\x06[\x88\xc8\x8f\xeb\xf8\xba\x89\xd2t\xa4S\
-\x04!\xf1\rka\x82]\xc1S\xa0\x88\xfbE\xc2\xf9\xe5HJd\xd31\xae\x8bZ4\x84\xa6\
-\xc8\xc8\x0f\x0b|U\xf9)\xf5\xa1\xbf\x19X\xf0\xf4\xca\xf8\xba\xb5\xe0U\xb6\
-\x17\x86\x99\x81\x8f?\x03\xf8f\xf0\x92\x98\xab\xfc\xef\xd0k\xcc\xe1\x8a\x89Y\
-\xca\x01c\x03\x86\xfe6\xb1\x94\xcb\x8d\xbfw\x0bZ(\x08\xca\xa7\x9c\xb7\x19>\
-\xd2\xcf\xf8\xc94\x17zR\\\xb75\x8ac\x9c\xa3 \x82\x08\xe5af\xfa03}x\x85\x12\
-\x02\xb5\xb0\xf8\x04\x02\xd8\xa9\xe585\xad\xf0\xc1D\x12~\x19k\xbe\x1fc\xe6<\
-\xcav\x00\xb5\xb0@\x18\x01\x8a\xf57\xa2\x85k\x91\x81[\xb0\xac=h)\x97\x1b\x1f\
-\xdf\x8c\x11\t\x02`\x97\x153F\x04\x19\x90\xc4\xfc~\xcc\xd9sX\xf3}(\xdbE)\x05\
-f\x10/X\x8bYL\xa3\x148\xf1vJ\xa9\xae+z\x86\x85N\xad7Onv\x05\xb8\xdd\x08\rJ\
-\x85\xd5,\xb1&\x185\xa0$\x8d\xab\xcbO\xf9\x04\xd2\x870ri\xa4!q\xc3Mh\x85I|\
-\xbb\x8c0-\x1c\xbd\x1e\x99\x9dBH\x81\xbdx\x15^\xb4\x1e\x00#}\ncv\x18\x84\xa2\
-\x1co\xa5\xdc\xbc\xbcb=\xfd\xa2\xa3G8]11C\xe8\x08\xb3\x06]\xe6\xd0\x83\x02#\
-\x96"c\x15\xf0\x00+\x14\xa6\xe3\x8e\xf5x\xb9]\xe4\xc6\xfa(d\xae!a\x8d\xa3\
-\x9b\xf3D\xb2g\xd1\xcb\x19FO\xcd0u,\x8b\xe7\xfa\xe8A\x9d\xe6M\t\x9ab\xa3\x14\
-\x8b\x8b(\x04\x17#\x95G$w\x06\x95\x9dc\xe8\xed1r#6B\x033bP{C\x94\xfa\xd08vh#\
-\xc2H\xa1\xcb<z\x10\x8ch\x8aB\xa0\x84\x8b\x87\x1btq\x98 \xa2F\x89\xe6z\xa14\
-\xc7\xd8\x91)2}y\x00\x9a7%\x89\xb7\x86\x988>\x87\x1e\xd6\xa9[\x93!\xe7;\x84r\
-}\x9f\xe8\xd9\x10\x9e\xc6\xac\xd9\xc2\xd8\xc13\x8c\xec?\x88\xf2=\x94\x14\x9c\
-\xd9\xf93\x96?|?\tm\x08\x9ccW\x95\x9f\xaeJ\xc4\x02\'\xe9\xfby\x9aP\xbdE\xf2\
-\xfa1\xa6{\xb3L\x9d\x98g\xd9\x03IB\xde\x8f\x18\xfce\x98x\xa7C\xa2\xe6-\xec\
-\xc8\x0e\xa4\x97%\xe0\xbeD\xfah\x10\xb3\xc6#\xde%p\xd4\x1f\xa0\x84Q\xb1\xbe~\
-\x91\xd1\xc3\xec\xaf\x98\x98F\x12\xc1\x9d\xe8\xcc \x84@\xa8\x10&\xbf\xc4c\
-\x06\xa5I<\xef6\x16\xad\xed\xa2\x7f\xd7\xbf`O\x8e\x12K\xc5H\x94\xc7\x11\x85&\
-\xce\xfe\xa0\x87\xc2\xe4\x04\x81x\x0ci\x9a8\xf9Y\xc6\xf6\xa5)\xa6;h\xfb\xeaJ\
-\x0c\xf3\x14\xba\x93D\xb3\xdb\xe8\xfd\xf1\x0f(NN`F#\x18\xe10\x08\x87|\xbfK\
-\xf3\xea-h\xfe0\x826t\xa6\xf1\xec"\xf6\xf4\x1cF\xd0\xc2\x14\x1aZ FI?\x08^\
-\x8e\x80\xdb\xc1\x99W^&?6F \x11GZ\x16S\x87.0q\xc0\xc6w\xcb\x84\x1a\x1b\tn\
-\xba\x13\xdd\xce /\xe7\xb9\xe6N\x94\x82`M\x84\x9azI~|\x10!%\xe1\xf8\x12\xf4@\
-\x0cC\xa5\xf1\xaf*\xbf\x93(\xe9a\x1ak\xf1\xe7z\x998?\xc9\xec{!\x82\xb5I\x16\
-\xafo\xa7\xa6n98a\x0c\xff8\xf9\xf75\x16\xafj\xa3\xe0\x1dB\x96|t\xad\x8b\xf2\
-\xc4q\xe2u\r\xc4k\x9a\xc8s\x90\xea\xe9oe\xd0C\xec\xad\x98\x98`\t\x82{\xd0\
-\xc5\x14B\x82\x10A\x02\xbc\x8bb\x00\x00\xa9\xd9\x04k\xef\'`\x8dbO\x1dFc5\x86\
-\xe8bp\xff\x0b\x94\'\x0f\xb3\xf8\xd6\x1d4\xdc\xbc\x1dT\x19\xb7Xdx\xf7?S\x18\
-\xd8C!\xbd\x92H\xe7"\xf0\xeb\x18\xde\xf7\x9f\xb8\xd3\xef\xd1v\xc7\xa3$\xba6 \
-\x03>\x9a\x16\xc7s\x8a(}\x06S\xefF\xb8[\xd0\xc5$n\xf6\x1c\xe7\xff\xfdi\xa4)\
-\x11\x9a\xa4y\xf3SD\x97-CyY2gzq&\x8e\xb0\xf8\xb6\x07i\xb8y;B\xf7\xf1m\x18y\
-\xf3\x05\xe6\xce\x1e\xc0\xd05\x84\xd9\x88\xeeF\x19\xde\xf7\xd2e=\x95\xb5\x9b\
-\xd8\xb5[\x89u<\xc5\xb9\x17\x9fF\xe8\x1e\x9d\xf7=\x89\xb0f\x90Z\x03\x83\xfb\
-\x7fr\xe5\xfc:\x1aQ\xd6.\x84\xb9\x05]\xceb\xcaQ\xda\xb6\xfd\t\xb1\xceU\xf8b\
-\x00\x15x\x17r\xcbh\\g2\xf8\xfa\x7fP\x9a\xfb*\xc1`\x11\xe5%\x99\xed\xefEg\
-\x94\xd4\x8a\x87!4DP\xbc\x01\xd5)R\x11\xf4\xc0D\x05_\xe8t\r/\x10A\xb3%R\n\
-\xf0#X3\x1a\xb8\x0b\x1e\xca\x8a\xe3\xfaa\xcc\x92\xc0\xf4\xc2\x08\x15\x83\xb2\
-\x8f=0H(\xd8L\xc3\x86G\xd0\xca\xbb\x90^\x0f\xd2|\x90\x86\xb5\x0f1\xdcw\x8aR\
-\x7f?\xb1\xa5\x8f\xe1y\x02\xbb\xef<\xa1@\x03uk\x1eD\xba?B\x16\xf6\x83L\xa0\t\
-\x1d\x9cY(%\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9v2\
-\xdd\xffD(\xd0H\xc3\xfa\x1d\xe8\xceO\x11\xa5c\xf8\xd6\x13\xd4\xad\xbc\x97\
-\xe2\xa9\x1etGG\xa8\x04x\x81+{\xe6\xe6A\xcf\xe0Y\xdf\xc0T\x11\xa4\x12hz\r\
-\x9a\xfd2\x9e\xf1\xc4U\xe5W\xd3\xb6\x03\xad\xb0\x0f\xcf\x8a\xa1\xd9\x1a\xa1\
-\xf0bb\xed[\xd0\x9d\xef\x80s\x0c\xb2\x1eJ/Q\xb3l\x1b\x01\xeb\rf\xba\x0f\xd1\
-\xb2\xe3\x8f\xf1\xfc<\xd9\xa3/\x92hY\x8d\x99\\\x8a\xcc\xef\x86,P=\x83\xa9\
-\x08:{\x96VN-V\x0f\x1b\xc7\x11cA\x90\x80=\x0e\x07\xebaN\x81a\xa16l\xa04\xf8.\
-\xeat\x08\xab\xb3\x1d97\x8d\'Rxg\x05z\xac\x19\n\x01\xe4\xa1\x11(\x04\xd1\x9a\
-\xd3XM\xb7\xa1\x8d5\xc3d\x0cUH\xa0\x8aE\xdc\xf7\xc1H4\xe2\xcf\x1b\xe8G\xa6\
-\xa1\xf0\xd1O\xc5\xb5\x10\xab\x83ui\xc4X\x00\xcb\xe9\xa4}\xc7\x9f\xa1E#\xe0\
-\xfb\xf8S#\xc8c\xe7pZ\x17\xe1\x9c,a$\x9b\x11\xe5\x04\xe2\xe0\x1c\xe4\x82\xc8\
-\xb6a\x8c\xc6\x9b\xd0F\x1b\x11^\x12\xbc\x04*\xa7\xae\xec\xf9\xdf\xbe\xebG\
-\x90c\x01\x84\x14PJCo\x12\x7f\xa9\xbc\xaa\xfc\xc8\'\xe0X\x0bl\x88\xc3Xla\x8b\
-\xea\xa7\xa0;\x02\x99V\x00D\xa0\x8c\xbc9J$~3\xd9}\xefb\xdfT\xc0N\xa7)\x1fwi\
-\xbc\xed\x1e\x18\xcb\xc3\xc1\x00\xf8\x15\xec\xe9\x17\x1c}\xe4\xd9\'*&f\xb4\
-\x0b\x12]S\x14N/A\xa2\xe1\xe7g\x98;\xb0\r\xa4\xc2\\\xeb\xa3g]F\xbe=J\xe1\xcc\
--\xd4\xdd\xdfL\xf1\xa8\x8d\xb9*\x8f*m"{6\x83\x97\x9d\xc5\t=\x86\xfd\x9eKh\
-\x99\xc5|\xf7\x10s{\xbb\x0865\xe1\xcf\xce"B@\xf9V2{\xc7q\x1e\x19\xa7\xa4~\
-\x07{\xaf\x8b\xde\xa2c\\\xa3a\x1f)\xe3\xa5\x8b$\x96O,\xc4 4\x10\x052\x7f/p\
-\x87\x04\xeeH\x1dZS\x13\xc9\xbf.\xe1e\xd6S\xe8\xcdQ\x9e\x1e\xc3\t<L\xf1\x80M\
-xY\x80\xf9\xfd\xfd\xcc\xed\xed"tM\n\xbf\x90FH\xff\x8a\x9e\xa5\xfd6\xc6\x12\
-\x9f\xc4\xf5S\xe4Ot"\x90\xf8\xf9I2\xaf\xad\xa3\xe6\xa9\xc2U\xe5\xe7Ne\x99\
-\xd9\xf9e\xe27\x8cR\xe8mY\xf8\xcc\x9b\x1fc\xfa\xfb[)\xf7\x95/\xd684\x18 \xb6\
-\xf6!F\x9e\x9b\xe7\xd4\x1f\xedB\x15]\xac\xa6\xadX\x8b7\x92\xf9\xf6(\xc5_\xfc\
-n\xc5\xfaY\x05\xf4W\xd6l\xac\x98Xm\xe3<\xf7\xb0\x8f\x0b\xa9Z\x9c\xa2\xa4~d\
-\x04\xee\xb3\xc8\xcf@v\xcc\xa1\xef[6\x99\\\x8a\xeb~\xbf\x11cy\x997w\xb6rCl\
-\x88\xe8\xe3\x9d\x1c\xfd\xdb\xb3\x8c=\xb3\x8f\x8e;\x17!W\x07)\x9d\xccs\xe6\
-\x8d\x0c\xc5\xf6N\x1a6\xc7\xe9\x1dpH\xa4\xb2\x84\x1f\xed\xe0\xc8\xdf\xf9L~\
-\xb7\x9b\x8e;\x1aQ[\xa3\xe8\x16\xe8\x86K\xf2k\x11zv\xb7s\xbb\xdc\xcd\x85T\
-\x12\xa4F\'#\xbc\x11\xb9\x97\xe9d\x12\x92 5\xc5W\x06{\xd0\xefo\xe7\xe8\xf7\
-\x06)|\xbf\x87\xe6\xf5\xf5\xf8\x1bM\x86?\xf0\xcc\xb5t\x90l\xb0hw\x07\xc9\xce\
-\x1aW\xf4|;\xba\x1a\x81\xcd=\xe2U\xfa\xebjQ\xd2\xa0]\xa4\xf9Er\rk\x06\x06\
-\xae.\xbfa\x973K\x97q\xb7:\xc4`2\x86\x90\x92k\xd5\x10{\xae[\xcft<|\xb1\xc6\
-\xb1y\xc1\xf6V\x97\x99\xdb\xd73~r\x14B:k\x1f\xda\xcc\\\xae\x86W\x9c8\xf6\x9a\
-\xea\xbbG%\xd1\xcf\xf8\x85\x8a\x895\xfbs\xd8\xf6\x00SN\x89\xe9I\x9d\xa1o\xa6\
-A\xd3\xb1\x1d\x03%4\x10\x92%+\\\xba~;\xcf\xe1c\x1d\xbc\xd5\x1fbB\x0f\xf3\xf8\
-\x03\x13,\xdefp\xf4g9N?w\x1e%5|a\x10NHV\xdc-1\xeb\xc6ym\xe7\n\x9a\xeb}\x1e\
-\xda>I\xc3\x974\xce\x1c\xc8s\xfa\xf9\x81\x8bck[$\xf7\xfe\x85\xc1\x94\x16\xc4\
-.\x9dc\xaa\x1c\xc6\x8aJ\x1c{\x82\xf3\xe5\x1c\xe3\xfe\x07\x07k>\xb8\xdd\t\x1e\
-\xd9\x9e#\xbcJrd\xff\x14=\xefdPR#Zo\xb0\xe8:\xc9hI\x12\x8c\xe4\xb1\x8b\xe7y\
-\xe7\xe8*~k\xf3\xe5=G\xf5\x16\x1c\xc7\xa7T\xe8c\xcc\xae%\x18s(\xdbS\x9c-\xe5\
-\x99;vu\xf9\xbd\xbes\x05R\xce\xe1\x94\xce2\xe3\x14\xb0j\x0c\xca\xf69\xce\x97\
-\xafe\xdc\xff\xc8a\xe5$\xb4\x9c\x9e\xa7as\x0b\'O\x8d\x10J\x984m\x8c\xd0\xfd\
-\xee\x0c\xc7r\xc1\x8a\xf5\xb2\xca\x02\xfa\xf0p\xe5\x0e\n\xf3\xd9<\xa5|\x1f\
-\x9d7\t\xca\xdd!l\xc7\xc0\x17:\x91\x84\xa4\xbe\xd5\xa1m\xb9M\xeb\xf2\x12\xfb\
-\xbb;x\xf1\x95\x16\x8a\xa54\xe9\x11\x85\xf4\x82\xdc\xb7\xed\x08\xb5\xed\x06\
-\xe7\x0e\x07)\xe64\xac\xa8\xe0\xc6/g\t\xd7\xc2\xf3\xffv7\xc7{\xb3\x18\xba\
-\x86\xb2u\x1ex\xac\x97kn\xd18\xbe/\xc2\xec\x94E\xacQ\xb1\xeaKY\xfa\x07R\xf4\
-\x1cY\xc6W\xd6\xf6\xb1du\x84\x9az\x9f\xf4\xb0\xc5\x89S\xf3\xd8N\xe9b\x9c\xe9\
-\xb4\xa26\x02\xdb\x9e<\xcb\x85\xe3\x01N\xbe\x13B3\x05\xeb\xb6ei\xbd&\xcf\xc1\
-\xddI\xa2I\x8f\xf3\xe7j\xd8\xf9\xdaF\xb23W\xf0<\x9c#V\x93\xa5X\xe8\xa7m\xe5\
-\x0cM\x1dE\xfa\xceGy\xefD\x1e\x01W\x9d_}*\x83]8B\xeb:\x9dX\x83\xcf\xf0\xd0\
-\x14\'N\xce`;\xd9K\xea|\xa0\xc7\xe5\x81-\x0ey\xa7DKg\x02!\xa7xcO\x89\xe1aY\
-\xb1^VY@l\xdc\xf8z\xc5\xd6d!`\xfb\xe6^n_\xd7O*YD\xc8\x05\xe9l\xd6$3o11\x13\
-\xe1\xe7\xbfZ\xc6\xf9\x0b\xb5\x94]y\xc9s\xcb;\xe7\xd8\xb4b\x94\xb6\xe6y\x94\
-\xa7\xf0\xd1\xe8\xedO\xd0s\xb2\x81\xfe\xa1\xc8\xc5\xb1R*V^;\xc3\xe6\xb5#\xa4\
-\xe2\x05\xcae\x89\x92:\xef\xbd_\xcb\x9e\xeefry\x83\xbbn\x1fec\xd7\x0ce_\xe3\
-\xd5\xb7\x9a9z\xba\xe6c\xb1\x06,\x8f[\xd7Op\xd3\xcaQ\xa4\xef"5\x18\xcfD8w\
-\xa1\x86M+F\x01\xc1\xabo-\xe5\xe8\xe9\xda+zfs\x06B\xc0]\xb7\x8f\xb3\xa1k\x1a\
-\xd7\x97\x97\xf8^m~\x0b\x1a\x03l\xea\x1a\xa5\xeck\xbc\xf2V\x07GO_z\x1f\xc1\
-\xd0\xe1\xaf\xbe\x9e\xa3<4\xca\xeb\xdf\x19\xe0k\xff\xd0E\xffd\x94o>\x13\xa1z\
-\xf5\xad\xf2\x88E\x8b\xbe[\xf1\xb2\n\x01\xa1\xe0\x87\xb2\xae\x0b\xb6S\xfd\
-\xecX\t6\xac)\xf3\xbdgfy\xf6\xcf\x87q=\xc1\x9f\xfe\xe3"\x9e\xfcz\x9c\xb7\x0f\
-|6W\t\xbeh\xe8###\x9fw\x0cU~\x03n\xd81\xcd\xech\x86\x13\x87\xf3<\xfat\x80\
-\xdeS6\xaf\xefZ\xc4|\xb6\xba\xbd\xfa4\xa8V\xf5\xff\x19\xe1\xa0M4\x9a\xe7\xfe\
-?\x84\xcdw\xd9\xbc\xf0R\xa8:9>E\xf4\xcf;\x80*\xbf\x19\xcf\xfdk3A\xb3\x81\xda\
-\x98\xcf3\xcfK^\xfe\xc9\xa7s;\xb2\xca\x02\x02\xbeQ}\xb5\xabR\xe5\x13\xa8\xae\
-\xcdU\xaa\\\x86\xea\x04\xa9R\xe52\xfc\x17\x171\x96s\x9fY\xffI\x00\x00\x00\
-\x00IEND\xaeB`\x82'
-
-def getDocFactory041Bitmap():
- return wxBitmapFromImage(getDocFactory041Image())
-
-def getDocFactory041Image():
- stream = cStringIO.StringIO(getDocFactory041Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory041')
-catalog['DocFactory041'] = ImageClass()
-catalog['DocFactory041'].getData = getDocFactory041Data
-catalog['DocFactory041'].getImage = getDocFactory041Image
-catalog['DocFactory041'].getBitmap = getDocFactory041Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory042Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rZ\
-IDATx\x9c\xed\x9bYl\\\xd7}\x87\xbfs\xee6+g\xe1p\x95HJ$e[6%Y\xbb\xbc*\x91\x9d\
-\xb8\x92\x97zS\xbd\xb4vQ\xb4\x08\x8a\xdah\xe1\xb6\x0fy\x0c\x8a\xa0@\xd1\xc5h\
-\x10\xd8\xd9j\x14-\\\xa7n\x94\xc4\x8ecD\xb2\x13Y\xb2\x15\x85\xda,k\xa5,\x89\
-\xa4\xb8\x0cwr\xc8Y\xef\x9d{\xef\xe9\x03]\xd9\x8c\x17\x11 e\xb7\xe8|\x8f\x83\
-s\x7f\xbf\xff2\x07\xe7\xdc{p\xc4\xdf}K)*T\xa8\xf0\x89\xe8\xa1\xea/:\x84\n\
-\x15\xfe\xf7\xa2\x07+\x13\xa4B\x85OE\x0f\'\x16GH\xa00\xb0\x91xs~w1p1\x17\xc7\
-d>1\x08\x1b\xed\xb7bP@Y\x05\xf0\xd0\xae\x8a\xaf\xc4\xc7\x14%|$ee\xa1\x10W\
-\xc5\xa7\xc2\xe7\x8f\x1e\x8a/\\D\xe0\xd3P\xd8G\xd4\xbd\x84\xff\x91\xff\xa6\
-\x94 M\x9d\xbc\x1b\'\x17lgF_\x86K`\xe1\x86\x9f\x18\x83G\x93\xfd&U^\xcf\x9c\
-\x18\x00tKak5tk;(\x13ZT_\r\x87\xe5\xee\xcf\t\x94G\xd0\x0c\xc1\x98\\EZ\xde\
-\xbc\xa8\x1e\x15\xbe8\xf4\xf0"L\x10\x8bQ\x9a\xf4\xe78\xffZ-\xd3\x83\x11@\x80\
-\x94H]\x11\xae)\x12\xa9/\xd2\xb6z\x12\xc7ZF_\xf0\xafq\xa8[\xb8\xe9o\x11d\x98\
-\xa6\xe2K\x9c\xfdi\x9c\xe9t\x00\x84\x00!\x01\x885\xda\xacz\xf0m\x8aF=\x13\
-\xdc\xba\xa8\xbe!\x86i\xb0\x7f\xcc\xa9\x1f\xa7\x88--\xd1\xb2\xe1\x18\x85\xe0\
-\xf5\x94Y\x84\xc2V\xf8\xc2\xd1#\x8b\xd0\xc7\x90\x12$\xb4u\x08\xbf\x88\xd4\
-\x14\xc1\xb8\xc0\x08\x08\x14\x82R>\xc8\xe8YI~\xb4\x99\xd5\xf7HL\xe37\xf4\x87\
-\xef\x9b\xb3\r\x11\xbe\x87p\xcb\x08\xdfCI\r\xa5\x1b(\xf9\xc9\xdb!\xe1:H\xb7\
-\x0c0glH\xe9\x84\xc5\xb5(\xb7\x80\xd4\xb8\x1c\x03\x08R\xcbMB\xa1\x0e\xcc`\
-\x13\x11\xf9q\x1d_7Q\x9a\x8et\x8a $\xbea\xcdN\xb0+x\n\x14q\xbfH8\xbf\x12I\
-\x89l:\xc6uQ\x8b\xba\xd08\x19\xf9aa\xe7\x95\x9fR\x1f\xfa\x9b\x81YO\xaf\x8c\
-\xaf[\xb3^e{v\x98\x19\xf8\xf83\x80o\x06\xe7\xc4\\aq\xd0\xab\xcc\x81\x05\x8bX\
-\xca\x01c\x13\x86\xfe6\xb1\x94\xcb\x8d\x7fp\x0bZ(\x08\xca\xa7\x9c\xb7\x198\
-\xd6\xc3\xc8\xe94\x97\x0e\xa7\xb8\xee\xae(\x8eq\x81\x82\x08"\x94\x87\x99\xe9\
-\xc6\xcct\xe3\x15J\x08\xd4\xec\xe2\x13\x08`\xa7V\xe2T5\xc3\x07\x13I\xf8e\xac\
-\x99\x1e\x8c\xc9\x8b(\xdb\x01\xd4\xec\x02a\x04(\xd6\xde\x88\x16\xaeF\x06n\
-\xc1\xb2\xf6\xa2\xa5\\n|b+F$\x08\x80]VL\x1a\x11d@\x12\xf3{0\xa7.`\xcdt\xa3l\
-\x17\xa5\x14\x98A\xbc`5f1\x8dR\xe0\xc4[)\xa5:\xae\xe8\x19\x16:\xd5\xde\x0c\
-\xb9\xa9U\xe0v"4(\x15\xd6\xb2\xcc\x1ae\xc8\x80\x924\xe6\x97\x9f\xf2\t\xa4\
-\x8f`\xe4\xd2HC\xe2\x86\x1b\xd0\nc\xf8v\x19aZ8z-2;\x8e\x90\x02{\xe9\x1a\xbch\
--\x00F\xfa\x0c\xc6\xd4\x00\x08E9\xdeL\xb9q\xe5\x82{Ya.z\x84\xb3\x0b\x161\x84\
-\x8e0\xab\xd0e\x0e=(0b)2V\x01\x0f\xb0Ba\xda\xee\xd8\x88\x97\xdbMn\xb8\x9bB\
-\xe6\x1a\x12\xd6\x08\xba9C${\x1e\xbd\x9ca\xe8\xcc$\xe3\'\xb2x\xae\x8f\x1e\
-\xd4i\xdc\x92\xa0!6D\xb1\xb8\x84Bp)RyDr\xe7P\xd9i\xfa\xdf\x1e&7h#40#\x06\xd5\
-7D\xa9\r\x8d`\x876#\x8c\x14\xba\xcc\xa3\x07\xc1\x88\xa6(\x04J\xb8x\xb8A\x17\
-\x87Q"j\x88h\xae\x0bJ\xd3\x0c\x1f\x1b\'\xd3\x9d\x07\xa0qK\x92xs\x88\xd1\x93\
-\xd3\xe8a\x9d\x9au\x19r\xbeC(\xd7\xfd\xa9\x9eu\xe1\t\xcc\xaam\x0c\x1f:\xc7\
-\xe0\x81C(\xdfCI\xc1\xb9]\xbf`\xe5#\x0f\x90\xd0\xfa\xc191\xaf\xfctU"\x168M\
-\xf7/\xd3\x84j-\x92\xd7\x0f3\xd1\x95e\xfc\xd4\x0c+\x1eL\x12\xf2~B\xdf\xaf\
-\xc3\xc4\xdb\x1d\x12UoaGv"\xbd,\x01\xf7%\xd2\xc7\x83\x98U\x1e\xf1\x0e\x81\
-\xa3\xfe\x08%\x8c\x05\xf7\xb3\xc2\x87\xe8a\x0e,XD#\x89\xe0Nt&\x11B T\x08\x93\
-_\xe31\x89\xd2$\x9ew\x1bK\xd6w\xd0\xb3\xfb_\xb1\xc7\x86\x88\xa5b$\xca#\x88B\
-\x03\xe7\x7ft\x98\xc2\xd8(\x81x\x0ci\x9a8\xf9)\x86\xf7\xa7)\xa6\xdbh\xf9\xea\
-j\x0c\xf3\x0c\xba\x93D\xb3[\xe8\xfa\xe9\x8f(\x8e\x8dbF#\x18\xe10\x08\x87|\
-\x8fK\xe3\xdamh\xfe\x00\x82\x16t&\xf0\xec"\xf6\xc44F\xd0\xc2\x14\x1aZ FI?\
-\x04^\x8e\x80\xdb\xc6\xb9W^&?<L \x11GZ\x16\xe3G.1z\xd0\xc6w\xcb\x84\xea\xeb\
-\tn\xb9\x13\xdd\xce ?\xcbs\xdd\x9d(\x05\xc1\xaa\x08U\xb5\x92\xfcH\x1fBJ\xc2\
-\xf1e\xe8\x81\x18\x86J\xe3\xcf+\xbf\xd3(\xe9a\x1a\xeb\xf1\xa7\xbb\x18\xbd8\
-\xc6\xd4{!\x82\xd5I\x96nl\xa5\xaaf%8a\x0c\xff$\xf9\xf75\x96\xaei\xa1\xe0\x1d\
-A\x96|t\xad\x83\xf2\xe8I\xe25u\xc4\xab\x1a\xc8s\x88\xca\xa9\xef\xe2\xa2\x87\
-\xd8\xb7`\x11\xc12\x04\xf7\xa2\x8bq\x84\x04!\x82\x04x\x17E/\x00R\xb3\tV?@\
-\xc0\x1a\xc2\x1e?\x8a\xc6Z\x0c\xd1A\xdf\x81\x17(\x8f\x1de\xe9\xad;\xa9\xbby\
-\x07\xa82n\xb1\xc8\xc0\x9e\x7f\xa1\xd0\xbb\x97Bz5\x91\xf6%\xe0\xd70\xb0\xff\
-\xbfp\'\xde\xa3\xe5\x8e\xc7HtlB\x06|4-\x8e\xe7\x14Q\xfa$\xa6\xde\x89p\xb7\
-\xa1\x8b1\xdc\xec\x05.\xfe\xc73HS"4I\xe3\xd6\xa7\x89\xaeX\x81\xf2\xb2d\xceu\
-\xe1\x8c\x1ec\xe9m\x0fQw\xf3\x0e\x84\xee\xe3\xdb0\xf8\xe6\x0bL\x9f?\x88\xa1k\
-\x08\xb3\x1e\xdd\x8d2\xb0\xff\xa5\xcf\xf4T\xd6\x1eb\xd7\xdeE\xac\xedi.\xbc\
-\xf8\x0cB\xf7h\xbf\xff)\x845\x89\xd4\xea\xe8;\xf0\xb3+\xe7\xd7V\x8f\xb2v#\
-\xccm\xe8r\nS\x0e\xd1\xb2\xfd\xcf\x88\xb5\xaf\xc1\x17\xbd\xa8\xc0\xbb\x90[A\
-\xfd\x06\x93\xbe\xd7\xff\x93\xd2\xf4W\t\x06\x8b(/\xc9TO\x17:C\xa4V=\x02\xa1~\
-\x82\xe2\r\xa8L\x91EE\x0f\x8c.\xc2\x8b\x9d\xae\xe1\x05"h\xb6DJ\x01~\x04kR\
-\x03wV[Yq\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1{\xfb\x08\x05\x1b\xa9\xdb\xf4(Zy\
-7\xd2;\x8c4\x1f\xa2n\xfd\xc3\x0ct\x9f\xa1\xd4\xd3Cl\xf9\xe3x\x9e\xc0\xee\xbe\
-H(PG\xcd\xba\x87\x90\xeeO\x90\x85\x03 \x13hB\x07g\nJI<\x13\xb4\x12\xe8E\xb0B\
-\tt+\x8a44\xac`\n\xcduQ\xb2\x95L\xe7w\t\x05\xea\xa9\xdb\xb8\x13\xdd\xf99\xa2\
-t\x02\xdfz\x92\x9a\xd5\xf7Q<s\x18\xdd\xd1\x11*\x01^\xe0\xca\x9e\xb9\x19\xd03\
-x\xd670U\x04\xa9\x04\x9a^\x85f\xbf\x8cg<9\xaf\xfc\xaaZv\xa2\x15\xf6\xe3Y14[#\
-\x14^J\xacu\x1b\xba\xf3=pN@\xd6C\xe9%\xaaVl\'`\xbd\xc1d\xe7\x11\x9av\xfe)\
-\x9e\x9f\'{\xfcE\x12Mk1\x93\xcb\x91\xf9=\x90\x05*g0\x8b\x8a\xce\xde\xe5\x0bW\
-\x89\xd5\xc2\xe6\x11\xc4p\x10$`\x8f\xc0\xa1Z\x98V`X\xa8M\x9b(\xf5\xbd\x8b:\
-\x1b\xc2joENO\xe0\x89\x14\xdey\x81\x1ek\x84B\x00yd\x10\nA\xb4\xc64V\xc3mh\
-\xc3\x8d0\x16C\x15\x12\xa8b\x11\xf7}0\x12\xf5\xf83\x06\xfa\xb1\t(|\xf4Sq5\
-\xc4j`C\x1a1\x1c\xc0r\xdai\xdd\xf9\x17h\xd1\x08\xf8>\xfe\xf8 \xf2\xc4\x05\
-\x9c\xe6%8\xa7K\x18\xc9FD9\x8184\r\xb9 \xb2e\x00\xa3\xfe&\xb4\xa1z\x84\x97\
-\x04/\x81\xca\xa9+{\xfe\x8f\xef\xc6A\xe4p\x00!\x05\x94\xd2\xd0\x95\xc4_.\xe7\
-\x95\x1f\xf9\x04\x9ch\x82Mq\x18\x8e\xcdnQ\xfd\x14tF \xd3\x0c\x80\x08\x94\x91\
-7G\x89\xc4o&\xbb\xff]\xec\x9b\n\xd8\xe94\xe5\x93.\xf5\xb7\xdd\x0b\xc3y8\x14\
-\x00\x7f\x11zYa\x0e\xfa\xe0sO.X\xc4h\x15$:\xc6)\x9c]\x86D\xc3\xcfO2}p;H\x85\
-\xb9\xdeG\xcf\xba\x0c~{\x88\xc2\xb9[\xa8y\xa0\x91\xe2q\x1bsM\x1eU\xdaB\xf6|\
-\x06/;\x85\x13z\x1c\xfb=\x97\xd0\n\x8b\x99\xce~\xa6\xf7u\x10lh\xc0\x9f\x9aB\
-\x84\x80\xf2\xadd\xf6\x8d\xe0<:BI\xfd\x1e\xf6>\x17\xbdI\xc7\xb8F\xc3>V\xc6K\
-\x17I\xac\x1c\x9d\x8dAh \nd\xfeQ\xe0\xf6\x0b\xdc\xc1\x1a\xb4\x86\x06\x92\x7f\
-[\xc2\xcbl\xa4\xd0\x95\xa3<1\x8c\x13x\x84\xe2A\x9b\xf0\x8a\x003\x07z\x98\xde\
-\xd7A\xe8\x9a\x14~!\x8d\x90\xfe\x15=K\x07l\x8ce>\x89\xeb\xc7\xc9\x9fjG \xf1\
-\xf3cd^\xdb@\xd5\xd3\x85y\xe5\xe7\x8eg\x99\xdc\xf5e\xe27\x0cQ\xe8j\x9a\xfd\
-\xcc\x9b\x1ff\xe2\x87wQ\xee._\xaeq\xa8/@l\xfd\xc3\x0c>?\xc3\x99?\xd9\x8d*\
-\xbaX\rwa-\xddL\xe6\xdbC\x14\x7f\xf5\xfb\x0b\xeec\x85\x8f\xa3\xbf\xb2n\xf3\
-\x82E\xaa\xebg\xb8\x97\xfd\\JU\xe3\x14%\xb5\x83\x83p\xbfE~\x12\xb2\xc3\x0e\
-\xdd\xdf\xb2\xc9\xe4R\\\xf7\x87\xf5\x18+\xcb\xbc\xb9\xab\x99\x1bb\xfdD\x9fh\
-\xe7\xf8\xdf\x9fg\xf8\xd9\xfd\xb4\xdd\xb9\x04\xb96H\xe9t\x9esod(\xb6\xb6S\
-\xb75NW\xafC"\x95%\xfcX\x1b\xc7\xfe\xc1g\xec\xfb\x9d\xb4\xddQ\x8f\xba+\x8an\
-\x81n\xb8$\xbf\x16\xe1\xf0\x9eVn\x97{\xb8\x94J\x82\xd4hg\x907"\xf71\x91LB\
-\x12\xa4\xa6\xf8J\xdfa\xf4\x07Z9\xfe\x83>\n?<L\xe3\xc6Z\xfc\xcd&\x03\x1fx\
-\xe6\x9a\xdaH\xd6Y\xb4\xba}d\xa7\x8c+z\xbe\x1d]\x8b\xc0\xe6^\xf1*=5\xd5(i\
-\xd0*\xd2\xfc*\xb9\x8eu\xbd\xbd\xf3\xcbo\xc0\xe5\xdc\xf2\x15\xdc\xa3\x8e\xd0\
-\x97\x8c!\xa4\xe4Z\xd5\xcf\xde\xeb62\x11\x0f_\xaeqlF\xb0\xa3\xd9e\xf2\xf6\
-\x8d\x8c\x9c\x1e\x82\x90\xce\xfa\x87\xb72\x9d\xab\xe2\x15\'\x8e\xbd\xae\xf2\
-\xeeq5\xd0\xcf\xf9\x85\x05\x8b4\xfa\xd3\xd8v/\xe3N\x89\x891\x9d\xfeo\xa6A\
-\xd3\xb1\x1d\x03%4\x10\x92e\xab\\:~7\xcf\xd1\x13m\xbc\xd5\x13bT\x0f\xf3\xc4\
-\x83\xa3,\xddnp\xfc\x179\xce>\x7f\x11%5|a\x10NHV\xdd#1kFxm\xd7*\x1ak}\x1e\
-\xde1F\xdd\x974\xce\x1d\xccs\xf6;\xbd\x97\xc7V7I\xee\xfb+\x83q-\x88]\xba\xc0\
-x9\x8c\x15\x958\xf6(\x17\xcb9F\xfc\x0f\x0e\xd6|p;\x13<\xba#Gx\x8d\xe4\xd8\
-\x81q\x0e\xbf\x93AI\x8dh\xad\xc1\x92\xeb$C%I0\x92\xc7.^\xe4\x9d\xe3k\xf8\x9d\
-\xad\x9f\xed9\xa47\xe18>\xa5B7\xc3v5\xc1\x98C\xd9\x1e\xe7|)\xcf\xf4\x89\xf9\
-\xe5\xf7\xfa\xaeUH9\x8dS:\xcf\xa4S\xc0\xaa2(\xdb\x17\xb8X\xbe\x96\x11\xff#\
-\x87\x95c\xd0tv\x86\xba\xadM\x9c>3H(a\xd2\xb09B\xe7\xbb\x93\x9c\xc8\x05\x17\
-\xdc\xc3\n\x9f\x8c>0\xb0\xf0\x83\xc2|6O)\xdfM\xfbM\x82rg\x08\xdb1\xf0\x85N$!\
-\xa9mvhYi\xd3\xbc\xb2\xc4\x81\xce6^|\xa5\x89b)MzP!\xbd \xf7o?Fu\xab\xc1\x85\
-\xa3A\x8a9\r+*\xb8\xf1\xcbY\xc2\xd5\xf0\x9d\x7f\xbf\x87\x93]Y\x0c]C\xd9:\x0f\
->\xde\xc55\xb7h\x9c\xdc\x1faj\xdc"V\xafX\xf3\xa5,=\xbd)\x0e\x1f[\xc1W\xd6w\
-\xb3lm\x84\xaaZ\x9f\xf4\x80\xc5\xa933\xd8N\xe9r\x9c\xe9\xb4\xa2:\x02\xdb\x9f\
-:\xcf\xa5\x93\x01N\xbf\x13B3\x05\x1b\xb6gi\xbe&\xcf\xa1=I\xa2I\x8f\x8b\x17\
-\xaa\xd8\xf5\xdaf\xb2\x93W\xf0<\x9a#V\x95\xa5X\xe8\xa1e\xf5$\rmE\xba/Fy\xefT\
-\x1e\x01\xf3\xce\xaf6\x95\xc1.\x1c\xa3y\x83N\xac\xceg\xa0\x7f\x9cS\xa7\'\xb1\
-\x9d\xec\x9c:\x1f<\xec\xf2\xe06\x87\xbcS\xa2\xa9=\x81\x90\xe3\xbc\xb1\xb7\
-\xc4\xc0\x80\\p\x0f+|2b\xf3\xe6\xd7\x17\xbc6\x0b\x01;\xb6vq\xfb\x86\x1eR\xc9\
-"B\xceJf\xb3&\x99\x19\x8b\xd1\xc9\x08\xbf\xfc\xcd\n.^\xaa\xa6\xec\xca9\xcf\
-\xadl\x9ff\xcb\xaa!Z\x1agP\x9e\xc2G\xa3\xab\'\xc1\xe1\xd3u\xf4\xf4G.\x8f\x95\
-R\xb1\xfa\xdaI\xb6\xae\x1f$\x15/P.K\x94\xd4y\xef\xfdj\xf6v6\x92\xcb\x1b\xdc}\
-\xfb\x10\x9b;&)\xfb\x1a\xaf\xbe\xd5\xc8\xf1\xb3U\x1f\x8b5`y\xdc\xbaq\x94\x9b\
-V\x0f!}\x17\xa9\xc1H&\xc2\x85KUlY5\x04\x08^}k9\xc7\xcfV_\xd13\x9b3\x10\x02\
-\xee\xbe}\x84M\x1d\x13\xb8\xbe\x9c\xe3;\xdf\xfcf5z\xd9\xd21D\xd9\xd7x\xe5\
-\xad6\x8e\x9f\x9d{\x0f\xc1\xd0\xe1o\xbe\x9e\xa3\xdc?\xc4\xeb\xdf\xeb\xe5k\
-\xff\xd4A\xcfX\x94o>\x1b\xa1r\xe5\xed\xea!\x96,\xf9\xfe\xa2\x95W\x08\x08\x05\
-?\x94s]\xb0\x9d\xcag\xc7\xc5`\xd3\xba2?xv\x8a\xe7\xfer\x00\xd7\x13\xfc\xf9?/\
-\xe1\xa9\xaf\xc7y\xfb\xe0\xe7s\x95\xe0\xff+\xfa\xe0\xe0\xe0\x17\x1dC\x85yp\
-\xc3\xce\t\xa6\x862\x9c:\x9a\xe7\xb1g\x02t\x9d\xb1y}\xf7\x12f\xb2\x95\xed\
-\xd5\xd5\xa4R\xdd\xff#\x84\x836\xd1h\x9e\x07\xfe\x18\xb6\xdem\xf3\xc2K\xa1\
-\xca\xe4\xf8\x1c\xd0\xbf\xe8\x00*\xcc\x8f\xe7\xff\xad\x91\xa0YGu\xcc\xe7\xd9\
-\xefH^\xfe\xd9\xd5\xb9\x1dYa.\x02\xbeQy\xc5\xabP\xe1S\xa8\xac\xd1\x15*|\x06\
-\x95\tR\xa1\xc2g\xf0\xdf\xfb\xb6\x96s\xc2\xab2\x10\x00\x00\x00\x00IEND\xaeB`\
-\x82'
-
-def getDocFactory042Bitmap():
- return wxBitmapFromImage(getDocFactory042Image())
-
-def getDocFactory042Image():
- stream = cStringIO.StringIO(getDocFactory042Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory042')
-catalog['DocFactory042'] = ImageClass()
-catalog['DocFactory042'].getData = getDocFactory042Data
-catalog['DocFactory042'].getImage = getDocFactory042Image
-catalog['DocFactory042'].getBitmap = getDocFactory042Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory043Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\ra\
-IDATx\x9c\xed\x9bil]\xc7u\xc7\x7f3w{+\xdf\xc2\xc7U")\x91\x94m\xd9\x94d\xed\
-\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb~\xc8\xc7\xa0\x08\n\x14\
-]\x8c\x06\x81\xed&\xa9Q\xb4p\x9d\xbaQ\x12;\x8e\x11\xc9Nd\xc9V\x14j\xb3\xac\
-\x95\xb2$\x92\xe2\xf2\xb8\x93\x8f|\xeb\xbd\xef\xde;\xfd@G\xb6j[b)\xc96\xd0\
-\xf7\xfbx1\xe7\xfc\xcf93\x83\x99;\x83\x11\x7f\xf7\x1d\xa5\xa8P\xa1\xc2\xa7\
-\xa2\x87\xaa\xbf\xe8\x10*T\xf8\xf2\xa2\x07+\x13\xa4B\x85\xcfD\x0f\'.\xcf\x81\
-@a`#\xf1.\xf8\xeeb\xe0b^\x9e\xf3\xffK\x0c\xc2F\xfb_1(\xa0\xac\x02xhWEW\xe2c\
-\x8a\x12>\x92\xb2\xb2P\x88\xab\xa2S\xe1\x8bC\x0f\xc5\xe7o,\xf0i(\xec"\xea\
-\x9e\xc3\xff\xd8\xd8\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\xed\xcc\xe8\x8bp\t\\~\
-\xb4\x9f\x1a\x83G\x93\xfd\x16U^\xcf\x051\x00\xe8\x96\xc2\xd6j\xe8\xd6\xb6P&t\
-Eu5\x1c\x16\xbb?\'P\x1eA3\x04cr\x19iy\xf3\x15\xd5\xa8\xf0\xc5\xa3\x87/c\x82X\
-\x8c\xd2\xa4?\xc7\xe9\xd7k\x99\x1e\x8c\x00\x02\xa4D\xea\x8apM\x91H}\x91\xb6\
-\xe5\x938\xd6"\xfa\x82\x7f\x8dC\xdd\x15\x0b\xfc\xb7\x04\x19\xa6\xa9\xf82\'\
-\x7f\x1ag:\x1d\x00!@H\x00b\x8d6\xcb\x1e|\x87\xa2Q\xcf\x04\xb7^Q\xdd\x10\xc34\
-\xd8?\xe6\xd8\x8fS\xc4\x16\x96hYs\x88B\xf0z\xca\\FA+|\xe9\xd0#\x97\xd1\x9f!%\
-Hh\xab\x10~\x11\xa9)\x82q\x81\x11\x10(\x04\xa5|\x90\xd1\x93\x92\xfch3\xcb\
-\xef\x91\x98\xc6o\xe8\x0f\xdfw\xc16D\xf8\x1e\xc2-#|\x0f%5\x94n\xa0\xe4\xa7o\
-\x87\x84\xeb \xdd2\xc0\x05mCJ\',\xaeE\xb9\x05\xa4\xc6\xf9\x18@\x90Zl\x12\nu`\
-\x06\x9b\x88\xc8O\xfa\xf1u\x13\xa5\xe9H\xa7\x08B\xe2\x1b\xd6\xec\x04\xbb\x84\
-\xa6@\x11\xf7\x8b\x84\xf3K\x91\x94\xc8\xa6c\\\x17\xb5\xa8\x0b\x8d\x93\x91\
-\x1f\x15tN\xf9)\xf5\x91\xbe\x19\x98\xd5\xf4\xca\xf8\xba5\xabU\xb6g\x9b\x99\
-\x81O\xda\x00\xbe\x19\xbc \xe6\nW\x16\xbd\xca\x1c\x98\xb7\xb1\xa5\x1c0\xd6a\
-\xe8\xef\x10K\xb9\xdc\xf8\x07\xb7\xa0\x85\x82\xa0|\xcay\x9b\x81C=\x8c\x1cOsn\
-\x7f\x8a\xeb\xee\x8a\xe2\x18g(\x88 By\x98\x99n\xccL7^\xa1\x84@\xcd.>\x81\x00\
-vj)NU3|8\x91\x84_\xc6\x9a\xe9\xc1\x98<\x8b\xb2\x1d@\xcd.\x10F\x80b\xed\x8dh\
-\xe1jd\xe0\x16,k\'Z\xca\xe5\xc6\'6bD\x82\x00\xd8e\xc5\xa4\x11A\x06$1\xbf\x07\
-s\xea\x0c\xd6L7\xcavQJ\x81\x19\xc4\x0bVc\x16\xd3(\x05N\xbc\x95R\xaa\xe3\x92\
-\x9aa\xa1S\xed\xcd\x90\x9bZ\x06n\'B\x83Ra%\x8b\xacQ\x86\x0c(Icn\xf9)\x9f@\
-\xfa\x00F.\x8d4$n\xb8\x01\xad0\x86o\x97\x11\xa6\x85\xa3\xd7"\xb3\xe3\x08)\
-\xb0\x17\xae\xc0\x8b\xd6\x02`\xa4O`L\r\x80P\x94\xe3\xcd\x94\x1b\x97^\xce\x18\
-\xa8p\x11\xf4\x08\'\xe7ml\x08\x1daV\xa1\xcb\x1czP`\xc4Rd\xac\x02\x1e`\x85\
-\xc2\xb4\xdd\xb1\x16/\xb7\x9d\xdcp7\x85\xcc5$\xac\x11ts\x86H\xf64z9\xc3\xd0\
-\x89I\xc6\x8fd\xf1\\\x1f=\xa8\xd3\xb8!ACl\x88bq\x01\x85\xe0B\xa4\xf2\x88\xe4\
-N\xa1\xb2\xd3\xf4\xbf3Ln\xd0Fh`F\x0c\xaao\x88R\x1b\x1a\xc1\x0e\xadG\x18)t\
-\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\x83.\x0e\xa3D\xd4\x10\xd1\\\x17\x94\xa6\
-\x19>4N\xa6;\x0f@\xe3\x86$\xf1\xe6\x10\xa3G\xa7\xd1\xc3:5\xab2\xe4|\x87P\xae\
-\xfb35\xeb\xc2\x13\x98U\x9b\x18\xdew\x8a\xc1=\xfbP\xbe\x87\x92\x82S\xdb~\xc1\
-\xd2G\x1e \xa1\xf5\x83sdN\xf9\xe9\xaaD,p\x9c\xee_\xa6\t\xd5Z$\xaf\x1ff\xa2+\
-\xcb\xf8\xb1\x19\x96<\x98$\xe4\xfd\x84\xbe_\x87\x89\xb7;$\xaa\xde\xc6\x8elEz\
-Y\x02\xee\xcb\xa4\x0f\x071\xab<\xe2\x1d\x02G\xfd\x11J\x18WhHT\xf88z\x98=\xf3\
-6\xd6H"\xb8\x13\x9dI\x84\x10\x08\x15\xc2\xe4\xd7xL\xa24\x89\xe7\xdd\xc6\x82\
-\xd5\x1d\xf4l\xff7\xec\xb1!b\xa9\x18\x89\xf2\x08\xa2\xd0\xc0\xe9\x1f\xed\xa7\
-06J \x1eC\x9a&N~\x8a\xe1\xddi\x8a\xe96Z\xbe\xbe\x1c\xc3<\x81\xee$\xd1\xec\
-\x16\xba~\xfa#\x8ac\xa3\x98\xd1\x08F8\x0c\xc2!\xdf\xe3\xd2\xb8r\x13\x9a?\x80\
-\xa0\x05\x9d\t<\xbb\x88=1\x8d\x11\xb40\x85\x86\x16\x88Q\xd2\xf7\x81\x97#\xe0\
-\xb6q\xea\xd5W\xc8\x0f\x0f\x13H\xc4\x91\x96\xc5\xf8\x81s\x8c\xee\xb5\xf1\xdd\
-2\xa1\xfaz\x82\x1b\xeeD\xb73\xc8\x8bi\xae\xba\x13\xa5 X\x15\xa1\xaaV\x92\x1f\
-\xe9CHI8\xbe\x08=\x10\xc3Pi\xfc9\xe5w\x1c%=Lc5\xfet\x17\xa3g\xc7\x98z?D\xb0:\
-\xc9\xc2\xb5\xadT\xd5,\x05\'\x8c\xe1\x1f%\xff\x81\xc6\xc2\x15-\x14\xbc\x03\
-\xc8\x92\x8f\xaeuP\x1e=J\xbc\xa6\x8exU\x03y\xf6Q\xb9\xed\xbd:\xe8!v\xcd\xdbX\
-\xb0\x08\xc1\xbd\xe8b\x1c!A\x88 \x01\xdeC\xd1\x0b\x80\xd4l\x82\xd5\x0f\x10\
-\xb0\x86\xb0\xc7\x0f\xa2\xb1\x12Ct\xd0\xb7\xe7E\xcac\x07Yx\xebV\xean\xde\x02\
-\xaa\x8c[,2\xb0\xe3_)\xf4\xee\xa4\x90^N\xa4}\x01\xf85\x0c\xec\xfeo\xdc\x89\
-\xf7i\xb9\xe31\x12\x1d\xeb\x90\x01\x1fM\x8b\xe39E\x94>\x89\xa9w"\xdcM\xe8b\
-\x0c7{\x86\xb3\xff\xf9\x0c\xd2\x94\x08M\xd2\xb8\xf1i\xa2K\x96\xa0\xbc,\x99S]\
-8\xa3\x87Xx\xdbC\xd4\xdd\xbc\x05\xa1\xfb\xf86\x0c\xbe\xf5"\xd3\xa7\xf7b\xe8\
-\x1a\xc2\xacGw\xa3\x0c\xec~\xf9\xa2\x9a\xca\xdaA\xec\xda\xbb\x88\xb5=\xcd\
-\x99\x97\x9eA\xe8\x1e\xed\xf7?\x85\xb0&\x91Z\x1d}{~v\xe9\xfc\xda\xeaQ\xd6v\
-\x84\xb9\t]Na\xca!Z6\xff\x19\xb1\xf6\x15\xf8\xa2\x17\x15x\x0frK\xa8_c\xd2\
-\xf7\xc6\x7fQ\x9a\xfe:\xc1`\x11\xe5%\x99\xea\xe9Bg\x88\xd4\xb2G \xd4OP\xbc\t\
-\x95)rU\xd0\x03\xa3\x97\xf1\x83\xa7kx\x81\x08\x9a-\x91R\x80\x1f\xc1\x9a\xd4\
-\xc0\x9d\xf5\xa9\xac8\xae\x1f\xc6,\tL/\x8cP1(\xfb\xd8\xbd}\x84\x82\x8d\xd4\
-\xad{\x14\xad\xbc\x1d\xe9\xedG\x9a\x0fQ\xb7\xfaa\x06\xbaOP\xea\xe9!\xb6\xf8q\
-<O`w\x9f%\x14\xa8\xa3f\xd5CH\xf7\'\xc8\xc2\x1e\x90\t4\xa1\x833\x05\xa5$\x9e\
-\tZ\t\xf4"X\xa1\x04\xba\x15E\x1a\x1aV0\x85\xe6\xba(\xd9J\xa6\xf3_\x08\x05\
-\xea\xa9[\xbb\x15\xdd\xf99\xa2t\x04\xdfz\x92\x9a\xe5\xf7Q<\xb1\x1f\xdd\xd1\
-\x11*\x01^\xe0\xd2\x9a\xb9\x19\xd03x\xd6\xb70U\x04\xa9\x04\x9a^\x85f\xbf\x82\
-g<9\xa7\xfc\xaaZ\xb6\xa2\x15v\xe3Y14[#\x14^H\xacu\x13\xba\xf3=p\x8e@\xd6C\
-\xe9%\xaa\x96l&`\xbd\xc9d\xe7\x01\x9a\xb6\xfe)\x9e\x9f\'{\xf8%\x12M+1\x93\
-\x8b\x91\xf9\x1d\x90\x05*w0W\x05\x9d\x9d\x8b\xe7o\x1d\xab\x85\xf5#\x88\xe1 H\
-\xc0\x1e\x81}\xb50\xad\xc0\xb0P\xeb\xd6Q\xea{\x0fu2\x84\xd5\xde\x8a\x9c\x9e\
-\xc0\x13)\xbc\xd3\x02=\xd6\x08\x85\x00\xf2\xc0 \x14\x82h\x8di\xac\x86\xdb\
-\xd0\x86\x1ba,\x86*$P\xc5"\xee\x07`$\xea\xf1g\x0c\xf4C\x13P\xf8\xf8Qq5\xc4j`\
-M\x1a1\x1c\xc0r\xdai\xdd\xfa\x17h\xd1\x08\xf8>\xfe\xf8 \xf2\xc8\x19\x9c\xe6\
-\x058\xc7K\x18\xc9FD9\x81\xd87\r\xb9 \xb2e\x00\xa3\xfe&\xb4\xa1z\x84\x97\x04\
-/\x81\xca\xa9Kk\xfeVw\xed r8\x80\x90\x02Ji\xe8J\xe2/\x96s\xca\x8f|\x02\x8e4\
-\xc1\xba8\x0c\xc7f\xb7\xa8~\n:#\x90i\x06@\x04\xca\xc8\x9b\xa3D\xe27\x93\xdd\
-\xfd\x1e\xf6M\x05\xect\x9a\xf2Q\x97\xfa\xdb\xee\x85\xe1<\xec\x0b\x80\x7f\x19\
-}X\xe1\xa2\xe8\x83\xcf=9oc\xa3U\x90\xe8\x18\xa7pr\x11\x12\r??\xc9\xf4\xde\
-\xcd \x15\xe6j\x1f=\xeb2\xf8\xdd!\n\xa7n\xa1\xe6\x81F\x8a\x87m\xcc\x15yTi\
-\x03\xd9\xd3\x19\xbc\xec\x14N\xe8q\xec\xf7]BK,f:\xfb\x99\xde\xd5A\xb0\xa1\
-\x01\x7fj\n\x11\x02\xca\xb7\x92\xd95\x82\xf3\xe8\x08%\xf5{\xd8\xbb\\\xf4&\
-\x1d\xe3\x1a\r\xfbP\x19/]$\xb1tt6\x06\xa1\x81(\x90\xf9G\x81\xdb/p\x07k\xd0\
-\x1a\x1aH\xfem\t/\xb3\x96BW\x8e\xf2\xc40N\xe0\x11\x8a{m\xc2K\x02\xcc\xec\xe9\
-azW\x07\xa1kR\xf8\x854B\xfa\x97\xd4,\xed\xb11\x16\xf9$\xae\x1f\'\x7f\xac\x1d\
-\x81\xc4\xcf\x8f\x91y}\rUO\x17\xe6\x94\x9f;\x9eer\xdbW\x89\xdf0D\xa1\xabi\
-\xf6\x987?\xcc\xc4\x0f\xef\xa2\xdc]>_\xe3P_\x80\xd8\xea\x87\x19|~\x86\x13\
-\x7f\xb2\x1dUt\xb1\x1a\xee\xc2Z\xb8\x9e\xccw\x87(\xfe\xea\xf7\xaf\xc00\xa8\
-\xf0Y\xe8\xaf\xaeZ?o\xe3\xea\xfa\x19\xeee7\xe7R\xd58EI\xed\xe0 \xdco\x91\x9f\
-\x84\xec\xb0C\xf7wl2\xb9\x14\xd7\xfda=\xc6\xd22omk\xe6\x86X?\xd1\'\xda9\xfc\
-\xf7\xa7\x19~v7mw.@\xae\x0cR:\x9e\xe7\xd4\x9b\x19\x8a\xad\xed\xd4m\x8c\xd3\
-\xd5\xeb\x90He\t?\xd6\xc6\xa1\x7f\xf0\x19\xfb~\'mw\xd4\xa3\xee\x8a\xa2[\xa0\
-\x1b.\xc9oD\xd8\xbf\xa3\x95\xdb\xe5\x0e\xce\xa5\x92 5\xda\x19\xe4\xcd\xc8}L$\
-\x93\x90\x04\xa9)\xbe\xd6\xb7\x1f\xfd\x81V\x0e\xff\xa0\x8f\xc2\x0f\xf7\xd3\
-\xb8\xb6\x16\x7f\xbd\xc9\xc0\x87\x9a\xb9\xa66\x92u\x16\xadn\x1f\xd9)\xe3\x92\
-\x9a\xefDW"\xb0\xb9W\xbcFOM5J\x1a\xb4\x8a4\xbfJ\xaebUo\xef\xdc\xf2\x1bp9\xb5\
-x\t\xf7\xa8\x03\xf4%c\x08)\xb9V\xf5\xb3\xf3\xba\xb5L\xc4\xc3\xe7k\x1c\x9b\
-\x11liv\x99\xbc}-#\xc7\x87 \xa4\xb3\xfa\xe1\x8dL\xe7\xaax\xd5\x89c\xaf\xaa\
-\xfc{\\M\xf4S~a\xde\xc6\x8d\xfe4\xb6\xdd\xcb\xb8SbbL\xa7\xff\xdbi\xd0tl\xc7@\
-\t\r\x84d\xd12\x97\x8e\xdf\xcds\xf0H\x1bo\xf7\x84\x18\xd5\xc3<\xf1\xe0(\x0b7\
-\x1b\x1c\xfeE\x8e\x93\xcf\x9fEI\r_\x18\x84\x13\x92e\xf7H\xcc\x9a\x11^\xdf\
-\xb6\x8c\xc6Z\x9f\x87\xb7\x8cQ\xf7\x15\x8dS{\xf3\x9c|\xa1\xf7|\xdb\xea&\xc9}\
-\x7fe0\xae\x05\xb1Kg\x18/\x87\xb1\xa2\x12\xc7\x1e\xe5l9\xc7\x88\xff\xe1\xc5\
-\x9a\x0fng\x82G\xb7\xe4\x08\xaf\x90\x1c\xda3\xce\xfew3(\xa9\x11\xad5Xp\x9dd\
-\xa8$\tF\xf2\xd8\xc5\xb3\xbc{x\x05\xbf\xb3\xf1\xe2\x9aCz\x13\x8e\xe3S*t3lW\
-\x13\x8c9\x94\xedqN\x97\xf2L\x1f\x99[~ol[\x86\x94\xd38\xa5\xd3L:\x05\xac*\
-\x83\xb2}\x86\xb3\xe5k\x19\xf1?vY9\x06M\'g\xa8\xdb\xd8\xc4\xf1\x13\x83\x84\
-\x12&\r\xeb#t\xbe7\xc9\x91\\\xf0r\xfb\xbf\xc2%\xd0\x07\x06\xe6\x7fQ\x98\xcf\
-\xe6)\xe5\xbbi\xbfIP\xee\x0ca;\x06\xbe\xd0\x89$$\xb5\xcd\x0e-Km\x9a\x97\x96\
-\xd8\xd3\xd9\xc6K\xaf6Q,\xa5I\x0f*\xa4\x17\xe4\xfe\xcd\x87\xa8n58s0H1\xa7aE\
-\x057~5K\xb8\x1a^\xf8\x8f{8\xda\x95\xc5\xd05\x94\xad\xf3\xe0\xe3]\\s\x8b\xc6\
-\xd1\xdd\x11\xa6\xc6-b\xf5\x8a\x15_\xc9\xd2\xd3\x9bb\xff\xa1%|mu7\x8bVF\xa8\
-\xaa\xf5I\x0fX\x1c;1\x83\xed\x94\xce\xc7\x99N+\xaa#\xb0\xf9\xa9\xd3\x9c;\x1a\
-\xe0\xf8\xbb!4S\xb0fs\x96\xe6k\xf2\xec\xdb\x91$\x9a\xf48{\xa6\x8am\xaf\xaf\'\
-;y\t\xcd\x839bUY\x8a\x85\x1eZ\x96O\xd2\xd0V\xa4\xfbl\x94\xf7\x8f\xe5\x110\
-\xe7\xfcjS\x19\xec\xc2!\x9a\xd7\xe8\xc4\xea|\x06\xfa\xc79v|\x12\xdb\xc9^P\
-\xe7\xbd\xfb]\x1e\xdc\xe4\x90wJ4\xb5\'\x10r\x9c7w\x96\x18\x18\x90\xf3\xee\
-\xbb\nsC\xac_\xff\xc6\xbc\xd7h!`\xcb\xc6.n_\xd3C*YD\xc8YW\xd9\xacIf\xc6bt2\
-\xc2/\x7f\xb3\x84\xb3\xe7\xaa)\xbb\xf2\x02\xbb\xa5\xed\xd3lX6DK\xe3\x0c\xcaS\
-\xf8ht\xf5$\xd8\x7f\xbc\x8e\x9e\xfe\xc8\xf9\xb6R*\x96_;\xc9\xc6\xd5\x83\xa4\
-\xe2\x05\xcae\x89\x92:\xef\x7fP\xcd\xce\xceFry\x83\xbbo\x1fb}\xc7$e_\xe3\xb5\
-\xb7\x1b9|\xb2\xea\x13\xb1\x06,\x8f[\xd7\x8er\xd3\xf2!\xa4\xef"5\x18\xc9D8s\
-\xae\x8a\r\xcb\x86\x00\xc1ko/\xe6\xf0\xc9\xeaKjfs\x06B\xc0\xdd\xb7\x8f\xb0\
-\xaec\x02\xd7\x97\x17\xe8\xce5\xbfY\x1f\xbdl\xe8\x18\xa2\xeck\xbc\xfav\x1b\
-\x87O^\xf8\xfe\xc0\xd0\xe1o\xbe\x99\xa3\xdc?\xc4\x1b\xdf\xeb\xe5\x1b\xff\xd4\
-A\xcfX\x94o?\x1b\xa1\xf2\xd4\xed\xea#\x16,\xf8\xfee\x97Y\x08\x08\x05?r\xe3\
-\xba`;\x95c\xc7+\xc1\xbaUe~\xf0\xec\x14\xcf\xfd\xe5\x00\xae\'\xf8\xf3\x7f^\
-\xc0S\xdf\x8c\xf3\xce\xde\xcf\xe7)\xc1\xffw\xf4\xc1\xc1\xc1/:\x86\n\x17\xe1\
-\x86\xad\x13L\re8v0\xcfc\xcf\x04\xe8:a\xf3\xc6\xf6\x05\xccd+\xdb\xab\xcf\x83\
-J\x95\xbf\xe4\x84\x836\xd1h\x9e\x07\xfe\x186\xdem\xf3\xe2\xcb\xa1\xca\xe4\
-\xf8\x1c\xd1\xbf\xe8\x00*\\\x9c\xe7\xff\xbd\x91\xa0YGu\xcc\xe7\xd9\x17$\xaf\
-\xfc\xec\xea\xbc\x8e\xac\xf0\xe9\x08\xf8V\xe5W\xafB\x85\xcf\xa0\xb2VW\xa8p\
-\x11*\x13\xa4B\x85\x8b\xf0?\xe0J\x96s\x1b\xad\x04\x06\x00\x00\x00\x00IEND\
-\xaeB`\x82'
-
-def getDocFactory043Bitmap():
- return wxBitmapFromImage(getDocFactory043Image())
-
-def getDocFactory043Image():
- stream = cStringIO.StringIO(getDocFactory043Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory043')
-catalog['DocFactory043'] = ImageClass()
-catalog['DocFactory043'].getData = getDocFactory043Data
-catalog['DocFactory043'].getImage = getDocFactory043Image
-catalog['DocFactory043'].getBitmap = getDocFactory043Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory044Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r_\
-IDATx\x9c\xed\x9byp]\xd5}\xc7?\xe7\xdc\xed\xadz\x8b\x9eV[\x92-\xc9\x80A\xb6\
-\xf1nV\'\x86\x84\xda,esYZ\xe8t\xda\xc9t\n\xd3\x0em\xff\xc8\x9f\x99N\xa63\x9d\
-.L3\x19\xa0I\xcat\xda\xa1$$N\x02!LlH\x8c\r\x8e#o\x18\xaf2\xb6%Y\xcb\xd3.=\
-\xe9\xad\xf7\xbe{\xef\xe9\x1f\xa2\x06\x17\xb0%\xd7\x06\xfex\x9f?\xef\x9c\xdf\
-\xf9~\x7fg\x99s\xee9s\xc4?|G)*T\xa8\xf0\xa9\xe8\xa1\xea/\xdaB\x85\n_^\xf4`e\
-\x82T\xa8\xf0\x99\xe8\xe1\xc4\xe5\x05\n\x14\x066\x12\xef\x82\xef.\x06.\xe6\
-\x15\xb06G\x0f\xc2F\xfb?\x1e\x14PV\x01<\xb4\xab\xa2+\xf11E\t\x1fIYY(\xc4U\
-\xd1\xa9\xf0\xc5\xa3\x87\xe2\xf3\x0f\x12\xf84\x14v\x11u\xcf\xe1\x7fllJ\t\xd2\
-\xd4\xc9\xbbqr\xc1vf\xf4E\xb8\x04\xae\x9c\xdb\x0b<x4\xd9oQ\xe5\xf5\\\xe0\x01\
-@\xb7\x14\xb6VC\xb7\xb6\x852\xa1+\xaa\xab\xe1\xb0\xd8\xfd%\x81\xf2\x08\x9a!\
-\x18\x93\xcbH\xcb\x9b\xaf\xa8F\x85/\x0fz\xf82&\x88\xc5(M\xfas\x9c~\xbd\x96\
-\xe9\xc1\x08 @J\xa4\xae\x08\xd7\x14\x89\xd4\x17i[>\x89c-\xa2/\xf8\xb78\xd4]q\
-\xe3A\x86i*\xbe\xcc\xc9\x9f\xc7\x99N\x07@\x08\x10\x12\x80X\xa3\xcd\xb2\x07\
-\xdf\xa1h\xd43\xc1\xadWT7\xc40\r\xf6O9\xf6\xd3\x14\xb1\x85%Z\xd6\x1c\xa2\x10\
-\xbc\x9e2\x97\xd1\x90\x15\xbe\xf4\xe8\x91\xcb\xe8\xd7\x90\x12$\xb4U\x08\xbf\
-\x88\xd4\x14\xc1\xb8\xc0\x08\x08\x14\x82R>\xc8\xe8II~\xb4\x99\xe5\xf7HL\xe3w\
-\xf4\x87\xef\xbb`\x1b"|\x0f\xe1\x96\x11\xbe\x87\x92\x1aJ7P\xf2\xd3\xb7C\xc2u\
-\x90n\x19\xe0\x82\xb2!\xa5\x13\x16\xd7\xa2\xdc\x02R\xe3\xbc\x07\x10\xa4\x16\
-\x9b\x84B\x1d\x98\xc1&"\xf2\x93\xf5\xf8\xba\x89\xd2t\xa4S\x04!\xf1\rkv\x82]B\
-S\xa0\x88\xfbE\xc2\xf9\xa5HJd\xd31\xae\x8bZ\xd4\x85\xc6\xc9\xc8\x8f\x1arN\
-\xf9)\xf5\x91\xbe\x19\x98\xd5\xf4\xca\xf8\xba5\xabU\xb6g\x8b\x99\x81O\xc6\
-\x00\xbe\x19\xbc\xc0s\x85\xab\x83^e\x0e\xcc;\xc8R\x0e\x18\xeb0\xf4w\x88\xa5\
-\\n\xfc\xa3[\xd0BAP>\xe5\xbc\xcd\xc0\xa1\x1eF\x8e\xa79\xb7?\xc5uwEq\x8c3\x14\
-D\x10\xa1<\xccL7f\xa6\x1b\xafPB\xa0f\x17\x9f@\x00;\xb5\x14\xa7\xaa\x19>\x9cH\
-\xc2/c\xcd\xf4`L\x9eE\xd9\x0e\xa0f\x17\x08#@\xb1\xf6F\xb4p52p\x0b\x96\xb5\
-\x13-\xe5r\xe3\x13\x1b1"A\x00\xec\xb2b\xd2\x88 \x03\x92\x98\xdf\x839u\x06k\
-\xa6\x1be\xbb(\xa5\xc0\x0c\xe2\x05\xab1\x8bi\x94\x02\'\xdeJ)\xd5qI\xcd\xb0\
-\xd0\xa9\xf6f\xc8M-\x03\xb7\x13\xa1A\xa9\xb0\x92E\xd6(C\x06\x94\xa41\xb7\xfc\
-\x94O }\x00#\x97F\x1a\x127\xdc\x80V\x18\xc3\xb7\xcb\x08\xd3\xc2\xd1k\x91\xd9\
-q\x84\x14\xd8\x0bW\xe0Ek\x010\xd2\'0\xa6\x06@(\xca\xf1f\xca\x8dK\xaf\xc4\x18\
-\xa8p\x11\xf4\x08\'\xe7\x1dd\x08\x1daV\xa1\xcb\x1czP`\xc4Rd\xac\x02\x1e`\x85\
-\xc2\xb4\xdd\xb1\x16/\xb7\x9d\xdcp7\x85\xcc5$\xac\x11ts\x86H\xf64z9\xc3\xd0\
-\x89I\xc6\x8fd\xf1\\\x1f=\xa8\xd3\xb8!ACl\x88bq\x01\x85\xe0B\xa4\xf2\x88\xe4\
-N\xa1\xb2\xd3\xf4\xbf3Ln\xd0Fh`F\x0c\xaao\x88R\x1b\x1a\xc1\x0e\xadG\x18)t\
-\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\x83.\x0e\xa3D\xd4\x10\xd1\\\x17\x94\xa6\
-\x19>4N\xa6;\x0f@\xe3\x86$\xf1\xe6\x10\xa3G\xa7\xd1\xc3:5\xab2\xe4|\x87P\xae\
-\xfb35\xeb\xc2\x13\x98U\x9b\x18\xdew\x8a\xc1=\xfbP\xbe\x87\x92\x82S\xdb~\xc5\
-\xd2G\x1e \xa1\xf5\x83sdN\xf9\xe9\xaaD,p\x9c\xee_\xa7\t\xd5Z$\xaf\x1ff\xa2+\
-\xcb\xf8\xb1\x19\x96<\x98$\xe4\xfd\x8c\xbe\xdf\x86\x89\xb7;$\xaa\xde\xc6\x8e\
-lEzY\x02\xee\xcb\xa4\x0f\x071\xab<\xe2\x1d\x02G\xfd\tJ\x18WxHT\xf88z\x98=\
-\xf3\x0e\xd2H"\xb8\x13\x9dI\x84\x10\x08\x15\xc2\xe4\xb7xL\xa24\x89\xe7\xdd\
-\xc6\x82\xd5\x1d\xf4l\xff\x0f\xec\xb1!b\xa9\x18\x89\xf2\x08\xa2\xd0\xc0\xe9\
-\x9f\xec\xa706J \x1eC\x9a&N~\x8a\xe1\xddi\x8a\xe96Z\xbe\xbe\x1c\xc3<\x81\xee\
-$\xd1\xec\x16\xba~\xfe\x13\x8ac\xa3\x98\xd1\x08F8\x0c\xc2!\xdf\xe3\xd2\xb8r\
-\x13\x9a?\x80\xa0\x05\x9d\t<\xbb\x88=1\x8d\x11\xb40\x85\x86\x16\x88Q\xd2\xf7\
-\x81\x97#\xe0\xb6q\xea\xd5W\xc8\x0f\x0f\x13H\xc4\x91\x96\xc5\xf8\x81s\x8c\
-\xee\xb5\xf1\xdd2\xa1\xfaz\x82\x1b\xeeD\xb73\xc8\x8bi\xae\xba\x13\xa5 X\x15\
-\xa1\xaaV\x92\x1f\xe9CHI8\xbe\x08=\x10\xc3Pi\xfc9\xe5w\x1c%=Lc5\xfet\x17\xa3\
-g\xc7\x98z?D\xb0:\xc9\xc2\xb5\xadT\xd5,\x05\'\x8c\xe1\x1f%\xff\x81\xc6\xc2\
-\x15-\x14\xbc\x03\xc8\x92\x8f\xaeuP\x1e=J\xbc\xa6\x8exU\x03y\xf6Q\xb9\xe5\
-\xbd\xba\xe8!v\xcd;H\xb0\x08\xc1\xbd\xe8b\x1c!A\x88 \x01\xdeC\xd1\x0b\x80\
-\xd4l\x82\xd5\x0f\x10\xb0\x86\xb0\xc7\x0f\xa2\xb1\x12Ct\xd0\xb7\xe7E\xcac\
-\x07Yx\xebV\xean\xde\x02\xaa\x8c[,2\xb0\xe3\xdf)\xf4\xee\xa4\x90^N\xa4}\x01\
-\xf85\x0c\xec\xfe1\xee\xc4\xfb\xb4\xdc\xf1\x18\x89\x8eu\xc8\x80\x8f\xa6\xc5\
-\xf1\x9c"J\x9f\xc4\xd4;\x11\xee&t1\x86\x9b=\xc3\xd9\xff~\x06iJ\x84&i\xdc\xf8\
-4\xd1%KP^\x96\xcc\xa9.\x9c\xd1C,\xbc\xed!\xean\xde\x82\xd0}|\x1b\x06\xdfz\
-\x91\xe9\xd3{1t\ra\xd6\xa3\xbbQ\x06v\xbf|QMe\xed v\xed]\xc4\xda\x9e\xe6\xccK\
-\xcf t\x8f\xf6\xfb\x9fBX\x93H\xad\x8e\xbe=\xbf\xb8t~m\xf5(k;\xc2\xdc\x84.\
-\xa70\xe5\x10-\x9b\xff\x82X\xfb\n|\xd1\x8b\n\xbc\x07\xb9%\xd4\xaf1\xe9{\xe3G\
-\x94\xa6\xbfN0XDyI\xa6z\xba\xd0\x19"\xb5\xec\x11\x08\xf5\x13\x14oBe\x8a\\U\
-\xf4\xc0\xe8e\xfc\xe8\xe9\x1a^ \x82fK\xa4\x14\xe0G\xb0&5pg\xebRV\x1c\xd7\x0f\
-c\x96\x04\xa6\x17F\xa8\x18\x94}\xec\xde>B\xc1F\xea\xd6=\x8aV\xde\x8e\xf4\xf6\
-#\xcd\x87\xa8[\xfd0\x03\xdd\'(\xf5\xf4\x10[\xfc8\x9e\'\xb0\xbb\xcf\x12\n\xd4\
-Q\xb3\xea!\xa4\xfb3da\x0f\xc8\x04\x9a\xd0\xc1\x99\x82R\x12\xcf\x04\xad\x04z\
-\x11\xacP\x02\xdd\x8a"\r\r+\x98Bs]\x94l%\xd3\xf9o\x84\x02\xf5\xd4\xad\xdd\
-\x8a\xee\xfc\x12Q:\x82o=I\xcd\xf2\xfb(\x9e\xd8\x8f\xee\xe8\x08\x95\x00/pi\
-\xcd\xdc\x0c\xe8\x19<\xeb[\x98*\x82T\x02M\xafB\xb3_\xc13\x9e\x9cS~U-[\xd1\n\
-\xbb\xf1\xac\x18\x9a\xad\x11\n/$\xd6\xba\t\xdd\xf9\x1e8G \xeb\xa1\xf4\x12UK6\
-\x13\xb0\xded\xb2\xf3\x00M[\xff\x1c\xcf\xcf\x93=\xfc\x12\x89\xa6\x95\x98\xc9\
-\xc5\xc8\xfc\x0e\xc8\x02\x95;\x98\xab\x8a\xce\xce\xc5\xf3\x8f\x8a\xd5\xc2\
-\xfa\x11\xc4p\x10$`\x8f\xc0\xbeZ\x98V`X\xa8u\xeb(\xf5\xbd\x87:\x19\xc2joENO\
-\xe0\x89\x14\xdei\x81\x1ek\x84B\x00y`\x10\nA\xb4\xc64V\xc3mh\xc3\x8d0\x16C\
-\x15\x12\xa8b\x11\xf7\x030\x12\xf5\xf83\x06\xfa\xa1\t(|\xfc\xa8\xb8\x1ab5\
-\xb0&\x8d\x18\x0e`9\xed\xb4n\xfd+\xb4h\x04|\x1f\x7f|\x10y\xe4\x0cN\xf3\x02\
-\x9c\xe3%\x8cd#\xa2\x9c@\xec\x9b\x86\\\x10\xd92\x80Q\x7f\x13\xdaP=\xc2K\x82\
-\x97@\xe5\xd4\xa55\xffWw\xed r8\x80\x90\x02Ji\xe8J\xe2/\x96s\xca\x8f|\x02\
-\x8e4\xc1\xba8\x0c\xc7f\xb7\xa8~\n:#\x90i\x06@\x04\xca\xc8\x9b\xa3D\xe27\x93\
-\xdd\xfd\x1e\xf6M\x05\xect\x9a\xf2Q\x97\xfa\xdb\xee\x85\xe1<\xec\x0b\x80\x7f\
-\x19}Wa^\xe8\x83\xcf=9\xef \xa3U\x90\xe8\x18\xa7pr\x11\x12\r??\xc9\xf4\xde\
-\xcd \x15\xe6j\x1f=\xeb2\xf8\xdd!\n\xa7n\xa1\xe6\x81F\x8a\x87m\xcc\x15yTi\
-\x03\xd9\xd3\x19\xbc\xec\x14N\xe8q\xec\xf7]BK,f:\xfb\x99\xde\xd5A\xb0\xa1\
-\x01\x7fj\n\x11\x02\xca\xb7\x92\xd95\x82\xf3\xe8\x08%\xf5\x07\xd8\xbb\\\xf4&\
-\x1d\xe3\x1a\r\xfbP\x19/]$\xb1tt\xd6\x83\xd0@\x14\xc8\xfc\xb3\xc0\xed\x17\
-\xb8\x835h\r\r$\xff\xbe\x84\x97YK\xa1+Gyb\x18\'\xf0\x08\xc5\xbd6\xe1%\x01f\
-\xf6\xf40\xbd\xab\x83\xd05)\xfcB\x1a!\xfdKj\x96\xf6\xd8\x18\x8b|\x12\xd7\x8f\
-\x93?\xd6\x8e@\xe2\xe7\xc7\xc8\xbc\xbe\x86\xaa\xa7\x0bs\xca\xcf\x1d\xcf2\xb9\
-\xed\xab\xc4o\x18\xa2\xd0\xd54{\xcc\x9b\x1ff\xe2\x87wQ\xee.\x9fo\xe3P_\x80\
-\xd8\xea\x87\x19|~\x86\x13\x7f\xb6\x1dUt\xb1\x1a\xee\xc2Z\xb8\x9e\xccw\x87(\
-\xfe\xe6\x0f\xaf\xe00\xa8\xf0Y\xe8\xaf\xaeZ?\xef\xa0\xea\xfa\x19\xeee7\xe7R\
-\xd58EI\xed\xe0 \xdco\x91\x9f\x84\xec\xb0C\xf7wl2\xb9\x14\xd7\xfdq=\xc6\xd22\
-omk\xe6\x86X?\xd1\'\xda9\xfc\x8f\xa7\x19~v7mw.@\xae\x0cR:\x9e\xe7\xd4\x9b\
-\x19\x8a\xad\xed\xd4m\x8c\xd3\xd5\xeb\x90He\t?\xd6\xc6\xa1\x7f\xf2\x19\xfb~\
-\'mw\xd4\xa3\xee\x8a\xa2[\xa0\x1b.\xc9oD\xd8\xbf\xa3\x95\xdb\xe5\x0e\xce\xa5\
-\x92 5\xda\x19\xe4\xcd\xc8}L$\x93\x90\x04\xa9)\xbe\xd6\xb7\x1f\xfd\x81V\x0e\
-\xff\xa0\x8f\xc2\x0f\xf7\xd3\xb8\xb6\x16\x7f\xbd\xc9\xc0\x87\x9a\xb9\xa66\
-\x92u\x16\xadn\x1f\xd9)\xe3\x92\x9a\xefDW"\xb0\xb9W\xbcFOM5J\x1a\xb4\x8a4\
-\xbfI\xaebUo\xef\xdc\xf2\x1bp9\xb5x\t\xf7\xa8\x03\xf4%c\x08)\xb9V\xf5\xb3\
-\xf3\xba\xb5L\xc4\xc3\xe7\xdb86#\xd8\xd2\xec2y\xfbZF\x8e\x0fAHg\xf5\xc3\x1b\
-\x99\xceU\xf1\xaa\x13\xc7^U\xf9\xf7\xf8<\xd0O\xf9\x85y\x075\xfa\xd3\xd8v/\
-\xe3N\x89\x891\x9d\xfeo\xa7A\xd3\xb1\x1d\x03%4\x10\x92E\xcb\\:~?\xcf\xc1#m\
-\xbc\xdd\x13bT\x0f\xf3\xc4\x83\xa3,\xdclp\xf8W9N>\x7f\x16%5|a\x10NH\x96\xdd#\
-1kFx}\xdb2\x1ak}\x1e\xde2F\xddW4N\xed\xcds\xf2\x85\xde\xf3e\xab\x9b$\xf7\xfd\
-\x8d\xc1\xb8\x16\xc4.\x9da\xbc\x1c\xc6\x8aJ\x1c{\x94\xb3\xe5\x1c#\xfe\x87\
-\x17k>\xb8\x9d\t\x1e\xdd\x92#\xbcBrh\xcf8\xfb\xdf\xcd\xa0\xa4F\xb4\xd6`\xc1u\
-\x92\xa1\x92$\x18\xc9c\x17\xcf\xf2\xee\xe1\x15\xfc\xde\xc6\x8bk\x0e\xe9M8\
-\x8eO\xa9\xd0\xcd\xb0]M0\xe6P\xb6\xc79]\xca3}dn\xf9\xbd\xb1m\x19RN\xe3\x94N3\
-\xe9\x14\xb0\xaa\x0c\xca\xf6\x19\xce\x96\xafe\xc4\xff\xd8e\xe5\x184\x9d\x9c\
-\xa1nc\x13\xc7O\x0c\x12J\x984\xac\x8f\xd0\xf9\xde$Gr\xc1+\xd5\xff\x15.\x81>0\
-0\xff\x8b\xc2|6O)\xdfM\xfbM\x82rg\x08\xdb1\xf0\x85N$!\xa9mvhYj\xd3\xbc\xb4\
-\xc4\x9e\xce6^z\xb5\x89b)MzP!\xbd \xf7o>Du\xab\xc1\x99\x83A\x8a9\r+*\xb8\xf1\
-\xabY\xc2\xd5\xf0\xc2\x7f\xdd\xc3\xd1\xae,\x86\xae\xa1l\x9d\x07\x1f\xef\xe2\
-\x9a[4\x8e\xee\x8e05n\x11\xabW\xac\xf8J\x96\x9e\xde\x14\xfb\x0f-\xe1k\xab\
-\xbbY\xb42BU\xadOz\xc0\xe2\xd8\x89\x19l\xa7t\xdeg:\xad\xa8\x8e\xc0\xe6\xa7Ns\
-\xeeh\x80\xe3\xef\x86\xd0L\xc1\x9a\xcdY\x9a\xaf\xc9\xb3oG\x92h\xd2\xe3\xec\
-\x99*\xb6\xbd\xbe\x9e\xec\xe4%4\x0f\xe6\x88Ue)\x16zhY>IC[\x91\xee\xb3Q\xde?\
-\x96G\xc0\x9c\xf3\xabMe\xb0\x0b\x87h^\xa3\x13\xab\xf3\x19\xe8\x1f\xe7\xd8\
-\xf1Il\'{A;\xef\xdd\xef\xf2\xe0&\x87\xbcS\xa2\xa9=\x81\x90\xe3\xbc\xb9\xb3\
-\xc4\xc0\x80\xfc\xff\xf6{\x859"\xd6\xaf\x7fc\xdek\xb5\x10\xb0ec\x17\xb7\xaf\
-\xe9!\x95,"\xe4l\x15\xd9\xacIf\xc6bt2\xc2\xaf\x7f\xb7\x84\xb3\xe7\xaa)\xbb\
-\xf2\x82\xb8\xa5\xed\xd3lX6DK\xe3\x0c\xcaS\xf8ht\xf5$\xd8\x7f\xbc\x8e\x9e\
-\xfe\xc8\xf9\xb2R*\x96_;\xc9\xc6\xd5\x83\xa4\xe2\x05\xcae\x89\x92:\xef\x7fP\
-\xcd\xce\xceFry\x83\xbbo\x1fb}\xc7$e_\xe3\xb5\xb7\x1b9|\xb2\xea\x13^\x03\x96\
-\xc7\xadkG\xb9i\xf9\x10\xd2w\x91\x1a\x8cd"\x9c9W\xc5\x86eC\x80\xe0\xb5\xb7\
-\x17s\xf8d\xf5%5\xb39\x03!\xe0\xee\xdbGX\xd71\x81\xeb\xcb\x0bt\xe7\x9a\xdfl\
-\x1d\xbdl\xe8\x18\xa2\xeck\xbc\xfav\x1b\x87O^\xf8\xee\xc0\xd0\xe1\xef\xbe\
-\x99\xa3\xdc?\xc4\x1b\xdf\xeb\xe5\x1b\xff\xd2A\xcfX\x94o?\x1b\xa1\xf2\xc4\
-\xed\xf3C,X\xf0\xfd\xcbnn! \x14\xfc(\xdcu\xc1v*\xc7\x8eW\x82u\xab\xca\xfc\
-\xe0\xd9)\x9e\xfb\xeb\x01\\O\xf0\x97\xff\xba\x80\xa7\xbe\x19\xe7\x9d\xbd\x9f\
-\xcfS\x82\n\xb3\xe8\x83\x83\x83_\xb4\x87\n\x9f\xc2\r[\'\x98\x1a\xcap\xec`\
-\x9e\xc7\x9e\t\xd0u\xc2\xe6\x8d\xed\x0b\x98\xc9V\xb6W\x9f\'\x95\xd6\xfe\x92\
-\x12\x0e\xdaD\xa3y\x1e\xf8S\xd8x\xb7\xcd\x8b/\x87*\x93\xe3\x0b@\xff\xa2\rT\
-\xf8t\x9e\xff\xcfF\x82f\x1d\xd51\x9fg_\x90\xbc\xf2\x8b\xab\xf3:\xb2\xc2\xc5\
-\x11\xf0\xad\xca/_\x85\n\x9fAe\xcd\xaeP\xe1"T&H\x85\n\x17\xe1\x7f\x00\xc4\
-\xde\x96s\\si\xa2\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory044Bitmap():
- return wxBitmapFromImage(getDocFactory044Image())
-
-def getDocFactory044Image():
- stream = cStringIO.StringIO(getDocFactory044Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory044')
-catalog['DocFactory044'] = ImageClass()
-catalog['DocFactory044'].getData = getDocFactory044Data
-catalog['DocFactory044'].getImage = getDocFactory044Image
-catalog['DocFactory044'].getBitmap = getDocFactory044Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory045Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\r\
-\\IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\
-\xb6lJ\xb2vyU";q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\
-\x8a.F\x83\xc0\xceV\xa3h\xe1:u\xa3$v\x1c#\x92\x9d\xc8\x92\xad(\xd4fY+eI$\xc5\
-\xe5r\'/y\xd7s\xee9g\xfa\x83\xael\xd5\xb1t\x85J\xb2\x0b\xdc\xe7\xe7\xc17\xe7\
-}\xbf\x99\xf90s\xce`\xc4\xdf}K)\xaaT\xa9\xf2[\xd1C\xb5\x9f\xb7\x85*U\xbe\xb8\
-\xe8\xc1j\x81T\xa9\xf2\x99\xe8\xe1\xc4\xe55\x10(\x0cl$\xde\x05\xcf]\x0c\\\
-\xcc+h\xed\x12\x1e\x84\x8d\xf6\xbf<(\xa0\xac\x02xhWEW\xe2c\x8a\x12>\x92\xb2\
-\xb2P\x88\xab\xa2S\xe5\x8b\x83\x1e\x8aW\x1e,\xf0i*\xec"\xea\x9e\xc3\xff\xc4\
-\xdc\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\x9d\xcc\xe9\x8bp\t\\y\xb7\x80\xc0\xa3\
-\xc5~\x9b\x1a\xaf\xef\x02\x0f\x00\xba\xa5\xb0\xb5:z\xb5-\x94\t]Q]\r\x87\xc5\
-\xee\xcf\t\x94\xc7\xd0\x0c\xc1\x84\\FZ\xdezE5\xaa|\xf1\xd0\xc3\x97Q \x16\xe3\
-\xb4\xe8/p\xfa\x8dzf\x87#\x80\x00)\x91\xba"\\W$\xd2X\xa4c\xf94\x8e\xb5\x88\
-\x81\xe0_\xe3\xd0p\xc5\r\x07\x19\xa5\xa5\xf8\n\'\x7f\x1ag6\x1d\x00!@H\x00b\
-\xcd6\xcb\x1e~\x97\xa2\xd1\xc8\x14\xb7_Q\xdd\x10\xa34\xd9?\xe6\xd8\x8fS\xc4\
-\x16\x96h[s\x88B\xf0F\xca\\F\x07V\xf9\x7f\x87\x1e\xb9\x8c\xf1\r)AB[\x85\xf0\
-\x8bHM\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9f\x94\xe4\xc7[Y~\x9f\xc44~\xc3`\
-\xf8\x81\x0b\xb6!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%\x7f\xfbvH\xb8\x0e\xd2\
--\x03\\\x10\x1bR:aq=\xca- 5\xce{\x00Aj\xb1I(\xd4\x85\x19l!"?\xfd\x1e_7Q\x9a\
-\x8et\x8a $\xbea\xcd\x17\xd8%4\x05\x8a\xb8_$\x9c_\x8a\xa4D6\x1d\xe3\x86\xa8E\
-Ch\x92\x8c\xfc\xb8\x03+\xcaO\xa9\x8f\xf5\xcd\xc0\xbc\xa6W\xc6\xd7\xady\xad\
-\xb2=\x1ff\x06>\xdd\x06\xf0\xcd\xe0\x05\x9e\xab\\]\xf4\x1as\xa8\xe2`K9`\xac\
-\xc3\xd0\xdf%\x96r\xb9\xf9\x0fnC\x0b\x05A\xf9\x94\xf36C\x87\xfa\x18;\x9e\xe6\
-\xdc\xfe\x147\xdc\x13\xc51\xceP\x10A\x84\xf203\xbd\x98\x99^\xbcB\t\x81\x9a_|\
-\x02\x01\xec\xd4R\x9c\x9aV\xf8\xa8\x90\x84_\xc6\x9a\xeb\xc3\x98>\x8b\xb2\x1d\
-@\xcd/\x10F\x80b\xfd\xcdh\xe1Zd\xe06,k\'Z\xca\xe5\xe6\xa76bD\x82\x00\xd8e\
-\xc5\xb4\x11A\x06$1\xbf\x0fs\xe6\x0c\xd6\\/\xcavQJ\x81\x19\xc4\x0b\xd6b\x16\
-\xd3(\x05N\xbc\x9dR\xaa\xeb\x92\x9aa\xa1S\xeb\xcd\x91\x9bY\x06n7B\x83Ra%\x8b\
-\xacqF\x0c(I\xa3\xb2\xfc\x94O }\x00#\x97F\x1a\x127\xdc\x84V\x98\xc0\xb7\xcb\
-\x08\xd3\xc2\xd1\xeb\x91\xd9I\x84\x14\xd8\x0bW\xe0E\xeb\x010\xd2\'0f\x86@(\
-\xca\xf1V\xca\xcdK\xaf\xe4\x1c\xa8r\x11\xf4\x08\'+\x0e6\x84\x8e0k\xd0e\x0e=(\
-0b)2V\x01\x0f\xb0Ba:\xeeZ\x8b\x97\xdbNn\xb4\x97B\xe6:\x12\xd6\x18\xba9G${\
-\x1a\xbd\x9ca\xe4\xc44\x93G\xb2x\xae\x8f\x1e\xd4i\xde\x90\xa0)6B\xb1\xb8\x80\
-Bp!RyDr\xa7P\xd9Y\x06\xdf\x1d%7l#40#\x06\xb57E\xa9\x0f\x8da\x87\xd6#\x8c\x14\
-\xba\xcc\xa3\x07\xc1\x88\xa6(\x04J\xb8x\xb8A\x17\x87q"j\x84h\xae\x07J\xb3\
-\x8c\x1e\x9a$\xd3\x9b\x07\xa0yC\x92xk\x88\xf1\xa3\xb3\xe8a\x9d\xbaU\x19r\xbe\
-C(\xd7\xfb\x99\x9a\r\xe1)\xcc\x9aM\x8c\xee;\xc5\xf0\x9e}(\xdfCI\xc1\xa9m\xbf\
-`\xe9c\x0f\x91\xd0\x06\xc19RQ~\xba*\x11\x0b\x1c\xa7\xf7\x97iB\xf5\x16\xc9\
-\x1bG\x99\xea\xc92yl\x8e%\x0f\'\ty?a\xe0\xd7a\xe2\x9d\x0e\x89\x9aw\xb0#[\x91\
-^\x96\x80\xfb\n\xe9\xc3A\xcc\x1a\x8fx\x97\xc0Q\x7f\x84\x12\xc6U\x9a\x12U>\
-\x89\x1efO\xc5\xc1\x1aI\x04w\xa33\x8d\x10\x02\xa1B\x98\xfc\x1a\x8fi\x94&\xf1\
-\xbc;X\xb0\xba\x8b\xbe\xed\xff\x8a=1B,\x15#Q\x1eC\x14\x9a8\xfd\xa3\xfd\x14&\
-\xc6\t\xc4cH\xd3\xc4\xc9\xcf0\xba;M1\xddA\xdbW\x97c\x98\'\xd0\x9d$\x9a\xddF\
-\xcfO\x7fDqb\x1c3\x1a\xc1\x08\x87A8\xe4\xfb\\\x9aWnB\xf3\x87\x10\xb4\xa13\
-\x85g\x17\xb1\xa7f1\x82\x16\xa6\xd0\xd0\x021J\xfa>\xf0r\x04\xdc\x0eN\xbd\xf6\
-*\xf9\xd1Q\x02\x898\xd2\xb2\x98<p\x8e\xf1\xbd6\xbe[&\xd4\xd8Hp\xc3\xdd\xe8v\
-\x06y1\xcdUw\xa3\x14\x04k"\xd4\xd4K\xf2c\x03\x08)\t\xc7\x17\xa1\x07b\x18*\
-\x8d_Q~\xc7Q\xd2\xc34V\xe3\xcf\xf60~v\x82\x99\x0fB\x04k\x93,\\\xdbNM\xddRp\
-\xc2\x18\xfeQ\xf2\x1fj,\\\xd1F\xc1;\x80,\xf9\xe8Z\x17\xe5\xf1\xa3\xc4\xeb\
-\x1a\x88\xd74\x91g\x1f\xd5\xd3\xddk\x83\x1ebW\xc5\xc1\x82E\x08\xeeG\x17\x93\
-\x08\tB\x04\t\xf0>\x8a~\x00\xa4f\x13\xac}\x88\x805\x82=y\x10\x8d\x95\x18\xa2\
-\x8b\x81=/Q\x9e8\xc8\xc2\xdb\xb7\xd2p\xeb\x16Pe\xdcb\x91\xa1\x1d\xffB\xa1\
-\x7f\'\x85\xf4r"\x9d\x0b\xc0\xafch\xf7\x7f\xe1N}@\xdb]O\x90\xe8Z\x87\x0c\xf8\
-hZ\x1c\xcf)\xa2\xf4iL\xbd\x1b\xe1nB\x17\x13\xb8\xd93\x9c\xfd\x8f\xe7\x90\xa6\
-Dh\x92\xe6\x8d\xcf\x12]\xb2\x04\xe5e\xc9\x9c\xea\xc1\x19?\xc4\xc2;\x1e\xa1\
-\xe1\xd6-\x08\xdd\xc7\xb7a\xf8\xed\x97\x98=\xbd\x17C\xd7\x10f#\xba\x1beh\xf7\
-+\x17\xd5T\xd6\x0eb\xd7\xdfC\xac\xe3Y\xce\xbc\xfc\x1cB\xf7\xe8|\xf0\x19\x845\
-\x8d\xd4\x1a\x18\xd8\xf3\xb3K\xe7\xd7\xd1\x88\xb2\xb6#\xccM\xe8r\x06S\x8e\
-\xd0\xb6\xf9\xcf\x88u\xae\xc0\x17\xfd\xa8\xc0\xfb\x90[B\xe3\x1a\x93\x817\xff\
-\x93\xd2\xecW\t\x06\x8b(/\xc9L_\x0f:#\xa4\x96=\x06\xa1A\x82\xe2-\xa8\x96\xc8\
-5A\x0f\x8c_\xc6\x07\x9f\xae\xe1\x05"h\xb6DJ\x01~\x04kZ\x03w\xfe\x1d\xca\x8a\
-\xe3\xfaa\xcc\x92\xc0\xf4\xc2\x08\x15\x83\xb2\x8f\xdd?@(\xd8L\xc3\xba\xc7\
-\xd1\xca\xdb\x91\xde~\xa4\xf9\x08\r\xab\x1fe\xa8\xf7\x04\xa5\xbe>b\x8b\x9f\
-\xc4\xf3\x04v\xefYB\x81\x06\xeaV=\x82t\x7f\x82,\xec\x01\x99@\x13:83PJ\xe2\
-\x99\xa0\x95@/\x82\x15J\xa0[Q\xa4\xa1a\x05Sh\xae\x8b\x92\xedd\xba\xbfK(\xd0H\
-\xc3\xda\xad\xe8\xce\xcf\x11\xa5#\xf8\xd6\xd3\xd4-\x7f\x80\xe2\x89\xfd\xe8\
-\x8e\x8eP\t\xf0\x02\x97\xd6\xcc\xcd\x81\x9e\xc1\xb3\xbe\x81\xa9"H%\xd0\xf4\
-\x1a4\xfbU<\xe3\xe9\x8a\xf2\xabi\xdb\x8aV\xd8\x8dg\xc5\xd0l\x8dPx!\xb1\xf6M\
-\xe8\xce\xf7\xc09\x02Y\x0f\xa5\x97\xa8Y\xb2\x99\x80\xf5\x16\xd3\xdd\x07h\xd9\
-\xfa\xa7x~\x9e\xec\xe1\x97I\xb4\xac\xc4L.F\xe6w@\x16\xa8\x9e\xc1\\\x13tv.\
-\xae<:V\x0f\xeb\xc7\x10\xa3A\x90\x80=\x06\xfb\xeaaV\x81a\xa1\xd6\xad\xa34\
-\xf0>\xead\x08\xab\xb3\x1d9;\x85\'Rx\xa7\x05z\xac\x19\n\x01\xe4\x81a(\x04\
-\xd1\x9a\xd3XMw\xa0\x8d6\xc3D\x0cUH\xa0\x8aE\xdc\x0f\xc1H4\xe2\xcf\x19\xe8\
-\x87\xa6\xa0\xf0\xc9_\xc5\xb5\x10\xab\x835i\xc4h\x00\xcb\xe9\xa4}\xeb_\xa0E#\
-\xe0\xfb\xf8\x93\xc3\xc8#gpZ\x17\xe0\x1c/a$\x9b\x11\xe5\x04b\xdf,\xe4\x82\
-\xc8\xb6!\x8c\xc6[\xd0F\x1a\x11^\x12\xbc\x04*\xa7.\xad\xf9?\xbak\x87\x91\xa3\
-\x01\x84\x14PJCO\x12\x7f\xb1\xac(?\xf2\t8\xd2\x02\xeb\xe20\x1a\x9b\xdf\xa2\
-\xfa)\xe8\x8e@\xa6\x15\x00\x11(#o\x8d\x12\x89\xdfJv\xf7\xfb\xd8\xb7\x14\xb0\
-\xd3i\xcaG]\x1a\xef\xb8\x1fF\xf3\xb0/\x00\xfee\x8cY\x95\xff\x13\xfa\xf0\x0bO\
-W\x1cl\xb4\x0b\x12]\x93\x14N.B\xa2\xe1\xe7\xa7\x99\xdd\xbb\x19\xa4\xc2\\\xed\
-\xa3g]\x86\xbf=B\xe1\xd4m\xd4=\xd4L\xf1\xb0\x8d\xb9"\x8f*m {:\x83\x97\x9d\
-\xc1\t=\x89\xfd\x81Kh\x89\xc5\\\xf7 \xb3\xbb\xba\x0865\xe1\xcf\xcc B@\xf9v2\
-\xbb\xc6p\x1e\x1f\xa3\xa4~\x0f{\x97\x8b\xde\xa2c\\\xa7a\x1f*\xe3\xa5\x8b$\
-\x96\x8e\xcf{\x10\x1a\x88\x02\x99\x7f\x14\xb8\x83\x02w\xb8\x0e\xad\xa9\x89\
-\xe4\xdf\x96\xf02k)\xf4\xe4(O\x8d\xe2\x04\x1e\xa3\xb8\xd7&\xbc$\xc0\xdc\x9e>\
-fwu\x11\xba.\x85_H#\xa4\x7fI\xcd\xd2\x1e\x1bc\x91O\xe2\xc6I\xf2\xc7:\x11H\
-\xfc\xfc\x04\x997\xd6P\xf3l\xa1\xa2\xfc\xdc\xc9,\xd3\xdb\xbeL\xfc\xa6\x11\n=\
--\xf3\xbfy\xf3\xa3L\xfd\xf0\x1e\xca\xbd\xe5\xf3}\x1c\x1a\x08\x10[\xfd(\xc3/\
-\xceq\xe2O\xb6\xa3\x8a.V\xd3=X\x0b\xd7\x93\xf9\xf6\x08\xc5_\xfd\xfeU\x98\x06\
-U>\x0b\xfd\xb5U\xeb+\x0e\xaem\x9c\xe3~vs.U\x8bS\x94\xd4\x0f\x0f\xc3\x83\x16\
-\xf9i\xc8\x8e:\xf4~\xcb&\x93Kq\xc3\x1f6b,-\xf3\xf6\xb6Vn\x8a\r\x12}\xaa\x93\
-\xc3\x7f\x7f\x9a\xd1\xe7w\xd3q\xf7\x02\xe4\xca \xa5\xe3yN\xbd\x95\xa1\xd8\
-\xdeI\xc3\xc68=\xfd\x0e\x89T\x96\xf0\x13\x1d\x1c\xfa\x07\x9f\x89\xefw\xd3qW#\
-\xea\x9e(\xba\x05\xba\xe1\x92\xfcZ\x84\xfd;\xda\xb9S\xee\xe0\\*\tR\xa3\x93a\
-\xde\x8a<\xc0T2\tI\x90\x9a\xe2+\x03\xfb\xd1\x1fj\xe7\xf0\x0f\x06(\xfcp?\xcdk\
-\xeb\xf1\xd7\x9b\x0c}\xa4\x99k\xe9 \xd9`\xd1\xee\x0e\x90\x9d1.\xa9\xf9nt%\
-\x02\x9b\xfb\xc5\xeb\xf4\xd5\xd5\xa2\xa4A\xbbH\xf3\xab\xe4*V\xf5\xf7W\x96\
-\xdf\x90\xcb\xa9\xc5K\xb8O\x1d` \x19CH\xc9\xf5j\x90\x9d7\xace*\x1e>\xdf\xc7\
-\xb19\xc1\x96V\x97\xe9;\xd72v|\x04B:\xab\x1f\xdd\xc8l\xae\x86\xd7\x9c8\xf6\
-\xaa\xea\xb7\xc7\xb5D?\xe5\x17*\x0en\xf6g\xb1\xed~&\x9d\x12S\x13:\x83\xdfL\
-\x83\xa6c;\x06Jh $\x8b\x96\xb9t\xfdn\x9e\x83G:x\xa7/\xc4\xb8\x1e\xe6\xa9\x87\
-\xc7Y\xb8\xd9\xe0\xf0/r\x9c|\xf1,Jj\xf8\xc2 \x9c\x90,\xbbOb\xd6\x8d\xf1\xc6\
-\xb6e4\xd7\xfb<\xbae\x82\x86/i\x9c\xda\x9b\xe7\xe4w\xfa\xcf\xc7\xd6\xb6H\x1e\
-\xf8+\x83I-\x88]:\xc3d9\x8c\x15\x958\xf68g\xcb9\xc6\xfc\x8f\x0e\xd6|p\xbb\
-\x13<\xbe%Gx\x85\xe4\xd0\x9eI\xf6\xbf\x97AI\x8dh\xbd\xc1\x82\x1b$#%I0\x92\
-\xc7.\x9e\xe5\xbd\xc3+\xf8\x9d\x8d\x17\xd7\x1c\xd1[p\x1c\x9fR\xa1\x97Q\xbb\
-\x96`\xcc\xa1lOr\xba\x94g\xf6He\xf9\xbd\xb9m\x19R\xce\xe2\x94N3\xed\x14\xb0j\
-\x0c\xca\xf6\x19\xce\x96\xafg\xcc\xff\xc4a\xe5\x04\xb4\x9c\x9c\xa3ac\x0b\xc7\
-O\x0c\x13J\x984\xad\x8f\xd0\xfd\xfe4Gr\xc1+=\xfeU.\x81>4T\xf9Aa>\x9b\xa7\x94\
-\xef\xa5\xf3\x16A\xb9;\x84\xed\x18\xf8B\'\x92\x90\xd4\xb7:\xb4-\xb5i]ZbOw\
-\x07/\xbf\xd6B\xb1\x94&=\xac\x90^\x90\x077\x1f\xa2\xb6\xdd\xe0\xcc\xc1 \xc5\
-\x9c\x86\x15\x15\xdc\xfc\xe5,\xe1Z\xf8\xce\xbf\xdf\xc7\xd1\x9e,\x86\xae\xa1l\
-\x9d\x87\x9f\xec\xe1\xba\xdb4\x8e\xee\x8e03i\x11kT\xac\xf8R\x96\xbe\xfe\x14\
-\xfb\x0f-\xe1+\xab{Y\xb42BM\xbdOz\xc8\xe2\xd8\x899l\xa7t\xdeg:\xad\xa8\x8d\
-\xc0\xe6gNs\xeeh\x80\xe3\xef\x85\xd0L\xc1\x9a\xcdYZ\xaf\xcb\xb3oG\x92h\xd2\
-\xe3\xec\x99\x1a\xb6\xbd\xb1\x9e\xec\xf4%4\x0f\xe6\x88\xd5d)\x16\xfah[>MSG\
-\x91\xde\xb3Q>8\x96G@\xc5\xf9\xd5\xa72\xd8\x85C\xb4\xae\xd1\x895\xf8\x0c\rNr\
-\xec\xf84\xb6\x93\xbd\xa0\x9f\xf7\xeewyx\x93C\xde)\xd1\xd2\x99@\xc8I\xde\xda\
-YbhH^\xa9q\xafR!b\xfd\xfa7+^\xb3\x85\x80-\x1b{\xb8sM\x1f\xa9d\x11!\xe7\x9bf\
-\xb3&\x999\x8b\xf1\xe9\x08\xbf\xfc\xcd\x12\xce\x9e\xab\xa5\xec\xca\x0b\xda-\
-\xed\x9ce\xc3\xb2\x11\xda\x9a\xe7P\x9e\xc2G\xa3\xa7/\xc1\xfe\xe3\r\xf4\rF\
-\xce\xc7J\xa9X~\xfd4\x1bW\x0f\x93\x8a\x17(\x97%J\xea|\xf0a-;\xbb\x9b\xc9\xe5\
-\r\xee\xbds\x84\xf5]\xd3\x94}\x8d\xd7\xdfi\xe6\xf0\xc9\x9aOy\rX\x1e\xb7\xaf\
-\x1d\xe7\x96\xe5#H\xdfEj0\x96\x89p\xe6\\\r\x1b\x96\x8d\x00\x82\xd7\xdfY\xcc\
-\xe1\x93\xb5\x97\xd4\xcc\xe6\x0c\x84\x80{\xef\x1cc]\xd7\x14\xae//\xd0\xad4\
-\xbf\xf9w\xf4\xb3\xa1k\x84\xb2\xaf\xf1\xda;\x1d\x1c>y\xe1}\x03C\x87\xbf\xf9z\
-\x8e\xf2\xe0\x08o~\xaf\x9f\xaf\xfdS\x17}\x13Q\xbe\xf9|\x84\xea\xd5\xb6k\x8fX\
-\xb0\xe0\xfb\x97\xdd\xedB@(\xf8q3\xd7\x05\xdb\xa9\xfev\xbc\x12\xac[U\xe6\x07\
-\xcf\xcf\xf0\xc2_\x0e\xe1z\x82?\xff\xe7\x05<\xf3\xf58\xef\xee\xbd6W\t\xaa\\\
-\x88><<\xfcy{\xa8\xf2\tn\xda:\xc5\xccH\x86c\x07\xf3<\xf1\\\x80\x9e\x136on_\
-\xc0\\\xb6\xba\xbd\xfa<\xa8\xf6\xfa\x17\x8cp\xd0&\x1a\xcd\xf3\xd0\x1f\xc3\
-\xc6{m^z%T-\x8e\xcf\x11\xfd\xf36P\xe5B^\xfc\xb7f\x82f\x03\xb51\x9f\xe7\xbf#y\
-\xf5gW\xe7vd\x95\xca\x10\xf0\x8d\xea\xa7_\x95*\x9fAu\xed\xaeR\xe5"T\x0b\xa4J\
-\x95\x8b\xf0\xdf\xa9r\x96sLI-\x87\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory045Bitmap():
- return wxBitmapFromImage(getDocFactory045Image())
-
-def getDocFactory045Image():
- stream = cStringIO.StringIO(getDocFactory045Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory045')
-catalog['DocFactory045'] = ImageClass()
-catalog['DocFactory045'].getData = getDocFactory045Data
-catalog['DocFactory045'].getImage = getDocFactory045Image
-catalog['DocFactory045'].getBitmap = getDocFactory045Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory046Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rX\
-IDATx\x9c\xed\x9bil]\xc7y\x86\x9f\x99\xb3\xdd\x95w\xe1\xe5*\x91\x94H\xca\xb6\
-lJ\xb2vyU";Q%/\xf5\xa6zi\xed\xa2h\x11\x14\xb5\xd1\xc2m\x7f\xe4gP\x04\x05\x8a\
-.F\x83\xc0v\x96\x1aE\x0b\xd7\xa9\x1b%\xb1\xe3\x18\x91\xecD\x96lE\xa16\xcb\
-\xdaHY\x12Iq\xb9\xdc\xc9K\xde\xf5\x9c{\xce\x99\xfe\xa0+[\xb5-\xb2\x80d\xb9\
-\xc0}~\x1e\xbcs\xde\xef\xfbf\x063\xe7\x0cF\xfc\xddw\x94\xa2B\x85\n\x9f\x89\
-\x1e\xaa\xbe\xd6!T\xa8\xf0\xe5E\x0fV&H\x85\n\x9f\x8b\x1eN,L(P\x18\xd8H\xbcK\
-\x9e\xbb\x18\xb8\x98W!\xb4\xcf\x89A\xd8h\xff+\x06\x05\x94U\x00\x0f\xed\xaa\
-\xf8J|LQ\xc2GRV\x16\nqU|*|\xf9\xd0C\xf1\xf9E\x02\x9f\x86\xc2^\xa2\xee\x05\
-\xfcO\x8cM)A\x9a:y7N.\xd8\xce\xac\xbe\x04\x97\xc0U\tT\xe0\xd1d\xbfM\x95\xd7{\
-I\x0c\x00\xba\xa5\xb0\xb5\x1az\xb4\xed\x94\t]Q_\r\x87\xa5\xee/\x08\x94G\xd1\
-\x0c\xc1\xb8\\AZ\xdezE=*|y\xd1\xc3\x0b\x98 \x16c4\xe9\xcfs\xf6\x8dZf\x86"\
-\x80\x00)\x91\xba"\\S$R_\xa4m\xe5\x14\x8e\xb5\x84\xfe\xe0_\xe3Pw\xc5\x03\r2B\
-S\xf1\x15\xba~\x16g&\x1d\x00!@H\x00b\x8d6+\x1ez\x97\xa2Q\xcf$\xb7_Q\xdf\x10#\
-4\xd8?\xe1\xe4OR\xc4\x16\x97hYw\x94B\xf0F\xca,\xa0p\x15\xfe\xdf\xa3G\x16\xd0\
-\xcf!%Hhk\x10~\x11\xa9)\x82q\x81\x11\x10(\x04\xa5|\x90\xb1.I~\xac\x99\x95\
-\xf7JL\xe3\xb7\x0c\x84\xef\xbfd\x1b"|\x0f\xe1\x96\x11\xbe\x87\x92\x1aJ7P\xf2\
-\xb3\xb7C\xc2u\x90n\x19\xe0\x12mH\xe9\x84\xc5\xf5(\xb7\x80\xd4\xb8\x18\x03\
-\x08RKMB\xa1\x0e\xcc`\x13\x11\xf9\xe9\xf7\xf8\xba\x89\xd2t\xa4S\x04!\xf1\rkn\
-\x82\xcd\xe3)P\xc4\xfd"\xe1\xfcr$%\xb2\xe9\x187D-\xeaB\x13d\xe4\xc7\x85[P~J}\
-\xeco\x06\xe6<\xbd2\xben\xcdy\x95\xed9\x99\x19\xf8t\x1b\xc07\x83\x97\xc4\\\
-\xe1\x8bA\xaf2\x07\xe7\x15Y\xca\x01c\x03\x86\xfe.\xb1\x94\xcb\xcd\x7fp\x1bZ(\
-\x08\xca\xa7\x9c\xb7\x19<\xda\xcb\xe8\xa94\x17\x0e\xa5\xb8ak\x14\xc78GA\x04\
-\x11\xca\xc3\xcc\xf4`fz\xf0\n%\x04jn\xf1\t\x04\xb0S\xcbq\xaa\x9a\xe1\xa3\x89\
-$\xfc2\xd6l/\xc6\xd4y\x94\xed\x00jn\x810\x02\x14koF\x0bW#\x03\xb7aY{\xd0R.7?\
-\xb9\x19#\x12\x04\xc0.+\xa6\x8c\x082 \x89\xf9\xbd\x98\xd3\xe7\xb0f{P\xb6\x8b\
-R\n\xcc ^\xb0\x1a\xb3\x98F)p\xe2\xad\x94R\x1d\xf3z\x86\x85N\xb57Knz\x05\xb8\
-\x9d\x08\rJ\x85\xd5,\xb1\xc6\x186\xa0$\x8d\x85\xe5\xa7|\x02\xe9\xc3\x18\xb94\
-\xd2\x90\xb8\xe1\x06\xb4\xc28\xbe]F\x98\x16\x8e^\x8b\xccN \xa4\xc0^\xbc\n/Z\
-\x0b\x80\x91>\x8d1=\x08BQ\x8e7Sn\\~5\xc6@\x85\xcb\xa0G\xe8\x9aWd\x08\x1daV\
-\xa1\xcb\x1czP`\xc4Rd\xac\x02\x1e`\x85\xc2\xb4\xdd\xb5\x1e/\xb7\x8b\xdcH\x0f\
-\x85\xccu$\xacQts\x96H\xf6,z9\xc3\xf0\xe9)&\x8eg\xf1\\\x1f=\xa8\xd3\xb8)ACl\
-\x98bq\x11\x85\xe0b\xa4\xf2\x88\xe4\xce\xa0\xb23\x0c\xbc;Bn\xc8Fh`F\x0c\xaao\
-\x8aR\x1b\x1a\xc5\x0emD\x18)t\x99G\x0f\x82\x11MQ\x08\x94p\xf1p\x83.\x0ecD\
-\xd40\xd1\\7\x94f\x189:A\xa6\'\x0f@\xe3\xa6$\xf1\xe6\x10c\'f\xd0\xc3:5k2\xe4\
-|\x87P\xae\xe7s=\xeb\xc2\x93\x98U[\x189x\x86\xa1\xfd\x07Q\xbe\x87\x92\x823;\
-\x7f\xc9\xf2G\x1f$\xa1\r\x80s|A\xf9\xe9\xaaD,p\x8a\x9e_\xa5\t\xd5Z$o\x1ca\
-\xb2;\xcb\xc4\xc9Y\x96=\x94$\xe4\xfd\x94\xfe\xdf\x84\x89\xb7;$\xaa\xde\xc1\
-\x8e\xec@zY\x02\xee+\xa4\x8f\x051\xab<\xe2\x1d\x02G\xfd\x11J\x18WyHT\xf8$z\
-\x98\xfd\xf3\x8a4\x92\x08\xeeFg\n!\x04B\x850\xf9\r\x1eS(M\xe2yw\xb0hm\x07\
-\xbd\xbb\xfe\x15{|\x98X*F\xa2<\x8a(4p\xf6\xc7\x87(\x8c\x8f\x11\x88\xc7\x90\
-\xa6\x89\x93\x9ffd_\x9ab\xba\x8d\x96\xaf\xaf\xc40O\xa3;I4\xbb\x85\xee\x9f\
-\xfd\x98\xe2\xf8\x18f4\x82\x11\x0e\x83p\xc8\xf7\xba4\xae\xde\x82\xe6\x0f"hAg\
-\x12\xcf.bO\xce`\x04-L\xa1\xa1\x05b\x94\xf4\x83\xe0\xe5\x08\xb8m\x9cy\xedU\
-\xf2##\x04\x12q\xa4e1q\xf8\x02c\x07l|\xb7L\xa8\xbe\x9e\xe0\xa6\xbb\xd1\xed\
-\x0c\xf2r\x9ek\xeeF)\x08VE\xa8\xaa\x95\xe4G\xfb\x11R\x12\x8e/A\x0f\xc40T\x1a\
-\x7fA\xf9\x9dBI\x0f\xd3X\x8b?\xd3\xcd\xd8\xf9q\xa6?\x08\x11\xacN\xb2x}+U5\
-\xcb\xc1\tc\xf8\'\xc8\x7f\xa8\xb1xU\x0b\x05\xef0\xb2\xe4\xa3k\x1d\x94\xc7N\
-\x10\xaf\xa9#^\xd5@\x9e\x83TNu\xbfX\xf4\x10{\xe7\x15\t\x96 \xb8\x0f]L $\x08\
-\x11$\xc0\xfb(\xfa\x00\x90\x9aM\xb0\xfaA\x02\xd60\xf6\xc4\x114Vc\x88\x0e\xfa\
-\xf7\xbfDy\xfc\x08\x8bo\xdfA\xdd\xad\xdbA\x95q\x8bE\x06w\xff\x0b\x85\xbe=\
-\x14\xd2+\x89\xb4/\x02\xbf\x86\xc1}\xff\x85;\xf9\x01-w=N\xa2c\x032\xe0\xa3iq\
-<\xa7\x88\xd2\xa70\xf5N\x84\xbb\x05]\x8c\xe3f\xcfq\xfe?\x9eE\x9a\x12\xa1I\
-\x1a7?Ct\xd92\x94\x97%s\xa6\x1bg\xec(\x8b\xefx\x98\xba[\xb7#t\x1f\xdf\x86\
-\xa1\xb7_b\xe6\xec\x01\x0c]C\x98\xf5\xe8n\x94\xc1}\xaf\\\xd6SY\xbb\x89]\xbf\
-\x95X\xdb3\x9c{\xf9Y\x84\xee\xd1\xfe\xc0\xd3\x08k\n\xa9\xd5\xd1\xbf\xff\xe7\
-\xf3\xe7\xd7V\x8f\xb2v!\xcc-\xe8r\x1aS\x0e\xd3\xb2\xed\xcf\x88\xb5\xaf\xc2\
-\x17}\xa8\xc0\xfb\x90[F\xfd:\x93\xfe7\xff\x93\xd2\xcc\xd7\t\x06\x8b(/\xc9to7\
-:\xc3\xa4V<\n\xa1\x01\x82\xe2-\xa8L\x91/\x14=0\xb6\x80\x0f?]\xc3\x0bD\xd0l\
-\x89\x94\x02\xfc\x08\xd6\x94\x06\xee\\[e\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\xee\
-\xeb\'\x14l\xa4n\xc3ch\xe5]H\xef\x10\xd2|\x98\xba\xb5\x8f0\xd8s\x9aRo/\xb1\
-\xa5O\xe0y\x02\xbb\xe7<\xa1@\x1d5k\x1eF\xba?E\x16\xf6\x83L\xa0\t\x1d\x9ci(%\
-\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9V2\x9d\xdf#\x14\
-\xa8\xa7n\xfd\x0et\xe7\x17\x88\xd2q|\xeb)jV\xdeO\xf1\xf4!tGG\xa8\x04x\x81\
-\xf9=s\xb3\xa0g\xf0\xacoa\xaa\x08R\t4\xbd\n\xcd~\x15\xcfxjA\xf9U\xb5\xec@+\
-\xec\xc3\xb3bh\xb6F(\xbc\x98X\xeb\x16t\xe7\xfb\xe0\x1c\x87\xac\x87\xd2KT-\
-\xdbF\xc0z\x8b\xa9\xce\xc34\xed\xf8S<?O\xf6\xd8\xcb$\x9aVc&\x97"\xf3\xbb!\
-\x0bT\xce`\xbePt\xf6,\x9d_\x15\xab\x85\x8d\xa3\x88\x91 H\xc0\x1e\x85\x83\xb5\
-0\xa3\xc0\xb0P\x1b6P\xea\x7f\x1f\xd5\x15\xc2joE\xceL\xe2\x89\x14\xdeY\x81\
-\x1ek\x84B\x00yx\x08\nA\xb4\xc64V\xc3\x1dh#\x8d0\x1eC\x15\x12\xa8b\x11\xf7C0\
-\x12\xf5\xf8\xb3\x06\xfa\xd1I(|\xf2Wq5\xc4j`]\x1a1\x12\xc0r\xdai\xdd\xf1\x17\
-h\xd1\x08\xf8>\xfe\xc4\x10\xf2\xf89\x9c\xe6E8\xa7J\x18\xc9FD9\x8188\x03\xb9 \
-\xb2e\x10\xa3\xfe\x16\xb4\xe1z\x84\x97\x04/\x81\xca\xa9\xf9=\xff\xc7w\xfd\
-\x10r$\x80\x90\x02Ji\xe8N\xe2/\x95\x0b\xca\x8f|\x02\x8e7\xc1\x868\x8c\xc4\
-\xe6\xb6\xa8~\n:#\x90i\x06@\x04\xca\xc8[\xa3D\xe2\xb7\x92\xdd\xf7>\xf6-\x05\
-\xect\x9a\xf2\t\x97\xfa;\xee\x83\x91<\x1c\x0c\x80\xbf\x80\xbe\xaapE\xd1\x87\
-\x9e\x7fj^\x91\xd1*HtLP\xe8Z\x82D\xc3\xcfO1s`\x1bH\x85\xb9\xd6G\xcf\xba\x0c}\
-w\x98\xc2\x99\xdb\xa8y\xb0\x91\xe21\x1bsU\x1eU\xdaD\xf6l\x06/;\x8d\x13z\x02\
-\xfb\x03\x97\xd02\x8b\xd9\xce\x01f\xf6v\x10lh\xc0\x9f\x9eF\x84\x80\xf2\xedd\
-\xf6\x8e\xe2<6JI\xfd\x1e\xf6^\x17\xbdI\xc7\xb8N\xc3>Z\xc6K\x17I,\x1f\x9b\x8b\
-Ah \nd\xfeQ\xe0\x0e\x08\xdc\xa1\x1a\xb4\x86\x06\x92\x7f[\xc2\xcb\xac\xa7\xd0\
-\x9d\xa3<9\x82\x13x\x94\xe2\x01\x9b\xf0\xb2\x00\xb3\xfb{\x99\xd9\xdbA\xe8\
-\xba\x14~!\x8d\x90\xfe\xbc\x9e\xa5\xfd6\xc6\x12\x9f\xc4\x8d\x13\xe4O\xb6#\
-\x90\xf8\xf9q2o\xac\xa3\xea\x99\xc2\x82\xf2s\'\xb2L\xed\xfc*\xf1\x9b\x86)t7\
-\xcd\xfd\xe6\xcd\x8f0\xf9\xa3\xad\x94{\xca\x17k\x1c\xea\x0f\x10[\xfb\x08C/\
-\xccr\xfaOv\xa1\x8a.V\xc3V\xac\xc5\x1b\xc9|w\x98\xe2\xaf\x7f\xff*\x0e\x83\n\
-\x9f\x87\xfe\xda\x9a\x8d\xf3\x8a\xaa\xebg\xb9\x8f}\\HU\xe3\x14%\xb5CC\xf0\
-\x80E~\n\xb2#\x0e=\xdf\xb1\xc9\xe4R\xdc\xf0\x87\xf5\x18\xcb\xcb\xbc\xbd\xb3\
-\x99\x9bb\x03D\x9fl\xe7\xd8\xdf\x9fe\xe4\xb9}\xb4\xdd\xbd\x08\xb9:H\xe9T\x9e\
-3oe(\xb6\xb6S\xb79Nw\x9fC"\x95%\xfcx\x1bG\xff\xc1g\xfc\x07\x9d\xb4\xddU\x8f\
-\xda\x1aE\xb7@7\\\x92\xdf\x88phw+w\xca\xdd\\H%Aj\xb43\xc4[\x91\xfb\x99L&!\tR\
-S|\xad\xff\x10\xfa\x83\xad\x1c\xfba?\x85\x1f\x1d\xa2q}-\xfeF\x93\xc1\x8f<sMm\
-$\xeb,Z\xdd~\xb2\xd3\xc6\xbc\x9e\xefFW#\xb0\xb9O\xbcNoM5J\x1a\xb4\x8a4\xbfN\
-\xaeaM_\xdf\xc2\xf2\x1bt9\xb3t\x19\xf7\xaa\xc3\xf4\'c\x08)\xb9^\r\xb0\xe7\
-\x86\xf5L\xc6\xc3\x17k\x1c\x9b\x15lov\x99\xbas=\xa3\xa7\x86!\xa4\xb3\xf6\x91\
-\xcd\xcc\xe4\xaax\xcd\x89c\xaf\xa9|{\\\x0b\xf43~a^Q\xa3?\x83m\xf71\xe1\x94\
-\x98\x1c\xd7\x19\xf8v\x1a4\x1d\xdb1PB\x03!Y\xb2\xc2\xa5\xe3w\xf3\x1c9\xde\
-\xc6;\xbd!\xc6\xf40O>4\xc6\xe2m\x06\xc7~\x99\xa3\xeb\x85\xf3(\xa9\xe1\x0b\
-\x83pB\xb2\xe2^\x89Y3\xca\x1b;W\xd0X\xeb\xf3\xc8\xf6q\xea\xbe\xa2q\xe6@\x9e\
-\xae\x17\xfb.j\xab\x9b$\xf7\xff\x95\xc1\x84\x16\xc4.\x9dc\xa2\x1c\xc6\x8aJ\
-\x1c{\x8c\xf3\xe5\x1c\xa3\xfeG\x07k>\xb8\x9d\t\x1e\xdb\x9e#\xbcJrt\xff\x04\
-\x87\xde\xcb\xa0\xa4F\xb4\xd6`\xd1\r\x92\xe1\x92$\x18\xc9c\x17\xcf\xf3\xde\
-\xb1U\xfc\xce\xe6\xcb{\x0e\xebM8\x8eO\xa9\xd0\xc3\x88]M0\xe6P\xb6\'8[\xca3s|\
-a\xf9\xbd\xb9s\x05R\xce\xe0\x94\xce2\xe5\x14\xb0\xaa\x0c\xca\xf69\xce\x97\
-\xafg\xd4\xff\xc4a\xe584u\xcdR\xb7\xb9\x89S\xa7\x87\x08%L\x1a6F\xe8|\x7f\x8a\
-\xe3\xb9\xe0\xd5\xea\xff\n\xf3\xa0\x0f\x0e\xce\x7fP\x98\xcf\xe6)\xe5{h\xbfEP\
-\xee\x0ca;\x06\xbe\xd0\x89$$\xb5\xcd\x0e-\xcbm\x9a\x97\x97\xd8\xdf\xd9\xc6\
-\xcb\xaf5Q,\xa5I\x0f)\xa4\x17\xe4\x81mG\xa9n58w$H1\xa7aE\x057\x7f5K\xb8\x1a^\
-\xfc\xf7{9\xd1\x9d\xc5\xd05\x94\xad\xf3\xd0\x13\xdd\\w\x9b\xc6\x89}\x11\xa6\
-\',b\xf5\x8aU_\xc9\xd2\xdb\x97\xe2\xd0\xd1e|mm\x0fKVG\xa8\xaa\xf5I\x0fZ\x9c<\
-=\x8b\xed\x94.\xc6\x99N+\xaa#\xb0\xed\xe9\xb3\\8\x11\xe0\xd4{!4S\xb0n[\x96\
-\xe6\xeb\xf2\x1c\xdc\x9d$\x9a\xf48\x7f\xae\x8a\x9dol$;5\x8f\xe7\x91\x1c\xb1\
-\xaa,\xc5B/-+\xa7hh+\xd2s>\xca\x07\'\xf3\x08Xp~\xb5\xa9\x0cv\xe1(\xcd\xebtbu\
->\x83\x03\x13\x9c<5\x85\xedd/\xa9\xf3\x81C.\x0fmq\xc8;%\x9a\xda\x13\x089\xc1\
-[{J\x0c\x0e\xca+\xdd\xef\x15\x16\x88\xd8\xb8\xf1\xcdy\xd7n!`\xfb\xe6n\xee\\\
-\xd7K*YD\xc8\xb9&\xd9\xacIf\xd6bl*\xc2\xaf~\xbb\x8c\xf3\x17\xaa)\xbb\xf2\x92\
-v\xcb\xdbg\xd8\xb4b\x98\x96\xc6Y\x94\xa7\xf0\xd1\xe8\xeeMp\xe8T\x1d\xbd\x03\
-\x91\x8bZ)\x15+\xaf\x9fb\xf3\xda!R\xf1\x02\xe5\xb2DI\x9d\x0f>\xacfOg#\xb9\
-\xbc\xc1=w\x0e\xb3\xb1c\x8a\xb2\xaf\xf1\xfa;\x8d\x1c\xeb\xaa\xfaT\xac\x01\
-\xcb\xe3\xf6\xf5c\xdc\xb2r\x18\xe9\xbbH\rF3\x11\xce]\xa8b\xd3\x8aa@\xf0\xfa;\
-K9\xd6U=\xafg6g \x04\xdcs\xe7(\x1b:&q}y\x89\xefB\xf3\x9b{G\x1f\x9b:\x86)\xfb\
-\x1a\xaf\xbd\xd3\xc6\xb1\xaeK\xef\x19\x18:\xfc\xcd7s\x94\x07\x86y\xf3\xfb}|\
-\xe3\x9f:\xe8\x1d\x8f\xf2\xed\xe7"T\xae\xb4];\xc4\xa2E?Xp\xf9\x85\x80P\xf0c\
-\xb9\xeb\x82\xedT~;^\t6\xac)\xf3\xc3\xe7\xa6y\xfe/\x07q=\xc1\x9f\xff\xf3"\
-\x9e\xfef\x9cw\x0f|1W\t*|6\xfa\xd0\xd0\xd0\xb5\x8e\xa1\x02p\xd3\x8eI\xa6\x87\
-3\x9c<\x92\xe7\xf1g\x03t\x9f\xb6ys\xd7"f\xb3\x95\xed\xd5\xb5\xa4R\xfd/\t\xe1\
-\xa0M4\x9a\xe7\xc1?\x86\xcd\xf7\xd8\xbc\xf4J\xa829\xbe\x04\xe8\xd7:\x80\ns\
-\xbc\xf0o\x8d\x04\xcd:\xaac>\xcf\xbd(y\xf5\xe7W\xe7vd\x85\xff\x1b\x02\xbeU\
-\xf9\x04\xacP\xe1s\xa8\xac\xe1\x15*\\\x86\xca\x04\xa9P\xe12\xfc7\x8e\x06\x96\
-sW\x86?\'\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory046Bitmap():
- return wxBitmapFromImage(getDocFactory046Image())
-
-def getDocFactory046Image():
- stream = cStringIO.StringIO(getDocFactory046Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory046')
-catalog['DocFactory046'] = ImageClass()
-catalog['DocFactory046'].getData = getDocFactory046Data
-catalog['DocFactory046'].getImage = getDocFactory046Image
-catalog['DocFactory046'].getBitmap = getDocFactory046Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory047Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rY\
-IDATx\x9c\xed\x9bil\\\xd7y\x86\x9fs\xee6+g\xe1p\x95HJ$e[6%Y\xbb\xbc*\x91\x9d\
-\xa8\x92\x97zS\xbd\xb4vQ\xb4\x08\x8a\xdah\xe1\xb6?\xf23(\x82\x02E\x17\xa3A`\
-\xbbIj\x14-\\\xa7n\x94\xc4\x8ecD\xb2\x13Y\xb2\x15\x85\xda,k\xa5,\x89\xa4\xb8\
-\x0cwr\xc8Y\xef\x9d{\xef\xe9\x0f\xba\xb2\x15\x87\x14QX\x96\xd1\xcc\xf3s\xbe\
-\xef\xce\xfb~g\xc19\xf7\x1e\x1c\xf1w\xdfR\x8a\n\x15*\xfcF\xf4P\xf5\xb5\xb6P\
-\xa1\xc2\x17\x17=X\x99 \x15*\xcc\x89\x1eN\xcc\x9f P\x18\xd8H\xbc\xcb~w1p1\
-\xaf\xa2\xb5_\xf3 l\xb4_\xf3\xa0\x80\xb2\n\xe0\xa1]\x15]\x89\x8f)J\xf8H\xca\
-\xcaB!\xae\x8aN\x85/.z(>wP\xe0\xd3P\xd8K\xd4\xbd\x88\xff\x89\xb1)%HS\'\xef\
-\xc6\xc9\x05\xdb\x99\xd1\x97\xe0\x12\xb8*\x06\x05\x1eM\xf6\xdbTy=\x97y\x00\
-\xd0-\x85\xad\xd5\xd0\xadm\xa7L\xe83\xd5\xd5pX\xea\xfe\x94@y\x04\xcd\x10\x8c\
-\xc9\x15\xa4\xe5\xad\x9f\xa9F\x85/>zx\x9e\tb1J\x93\xfe<\xe7\xde\xa8ez0\x02\
-\x08\x90\x12\xa9+\xc25E"\xf5E\xdaVN\xe2XK\xe8\x0b\xfe5\x0eu\x9f\xb9\xc1 \xc3\
-4\x15_\xe1\xcc\x8f\xe3L\xa7\x03 \x04\x08\t@\xac\xd1f\xc5C\xefR4\xea\x99\xe0\
-\xf6\xcfT7\xc40\r\xf6\x0f9\xf9\xc3\x14\xb1\xc5%Z\xd6\x1d\xa5\x10\xbc\x912\
-\xf34X\x85\xffw\xe8\x91y\xfa;\xa4\x04\tm\r\xc2/"5E0.0\x02\x02\x85\xa0\x94\
-\x0f2zF\x92\x1fmf\xe5\xbd\x12\xd3\xf8\x15\xfd\xe1\xfb/\xdb\x86\x08\xdfC\xb8e\
-\x84\xef\xa1\xa4\x86\xd2\r\x94\xfc\xcd\xdb!\xe1:H\xb7\x0cpYnH\xe9\x84\xc5\
-\xf5(\xb7\x80\xd4\xb8\xe4\x01\x04\xa9\xa5&\xa1P\x07f\xb0\x89\x88\xfc\xf4\xff\
-\xf8\xba\x89\xd2t\xa4S\x04!\xf1\rkv\x82]AS\xa0\x88\xfbE\xc2\xf9\xe5HJd\xd31n\
-\x88Z\xd4\x85\xc6\xc9\xc8\x8f\x1blA\xf5)\xf5\xb1\xbe\x19\x98\xd5\xf4\xca\xf8\
-\xba5\xabU\xb6g\xd3\xcc\xc0\xa7\x9f\x01|3x\x99\xe7\n\x9f/z\x9590g\xd0R\x0e\
-\x18\x1b0\xf4w\x89\xa5\\n\xfe\x83\xdb\xd0BAP>\xe5\xbc\xcd\xc0\xd1\x1eFN\xa5\
-\xb9x(\xc5\r[\xa38\xc6y\n"\x88P\x1ef\xa6\x1b3\xd3\x8dW(!P\xb3\x8bO \x80\x9dZ\
-\x8eS\xd5\x0c\x1fM$\xe1\x97\xb1fz0&/\xa0l\x07P\xb3\x0b\x84\x11\xa0X{3Z\xb8\
-\x1a\x19\xb8\r\xcb\xda\x83\x96r\xb9\xf9\xc9\xcd\x18\x91 \x00vY1iD\x90\x01I\
-\xcc\xef\xc1\x9c:\x8f5\xd3\x8d\xb2]\x94R`\x06\xf1\x82\xd5\x98\xc54J\x81\x13o\
-\xa5\x94\xea\xb8\xa2fX\xe8T{3\xe4\xa6V\x80\xdb\x89\xd0\xa0TX\xcd\x12k\x94!\
-\x03J\xd2XX}\xca\'\x90>\x8c\x91K#\r\x89\x1bn@+\x8c\xe1\xdbe\x84i\xe1\xe8\xb5\
-\xc8\xec8B\n\xec\xc5\xab\xf0\xa2\xb5\x00\x18\xe9\xd3\x18S\x03 \x14\xe5x3\xe5\
-\xc6\xe5Ws\x0cT\x98\x07=\xc2\x999\x83\x86\xd0\x11f\x15\xba\xcc\xa1\x07\x05F,\
-E\xc6*\xe0\x01V(L\xdb]\xeb\xf1r\xbb\xc8\rwS\xc8\\G\xc2\x1aA7g\x88d\xcf\xa1\
-\x973\x0c\x9d\x9ed\xfcx\x16\xcf\xf5\xd1\x83:\x8d\x9b\x124\xc4\x86(\x16\x17Q\
-\x08.F*\x8fH\xee,*;M\xff\xbb\xc3\xe4\x06m\x84\x06f\xc4\xa0\xfa\xa6(\xb5\xa1\
-\x11\xec\xd0F\x84\x91B\x97y\xf4 \x18\xd1\x14\x85@\t\x17\x0f7\xe8\xe20JD\r\
-\x11\xcduAi\x9a\xe1\xa3\xe3d\xba\xf3\x004nJ\x12o\x0e1zb\x1a=\xacS\xb3&C\xcew\
-\x08\xe5\xba\xe7\xd4\xac\x0bO`Vma\xf8\xe0Y\x06\xf7\x1fD\xf9\x1eJ\n\xce\xee\
-\xfc\x19\xcb\x1f}\x90\x84\xd6\x0f\xce\xf1\x05\xd5\xa7\xab\x12\xb1\xc0)\xba\
-\x7f\x9e&Tk\x91\xbcq\x98\x89\xae,\xe3\'gX\xf6P\x92\x90\xf7#\xfa~\x19&\xde\
-\xee\x90\xa8z\x07;\xb2\x03\xe9e\t\xb8\xaf\x90>\x16\xc4\xac\xf2\x88w\x08\x1c\
-\xf5G(a|NC\xa2\xc2\'\xd1\xc3\xec\x9f3\xa8\x91Dp7:\x93\x08!\x10*\x84\xc9/\xf1\
-\x98Di\x12\xcf\xbb\x83Ek;\xe8\xd9\xf5o\xd8cC\xc4R1\x12\xe5\x11D\xa1\x81s?8Da\
-l\x94@<\x864M\x9c\xfc\x14\xc3\xfb\xd2\x14\xd3m\xb4|u%\x86y\x1a\xddI\xa2\xd9-\
-t\xfd\xf8\x07\x14\xc7F1\xa3\x11\x8cp\x18\x84C\xbe\xc7\xa5q\xf5\x164\x7f\x00A\
-\x0b:\x13xv\x11{b\x1a#ha\n\r-\x10\xa3\xa4\x1f\x04/G\xc0m\xe3\xeck\xaf\x92\
-\x1f\x1e&\x90\x88#-\x8b\xf1\xc3\x17\x19=`\xe3\xbbeB\xf5\xf5\x047\xdd\x8dng\
-\x90\xf3i\xae\xb9\x1b\xa5 X\x15\xa1\xaaV\x92\x1f\xe9CHI8\xbe\x04=\x10\xc3Pi\
-\xfc\x05\xd5w\n%=Lc-\xfet\x17\xa3\x17\xc6\x98\xfa D\xb0:\xc9\xe2\xf5\xadT\
-\xd5,\x07\'\x8c\xe1\x9f \xff\xa1\xc6\xe2U-\x14\xbc\xc3\xc8\x92\x8f\xaeuP\x1e\
-=A\xbc\xa6\x8exU\x03y\x0eR9\xcd\xbd6\xe8!\xf6\xce\x19\x14,Ap\x1f\xba\x18GH\
-\x10"H\x80\xf7Q\xf4\x02 5\x9b`\xf5\x83\x04\xac!\xec\xf1#h\xac\xc6\x10\x1d\
-\xf4\xed\x7f\x89\xf2\xd8\x11\x16\xdf\xbe\x83\xba[\xb7\x83*\xe3\x16\x8b\x0c\
-\xec\xfeW\n\xbd{(\xa4W\x12i_\x04~\r\x03\xfb\xfe\x1bw\xe2\x03Z\xeez\x9cD\xc7\
-\x06d\xc0G\xd3\xe2xN\x11\xa5Ob\xea\x9d\x08w\x0b\xba\x18\xc3\xcd\x9e\xe7\xc2\
-\x7f>\x8b4%B\x934n~\x86\xe8\xb2e(/K\xe6l\x17\xce\xe8Q\x16\xdf\xf10u\xb7nG\
-\xe8>\xbe\r\x83o\xbf\xc4\xf4\xb9\x03\x18\xba\x860\xeb\xd1\xdd(\x03\xfb^\x99W\
-SY\xbb\x89]\xbf\x95X\xdb3\x9c\x7f\xf9Y\x84\xee\xd1\xfe\xc0\xd3\x08k\x12\xa9\
-\xd5\xd1\xb7\xff\'W\xae\xaf\xad\x1ee\xedB\x98[\xd0\xe5\x14\xa6\x1c\xa2e\xdb\
-\x9f\x11k_\x85/zQ\x81\xf7!\xb7\x8c\xfau&}o\xfe\x17\xa5\xe9\xaf\x12\x0c\x16Q^\
-\x92\xa9\x9e.t\x86H\xadx\x14B\xfd\x04\xc5[P\x99"\xd7\x04=0:\xcf\x0b\xa0\xae\
-\xe1\x05"h\xb6DJ\x01~\x04kR\x03w\xf6\x19e\xc5q\xfd0fI`za\x84\x8aA\xd9\xc7\
-\xee\xed#\x14l\xa4n\xc3ch\xe5]H\xef\x10\xd2|\x98\xba\xb5\x8f0\xd0}\x9aRO\x0f\
-\xb1\xa5O\xe0y\x02\xbb\xfb\x02\xa1@\x1d5k\x1eF\xba?B\x16\xf6\x83L\xa0\t\x1d\
-\x9c)(%\xf1L\xd0J\xa0\x17\xc1\n%\xd0\xad(\xd2\xd0\xb0\x82)4\xd7E\xc9V2\x9d\
-\xffB(PO\xdd\xfa\x1d\xe8\xceO\x11\xa5\xe3\xf8\xd6S\xd4\xac\xbc\x9f\xe2\xe9C\
-\xe8\x8e\x8eP\t\xf0\x02W\xd6\xcc\xcd\x80\x9e\xc1\xb3\xbe\x81\xa9"H%\xd0\xf4*\
-4\xfbU<\xe3\xa9\x05\xd5W\xd5\xb2\x03\xad\xb0\x0f\xcf\x8a\xa1\xd9\x1a\xa1\xf0\
-bb\xad[\xd0\x9d\xef\x80s\x1c\xb2\x1eJ/Q\xb5l\x1b\x01\xeb-&;\x0f\xd3\xb4\xe3O\
-\xf1\xfc<\xd9c/\x93hZ\x8d\x99\\\x8a\xcc\xef\x86,P9\x83\xb9&\xe8\xecY:w4V\x0b\
-\x1bG\x10\xc3A\x90\x80=\x02\x07kaZ\x81a\xa16l\xa0\xd4\xf7>\xeaL\x08\xab\xbd\
-\x159=\x81\'Rx\xe7\x04z\xac\x11\n\x01\xe4\xe1A(\x04\xd1\x1a\xd3X\rw\xa0\r7\
-\xc2X\x0cUH\xa0\x8aE\xdc\x0f\xc1H\xd4\xe3\xcf\x18\xe8G\'\xa0\xf0\xc9O\xc5\
-\xd5\x10\xab\x81ui\xc4p\x00\xcbi\xa7u\xc7_\xa0E#\xe0\xfb\xf8\xe3\x83\xc8\xe3\
-\xe7q\x9a\x17\xe1\x9c*a$\x1b\x11\xe5\x04\xe2\xe04\xe4\x82\xc8\x96\x01\x8c\
-\xfa[\xd0\x86\xea\x11^\x12\xbc\x04*\xa7\xae\xac\xf9\xbf\xba\xeb\x07\x91\xc3\
-\x01\x84\x14PJCW\x12\x7f\xa9\\P}\xe4\x13p\xbc\t6\xc4a86\xbbE\xf5S\xd0\x19\
-\x81L3\x00"PF\xde\x1a%\x12\xbf\x95\xec\xbe\xf7\xb1o)`\xa7\xd3\x94O\xb8\xd4\
-\xdfq\x1f\x0c\xe7\xe1`\x00\xfcy\xfa\xa8\xc2UE\x1f|\xfe\xa99\x83F\xab \xd11N\
-\xe1\xcc\x12$\x1a~~\x92\xe9\x03\xdb@*\xcc\xb5>z\xd6e\xf0\xdbC\x14\xce\xdeF\
-\xcd\x83\x8d\x14\x8f\xd9\x98\xab\xf2\xa8\xd2&\xb2\xe72x\xd9)\x9c\xd0\x13\xd8\
-\x1f\xb8\x84\x96Y\xcct\xf63\xbd\xb7\x83`C\x03\xfe\xd4\x14"\x04\x94o\'\xb3w\
-\x04\xe7\xb1\x11J\xea\xf7\xb0\xf7\xba\xe8M:\xc6u\x1a\xf6\xd12^\xbaHb\xf9\xe8\
-\xac\x07\xa1\x81(\x90\xf9G\x81\xdb/p\x07k\xd0\x1a\x1aH\xfem\t/\xb3\x9eBW\x8e\
-\xf2\xc40N\xe0Q\x8a\x07l\xc2\xcb\x02\xcc\xec\xefazo\x07\xa1\xebR\xf8\x854B\
-\xfaW\xd4,\xed\xb71\x96\xf8$n\x1c\'\x7f\xb2\x1d\x81\xc4\xcf\x8f\x91yc\x1dU\
-\xcf\x14\x16T\x9f;\x9eer\xe7\x97\x89\xdf4D\xa1\xabi\xf63o~\x98\x89\xefo\xa5\
-\xdc]\xbe\xd4\xc6\xa1\xbe\x00\xb1\xb5\x8f0\xf8\xc2\x0c\xa7\xffd\x17\xaa\xe8b\
-5l\xc5Z\xbc\x91\xcc\xb7\x87(\xfe\xe2\xf7?\x87aPa.\xf4\xd7\xd6l\x9c3X]?\xc3}\
-\xec\xe3b\xaa\x1a\xa7(\xa9\x1d\x1c\x84\x07,\xf2\x93\x90\x1dv\xe8\xfe\x96M&\
-\x97\xe2\x86?\xac\xc7X^\xe6\xed\x9d\xcd\xdc\x14\xeb\'\xfad;\xc7\xfe\xfe\x1c\
-\xc3\xcf\xed\xa3\xed\xeeE\xc8\xd5AJ\xa7\xf2\x9c}+C\xb1\xb5\x9d\xba\xcdq\xbaz\
-\x1d\x12\xa9,\xe1\xc7\xdb8\xfa\x0f>c\xdf\xed\xa4\xed\xaez\xd4\xd6(\xba\x05\
-\xba\xe1\x92\xfcZ\x84C\xbb[\xb9S\xee\xe6b*\tR\xa3\x9dA\xde\x8a\xdc\xcfD2\tI\
-\x90\x9a\xe2+}\x87\xd0\x1fl\xe5\xd8\xf7\xfa(|\xff\x10\x8d\xebk\xf17\x9a\x0c|\
-\xa4\x99kj#Yg\xd1\xea\xf6\x91\x9d2\xae\xa8\xf9nt5\x02\x9b\xfb\xc4\xeb\xf4\
-\xd4T\xa3\xa4A\xabH\xf3\x8b\xe4\x1a\xd6\xf4\xf6.\xac\xbe\x01\x97\xb3K\x97q\
-\xaf:L_2\x86\x90\x92\xebU?{nX\xcfD<|\xa9\x8dc3\x82\xed\xcd.\x93w\xaeg\xe4\
-\xd4\x10\x84t\xd6>\xb2\x99\xe9\\\x15\xaf9q\xec5\x95w\x8fk\x89~\xd6/\xcc\x19l\
-\xf4\xa7\xb1\xed^\xc6\x9d\x12\x13c:\xfd\xdfL\x83\xa6c;\x06Jh $KV\xb8t\xfcn\
-\x9e#\xc7\xdbx\xa7\'\xc4\xa8\x1e\xe6\xc9\x87FY\xbc\xcd\xe0\xd8\xcfr\x9cy\xe1\
-\x02Jj\xf8\xc2 \x9c\x90\xac\xb8Wb\xd6\x8c\xf0\xc6\xce\x154\xd6\xfa<\xb2}\x8c\
-\xba/i\x9c=\x90\xe7\xcc\x8b\xbd\x97r\xab\x9b$\xf7\xff\x95\xc1\xb8\x16\xc4.\
-\x9dg\xbc\x1c\xc6\x8aJ\x1c{\x94\x0b\xe5\x1c#\xfeG\x07k>\xb8\x9d\t\x1e\xdb\
-\x9e#\xbcJrt\xff8\x87\xde\xcb\xa0\xa4F\xb4\xd6`\xd1\r\x92\xa1\x92$\x18\xc9c\
-\x17/\xf0\xde\xb1U\xfc\xce\xe6\xf95\x87\xf4&\x1c\xc7\xa7T\xe8f\xd8\xae&\x18s\
-(\xdb\xe3\x9c+\xe5\x99>\xbe\xb0\xfa\xde\xdc\xb9\x02)\xa7qJ\xe7\x98t\nXU\x06e\
-\xfb<\x17\xca\xd73\xe2\x7f\xe2\xb0r\x0c\x9a\xce\xccP\xb7\xb9\x89S\xa7\x07\t%\
-L\x1a6F\xe8|\x7f\x92\xe3\xb9\xe0\xd5\xee\xff\nW@\x1f\x18\x98\xfb\xa00\x9f\
-\xcdS\xcaw\xd3~\x8b\xa0\xdc\x19\xc2v\x0c|\xa1\x13IHj\x9b\x1dZ\x96\xdb4//\xb1\
-\xbf\xb3\x8d\x97_k\xa2XJ\x93\x1eTH/\xc8\x03\xdb\x8eR\xddjp\xfeH\x90bN\xc3\
-\x8a\nn\xfer\x96p5\xbc\xf8\x1f\xf7r\xa2+\x8b\xa1k([\xe7\xa1\'\xba\xb8\xee6\
-\x8d\x13\xfb"L\x8d[\xc4\xea\x15\xab\xbe\x94\xa5\xa77\xc5\xa1\xa3\xcb\xf8\xca\
-\xdan\x96\xac\x8ePU\xeb\x93\x1e\xb08yz\x06\xdb)]\xf2\x99N+\xaa#\xb0\xed\xe9s\
-\\<\x11\xe0\xd4{!4S\xb0n[\x96\xe6\xeb\xf2\x1c\xdc\x9d$\x9a\xf4\xb8p\xbe\x8a\
-\x9dol$;y\x05\xcd#9bUY\x8a\x85\x1eZVN\xd2\xd0V\xa4\xfbB\x94\x0fN\xe6\x11\xb0\
-\xe0\xfajS\x19\xec\xc2Q\x9a\xd7\xe9\xc4\xea|\x06\xfa\xc79yj\x12\xdb\xc9^\xd6\
-\xce\x07\x0e\xb9<\xb4\xc5!\xef\x94hjO \xe48o\xed)10 \xafV\xbfWX b\xe3\xc67\
-\xe7\\\xc3\x85\x80\xed\x9b\xbb\xb8s]\x0f\xa9d\x11!gS\xb3Y\x93\xcc\x8c\xc5\
-\xe8d\x84\x9f\xffj\x19\x17.VSv\xe5e\xcf-o\x9ff\xd3\x8a!Z\x1agP\x9e\xc2G\xa3\
-\xab\'\xc1\xa1Su\xf4\xf4G.\xe5J\xa9Xy\xfd$\x9b\xd7\x0e\x92\x8a\x17(\x97%J\
-\xea|\xf0a5{:\x1b\xc9\xe5\r\xee\xb9s\x88\x8d\x1d\x93\x94}\x8d\xd7\xdfi\xe4\
-\xd8\x99\xaaOy\rX\x1e\xb7\xaf\x1f\xe5\x96\x95CH\xdfEj0\x92\x89p\xfeb\x15\x9b\
-V\x0c\x01\x82\xd7\xdfY\xca\xb13\xd5W\xd4\xcc\xe6\x0c\x84\x80{\xee\x1caC\xc7\
-\x04\xae//\xd3]h}\xb3\xff\xd1\xcb\xa6\x8e!\xca\xbe\xc6k\xef\xb4q\xec\xcc\xe5\
-\xf7\x0b\x0c\x1d\xfe\xe6\xeb9\xca\xfdC\xbc\xf9\x9d^\xbe\xf6O\x1d\xf4\x8cE\
-\xf9\xe6s\x11*W\xd9\xae=b\xd1\xa2\xef^\xb1\x1b\x84\x80P\xf0\xe34\xd7\x05\xdb\
-\xa9|v\xfc,\xd8\xb0\xa6\xcc\xf7\x9e\x9b\xe2\xf9\xbf\x1c\xc0\xf5\x04\x7f\xfe\
-\xcf\x8bx\xfa\xebq\xde=\xf0\xf9\\%\xa80?\xfa\xe0\xe0\xe0\xb5\xf6\xf0[\xcdM;&\
-\x98\x1a\xcap\xf2H\x9e\xc7\x9f\r\xd0u\xda\xe6\xcd]\x8b\x98\xc9V\xb6W_\x04*\
-\xbdp\x8d\t\x07m\xa2\xd1<\x0f\xfe1l\xbe\xc7\xe6\xa5WB\x95\xc9\xf1\x05B\xbf\
-\xd6\x06~\xdby\xe1\xdf\x1b\t\x9auT\xc7|\x9e{Q\xf2\xeaO\xae\xce\xed\xc8\n\xff\
-7\x04|\xa3\xf2*X\xa1\xc2\x1cT\xd6\xf2\n\x15\xe6\xa12A*T\x98\x87\xff\x01r\x9a\
-\x96s\xed>\x96&\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory047Bitmap():
- return wxBitmapFromImage(getDocFactory047Image())
-
-def getDocFactory047Image():
- stream = cStringIO.StringIO(getDocFactory047Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory047')
-catalog['DocFactory047'] = ImageClass()
-catalog['DocFactory047'].getData = getDocFactory047Data
-catalog['DocFactory047'].getImage = getDocFactory047Image
-catalog['DocFactory047'].getBitmap = getDocFactory047Bitmap
-
-
-#----------------------------------------------------------------------
-def getDocFactory048Data():
- return \
-'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xc8\x00\x00\x00\x19\x08\x06\
-\x00\x00\x00t:a\x14\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\rZ\
-IDATx\x9c\xed\x9bil]\xc7u\xc7\x7f3w{+\xdf\xc2\xc7U")\x91\x94m\xd9\x94d\xed\
-\xf2\xaaDv\xe2J^\xeaM\xf5\xd2\xdaE\xd1"(j\xa3\x85\xdb~\xc8\xc7\xa0\x08\n\x14\
-]\x8c\x06\x81\xed&\xa9Q\xb4p\x9d8Q\x12;\x8e\x11\xc9Nd\xc9V\x14j\xb3\xac\x95\
-\xb2$\x92\xe2\xf2\xb8\x93\x8f|\xeb\xbd\xef\xde;\xfd@W\xb6JY"P[R\x9b\xf7\xfbx\
-\xee\xdc\xfb?g\xce\x1c\xcc\xcc\x1d\x8c\xf8\xbbo)E\x85\n\x15.\x8a\x1e\xaa\xbe\
-\xda.T\xa8p\xed\xa2\x07+\x05R\xa1\xc2g\xa2\x87\x13\x17\x7f P\x18\xd8H\xbc\
-\x0b\xec.\x06.\xe6\x15p\xedc\x1f\x84\x8d\xf6?|P@Y\x05\xf0\xd0\xbe\x10]\x89\
-\x8f)J\xf8H\xca\xcaB!\xbe\x10\x9d\n\xd7>z(>\xd7(\xf0i(\xec"\xea\x9e\xc3\xff\
-\xd4\xd8\x94\x12\xa4\xa9\x93w\xe3\xe4\x82\xed\xcc\xe8\x8bp\t|!\x8e\t<\x9a\
-\xecw\xa8\xf2z.\xf0\x01@\xb7\x14\xb6VC\xb7\xb6\x852\xa1\xcfUW\xc3a\xb1\xfbs\
-\x02\xe5\x114C0&\x97\x91\x96\xb7~\xae\x1a\x15\xfe\xef\xa0\x87/R \x16\xa34\
-\xe9/p\xfa\xcdZ\xa6\x07#\x80\x00)\x91\xba"\\S$R_\xa4m\xf9$\x8e\xb5\x88\xbe\
-\xe0_\xe3P\xf7\xb9;\x16d\x98\xa6\xe2\xab\x9c\xfci\x9c\xe9t\x00\x84\x00!\x01\
-\x885\xda,{\xf8=\x8aF=\x13\xdc\xfe\xb9\xea\x86\x18\xa6\xc1\xfe1\xc7~\x9c"\
-\xb6\xb0D\xcb\x9aC\x14\x827R\xe6"\x1dU\xe1\xff=z\xe4"y\x0f)AB[\x85\xf0\x8bHM\
-\x11\x8c\x0b\x8c\x80@!(\xe5\x83\x8c\x9e\x94\xe4G\x9bY~\x9f\xc44~C\x7f\xf8\
-\x81\x0b\x96!\xc2\xf7\x10n\x19\xe1{(\xa9\xa1t\x03%/\xbe\x1c\x12\xae\x83t\xcb\
-\x00\x17\xb4\r)\x9d\xb0\xb8\x1e\xe5\x16\x90\x1a\xe7}\x00Aj\xb1I(\xd4\x81\x19\
-l""\xe7~\xc7\xd7M\x94\xa6#\x9d"\x08\x89oX\xb3\x05v\x19M\x81"\xee\x17\t\xe7\
-\x97")\x91M\xc7\xb8!jQ\x17\x1a\'#?\xe9\xa8y\xc5\xa7\xd4\'\xfaf`V\xd3+\xe3\
-\xeb\xd6\xacV\xd9\x9emf\x06\xe6\xbe\x03\xf8f\xf0\x02\x9f+\\\x1d\xf4*s`\x8e\
-\xd1R\x0e\x18\xeb0\xf4\xf7\x88\xa5\\n\xfe\x83\xdb\xd0BAP>\xe5\xbc\xcd\xc0\
-\xa1\x1eF\x8e\xa79\xb7?\xc5\r\xf7Dq\x8c3\x14D\x10\xa1<\xccL7f\xa6\x1b\xafPB\
-\xa0f\'\x9f@\x00;\xb5\x14\xa7\xaa\x19>.$\xe1\x97\xb1fz0&\xcf\xa2l\x07P\xb3\
-\x13\x84\x11\xa0X{3Z\xb8\x1a\x19\xb8\r\xcb\xda\x89\x96r\xb9\xf9\xa9\x8d\x18\
-\x91 \x00vY1iD\x90\x01I\xcc\xef\xc1\x9c:\x835\xd3\x8d\xb2]\x94R`\x06\xf1\x82\
-\xd5\x98\xc54J\x81\x13o\xa5\x94\xea\xb8\xacfX\xe8T{3\xe4\xa6\x96\x81\xdb\x89\
-\xd0\xa0TX\xc9"k\x94!\x03J\xd2\x98_|\xca\'\x90>\x80\x91K#\r\x89\x1bn@+\x8c\
-\xe1\xdbe\x84i\xe1\xe8\xb5\xc8\xec8B\n\xec\x85+\xf0\xa2\xb5\x00\x18\xe9\x13\
-\x18S\x03 \x14\xe5x3\xe5\xc6\xa5Wb\x0cT\xb8\x04z\x84\x93s\x8c\x86\xd0\x11f\
-\x15\xba\xcc\xa1\x07\x05F,E\xc6*\xe0\x01V(L\xdb]k\xf1r\xdb\xc9\rwS\xc8\\G\
-\xc2\x1aA7g\x88dO\xa3\x973\x0c\x9d\x98d\xfcH\x16\xcf\xf5\xd1\x83:\x8d\x1b\
-\x124\xc4\x86(\x16\x17P\x08.D*\x8fH\xee\x14*;M\xff{\xc3\xe4\x06m\x84\x06f\
-\xc4\xa0\xfa\xa6(\xb5\xa1\x11\xec\xd0z\x84\x91B\x97y\xf4 \x18\xd1\x14\x85@\t\
-\x17\x0f7\xe8\xe20JD\r\x11\xcduAi\x9a\xe1C\xe3d\xba\xf3\x004nH\x12o\x0e1zt\
-\x1a=\xacS\xb3*C\xcew\x08\xe5\xba?S\xb3.<\x81Y\xb5\x89\xe1}\xa7\x18\xdc\xb3\
-\x0f\xe5{()8\xb5\xed\x17,}\xec!\x12Z?8G\xe6\x15\x9f\xaeJ\xc4\x02\xc7\xe9\xfe\
-e\x9aP\xadE\xf2\xc6a&\xba\xb2\x8c\x1f\x9ba\xc9\xc3IB\xdeO\xe8\xfbu\x98x\xbbC\
-\xa2\xea]\xec\xc8V\xa4\x97%\xe0\xbeJ\xfap\x10\xb3\xca#\xde!p\xd4\x1f\xa1\x84\
-q\x85\x87D\x85O\xa3\x87\xd93\xc7\xa8\x91Dp7:\x93\x08!\x10*\x84\xc9\xaf\xf1\
-\x98Di\x12\xcf\xbb\x83\x05\xab;\xe8\xd9\xfeo\xd8cC\xc4R1\x12\xe5\x11D\xa1\
-\x81\xd3?\xdaOal\x94@<\x864M\x9c\xfc\x14\xc3\xbb\xd3\x14\xd3m\xb4|u9\x86y\
-\x02\xddI\xa2\xd9-t\xfd\xf4G\x14\xc7F1\xa3\x11\x8cp\x18\x84C\xbe\xc7\xa5q\
-\xe5&4\x7f\x00A\x0b:\x13xv\x11{b\x1a#ha\n\r-\x10\xa3\xa4\xef\x03/G\xc0m\xe3\
-\xd4\xeb\xaf\x91\x1f\x1e&\x90\x88#-\x8b\xf1\x03\xe7\x18\xddk\xe3\xbbeB\xf5\
-\xf5\x047\xdc\x8dng\x90\x97\xd2\\u7JA\xb0*BU\xad$?\xd2\x87\x90\x92p|\x11z \
-\x86\xa1\xd2\xf8\xf3\x8a\xef8Jz\x98\xc6j\xfc\xe9.F\xcf\x8e1\xf5a\x88`u\x92\
-\x85k[\xa9\xaaY\nN\x18\xc3?J\xfe#\x8d\x85+Z(x\x07\x90%\x1f]\xeb\xa0<z\x94xM\
-\x1d\xf1\xaa\x06\xf2\xec\xa3r\x8a{u\xd1C\xec\x9ac\x14,Bp?\xba\x18GH\x10"H\
-\x80\x0fP\xf4\x02 5\x9b`\xf5C\x04\xac!\xec\xf1\x83h\xac\xc4\x10\x1d\xf4\xedy\
-\x99\xf2\xd8A\x16\xde\xbe\x95\xba[\xb7\x80*\xe3\x16\x8b\x0c\xec\xf8W\n\xbd;)\
-\xa4\x97\x13i_\x00~\r\x03\xbb\x7f\x88;\xf1!-w=A\xa2c\x1d2\xe0\xa3iq<\xa7\x88\
-\xd2\'1\xf5N\x84\xbb\t]\x8c\xe1f\xcfp\xf6?\x9fC\x9a\x12\xa1I\x1a7>Kt\xc9\x12\
-\x94\x97%s\xaa\x0bg\xf4\x10\x0b\xefx\x84\xba[\xb7 t\x1f\xdf\x86\xc1w^f\xfa\
-\xf4^\x0c]C\x98\xf5\xe8n\x94\x81\xdd\xaf^RSY;\x88]\x7f\x0f\xb1\xb6g9\xf3\xca\
-s\x08\xdd\xa3\xfd\xc1g\x10\xd6$R\xab\xa3o\xcf\xcf.\x1f_[=\xca\xda\x8e07\xa1\
-\xcb)L9D\xcb\xe6?#\xd6\xbe\x02_\xf4\xa2\x02\x1f@n\t\xf5kL\xfa\xde\xfa\x01\
-\xa5\xe9\xaf\x12\x0c\x16Q^\x92\xa9\x9e.t\x86H-{\x0cB\xfd\x04\xc5\xdbP)\x91\
-\xab\x8a\x1e\x18\xbd\xc8FP\xd7\xf0\x02\x114["\xa5\x00?\x825\xa9\x81;\xdbVYq\
-\\?\x8cY\x12\x98^\x18\xa1bP\xf6\xb1{\xfb\x08\x05\x1b\xa9[\xf78Zy;\xd2\xdb\
-\x8f4\x1f\xa1n\xf5\xa3\x0ct\x9f\xa0\xd4\xd3Cl\xf1\x93x\x9e\xc0\xee>K(PG\xcd\
-\xaaG\x90\xeeO\x90\x85= \x13hB\x07g\nJI<\x13\xb4\x12\xe8E\xb0B\tt+\x8a44\xac\
-`\n\xcduQ\xb2\x95L\xe7\xbf\x10\n\xd4S\xb7v+\xba\xf3sD\xe9\x08\xbe\xf545\xcb\
-\x1f\xa0xb?\xba\xa3#T\x02\xbc\xc0\xe55s3\xa0g\xf0\xaco`\xaa\x08R\t4\xbd\n\
-\xcd~\r\xcfxz^\xf1U\xb5lE+\xec\xc6\xb3bh\xb6F(\xbc\x90X\xeb&t\xe7;\xe0\x1c\
-\x81\xac\x87\xd2KT-\xd9L\xc0z\x9b\xc9\xce\x034m\xfdS<?O\xf6\xf0+$\x9aVb&\x17\
-#\xf3; \x0bT\xce`\xae*:;\x17\xcf\xb5\xc6ja\xfd\x08b8\x08\x12\xb0G`_-L+0,\xd4\
-\xbau\x94\xfa>@\x9d\x0ca\xb5\xb7"\xa7\'\xf0D\n\xef\xb4@\x8f5B!\x80<0\x08\x85\
- Zc\x1a\xab\xe1\x0e\xb4\xe1F\x18\x8b\xa1\n\tT\xb1\x88\xfb\x11\x18\x89z\xfc\
-\x19\x03\xfd\xd0\x04\x14>\xfd\xab\xb8\x1ab5\xb0&\x8d\x18\x0e`9\xed\xb4n\xfd\
-\x0b\xb4h\x04|\x1f\x7f|\x10y\xe4\x0cN\xf3\x02\x9c\xe3%\x8cd#\xa2\x9c@\xec\
-\x9b\x86\\\x10\xd92\x80Q\x7f\x0b\xdaP=\xc2K\x82\x97@\xe5\xd4\xe55\xff[w\xed \
-r8\x80\x90\x02Ji\xe8J\xe2/\x96\xf3\x8a\x8f|\x02\x8e4\xc1\xba8\x0c\xc7f\x97\
-\xa8~\n:#\x90i\x06@\x04\xca\xc8[\xa3D\xe2\xb7\x92\xdd\xfd\x01\xf6-\x05\xect\
-\x9a\xf2Q\x97\xfa;\xee\x87\xe1<\xec\x0b\x80\x7f\x91\xdcT\xb8\xa2\xe8\x83/<=\
-\xc7h\xb4\n\x12\x1d\xe3\x14N.B\xa2\xe1\xe7\'\x99\xde\xbb\x19\xa4\xc2\\\xed\
-\xa3g]\x06\xbf=D\xe1\xd4m\xd4<\xd4H\xf1\xb0\x8d\xb9"\x8f*m {:\x83\x97\x9d\
-\xc2\t=\x89\xfd\xa1Kh\x89\xc5Lg?\xd3\xbb:\x0864\xe0OM!B@\xf9v2\xbbFp\x1e\x1f\
-\xa1\xa4~\x0f{\x97\x8b\xde\xa4c\\\xa7a\x1f*\xe3\xa5\x8b$\x96\x8e\xce\xfa 4\
-\x10\x052\xff(p\xfb\x05\xee`\rZC\x03\xc9\xbf-\xe1e\xd6R\xe8\xcaQ\x9e\x18\xc6\
-\t<Fq\xafMxI\x80\x99==L\xef\xea t]\n\xbf\x90FH\xff\xb2\x9a\xa5=6\xc6"\x9f\
-\xc4\x8d\xe3\xe4\x8f\xb5#\x90\xf8\xf912o\xae\xa1\xea\xd9\xc2\xbc\xe2s\xc7\
-\xb3Ln\xfb2\xf1\x9b\x86(t5\xcd\xfe\xe6\xcd\x0f3\xf1\xfd{(w\x97\xcf\xf7q\xa8/\
-@l\xf5\xa3\x0c\xbe8\xc3\x89?\xd9\x8e*\xbaX\r\xf7`-\\O\xe6\xdbC\x14\x7f\xf5\
-\xfbWp\x18T\xf8,\xf4\xd7W\xad\x9fc\xac\xae\x9f\xe1~vs.U\x8dS\x94\xd4\x0e\x0e\
-\xc2\x83\x16\xf9I\xc8\x0e;t\x7f\xcb&\x93Kq\xc3\x1f\xd6c,-\xf3\xce\xb6fn\x8a\
-\xf5\x13}\xaa\x9d\xc3\x7f\x7f\x9a\xe1\xe7w\xd3v\xf7\x02\xe4\xca \xa5\xe3yN\
-\xbd\x9d\xa1\xd8\xdaN\xdd\xc68]\xbd\x0e\x89T\x96\xf0\x13m\x1c\xfa\x07\x9f\
-\xb1\xefv\xd2vW=\xea\x9e(\xba\x05\xba\xe1\x92\xfcZ\x84\xfd;Z\xb9S\xee\xe0\\*\
-\tR\xa3\x9dA\xde\x8e<\xc0D2\tI\x90\x9a\xe2+}\xfb\xd1\x1fj\xe5\xf0\xf7\xfa(|\
-\x7f?\x8dkk\xf1\xd7\x9b\x0c|\xac\x99kj#Yg\xd1\xea\xf6\x91\x9d2.\xab\xf9^t%\
-\x02\x9b\xfb\xc5\x1b\xf4\xd4T\xa3\xa4A\xabH\xf3\xab\xe4*V\xf5\xf6\xce/\xbe\
-\x01\x97S\x8b\x97p\x9f:@_2\x86\x90\x92\xebU?;oX\xcbD<|\xbe\x8fc3\x82-\xcd.\
-\x93w\xaee\xe4\xf8\x10\x84tV?\xba\x91\xe9\\\x15\xaf;q\xecU\x95\xbd\xc7\xb5\
-\x80~\xca/\xcc16\xfa\xd3\xd8v/\xe3N\x89\x891\x9d\xfeo\xa6A\xd3\xb1\x1d\x03%4\
-\x10\x92E\xcb\\:~7\xcf\xc1#m\xbc\xdb\x13bT\x0f\xf3\xd4\xc3\xa3,\xdclp\xf8\
-\x179N\xbex\x16%5|a\x10NH\x96\xdd\'1kFxs\xdb2\x1ak}\x1e\xdd2F\xdd\x974N\xed\
-\xcds\xf2\xa5\xde\xf3m\xab\x9b$\x0f\xfc\x95\xc1\xb8\x16\xc4.\x9da\xbc\x1c\
-\xc6\x8aJ\x1c{\x94\xb3\xe5\x1c#\xfe\xc7\x07k>\xb8\x9d\t\x1e\xdf\x92#\xbcBrh\
-\xcf8\xfb\xdf\xcf\xa0\xa4F\xb4\xd6`\xc1\r\x92\xa1\x92$\x18\xc9c\x17\xcf\xf2\
-\xfe\xe1\x15\xfc\xce\xc6Kk\x0e\xe9M8\x8eO\xa9\xd0\xcd\xb0]M0\xe6P\xb6\xc79]\
-\xca3}d~\xf1\xbd\xb5m\x19RN\xe3\x94N3\xe9\x14\xb0\xaa\x0c\xca\xf6\x19\xce\
-\x96\xafg\xc4\xff\xd4a\xe5\x184\x9d\x9c\xa1nc\x13\xc7O\x0c\x12J\x984\xac\x8f\
-\xd0\xf9\xc1$Gr\xc1+\x95\xff\n\x97A\x1f\x18\x98{P\x98\xcf\xe6)\xe5\xbbi\xbfE\
-P\xee\x0ca;\x06\xbe\xd0\x89$$\xb5\xcd\x0e-Km\x9a\x97\x96\xd8\xd3\xd9\xc6+\
-\xaf7Q,\xa5I\x0f*\xa4\x17\xe4\xc1\xcd\x87\xa8n58s0H1\xa7aE\x057\x7f9K\xb8\
-\x1a^\xfa\x8f\xfb8\xda\x95\xc5\xd05\x94\xad\xf3\xf0\x93]\\w\x9b\xc6\xd1\xdd\
-\x11\xa6\xc6-b\xf5\x8a\x15_\xca\xd2\xd3\x9bb\xff\xa1%|eu7\x8bVF\xa8\xaa\xf5I\
-\x0fX\x1c;1\x83\xed\x94\xce\xfb\x99N+\xaa#\xb0\xf9\x99\xd3\x9c;\x1a\xe0\xf8\
-\xfb!4S\xb0fs\x96\xe6\xeb\xf2\xec\xdb\x91$\x9a\xf48{\xa6\x8amo\xae\';y\x19\
-\xcd\x839bUY\x8a\x85\x1eZ\x96O\xd2\xd0V\xa4\xfbl\x94\x0f\x8f\xe5\x110\xef\
-\xf8jS\x19\xec\xc2!\x9a\xd7\xe8\xc4\xea|\x06\xfa\xc79v|\x12\xdb\xc9^\xd0\xcf\
-{\xf7\xbb<\xbc\xc9!\xef\x94hjO \xe48o\xef,10 \xbf\xe8\xbcW\x98\'b\xfd\xfa\
-\xb7\xe6\xcc\xe5B\xc0\x96\x8d]\xdc\xb9\xa6\x87T\xb2\x88\x90\xb3M\xb2Y\x93\
-\xcc\x8c\xc5\xe8d\x84_\xfef\tg\xcfUSv\xe5\x05\xef-m\x9ff\xc3\xb2!Z\x1agP\x9e\
-\xc2G\xa3\xab\'\xc1\xfe\xe3u\xf4\xf4G\xce\xb7\x95R\xb1\xfc\xfaI6\xae\x1e$\
-\x15/P.K\x94\xd4\xf9\xf0\xa3jvv6\x92\xcb\x1b\xdc{\xe7\x10\xeb;&)\xfb\x1ao\
-\xbc\xdb\xc8\xe1\x93Us\x02\x08X\x1e\xb7\xaf\x1d\xe5\x96\xe5CH\xdfEj0\x92\x89\
-p\xe6\\\x15\x1b\x96\r\x01\x827\xde]\xcc\xe1\x93\xd5\x97\xd5\xcc\xe6\x0c\x84\
-\x80{\xef\x1ca]\xc7\x04\xae//\xd0\x9do|\xb3\xdf\xe8eC\xc7\x10e_\xe3\xf5w\xdb\
-8|\xf2\xc2{\x05\x86\x0e\x7f\xf3\xf5\x1c\xe5\xfe!\xde\xfaN/_\xfb\xa7\x0ez\xc6\
-\xa2|\xf3\xf9\x08\x95+l\xd7\x0eb\xc1\x82\xef~f:\x84\x80P\xf0\x93\xc7\xae\x0b\
-\xb6S\xf9\xed\xf8y\xb0nU\x99\xef=?\xc5\x0b\x7f9\x80\xeb\t\xfe\xfc\x9f\x17\
-\xf0\xcc\xd7\xe3\xbc\xb7\xf7\xca\\%\xa80?\xf4\xc1\xc1\xc1\xab\xed\xc3o%7m\
-\x9d`j(\xc3\xb1\x83y\x9ex.@\xd7\t\x9b\xb7\xb6/`&[Y^]KT\xb2q\x95\x08\x07m\xa2\
-\xd1<\x0f\xfd1l\xbc\xd7\xe6\xe5WC\x95\xe2\xb8\x06\xd1\xaf\xb6\x03\xbf\xad\
-\xbc\xf8\xef\x8d\x04\xcd:\xaac>\xcf\xbf$y\xedg_\xcc\xed\xc8\n\xff;\x04|\xa3\
-\xb2%\xacP\xe13\xa8\xcc\xe9\x15*\\\x82J\x81T\xa8p\t\xfe\x0bW.\x96s\xf9\x9f\
-\x89\xa7\x00\x00\x00\x00IEND\xaeB`\x82'
-
-def getDocFactory048Bitmap():
- return wxBitmapFromImage(getDocFactory048Image())
-
-def getDocFactory048Image():
- stream = cStringIO.StringIO(getDocFactory048Data())
- return wxImageFromStream(stream)
-
-index.append('DocFactory048')
-catalog['DocFactory048'] = ImageClass()
-catalog['DocFactory048'].getData = getDocFactory048Data
-catalog['DocFactory048'].getImage = getDocFactory048Image
-catalog['DocFactory048'].getBitmap = getDocFactory048Bitmap
-
-
diff --git a/sandbox/gschwant/docfactory/setup.py b/sandbox/gschwant/docfactory/setup.py
deleted file mode 100755
index a79869899..000000000
--- a/sandbox/gschwant/docfactory/setup.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python
-
-from distutils.core import setup
-
-LONG_DESCRIPTION = """\
-DocFactory is a wxPython-GUI for Docutils. It is distributed as
-a subpackage of Docutils (docutils.factory). The main front-end
-(docfactory.py) is installed as a "script". After installation
-you should find it in the scripts-directory of your Python
-environment.
-
-System requirements:
-
-* Python 2.1.1 or later (http://www.python.org).
-* wxPython 2.3.4.2 or later (http://wxpython.org). Be sure to get the
- build matching the version of Python you're using.
-* Docutils 0.2.2 or later (http://docutils.sourceforge.net). Use the
- CVS snapshot.
-"""
-
-def do_setup():
- dist = setup(
- name = 'DocFactory',
- description = 'wxPython-GUI for Docutils',
- long_description = LONG_DESCRIPTION,
- url = ('http://docutils.sourceforge.net/sandbox/gschwant/'
- 'docfactory/'),
- version = '0.2',
- author = 'Dr. Gunnar Schwant',
- author_email = 'g.schwant@gmx.de',
- license = 'BSD (see LICENSE.txt)',
- packages = ['docutils.factory'],
- package_dir = {'docutils.factory': 'factory'},
- scripts = ['docfactory.py'])
- return dist
-
-
-if __name__ == '__main__' :
- do_setup()
diff --git a/sandbox/gschwant/htmlnav/README.txt b/sandbox/gschwant/htmlnav/README.txt
deleted file mode 100644
index 370a8991f..000000000
--- a/sandbox/gschwant/htmlnav/README.txt
+++ /dev/null
@@ -1,183 +0,0 @@
-==================
- README: htmlnav_
-==================
-
-----------------------------------------------------------
-An HTML writer for docutils which supports navigation-bars
-----------------------------------------------------------
-
-:Author: Gunnar Schwant
-:Contact: g.schwant@gmx.de
-:Date: $Date$
-
-.. contents::
-
-Introduction
-============
-
-This is the writer which I use to build my homepage: http://schwant.gmxhome.de.
-[#]_ The name **htmlnav** is a short term for *HTML with navigation-bars*.
-
-System Requirements
-===================
-
-Docutils and everything needed to use docutils has to be
-installed.
-
-Installation
-============
-
-Perform the usual ``setup.py install`` procedure.
-
-Usage
-=====
-
-Most parts of the writer are inherited from David Goodger's ``html4css1``.
-In fact, if no ``.nav``-files do exist in the destination directory, it
-produces the same output as David's writer.
-
-Short example
--------------
-
-1. Go to docutils' "``tools``"-directory and create a file called
- "``left.nav``" with the following contents::
-
- colors | #000000 | #8E8E8E
- section | Home
- link | Python | http://www.python.org
- link | Docutils | http://docutils.sf.net
- raw | <br>
- raw | &copy; 2003 MyCompany
-
-2. Process "``test.txt``" to HTML using "``rst2htmlnav.py``"::
-
- rst2htmlnav.py test.txt test.html
-
- Open "``test.html``" in your browser. You will notice the left
- navigation-bar.
-
-3. Create a file called "``right.nav``" in docutils' "``tools``"-directory.
- This time the contents are::
-
- colors | #000000 | #8E8E8E
- section | Contact
- link | me@MyCompany.org | mailto:me@mycompany.org
-
-4. Now perform step 2 again and open "``test.html``" in your browser.
- You will notice that there is a right navigation-bar now.
-
-5. Create a file called "``top.nav``" in docutils' "``tools``"-directory
- with the following contents::
-
- color | #C8DBEB
- cornerpic | ../docs/rst/images/ball1.gif
- link | Home | test.html
- link | Python | http://www.python.org
- link | Docutils | http://docutils.sf.net
- link | Search | http://www.google.com
-
-6. Once again perform step 2 and open "``test.html``" in your browser.
- Now a top navigation-bar is there, too.
-
-.nav-files
-----------
-
-In order to get navigation-bars in the output-page you have to create
-``.nav``-files in the destination directory. There are 4 types of
-``.nav``-files:
-
-[file].nav
- This defines the left navigation-bar of the output-file ``[file].html``.
- (``[file]`` is the name of the output-file without extension.)
-
-left.nav
- This defines the left navigation-bar of all output-files for which
- no ``[file].nav``-file is present.
-
-right.nav
- This defines the right navigation-bar of all output-files.
-
-top.nav
- This defines the top navigation-bar of all output-files.
-
-.. important:: At least one of the files ``[file].nav`` and ``left.nav``
- has to be present. Otherwise no navigation-bars will be
- added to the output file.
-
-.nav-file-entries
------------------
-
-``.nav``-files contain a one-liner for each navigation-bar-entry.
-In general such a one-liner is of the form
-
-::
-
- parameter | value 1 | value 2
-
-These are the different types of parameters:
-
-color
-~~~~~
-
-:Used in: ``top.nav``
-:Value 1: Background-color of all navigation-bars.
-:Value 2: Not used.
-:Example: ``color | #8E8E8E`` sets the navigation-bars' background-color
- to ``#8E8E8E``. (The default color is white.)
-
-colors
-~~~~~~
-
-:Used in: ``[file].nav``, ``left.nav``, ``right.nav``
-:Value 1: Background-color of section entries.
-:Value 2: Background-color of any other (non-section) entry.
-:Example: ``colors | #000000 | #8E8E8E`` sets the background-color to be
- ``#000000`` (black) for sections to be ``#8E8E8E`` (gray) for
- any other entry.
-
-cornerpic
-~~~~~~~~~
-
-:Used in: ``top.nav``
-:Value 1: Path to the graphics file which will be displayed in the upper
- left corner of the top navigation-bar. (The *width* of a
- corner-picture should be 150 pixel.)
-:Value 2: Not used.
-:Example: ``cornerpic | pics/home.png`` sets the path of the corner-picture
- to ``pics/home.png``.
-
-raw
-~~~
-
-:Used in: ``[file].nav``, ``left.nav``, ``right.nav``
-:Value 1: Any kind of text.
-:Value 2: Not used.
-:Example: ``raw | <br>`` will create an empty cell (a spacer) in
- the navigation-bar.
-
-section
-~~~~~~~
-
-:Used in: ``[file].nav``, ``left.nav``, ``right.nav``
-:Value 1: Title of the section.
-:Value 2: Not used.
-:Example: ``section | Home`` will create a section with title *Home* in
- the navigation-bar.
-
-link
-~~~~
-
-:Used in: ``[file].nav``, ``left.nav``, ``right.nav``, ``top.nav``
-:Value 1: Text to be displayed.
-:Value 2: URL
-:Example: ``link | Docutils | http://docutils.sf.net`` creates a link to
- Docutils' homepage in the navigation-bar.
-
-Footnotes
-=========
-
-.. [#] Sorry, my homepage is in german language. However, even if you
- don't understand what the text says, you'll get an impression of the
- writers output.
-
-.. _htmlnav: writer/htmlnav.py \ No newline at end of file
diff --git a/sandbox/gschwant/htmlnav/rst2htmlnav.py b/sandbox/gschwant/htmlnav/rst2htmlnav.py
deleted file mode 100644
index 7d68bfce8..000000000
--- a/sandbox/gschwant/htmlnav/rst2htmlnav.py
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env python
-
-# Author: Gunnar Schwant
-# Contact: g.schwant@gmx.de
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-
-description = (default_description)
-
-publish_cmdline(writer_name='htmlnav', description=description)
diff --git a/sandbox/gschwant/htmlnav/setup.py b/sandbox/gschwant/htmlnav/setup.py
deleted file mode 100644
index 22a200ce7..000000000
--- a/sandbox/gschwant/htmlnav/setup.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python
-
-from distutils.core import setup
-
-def do_setup():
- dist = setup(
- name='html-with-navigation-bars-writer',
- description='A HTML writer for Docutils which supports navigation bars',
- url='http://docutils.sourceforg.net/sandbox/gschwant/htmlwnav/',
- version='0.1',
- author='Gunnar Schwant',
- author_email='g.schwant@gmx.de',
- license='Public Domain',
- packages=['docutils.writers'],
- package_dir={'docutils.writers':'writer'},
- scripts=['rst2htmlnav.py']
- )
- return dist
-
-if __name__ == '__main__':
- do_setup()
diff --git a/sandbox/gschwant/htmlnav/writer/htmlnav.py b/sandbox/gschwant/htmlnav/writer/htmlnav.py
deleted file mode 100644
index 40b17b778..000000000
--- a/sandbox/gschwant/htmlnav/writer/htmlnav.py
+++ /dev/null
@@ -1,193 +0,0 @@
-# Author: Gunnar Schwant
-# Contact: g.schwant@gmx.de
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-from docutils import writers, nodes, languages
-import docutils, html4css1, os
-
-class Writer(html4css1.Writer):
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = HTMLTranslator
-
-class HTMLTranslator(html4css1.HTMLTranslator):
-
- def __init__(self, document):
- html4css1.HTMLTranslator.__init__(self, document)
- self.navigation_bgcolor = '#FFFFFF'
- self.body_prefix = [self.get_body_prefix()]
- self.body_suffix = [self.get_body_suffix()]
-
- def get_body_prefix(self):
- navtop = os.path.join(os.path.split(self.settings._destination)[0],
- 'top.nav')
- navright = os.path.join(os.path.split(self.settings._destination)[0],
- 'right.nav')
- if os.path.exists(navright):
- colspan = 3
- width = '70%'
- else:
- colspan = 2
- width = '85%'
- navleft = '%s%s' % (os.path.splitext(self.settings._destination)[0],
- '.nav')
- bgcolor = color1 = color2 = self.navigation_bgcolor
- cornerpic = None
- if not os.path.exists(navleft):
- navleft = os.path.join(os.path.split(self.settings._destination)[0],
- 'left.nav')
- if os.path.exists(navleft):
- if os.path.exists(navtop):
- f = open(navtop, 'rt')
- lines = f.readlines()
- f.close()
- for line in lines:
- val = line.split('|')
- for i in range(len(val)):
- val[i] = val[i].strip()
- if val[0] == 'color':
- bgcolor = color1 = color2 = val[1]
- self.navigation_bgcolor = bgcolor
- if val[0] == 'cornerpic':
- cornerpic = val[1]
- body_prefix = '<style type="text/css"><!--\n' \
- 'a.navigation, a.navigation-top { ' \
- 'text-decoration: none ; color: #000000 }\n' \
- 'a.navigation-top { font-weight: bold }\n' \
- 'a.navigation:hover, a.navigation-top:hover { ' \
- 'text-decoration: underline }\n' \
- 'table.navigation { font-size: 10pt ; ' \
- 'border-collapse: collapse ; border-width: 0pt ' \
- '; border-color: #FFFFFF }\n' \
- 'td.navigation { font-size: 8pt ; padding-left: ' \
- '0em ; padding-right: 0em }\n' \
- '--></style>\n</head>\n<body>\n<table width="100%" ' \
- 'class="navigation" border="0" cellspacing="0" ' \
- 'cellpadding="0">'
- if os.path.exists(navtop):
- body_prefix = body_prefix + '\n<tr><td width="15%" '
- body_prefix = '%s class="navigation" bgcolor="%s">' \
- % (body_prefix, bgcolor)
- if cornerpic != None:
- body_prefix = '%s\n<center><img src="%s"></center>' \
- % (body_prefix, cornerpic)
- body_prefix = '%s\n</td><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;&nbsp;</td>' \
- '<td bgcolor="%s" colspan="%d" ' \
- 'class="navigation">' % (body_prefix,
- bgcolor, bgcolor,
- colspan)
- body_prefix = body_prefix + '\n<table class="navigation" ' \
- 'width="100%" border="0" cellspacing="0" ' \
- 'cellpadding="0">'
- body_prefix = '%s\n<tr align="left">' % body_prefix
- for line in lines:
- val = line.split('|')
- for i in range(len(val)):
- val[i] = val[i].strip()
- if val[0] == 'link':
- body_prefix = '%s\n<td class="navigation"><ul><li>' \
- '<a href="%s" class="navigation-top">' \
- '%s</a></li></ul></td>' \
- % (body_prefix, val[2], val[1])
- elif val[0] == 'raw':
- body_prefix = '%s\n<td class="navigation">%s</td>' \
- % (body_prefix, val[1])
- body_prefix = '%s\n</tr></table></td></tr>' % body_prefix
- f = open(navleft, 'rt')
- lines = f.readlines()
- f.close()
- body_prefix = '%s\n<tr><td class="navigation" bgcolor="%s" ' \
- % (body_prefix, bgcolor)
- body_prefix = body_prefix + ' width="15%" valign="top">'
- body_prefix = body_prefix + '\n<table class="navigation" ' \
- 'width="100%" border="0" cellspacing="0" ' \
- 'cellpadding="3">'
- for line in lines:
- val = line.split('|')
- for i in range(len(val)):
- val[i] = val[i].strip()
- if val[0] == 'colors':
- (color1, color2) = (val[1], val[2])
- elif val[0] == 'link':
- body_prefix = '%s\n<tr><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;<a href="%s" ' \
- 'class="navigation">%s</a></td></tr>' \
- % (body_prefix, color2, val[2], val[1])
- elif val[0] == 'section':
- body_prefix = '%s\n<tr><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;<b>' \
- % (body_prefix, color1)
- if color1 != bgcolor:
- body_prefix = '%s<font color="#FFFFFF">%s</font>' \
- '</b></td></tr>' \
- % (body_prefix, val[1])
- else:
- body_prefix = '%s%s</b></td></tr>' \
- % (body_prefix, val[1])
- elif val[0] == 'raw':
- body_prefix = '%s\n<tr><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;%s</td></tr>' \
- % (body_prefix, color2, val[1])
- body_prefix = '%s\n</table>\n</td>\n<td ' \
- 'width="15">&nbsp;&nbsp;</td>\n<td width="%s">' \
- % (body_prefix, width)
- else:
- body_prefix = '</head>\n<body>\n'
- return body_prefix
-
- def get_body_suffix(self):
- bgcolor = color1 = color2 = self.navigation_bgcolor
- navleft = '%s%s' % (os.path.splitext(self.settings._destination)[0],
- '.nav')
- if not os.path.exists(navleft):
- navleft = os.path.join(os.path.split(self.settings._destination)[0],
- 'left.nav')
- navright = os.path.join(os.path.split(self.settings._destination)[0],
- 'right.nav')
- if os.path.exists(navleft) and os.path.exists(navright):
- f = open(navright, 'rt')
- lines = f.readlines()
- f.close()
- body_suffix = '</td><td width="15">&nbsp;&nbsp;</td>\n<td ' \
- 'class="navigation" width="15%" valign="top" '
- body_suffix = '%s bgcolor="%s">' % (body_suffix, bgcolor)
- body_suffix = body_suffix + '\n<table class="navigation" ' \
- 'width="100%" border="0" cellspacing="0" ' \
- 'cellpadding="3">'
- for line in lines:
- val = line.split('|')
- for i in range(len(val)):
- val[i] = val[i].strip()
- if val[0] == 'link':
- body_suffix = '%s\n<tr><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;<a href="%s" ' \
- 'class="navigation">%s</a></td></tr>' \
- % (body_suffix, color2, val[2], val[1])
- elif val[0] == 'colors':
- (color1, color2) = (val[1], val[2])
- elif val[0] == 'section':
- body_suffix = '%s\n<tr><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;<b>' \
- % (body_suffix, color1)
- if color1 != bgcolor:
- body_suffix = '%s<font color="#FFFFFF">%s</font>' \
- '</b></td></tr>' \
- % (body_suffix, val[1])
- else:
- body_suffix = '%s%s</b></td></tr>' % (body_suffix,
- val[1])
- elif val[0] == 'raw':
- body_suffix = '%s\n<tr><td bgcolor="%s" ' \
- 'class="navigation">&nbsp;%s</td></tr>' \
- % (body_suffix, color2, val[1])
- body_suffix = '%s\n</table>\n</td></tr></table>\n</head>\n' \
- '</body>\n' % body_suffix
- elif os.path.exists(navleft):
- body_suffix = '</td></tr></table>\n</head>\n</body>\n'
- else:
- body_suffix = '</head>\n</body>\n'
- return body_suffix
diff --git a/sandbox/ianb/extractor/default.css b/sandbox/ianb/extractor/default.css
deleted file mode 100644
index 05e43aab5..000000000
--- a/sandbox/ianb/extractor/default.css
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
-:Author: David Goodger
-:Contact: goodger@users.sourceforge.net
-:date: $Date$
-:version: $Revision$
-:copyright: This stylesheet has been placed in the public domain.
-
-Default cascading style sheet for the HTML output of Docutils.
-*/
-
-.topic {
- margin-left: 5em;
-}
-
-.topic-title {
- margin-left: -1em;
-}
-
-body {
- background-color: #eeeeee;
- font-family: Arial, sans-serif;
-}
-
-em {
- font-family: Times New Roman, Times, serif;
-}
-
-li {
- list-style-type: circle;
-}
-
-a.target {
- color: blue }
-
-a.toc-backref {
- text-decoration: none ;
- color: black }
-
-a:hover {
- background-color: #cccccc;
-}
-
-cite {
- font-style: normal;
- font-family: monospace;
- font-weight: bold;
-}
-
-dd {
- margin-bottom: 0.5em }
-
-div.abstract {
- margin: 2em 5em }
-
-div.abstract p.topic-title {
- font-weight: bold ;
- text-align: center }
-
-div.attention, div.caution, div.danger, div.error, div.hint,
-div.important, div.note, div.tip, div.warning {
- // margin: 2em ;
- background-color: #cccccc;
- align: center;
- //width: 60%;
- // border: medium outset ;
- padding: 3px;
- }
-
-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;
- text-align: center }
-
-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;
- text-align: center }
-
-div.dedication {
- margin: 2em 5em ;
- text-align: center ;
- font-style: italic }
-
-div.dedication p.topic-title {
- font-weight: bold ;
- font-style: normal }
-
-div.figure {
- margin-left: 2em }
-
-div.footer, div.header {
- font-size: smaller }
-
-div.system-messages {
- margin: 5em }
-
-div.system-messages h1 {
- color: red }
-
-div.system-message {
- border: medium outset ;
- padding: 1em }
-
-div.system-message p.system-message-title {
- color: red ;
- font-weight: bold }
-
-div.topic {
- margin: 2em }
-
-h1, h2, h3, h4, h5, h6 {
- font-family: Helvetica, Arial, sans-serif;
- border: thin solid black;
- background-color: #cccccc;
- -moz-border-radius: 8px;
- padding: 4px;
- }
-
-h1.title {
- text-align: center;
- background-color: #444499;
- color: #eeeeee;
- border: medium solid black;
- -moz-border-radius: 20px;
- }
-
-h2.subtitle {
- text-align: center }
-
-hr {
- width: 75% }
-
-ol.simple, ul.simple {
- margin-bottom: 1em }
-
-ol.arabic {
- list-style: decimal }
-
-ol.loweralpha {
- list-style: lower-alpha }
-
-ol.upperalpha {
- list-style: upper-alpha }
-
-ol.lowerroman {
- list-style: lower-roman }
-
-ol.upperroman {
- list-style: upper-roman }
-
-p.caption {
- font-style: italic }
-
-p.credits {
- font-style: italic ;
- font-size: smaller }
-
-p.first {
- margin-top: 0 }
-
-p.label {
- white-space: nowrap }
-
-p.topic-title {
- font-weight: bold }
-
-pre.address {
- margin-bottom: 0 ;
- margin-top: 0 ;
- font-family: serif ;
- font-size: 100% }
-
-pre.line-block {
- font-family: serif ;
- font-size: 100% }
-
-pre.literal-block, pre.doctest-block {
- margin-left: 2em ;
- margin-right: 2em ;
- background-color: #ffffff;
- border: thin black solid;
- padding: 5px;
-}
-
-span.classifier {
- font-family: sans-serif ;
- font-style: oblique }
-
-span.classifier-delimiter {
- font-family: sans-serif ;
- font-weight: bold }
-
-span.interpreted {
- font-family: sans-serif }
-
-span.option-argument {
- font-style: italic }
-
-span.pre {
- white-space: pre }
-
-span.problematic {
- color: red }
-
-table {
- margin-top: 0.5em ;
- margin-bottom: 0.5em }
-
-table.citation {
- border-left: solid thin gray ;
- padding-left: 0.5ex }
-
-table.docinfo {
- margin: 2em 4em }
-
-table.footnote {
- border-left: solid thin black ;
- padding-left: 0.5ex }
-
-td, th {
- padding-left: 0.5em ;
- padding-right: 0.5em ;
- vertical-align: top }
-
-td > p:first-child, th > p:first-child {
- margin-top: 0em }
-
-th.docinfo-name, th.field-name {
- font-weight: bold ;
- text-align: left ;
- white-space: nowrap }
-
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
- font-size: 100% }
-
-tt {
- //background-color: #eeeeee;
- color: #000066 }
-
-ul.auto-toc {
- list-style-type: none }
diff --git a/sandbox/ianb/extractor/extractor.py b/sandbox/ianb/extractor/extractor.py
deleted file mode 100644
index 697c47d8b..000000000
--- a/sandbox/ianb/extractor/extractor.py
+++ /dev/null
@@ -1,339 +0,0 @@
-#!/usr/bin/env python
-"""
-This module extracts the documentation from a module, and converts
-it into a single reST document.
-
-Usage:
- ./extractor.py some_module.py > some_module.txt
-For more:
- ./extractor.py --help
-
-The document is based on the module's docstring -- no other
-documentation is implicitly included.
-
-Other documentation can be explicitly included by using the directives
-``.. inline:: function_or_class`` or ``.. inline-all::``.
-
-The first directive includes the docstring from that function or
-class. When the directive is encountered inside a class, it can refer
-either to the global or local namespace, as in ``..inline::
-Document.add_child`` or ``.. inline:: add_child``.
-
-The second directive will include all children of the module or class,
-except those which start with a ``"_"`` (i.e., private), those that
-have ``:ignore:`` anywhere in their docstring, or those that have
-already been included.
-
-You can also force a docstring to be ignored by using
-``.. ignore:: function_or_class``. This is useful for properties,
-whose documentation will not be extracted, or other times when
-you want to document the function or class separately from its
-docstring.
-
-TODO
-----
-
-* Allow docstrings to override the normal function argument
- list (e.g., to hide non-public optional arguments).
-* Some sort of table of contents support.
-
-"""
-
-
-import os, re, sys
-from docutils.readers.python import moduleparser
-
-class Document:
-
- def __init__(self, node, module):
- self.node = node
- self.parts = []
- self.children = {}
- self.module = module
-
- def add_child(self, child):
- self.children[child.name] = child
- self.parts.append(child)
-
- def process(self):
- for child in self.node.children:
- self.process_node(child)
-
- def process_node(self, node):
- if isinstance(node, moduleparser.Docstring):
- self.parts.append(node.text)
- elif isinstance(node, moduleparser.Class):
- self.add_child(Class(node, self.module))
- elif isinstance(node, moduleparser.Function):
- self.add_child(Function(node, self.module))
-
- def documentation(self, context=None):
- if context is None:
- return Document.documentation(self, DocContext())
- newParts = []
- for part in self.parts:
- if type(part) is type(""):
- doc = self.module.substitute(part, self, context)
- newParts.append(doc + "\n")
- continue
- if part.name.startswith('_') \
- and not part.name.startswith('__'):
- continue
- if context.seen(part):
- continue
- doc = part.documentation(context)
- if doc.lower().find(':ignore:') != -1:
- continue
- newParts.append(indent(doc))
- context.setSeen(self)
- return '\n'.join(newParts)
-
-class DocContext:
-
- def __init__(self):
- self.partsSeen = {}
-
- def seen(self, obj):
- return self.partsSeen.has_key(obj)
-
- def setSeen(self, obj):
- self.partsSeen[obj] = 1
-
-class Module(Document):
-
- def __init__(self, filename, text=None):
- self.filename = filename
- if text is None:
- text = open(filename).read()
- self.module_text = text
- self.name = os.path.splitext(os.path.basename(filename))[0]
- node = moduleparser.parse_module(text, filename)
- Document.__init__(self, node, self)
- self.imports = []
- self.subber = InlineSubstitution(self)
- self.process()
-
- def substitute(self, s, currentNode=None, context=None):
- return self.subber.substitute(s, currentNode, context)
-
- def process_node(self, node):
- if isinstance(node, moduleparser.Import):
- self.imports.append((node.names, node.from_name))
- else:
- Document.process_node(self, node)
-
- def documentation(self, context=None):
- return "%s\n%s\n\n%s" % \
- (self.name,
- "=" * len(self.name),
- Document.documentation(self, context=None))
-
- def importText(self, im):
- if im[1]:
- return 'from %s import %s' % (im[1], im[0])
- else:
- return 'import %s' % im[0]
-
-class InlineSubstitution:
-
- def __init__(self, rootNode):
- self.rootNode = rootNode
-
- _inlineRE = re.compile(r'( *).. +inline:: *(.*)')
- _inlineAllRE = re.compile(r'( *).. +inline-all:: *')
- _ignoreRE = re.compile(r'( *).. ignore:: *(.*)\n?')
-
- def substitute(self, s, currentNode=None, context=None):
- if currentNode is None:
- currentNode = self.rootNode
- s = self._ignoreRE.sub(
- lambda m, cur=currentNode, con=context, : self._ignoreSubber(m, cur, con),
- s)
- s = self._inlineRE.sub(
- lambda m, cur=currentNode, con=context: self._inlineSubber(m, cur, con),
- s)
- s = self._inlineAllRE.sub(
- lambda m, cur=currentNode, con=context: self._inlineAllSubber(m, cur, con),
- s)
- return s
-
- def _inlineSubber(self, match, currentNode, context):
- level = len(match.group(1))
- name = match.group(2).strip().split('.')
- child = self._getChild(name, currentNode)
- return indent(self.substitute(child.documentation(context), child), level)
-
- def _ignoreSubber(self, match, currentNode, context):
- name = match.group(2).strip().split('.')
- child = self._getChild(name, currentNode)
- context.setSeen(child)
- return ''
-
- def _getChild(self, name, currentNode):
- nameList = name
- obj = currentNode
- while 1:
- if not nameList:
- return obj
- if not obj.children.has_key(nameList[0]):
- if currentNode is self.rootNode:
- raise NameError, '%s not found' % '.'.join(name)
- else:
- return self._getChild(name, self.rootNode)
- obj = obj.children[nameList[0]]
- nameList = nameList[1:]
-
- def _inlineAllSubber(self, match, currentNode, context):
- level = len(match.group(1))
- children = currentNode.children.keys()
- children.sort()
- children = [currentNode.children[name] for name in children]
- allDocs = []
- for child in children:
- if child.name.startswith('_'):
- continue
- doc = child.documentation(context)
- if doc.lower().find(':ignore:') != -1:
- continue
- allDocs.append(self.substitute(doc, child))
- return indent('\n'.join(allDocs), level)
-
-
-
-class Function(Document):
-
- def __init__(self, node, module):
- Document.__init__(self, node, module)
- self.name = node.name
- self.parameters = []
- self.process()
-
- def process_node(self, node):
- if isinstance(node, moduleparser.ParameterList):
- for parameter in node.children:
- self.process_parameter(parameter)
- else:
- Document.process_node(self, node)
-
- def process_parameter(self, param):
- ## @@: handle defaults, *args, etc.
- if param.name == 'self':
- return
- if param.children:
- val = ('default', (param.name, param.children[0].text))
- elif isinstance(param, moduleparser.ExcessPositionalArguments):
- val = ('*', param.name)
- elif isinstance(param, moduleparser.ExcessKeywordArguments):
- val = ('**', param.name)
- else:
- val = ('normal', param.name)
- self.parameters.append(val)
-
- def documentation(self, context):
- d = "`%s(%s)`:\n" % (self.name,
- ', '.join([self.parameterText(p)
- for p in self.parameters]))
- doc = Document.documentation(self, context)
- if not doc:
- doc = "Not documented."
- return d + indent(doc) + "\n"
-
- def parameterText(self, param):
- t, name = param
- if t == 'normal':
- return name
- elif t == 'default':
- return '%s=%s' % (name[0], name[1])
- elif t == '*':
- return '*%s' % name
- elif t == '**':
- return '**%s' % name
- else:
- assert 0
-
-class Class(Document):
-
- def __init__(self, node, module):
- Document.__init__(self, node, module)
- self.bases = []
- self.name = node.name
- for attr, value in node.attlist():
- if attr == 'bases':
- self.bases = value
- self.process()
-
- def documentation(self, context):
- if self.bases:
- base = 'class `%s(%s)`:' % (self.name, self.bases)
- else:
- base = 'class `%s`:' % self.name
- return base + "\n" + indent(Document.documentation(self, context))
-
-
-def indent(text, amount=4):
- return '\n'.join([(' '*amount) + line for line in text.split('\n')])
-
-def create_documentation(filename, output):
- if type(output) is type(""):
- output = open(output, 'w')
- mod = Module(filename)
- doc = mod.documentation()
- if doc.lower().find(':ignore:') == -1:
- output.write(mod.documentation())
-
-########################################
-## Command-line interface
-########################################
-
-def main(options, args):
- for arg in args:
- if os.path.isdir(arg) and options.recurse:
- main(options, [os.path.join(arg, f) for f in os.listdir(arg)])
- continue
- if options.recurse and not arg.endswith('.py'):
- continue
- filename = os.path.splitext(arg)[0] + ".txt"
- filename = os.path.join(options.output, filename)
- filename = os.path.normpath(filename)
- if not options.quiet:
- sys.stdout.write('%s -> %s ...' % (os.path.normpath(arg),
- filename))
- sys.stdout.flush()
- create_documentation(arg, filename)
- if not options.quiet:
- sys.stdout.write('done.\n')
- sys.stdout.flush()
-
-if __name__ == '__main__':
- try:
- from optparse import OptionParser
- except ImportError:
- from optik import OptionParser
- parser = OptionParser()
- parser.add_option('-r', '--recurse',
- action="store_true",
- dest="recurse",
- default=0,
- help="recurse into subdirectories")
- parser.add_option('-o', '--output',
- dest="output",
- help="write documentation to FILE (or directory)",
- metavar="FILE")
- parser.add_option('-q', '--quiet',
- dest="quiet",
- default=0,
- action="store_true",
- help="be quiet")
- (options, args) = parser.parse_args()
- if len(args) == 1 and options.output \
- and not os.path.isdir(options.output):
- if options.output == '-':
- options.output = sys.stdout
- create_documentation(args[0], options.output)
- else:
- if not options.output:
- options.output = '.'
- main(options, args)
-
-
-
diff --git a/sandbox/ianb/wiki/Wiki.py b/sandbox/ianb/wiki/Wiki.py
deleted file mode 100644
index 1c90cfa99..000000000
--- a/sandbox/ianb/wiki/Wiki.py
+++ /dev/null
@@ -1,251 +0,0 @@
-"""
-The Wiki module primarily exports the `WikiPage` class:
-"""
-
-import os, re, time
-from docutils import core, io
-from docutils import readers
-
-__all__ = ['WikiPage', 'allPages', 'recentPages',
- 'searchTitles', 'search', 'css']
-
-## All the Wiki pages will be kept in this directory:
-pageDir = '/usr/home/ianb/w/pypaper/pages/'
-
-class WikiPage(object):
- """
- WikiPage is a class to represent one page in a WikiWikiWeb [#]_.
- The page may or may not yet exist -- that is, it may not yet
- have content.
-
- .. [#] http://c2.com/cgi-bin/wiki
-
- It has the following properties and methods:
-
- `html`:
- A read-only property giving the HTML for the page.
- If the page does not yet have content the text
- ``"This page has not yet been created"`` is returned.
- `text`:
- The text for the page. To save new text, simply
- assign to this property.
- `title`:
- The title of the page.
- `name`:
- The name of the page -- a canonical identifier.
- Related to the title, but not necessarily the
- same.
- .. ignore: html
- .. ignore: text
- .. ignore: setText
- .. ignore: title
-
- """
-
- def __init__(self, pageName):
- """
- Each page has a name, which is a unique identifier, for example
- ``"FrontPage"``, which identifies the page in the URL and
- for linking.
- """
- self.name = pageName
-
- def basePath(self):
- """
- :Ignore: yes
- Returns the base path (sans extension) for this page
- """
- return _basePath(self.name)
-
- basePath = property(basePath)
-
- def exists(self):
- """Does this page have content yet?"""
- return _exists(self.name)
-
- def html(self):
- """Returns text of HTML for page (HTML fragment only)"""
- if self.exists():
- html = open(self.basePath + ".html").read()
- html = self._subWikiLinks(html)
- return html
- else:
- return 'This page has not yet been created.'
-
- html = property(html)
-
- def preview(self, text):
- """Returns an HTML preview of the text"""
- return self._subWikiLinks(self._convertText(text))
-
- _wikiLinkRE = re.compile(r'(<a [^>]* href=")!(.*?)("[^>]*>)(.*?)(</a>)',
- re.I+re.S)
-
- def _subWikiLinks(self, text):
- return self._wikiLinkRE.sub(self._subLink, ' %s ' % text)
-
- def _subLink(self, match):
- if _exists(match.group(2)):
- return match.group(1) + match.group(2) + match.group(3) + match.group(4) + match.group(5)
- else:
- return '<span class="nowiki">%s%s%s%s?%s</span>' \
- % (match.group(4), match.group(1), match.group(2),
- match.group(3), match.group(5))
-
- def text(self):
- """
- The text of the page. ReStructuredText is used, though the
- parsing is internal to the module. You can assign to this
- property to save new text for the page.
- """
- if self.exists():
- return open(self.basePath + ".txt").read()
- else:
- return ''
-
- def setText(self, text):
- """Sets the text for the page (and updates cached HTML at the
- same time)"""
- f = open(self.basePath + ".txt", 'w')
- f.write(text)
- f.close()
- f = open(self.basePath + ".html", 'w')
- f.write(self._convertText(text))
- f.close()
-
- def _convertText(self, text):
- return self._cleanHTML(core.publish_string(
- source=text,
- reader=Reader(),
- parser_name='restructuredtext',
- writer_name='html'))
-
- def _cleanHTML(self, html):
- return html[html.find('<body>'):html.find('</body>')]
-
- text = property(text, setText)
-
- def searchMatches(self, text):
- """
- :Ignore: yes
- """
- return self.searchTitleMatches(text) \
- or self.text().lower().find(text.lower()) != -1
-
- def searchTitleMatches(self, text):
- """
- :Ignore: yes
- """
- return self.title().lower().find(text.lower()) != -1
-
- def modifiedDate(self):
- """Date modified (integer timestamp)"""
- return os.stat(self.basePath + ".txt").st_mtime
-
- modifiedDate = property(modifiedDate)
-
- def modifiedDateText(self):
- """Text representation of modified date"""
- return time.strftime("%a %m/%d/%y", time.gmtime(self.modifiedDate()))
-
- modifiedDateText = property(modifiedDateText)
-
- def title(self):
- """Page title"""
- return self.name
-
- title = property(title)
-
-"""
-Methods for searching the wiki pages:
-"""
-
-def allPages():
- """All pages with content in the system"""
- return [WikiPage(page[:-4])
- for page in os.listdir(pageDir)
- if page.endswith('.txt')]
-
-def recentPages():
- """All pages, sorted by date modified, most recent first"""
- pages = allPages()
- pages.sort(lambda a, b: cmp(b.modifiedDate(), a.modifiedDate()))
- return pages
-
-def searchTitles(text):
- """Search page titles for ``text``, returning list of pages"""
- return [page for page in allPages()
- if page.searchTitleMatches(text)]
-
-def search(text):
- """Search titles and bodies of pages for ``text``, returning list
- of pages"""
- return [page for page in allPages()
- if page.searchMatches(text)]
-
-
-def _basePath(name):
- return os.path.join(pageDir, name)
-
-def _exists(name):
- return os.path.exists(_basePath(name) + ".html")
-
-"""
-There is one module global to be printed at the top of
-every Wiki page:
-
- `css`:
- The HTML to put the proper CSS at the top of the page. This
- should be put in the ``<head>`` section of the page.
-"""
-
-try:
- f = open('default.css')
-except IOError:
- css = ""
-else:
- css = '<style type="text/css">\n%s</style>\n' % f.read()
- f.close()
-
-########################################
-## reST-specific stuff
-########################################
-
-
-from docutils import nodes
-from docutils.readers import standalone
-from docutils.transforms import Transform
-
-class WikiLinkResolver(nodes.SparseNodeVisitor):
- ":Ignore: yes"
-
- def visit_reference(self, node):
- if node.resolved or not node.hasattr('refname'):
- return
- refname = node['refname']
- node.resolved = 1
- node['class'] = 'wiki'
- # I put a ! here to distinguish Wiki links from other
- # links -- Wiki links have to be fixed up at view time,
- # to distinguish between dangling and resolved Wiki
- # links.
- node['refuri'] = '!' + refname
- del node['refname']
-
-class WikiLink(Transform):
- ":Ignore: yes"
-
- default_priority = 800
-
- def apply(self):
- visitor = WikiLinkResolver(self.document)
- self.document.walk(visitor)
-
-class Reader(standalone.Reader):
- ":Ignore: yes"
-
- supported = standalone.Reader.supported + ('wiki',)
-
- default_transforms = standalone.Reader.default_transforms \
- + (WikiLink,)
-
diff --git a/sandbox/ianb/wiki/docs/Wiki.txt b/sandbox/ianb/wiki/docs/Wiki.txt
deleted file mode 100644
index c63094529..000000000
--- a/sandbox/ianb/wiki/docs/Wiki.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-Wiki
-====
-
-The Wiki module primarily exports the `WikiPage` class:
-
- class `WikiPage(object)`:
- WikiPage is a class to represent one page in a WikiWikiWeb [#]_.
- The page may or may not yet exist -- that is, it may not yet
- have content.
-
- .. [#] http://c2.com/cgi-bin/wiki
-
- It has the following properties and methods:
-
- `html`:
- A read-only property giving the HTML for the page.
- If the page does not yet have content the text
- ``"This page has not yet been created"`` is returned.
- `text`:
- The text for the page. To save new text, simply
- assign to this property.
- `title`:
- The title of the page.
- `name`:
- The name of the page -- a canonical identifier.
- Related to the title, but not necessarily the
- same.
- `exists()`:
- Does this page have content yet?
- `modifiedDate()`:
- Date modified (integer timestamp)
- `modifiedDateText()`:
- Text representation of modified date
- `preview(text)`:
- Returns an HTML preview of the text
-
-There are also several searching methods:
-
- `allPages()`:
- All pages with content in the system
- `recentPages()`:
- All pages, sorted by date modified, most recent first
- `search(text)`:
- Search titles and bodies of pages for ``text``, returning list
- of pages
- `searchTitles(text)`:
- Search page titles for ``text``, returning list of pages
-
-There is one module global to be printed at the top of
-every Wiki page:
-
- `css`:
- The HTML to put the proper CSS at the top of the page. This
- should be put in the ``<head>`` section of the page. \ No newline at end of file
diff --git a/sandbox/mly/restblog/Makefile b/sandbox/mly/restblog/Makefile
deleted file mode 100755
index d3403e589..000000000
--- a/sandbox/mly/restblog/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-DOCUTILTOOLPATH = /home/mly/palanga/python/docutils/docutils/tools/
-HTML = $(DOCUTILTOOLPATH)html.py
-MAIN_INDEX = ./main_index.py
-DATE_INDEX = ./date_index.py
-SUBJ_INDEX = ./subj_index.py
-KEYW_INDEX = ./keyw_index.py
-
-.SUFFIXES: .html .txt
-
-blogs := $(patsubst %.txt,%.html,$(wildcard *.txt))
-
-all: $(blogs) index.html date_index.html subject_index.html keyword_index.html
-
-index.html: $(blogs)
- $(MAIN_INDEX)
-
-date_index.html: $(blogs)
- $(DATE_INDEX)
-
-subject_index.html: $(blogs)
- $(SUBJ_INDEX)
-
-keyword_index.html: $(blogs)
- $(KEYW_INDEX)
-
-# --trim-footnote-reference-space ersätter --snap... och funkar även i
-# HTML
-
-.txt.html:
- $(HTML) -len -o iso-8859-1 $< > $@
-
-install:
- scp *.html default.css thinkwar@thinkware.se:/home/t/thinkwar/www/home/magnus/blog/
-
-clean:
- rm *~ *.html
diff --git a/sandbox/mly/restblog/README.txt b/sandbox/mly/restblog/README.txt
deleted file mode 100755
index 132c2272c..000000000
--- a/sandbox/mly/restblog/README.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This is just a very early start of a web log
-system. No documentation yet. Mail me for more
-info:
-
- magnus@thinkware.se
diff --git a/sandbox/mly/restblog/date_index.py b/sandbox/mly/restblog/date_index.py
deleted file mode 100755
index f430fb08f..000000000
--- a/sandbox/mly/restblog/date_index.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/python -tt
-
-# date_index.py
-#
-# Create chronological index for reStructuredBlog
-#
-# (C) Magnus Lyckå, Thinkware AB, 2003
-
-import glob, restblog
-import cPickle as pickle
-
-IX_FILE_NAME = 'date_index.dat'
-
-try:
- db = pickle.load(file(IX_FILE_NAME))
-except:
- db = {'filenames':[], 'index':[]}
-
-for fn in glob.glob(restblog.source_pattern):
- if not fn in db['filenames']:
- db['filenames'].append(fn)
- meta = restblog.Metadata(fn)
- db['index'].append((meta.timestamp(),
- meta.targetname(),
- meta.subject()))
-db['index'].sort()
-db['index'].reverse()
-pickle.dump(db, file(IX_FILE_NAME, 'w'))
-
-body = ['Index By Date\n--------------------\n\n']
-oldMonthYear = ''
-for ts, fn, subj in db['index']:
- monthYear = ts.strftime('%B %Y')
- if monthYear != oldMonthYear:
- body.append("\n\n%s\n.............................\n\n" % monthYear)
- oldMonthYear = monthYear
- body.append("* `%s %s`__\n\n__ %s\n" % (
- ts.strftime('%Y-%m-%d %H:%M'), subj, fn))
-restblog.makepage('date_index', "\n".join(body))
diff --git a/sandbox/mly/restblog/default.css b/sandbox/mly/restblog/default.css
deleted file mode 100755
index f396362af..000000000
--- a/sandbox/mly/restblog/default.css
+++ /dev/null
@@ -1,43 +0,0 @@
-body {color: #600; background-color: #fed;
- margin-left: 10%; margin-right: 10%;
- text-align: left;
- font-family: Verdana, Arial, sans-serif}
-/*p { text-indent: 2em; margin-top: 0; margin-bottom: 0; }*/
-.title, .subtitle {text-align: center}
-h1, h2, h3, h4, h5, h5 {font-family: Times, Times-New, Serif;}
-pre.address {font-family: Verdana, Arial, sans-serif}
-table{margin-top: 1em; margin-bottom: 1em}
-table.table {text-align: center}
-table.field-list{margin-top: 0.3em; margin-bottom: 0.3em}
-.topic-title {margin-top: 1em}
-tr {text-align: left}
-th {text-align: left}
-td {text-align: left}
-dt {font-weight: bold; margin-top: 0.5em; margin-bottom: 0.2em}
-dd p {margin-top: 0em}
-dl, ol, ul {margin-top: 0.3em}
-blockquote.last {margin-top: 0em}
-.literal-block {color: #006; background-color: #def;
- font-family: courier, monospace}
-.literal {color: #006 ; font-family: courier, monospace}
-.literal-block {margin-left: 10%; margin-right: 10%;
- padding: 1ex}
-div.document {
- float:left;
- width:70%;
- background:#ffe;
- border:2px solid #630;
- margin:5px;
- padding:10px;
-}
-
-hr.footer { float:left; width:0%; height:0%}
-
-div.footer {
- float:right;
- width:20%;
- background:#cfc;
- border:2px solid #630;
- margin:5px;
- padding:10px;
-}
diff --git a/sandbox/mly/restblog/keyw_index.py b/sandbox/mly/restblog/keyw_index.py
deleted file mode 100755
index 34261a721..000000000
--- a/sandbox/mly/restblog/keyw_index.py
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/python
-
-pass
diff --git a/sandbox/mly/restblog/main_index.py b/sandbox/mly/restblog/main_index.py
deleted file mode 100755
index ed1b68cea..000000000
--- a/sandbox/mly/restblog/main_index.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/python -tt
-
-# main_index.py
-#
-# Create main index for reStructuredBlog
-#
-# (C) Magnus Lyckå, Thinkware AB, 2003
-
-import glob, restblog
-import cPickle as pickle
-
-BLOGS_TO_SHOW = 5
-
-db = []
-for fn in glob.glob(restblog.source_pattern):
- meta = restblog.Metadata(fn)
- db.append((meta.timestamp(), fn))
-
-db.sort()
-db.reverse()
-
-name = "Magnus Lyckå's Web Log".decode('latin1')
-body = ['%s\n%s' % (name, '-'*len(name))]
-body.append('*Here are my latest web logs*')
-for ts, fn in db[:5]:
- body.append("-----\n\n*%s*" % ts.strftime('%Y-%m-%d %H:%M'))
- body.append(".. include:: %s" % fn)
-restblog.makepage('index', "\n\n".join(body))
diff --git a/sandbox/mly/restblog/restblog.py b/sandbox/mly/restblog/restblog.py
deleted file mode 100755
index 3c7862de5..000000000
--- a/sandbox/mly/restblog/restblog.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python -tt
-
-# restblog.py
-#
-# Base functions for reStructuredBlog
-#
-# (C) Magnus Lyckå, Thinkware AB, 2003
-import mx.DateTime, locale, os
-locale.setlocale(locale.LC_ALL, 'C') # I want English month names etc
-from docutils.core import publish_string, default_description
-
-source_pattern = 'blog*.txt'
-timestamp_format = '%Y-%m-%d %H:%M'
-
-class Metadata:
- def __init__(self, fn):
- self.fn = fn
-
- def timestamp(self):
- return mx.DateTime.localtime(os.stat(self.fn)[-2])
-
- def subject(self):
- return file(self.fn).readline().strip()
-
- def targetname(self):
- return self.fn[:-3]+'html'
-
-def makepage(fn, text):
- #text = ('<html><head><title>%s</title><head>\n'
- # '<body>%s</body></html>')
- #file(fn+'.html', 'w').write(text % (title, body))
- file(fn+'.html', 'w').write(publish_string(text, writer_name='html'))
diff --git a/sandbox/mly/restblog/subj_index.py b/sandbox/mly/restblog/subj_index.py
deleted file mode 100755
index 34261a721..000000000
--- a/sandbox/mly/restblog/subj_index.py
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/python
-
-pass
diff --git a/sandbox/mwh/README b/sandbox/mwh/README
deleted file mode 100644
index 99910158e..000000000
--- a/sandbox/mwh/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Just the one file at the moment: advopostwriter.py which subclasses
-writers.html4css1.Writer to format reST like I like my advogato entries.
diff --git a/sandbox/mwh/advopostwriter.py b/sandbox/mwh/advopostwriter.py
deleted file mode 100644
index e2f98be0d..000000000
--- a/sandbox/mwh/advopostwriter.py
+++ /dev/null
@@ -1,59 +0,0 @@
-from docutils.writers import html4css1
-from docutils import nodes
-
-class Writer(html4css1.Writer):
- W_init = html4css1.Writer.__init__
- def __init__(self):
- self.W_init()
- self.translator_class = MyHTMLTranslator
-
-def find_visible_child(node, starting_index, direction):
- if direction == "forwards":
- step = 1
- end = len(node)
- else:
- step = -1
- end = -1
- for i in range(starting_index, end, step):
- if not isinstance(node[i], nodes.Invisible):
- return node[i]
- else:
- return None
-
-class MyHTMLTranslator(html4css1.HTMLTranslator):
- def visit_title(self, node):
- self.body.append(self.starttag(node, 'b', '',
- STYLE="font-variant: small-caps"))
- self.context.append('</b>\n')
- def visit_document(self, node):
- pass
- def depart_document(self, node):
- pass
- def visit_paragraph(self, node):
- if isinstance(node.parent, nodes.section):
- index = node.parent.index(node)
- prev = find_visible_child(node.parent, index - 1, "backwards")
- if isinstance(prev, nodes.title):
- self.body.append(self.starttag(node, 'blockquote', '\n'))
- else:
- self.body.append('<p>\n')
- else:
- html4css1.HTMLTranslator.visit_paragraph(self, node)
-
- def depart_paragraph(self, node):
- if isinstance(node.parent, nodes.section):
- index = node.parent.index(node)
- next = find_visible_child(node.parent, index + 1, "forwards")
- if not next:
- self.body.append('\n</blockquote>\n')
- else:
- self.body.append("\n");
- else:
- # this tends to include "</p>"s which advogato then
- # discards. I don't care that much...
- html4css1.HTMLTranslator.depart_paragraph(self, node)
-
- def visit_section(self, node):
- pass
- def depart_section(self, node):
- pass
diff --git a/sandbox/oliverr/docbook/README.txt b/sandbox/oliverr/docbook/README.txt
deleted file mode 100644
index 33603c848..000000000
--- a/sandbox/oliverr/docbook/README.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-2002-06-24
-
-A DocBook writer for Docutils.
-
-It works okay so far, but still needs a bunch of work.
-
-The main missing pieces are bibliography elements, footnotes,
-and citations.
-
-See docbook.py for more information.
-
-Ollie Rutherfurd
-oliver@rutherfurd.net
-
diff --git a/sandbox/oliverr/docbook/rst2docbook.py b/sandbox/oliverr/docbook/rst2docbook.py
deleted file mode 100644
index 75699c8c9..000000000
--- a/sandbox/oliverr/docbook/rst2docbook.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-# Author: Ollie Rutherfurd
-# Contact: oliver@rutherfurd.net
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-"""
-A minimal front end to the Docutils Publisher, producing DocBook XML.
-"""
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-
-
-description = ('Generates DocBook XML documents from standalone reStructuredText '
- 'sources. ' + default_description)
-
-publish_cmdline(writer_name='docbook', description=description)
-
-
-# :indentSize=4:lineSeparator=\n:noTabs=true:tabSize=4:
diff --git a/sandbox/oliverr/docbook/setup.py b/sandbox/oliverr/docbook/setup.py
deleted file mode 100644
index 2e57dc93d..000000000
--- a/sandbox/oliverr/docbook/setup.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-from distutils.core import setup
-
-def do_setup():
- dist = setup(
- name='docbook-xml-writer',
- description='A DocBook XML Writer for Docutils',
- url='http://docutils.sourceforg.net/sandbox/oliverr/docbook/',
- version='0.1',
- author='Ollie Rutherfurd',
- author_email='oliver@rutherfurd.net',
- license='Public Domain',
- packages=['docutils.writers'],
- package_dir={'docutils.writers':'writer'},
- scripts=['rst2docbook.py']
- )
- return dist
-
-
-if __name__ == '__main__':
- do_setup()
-
-#:indentSize=4:lineSeparator=\n:maxLineLen=76:noTabs=true:tabSize=4:wrap=hard:
diff --git a/sandbox/oliverr/docbook/writer/docbook.py b/sandbox/oliverr/docbook/writer/docbook.py
deleted file mode 100644
index a7e3e5dda..000000000
--- a/sandbox/oliverr/docbook/writer/docbook.py
+++ /dev/null
@@ -1,1046 +0,0 @@
-#!/usr/bin/env python
-
-"""
-:Author: Ollie Rutherfurd
-:Contact: oliver@rutherfurd.net
-:Revision: $Revision$
-:Date: $Date$
-:Copyright: This module has been placed in the public domain.
-
-DocBook document tree Writer.
-
-This Writer converts a reST document tree to a subset
-of DocBook.
-
-.. Note:: This is an unfinished work in progress.
-
-Document Types
-==============
-
-This writer can create 3 types of DocBook documents:
-
-1. "article" *(default)*
-2. "book"
-3. "chapter"
-
-.. Note:: When creating a "book" document, all first-level
- sections are output as "chapter" elements instead
- of "section" as in "article" and "chapter".
-
-Mappings
-========
-
-Option List
------------
-
-As there is no direct equivlent for a listing of program options
-in DocBook_, as defined in reST_, a table containing the
-option list contents is generated.
-
-Field List
-----------
-
-Like `Option List`_, there is not direct equivlent for
-a Field List in DocBook, so this is done using a
-"variablelist".
-
-.. NOTE:: It might be better to switch Definition List
- to glossary or something similar, so Field List
- and Definition List are generating the same type
- of output.
-
-Bibliography Elements
----------------------
-
-Here's how reST's bibliography elements are mapped
-to DocBook elements:
-
-+--------------+---------------------------------------------+
-| reST Element | DocBook Element |
-+==============+=============================================+
-| author | {doctype}info/author/othername |
-| | or |
-| | {doctype}info/authorgroup/author/othername |
-| | if nested under ``authors`` |
-+--------------+---------------------------------------------+
-| authors | {doctype}info/authorgroup/ |
-+--------------+---------------------------------------------+
-| contact | {doctype}info/author/email |
-+--------------+---------------------------------------------+
-| copyright | {doctype}info/legalnotice |
-+--------------+---------------------------------------------+
-| date | {doctype}info/date |
-+--------------+---------------------------------------------+
-| organization | {doctype}info/orgname |
-+--------------+---------------------------------------------+
-| revision | concatenated with ``version`` into |
-| | {doctype}info/edition |
-+--------------+---------------------------------------------+
-| status | {doctype}info/releaseinfo |
-+--------------+---------------------------------------------+
-| version | concatenated with ``revision`` into |
-| | {doctype}info/edition |
-+--------------+---------------------------------------------+
-
-Note: ``{doctype}`` is the type of the DocBook document
-being generated, one of the following: ``article``,
-``book``, or ``chapter``.
-
-Todo
-====
-
-- Inline images -- need to figure out how to identify an inline image
-- list item marks are not guarenteed to be what was specified (if they
- are it is be coincidence, however unless one starts out of order
- they should match most of the time).
-- sidebar subtitle needs to go into sidebarinfo
-
-Should para, note, etc... not in a section at the start
-of the document be stuffed into an untitled ``section``?
-
-"""
-
-__docformat__ = 'reStructuredText'
-
-import re
-import string
-from docutils import writers, nodes, languages
-from types import ListType
-
-class Writer(writers.Writer):
-
- settings_spec = (
- 'DocBook-Specific Options',
- None,
- (('Set DocBook document type. '
- 'Choices are "article", "book", and "chapter". '
- 'Default is "article".',
- ['--doctype'],
- {'default': 'article',
- 'metavar': '<name>',
- 'type': 'choice',
- 'choices': ('article', 'book', 'chapter',)
- }
- ),
- )
- )
-
- output = None
- """Final translated form of `document`."""
-
- def translate(self):
- visitor = DocBookTranslator(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
-
-
-class DocBookTranslator(nodes.NodeVisitor):
-
- XML_DECL = '<?xml version="1.0" encoding="%s"?>\n'
-
- DOCTYPE_DECL = """<!DOCTYPE %s
- PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.0/docbookx.dtd">\n"""
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.language = languages.get_language(
- document.settings.language_code)
- self.doctype = document.settings.doctype
- self.doc_header = [
- self.XML_DECL % (document.settings.output_encoding,),
- self.DOCTYPE_DECL % (self.doctype,),
- '<%s>\n' % (self.doctype,),
- ]
- self.doc_footer = [
- '</%s>\n' % (self.doctype,)
- ]
- self.body = []
- self.section = 0
- self.context = []
- self.colnames = []
- self.footnotes = {}
- self.footnote_map = {}
- self.docinfo = []
-
- def astext(self):
- return ''.join(self.doc_header
- + self.docinfo
- + self.body
- + self.doc_footer)
-
- def encode(self, text):
- """Encode special characters in `text` & return."""
- # @@@ A codec to do these and all other
- # HTML entities would be nice.
- text = text.replace("&", "&amp;")
- text = text.replace("<", "&lt;")
- text = text.replace('"', "&quot;")
- text = text.replace(">", "&gt;")
- return text
-
- def rearrange_footnotes(self):
- """
- Replaces ``foonote_reference`` placeholders with
- ``footnote`` element content as DocBook and reST
- handle footnotes differently.
-
- DocBook defines footnotes inline, whereas they
- may be anywere in reST. This function replaces the
- first instance of a ``footnote_reference`` with
- the ``footnote`` element itself, and later
- references of the same a footnote with
- ``footnoteref`` elements.
- """
- for (footnote_id,refs) in self.footnote_map.items():
- ref_id, context, pos = refs[0]
- context[pos] = ''.join(self.footnotes[footnote_id])
- for ref_id, context, pos in refs[1:]:
- context[pos] = '<footnoteref linkend="%s"/>' \
- % (footnote_id,)
-
- def attval(self, text,
- transtable=string.maketrans('\n\r\t\v\f', ' ')):
- """Cleanse, encode, and return attribute value text."""
- return self.encode(text.translate(transtable))
-
- def starttag(self, node, tagname, suffix='\n', infix='', **attributes):
- """
- Construct and return a start tag given a node
- (id & class attributes are extracted), tag name,
- and optional attributes.
- """
- atts = {}
- for (name, value) in attributes.items():
- atts[name.lower()] = value
-
- for att in ('id',): # node attribute overrides
- if node.has_key(att):
- atts[att] = node[att]
-
- attlist = atts.items()
- attlist.sort()
- parts = [tagname.lower()]
- for name, value in attlist:
- if value is None: # boolean attribute
- # According to the HTML spec, ``<element boolean>`` is good,
- # ``<element boolean="boolean">`` is bad.
- # (But the XHTML (XML) spec says the opposite. <sigh>)
- parts.append(name.lower())
- elif isinstance(value, ListType):
- values = [str(v) for v in value]
- parts.append('%s="%s"' % (name.lower(),
- self.attval(' '.join(values))))
- else:
- parts.append('%s="%s"' % (name.lower(),
- self.attval(str(value))))
- return '<%s%s>%s' % (' '.join(parts), infix, suffix)
-
- def emptytag(self, node, tagname, suffix='\n', **attributes):
- """Construct and return an XML-compatible empty tag."""
- return self.starttag(node, tagname, suffix, infix=' /', **attributes)
-
- def visit_Text(self, node):
- self.body.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
- def visit_attention(self, node):
- self.body.append(self.starttag(node, 'note'))
- self.body.append('\n<title>%s</title>\n'
- % (self.language.labels[node.tagname],))
-
- def depart_attention(self, node):
- self.body.append('</note>\n')
-
- # author is handled in ``visit_docinfo()``
- def visit_author(self, node):
- raise nodes.SkipNode
-
- # authors is handled in ``visit_docinfo()``
- def visit_authors(self, node):
- raise nodes.SkipNode
-
- def visit_block_quote(self, node):
- self.body.append(self.starttag(node, 'blockquote'))
-
- def depart_block_quote(self, node):
- self.body.append('</blockquote>\n')
-
- def visit_bullet_list(self, node):
- self.body.append(self.starttag(node, 'itemizedlist'))
-
- def depart_bullet_list(self, node):
- self.body.append('</itemizedlist>\n')
-
- def visit_caption(self, node):
- # NOTE: ideally, this should probably be stuffed into
- # the mediaobject as a "caption" element
- self.body.append(self.starttag(node, 'para'))
-
- def depart_caption(self, node):
- self.body.append('</para>')
-
- def visit_caution(self, node):
- self.body.append(self.starttag(node, 'caution'))
- self.body.append('\n<title>%s</title>\n'
- % (self.language.labels[node.tagname],))
-
- def depart_caution(self, node):
- self.body.append('</caution>\n')
-
- # reST seems to handle citations as a labled
- # footnotes, whereas DocBook doesn't from what
- # I can tell, so I'm not sure how to give DocBook
- # citations that result in equivlent output
- # as the docutils html writer.
- #
- # Currently, citations are handled as footnotes,
- # using the citation label as the footnote label
- # which seems functionally equivlent, but the
- # DocBook stylesheets for generating HTML output
- # don't seem to be using the label for foonotes
- # so this doesn't work.
- #
- # So I'm at a bit of a loss as to how to
- # handle citations. Any ideas or suggestions would
- # be welcome.
-
- # TODO: citation
- def visit_citation(self, node):
- self.visit_footnote(node)
-
- def depart_citation(self, node):
- self.depart_footnote(node)
-
- # TODO: citation_reference
- def visit_citation_reference(self, node):
- self.visit_footnote_reference(node)
-
- def depart_citation_reference(self, node):
- pass
-
- def visit_classifier(self, node):
- self.body.append(' : ')
- self.body.append(self.starttag(node, 'type'))
-
- def depart_classifier(self, node):
- self.body.append('</type>\n')
-
- def visit_colspec(self, node):
- self.colnames.append('col_%d' % (len(self.colnames) + 1,))
- atts = {'colname': self.colnames[-1]}
- self.body.append(self.emptytag(node, 'colspec', **atts))
-
- def depart_colspec(self, node):
- pass
-
- def visit_comment(self, node, sub=re.compile('-(?=-)').sub):
- """Escape double-dashes in comment text."""
- self.body.append('<!-- %s -->\n' % sub('- ', node.astext()))
- raise nodes.SkipNode
-
- # contact is handled in ``visit_docinfo()``
- def visit_contact(self, node):
- raise nodes.SkipNode
-
- # copyright is handled in ``visit_docinfo()``
- def visit_copyright(self, node):
- raise nodes.SkipNode
-
- def visit_danger(self, node):
- self.body.append(self.starttag(node, 'caution'))
- self.body.append('\n<title>%s</title>\n'
- % (self.language.labels[node.tagname],))
-
- def depart_danger(self, node):
- self.body.append('</caution>\n')
-
- # date is handled in ``visit_docinfo()``
- def visit_date(self, node):
- raise nodes.SkipNode
-
- # TODO: decoration
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- # "term" is not closed in depart_term
- self.body.append('</term>\n')
- self.body.append(self.starttag(node, 'listitem'))
-
- def depart_definition(self, node):
- self.body.append('</listitem>\n')
-
- def visit_definition_list(self, node):
- self.body.append(self.starttag(node, 'variablelist'))
-
- def depart_definition_list(self, node):
- self.body.append('</variablelist>\n')
-
- def visit_definition_list_item(self, node):
- self.body.append(self.starttag(node, 'varlistentry'))
-
- def depart_definition_list_item(self, node):
- self.body.append('</varlistentry>\n')
-
- def visit_description(self, node):
- self.body.append(self.starttag(node, 'entry'))
-
- def depart_description(self, node):
- self.body.append('</entry>\n')
-
- def visit_docinfo(self, node):
- """
- Collects all docinfo elements for the document.
-
- Since reST's bibliography elements don't map very
- cleanly to DocBook, rather than maintain state and
- check dependencies within the different visitor
- fuctions all processing of bibliography elements
- is dont within this function.
-
- .. NOTE:: Skips processing of all child nodes as
- everything should be collected here.
- """
-
- # XXX There are a number of fields in docinfo elements
- # which don't map nicely to docbook elements and
- # reST allows one to insert arbitrary fields into
- # the header, We need to be able to handle fields
- # which either don't map or nicely or are unexpected.
- # I'm thinking of just using DocBook to display these
- # elements in some sort of tabular format -- but
- # to collecting them is not straight-forward.
- # Paragraphs, links, lists, etc... can all live within
- # the values so we either need a separate visitor
- # to translate these elements, or to maintain state
- # in any possible child elements (not something I
- # want to do).
-
- docinfo = ['<%sinfo>\n' % self.doctype]
-
- authors = []
- author = ''
- contact = ''
- date = ''
- legalnotice = ''
- orgname = ''
- releaseinfo = ''
- revision,version = '',''
-
- for n in node:
- if isinstance(n, nodes.author):
- author = n.astext()
- elif isinstance(n, nodes.authors):
- for a in n:
- authors.append(a.astext())
- elif isinstance(n, nodes.contact):
- contact = n.astext()
- elif isinstance(n, nodes.copyright):
- legalnotice = n.astext()
- elif isinstance(n, nodes.date):
- date = n.astext()
- elif isinstance(n, nodes.organization):
- orgname = n.astext()
- elif isinstance(n, nodes.revision):
- revision = 'Revision ' + n.astext()
- elif isinstance(n, nodes.status):
- releaseinfo = n.astext()
- elif isinstance(n, nodes.version):
- version = 'Version ' + n.astext()
- elif isinstance(n, nodes.field):
- # XXX
- import sys
- print >> sys.stderr, "I don't do 'field' yet"
- # since all child nodes are handled here raise an exception
- # if node is not handled, so it doesn't silently slip through.
- else:
- print dir(n)
- print n.astext()
- raise self.unimplemented_visit(n)
-
- # can only add author if name is present
- # since contact is associate with author, the contact
- # can also only be added if an author name is given.
- if author:
- docinfo.append('<author>\n')
- docinfo.append('<othername>%s</othername>\n' % author)
- if contact:
- docinfo.append('<email>%s</email>\n' % contact)
- docinfo.append('</author>\n')
-
- if authors:
- docinfo.append('<authorgroup>\n')
- for name in authors:
- docinfo.append(
- '<author><othername>%s</othername></author>\n' % name)
- docinfo.append('</authorgroup>\n')
-
- if revision or version:
- edition = version
- if edition and revision:
- edition += ', ' + revision
- elif revision:
- edition = revision
- docinfo.append('<edition>%s</edition>\n' % edition)
-
- if date:
- docinfo.append('<date>%s</date>\n' % date)
-
- if orgname:
- docinfo.append('<orgname>%s</orgname>\n' % orgname)
-
- if releaseinfo:
- docinfo.append('<releaseinfo>%s</releaseinfo>\n' % releaseinfo)
-
- if legalnotice:
- docinfo.append('<legalnotice>\n')
- docinfo.append('<para>%s</para>\n' % legalnotice)
- docinfo.append('</legalnotice>\n')
-
- if len(docinfo) > 1:
- docinfo.append('</%sinfo>\n' % self.doctype)
-
- self.docinfo = docinfo
-
- raise nodes.SkipChildren
-
- def depart_docinfo(self, node):
- pass
-
- def visit_doctest_block(self, node):
- self.body.append('<informalexample>\n')
- self.body.append(self.starttag(node, 'programlisting'))
-
- def depart_doctest_block(self, node):
- self.body.append('</programlisting>\n')
- self.body.append('</informalexample>\n')
-
- def visit_document(self, node):
- pass
-
- def depart_document(self, node):
- self.rearrange_footnotes()
-
- def visit_emphasis(self, node):
- #self.body.append(self.starttag(node, 'emphasis')) # XXX
- self.body.append('<emphasis>')
-
- def depart_emphasis(self, node):
- self.body.append('</emphasis>')
-
- def visit_entry(self, node):
- tagname = 'entry'
- atts = {}
- if node.has_key('morerows'):
- atts['morerows'] = node['morerows']
- if node.has_key('morecols'):
- atts['namest'] = self.colnames[self.entry_level]
- atts['nameend'] = self.colnames[self.entry_level \
- + node['morecols']]
- self.entry_level += 1 # for tracking what namest and nameend are
- self.body.append(self.starttag(node, tagname, '', **atts))
-
- def depart_entry(self, node):
- self.body.append('</entry>\n')
-
- def visit_enumerated_list(self, node):
- # TODO: need to specify "mark" type used for list items
- self.body.append(self.starttag(node, 'orderedlist'))
-
- def depart_enumerated_list(self, node):
- self.body.append('</orderedlist>\n')
-
- def visit_error(self, node):
- self.body.append(self.starttag(node, 'caution'))
- self.body.append('\n<title>%s</title>\n'
- % (self.language.labels[node.tagname],))
-
- def depart_error(self, node):
- self.body.append('</caution>\n')
-
- # TODO: wrap with some element (filename used in DocBook example)
- def visit_field(self, node):
- self.body.append(self.starttag(node, 'varlistentry'))
-
- def depart_field(self, node):
- self.body.append('</varlistentry>\n')
-
- # TODO: see if this should be wrapped with some element
- def visit_field_argument(self, node):
- self.body.append(' ')
-
- def depart_field_argument(self, node):
- pass
-
- def visit_field_body(self, node):
- # NOTE: this requires that a field body always
- # be present, which looks like the case
- # (from docutils.dtd)
- self.body.append(self.context.pop())
- self.body.append(self.starttag(node, 'listitem'))
-
- def depart_field_body(self, node):
- self.body.append('</listitem>\n')
-
- def visit_field_list(self, node):
- self.body.append(self.starttag(node, 'variablelist'))
-
- def depart_field_list(self, node):
- self.body.append('</variablelist>\n')
-
- def visit_field_name(self, node):
- self.body.append(self.starttag(node, 'term'))
- # popped by visit_field_body, so "field_argument" is
- # content within "term"
- self.context.append('</term>\n')
-
- def depart_field_name(self, node):
- pass
-
- def visit_figure(self, node):
- self.body.append(self.starttag(node, 'informalfigure'))
- self.body.append('<blockquote>')
-
- def depart_figure(self, node):
- self.body.append('</blockquote>')
- self.body.append('</informalfigure>\n')
-
- # TODO: footer (this is where 'generated by docutils' arrives)
- # if that's all that will be there, it could map to "colophon"
- def visit_footer(self, node):
- raise nodes.SkipChildren
-
- def depart_footer(self, node):
- pass
-
- def visit_footnote(self, node):
- self.footnotes[node['id']] = []
- atts = {'id': node['id']}
- if isinstance(node[0], nodes.label):
- # FIXME: this fails with the second auto-sequenece character
- # used in the test document ``test.txt``.
- atts['label'] = node[0].astext()
- self.footnotes[node['id']].append(
- self.starttag(node, 'footnote', **atts))
-
- # replace body with this with a footnote collector list
- # which will hold all the contents for this footnote.
- # This needs to be kept separate so it can be used to replace
- # the first ``footnote_reference`` as DocBook defines
- # ``footnote`` elements inline.
- self._body = self.body
- self.body = self.footnotes[node['id']]
-
- def depart_footnote(self, node):
- # finish footnote and then replace footnote collector
- # with real body list.
- self.footnotes[node['id']].append('</footnote>\n')
- self.body = self._body
- self._body = None
-
- def visit_footnote_reference(self, node):
- if node.has_key('refid'):
- refid = node['refid']
- else:
- refid = self.document.nameids[node['refname']]
-
- # going to replace this footnote reference with the actual
- # footnote later on, so store the footnote id to replace
- # this reference with and the list and position to replace it
- # in. Both list and position are stored in case a footnote
- # reference is within a footnote, in which case ``self.body``
- # won't really be ``self.body`` but a footnote collector
- # list.
- refs = self.footnote_map.get(refid, [])
- refs.append((node['id'], self.body, len(self.body),))
- self.footnote_map[refid] = refs
-
- # add place holder list item which should later be
- # replaced with the contents of the footnote element
- # and it's child elements
- self.body.append('<!-- REPLACE WITH FOOTNOTE -->')
-
- raise nodes.SkipNode
-
- # TODO: header
-
- # ??? does anything need to be done for generated?
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_hint(self, node):
- self.body.append(self.starttag(node, 'note'))
- self.body.append('\n<title>%s</title>\n'
- % (self.language.labels[node.tagname],))
-
- def depart_hint(self, node):
- self.body.append('</note>\n')
-
- def visit_image(self, node):
- atts = node.attributes.copy()
- atts['fileref'] = atts['uri']
- alt = None
- del atts['uri']
- if atts.has_key('alt'):
- alt = atts['alt']
- del atts['alt']
- if atts.has_key('height'):
- atts['depth'] = atts['height']
- del atts['height']
- # NOTE: using win32 port of xsltproc and docbook-stylesheets-1.51.1
- # I'm getting the following error when transforming:
- # Error C:\home\igor\src\gnome-xml\xpath.c:8023: Undefined
- # namespace prefix xmlXPathCompiledEval: evaluation failed
- # When I switched to version 1.49 of the docbook-stylesheets
- # I didn't have this problem.
- self.body.append('<mediaobject>')
- self.body.append('<imageobject>')
- self.body.append(self.emptytag(node, 'imagedata', **atts))
- self.body.append('</imageobject>')
- if alt:
- self.body.append('<textobject><phrase>' \
- '%s</phrase></textobject>\n' % alt)
- self.body.append('</mediaobject>')
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.body.append(self.starttag(node, 'important'))
-
- def depart_important(self, node):
- self.body.append('</important>')
-
- # @@@ Incomplete, pending a proper implementation on the
- # Parser/Reader end.
- def visit_interpreted(self, node):
- self.body.append('<constant>\n')
-
- def depart_interpreted(self, node):
- self.body.append('</constant>\n')
-
- def visit_label(self, node):
- # getting label for "footnote" in ``visit_footnote``
- # because label is an attribute for the ``footnote``
- # element.
- if isinstance(node.parent, nodes.footnote):
- raise nodes.SkipNode
- # TODO: handle citation label
- elif isinstance(node.parent, nodes.citation):
- raise nodes.SkipNode
-
- def depart_label(self, node):
- pass
-
- def visit_legend(self, node):
- # TODO: explain why this is empty....
- pass
-
- def depart_legend(self, node):
- pass
-
- def visit_line_block(self, node):
- self.body.append(self.starttag(node, 'literallayout'))
-
- def depart_line_block(self, node):
- self.body.append('</literallayout>\n')
-
- def visit_list_item(self, node):
- self.body.append(self.starttag(node, 'listitem'))
-
- def depart_list_item(self, node):
- self.body.append('</listitem>\n')
-
- def visit_literal(self, node):
- self.body.append('<literal>')
-
- def depart_literal(self, node):
- self.body.append('</literal>')
-
- def visit_literal_block(self, node):
- self.body.append(self.starttag(node, 'programlisting'))
-
- def depart_literal_block(self, node):
- self.body.append('</programlisting>\n')
-
- def visit_note(self, node):
- self.body.append(self.starttag(node, 'note'))
- self.body.append('\n<title>%s</title>\n'
- % (self.language.labels[node.tagname],))
-
- def depart_note(self, node):
- self.body.append('</note>\n')
-
- def visit_option(self, node):
- self.body.append(self.starttag(node, 'command'))
- if self.context[-1]:
- self.body.append(', ')
-
- def depart_option(self, node):
- self.context[-1] += 1
- self.body.append('</command>')
-
- def visit_option_argument(self, node):
- self.body.append(node.get('delimiter', ' '))
- self.body.append(self.starttag(node, 'replaceable', ''))
-
- def depart_option_argument(self, node):
- self.body.append('</replaceable>')
-
- def visit_option_group(self, node):
- self.body.append(self.starttag(node, 'entry'))
- self.context.append(0)
-
- def depart_option_group(self, node):
- self.context.pop()
- self.body.append('</entry>\n')
-
- def visit_option_list(self, node):
- self.body.append(self.starttag(node, 'informaltable', frame='all'))
- self.body.append('<tgroup cols="2">\n')
- self.body.append('<colspec colname="option_col"/>\n')
- self.body.append('<colspec colname="description_col"/>\n')
- self.body.append('<thead>\n')
- self.body.append('<row>\n')
- # FIXME: shouldn't hardcode everything...
- self.body.append('<entry align="center">Option</entry>\n')
- self.body.append('<entry align="center">Description</entry>\n')
- self.body.append('</row>\n')
- self.body.append('</thead>\n')
- self.body.append('<tbody>\n')
-
- def depart_option_list(self, node):
- self.body.append('</tbody>')
- self.body.append('</tgroup>\n')
- self.body.append('</informaltable>\n')
-
- def visit_option_list_item(self, node):
- self.body.append(self.starttag(node, 'row'))
-
- def depart_option_list_item(self, node):
- self.body.append('</row>\n')
-
- def visit_option_string(self, node):
- pass
-
- def depart_option_string(self, node):
- pass
-
- # organization is handled in ``visit_docinfo()``
- def visit_organization(self, node):
- raise nodes.SkipNode
-
- def visit_paragraph(self, node):
- self.body.append(self.starttag(node, 'para', ''))
-
- def depart_paragraph(self, node):
- self.body.append('</para>\n')
-
- # TODO: problematic
- visit_problematic = depart_problematic = lambda self, node: None
-
- def visit_raw(self, node):
- if node.has_key('format') and node['format'] == 'docbook':
- self.body.append(node.astext())
- raise node.SkipNode
-
- def visit_reference(self, node):
- atts = {}
- if node.has_key('refuri'):
- atts['url'] = node['refuri']
- self.context.append('ulink')
- elif node.has_key('refid'):
- atts['linkend'] = node['refid']
- self.context.append('link')
- elif node.has_key('refname'):
- atts['linkend'] = self.document.nameids[node['refname']]
- self.context.append('link')
- self.body.append(self.starttag(node, self.context[-1], '', **atts))
-
- def depart_reference(self, node):
- self.body.append('</%s>' % (self.context.pop(),))
-
- # revision is handled in ``visit_docinfo()``
- def visit_revision(self, node):
- raise nodes.SkipNode
-
- def visit_row(self, node):
- self.entry_level = 0
- self.body.append(self.starttag(node, 'row'))
-
- def depart_row(self, node):
- self.body.append('</row>\n')
-
- def visit_section(self, node):
- if self.section == 0 and self.doctype == 'book':
- self.body.append(self.starttag(node, 'chapter'))
- else:
- self.body.append(self.starttag(node, 'section'))
- self.section += 1
-
- def depart_section(self, node):
- self.section -= 1
- if self.section == 0 and self.doctype == 'book':
- self.body.append('</chapter>\n')
- else:
- self.body.append('</section>\n')
-
- def visit_sidebar(self, node):
- self.body.append(self.starttag(node, 'sidebar'))
-
- def depart_sidebar(self, node):
- self.body.append('</sidebar>\n')
-
- # author is handled in ``visit_docinfo()``
- def visit_status(self, node):
- raise nodes.SkipNode
-
- def visit_strong(self, node):
- # self.body.append(self.starttag(node, 'emphasis', role='strong')) # XXX
- self.body.append('<emphasis role="strong">')
-
- def depart_strong(self, node):
- self.body.append('</emphasis>')
-
- def visit_substitution_definition(self, node):
- raise nodes.SkipNode
-
- def visit_substitution_reference(self, node):
- self.unimplemented_visit(node)
-
- def visit_subtitle(self, node):
- self.body.append(self.starttag(node, 'subtitle'))
-
- def depart_subtitle(self, node):
- self.body.append('</subtitle>\n')
- if isinstance(node.parent, nodes.sidebar):
- self.body.append('</sidebarinfo>\n')
-
- # TODO: system_message
- visit_system_message = depart_system_message = lambda self, node: None
-
- def visit_table(self, node):
- self.body.append(
- self.starttag(node, 'informaltable', frame='all')
- )
-
- def depart_table(self, node):
- self.body.append('</informaltable>\n')
-
- # TODO: target
- visit_target = depart_target = lambda self,node: None
-
- def visit_tbody(self, node):
- self.body.append(self.starttag(node, 'tbody'))
-
- def depart_tbody(self, node):
- self.body.append('</tbody>\n')
-
- def visit_term(self, node):
- self.body.append(self.starttag(node, 'term'))
- self.body.append('<varname>')
-
- def depart_term(self, node):
- # Leave the end tag "term" to ``visit_definition()``,
- # in case there's a classifier.
- self.body.append('</varname>')
-
- def visit_tgroup(self, node):
- self.colnames = []
- atts = {'cols': node['cols']}
- self.body.append(self.starttag(node, 'tgroup', **atts))
-
- def depart_tgroup(self, node):
- self.body.append('</tgroup>\n')
-
- def visit_thead(self, node):
- self.body.append(self.starttag(node, 'thead'))
-
- def depart_thead(self, node):
- self.body.append('</thead>\n')
-
- def visit_tip(self, node):
- self.body.append(self.starttag(node, 'tip'))
-
- def depart_tip(self, node):
- self.body.append('</tip>\n')
-
- def visit_title(self, node):
- # HACK: sidebar subtitle needs to go into sidebarinfo
- # so it's easier to put the title in there too
- if isinstance(node.parent, nodes.sidebar):
- if isinstance(node.parent.children[1], nodes.subtitle):
- self.body.append('<sidebarinfo>')
- self.body.append(self.starttag(node, 'title', ''))
-
- def depart_title(self, node):
- self.body.append('</title>\n')
-
- # XXX just a hack for now
- def visit_title_reference(self, node):
- #self.body.append(self.starttag(node, 'emphasis')) # XXX
- self.body.append('<emphasis>')
-
- # XXX just a hack for now
- def depart_title_reference(self, node):
- self.body.append('</emphasis>')
-
- def visit_topic(self, node):
- # TODO: map dedication to dedication
-
- # Table of Contents generation handled by DocBook
- if node.get('class') == 'contents':
- raise nodes.SkipChildren
- elif node.get('class') == 'abstract':
- self.body.append(self.starttag(node, 'abstract'))
- self.context.append('abstract')
- # generic "topic" element
- # XXX I don't really know what else to do with it.
- elif node.get('class','') == '':
- self.body.append(self.starttag(node, 'section'))
- self.context.append('section')
- else:
- # XXX debug code
- print 'class:', node.get('class')
- print node.__class__.__name__
- print node
- print `node`
- print dir(node)
- self.unimplemented_visit(node)
-
- def depart_topic(self, node):
- if len(self.context):
- self.body.append('</%s>\n' % (self.context.pop(),))
-
- # QUESTION: what to do for "transition"?
- def visit_transition(self, node):
- pass
-
- def depart_transition(self, node):
- pass
-
- # author is handled in ``visit_docinfo()``
- def visit_version(self, node):
- raise nodes.SkipNode
-
- def visit_warning(self, node):
- self.body.append(self.starttag(node, 'warning'))
-
- def depart_warning(self, node):
- self.body.append('</warning>\n')
-
- def unimplemented_visit(self, node):
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
-
-# :collapseFolds=0:folding=sidekick:indentSize=4:
-# :lineSeparator=\n:noTabs=true:tabSize=4:
diff --git a/sandbox/oliverr/ht/README.txt b/sandbox/oliverr/ht/README.txt
deleted file mode 100644
index 96dacfedb..000000000
--- a/sandbox/oliverr/ht/README.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-=================
-.ht Writer README
-=================
-
-:Date: $Date$
-
-This writer generates an .ht (HTML Template) file from reST for
-consumption by ht2html_.
-
-* `hthtml.py <hthtml.py>`_ is the Writer.
-* `rst2ht.py <rst2ht.py>`_ is the front end script.
-
-Written by Ollie Rutherfurd, oliver@rutherfurd.net
-
-See http://www.rutherfurd.net/articles/rst-ht2html.html for information on
-using this writer with ht2html_.
-
-.. _ht2html: http://ht2html.sourceforge.net/
-
-.. :lineSeparator=\n:maxLineLen=76:noTabs=true:tabSize=4:wrap=hard:
diff --git a/sandbox/oliverr/ht/TODO.txt b/sandbox/oliverr/ht/TODO.txt
deleted file mode 100644
index a91834c5f..000000000
--- a/sandbox/oliverr/ht/TODO.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-=========
-TODO List
-=========
-
-:Date: $Date$
-
-* convert all chars > 128 to &#n;?
-* add an option to try to break document to use all of page
- below sections?
-
diff --git a/sandbox/oliverr/ht/hthtml.py b/sandbox/oliverr/ht/hthtml.py
deleted file mode 100644
index 0e09e7eb2..000000000
--- a/sandbox/oliverr/ht/hthtml.py
+++ /dev/null
@@ -1,134 +0,0 @@
-# Author: Ollie Rutherfurd
-# Contact: oliver@rutherfurd.net
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-"""
-Simple .ht (HyperText Template) document tree Writer.
-
-.ht tmeplate files are essentially normal HTML, with
-an option set of RFC 2822-like headers at the top of
-the file. There must be at least one blank line between
-the last header and the start of the body HTML.
-
-See http://ht2html.sf.net/ for more information on
-.ht files and ht2html..
-"""
-
-__docformat__ = 'reStructuredText'
-
-import os
-from docutils import nodes
-from docutils import writers
-from docutils.writers.html4css1 import HTMLTranslator
-
-
-class Writer(writers.Writer):
-
- supported = ('ht',)
- """Formats this writer supports."""
-
- settings_spec = (
- '.ht template-Specific Options',
- None,
- (('Specify base section (i.e. if 3, a top-level section '
- 'would be written as H3, 2nd level H4, etc...). Default is 3.',
- ['--base-section'],
- {'choices': ['1','2','3','4'],
- 'default': '3',
- 'metavar': '<NUMBER>'}),
- ('Specify a stylesheet URL, used verbatim. Default is '
- '"default.css".',
- ['--stylesheet'],
- {'default': 'default.css', 'metavar': '<URL>'}),
- ('Specify a stylesheet file, relative to the current working '
- 'directory. The path is adjusted relative to the output HTML '
- 'file. Overrides --stylesheet.',
- ['--stylesheet-path'],
- {'metavar': '<file>'}),
- ('Format for footnote references: one of "superscript" or '
- '"brackets". Default is "superscript".',
- ['--footnote-references'],
- {'choices': ['superscript', 'brackets'], 'default': 'superscript',
- 'metavar': '<FORMAT>'}),
- ('Remove extra vertical whitespace between items of bullet lists '
- 'and enumerated lists, when list items are "simple" (i.e., all '
- 'items each contain one paragraph and/or one "simple" sublist '
- 'only). Default: enabled.',
- ['--compact-lists'],
- {'default': 1, 'action': 'store_true'}),
- ('Disable compact simple bullet and enumerated lists.',
- ['--no-compact-lists'],
- {'dest': 'compact_lists', 'action': 'store_false'}),))
-
- relative_path_settings = ('stylesheet_path',)
-
- output = None
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = HTTranslator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
- self.stylesheet = visitor.stylesheet
- self.body = visitor.body
-
-
-class HTTranslator(HTMLTranslator):
-
- def __init__(self, document):
-
- # I don't believe we can embed any style content
- # the header, so always link to the stylesheet.
- document.settings.embed_stylesheet = 0
- document.settings.base_section = int(document.settings.base_section)
-
- HTMLTranslator.__init__(self, document)
- # ht2html likes having a title, so add a default one
- self.headers = {'title': 'None'}
- stylesheet = self.get_stylesheet_reference(os.getcwd())
- if stylesheet:
- self.headers['stylesheet']= stylesheet
- # using first author found for .ht 'Author' header
- self.has_author = 0
-
- def astext(self):
- headers = ''.join(['%s: %s\n' % (k,v) \
- for (k,v) in self.headers.items()])
- # kludge! want footer, but not '</body></html>'
- body = self.body_pre_docinfo + self.docinfo + self.body + \
- self.body_suffix[:-1]
-
- return ''.join([headers + '\n'] + body)
-
- def visit_author(self, node):
- if not self.headers.has_key('author'):
- self.headers['author'] = self.encode(node.astext())
- HTMLTranslator.visit_author(self, node)
-
- def visit_contact(self, node):
- if not self.headers.has_key('author-email'):
- self.headers['author-email'] = self.encode(node.astext())
- HTMLTranslator.visit_contact(self, node)
-
- def visit_title(self, node):
- """Only 6 section levels are supported by HTML."""
- if isinstance(node.parent, nodes.topic):
- HTMLTranslator.visit_title(self, node)
- elif self.section_level == 0:
- HTMLTranslator.visit_title(self, node)
- # document title
- title = node.astext()
- self.headers['title'] = self.encode(title)
- else:
- # offset section level to account for ``base_section``.
- self.section_level += (self.settings.base_section - 1)
- HTMLTranslator.visit_title(self, node)
- self.section_level -= (self.settings.base_section - 1)
-
-
-# :indentSize=4:lineSeparator=\n:noTabs=true:tabSize=4:
diff --git a/sandbox/oliverr/ht/rst2ht.py b/sandbox/oliverr/ht/rst2ht.py
deleted file mode 100644
index 7da7f1c2c..000000000
--- a/sandbox/oliverr/ht/rst2ht.py
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env python
-
-# Author: Ollie Rutherfurd
-# Contact: oliver@rutherfurd.net
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-"""
-A minimal front end to the Docutils Publisher, producing an .ht
-(HTML Template) file.
-"""
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-
-
-description = ('Generates .ht (HTML Template) documents from standalone reStructuredText '
- 'sources. ' + default_description)
-
-publish_cmdline(writer_name='hthtml', description=description)
-
-
-# :indentSize=4:lineSeparator=\n:noTabs=true:tabSize=4:
diff --git a/sandbox/paultremblay/README.txt b/sandbox/paultremblay/README.txt
deleted file mode 100644
index 4fde07092..000000000
--- a/sandbox/paultremblay/README.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-============================
- README: Docutils Extensions
-============================
-
-:Author: Paul Tremblay
-
-:Contact: phthenry@earthlink.net
-
-:Date: $Date$
-
-:Web site: http://docutils.sourceforge.net/
-
-
-
-========
-Overview
-========
-
-This directory contains a number of modules that add functionality to
-docutils.
-
-1. The package docutils_nest adds functionality to docutils. XML authors
- and developers might find it useful. Others will not find it useful.
-
- As its name implies, docutils_nest allows users to add nested inline
- structure to a rst document.
-
- See the README.txt in /docutils_nest.
-
-2. rst_to_docbook
-
- This script has not been written. It will convert rst to docbook,
- using xml tools such as xslt.
-
-
-
diff --git a/sandbox/paultremblay/docutils_nest/README.txt b/sandbox/paultremblay/docutils_nest/README.txt
deleted file mode 100644
index 9908f8bb5..000000000
--- a/sandbox/paultremblay/docutils_nest/README.txt
+++ /dev/null
@@ -1,238 +0,0 @@
-.. WARNING TO PAUL: DON'T EDIT THIS FILE
-
-README: |scriptName|
-^^^^^^^^^^^^^^^^^^^^^
-:Author: Paul Tremblay
-
-:Contact: phthenry@earthlink.net
-
-:Date: $Date$
-
-:Web site: http://docutils.sourceforge.net/
-
-.. contents::
-
-.. |scriptName| replace:: docultils-nest-xml.py
-
-.. |moduleName| replace:: docutils_nest
-
-========
-Overview
-========
-
-The script |scriptName| extends the power of docultils by allowing XML authors
-and developers to include nested inline markup in their documents. While
-docutils allows for infinite nesting on the block level, it limits inline
-markup to one level. The script |scriptName| elminates this shortcomming. An
-XML author could write a document in rst format, and then with |scriptName|
-translate it to robust XML, which he could then further transform to docbook
-or any other form of XML he desired. Any type of XML markup is possible using
-|script_name|.
-
-In addition to allowing for nested markup, |scriptName| allows you to choose
-any type of inline markup you wish.
-
-Because users of docutils expressed differences as to how they wanted to mark
-inline text, |scriptName| allows you to customize the markup.
-
-Quick Example
-=============
-
-You wantd to include a comment with emphasized text in your final XML
-document. You type::
-
- [:comment: Maybe I should include *The Sun Also Rises?*]
-
-
-You then issue the command:
-
-|scriptName| --output my_document.rst
-
-The output is::
-
- <inline arg1 = "comment">Maye I should include <emphasis>The Sun Also
- Rises?</emphasis></inline>
-
-
-Installation
-============
-
-1. Install python. (http://www.python.org)
-
-2. Install the docutils package. (http://docutils.sourceforge.net/)
-
-3. Install the PyXml package. (http://pyxml.sourceforge.net/)
-
-4. Install the |moduleName|. You will need to have cvs installed on
-your machine.
-
- 1. Open a shell. Type
-
- ::
-
- cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/docutils login
-
- When asked for a password, simpy hit return.
-
-
- 2. Download the |moduleName|. Type
-
- ::
-
- cvs -z3
- -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/docutils co
- sandbox/paultremblay
-
- This command will download the directory sandbox/paultremblay to your
- current directory. Change to the directory /sandbox/paultremblay.
-
- 3. Run the configuration script to set the path and location of the configuration file.
-
- ::
-
- python configure.py target = <desired location of configuration file>
-
- If no target is provided (or you choose not to run the configuration file),
- the configuration file will be placed in /etc/|moduleName|.
-
-
- 4. Install the modules in the usual way:
-
- python setup.py build
-
- python setup.py install
-
-
-Use
-===
-
-|scriptName| ``--output <outfile> file.rst``
-
-You *must* specify an output option.
-
-In addition, you can specify any options you would if running docutils-xml.py:
-
-|scriptName| --indents --quiet --output otupt.xml file.rst
-
-
-How to markup your document
-===========================
-
-By default, the nested_inline module uses the following structure to markup text::
-
- [:some-tag test example: text [:nested: more text [text with brackets]]]
-
-This markup gets converted to::
-
- <inline arg1 = "some-tag" arg2 = "test" arg3 = "example">text <inline arg1 =
- "nested" more text [text with brackets]</inline></inline>
-
-You begin inline markup with an opening bracket followed by a colon, with no
- space. You then fill in the arguments by typing in words after the colon. A
- colon marks the end of the beginning tag and begins the text. A closing
- bracket marks the end of the inline text.
-
-Note that you can nest your markup to as many levels as you wish. You can also
-use brackets just as you norally would and not worry that nest_inline will
-confuse regular brackets with text meant to be treated as markup. However, the
-brackets must be matched. Consider this markup:
-
-[:math-formula-containing-closing-bracket: 2x ] ]
-
-You might mean for the first closing bracket to be part of the formula, but
-the nested_inline module will think it marks the end of your inline text. The
-script will produce this output::
-
- <inline arg1 = "math-forumla-containing-closing-bracket">2x</inline><problematic
- description = "solitary closing bracket my produce output you don't want"/>]
-
-In order to overcome this problem, escape the first closing bracket
-with literal markup::
-
- [:math-forumula-containing-closing-bracket: 2x ``]`` ]
-
-Errors
-======
-
-The module nested_inline will not produce invalid XML. If you write a file
-that has the potential to result in ill-formed XML, nested_inline produces an
-error message, along with an error tag. Consider the following document::
-
-
- .. If the script converted the brackets to tag, you would get
-
- .. <emphasis><inline arg1 = "markup">text</emphasis></inline>
-
- *[:markup: text*]
-
-The result is::
-
- <emphasis><problematic descrition = "tagging text would result in ill-formed XML"/>[:markup: text</emphasis>]
-
-Customizing Markup
-==================
-
-The nested_inline module reads from a customization file in order to determine how inline text is marked up. Change this document in order to change how you want to markup your text.
-
-The configuration file takes 6 values:
-
-- start-role: the way to mark the start of a role. The default is ":".
-
-- end-role: the way to mark the end of a role. The default is ":".
-
-- start-group: the way to mark the start of a group. The default is "[".
-
-- end-group: the way to mark the end of a group. The default is "]".
-
-- tag-name: the name of the inline tag. The default is "inline".
-
-- warning: the name of the warning messge for errors. The default is "problematic".
-
-Let's say you wanted to markup your text using parenethesis rather than brackets, and that you wanted your role to go outside of the parenthesis. You want your tag name to be "inline-tag", and your warning to be "warning." Your configuration file would look like this::
-
-
- <configure>
- <start-role string = ':'/>
- <end-role string = ':'/>
- <start-group string = '('/>
- <end-group string = ')'/>
- <place-of-role place = 'outside'/>
- <tag-name name = 'inline-tag'/>
- <warning name = 'warning'/>
- </configure>
-
-You would then markup your text as::
-
- :comment:(This is a comment with *italics*)
-
-The output would be::
-
- <inline-tag arg1 = "comment">This is a comment with <emhasis>italics</emphasis></inline-tag>
-
-Project Files & Directories
-===========================
-
-* README.txt: You're reading it.
-
-*|moduleName|: Contains all the modules for the script to run
-
-*doc: The documentation for the module, including a copy of this
-README.txt.
-
-*scripts: the script |scriptName|.
-
-*test_files: Files to test the script.
-
-
-Getting Help
-============
-
-Contact me.
-
-..
- Local Variables:
- mode: indented-text
- indent-tabs-mode: nil
- sentence-end-double-space: t
- fill-column: 70
- End:
diff --git a/sandbox/paultremblay/docutils_nest/configure.py b/sandbox/paultremblay/docutils_nest/configure.py
deleted file mode 100644
index baa44d3c1..000000000
--- a/sandbox/paultremblay/docutils_nest/configure.py
+++ /dev/null
@@ -1,146 +0,0 @@
-
-# /usr/bin/env python
-
-import sys, os
-import docutils_nest.options_trem
-
-"""
-
-The configuration script gets the target from the command line. It creates a file with the configuration variable, and a short script for the rest of script to be able to read and locate he configuration files.
-
-"""
-
-def configure():
- target = get_target()
- make_var_file(target)
- make_location(target)
-
-def get_target():
- """
- This functions uses a module I wrote to parse options. If no options are
- determined on the command line, the function returnst the default
- /etc/nest_docutis
-
- """
- options_dict = {
- 'target': [1, 't'],
- }
- options_obj = docutils_nest.options_trem.ParseOptions(sys.argv,
- options_dict)
- opt_dict, args = options_obj.parse_options()
- if opt_dict == 0:
- sys.stderr.write('invalid way to run configure:\n'
- 'python configure.py --target <directory of choice>'
- )
- sys.exit(1)
- target = opt_dict.get('target')
- if not target:
- target = default_target()
- return target
-
-def default_target():
- sys.stdout.write('using default /etc for configuration directory\n')
- return '/etc'
-
-def make_var_file(target):
- write_obj = open('var_file', 'w')
- # write_obj.write('[global]\n')
- write_obj.write(target)
- write_obj.close()
-
-def make_location(target):
- write_obj = open('docutils_nest/location.py', 'w')
- write_obj.write(
- """
-def get_location():
- return '%s'
-
-
- """
- % target)
-
-
-if __name__ == '__main__':
- configure()
-
-
-
-
-
-"""
-# /usr/bin/env python
-
-import sys, os
-import options_trem
-
-
-def configure():
- target = get_target()
- change_setup(target)
- change_script(target)
-
-def get_target():
- options_dict = {
- 'target': [1, 't'],
- }
- options_obj = options_trem.ParseOptions(sys.argv,
- options_dict)
- opt_dict, args = options_obj.parse_options()
- if opt_dict == 0:
- sys.stdout.write('Will use the default configuration of /etc/nest_docutils\n')
- return '/etc/docutils_nest'
- target = opt_dict.get('target')
- if not target:
- return '/etc/docutils_nest'
- return target
-
-def change_setup(target):
- read_obj = open('setup.py', 'r')
- write_obj = open('temp', 'w')
- line = 1
- while line:
- line = read_obj.readline()
- index = line.find('data_files=')
- if index > -1:
- write_obj.write('data_files = [("%s", ["data/configure.xml"])],\n' % target)
- else:
- write_obj.write(line)
- read_obj.close()
- write_obj.close()
- read_obj = open('temp', 'r')
- write_obj = open('setup.py', 'w')
- line = 1
- while line:
- line = read_obj.readline()
- write_obj.write(line)
- read_obj.close()
- write_obj.close()
-
-
-def change_script(target):
-
- read_obj = open('docutils_nest/nest_docutils.py', 'r')
- write_obj = open('temp', 'w')
- line = 1
- while line:
- line = read_obj.readline()
- index = line.find('$configure$')
- if index > -1:
- write_obj.write("ext_location = '%s' # $configure$" % \
- target)
- else:
- write_obj.write(line)
- read_obj.close()
- write_obj.close()
- read_obj = open('temp', 'r')
- write_obj = open('docutils_nest/nest_docutils.py', 'w')
- line = 1
- while line:
- line = read_obj.readline()
- write_obj.write(line)
- read_obj.close()
- write_obj.close()
-
-if __name__ == '__main__':
- configure()
-"""
diff --git a/sandbox/paultremblay/docutils_nest/data/configure.xml b/sandbox/paultremblay/docutils_nest/data/configure.xml
deleted file mode 100644
index 9d60fd139..000000000
--- a/sandbox/paultremblay/docutils_nest/data/configure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<configure>
- <start-role string = ':'/>
- <end-role string = ':'/>
- <start-group string = '['/>
- <end-group string = ']'/>
- <place-of-role place = 'inside'/>
- <tag-name name = 'inline'/>
- <warning name = 'problematic'/>
-</configure>
diff --git a/sandbox/paultremblay/docutils_nest/doc/README.txt b/sandbox/paultremblay/docutils_nest/doc/README.txt
deleted file mode 100644
index 6d62f8764..000000000
--- a/sandbox/paultremblay/docutils_nest/doc/README.txt
+++ /dev/null
@@ -1,236 +0,0 @@
-README: |scriptName|
-^^^^^^^^^^^^^^^^^^^^^
-:Author: Paul Tremblay
-
-:Contact: phthenry@earthlink.net
-
-:Date: $Date$
-
-:Web site: http://docutils.sourceforge.net/
-
-.. contents::
-
-.. |scriptName| replace:: docultils-nest-xml.py
-
-.. |moduleName| replace:: docutils_nest
-
-========
-Overview
-========
-
-The script |scriptName| extends the power of docultils by allowing XML authors
-and developers to include nested inline markup in their documents. While
-docutils allows for infinite nesting on the block level, it limits inline
-markup to one level. The script |scriptName| elminates this shortcomming. An
-XML author could write a document in rst format, and then with |scriptName|
-translate it to robust XML, which he could then further transform to docbook
-or any other form of XML he desired. Any type of XML markup is possible using
-|script_name|.
-
-In addition to allowing for nested markup, |scriptName| allows you to choose
-any type of inline markup you wish.
-
-Because users of docutils expressed differences as to how they wanted to mark
-inline text, |scriptName| allows you to customize the markup.
-
-Quick Example
-=============
-
-You wantd to include a comment with emphasized text in your final XML
-document. You type::
-
- [:comment: Maybe I should include *The Sun Also Rises?*]
-
-
-You then issue the command:
-
-|scriptName| --output my_document.rst
-
-The output is::
-
- <inline arg1 = "comment">Maye I should include <emphasis>The Sun Also
- Rises?</emphasis></inline>
-
-
-Installation
-============
-
-1. Install python. (http://www.python.org)
-
-2. Install the docutils package. (http://docutils.sourceforge.net/)
-
-3. Install the PyXml package. (http://pyxml.sourceforge.net/)
-
-4. Install the |moduleName|. You will need to have cvs installed on
-your machine.
-
- 1. Open a shell. Type
-
- ::
-
- cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/docutils login
-
- When asked for a password, simpy hit return.
-
-
- 2. Download the |moduleName|. Type
-
- ::
-
- cvs -z3
- -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/docutils co
- sandbox/paultremblay
-
- This command will download the directory sandbox/paultremblay to your
- current directory. Change to the directory /sandbox/paultremblay.
-
- 3. Run the configuration script to set the path and location of the configuration file.
-
- ::
-
- python configure.py target = <desired location of configuration file>
-
- If no target is provided (or you choose not to run the configuration file),
- the configuration file will be placed in /etc/|moduleName|.
-
-
- 4. Install the modules in the usual way:
-
- python setup.py build
-
- python setup.py install
-
-
-Use
-===
-
-|scriptName| ``--output <outfile> file.rst``
-
-You *must* specify an output option.
-
-In addition, you can specify any options you would if running docutils-xml.py:
-
-|scriptName| --indents --quiet --output otupt.xml file.rst
-
-
-How to markup your document
-===========================
-
-By default, the nested_inline module uses the following structure to markup text::
-
- [:some-tag test example: text [:nested: more text [text with brackets]]]
-
-This markup gets converted to::
-
- <inline arg1 = "some-tag" arg2 = "test" arg3 = "example">text <inline arg1 =
- "nested" more text [text with brackets]</inline></inline>
-
-You begin inline markup with an opening bracket followed by a colon, with no
- space. You then fill in the arguments by typing in words after the colon. A
- colon marks the end of the beginning tag and begins the text. A closing
- bracket marks the end of the inline text.
-
-Note that you can nest your markup to as many levels as you wish. You can also
-use brackets just as you norally would and not worry that nest_inline will
-confuse regular brackets with text meant to be treated as markup. However, the
-brackets must be matched. Consider this markup:
-
-[:math-formula-containing-closing-bracket: 2x ] ]
-
-You might mean for the first closing bracket to be part of the formula, but
-the nested_inline module will think it marks the end of your inline text. The
-script will produce this output::
-
- <inline arg1 = "math-forumla-containing-closing-bracket">2x</inline><problematic
- description = "solitary closing bracket my produce output you don't want"/>]
-
-In order to overcome this problem, escape the first closing bracket
-with literal markup::
-
- [:math-forumula-containing-closing-bracket: 2x ``]`` ]
-
-Errors
-======
-
-The module nested_inline will not produce invalid XML. If you write a file
-that has the potential to result in ill-formed XML, nested_inline produces an
-error message, along with an error tag. Consider the following document::
-
-
- .. If the script converted the brackets to tag, you would get
-
- .. <emphasis><inline arg1 = "markup">text</emphasis></inline>
-
- *[:markup: text*]
-
-The result is::
-
- <emphasis><problematic descrition = "tagging text would result in ill-formed XML"/>[:markup: text</emphasis>]
-
-Customizing Markup
-==================
-
-The nested_inline module reads from a customization file in order to determine how inline text is marked up. Change this document in order to change how you want to markup your text.
-
-The configuration file takes 6 values:
-
-- start-role: the way to mark the start of a role. The default is ":".
-
-- end-role: the way to mark the end of a role. The default is ":".
-
-- start-group: the way to mark the start of a group. The default is "[".
-
-- end-group: the way to mark the end of a group. The default is "]".
-
-- tag-name: the name of the inline tag. The default is "inline".
-
-- warning: the name of the warning messge for errors. The default is "problematic".
-
-Let's say you wanted to markup your text using parenethesis rather than brackets, and that you wanted your role to go outside of the parenthesis. You want your tag name to be "inline-tag", and your warning to be "warning." Your configuration file would look like this::
-
-
- <configure>
- <start-role string = ':'/>
- <end-role string = ':'/>
- <start-group string = '('/>
- <end-group string = ')'/>
- <place-of-role place = 'outside'/>
- <tag-name name = 'inline-tag'/>
- <warning name = 'warning'/>
- </configure>
-
-You would then markup your text as::
-
- :comment:(This is a comment with *italics*)
-
-The output would be::
-
- <inline-tag arg1 = "comment">This is a comment with <emhasis>italics</emphasis></inline-tag>
-
-Project Files & Directories
-===========================
-
-* README.txt: You're reading it.
-
-*|moduleName|: Contains all the modules for the script to run
-
-*doc: The documentation for the module, including a copy of this
-README.txt.
-
-*scripts: the script |scriptName|.
-
-*test_files: Files to test the script.
-
-
-Getting Help
-============
-
-Contact me.
-
-..
- Local Variables:
- mode: indented-text
- indent-tabs-mode: nil
- sentence-end-double-space: t
- fill-column: 70
- End:
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/__init__.py b/sandbox/paultremblay/docutils_nest/docutils_nest/__init__.py
deleted file mode 100644
index b3d0c915b..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-'''
-modules for rtf2xml
-'''
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/inline_to_xml.py b/sandbox/paultremblay/docutils_nest/docutils_nest/inline_to_xml.py
deleted file mode 100644
index 316a47233..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/inline_to_xml.py
+++ /dev/null
@@ -1,459 +0,0 @@
-import re, sys, os
-import docutils_nest.well_formed_xml
-
-"""
-
-
-"""
-
-class InlineToXML:
-
- """
-
- """
-
-
-
- def __init__( self,
- start_role = ':',
- end_role = ':',
- start_group = '[',
- end_group = ']',
- place = 'inside',
- tag_name = 'inline',
- warning = 'problematic'
- ):
-
- """
-
- Required:
-
- nothing
-
- Options:
-
- start_role -- the text delimeter that marks the beginning of a role
-
- end_role -- the text delimeter that marks the end of a role
-
- start_group -- the text delimeter that marks the start of a group
-
- end_group -- the text delimiter that marks the end of a group
-
- place -- whether the role goes inside or outside of the group
-
- warning -- a string of text to describe problems
-
- warning_level -- will do away with this
-
-
- """
- self.__start_role = str(start_role)
- self.__end_role = str(end_role)
- self.__start_group = str(start_group)
- self.__end_group = str(end_group)
- self.__place = str(place)
- exp = self.__make_split_exp()
- self.__split_exp = re.compile(exp)
- exp = self.__role_exp_func()
- self.__start_exp = re.compile(exp)
- self.__token_list = []
- self.__reg_bracket = 0 # found regular brackets
- self.__bracket_type = []
- self.__tag_name, self.__warning = self.__make_tag_names(tag_name, warning)
-
- def __make_tag_names(self, tag_name, warning):
- tags = [tag_name, warning]
- counter = 0
- for name in tags:
- new_string = ''
- counter += 1
- for char in name:
- if not char.isalnum():
- char = '_'
- new_string += char
- first = new_string[:1]
- is_letter = first.isalpha()
- if not is_letter:
- new_string = 'a' + new_string
- if counter == 1:
- new_tag_name = new_string
- else:
- new_warning = new_string
- return new_tag_name, new_warning
-
- def __escape_value(self, value):
-
- """
-
- Required:
-
- value -- a string
-
- Returns
-
- a string of escaped values
-
- Logic:
-
- Certain characters have special values in regular expressions. If
- the user is using any of these special expressions, then they must
- be escaped.
-
-
- """
- special = ['[', ']', '(', ')', '{', '}', '.']
- if value in special:
- value = '\\%s' % value
- return value
-
- def __make_split_exp(self):
-
- """
-
- Requires:
-
- nothing
-
- Returns:
-
- nothing
-
- Logic:
-
- Use the object values to form a regular expression that will be
- used to split a string into tokens. The expression will be
- different if the role is inside or outside the group.
-
-
- """
- start_group = self.__escape_value(self.__start_group)
- end_group = self.__escape_value(self.__end_group)
- start_role = self.__escape_value(self.__start_role)
- end_role = self.__escape_value(self.__end_role)
- if self.__place == 'inside':
- #\[:[^\[\]]+:\s?|\[|\]
- exp = '(%s%s[^%s%s]+%s\s?|%s|%s)' % \
- (start_group,
- start_role,
- start_group,
- end_group,
- end_role,
- start_group,
- end_group
- )
-
-
- else:
- # :[^\[\]]+:\[|[|]
- exp = '(%s[^%s%s]+%s%s|%s|%s)' %\
- (start_role,
- start_group,
- end_group,
- end_role,
- start_group,
- start_group,
- end_group
- )
- return exp
-
- def __role_exp_func(self):
- """
-
- Requires:
-
- nothing
-
- Returns
-
- nothing
-
- Logic:
-
- Make a regular expression to marke the beginning of a group
-
- """
- start_group = self.__escape_value(self.__start_group)
- end_group = self.__escape_value(self.__end_group)
- start_role = self.__escape_value(self.__start_role)
- end_role = self.__escape_value(self.__end_role)
- if self.__place == 'inside':
- exp = '%s%s(.*?)%s' % \
- (start_group,
- start_role,
- end_role
- )
- else:
- exp = '%s(.*?)%s%s' % \
- (start_role,
- end_role,
- start_group
- )
- return exp
-
-
-
- def __well_formed_func(self, my_string):
- """
-
- Required:
-
- my_string --string to check
-
- Returns:
-
- 0 if the string can be convert to tags, and 0 otherwise
-
- Logic:
-
- Use the external module well_formed_xml to test that the tags are
- balanced. If they are balanced, the module returns 1. Othewise it
- returns 0
-
-
- """
- well_formed_obj = docutils_nest.well_formed_xml.WellFormed()
- well_formed = well_formed_obj.well_formed(my_string)
- return well_formed
-
-
-
- def __open_tag(self, my_string):
- """
-
- Requires:
-
- my_string --string to parse
-
- Returns:
-
- A string of arguments for an opening tag.
-
- Logic:
-
- Use a simple split expression to turn a string of values with a
- space bewteen them into arguments: word1 word2 word3 =>
- arg1="word1" arg2="word2" arg3="word3"
-
- """
- arguments = my_string.split()
- counter = 0
- final_string = ''
- for argument in arguments:
- counter += 1
- final_string += 'arg%s="%s" ' % (counter, argument)
- final_string = final_string.replace(':', '')
- return final_string[:-1] # chop off last space
-
-
-
- def __process_inside_group(self, inner_list):
- """
-
- Requires:
-
- inner_list -- a list of two values. The first is a string starting
- and ending with a colon. :arg1 arg2:
-
- Returns:
-
- A string of tagged text. If the string can be converted to XML (or
- tagged), then it is tagged:
-
- [':word1 word2:', 'text'] => <inline arg1="word1"
- arg2="word2">text</inline>
-
- If the string cannot be tagged, it makes the following:
-
- [':word1 word2:', 'text<i>'] => <warning descrition=
- description="tagging brackets will result in invalid XML'
-
- Logic:
-
- Check to see if you can tag the text and still form valid XML. If
- so, tag and return the text.
-
- Otherwise, write an error message and return the text.
-
-
-
- """
- my_string = inner_list[1]
- tag = inner_list[0]
- well_formed = self.__well_formed_func(my_string)
- if well_formed:
- match_obj = re.match(self.__start_exp, tag)
- tag = match_obj.group(1)
- open_tag = self.__open_tag(tag) #[:wor1:
- final_string = '<%s %s>%s</%s>' % (
- self.__tag_name, open_tag, my_string, self.__tag_name)
- return final_string
- else:
- final_string = '<%s description="tagging brackets will result ' % (self.__warning,
- )
- final_string += 'in invalid XML"/>'
- final_string += tag + my_string + ']'
- warning = (
- 'WARNING: tagging brackets will result in invalid XML:'
- '%s%s' % (tag, my_string)
- )
- sys.stderr.write(repr(warning))
- sys.stderr.write('\n')
- return final_string
-
- def __start_role_func(self, token):
- """
- Requires:
-
- token -- the token to check
-
- Returns:
-
- A string if a start expession is found; 0 otherwise
-
- """
-
- match_obj = re.match(self.__start_exp, token)
-
- if match_obj:
- return match_obj.group(1)
- return 0
-
- def __tag(self, tokens):
- """
-
- Requires:
-
- tokens -- a list of tokens
-
- Returns:
-
- A string --A string of tagged text
-
- Logic:
-
- Read one token at a time.
-
- If the token is text, add it to the final string. 'Text' => 'text'
-
- If the token is an opening bracket and a colon, make a new list =>
- [:word1: text] => [[:word1:, text]]
-
- If the token is a simple opening bracket, simply set the regular
- bracket tag to true.
-
- If the token is a closed bracket, and the regular bracket is not
- true, get the last item in the group. ([:word1: text]). Process
- this list and get a string back. If there the list still has
- items, add it to the text part:
-
- returned string = <inline arg1="word1"> text</inline>
-
- list = [[:arg2:, "more text]]
-
- Becomes:
-
- list = [[:arg2:, 'more text <inline arg1="word1" text </inline>']
-
- Otherwise, add the token either to the final string, or to the
- text portion of the list.
-
- """
- final_string = ''
- for token in tokens:
- start_role = self.__start_role_func(token)
- ##print repr(token)
- ##if token == ']' and not self.__reg_bracket:
- if token == self.__end_group and self.__bracket_type and \
- self.__bracket_type[-1] == 'inline':
-
- inside_string = self.__token_list.pop()
- parsed_string = self.__process_inside_group(inside_string)
- if self.__token_list:
- self.__token_list[-1][1] += parsed_string
- else:
- final_string += parsed_string
-
- self.__bracket_type.pop()
-
- # check for solitary closing brackets
- elif token == self.__end_group and not self.__bracket_type:
- sys.stderr.write('ending bracket may cause unwanted results\n')
- if self.__token_list:
- self.__token_list[-1][1] += token
- else:
- final_string += token
- elif start_role:
- self.__token_list.append([])
- self.__token_list[-1].append(token)
- self.__bracket_type.append('inline') # inline bracket group
- self.__token_list[-1].append('')
- else:
- # first test if you should add or pop list type
- if token == self.__end_group:
- ##self.__bracket_type.pop()
- try:
- self.__bracket_type.pop()
- except IndexError:
- pass
- elif token[0:1] == self.__start_group:
- self.__bracket_type.append('regular') # regular bracket group
-
- # now add the string to the right place
- if self.__token_list:
- self.__token_list[-1][1] += token # add to middle group
- else:
- final_string += token
- if self.__token_list:
- warning = 'WARNING Brackets not closed out\n'
- warning += self.__token_list[0][0] + self.__token_list[0][1]
- sys.stderr.write(repr(warning))
- warning = '<%s description="Brackets not closed properly"/>' % (
- self.__warning)
- final_string += warning + self.__token_list[0][0] + self.__token_list[0][1]
- self.__token_list = []
-
- return final_string
-
- def make_tags(self, my_string):
- my_list = re.split(self.__split_exp, my_string)
- my_string = self.__tag(my_list)
- return my_string
-
-
-
-if __name__ == '__main__':
- start_role = ':'
- end_role = ':'
- start_group = '['
- end_group = ']'
- place = 'inside'
-
- test_obj = InlineToXML(
- start_role = start_role,
- end_role = end_role,
- place = place,
- start_group = start_group,
- end_group = end_group
- )
- the_test_string = '<i role = "arg">[:role: test22 [:role2: text2]</i>][]'
- return_string = test_obj.make_tags(the_test_string)
- print '@%s@' % return_string
-
- start_role = ':'
- end_role = ':'
- start_group = '['
- end_group = ']'
- place = 'outside'
-
- test_obj = InlineToXML(
- start_role = start_role,
- end_role = end_role,
- place = place,
- start_group = start_group,
- end_group = end_group
- )
-
- the_test_string = ':role:[ test :role2:[ text2]]'
- return_string = test_obj.make_tags(the_test_string)
- print return_string
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/nest_docutils.py b/sandbox/paultremblay/docutils_nest/docutils_nest/nest_docutils.py
deleted file mode 100644
index 61941fbb1..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/nest_docutils.py
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env python
-import sys, os
-import docutils_nest.nested_inline
-import docutils_nest.read_config
-import docutils_nest.options_trem
-import docutils_nest.location
-
-"""
-converst an XML file to nested tags
-
-
-"""
-outer_dir = docutils_nest.location.get_location()
-doc_nest_dir = os.path.join(outer_dir, '.docutils_nest')
-
-
-class GetOptions:
- def __init__(self, sys_string):
- self.__sys_string = sys_string
-
- def get_options(self):
- options_dict = {
- 'output': [1,'o']
- }
- options_obj = docutils_nest.options_trem.ParseOptions(
- system_string = self.__sys_string,
- options_dict = options_dict,
- )
-
- options, arguments = options_obj.parse_options()
- output = ''
- file = ''
- if options == 0:
- sys.stderr.write('Script will quit because of invalid options')
- sys.exit(1)
- output = options.get('output')
-
- if not output:
- sys.stderr.write('must provide output for script to work\n')
- sys.exit(1)
- if arguments:
- file = arguments[0]
-
- if not file:
- sys.stderr.write('must provide a file for script to work\n')
- sys.exit(1)
-
- return file, output
-
-class GetConfig:
-
- def __init__(self, file):
- self.__file = file
-
- def get_config(self):
- config_obj = docutils_nest.read_config.Configure(self.__file)
- config_values = config_obj.read_configs()
- return config_values
-
-class MakeTags:
- def __init__( self,
- file,
- output,
- config_values
-
- ):
- self.__file = file
- self.__output = output
- self.__start_role = config_values.get('start_role')
- self.__end_role = config_values.get('end_role')
- self.__start_group = config_values.get('start_group')
- self.__end_group = config_values.get('end_group')
- self.__place_of_role = config_values.get('place_of_role')
- self.__tag_name = config_values.get('tag_name')
- self.__warning = config_values.get('warning')
-
- def make_tags(self):
- convert_obj = docutils_nest.nested_inline.InlineBrackets(
- file = self.__file,
- output = self.__output,
- start_role = self.__start_role,
- end_role = self.__end_role,
- start_group = self.__start_group,
- end_group = self.__end_group,
- place = self.__place_of_role,
- tag_name = self.__tag_name,
- warning = self.__warning
- )
- convert_obj.make_tags()
-
-
-
-
-class NestDocutils:
-
- def __init__(self, file, output):
- self.__file = file
- self.__output = output
-
- def nest_tags(self):
- config_file = os.path.join(doc_nest_dir, 'configure.xml')
- config_obj = GetConfig(config_file)
- config_values = config_obj.get_config()
- tags_obj = MakeTags(self.__file, self.__output, config_values)
- tags_obj.make_tags()
-
-if __name__ == '__main__':
-
- # file = '/home/paul/lib/python/paul/restructure_tools/test_inline.xml'
- # output = '/home/paul/paultemp/brackets_to_tags.temp.xml'
- # nest_obj = NestDocutils(file, output)
- # nest_obj.nest_tags()
- # sys.exit(0)
- options_obj = GetOptions(sys.argv)
- file, output = options_obj.get_options()
- config_file = os.path.join(doc_nest_dir, 'configure.xml')
- config_obj = GetConfig(config_file)
- config_values = config_obj.get_config()
- tags_obj = MakeTags(file, output, config_values)
- tags_obj.make_tags()
- command = 'xmlvalid -c -v %s' % output
- os.system(command)
-
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/nest_utils.py b/sandbox/paultremblay/docutils_nest/docutils_nest/nest_utils.py
deleted file mode 100644
index c158334f9..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/nest_utils.py
+++ /dev/null
@@ -1,181 +0,0 @@
-"""
-
-This script converts a document marked up as rst to XML. It uses the
-docutils-xml.py conversion tools, and then performs one more transformation to
-convert text specially marked up to XML as well.
-
-NOTE: This is not part of the official docutils package. Rather, it is my own
-extension.
-
-"""
-
-import os, sys
-import docutils_nest.nest_docutils
-import docutils_nest.rst_options
-
-class RstWithInline:
-
- def __init__(self, file, output, docutils_opts = []):
- self.__file = file
- self.__output = output
- self.__docutils_opts = docutils_opts
-
- def convert(self):
-
- """
-
- Requires:
-
- nothing
-
- Returns:
-
- nothing
-
- Logic:
-
- First convert the txt file to a temp XML file. Then convert this
- temp file, chagning inline marked-up text to tags.
-
- """
- temp_file = self.__convert_restructure()
- self.__convert_inline(temp_file)
-
-
-
-
- def __convert_restructure(self):
- """
-
- Requires:
-
- nothing
-
- Returns:
-
- nothing
-
- Logic:
-
- Use the docuitls-xml script to convert the file from rst to XML
-
-
- """
- import locale
- try:
- locale.setlocale(locale.LC_ALL, '')
- except:
- pass
- ##--no-doctype
- argv = self.__docutils_opts
- argv.append('--no-doctype')
- argv.append(self.__file) # input file
- restructure_temp = '/tmp/restructure_text_temp' # temp output
- argv.append(restructure_temp)
-
-
- from docutils.core import publish_cmdline, default_description
-
- # I think this is just for the description at the beginning of the
- # resulting file
- description = ('Generates Docutils-native XML from standalone '
- 'reStructuredText sources. \n'
- 'From script resruct_to_tei.py ' + default_description)
-
- # invoke the method for coversion
- publish_cmdline(writer_name='xml', description=description,
- argv = argv)
-
- return restructure_temp
- # os.rename(restructure_temp, self.__output)
-
- def __convert_inline(self, temp):
-
- """
-
- Requires:
-
- temp -- a valid, XML file converted from docutils-xml.py
-
- Returns:
-
- nothing
-
- Logic:
-
- Use the module nest_docutils to transform text marked up as inline to XML.
-
- """
- nest_obj = docutils_nest.nest_docutils.NestDocutils(temp, self.__output)
- nest_obj.nest_tags()
-
-
-
-
-def print_help_message():
- sys.stdout.write(
- '\n\n'
- 'Use For rst_convert_with_inline:\n'
- '================================='
- '\n\n'
- 'python rst_convert_with_inline.py [docuitls options] --output <output> file.txt\n'
- '(--output *must* be provided!)\n'
- '\n\n'
- 'An invalid docutils options will cause an error.\n'
- 'Hold on while the docutils help message prints out...'
- '\n\n'
- )
-
-
- import locale
- try:
- locale.setlocale(locale.LC_ALL, '')
- except:
- pass
- argv = ['--help']
-
- from docutils.core import publish_cmdline, default_description
-
- # I think this is just for the description at the beginning of the
- # resulting file
- description = ('Generates Docutils-native XML from standalone '
- 'reStructuredText sources. \n'
- 'From script resruct_to_tei.py ' + default_description)
-
- # invoke the method for coversion
- publish_cmdline(writer_name='xml', description=description,
- argv = argv)
-
-def convert_file():
-
- options_dict = {
- 'output': [1]
- }
- opt_obj = docutils_nest.rst_options.OptionsRst(sys.argv, options_dict)
- inline_opts, args, doc_opts = opt_obj.parse_options()
- if inline_opts == 0:
- print_help_message()
- sys.stderr.write('Script will now quite because of illegal options\n')
- sys.exit(1)
- try:
- file = args[0]
- except IndexError:
- sys.stderr.write('You must provide a file for the script to convert.\n'
- 'Script will now quit'
- )
- sys.exit(1)
- output = inline_opts.get('output')
- if not output:
- sys.stderr.write('You must provide an output option for the script to work\n'
- 'Script will now quit\n'
- )
- sys.exit(1)
- convert_obj = RstWithInline(file, output, docutils_opts = doc_opts)
- convert_obj.convert()
-
-if __name__ == '__main__':
- # # file = os.path.join(nest_inline_location, 'nest_inline/test_files/simple1.txt')
- # # output = os.path.join(nest_inline_location, 'nest_inline/output.xml')
- convert_file()
-
- nest_inline_location = '/home/paul/lib/python/'
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/nested_inline.py b/sandbox/paultremblay/docutils_nest/docutils_nest/nested_inline.py
deleted file mode 100644
index 7937f070e..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/nested_inline.py
+++ /dev/null
@@ -1,352 +0,0 @@
-import os, re, sys, codecs
-
-import xml.sax.saxutils
-import xml.sax
-
-# turn on this line if you want to disablenamespaces
-##from xml.sax.handler import feature_namespaces
-
-##import paul.restructure_tools.handle_inline_text
-import docutils_nest.inline_to_xml
-# # import txt_to_xml.brackets_to_xml
-
-"""
-
-Inline
-^^^^^^
-
-:author: Paul Tremblay
-
-:revision:
-
- :revnumber: .2
-
- :date: 2003-05-03
-
- :revremark: When I first started writing this document.
-
- :revnumber: .21
-
- :date: 2003-05-06
-
- :revremark: Turned off namespaces. Tried "to get rid of using import ..
- from" construction, since I don't understand it.
-
- :revnumber: .22
-
- :date: 2003-05-09
-
- :revremark: Documented the module. Escaped brackets such as \[. Escaped any
- bracket in an attribute.
-
- :revnumber: .23
-
- :date: 2003-05-31
-
- :revremark: The user can now choose his or her own way to define groups.
-
-========
-Overview
-========
-
-This module gets a file and changes brackets to inline tags:
-
-<document>
-
- <paragraph>Text [:word1 word2 word3: Text [:word1 word2: Text2 [regular bracket]]Text3]
- </paragraph>
-
-</document>
-
-
-<document>
-
- <paragraph>Text <arg1="word1" arg2="word2" arg3="word3"> Text <inline arg1="word1" arg2= "word2"> Text2 [regular bracket]</inline>Text3</inline>
- </paragraph>
-
-</document>
-
-"""
-
-
-
-
-class InlineHandler(xml.sax.saxutils.DefaultHandler):
- """
-
- Class for handling the XML file. SAX uses the methods in this class to
- handle the data.
-
-
- """
- def __init__( self,
- write_obj,
- start_role = ':',
- end_role = ':',
- start_group = '[',
- end_group = ']',
- place = 'inside',
- tag_name = 'inline',
- warning = 'problematic'
-
- ):
-
- """
-
-
- Requires:
-
- write_obj -- a write object
-
- Returns:
-
- nothing
-
-
- Logic:
-
- Set the necessary parameters:
-
- self.__write_obj --the object for outputing text
-
- self.__name --name of current element
-
- self.__character --string containg characters in current
- element.
-
- self.__in_block --whether the text is in a block element.
-
- self.__block_tags -- a list of tags that include blocks of
- text. In other words, all tags except those tags that surround
- inline items.
-
- self.__block_tags -- the string of all text and elements in
- the current block.
-
- self.__handl_br_text_obj -- an object to handle all block text
- that contains an open bracket.
-
- """
- self.__write_obj = write_obj
- self.__name = ''
- self.__character = ''
- self.__in_block = 0
- self.__block_tags = ['paragraph', 'author', 'date', 'revision',
- 'version']
- self.__block_tag_string = ''
- # self.__handle_br_text_obj = \
- # rst_bracket_inline.handle_bracket_string.Inline()
- self.__handle_br_text_obj = \
- docutils_nest.inline_to_xml.InlineToXML(
- start_role = start_role,
- end_role = end_role,
- start_group = start_group,
- end_group = end_group,
- place = place,
- tag_name = tag_name,
- warning = warning
- )
-
- def startElement(self, name, attrs):
- """
-
- Logic:
-
- The SAX driver uses this function when if finds a beginning tag.
-
- Escape all opening and closing brackets for the values of
- attributes, so they won't be processed.
-
- Make a string from the opening tag. If you are in a block element,
- add this string to the block element string. Otherwise, write the
- string to the file.
-
-
-
- """
- self.__name = name
- if name in self.__block_tags:
- self.__in_block = 1
- open_tag = '<%s' % name
- keys = attrs.keys()
- for key in keys:
- att = key
- value = attrs[key]
- # kind of a kludge. Only escape text that is going to be unescaped
- # later on
- if self.__in_block:
- value = value.replace('[', '\000')
- value = value.replace(']', '\001')
- open_tag += ' %s="%s"' % (att, value)
- open_tag += '>'
- if self.__in_block:
- self.__block_tag_string += open_tag
- else:
- self.__write_obj.write(open_tag)
-
-
- def characters(self, character):
- """
-
- Logic:
-
- The SAX driver uses this function when it finds text.
-
- If the text is between two literal tags, then I want to escape all
- opening and closing brackts to that they are not processed.
-
- If the text is not between two literal tags, I want to escape a
- backlash followed by a bracket.
-
- (Note: The only way that a file processed by docutils-xml will
- pass on a backslash followed by a bracket is if the original file
- has *2* backslashes followed by a bracket.)
-
- Add the changed string to the block test string.
-
- If the text is not in a block (which I don't think should happen),
- it simply outputs it to the file.
-
- """
-
- character = character.replace('&', '&amp')
- character = character.replace('<', '&lt;')
- character = character.replace('>', '&gt;')
- if self.__in_block:
- if self.__name == 'literal':
- character = character.replace('[', '\000')
- character = character.replace(']', '\001')
- # replace escaped backslashes not in literal
- else:
- character = character.replace('\\]', '\001')
- self.__block_tag_string += character
- else:
- self.__write_obj.write(character)
-
-
- def endElement(self, name):
- """
-
- Logic:
-
- The SAX driver uses the function when it finds an end tag. It
- pases to this function the name of the end element.
-
- If the name is a block element, the function checks if it has any
- starting brackets. If it does, the string should be processed with
- the handle bracket module.
-
- The text that has been escaped is not unescaped, and the string is
- written to the output file.
-
- If the tag does not indicate the end of a block, but you are in a
- block tag, add the text to the block string.
-
- If the text has nothing to do with a block, simly output it to the
- file.
-
-
- """
-
-
- if name in self.__block_tags:
- self.__block_tag_string += '</%s>' % name
- # handle all the text
- if '[' in self.__block_tag_string:
- tagged_text = \
- self.__handle_br_text_obj.make_tags(self.__block_tag_string)
- else:
- tagged_text = self.__block_tag_string
- tagged_text = tagged_text.replace('\000', '[')
- tagged_text = tagged_text.replace('\001', ']')
- self.__write_obj.write(tagged_text)
- self.__in_block = 0
- self.__block_tag_string = ''
- elif self.__in_block:
- self.__block_tag_string += '</%s>' % name
- else:
- self.__write_obj.write('</%s>' % name)
-
-
-
-
-class InlineBrackets:
-
- def __init__( self,
- file,
- output,
- start_role = ':',
- end_role = ':',
- start_group = '[',
- end_group = ']',
- place = 'inside',
- tag_name = 'inline',
- warning = 'problematic'
-
- ):
-
-
- """
-
-
- Requires:
-
- file --file to be read
-
- output --file to output to
-
-
- Returns:
-
- Nothing. Outputs a file
-
- Logic:
-
- Set up a write object.
-
- Create an instance of the InlineHandler for sax to use.
-
- Pass this instance to the SAX driver.
-
- Use the SAX driver to handle the file.
-
-
- """
- self.__output = output
- self.__file = file
- self.__start_role = start_role
- self.__end_role = end_role
- self.__start_group = start_group
- self.__end_group = end_group
- self.__place = place
- self.__tag_name = tag_name
- self.__warning = warning
-
- def make_tags(self):
- (utf8_encode, utf8_decode, utf8_reader, utf8_writer) = codecs.lookup("utf-8")
- write_obj = utf8_writer(open(self.__output, 'w'))
- parser = xml.sax.make_parser()
- # turn on this line if you want to disable namespaces
- ##parser.setFeature(feature_namespaces, 0)
- inline_handler = InlineHandler( write_obj = write_obj,
- start_role = self.__start_role,
- end_role = self.__end_role,
- start_group = self.__start_group,
- end_group = self.__end_group,
- place = self.__place,
- tag_name = self.__tag_name,
- warning = self.__warning
- )
- parser.setContentHandler(inline_handler)
- parser.parse(self.__file)
- write_obj.close()
-
-
-
-if __name__ == '__main__':
- file = '/home/paul/lib/python/paul/restructure_tools/test_inline.xml'
- output = '/home/paul/paultemp/brackets_to_tags.temp.xml'
- obj = InlineBrackets(file, output = output, warning = '5fuck:? yo&<>u')
- obj.make_tags()
- command = 'xmlvalid -c -v %s' % output
- os.system(command)
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/options_trem.py b/sandbox/paultremblay/docutils_nest/docutils_nest/options_trem.py
deleted file mode 100644
index 6cf60a3db..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/options_trem.py
+++ /dev/null
@@ -1,386 +0,0 @@
-import sys
-class ParseOptions:
-
- """
-
- Requires:
-
- system_string --The string from the command line
-
- options_dict -- a dictionary with the key equal to the opition, and
- a list describing that option. (See below)
-
-
- Returns:
-
- A tupple. The first item in the tupple is a dictionary containing
- the arguments for each options. The second is a list of the
- arguments.
-
- If invalid options are passed to the module, 0,0 is returned.
-
- Examples:
-
- Your script has the option '--indents', and '--output=file'.
-
- You want to give short option names as well:
-
- --i and -o=file
-
- Use this:
-
- options_dict = {'output': [1, 'o'],
- 'indents': [0, 'i']
- }
-
- options_obj = ParseOptions(
- system_string = sys.argv,
- options_dict = options_dict
- )
-
- options, arguments = options_obj.parse_options()
- print options
- print arguments
-
- The result will be:
-
-
- {indents:None, output:'/home/paul/file'}, ['/home/paul/input']
-
-
- """
- def __init__(self, system_string, options_dict):
- self.__system_string = system_string[1:]
- long_list = self.__make_long_list_func(options_dict)
- # # print long_list
- short_list = self.__make_short_list_func(options_dict)
- # # print short_list
- self.__legal_options = long_list + short_list
- # # print self.__legal_options
- self.__short_long_dict = self.__make_short_long_dict_func(options_dict)
- # # print self.__short_long_dict
- self.__opt_with_args = self.__make_options_with_arg_list(options_dict)
- # # print self.__opt_with_args
- self.__options_okay = 1
-
-
-
- def __make_long_list_func(self, options_dict):
- """
- Required:
-
- options_dict -- the dictionary mapping options to a list
-
- Returns:
-
- a list of legal options
-
-
-
-
- """
- legal_list = []
- keys = options_dict.keys()
- for key in keys:
- key = '--' + key
- legal_list.append(key)
- return legal_list
-
- def __make_short_list_func(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a list of legal short options
-
- """
- legal_list = []
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- legal_list.append('-' + values[1])
- except IndexError:
- pass
-
- return legal_list
-
-
-
- def __make_short_long_dict_func(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a dictionary with keys of short options and values of long options
-
- """
- short_long_dict = {}
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- short = '-' + values[1]
- long = '--' + key
- short_long_dict[short] = long
- except IndexError:
- pass
-
- return short_long_dict
-
- def __make_options_with_arg_list(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a list of options that take arguments.
-
- """
- opt_with_arg = []
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- if values[0]:
- opt_with_arg.append('--' + key)
- except IndexError:
- pass
-
- return opt_with_arg
-
-
- def __sub_short_with_long(self):
- """
- Required:
-
- nothing
-
- Returns:
-
- a new system string
-
- Logic:
-
- iterate through the system string and replace short options with long options
-
-
- """
- new_string = []
- sub_list = self.__short_long_dict.keys()
- for item in self.__system_string:
- if item in sub_list:
- item = self.__short_long_dict[item]
- new_string.append(item)
- return new_string
-
-
-
- def __pair_arg_with_option(self):
-
- """
-
- Required:
-
- nothing
-
- Returns
-
- nothing (changes value of self.__system_string)
-
- Logic:
-
- iterate through the system string, and match arguments with options:
-
- old_list = ['--foo', 'bar']
-
- new_list = ['--foo=bar'
-
- """
- opt_len = len(self.__system_string)
- new_system_string = []
- counter = 0
- slurp_value = 0
- for arg in self.__system_string:
-
- # previous value was an option with an argument, so this arg is
- # actually an argument that has already been added
- counter += 1
- if slurp_value:
- slurp_value = 0
- continue
-
- # not an option--an argument
- if arg[0] != '-':
- new_system_string.append(arg)
-
- # option and argument already paired
- elif '=' in arg:
- new_system_string .append(arg)
- else:
- # this option takes an argument
- if arg in self.__opt_with_args:
- # option is the last in the list
- if counter + 1 > opt_len:
- sys.stderr.write('option "%s" must take an argument\n' % arg)
- new_system_string.append(arg)
- self.__options_okay = 0
- else:
- # the next item in list is also an option
- if self.__system_string[counter][0] == '-':
- sys.stderr.write('option "%s" must take an argument\n' % arg)
- new_system_string.append(arg)
- self.__options_okay = 0
- # the next item in the list is the argument
- else:
- new_system_string.append(arg + '=' + self.__system_string[counter])
- slurp_value = 1
- # this option does not take an argument
- else:
- new_system_string.append(arg)
- return new_system_string
-
-
- def __get_just_options(self):
-
- """
-
- Requires:
-
- nothing
-
- Returns:
-
- list of options
-
- Logic:
-
- Iterate through the self.__system string, looking for the last
- option. The options are everything in the sysem string before the
- last option.
-
- Check to see that the options contain no arguments.
-
-
- """
- highest = 0
- counter = 0
- found_options = 0
- for item in self.__system_string:
- if item[0] == '-':
- highest = counter
- found_options = 1
- counter += 1
-
- if found_options:
- just_options = self.__system_string[:highest + 1]
- arguments = self.__system_string[highest + 1:]
- else:
- just_options = []
- arguments = self.__system_string
-
- if found_options:
- for item in just_options:
- if item[0] != '-':
- sys.stderr.write('%s is an argument in an option list\n' % item)
- self.__options_okay = 0
- return just_options, arguments
-
-
- def __is_legal_option_func(self):
-
- """
- Requires:
-
- nothing
-
- Returns:
-
- nothing
-
- Logic:
-
- Check each value in the newly creatd options list to see if it
- matches what the user describes as a legal option.
-
-
- """
- illegal_options = []
- for arg in self.__system_string:
- if '=' in arg:
- temp_list = arg.split('=')
- arg = temp_list[0]
- if arg not in self.__legal_options and arg[0] == '-':
- illegal_options.append(arg)
-
- if illegal_options:
- self.__options_okay = 0
- sys.stderr.write('The following options are not permitted:\n')
- for not_legal in illegal_options:
- sys.stderr.write('%s\n' % not_legal)
-
-
- def __make_options_dict(self, options):
- options_dict = {}
- for item in options:
- if '=' in item:
- option, arg = item.split('=')
- else:
- option = item
- arg = None
-
- if option[0] == '-':
- option = option[1:]
- if option[0] == '-':
- option = option[1:]
-
- options_dict[option] = arg
-
- return options_dict
-
- def parse_options(self):
- self.__system_string = self.__sub_short_with_long()
- # # print 'subbed list is %s' % self.__system_string
- self.__system_string = self.__pair_arg_with_option()
- # # print 'list with pairing is %s' % self.__system_string
- options, arguments = self.__get_just_options()
- # # print 'options are %s ' % options
- # # print 'arguments are %s ' % arguments
- self.__is_legal_option_func()
- if self.__options_okay:
- options_dict = self.__make_options_dict(options)
- # # print options_dict
- return options_dict, arguments
-
- else:
- return 0,0
-
-
-
-
-if __name__ == '__main__':
- this_dict = {
- 'indents': [0, 'i'],
- 'output': [1, 'o'],
- 'test3': [1, 't'],
- }
- test_obj = ParseOptions(system_string = sys.argv,
- options_dict = this_dict
- )
-
- options, the_args = test_obj.parse_options()
- print options, the_args
-
- """
- this_options = ['--foo', '-o']
- this_opt_with_args = ['--foo']
-
- """
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/read_config.py b/sandbox/paultremblay/docutils_nest/docutils_nest/read_config.py
deleted file mode 100644
index 84ac7b4ad..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/read_config.py
+++ /dev/null
@@ -1,143 +0,0 @@
-import os, re, sys, codecs
-
-import xml.sax.saxutils
-import xml.sax
-
-# turn on this line if you want to disablenamespaces
-##from xml.sax.handler import feature_namespaces
-
-
-config_values = {
- 'start_role' : ':',
- 'end_role' : ':',
- 'start_group' : '[',
- 'end_group' : ']',
- 'place_of_role' : 'inside',
- 'tag_name' : 'inline',
- 'warning' : 'problematic',
-
-}
-
-
-class ConfigHandler(xml.sax.saxutils.DefaultHandler):
- """
-
- Class for handling the XML file. SAX uses the methods in this class to
- handle the data.
-
-
- """
- def __init__(self):
-
- """
-
-
- Requires:
-
-
- Returns:
-
- nothing
-
-
- Logic:
-
-
- """
- self.__allowed = [
- 'start-role', 'end-role', 'start-group', 'end-group', 'place-of-role',
- 'tag-name', 'warning', 'configure'
- ]
-
-
-
- def startElement(self, name, attrs):
- """
-
- Logic:
-
- The SAX driver uses this function when if finds a beginning tag.
-
-
-
- """
- if name in self.__allowed:
- values = attrs.values()
- config_values[name] = values
-
- else:
- sys.stderr.write('%s not a valid option\n' % name)
-
-
- def characters(self, character):
- """
-
- Logic:
-
- The SAX driver uses this function when it finds text.
-
- """
- pass
-
-
-
- def endElement(self, name):
- """
-
- Logic:
-
-
- """
-
- pass
-
-
-
-
-class Configure:
-
- def __init__(self, file):
-
-
- """
-
-
- Requires:
-
-
-
- Returns:
-
-
- Logic:
-
- Set up a write object.
-
- Create an instance of the InlineHandler for sax to use.
-
- Pass this instance to the SAX driver.
-
- Use the SAX driver to handle the file.
-
-
- """
- file_exists = os.path.exists(file)
- if not file_exists:
- raise IOError, 'file %s does not exist' % file
- self.__file = file
-
- def read_configs(self):
- parser = xml.sax.make_parser()
- # turn on this line if you want to disable namespaces
- ##parser.setFeature(feature_namespaces, 0)
- config_handler = ConfigHandler()
- parser.setContentHandler(config_handler)
- parser.parse(self.__file)
- return config_values
-
-
-
-if __name__ == '__main__':
- file = '/home/paul/docutils-extensions/configure.xml'
- obj = Configure(file)
- obj.read_configs()
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/rst_options.py b/sandbox/paultremblay/docutils_nest/docutils_nest/rst_options.py
deleted file mode 100644
index b0d3737bf..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/rst_options.py
+++ /dev/null
@@ -1,106 +0,0 @@
-"""
-
-Parse options from the command line in order to convert an rst text to XML.
-
-This script separates the options a script needs from the options that docuitls needs.
-
-Takes a system string. Returns a dictionary of options for docutils inline, a list of argumetns for docutils-inline, and a string for docutils.
-
-"""
-
-import sys, os
-import options_trem
-
-class OptionsRst:
-
- def __init__(self, sys_argv, script_options):
-
-
- self.__sys_argv = sys_argv
- self.__rst_options_dict = {
- 'pep-references': [],
- 'rfc-references': [],
- 'tab-width': [1],
- 'newlines': [],
- 'indents': [],
- 'no-xml-declaration': [],
- 'no-doctype': [],
- 'generator': [0,'g'],
- 'no-generator': [],
- 'date': [0,'d'],
- 'time': [0,'t'],
- 'no-datestamp': [],
- 'source-link': [0, 's'],
- 'source-url': [1],
- 'no-source-link': [],
- 'toc-entry-backlinks': [],
- 'toc-top-backlinks': [],
- 'no-toc-backlinks': [],
- 'footnote-backlinks': [],
- 'no-footnote-backlinks': [],
- 'report': [1, 'r'],
- 'verbose': [0,'v'],
- 'quiet': [0, 'q'],
- 'halt': [1],
- 'strict': [],
- 'debug': [],
- 'no-debug': [],
- 'warnings': [],
- 'input-encoding': [1, 'i'],
- 'output-encoding': [1, 'o'],
- 'language': [1, 'l'],
- 'config': [1],
- 'version': [0, 'V'],
- 'help': [0, 'h'],
- }
-
-
- self.__inline_options_dict = script_options
- self.__rst_options_list = self.__rst_options_dict.keys()
- self.__inline_options_list = self.__inline_options_dict.keys()
-
- self.__both_options = {}
- self.__both_options.update(self.__rst_options_dict)
- self.__both_options.update(self.__inline_options_dict)
-
- def parse_options(self):
- opts, args = self.__get_raw_options()
- if opts == 0:
- return 0, 0, 0
- doc_opts, inline_opts = self.__split_options(opts)
- return inline_opts, args, doc_opts
-
- def __get_raw_options(self):
- raw_obj = options_trem.ParseOptions(
- options_dict = self.__both_options,
- system_string = self.__sys_argv
- )
-
- options, arguments = raw_obj.parse_options()
- return options, arguments
-
- def __split_options(self, options):
- inline_options = {}
- docutils_options = []
- keys = options.keys()
- for key in keys:
- if key in self.__rst_options_list:
- if options[key] == None:
- docutils_options.append('--%s' % key)
- else:
- docutils_options.append('--%s=%s' % (key, options[key]))
-
- else:
- inline_options[key] = options[key]
-
- return docutils_options, inline_options
-
-
-
-
-if __name__ == '__main__':
- this_options_dict = {
- 'output': [1],
- }
- test_obj = OptionsRst(sys.argv, this_options_dict)
- test_obj.parse_options()
diff --git a/sandbox/paultremblay/docutils_nest/docutils_nest/well_formed_xml.py b/sandbox/paultremblay/docutils_nest/docutils_nest/well_formed_xml.py
deleted file mode 100644
index 643565382..000000000
--- a/sandbox/paultremblay/docutils_nest/docutils_nest/well_formed_xml.py
+++ /dev/null
@@ -1,73 +0,0 @@
-import xml.parsers.expat
-
-"""
-
-well_formed module
-^^^^^^^^^^^^^^^^^^
-
-========
-Overview
-========
-
-Takes a string, and returns either a zero or one, depending if the string has
-balanced tags.
-
-
-"""
-
-class WellFormed:
-
- def __init__(self):
- pass
-
- def well_formed(self, my_string):
- """
-
- Requires:
-
- my_string --string to test for well-formedness
-
- Returns:
-
- 1, if the tags are balanced, and 0 if the tags are not
-
- Logic:
-
- Enclose the string around an artifical root element.
-
- Change the encoding, if necessary.
-
- Try to parse the string with expat. If there is success, return 1.
- Otherwise, catch the exception and return 0.
-
- """
- enclosing_tag = 'doc-string-test6685866'
- my_string = '<%s>%s</%s>' % (enclosing_tag, my_string, enclosing_tag)
- try:
- if isinstance(my_string, type(u"")):
- my_string = my_string.encode("utf-8")
- parser = xml.parsers.expat.ParserCreate()
- parser.Parse(my_string, 1)
- return 1
- except xml.parsers.expat.ExpatError:
- return 0
-
-
-if __name__ == '__main__':
- test_strings = [
- '<tag>simplest test</tag>',
- '<tag>simplest fail test<tag>',
- '<tag>&amp;text\u201c</tag><tag>text,</tag>',
- '<tag>&amp;text&lt;</tag><tag>text,</tag>',
- '</tag>&amp;text&lt;</tag><tag>text,<tag>',
- ]
- test_obj = WellFormed()
- for test_string in test_strings:
- well_formed = test_obj.well_formed(test_string)
- if well_formed:
- print '%s is well formed' % test_string
- else:
- print '%s is not well formed' % test_string
-
-
-
diff --git a/sandbox/paultremblay/docutils_nest/options_trem.py b/sandbox/paultremblay/docutils_nest/options_trem.py
deleted file mode 100644
index 09eb3e4f4..000000000
--- a/sandbox/paultremblay/docutils_nest/options_trem.py
+++ /dev/null
@@ -1,377 +0,0 @@
-import sys
-class ParseOptions:
-
- """
-
- Requiries:
-
- system_string --The string from the command line
-
- options_dict -- a dictionary with the key equal to the opition, and
- a list describing that option. (See below)
-
-
- Returns:
-
- A tupple. The first item in the tupple is a dictionary containing
- the arguments for each options. The second is a list of the
- arguments.
-
- If invalid options are passed to the module, 0,0 is returned.
-
- Examples:
-
- Your script has the option '--indents', and '--output=file'.
-
- You want to give short option names as well:
-
- --i and -o=file
-
- Use this:
-
- options_dict = {'output': [1, 'o'],
- 'indents': [0, 'i']
- }
-
- options_obj = ParseOptions(
- system_string = sys.argv,
- options_dict = options_dict
- )
-
- options, arguments = options_obj.parse_options()
- print options
- print arguments
-
- The result will be:
-
-
- {indents:None, output:'/home/paul/file'}, ['/home/paul/input']
-
-
- """
- def __init__(self, system_string, options_dict):
- self.__system_string = system_string[1:]
- long_list = self.__make_long_list_func(options_dict)
- # # print long_list
- short_list = self.__make_short_list_func(options_dict)
- # # print short_list
- self.__legal_options = long_list + short_list
- # # print self.__legal_options
- self.__short_long_dict = self.__make_short_long_dict_func(options_dict)
- # # print self.__short_long_dict
- self.__opt_with_args = self.__make_options_with_arg_list(options_dict)
- # # print self.__opt_with_args
- self.__options_okay = 1
-
-
-
- def __make_long_list_func(self, options_dict):
- """
- Required:
-
- options_dict -- the dictionary mapping options to a list
-
- Returns:
-
- a list of legal options
-
-
-
-
- """
- legal_list = []
- keys = options_dict.keys()
- for key in keys:
- key = '--' + key
- legal_list.append(key)
- return legal_list
-
- def __make_short_list_func(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a list of legal short options
-
- """
- legal_list = []
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- legal_list.append('-' + values[1])
- except IndexError:
- pass
-
- return legal_list
-
-
-
- def __make_short_long_dict_func(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a dictionary with keys of short options and values of long options
-
- """
- short_long_dict = {}
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- short = '-' + values[1]
- long = '--' + key
- short_long_dict[short] = long
- except IndexError:
- pass
-
- return short_long_dict
-
- def __make_options_with_arg_list(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a list of options that take arguments.
-
- """
- opt_with_arg = []
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- if values[0]:
- opt_with_arg.append('--' + key)
- except IndexError:
- pass
-
- return opt_with_arg
-
-
- def __sub_short_with_long(self):
- """
- Required:
-
- nothing
-
- Returns:
-
- a new system string
-
- Logic:
-
- iterate through the system string and replace short options with long options
-
-
- """
- new_string = []
- sub_list = self.__short_long_dict.keys()
- for item in self.__system_string:
- if item in sub_list:
- item = self.__short_long_dict[item]
- new_string.append(item)
- return new_string
-
-
-
- def __pair_arg_with_option(self):
-
- """
-
- Required:
-
- nothing
-
- Returns
-
- nothing (changes value of self.__system_string)
-
- Logic:
-
- iterate through the system string, and match arguments with options:
-
- old_list = ['--foo', 'bar']
-
- new_list = ['--foo=bar'
-
- """
- opt_len = len(self.__system_string)
- new_system_string = []
- counter = 0
- slurp_value = 0
- for arg in self.__system_string:
-
- # previous value was an option with an argument, so this arg is
- # actually an argument that has already been added
- if slurp_value:
- slurp_value = 0
- continue
- counter += 1
-
- # not an option--an argument
- if arg[0] != '-':
- new_system_string.append(arg)
-
- # option and argument already paired
- elif '=' in arg:
- new_system_string .append(arg)
- else:
- # this option takes an argument
- if arg in self.__opt_with_args:
- # option is the last in the list
- if counter + 1 > opt_len:
- sys.stderr.write('option "%s" must take an argument\n' % arg)
- new_system_string.append(arg)
- self.__options_okay = 0
- else:
- # the next item in list is also an option
- if self.__system_string[counter][0] == '-':
- sys.stderr.write('option "%s" must take an argument\n' % arg)
- new_system_string.append(arg)
- self.__options_okay = 0
- # the next item in the list is the argument
- else:
- new_system_string.append(arg + '=' + self.__system_string[counter])
- slurp_value = 1
- # this option does not take an argument
- else:
- new_system_string.append(arg)
- return new_system_string
-
-
- def __get_just_options(self):
-
- """
-
- Requires:
-
- nothing
-
- Returns:
-
- list of options
-
- Logic:
-
- Iterate through the self.__system string, looking for the last
- option. The options are everything in the sysem string before the
- last option.
-
- Check to see that the options contain no arguments.
-
-
- """
- highest = 0
- counter = 0
- for item in self.__system_string:
- if item[0] == '-':
- highest = counter
- counter += 1
-
- just_options = self.__system_string[:highest + 1]
- arguments = self.__system_string[highest + 1:]
-
- for item in just_options:
- if item[0] != '-':
- sys.stderr.write('%s is an argument in an option list\n' % item)
- self.__options_okay = 0
- return just_options, arguments
-
-
- def __is_legal_option_func(self):
-
- """
- Requires:
-
- nothing
-
- Returns:
-
- nothing
-
- Logic:
-
- Check each value in the newly creatd options list to see if it
- matches what the user describes as a legal option.
-
-
- """
- illegal_options = []
- for arg in self.__system_string:
- if '=' in arg:
- temp_list = arg.split('=')
- arg = temp_list[0]
- if arg not in self.__legal_options and arg[0] == '-':
- illegal_options.append(arg)
-
- if illegal_options:
- self.__options_okay = 0
- sys.stderr.write('The following options are not permitted:\n')
- for not_legal in illegal_options:
- sys.stderr.write('%s\n' % not_legal)
-
-
- def __make_options_dict(self, options):
- options_dict = {}
- for item in options:
- if '=' in item:
- option, arg = item.split('=')
- else:
- option = item
- arg = None
-
- if option[0] == '-':
- option = option[1:]
- if option[0] == '-':
- option = option[1:]
-
- options_dict[option] = arg
-
- return options_dict
-
- def parse_options(self):
- self.__system_string = self.__sub_short_with_long()
- # # print 'subbed list is %s' % self.__system_string
- self.__system_string = self.__pair_arg_with_option()
- # # print 'list with pairing is %s' % self.__system_string
- options, arguments = self.__get_just_options()
- # # print 'options are %s ' % options
- # # print 'arguments are %s ' % arguments
- self.__is_legal_option_func()
- if self.__options_okay:
- options_dict = self.__make_options_dict(options)
- # # print options_dict
- return options_dict, arguments
-
- else:
- return 0,0
-
-
-
-
-if __name__ == '__main__':
- this_dict = {
- 'indents': [0, 'i'],
- 'output': [1, 'o'],
- }
- test_obj = ParseOptions(system_string = sys.argv,
- options_dict = this_dict
- )
-
- options, the_args = test_obj.parse_options()
-
- """
- this_options = ['--foo', '-o']
- this_opt_with_args = ['--foo']
-
- """
diff --git a/sandbox/paultremblay/docutils_nest/read_config.py b/sandbox/paultremblay/docutils_nest/read_config.py
deleted file mode 100644
index f7eaddaee..000000000
--- a/sandbox/paultremblay/docutils_nest/read_config.py
+++ /dev/null
@@ -1,144 +0,0 @@
-import os, re, sys, codecs
-
-import xml.sax.saxutils
-import xml.sax
-
-# turn on this line if you want to disablenamespaces
-##from xml.sax.handler import feature_namespaces
-
-
-config_values = {
- 'start_role' : ':',
- 'end_role' : ':',
- 'start_group' : '[',
- 'end_group' : ']',
- 'place_of_role' : 'inside',
- 'tag_name' : 'inline',
- 'warning' : 'problematic',
-
-}
-
-
-class ConfigHandler(xml.sax.saxutils.DefaultHandler):
- """
-
- Class for handling the XML file. SAX uses the methods in this class to
- handle the data.
-
-
- """
- def __init__(self):
-
- """
-
-
- Requires:
-
-
- Returns:
-
- nothing
-
-
- Logic:
-
-
- """
- self.__allowed = [
- 'start-role', 'end-role', 'start-group', 'end-group', 'place-of-role',
- 'tag-name', 'warning', 'configure'
- ]
-
-
-
- def startElement(self, name, attrs):
- """
-
- Logic:
-
- The SAX driver uses this function when if finds a beginning tag.
-
-
-
- """
- if name in self.__allowed:
- values = attrs.values()
- config_values[name] = values
-
- else:
- sys.stderr.write('%s not a valid option\n' % name)
-
-
- def characters(self, character):
- """
-
- Logic:
-
- The SAX driver uses this function when it finds text.
-
- """
- pass
-
-
-
- def endElement(self, name):
- """
-
- Logic:
-
-
- """
-
- pass
-
-
-
-
-class Configure:
-
- def __init__(self, file):
-
-
- """
-
-
- Requires:
-
-
-
- Returns:
-
-
- Logic:
-
- Set up a write object.
-
- Create an instance of the InlineHandler for sax to use.
-
- Pass this instance to the SAX driver.
-
- Use the SAX driver to handle the file.
-
-
- """
- file_exists = os.path.exists(file)
- if not file_exists:
- sys.stderr.write('file does not exist\n')
- sys.exit(1)
- self.__file = file
-
- def read_configs(self):
- parser = xml.sax.make_parser()
- # turn on this line if you want to disable namespaces
- ##parser.setFeature(feature_namespaces, 0)
- config_handler = ConfigHandler()
- parser.setContentHandler(config_handler)
- parser.parse(self.__file)
- return config_values
-
-
-
-if __name__ == '__main__':
- file = '/home/paul/docutils-extensions/configure.xml'
- obj = Configure(file)
- obj.read_configs()
diff --git a/sandbox/paultremblay/docutils_nest/scripts/docutils-nest-xml.py b/sandbox/paultremblay/docutils_nest/scripts/docutils-nest-xml.py
deleted file mode 100755
index 788f34190..000000000
--- a/sandbox/paultremblay/docutils_nest/scripts/docutils-nest-xml.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-import sys, os
-import docutils_nest.nest_utils
-import docutils_nest.rst_options
-
-
-def convert_file():
- options_dict = {
- 'output': [1]
- }
- opt_obj = docutils_nest.rst_options.OptionsRst(sys.argv, options_dict)
- inline_opts, args, doc_opts = opt_obj.parse_options()
- if inline_opts == 0:
- print_help_message()
- sys.stderr.write('Script will now quite because of illegal options\n')
- sys.exit(1)
- try:
- file = args[0]
- except IndexError:
- sys.stderr.write('You must provide a file for the script to convert.\n'
- 'Script will now quit'
- )
- sys.exit(1)
- output = inline_opts.get('output')
- if not output:
- sys.stderr.write('You must provide an output option for the script to work\n'
- 'Script will now quit\n'
- )
- sys.exit(1)
- convert_obj = docutils_nest.nest_utils.RstWithInline(file, output, docutils_opts = doc_opts)
- convert_obj.convert()
-
-if __name__ == '__main__':
- convert_file()
-
-
diff --git a/sandbox/paultremblay/docutils_nest/setup.py b/sandbox/paultremblay/docutils_nest/setup.py
deleted file mode 100644
index 88c123e55..000000000
--- a/sandbox/paultremblay/docutils_nest/setup.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python
-
-import os, sys
-from distutils.core import setup
-
-
-# get the location for the data
-var_file_exists = os.path.isfile('var_file')
-if not var_file_exists:
- sys.stderr.write('Please run python configure.py first\n')
- sys.exit(1)
-read_obj = open('var_file', 'r')
-lines = read_obj.readlines()
-target = lines[0]
-data_location = os.path.join(target, '.docutils_nest')
-read_obj.close()
-
-
-setup(name="docutils_nest",
- version=".1",
- description="Add nested inline markup to an rst file.",
- author="Paul Tremblay",
- author_email="phthenry@earthlink.net",
- packages=['docutils_nest'],
- data_files = [(data_location, ["data/configure.xml"])],
- scripts=["scripts/docutils-nest-xml.py"],
- )
-
diff --git a/sandbox/paultremblay/docutils_nest/test_files/test.txt b/sandbox/paultremblay/docutils_nest/test_files/test.txt
deleted file mode 100644
index 824823a33..000000000
--- a/sandbox/paultremblay/docutils_nest/test_files/test.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-Simple Doc
-^^^^^^^^^^
-
-:author: Paul Tremblay
-
-Start the body
-
-A paragraph with inline markup. [:comment: I should have read *The Sun Also Rises.*] Another sentence.
-
-A paragraph with deeper nesting inline markup. [:comment: I should have read *The Sun A/home/pusetup.pylso Rises* [:note: note text [:date: 6/01/03]]]
diff --git a/sandbox/paultremblay/rst_to_docbook/README.txt b/sandbox/paultremblay/rst_to_docbook/README.txt
deleted file mode 100644
index 426b8b6e2..000000000
--- a/sandbox/paultremblay/rst_to_docbook/README.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-The rst_to_docbook module translates an rst document to docbook. It
-uses XML tools, namely SAX and xslt.
diff --git a/sandbox/paultremblay/rst_to_docbook/configure.py b/sandbox/paultremblay/rst_to_docbook/configure.py
deleted file mode 100644
index 41070820b..000000000
--- a/sandbox/paultremblay/rst_to_docbook/configure.py
+++ /dev/null
@@ -1,138 +0,0 @@
-# /usr/bin/env python
-
-import sys, os
-import rst_to_docbook.options_trem
-
-"""
-
-The configuration script gets the target from the command line. It creates a
-file with the configuration variable, and a short script for the rest of
-script to be able to read and locate he configuration files.
-
-"""
-
-def configure():
- target, processor = get_target()
- if processor == None:
- sys.stderr.write('Since you need an xslt processor to run this script, the configuration will now quit\n'
- )
- try:
- os.remove('var_file')
- except:
- pass
- sys.exit(1)
- make_var_file(target)
- make_location(target)
- make_configuration_file(processor)
-
-def get_target():
- """
- This functions uses a module I wrote to parse options. If no options are
- determined on the command line, the function returnst the default
- /etc/nest_docutis
-
- """
- options_dict = {
- 'target': [1, 't'],
- 'processor': [1, 'p'],
- }
- options_obj = rst_to_docbook.options_trem.ParseOptions(sys.argv,
- options_dict)
- opt_dict, args = options_obj.parse_options()
- if opt_dict == 0:
- sys.stderr.write('invalid options for configure.py\n'
- 'use python configure --target <desired folder>'
- ' --processor <xslt proccessor>'
-
- )
- sys.exit(1)
- target = opt_dict.get('target')
- if not target:
- target = default_target()
- processor = opt_dict.get('processor')
- processor = determine_processor(processor)
- return target, processor
-
-def default_target():
- sys.stdout.write('using default \'/etc\' for the configuration directory\n')
- return '/etc'
-
-def determine_processor(processor = None):
- sys.stdout.write('determining xslt processor...\n')
- if processor == None:
- processor = 'xmllint'
- if processor == 'xalan':
- file = 'test_files/simple.xml'
- xsl_file = 'test_files/simple.xsl'
- output = 'output.xml'
- command = 'java org.apache.xalan.xslt.Process \
- -Ts -in %s -xsl %s -out %s' % (file, xsl_file, output)
- error = os.system(command)
- if error:
- sys.stderr.write('xalan does not appear to be set up correctly '
- ' on your system\n'
- 'The command "java org.apache.xalan.xslt.Process" failed\n'
- 'Is the CLASSPATH set for xalan?\n'
- 'Configuraton will now quit\n'
- )
- sys.exit(1)
- else:
- return 'xalan'
- elif processor == '4suite':
- try:
- from Ft.Xml import InputSource
- from Ft.Xml.Xslt.Processor import Processor
- return '4suite'
- except:
- sys.stderr.write('4suite does not appear to be set up correctly on your system\n'
- 'Could not find the Ft.Xml libraries\n'
- 'Script cannot work without an xslt procesor!\n'
- )
- sys.exit(1)
- elif processor == 'xsltproc' or processor == 'xmllint':
- try:
- import libxml2
- import libxslt
- return 'xmllint'
- except:
- sys.stderr.write('You either choose xmllint as your processor, or xmllint was tested because not other\n'
- 'processor was found\n'
- 'However, the libraries "libxml2" and or "libxslt" cannot be found.\n'
- )
-
- else:
- sys.stderr.write('The processor "%s" is not a valid choice for this script\n' % processor)
- return None
-
-
-
-
-def make_var_file(target):
- write_obj = open('var_file', 'w')
- # write_obj.write('[global]\n')
- write_obj.write(target)
- write_obj.close()
-
-def make_location(target):
- write_obj = open('rst_to_docbook/location.py', 'w')
- write_obj.write(
- """
-def get_location():
- return '%s'
-
-
- """
- % target)
-
-def make_configuration_file(processor):
- write_obj = open('data/configure.xml', 'w')
- write_obj.write("""
-<configuration>
- <xslt-processor processor = "%s"/>
-</configuration>
- """ % processor
- )
-
-if __name__ == '__main__':
- configure()
-
diff --git a/sandbox/paultremblay/rst_to_docbook/data/configure.xml b/sandbox/paultremblay/rst_to_docbook/data/configure.xml
deleted file mode 100644
index 4aa25c259..000000000
--- a/sandbox/paultremblay/rst_to_docbook/data/configure.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-<configuration>
- <xslt-processor processor = "xmllint"/>
-</configuration>
- \ No newline at end of file
diff --git a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names.xsl b/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names.xsl
deleted file mode 100644
index 04f365cd9..000000000
--- a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names.xsl
+++ /dev/null
@@ -1,117 +0,0 @@
-<!--WARNING TO PAUL: DON'T EDIT THIS FILE use update.py instead.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <!--
-
- This template changes field_name attributes to tags and attributes:
-
-
- -->
-
-
-
-
- <xsl:template match = "field">
- <xsl:element name = "{field_name/arguments[1]}">
- <xsl:if test= "field_name/arguments[2]">
- <xsl:attribute name = "{field_name/arguments[2]}">
- <xsl:value-of select = "field_name/arguments[3]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[4]">
- <xsl:attribute name = "{field_name/arguments[4]}">
- <xsl:value-of select = "field_name/arguments[5]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[6]">
- <xsl:attribute name = "{field_name/arguments[6]}">
- <xsl:value-of select = "field_name/arguments[7]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[8]">
- <xsl:attribute name = "{field_name/arguments[8]}">
- <xsl:value-of select = "field_name/arguments[9]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[10]">
- <xsl:attribute name = "{field_name/arguments[10]}">
- <xsl:value-of select = "field_name/arguments[11]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[12]">
- <xsl:attribute name = "{field_name/arguments[12]}">
- <xsl:value-of select = "field_name/arguments[13]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[14]">
- <xsl:attribute name = "{field_name/arguments[14]}">
- <xsl:value-of select = "field_name/arguments[15]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[16]">
- <xsl:attribute name = "{field_name/arguments[16]}">
- <xsl:value-of select = "field_name/arguments[17]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[18]">
- <xsl:attribute name = "{field_name/arguments[18]}">
- <xsl:value-of select = "field_name/arguments[19]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test= "field_name/arguments[20]">
- <xsl:attribute name = "{field_name/arguments[20]}">
- <xsl:value-of select = "field_name/arguments[21]"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match="inline">
- <xsl:if test="@arg1">
- <xsl:element name = "{@arg1}">
- <xsl:if test = "@arg2">
- <xsl:attribute name = "{@arg2}">
- <xsl:value-of select = "@arg3"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test = "@arg4">
- <xsl:attribute name = "{@arg4}">
- <xsl:value-of select="@arg5"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test = "@arg6">
- <xsl:attribute name = "{@arg6}">
- <xsl:value-of select = "@arg7"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:if test = "@arg8">
- <xsl:attribute name = "{@arg8}">
- <xsl:value-of select = "@arg9"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:if>
- </xsl:template>
-
-
- <xsl:template match = 'field_list'>
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "field_name"/>
-
- <xsl:template match = 'field_body'>
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()"/>
- </xsl:copy>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names_tokenize.xsl b/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names_tokenize.xsl
deleted file mode 100644
index 6de06c068..000000000
--- a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_field_names_tokenize.xsl
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--WARNING TO PAUL: DON'T EDIT THIS FILE use update.py instead.
--->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- version="1.0">
-
-<!--
-
-change the file name string into individual fiels for easier transformation later
-
-
--->
-
- <xsl:template match="field_name">
- <field_name>
- <xsl:call-template name="tokens"/>
- </field_name>
- </xsl:template>
-
-<xsl:template name="tokens">
- <xsl:param name="str" select="normalize-space(.)"/>
- <xsl:param name="sep" select="' '"/>
- <xsl:choose>
- <xsl:when test="contains($str,' ')">
- <xsl:call-template name="arguments">
- <xsl:with-param name="str" select="substring-before($str,' ')"/>
- </xsl:call-template>
- <xsl:value-of select="$sep"/>
- <xsl:call-template name="tokens">
- <xsl:with-param name="str" select="substring-after($str,' ')"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="arguments">
- <xsl:with-param name="str" select="$str"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name= "arguments">
- <xsl:param name="str" select="string(.)"/>
- <arguments>
- <xsl:value-of select = '$str'/>
- </arguments>
- </xsl:template>
-
-
-
-
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()"/>
- </xsl:copy>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_to_docbook.xsl b/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_to_docbook.xsl
deleted file mode 100644
index 18ab27fdd..000000000
--- a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStruct_to_docbook.xsl
+++ /dev/null
@@ -1,343 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <!--
-
- This template changed a XML document that has already been processed by docutils
- with the filed names template to docbook.
-
- -->
-
-
- <xsl:output method='xml' doctype-system='/home/paul/Documents/data/dtds/docbookx.dtd'/>
-
-
- <xsl:template match = "document">
- <TEI.2>
- <teiHeader>
- <fileDesc>
- <titleStmt>
- <xsl:choose>
- <xsl:when test='/document/title'>
- <xsl:apply-templates select = '/document/title' mode = 'keep'/>
- </xsl:when>
- <xsl:when test = '/document/docinfo/title'>
- <xsl:apply-templates select = '/document/docinfo/title'/>
- </xsl:when>
- </xsl:choose>
- <xsl:apply-templates select = "/document/docinfo/author"/>
- </titleStmt>
- <publicationStmt>
- <distributor>
- none
- </distributor>
- </publicationStmt>
- <sourceDesc>
- <p>no source--a manuscript</p>
- </sourceDesc>
-
- </fileDesc>
- <xsl:if test = "/document/docinfo/change">
- <revisionDesc>
- <xsl:apply-templates select = "/document/docinfo/change"/>
- </revisionDesc>
- </xsl:if>
-
- <!--
- <revisionDesc>
- </revisionDesc>
- -->
-
- </teiHeader>
- <text>
- <body>
- <xsl:apply-templates/>
- </body>
- </text>
- </TEI.2>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/change">
- <change>
- <xsl:apply-templates/>
- </change>
- </xsl:template>
-
-
-
- <!--info to delte-->
- <xsl:template match = "docinfo"/>
- <xsl:template match = "/document/title"/>
- <xsl:template match = "system_message"/>
- <xsl:template match = "literal"/>
- <xsl:template match = "substitution_definition"/>
- <xsl:template match = "transition"/>
- <xsl:template match = "substitution_definition"/>
-
-
- <!--Info to get rid of paragraph tags-->
- <xsl:template match = "p/paragraph|foreName/paragraph|surname/paragraph">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/author">
- <author>
- <xsl:apply-templates/>
- </author>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/change/date">
- <xsl:call-template name = 'my-date'/>
- <!--
- <date>
- <xsl:apply-templates/>
- </date>
- -->
- <respStmt>
- <resp>written by</resp>
- <name>
- Paul Tremblay
- </name>
- </respStmt>
- </xsl:template>
- <xsl:template match = "/document/docinfo/item">
- <item>
- <xsl:apply-templates/>
- </item>
- </xsl:template>
-
- <xsl:template match = "paragraph">
- <xsl:choose>
- <xsl:when test = "preceding-sibling::*[1]/self::transition">
-
- <!--
- <xsl:when test = "name(preceding-sibling::*[1])='transition'">
- -->
- <p rend="transition">
- <xsl:apply-templates/>
- </p>
- </xsl:when>
- <xsl:otherwise>
- <p>
- <xsl:apply-templates/>
- </p>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match = 'l/paragraph'>
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = 'date/paragraph|item/paragraph'>
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/title|/document/title" mode = 'keep'>
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
- <xsl:template match = "section">
- <xsl:element name = "div">
- <xsl:attribute name = 'rend'>
- <xsl:text>1</xsl:text>
- </xsl:attribute>
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match = "section/section">
- <xsl:element name = "div">
- <xsl:attribute name = 'rend'>
- <xsl:text>2</xsl:text>
- </xsl:attribute>
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = "section/section/section">
- <xsl:element name = "div">
- <xsl:attribute name = 'rend'>
- <xsl:text>3</xsl:text>
- </xsl:attribute>
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = "section/section/section/section">
- <xsl:element name = "div">
- <xsl:attribute name = 'rend'>
- <xsl:text>4</xsl:text>
- </xsl:attribute>
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = "section/section/section/section/section">
- <xsl:element name = "div">
- <xsl:attribute name = 'rend'>
- <xsl:text>5</xsl:text>
- </xsl:attribute>
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match="section/title">
- <head>
- <xsl:apply-templates/>
- </head>
- </xsl:template>
-
- <xsl:template match = 'reference'>
- <xsl:element name = "ref">
- <xsl:attribute name = "target">
- <xsl:value-of select = "@refid"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = 'target'>
- <xsl:element name= "anchor">
- <xsl:attribute name = "id">
- <xsl:value-of select = "@id"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "instant">
- <dateline>
- <date>
- <xsl:value-of select = "substring(.,0,11)"/>
- </date>
- <xsl:element name = "time">
- <xsl:attribute name = "value">
- <xsl:value-of select = "substring(.,12,8)"/>
- </xsl:attribute>
- <xsl:attribute name = 'zone'>
- <xsl:choose>
- <xsl:when test = 'substring(normalize-space(.),20,6)'>
- <xsl:value-of select = 'substring(normalize-space(.),20,6)'/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>-05:00</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:text>24hour</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </dateline>
- </xsl:template>
-
- <xsl:template name = "my-date">
- <xsl:element name = 'date'>
- <xsl:attribute name = 'value'>
- <xsl:value-of select = "substring(normalize-space(.),0,11)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
- <!--This is just and example of how to parse time?-->
- <xsl:template name = "my-time">
- <test>
- <xsl:value-of select='normalize-space(.)'/>
- </test>
- <xsl:element name = 'date'>
- <xsl:attribute name = 'value'>
- <xsl:value-of select = "substring(normalize-space(.),0,11)"/>
- </xsl:attribute>
- <xsl:attribute name = 'zone'>
- <xsl:choose>
- <xsl:when test = 'substring(normalize-space(.),12,13)'>
- <xsl:value-of select = 'substring(normalize-space(.),12,5)'/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>-05:00</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:text>24hour</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
- <xsl:template match = 'body'>
- <text>
- <body>
- <xsl:apply-templates/>
- </body>
- </text>
- </xsl:template>
-
- <xsl:template match = 'block_quote'>
- <q rend = "block">
- <xsl:apply-templates/>
- </q>
- </xsl:template>
-
- <xsl:template match = "comment">
- <xsl:comment>
- <xsl:value-of select = "."/>
- </xsl:comment>
- </xsl:template>
-
- <xsl:template match = "emphasis">
- <emph>
- <xsl:apply-templates/>
- </emph>
- </xsl:template>
-
- <xsl:template match = "enumerated_list">
- <list type="ordered">
- <xsl:apply-templates/>
- </list>
- </xsl:template>
-
- <xsl:template match = "list_item">
- <item>
- <xsl:apply-templates/>
- </item>
- </xsl:template>
-
-
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()"/>
- </xsl:copy>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStructure_to_docbook.xsl b/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStructure_to_docbook.xsl
deleted file mode 100644
index ec76bdd03..000000000
--- a/sandbox/paultremblay/rst_to_docbook/data/xslt_stylesheets/reStructure_to_docbook.xsl
+++ /dev/null
@@ -1,387 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <!--
-
- This template changed a XML document that has already been processed by docutils
- with the filed names template to docbook.
-
- -->
-
-
- <xsl:output method='xml' doctype-system='/home/paul/Documents/data/dtds/docbookx.dtd'/>
-
-
- <xsl:template match = "document">
- <article>
- <articleinfo>
- <xsl:apply-templates select = "/document/docinfo/author"/>
- <xsl:choose>
- <xsl:when test='/document/title'>
- <xsl:apply-templates select = '/document/title' mode = 'keep'/>
- </xsl:when>
- <xsl:when test = '/document/docinfo/title'>
- <xsl:apply-templates select = '/document/docinfo/title'/>
- </xsl:when>
- </xsl:choose>
-
-
- <xsl:if test = "/document/docinfo/revision">
- <revhistory>
- <xsl:apply-templates select = "/document/docinfo/revision"/>
- </revhistory>
- </xsl:if>
-
-
- </articleinfo>
- <xsl:apply-templates/>
- </article>
- </xsl:template>
-
-
- <xsl:template match = "/document/docinfo/author">
- <author>
- <xsl:apply-templates/>
- </author>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/author/firstname|/document/docinfo/author/first">
- <firstname>
- <xsl:apply-templates/>
- </firstname>
- </xsl:template>
-
-
- <xsl:template match = "/document/docinfo/author/surname">
- <surname>
- <xsl:apply-templates/>
- </surname>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/author/address|/document/docinfo/author/email">
- <email>
- <xsl:apply-templates/>
- </email>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/author/firstname/paragraph|/document/docinfo/author/surname/paragraph|document/docinfo/author/address/paragraph|/document/docinfo/author/first/paragraph|/document/docinfo/author/email/paragraph|/document/docinfo/author/address/pararaph">
- <xsl:apply-templates/>
- </xsl:template>
-
-
- <xsl:template match = "/document/docinfo/author/email/paragraph/reference|/document/docinfo/author/address/reference">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/revision">
- <revision>
- <xsl:apply-templates/>
- </revision>
- </xsl:template>
-
- <xsl:template match = "revremark/paragraph">
- <xsl:apply-templates/>
- </xsl:template>
-
-
-
- <!--info to delte-->
- <xsl:template match = "docinfo"/>
- <xsl:template match = "/document/title"/>
- <xsl:template match = "system_message"/>
- <xsl:template match = "literal"/>
- <xsl:template match = "substitution_definition"/>
- <xsl:template match = "transition"/>
- <xsl:template match = "substitution_definition"/>
- <xsl:template match = "system_warning"/>
-
-
- <!--Info to get rid of paragraph tags-->
- <xsl:template match = "p/paragraph|foreName/paragraph|surname/paragraph">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/author">
- <author>
- <xsl:apply-templates/>
- </author>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/revnumber">
- <revnumber>
- <xsl:apply-templates/>
- </revnumber>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/revision/revnumber/paragraph">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/revision/date">
- <date>
- <xsl:apply-templates/>
- </date>
- </xsl:template>
-
-
- <xsl:template match = "document/docinfo/revision/date/paragraph">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "/document/docinfo/revision/date_bogus">
- <xsl:call-template name = 'my-date'/>
- <!--
- <date>
- <xsl:apply-templates/>
- </date>
- -->
- <respStmt>
- <resp>written by</resp>
- <name>
- Paul Tremblay
- </name>
- </respStmt>
- </xsl:template>
- <xsl:template match = "/document/docinfo/item">
- <item>
- <xsl:apply-templates/>
- </item>
- </xsl:template>
-
- <xsl:template match = "paragraph">
- <xsl:choose>
- <xsl:when test = "preceding-sibling::*[1]/self::transition">
-
- <!--
- <xsl:when test = "name(preceding-sibling::*[1])='transition'">
- -->
- <para role="transition">
- <xsl:apply-templates/>
- </para>
- </xsl:when>
- <xsl:otherwise>
- <para>
- <xsl:apply-templates/>
- </para>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match = 'l/paragraph'>
- <xsl:apply-templates/>
- </xsl:template>
-
- <!--examples-->
-
- <xsl:template match = "example[@program]">
- <example>
- <xsl:apply-templates/>
- </example>
- </xsl:template>
- <xsl:template match = "example/title/paragraph">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "example[@program]/literal_block">
- <programlisting>
- <xsl:apply-templates/>
- </programlisting>
- </xsl:template>
-
- <xsl:template match = "literal_block">
- <literallayout>
- <xsl:apply-templates/>
- </literallayout>
- </xsl:template>
-
-
- <xsl:template match = "/document/docinfo/title|/document/title" mode = 'keep'>
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
- <xsl:template match = "section">
- <xsl:element name = "sect1">
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
-
- <xsl:template match = "section/section">
- <xsl:element name = "sect2">
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = "section/section/section">
- <xsl:element name = "sect3">
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = "section/section/section/section">
- <xsl:element name = "sect4">
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = "section/section/section/section/section">
- <xsl:element name = "sect5">
- <xsl:attribute name = 'id'>
- <xsl:value-of select = '@id'/>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:value-of select = "@name"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match="section/title">
- <title>
- <xsl:apply-templates/>
- </title>
- </xsl:template>
-
- <xsl:template match = 'reference'>
- <xsl:element name = "ref">
- <xsl:attribute name = "target">
- <xsl:value-of select = "@refid"/>
- </xsl:attribute>
- <xsl:apply-templates/>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match = 'target'>
- <xsl:element name= "anchor">
- <xsl:attribute name = "id">
- <xsl:value-of select = "@id"/>
- </xsl:attribute>
- </xsl:element>
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match = "instant">
- <dateline>
- <date>
- <xsl:value-of select = "substring(.,0,11)"/>
- </date>
- <xsl:element name = "time">
- <xsl:attribute name = "value">
- <xsl:value-of select = "substring(.,12,8)"/>
- </xsl:attribute>
- <xsl:attribute name = 'zone'>
- <xsl:choose>
- <xsl:when test = 'substring(normalize-space(.),20,6)'>
- <xsl:value-of select = 'substring(normalize-space(.),20,6)'/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>-05:00</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:text>24hour</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </dateline>
- </xsl:template>
-
- <xsl:template name = "my-date">
- <xsl:element name = 'date'>
- <xsl:attribute name = 'value'>
- <xsl:value-of select = "substring(normalize-space(.),0,11)"/>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
-
- <!--This is just and example of how to parse time?-->
- <xsl:template name = "my-time">
- <test>
- <xsl:value-of select='normalize-space(.)'/>
- </test>
- <xsl:element name = 'date'>
- <xsl:attribute name = 'value'>
- <xsl:value-of select = "substring(normalize-space(.),0,11)"/>
- </xsl:attribute>
- <xsl:attribute name = 'zone'>
- <xsl:choose>
- <xsl:when test = 'substring(normalize-space(.),12,13)'>
- <xsl:value-of select = 'substring(normalize-space(.),12,5)'/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>-05:00</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
- <xsl:attribute name = "type">
- <xsl:text>24hour</xsl:text>
- </xsl:attribute>
- </xsl:element>
- </xsl:template>
- <xsl:template match = 'body'>
- <text>
- <body>
- <xsl:apply-templates/>
- </body>
- </text>
- </xsl:template>
-
- <xsl:template match = 'block_quote'>
- <q rend = "block">
- <xsl:apply-templates/>
- </q>
- </xsl:template>
-
- <xsl:template match = "comment">
- <xsl:comment>
- <xsl:value-of select = "."/>
- </xsl:comment>
- </xsl:template>
-
- <xsl:template match = "emphasis">
- <emph>
- <xsl:apply-templates/>
- </emph>
- </xsl:template>
-
- <xsl:template match = "enumerated_list">
- <list type="ordered">
- <xsl:apply-templates/>
- </list>
- </xsl:template>
-
- <xsl:template match = "list_item">
- <item>
- <xsl:apply-templates/>
- </item>
- </xsl:template>
-
-
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()"/>
- </xsl:copy>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/__init__.py b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/__init__.py
deleted file mode 100644
index b3d0c915b..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-'''
-modules for rtf2xml
-'''
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/convert_rst_to_docbook.py b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/convert_rst_to_docbook.py
deleted file mode 100644
index 6634d86af..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/convert_rst_to_docbook.py
+++ /dev/null
@@ -1,194 +0,0 @@
-#!/usr/bin/env python
-
-# configure rst_2_dbk_dir by hand
-configure_dir = ''
-
-import sys, os, tempfile, codecs
-import docutils_nest.nest_utils
-import docutils_nest.rst_options
-import rst_to_docbook.xsl_convert, rst_to_docbook.location
-import rst_to_docbook.read_config
-
-"""
-Module for convert rst documents to docbook
-"""
-
-# read input file
-
-
-
-
-
-class ConvertRstToDoc:
-
- def __init__(self, doc_debug = 0):
- outer_dir = rst_to_docbook.location.get_location()
- self.__rst_2_dbk_dir = os.path.join(outer_dir, '.rst_to_docbook')
- config_file = os.path.join(self.__rst_2_dbk_dir, 'configure.xml')
- self.__xslt_processor = self.__get_configs(config_file)
- if doc_debug:
- self.__setup_debug()
- else:
- self.__debug = 0
-
-
-
- def __setup_debug(self):
- self.__debug_dir = os.path.join(self.__rst_2_dbk_dir, 'debug')
- if not (os.path.isdir(self.__debug_dir)):
- os.mkdir(self.__debug_dir)
- list_of_files = os.listdir(self.__debug_dir)
- sys.stdout.write('Removing files from %s...\n' % self.__debug_dir)
- for file in list_of_files:
- file = os.path.join(self.__debug_dir, file)
- sys.stdout.write('%s\n' % file)
- os.remove(file)
- self.__debug = 1
-
-
- def __get_configs(self, config_file):
- config_obj = rst_to_docbook.read_config.Configure(config_file)
- config_dict = config_obj.read_configs()
- processor = config_dict.get('xslt-processor')
- processor = processor[0]
- return processor
-
-
- def convert_to_docbook(self):
- # get file, output, and the docutils_options
- file, output, docutils_options = self.__handle_options()
- docutils_nest_file = tempfile.mktemp()
- main_temp_file = tempfile.mktemp()
- self.__convert_to_nest_utils( file,
- output = docutils_nest_file,
- docutils_options = docutils_options)
- self.__copy_file(docutils_nest_file, main_temp_file)
- if self.__debug:
- new_file = os.path.join(self.__debug_dir, 'converted_to_nest_utils_info')
- self.__copy_file(docutils_nest_file, new_file)
-
- os.remove(docutils_nest_file)
-
- # convert with first xslt
- converted_string_file = tempfile.mktemp()
- self.__string_to_attributes(main_temp_file, converted_string_file)
- self.__copy_file(converted_string_file, main_temp_file)
- if self.__debug:
- new_file = os.path.join(self.__debug_dir, 'converted_string_info')
- self.__copy_file(converted_string_file, new_file)
- os.remove(converted_string_file)
-
- # convert with second xslt
- converted_arg_file = tempfile.mktemp()
- self.__convert_args(main_temp_file, converted_arg_file)
- self.__copy_file(converted_arg_file, main_temp_file)
- if self.__debug:
- new_file = os.path.join(self.__debug_dir, 'converted_to_args_info')
- self.__copy_file(converted_arg_file, new_file)
- os.remove(converted_arg_file)
-
- # final convert with xslt
- docbook_file = tempfile.mktemp()
- self.__xsl_convert_to_docbook(main_temp_file, docbook_file)
- self.__copy_file(docbook_file, main_temp_file)
- if self.__debug:
- new_file = os.path.join(self.__debug_dir, 'converted_to_docbook_info')
- self.__copy_file(docbook_file, new_file)
- os.remove(docbook_file)
-
- # write to output
- self.__copy_file(main_temp_file, output)
- os.remove(main_temp_file)
-
-
- def __handle_options(self):
- options_dict = {
- 'output': [1],
- 'doc_debug': [],
- }
- opt_obj = docutils_nest.rst_options.OptionsRst(sys.argv, options_dict)
- inline_opts, args, doc_opts = opt_obj.parse_options()
- if inline_opts == 0:
- self.__print_help_message()
- sys.stderr.write('Script will now quite because of illegal options\n')
- sys.exit(1)
- try:
- file = args[0]
- except IndexError:
- sys.stderr.write('You must provide a file for the script to convert.\n'
- 'Script will now quit'
- )
- sys.exit(1)
- output = inline_opts.get('output')
- if not output:
- sys.stderr.write('You must provide an output option for the script to work\n'
- 'Script will now quit\n'
- )
- sys.exit(1)
- return file, output, doc_opts
-
- def __convert_to_nest_utils(self, file, output, docutils_options):
-
- sys.stdout.write('converting to nest-utils.xml ...\n')
- convert_obj = docutils_nest.nest_utils.RstWithInline(file, output, docutils_opts = docutils_options)
- convert_obj.convert()
-
- def __string_to_attributes(self, file, output):
- xsl_file = os.path.join(self.__rst_2_dbk_dir,
- 'xslt_stylesheets', 'reStruct_field_names_tokenize.xsl'
- )
- sys.stdout.write('converting string in nest-utils '
- 'with xslt...\n')
- trans_obj = rst_to_docbook.xsl_convert.XslConvert(processor = self.__xslt_processor)
- trans_obj.transform(file = file,
- xsl_file = xsl_file,
- output = output)
-
- def __convert_args(self, file, output):
- xsl_file = os.path.join(self.__rst_2_dbk_dir,
- 'xslt_stylesheets', 'reStruct_field_names.xsl'
- )
- sys.stdout.write('converting args in nest-utils '
- 'with xslt...\n')
- trans_obj = rst_to_docbook.xsl_convert.XslConvert(processor = self.__xslt_processor)
- trans_obj.transform(file = file,
- xsl_file = xsl_file,
- output = output)
- def __xsl_convert_to_docbook(self, file, output):
- sys.stdout.write('doing final converstion with xslt...\n')
- xsl_file = os.path.join(self.__rst_2_dbk_dir,
- 'xslt_stylesheets', 'reStructure_to_docbook.xsl'
- )
- # reStructure_to_docbook.xsl
- trans_obj = rst_to_docbook.xsl_convert.XslConvert(processor = self.__xslt_processor)
- trans_obj.transform(file = file,
- xsl_file = xsl_file,
- output = output)
-
- def __copy_file(self, file, output):
- (utf8_encode, utf8_decode, utf8_reader, utf8_writer) = codecs.lookup("utf-8")
- write_obj = utf8_writer(open(output, 'w'))
- read_obj = open(file, 'r')
- line = 1
- while line:
- line = read_obj.readline()
- write_obj.write(line)
- read_obj.close()
- write_obj.close()
-
- def __print_help_message(self):
- sys.stderr.write('script will now quit')
- sys.exit(1)
-
-if __name__ == '__main__':
- if len(sys.argv) == 1:
- file = '/home/paul/Documents/in_progress/cvs/sandbox/paultremblay/rst_to_docbook/test_files/test_simple.rst'
- file = '/home/paul/Documents/in_progress/cvs/sandbox/paultremblay/rst_to_docbook/test_files/reStructure_docbook_example.rst'
- sys.argv.append('--indents')
- sys.argv.append('--doc_debug')
- sys.argv.append('--output')
- sys.argv.append('output.xml')
- sys.argv.append('%s' % file)
- test_obj = ConvertRstToDoc(doc_debug = 1)
- test_obj.convert_to_docbook()
-
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/location.py b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/location.py
deleted file mode 100644
index c74dd5ecf..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/location.py
+++ /dev/null
@@ -1,6 +0,0 @@
-
-def get_location():
- return '/etc'
-
-
- \ No newline at end of file
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/options_trem.py b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/options_trem.py
deleted file mode 100644
index 7176b165d..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/options_trem.py
+++ /dev/null
@@ -1,387 +0,0 @@
-# WARNING TO PAUL: DON'T EDIT THIS FILE use update.py instead.
-import sys
-class ParseOptions:
-
- """
-
- Requires:
-
- system_string --The string from the command line
-
- options_dict -- a dictionary with the key equal to the opition, and
- a list describing that option. (See below)
-
-
- Returns:
-
- A tupple. The first item in the tupple is a dictionary containing
- the arguments for each options. The second is a list of the
- arguments.
-
- If invalid options are passed to the module, 0,0 is returned.
-
- Examples:
-
- Your script has the option '--indents', and '--output=file'.
-
- You want to give short option names as well:
-
- --i and -o=file
-
- Use this:
-
- options_dict = {'output': [1, 'o'],
- 'indents': [0, 'i']
- }
-
- options_obj = ParseOptions(
- system_string = sys.argv,
- options_dict = options_dict
- )
-
- options, arguments = options_obj.parse_options()
- print options
- print arguments
-
- The result will be:
-
-
- {indents:None, output:'/home/paul/file'}, ['/home/paul/input']
-
-
- """
- def __init__(self, system_string, options_dict):
- self.__system_string = system_string[1:]
- long_list = self.__make_long_list_func(options_dict)
- # # print long_list
- short_list = self.__make_short_list_func(options_dict)
- # # print short_list
- self.__legal_options = long_list + short_list
- # # print self.__legal_options
- self.__short_long_dict = self.__make_short_long_dict_func(options_dict)
- # # print self.__short_long_dict
- self.__opt_with_args = self.__make_options_with_arg_list(options_dict)
- # # print self.__opt_with_args
- self.__options_okay = 1
-
-
-
- def __make_long_list_func(self, options_dict):
- """
- Required:
-
- options_dict -- the dictionary mapping options to a list
-
- Returns:
-
- a list of legal options
-
-
-
-
- """
- legal_list = []
- keys = options_dict.keys()
- for key in keys:
- key = '--' + key
- legal_list.append(key)
- return legal_list
-
- def __make_short_list_func(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a list of legal short options
-
- """
- legal_list = []
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- legal_list.append('-' + values[1])
- except IndexError:
- pass
-
- return legal_list
-
-
-
- def __make_short_long_dict_func(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a dictionary with keys of short options and values of long options
-
- """
- short_long_dict = {}
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- short = '-' + values[1]
- long = '--' + key
- short_long_dict[short] = long
- except IndexError:
- pass
-
- return short_long_dict
-
- def __make_options_with_arg_list(self, options_dict):
- """
- Required:
-
- options_dict --the dictionary mapping options to a list
-
- Returns:
-
- a list of options that take arguments.
-
- """
- opt_with_arg = []
- keys = options_dict.keys()
- for key in keys:
- values = options_dict[key]
- try:
- if values[0]:
- opt_with_arg.append('--' + key)
- except IndexError:
- pass
-
- return opt_with_arg
-
-
- def __sub_short_with_long(self):
- """
- Required:
-
- nothing
-
- Returns:
-
- a new system string
-
- Logic:
-
- iterate through the system string and replace short options with long options
-
-
- """
- new_string = []
- sub_list = self.__short_long_dict.keys()
- for item in self.__system_string:
- if item in sub_list:
- item = self.__short_long_dict[item]
- new_string.append(item)
- return new_string
-
-
-
- def __pair_arg_with_option(self):
-
- """
-
- Required:
-
- nothing
-
- Returns
-
- nothing (changes value of self.__system_string)
-
- Logic:
-
- iterate through the system string, and match arguments with options:
-
- old_list = ['--foo', 'bar']
-
- new_list = ['--foo=bar'
-
- """
- opt_len = len(self.__system_string)
- new_system_string = []
- counter = 0
- slurp_value = 0
- for arg in self.__system_string:
-
- # previous value was an option with an argument, so this arg is
- # actually an argument that has already been added
- counter += 1
- if slurp_value:
- slurp_value = 0
- continue
-
- # not an option--an argument
- if arg[0] != '-':
- new_system_string.append(arg)
-
- # option and argument already paired
- elif '=' in arg:
- new_system_string .append(arg)
- else:
- # this option takes an argument
- if arg in self.__opt_with_args:
- # option is the last in the list
- if counter + 1 > opt_len:
- sys.stderr.write('option "%s" must take an argument\n' % arg)
- new_system_string.append(arg)
- self.__options_okay = 0
- else:
- # the next item in list is also an option
- if self.__system_string[counter][0] == '-':
- sys.stderr.write('option "%s" must take an argument\n' % arg)
- new_system_string.append(arg)
- self.__options_okay = 0
- # the next item in the list is the argument
- else:
- new_system_string.append(arg + '=' + self.__system_string[counter])
- slurp_value = 1
- # this option does not take an argument
- else:
- new_system_string.append(arg)
- return new_system_string
-
-
- def __get_just_options(self):
-
- """
-
- Requires:
-
- nothing
-
- Returns:
-
- list of options
-
- Logic:
-
- Iterate through the self.__system string, looking for the last
- option. The options are everything in the sysem string before the
- last option.
-
- Check to see that the options contain no arguments.
-
-
- """
- highest = 0
- counter = 0
- found_options = 0
- for item in self.__system_string:
- if item[0] == '-':
- highest = counter
- found_options = 1
- counter += 1
-
- if found_options:
- just_options = self.__system_string[:highest + 1]
- arguments = self.__system_string[highest + 1:]
- else:
- just_options = []
- arguments = self.__system_string
-
- if found_options:
- for item in just_options:
- if item[0] != '-':
- sys.stderr.write('%s is an argument in an option list\n' % item)
- self.__options_okay = 0
- return just_options, arguments
-
-
- def __is_legal_option_func(self):
-
- """
- Requires:
-
- nothing
-
- Returns:
-
- nothing
-
- Logic:
-
- Check each value in the newly creatd options list to see if it
- matches what the user describes as a legal option.
-
-
- """
- illegal_options = []
- for arg in self.__system_string:
- if '=' in arg:
- temp_list = arg.split('=')
- arg = temp_list[0]
- if arg not in self.__legal_options and arg[0] == '-':
- illegal_options.append(arg)
-
- if illegal_options:
- self.__options_okay = 0
- sys.stderr.write('The following options are not permitted:\n')
- for not_legal in illegal_options:
- sys.stderr.write('%s\n' % not_legal)
-
-
- def __make_options_dict(self, options):
- options_dict = {}
- for item in options:
- if '=' in item:
- option, arg = item.split('=')
- else:
- option = item
- arg = None
-
- if option[0] == '-':
- option = option[1:]
- if option[0] == '-':
- option = option[1:]
-
- options_dict[option] = arg
-
- return options_dict
-
- def parse_options(self):
- self.__system_string = self.__sub_short_with_long()
- # # print 'subbed list is %s' % self.__system_string
- self.__system_string = self.__pair_arg_with_option()
- # # print 'list with pairing is %s' % self.__system_string
- options, arguments = self.__get_just_options()
- # # print 'options are %s ' % options
- # # print 'arguments are %s ' % arguments
- self.__is_legal_option_func()
- if self.__options_okay:
- options_dict = self.__make_options_dict(options)
- # # print options_dict
- return options_dict, arguments
-
- else:
- return 0,0
-
-
-
-
-if __name__ == '__main__':
- this_dict = {
- 'indents': [0, 'i'],
- 'output': [1, 'o'],
- 'test3': [1, 't'],
- }
- test_obj = ParseOptions(system_string = sys.argv,
- options_dict = this_dict
- )
-
- options, the_args = test_obj.parse_options()
- print options, the_args
-
- """
- this_options = ['--foo', '-o']
- this_opt_with_args = ['--foo']
-
- """
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/output.xml b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/output.xml
deleted file mode 100644
index 222f109c0..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/output.xml
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE TEI.2 SYSTEM "/home/paul/Documents/data/dtds/docbookx.dtd">
-<TEI.2><teiHeader><fileDesc><titleStmt><title>
- Example of reStructure document that can be converted to docbook
- </title><author>
-
-
-
- <first>
-
-
- <p>
- Paul
- </p>
-
- </first>
- <surname>
-
-
-
- Tremblay
-
-
- </surname>
- <email>
-
-
- <p>
- <ref target="">
- phthenry@earthlink.net
- </ref>
- </p>
-
- </email>
-
-
-
- </author></titleStmt><publicationStmt><distributor>
- none
- </distributor></publicationStmt><sourceDesc><p>no source--a manuscript</p></sourceDesc></fileDesc></teiHeader><text><body>
-
-
- <!--
- author: Paul Tremblay Won't work like that
- -->
- <!--
- start body
- -->
- <div rend="1" id="using-snippets-of-code" type="using snippets of code">
- <head>
- Using snippets of code
- </head>
- <p>
- How to represent a snippet of code:
- </p>
-
- <example program="">
-
-
-
- <title>
-
-
- <p>
- Processing a variable
- </p>
-
- </title>
-
- <literal_block xml:space="preserve">
- if var = 5
- self.__process(var)
- </literal_block>
-
- </example>
-
- <p>
- Keep in mind that the docbook should look like:
- </p>
- <literal_block xml:space="preserve">
- &lt;example&gt;
- &lt;title&gt;A formal example&lt;/title&gt;
- &lt;programlisting&gt;
- if var = 5
- self.__process(var)
- &lt;/programlisting&gt;
-&lt;/example&gt;
- </literal_block>
- <!--
- end of example
- -->
- </div>
-</body></text></TEI.2>
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/read_config.py b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/read_config.py
deleted file mode 100644
index 187ab1a48..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/read_config.py
+++ /dev/null
@@ -1,131 +0,0 @@
-import os, re, sys, codecs
-
-import xml.sax.saxutils
-import xml.sax
-
-# turn on this line if you want to disablenamespaces
-##from xml.sax.handler import feature_namespaces
-
-config_values = {}
-
-
-
-class ConfigHandler(xml.sax.saxutils.DefaultHandler):
- """
-
- Class for handling the XML file. SAX uses the methods in this class to
- handle the data.
-
-
- """
- def __init__(self):
-
- """
-
-
- Requires:
-
-
- Returns:
-
- nothing
-
-
- Logic:
-
-
- """
- self.__allowed = [ 'configuration', 'xslt-processor', ]
-
-
-
- def startElement(self, name, attrs):
- """
-
- Logic:
-
- The SAX driver uses this function when if finds a beginning tag.
-
-
-
- """
- if name in self.__allowed:
- values = attrs.values()
- config_values[name] = values
-
- else:
- sys.stderr.write('%s not a valid option\n' % name)
-
-
- def characters(self, character):
- """
-
- Logic:
-
- The SAX driver uses this function when it finds text.
-
- """
- pass
-
-
-
- def endElement(self, name):
- """
-
- Logic:
-
-
- """
-
- pass
-
-
-
-
-class Configure:
-
- def __init__(self, file):
-
-
- """
-
-
- Requires:
-
-
-
- Returns:
-
-
- Logic:
-
- Set up a write object.
-
- Create an instance of the InlineHandler for sax to use.
-
- Pass this instance to the SAX driver.
-
- Use the SAX driver to handle the file.
-
-
- """
- file_exists = os.path.exists(file)
- if not file_exists:
- raise IOError, 'file %s does not exist' % file
- self.__file = file
-
- def read_configs(self):
- parser = xml.sax.make_parser()
- # turn on this line if you want to disable namespaces
- ##parser.setFeature(feature_namespaces, 0)
- config_handler = ConfigHandler()
- parser.setContentHandler(config_handler)
- parser.parse(self.__file)
- return config_values
-
-
-
-if __name__ == '__main__':
- file = '/home/paul/docutils-extensions/configure.xml'
- obj = Configure(file)
- obj.read_configs()
diff --git a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/xsl_convert.py b/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/xsl_convert.py
deleted file mode 100644
index 3fba134a3..000000000
--- a/sandbox/paultremblay/rst_to_docbook/rst_to_docbook/xsl_convert.py
+++ /dev/null
@@ -1,145 +0,0 @@
-# WARNING TO PAUL: DON'T EDIT THIS FILE use update.py instead.
-import sys, os, tempfile
-
-
-
-
-"""
-
-
-"""
-
-
-class XslConvert:
-
- def __init__(self, processor = 'xsltproc'):
-
- """
-
-
-
- """
- self.__determine_processor(processor)
-
-
-
- def __determine_processor(self, processor):
- if processor == 'xsltproc' or processor == 'xmllint':
- self.__processor = 'xmllint'
- elif processor == '4suite':
- self.__processor = '4suite'
- elif processor == 'xalan':
- self.__processor = 'xalan'
- else:
- sys.stderr.write('%s not a valid processor choice\n' % processor)
- sys.exit(1)
-
- def transform(self, file, xsl_file, output, params = {}):
- """
- Requires:
-
- file -- the file to parse
-
- xsl_file --the xsl style sheet
-
- Returns:
-
- nothing
-
- Logic:
-
- Check for the existence of the files and the stylesheet. Determine
- the processor to be used, and let the othe methods do the processing.
-
- """
-
- if not (os.path.exists(file)):
- sys.stderr.write('"%s" does not exist\n' % file)
- sys.exit(1)
- if not (os.path.exists(xsl_file)):
- sys.stderr.write('"%s" does not exist\n' % xsl_file)
- sys.exit(1)
-
- if self.__processor == 'xmllint':
- self.__transform_xmllint(file, xsl_file, output, params)
- if self.__processor == 'xalan':
- self.__transform_xalan(file, xsl_file, output, params)
-
- elif self.__processor == '4suite':
- self.__transform_4suite(file, xsl_file, output, params)
-
- def __transform_xmllint(self, file, xsl_file, output, params = {}):
- import libxml2
- import libxslt
-
- new_params = {}
- keys = params.keys()
- for key in keys:
- new_params[key] = '"%s"' % params[key]
- params = new_params
-
-
-
- xml_doc = file
- # parse stylesheet
- styledoc = libxml2.parseFile(xsl_file)
- style = libxslt.parseStylesheetDoc(styledoc)
- # parse doc
- doc = libxml2.parseFile(xml_doc)
- result = style.applyStylesheet(doc, params)
- style.saveResultToFilename(output, result, 0)
- style.freeStylesheet()
- doc.freeDoc()
- result.freeDoc()
-
-
-
- def __transform_4suite(self, file, xsl_file, output, params):
-
- import codecs
- from Ft.Xml import InputSource
- from Ft.Xml.Xslt.Processor import Processor
-
- document = InputSource.DefaultFactory.fromUri(file)
- stylesheet = InputSource.DefaultFactory.fromUri(xsl_file)
- # there's also a fromString() method
-
- processor = Processor()
- processor.appendStylesheet(stylesheet)
- result = processor.run(document, topLevelParams=params)
- (utf8_encode, utf8_decode, utf8_reader, utf8_writer) = codecs.lookup("utf-8")
- write_obj = utf8_writer(open(output, 'w'))
- write_obj.write(result)
- write_obj.close()
-
- def __transform_xalan(self, file, xsl_file, output, params):
- command = 'java org.apache.xalan.xslt.Process \
- -Ts -in %s -xsl %s -out %s' % (file, xsl_file, output)
-
- param_string = ''
- keys = params.keys()
- for key in keys:
- param_string += ' %s "%s"' % (key, params[key])
-
- command += ' -PARAM %s' % param_string
- print command
- os.system(command)
-
-
-
-if __name__ == '__main__':
- test_xml_dir = '/home/paul/lib/python/xml_tools_trem/test_files/xml_files'
- test_xsl_dir = '/home/paul/lib/python/xml_tools_trem/test_files/xsl_stylesheets'
- output_dir = '/home/paul/paultemp'
-
- file = 'simple.xml'
- xsl_file = 'simple1.xsl'
- output = 'output.xml'
-
-
- test_file = os.path.join(test_xml_dir, file)
- test_xsl = os.path.join(test_xsl_dir, xsl_file)
- test_output = os.path.join(output_dir, output)
-
- test_obj = XslConvert('xalan')
- test_obj.transform (test_file, test_xsl, test_output, params = {'test-param': 'changed in xalan'})
diff --git a/sandbox/paultremblay/rst_to_docbook/scripts/rst2docbook.py b/sandbox/paultremblay/rst_to_docbook/scripts/rst2docbook.py
deleted file mode 100644
index ccc52fa15..000000000
--- a/sandbox/paultremblay/rst_to_docbook/scripts/rst2docbook.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python
-import sys, os
-import rst_to_docbook.convert_rst_to_docbook
-import rst_to_docbook.options_trem
-
-class Convert:
-
- def __init__(self):
- pass
-
- def convert(self):
- debug_doc = self.__parse_options()
-
- convert_obj = rst_to_docbook.convert_rst_to_docbook.ConvertRstToDoc(doc_debug = debug_doc)
- convert_obj.convert_to_docbook()
-
- def __parse_options(self):
- if '--debug-doc' in sys.argv:
- sys.argv.remove('--debug-doc')
- return 1
- return 0
-
-if __name__ == '__main__':
- execute_obj = Convert()
- execute_obj.convert()
diff --git a/sandbox/paultremblay/rst_to_docbook/setup.py b/sandbox/paultremblay/rst_to_docbook/setup.py
deleted file mode 100644
index 4a93d0880..000000000
--- a/sandbox/paultremblay/rst_to_docbook/setup.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-import sys, os
-from distutils.core import setup
-
-from distutils.core import setup
-
-
-# get the location for the data
-var_file_exists = os.path.isfile('var_file')
-if not var_file_exists:
- sys.stderr.write('Please run python configure.py first\n')
- sys.exit(1)
-read_obj = open('var_file', 'r')
-lines = read_obj.readlines()
-data_location = lines[0]
-data_xslt_location = os.path.join(data_location, '.rst_to_docbook', 'xslt_stylesheets')
-data_config_location = os.path.join(data_location, '.rst_to_docbook')
-read_obj.close()
-
-
-
-setup(name="rst_to_docbook",
- version=".1",
- description="convert rst to docbook.",
- author="Paul Tremblay",
- author_email="phthenry@earthlink.net",
- packages=['rst_to_docbook'],
- data_files = [(data_xslt_location,
- [
- 'data/xslt_stylesheets/reStruct_field_names_tokenize.xsl',
- 'data/xslt_stylesheets/reStruct_field_names.xsl',
- 'data/xslt_stylesheets/reStruct_to_docbook.xsl',
- 'data/xslt_stylesheets/reStructure_to_docbook.xsl'
- ]
- ),
- (data_config_location, ['data/configure'])
-
- ],
- scripts=["scripts/rst2docbook.py"],
- )
-
-## os.remove('var_file')
-
-
diff --git a/sandbox/paultremblay/rst_to_docbook/test_files/reStructure_docbook_example.rst b/sandbox/paultremblay/rst_to_docbook/test_files/reStructure_docbook_example.rst
deleted file mode 100644
index 304f8f4ab..000000000
--- a/sandbox/paultremblay/rst_to_docbook/test_files/reStructure_docbook_example.rst
+++ /dev/null
@@ -1,65 +0,0 @@
-.. WARNING TO PAUL: DON'T EDIT THIS FILE use update.py instead.
-Example of reStructure document that can be converted to docbook
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. author: Paul Tremblay Won't work like that
-
-:author:
-
- :first: Paul
-
- :surname: Tremblay
-
- :email: phthenry@earthlink.net
-
-
-:revision:
-
- :revnumber: 01
-
- :date: 2003-04-24
-
- :revremark: When I first started writing this document.
-
-:revision:
-
- :revnumber: 02
-
- :date: 2003-05-01
-
- :revremark: Made the following changes
-
-.. start body
-
-========================
-Using snippets of code
-========================
-
-How to represent a snippet of code:
-
-:example program:
-
- :title: Processing a variable
-
- ::
-
- if var = 5
- self.__process(var)
-
-
-Keep in mind that the docbook should look like:
-
-::
-
- <example>
- <title>A formal example</title>
- <programlisting>
- if var = 5
- self.__process(var)
- </programlisting>
- </example>
-
-.. end of example
-
-
-
diff --git a/sandbox/paultremblay/rst_to_docbook/test_files/simple.xml b/sandbox/paultremblay/rst_to_docbook/test_files/simple.xml
deleted file mode 100644
index 16b68e755..000000000
--- a/sandbox/paultremblay/rst_to_docbook/test_files/simple.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<doc>
- <element1>text</element1>
-</doc>
diff --git a/sandbox/paultremblay/rst_to_docbook/test_files/simple.xsl b/sandbox/paultremblay/rst_to_docbook/test_files/simple.xsl
deleted file mode 100644
index 8e15469c1..000000000
--- a/sandbox/paultremblay/rst_to_docbook/test_files/simple.xsl
+++ /dev/null
@@ -1,18 +0,0 @@
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
- <!--
-
- This template is a simple test
-
-
- -->
-
-
-
-
- <xsl:template match = "element1">
- <element1-changed>
- <xsl:apply-templates/>
- </element1-changed>
- </xsl:template>
-
-</xsl:stylesheet>
diff --git a/sandbox/paultremblay/rst_to_docbook/test_files/test_simple.rst b/sandbox/paultremblay/rst_to_docbook/test_files/test_simple.rst
deleted file mode 100644
index c314721ba..000000000
--- a/sandbox/paultremblay/rst_to_docbook/test_files/test_simple.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-.. simple test file
-
-:author: Paul Tremblay
-
-Main body
-
-:custom-field arg1 arg2:
-
- body of block custom field
-
- more body [:role arg1 arg2: inline [:role2 arg1 arg2: more inline]] last of body
diff --git a/sandbox/pobrien/LinuxFormat/LXFwriter.py b/sandbox/pobrien/LinuxFormat/LXFwriter.py
deleted file mode 100644
index 13e39d3d8..000000000
--- a/sandbox/pobrien/LinuxFormat/LXFwriter.py
+++ /dev/null
@@ -1,984 +0,0 @@
-"""Linux Format writer."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-
-__docformat__ = 'reStructuredText'
-
-
-import sys
-import os
-import time
-import re
-from types import ListType
-
-import docutils
-from docutils import nodes, utils, writers, languages
-
-
-class Writer(writers.Writer):
-
- supported = ('lxf', 'LinuxFormat')
- """Formats this writer supports."""
-
- output = None
- """Final translated form of `document`."""
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = Translator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
-
-
-class Translator(nodes.NodeVisitor):
- """Produces Linux Format Magazine output."""
-
- words_and_spaces = re.compile(r'\S+| +|\n')
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.settings = settings = document.settings
- lcode = settings.language_code
- self.language = languages.get_language(lcode)
- self.head = []
- self.body = []
- self.foot = []
- self.part = self.body
- self.section_level = 0
- self.context = []
- self.topic_class = ''
- self.colspecs = []
- self.compact_p = 1
- self.compact_simple = None
- self.in_bullet_list = False
- self.in_docinfo = False
- self.in_sidebar = False
- self.sidebar_start = False
- self.filterNewlines = True
-
- def astext(self):
- """Return the final formatted document as a string."""
- return ''.join(self.head + ['\n///BODY COPY START///'] +
- self.body + ['///END BODY COPY///\n'] + self.foot)
-
- def encode(self, text):
- if self.filterNewlines:
- text = text.replace('\n', ' ')
- return text
-
- def visit_Text(self, node):
- self.part.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
- def visit_address(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'address', meta=None)
-
- def depart_address(self, node):
- self.depart_docinfo_item()
-
- def visit_admonition(self, node, name):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'div', CLASS=name))
- self.part.append('<p class="admonition-title">'
- + self.language.labels[name] + '</p>\n')
-
- def depart_admonition(self):
- raise NotImplementedError, node.astext()
- self.part.append('</div>\n')
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
- def visit_author(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'author')
-
- def depart_author(self, node):
- self.depart_docinfo_item()
-
- def visit_authors(self, node):
- pass
-
- def depart_authors(self, node):
- pass
-
- def visit_block_quote(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'blockquote'))
-
- def depart_block_quote(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</blockquote>\n')
-
- def check_simple_list(self, node):
- raise NotImplementedError, node.astext()
- """Check for a simple list that can be rendered compactly."""
- visitor = SimpleListChecker(self.document)
- try:
- node.walk(visitor)
- except nodes.NodeFound:
- return None
- else:
- return 1
-
- def visit_bullet_list(self, node):
- self.in_bullet_list = True
-
- def depart_bullet_list(self, node):
- self.in_bullet_list = False
-
- def visit_caption(self, node):
- self.part.append('\n///CAPTION///')
- self.visit_paragraph(node)
-
- def depart_caption(self, node):
- self.depart_paragraph(node)
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'table', CLASS='citation',
- frame="void", rules="none"))
- self.part.append('<colgroup><col class="label" /><col /></colgroup>\n'
- '<col />\n'
- '<tbody valign="top">\n'
- '<tr>')
- self.footnote_backrefs(node)
-
- def depart_citation(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_citation_reference(self, node):
- raise NotImplementedError, node.astext()
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.part.append(self.starttag(node, 'a', '[', href=href,
- CLASS='citation-reference'))
-
- def depart_citation_reference(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(']</a>')
-
- def visit_classifier(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(' <span class="classifier-delimiter">:</span> ')
- self.part.append(self.starttag(node, 'span', '', CLASS='classifier'))
-
- def depart_classifier(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</span>')
-
- def visit_colspec(self, node):
- self.colspecs.append(node)
-
- def depart_colspec(self, node):
- pass
-
- def write_colspecs(self):
- raise NotImplementedError, node.astext()
- width = 0
- for node in self.colspecs:
- width += node['colwidth']
- for node in self.colspecs:
- colwidth = int(node['colwidth'] * 100.0 / width + 0.5)
- self.part.append(self.emptytag(node, 'col',
- width='%i%%' % colwidth))
- self.colspecs = []
-
- def visit_comment(self, node):
- raise nodes.SkipNode
-
- def visit_contact(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'contact', meta=None)
-
- def depart_contact(self, node):
- self.depart_docinfo_item()
-
- def visit_copyright(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'copyright')
-
- def depart_copyright(self, node):
- self.depart_docinfo_item()
-
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger')
-
- def depart_danger(self, node):
- self.depart_admonition()
-
- def visit_date(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'date')
-
- def depart_date(self, node):
- self.depart_docinfo_item()
-
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</dt>\n')
- self.part.append(self.starttag(node, 'dd', ''))
- if len(node):
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_definition(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</dd>\n')
-
- def visit_definition_list(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</dl>\n')
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'td', ''))
- if len(node):
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_description(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</td>')
-
- def visit_docinfo(self, node):
- self.in_docinfo = True
-
- def depart_docinfo(self, node):
- self.in_docinfo = False
-
- def visit_docinfo_item(self, node, name, meta=1):
- raise NotImplementedError, node.astext()
- if meta:
- self.head.append('<meta name="%s" content="%s" />\n'
- % (name, self.attval(node.astext())))
- self.part.append(self.starttag(node, 'tr', ''))
- self.part.append('<th class="docinfo-name">%s:</th>\n<td>'
- % self.language.labels[name])
- if len(node):
- if isinstance(node[0], nodes.Element):
- node[0].set_class('first')
- if isinstance(node[0], nodes.Element):
- node[-1].set_class('last')
-
- def depart_docinfo_item(self):
- raise NotImplementedError, node.astext()
- self.part.append('</td></tr>\n')
-
- def visit_doctest_block(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'pre', CLASS='doctest-block'))
-
- def depart_doctest_block(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('\n</pre>\n')
-
- def visit_document(self, node):
- pass
-
- def depart_document(self, node):
- pass
-
- def visit_emphasis(self, node):
- self.part.append('/')
-
- def depart_emphasis(self, node):
- self.part.append('/')
-
- def visit_entry(self, node):
- raise NotImplementedError, node.astext()
- if isinstance(node.parent.parent, nodes.thead):
- tagname = 'th'
- else:
- tagname = 'td'
- atts = {}
- if node.has_key('morerows'):
- atts['rowspan'] = node['morerows'] + 1
- if node.has_key('morecols'):
- atts['colspan'] = node['morecols'] + 1
- self.part.append(self.starttag(node, tagname, '', **atts))
- self.context.append('</%s>\n' % tagname.lower())
- if len(node) == 0: # empty cell
- self.part.append('&nbsp;')
- else:
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_entry(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.context.pop())
-
- def visit_enumerated_list(self, node):
- raise NotImplementedError, node.astext()
- """
- The 'start' attribute does not conform to HTML 4.01's strict.dtd, but
- CSS1 doesn't help. CSS2 isn't widely enough supported yet to be
- usable.
- """
- atts = {}
- if node.has_key('start'):
- atts['start'] = node['start']
- if node.has_key('enumtype'):
- atts['class'] = node['enumtype']
- # @@@ To do: prefix, suffix. How? Change prefix/suffix to a
- # single "format" attribute? Use CSS2?
- old_compact_simple = self.compact_simple
- self.context.append((self.compact_simple, self.compact_p))
- self.compact_p = None
- self.compact_simple = (self.settings.compact_lists and
- (self.compact_simple
- or self.topic_class == 'contents'
- or self.check_simple_list(node)))
- if self.compact_simple and not old_compact_simple:
- atts['class'] = (atts.get('class', '') + ' simple').strip()
- self.part.append(self.starttag(node, 'ol', **atts))
-
- def depart_enumerated_list(self, node):
- raise NotImplementedError, node.astext()
- self.compact_simple, self.compact_p = self.context.pop()
- self.part.append('</ol>\n')
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- if self.in_docinfo:
- self.part = self.foot
-
- def depart_field(self, node):
- self.part = self.body
-
- def visit_field_body(self, node):
- pass
-
- def depart_field_body(self, node):
- pass
-
- def visit_field_list(self, node):
- raise NotImplementedError, node.astext()
-
- def depart_field_list(self, node):
- raise NotImplementedError, node.astext()
-
- def visit_field_name(self, node):
- if self.in_docinfo and node.astext() == 'Next':
- self.part.append('\n\n///NEXT MONTH///')
- raise nodes.SkipNode
- else:
- raise NotImplementedError, node.astext()
-
- def depart_field_name(self, node):
- pass
-
- def visit_figure(self, node):
- self.part = self.foot
- self.part.append('\n\n///PIC///\n')
-
- def depart_figure(self, node):
- self.part = self.body
-
- def visit_footer(self, node):
- raise NotImplementedError, node.astext()
- self.context.append(len(self.part))
-
- def depart_footer(self, node):
- raise NotImplementedError, node.astext()
- start = self.context.pop()
- footer = (['<hr class="footer"/>\n',
- self.starttag(node, 'div', CLASS='footer')]
- + self.part[start:] + ['</div>\n'])
- self.body_suffix[:0] = footer
- del self.part[start:]
-
- def visit_footnote(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'table', CLASS='footnote',
- frame="void", rules="none"))
- self.part.append('<colgroup><col class="label" /><col /></colgroup>\n'
- '<tbody valign="top">\n'
- '<tr>')
- self.footnote_backrefs(node)
-
- def footnote_backrefs(self, node):
- raise NotImplementedError, node.astext()
- if self.settings.footnote_backlinks and node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- self.context.append('')
- self.context.append('<a class="fn-backref" href="#%s" '
- 'name="%s">' % (backrefs[0], node['id']))
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append('<a class="fn-backref" href="#%s">%s</a>'
- % (backref, i))
- i += 1
- self.context.append('<em>(%s)</em> ' % ', '.join(backlinks))
- self.context.append('<a name="%s">' % node['id'])
- else:
- self.context.append('')
- self.context.append('<a name="%s">' % node['id'])
-
- def depart_footnote(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_footnote_reference(self, node):
- raise NotImplementedError, node.astext()
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- format = self.settings.footnote_references
- if format == 'brackets':
- suffix = '['
- self.context.append(']')
- elif format == 'superscript':
- suffix = '<sup>'
- self.context.append('</sup>')
- else: # shouldn't happen
- suffix = '???'
- self.content.append('???')
- self.part.append(self.starttag(node, 'a', suffix, href=href,
- CLASS='footnote-reference'))
-
- def depart_footnote_reference(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.context.pop() + '</a>')
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_header(self, node):
- raise NotImplementedError, node.astext()
- self.context.append(len(self.part))
-
- def depart_header(self, node):
- raise NotImplementedError, node.astext()
- start = self.context.pop()
- self.body_prefix.append(self.starttag(node, 'div', CLASS='header'))
- self.body_prefix.extend(self.part[start:])
- self.body_prefix.append('<hr />\n</div>\n')
- del self.part[start:]
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- name = str(node.attributes['uri'])
- self.part.append(name)
- pass
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_label(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'td', '%s[' % self.context.pop(),
- CLASS='label'))
-
- def depart_label(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(']</a></td><td>%s' % self.context.pop())
-
- def visit_legend(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'div', CLASS='legend'))
-
- def depart_legend(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</div>\n')
-
- def visit_line_block(self, node):
- raise NotImplementedError, node.astext()
-
- def depart_line_block(self, node):
- raise NotImplementedError, node.astext()
-
- def visit_list_item(self, node):
- if self.in_bullet_list:
- self.part.append('\n* ')
-
- def depart_list_item(self, node):
- pass
-
- def visit_literal(self, node):
- self.part.append('///code///')
-
- def depart_literal(self, node):
- self.part.append('///code ends///')
-
- def visit_literal_block(self, node):
- self.part.append('\n///CODE///\n')
- self.filterNewlines = False
-
- def depart_literal_block(self, node):
- self.part.append('\n///END CODE///\n')
- self.filterNewlines = True
-
- def visit_meta(self, node):
- raise NotImplementedError, node.astext()
- self.head.append(self.emptytag(node, 'meta', **node.attributes))
-
- def depart_meta(self, node):
- pass
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
- def visit_option(self, node):
- raise NotImplementedError, node.astext()
- if self.context[-1]:
- self.part.append(', ')
-
- def depart_option(self, node):
- raise NotImplementedError, node.astext()
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(node.get('delimiter', ' '))
- self.part.append(self.starttag(node, 'var', ''))
-
- def depart_option_argument(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</var>')
-
- def visit_option_group(self, node):
- raise NotImplementedError, node.astext()
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.part.append(self.starttag(node, 'td', **atts))
- self.part.append('<kbd>')
- self.context.append(0) # count number of options
-
- def depart_option_group(self, node):
- raise NotImplementedError, node.astext()
- self.context.pop()
- self.part.append('</kbd></td>\n')
- self.part.append(self.context.pop())
-
- def visit_option_list(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(
- self.starttag(node, 'table', CLASS='option-list',
- frame="void", rules="none"))
- self.part.append('<col class="option" />\n'
- '<col class="description" />\n'
- '<tbody valign="top">\n')
-
- def depart_option_list(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</tbody>\n</table>\n')
-
- def visit_option_list_item(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'tr', ''))
-
- def depart_option_list_item(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</tr>\n')
-
- def visit_option_string(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'span', '', CLASS='option'))
-
- def depart_option_string(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</span>')
-
- def visit_organization(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'organization')
-
- def depart_organization(self, node):
- raise NotImplementedError, node.astext()
- self.depart_docinfo_item()
-
- def visit_paragraph(self, node):
- if self.in_sidebar and self.sidebar_start:
- self.part.append('///BOX BODY///')
- self.sidebar_start = False
- if not self.in_bullet_list:
- self.part.append('\n')
-
- def depart_paragraph(self, node):
- self.part.append('\n')
-
- def visit_problematic(self, node):
- raise NotImplementedError, node.astext()
- if node.hasattr('refid'):
- self.part.append('<a href="#%s" name="%s">' % (node['refid'],
- node['id']))
- self.context.append('</a>')
- else:
- self.context.append('')
- self.part.append(self.starttag(node, 'span', '', CLASS='problematic'))
-
- def depart_problematic(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</span>')
- self.part.append(self.context.pop())
-
- def visit_raw(self, node):
- raise NotImplementedError, node.astext()
- if node.get('format') == 'html':
- self.part.append(node.astext())
- # Keep non-HTML raw text out of output:
- raise nodes.SkipNode
-
- def visit_reference(self, node):
- pass
-
- def depart_reference(self, node):
- pass
-
- def visit_revision(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'revision', meta=None)
-
- def depart_revision(self, node):
- self.depart_docinfo_item()
-
- def visit_row(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</tr>\n')
-
- def visit_section(self, node):
- self.section_level += 1
-
- def depart_section(self, node):
- self.section_level -= 1
-
- def visit_sidebar(self, node):
- self.part = self.foot
- self.in_sidebar = True
- self.sidebar_start = True
- self.part.append('\n\n///BOXOUT///\n')
-
- def depart_sidebar(self, node):
- self.part.append('///END BOX BODY///\n')
- self.in_sidebar = False
- self.part = self.body
-
- def visit_status(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'status', meta=None)
-
- def depart_status(self, node):
- self.depart_docinfo_item()
-
- def visit_strong(self, node):
- self.part.append('*')
-
- def depart_strong(self, node):
- self.part.append('*')
-
- def visit_substitution_definition(self, node):
- """Internal only."""
- raise nodes.SkipNode
-
- def visit_substitution_reference(self, node):
- self.unimplemented_visit(node)
-
- def visit_subtitle(self, node):
- if self.in_sidebar:
- self.part.append('///BOXOUT SUBHEAD///\n')
- else:
- self.part = self.head
- self.part.append('\n///DESCRIPTION///\n')
-
- def depart_subtitle(self, node):
- self.part.append('\n')
- if self.in_sidebar:
- pass
- else:
- self.part = self.body
-
- def visit_system_message(self, node):
- raise NotImplementedError, node.astext()
- if node['level'] < self.document.reporter['writer'].report_level:
- # Level is too low to display:
- raise nodes.SkipNode
- self.part.append(self.starttag(node, 'div', CLASS='system-message'))
- self.part.append('<p class="system-message-title">')
- attr = {}
- backref_text = ''
- if node.hasattr('id'):
- attr['name'] = node['id']
- if node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- backref_text = ('; <em><a href="#%s">backlink</a></em>'
- % backrefs[0])
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append('<a href="#%s">%s</a>' % (backref, i))
- i += 1
- backref_text = ('; <em>backlinks: %s</em>'
- % ', '.join(backlinks))
- if node.hasattr('line'):
- line = ', line %s' % node['line']
- else:
- line = ''
- if attr:
- a_start = self.starttag({}, 'a', '', **attr)
- a_end = '</a>'
- else:
- a_start = a_end = ''
- self.part.append('System Message: %s%s/%s%s (<tt>%s</tt>%s)%s</p>\n'
- % (a_start, node['type'], node['level'], a_end,
- node['source'], line, backref_text))
-
- def depart_system_message(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</div>\n')
-
- def visit_table(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(
- self.starttag(node, 'table', CLASS="table",
- frame='border', rules='all'))
-
- def depart_table(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</table>\n')
-
- def visit_target(self, node):
- raise NotImplementedError, node.astext()
- if not (node.has_key('refuri') or node.has_key('refid')
- or node.has_key('refname')):
- self.part.append(self.starttag(node, 'a', '', CLASS='target'))
- self.context.append('</a>')
- else:
- self.context.append('')
-
- def depart_target(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.context.pop())
-
- def visit_tbody(self, node):
- raise NotImplementedError, node.astext()
- self.write_colspecs()
- self.part.append(self.context.pop()) # '</colgroup>\n' or ''
- self.part.append(self.starttag(node, 'tbody', valign='top'))
-
- def depart_tbody(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</tbody>\n')
-
- def visit_term(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'dt', ''))
-
- def depart_term(self, node):
- """
- Leave the end tag to `self.visit_definition()`, in case there's a
- classifier.
- """
- raise NotImplementedError, node.astext()
- pass
-
- def visit_tgroup(self, node):
- raise NotImplementedError, node.astext()
- # Mozilla needs <colgroup>:
- self.part.append(self.starttag(node, 'colgroup'))
- # Appended by thead or tbody:
- self.context.append('</colgroup>\n')
-
- def depart_tgroup(self, node):
- pass
-
- def visit_thead(self, node):
- raise NotImplementedError, node.astext()
- self.write_colspecs()
- self.part.append(self.context.pop()) # '</colgroup>\n'
- # There may or may not be a <thead>; this is for <tbody> to use:
- self.context.append('')
- self.part.append(self.starttag(node, 'thead', valign='bottom'))
-
- def depart_thead(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</thead>\n')
-
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition()
-
- def visit_title(self, node):
- """Only 2 section levels are supported."""
- if isinstance(node.parent, nodes.topic):
- if self.topic_class == 'abstract':
- self.part = self.head
- self.part.append('\n///STRAP///')
- raise nodes.SkipNode
- elif self.in_sidebar:
- # sidebar title
- self.part.append('///BOXOUT HEAD///\n')
- elif self.section_level == 0:
- # document title
- self.part = self.head
- self.part.append('///TITLE///\n')
- else:
- self.part.append('\n///CROSSHEAD///\n')
-
- def depart_title(self, node):
- self.part.append('\n')
- if not self.in_sidebar:
- self.part = self.body
-
- def visit_title_reference(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.starttag(node, 'cite', ''))
-
- def depart_title_reference(self, node):
- raise NotImplementedError, node.astext()
- self.part.append('</cite>')
-
- def visit_topic(self, node):
- self.topic_class = node.get('class')
-
- def depart_topic(self, node):
- self.topic_class = ''
- self.part = self.body
-
- def visit_transition(self, node):
- raise NotImplementedError, node.astext()
- self.part.append(self.emptytag(node, 'hr'))
-
- def depart_transition(self, node):
- pass
-
- def visit_version(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'version', meta=None)
-
- def depart_version(self, node):
- self.depart_docinfo_item()
-
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning')
-
- def depart_warning(self, node):
- self.depart_admonition()
-
- def unimplemented_visit(self, node):
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
-
-
-class SimpleListChecker(nodes.GenericNodeVisitor):
-
- """
- Raise `nodes.SkipNode` if non-simple list item is encountered.
-
- Here "simple" means a list item containing nothing other than a single
- paragraph, a simple list, or a paragraph followed by a simple list.
- """
-
- def default_visit(self, node):
- raise nodes.NodeFound
-
- def visit_bullet_list(self, node):
- pass
-
- def visit_enumerated_list(self, node):
- pass
-
- def visit_list_item(self, node):
- children = []
- for child in node.get_children():
- if not isinstance(child, nodes.Invisible):
- children.append(child)
- if (children and isinstance(children[0], nodes.paragraph)
- and (isinstance(children[-1], nodes.bullet_list)
- or isinstance(children[-1], nodes.enumerated_list))):
- children.pop()
- if len(children) <= 1:
- return
- else:
- raise nodes.NodeFound
-
- def visit_paragraph(self, node):
- raise nodes.SkipNode
-
- def invisible_visit(self, node):
- """Invisible nodes should be ignored."""
- pass
-
- visit_comment = invisible_visit
- visit_substitution_definition = invisible_visit
- visit_target = invisible_visit
- visit_pending = invisible_visit
diff --git a/sandbox/pobrien/LinuxFormat/__init__.py b/sandbox/pobrien/LinuxFormat/__init__.py
deleted file mode 100644
index db6003cf3..000000000
--- a/sandbox/pobrien/LinuxFormat/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# Orbtech python package. \ No newline at end of file
diff --git a/sandbox/pobrien/LinuxFormat/rest2lxf.py b/sandbox/pobrien/LinuxFormat/rest2lxf.py
deleted file mode 100755
index 720cc3a0a..000000000
--- a/sandbox/pobrien/LinuxFormat/rest2lxf.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env python
-
-"""Generates Linux Format articles."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-
-from LXFwriter import Writer
-
-
-def main():
- description = ("Generates Linux Format articles. " + default_description)
- publish_cmdline(writer=Writer(), description=description)
-
-
-if __name__ == '__main__':
- main()
diff --git a/sandbox/pobrien/OpenOffice/OOdirectives.py b/sandbox/pobrien/OpenOffice/OOdirectives.py
deleted file mode 100644
index 5cf89b459..000000000
--- a/sandbox/pobrien/OpenOffice/OOdirectives.py
+++ /dev/null
@@ -1,77 +0,0 @@
-"""Custom directives"""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import sys
-import os
-
-from docutils import nodes
-from docutils.parsers.rst import directives
-from docutils.parsers.rst.languages import en
-
-registry = directives._directive_registry
-registry['index'] = ('OOdirectives', 'index_directive')
-registry['include-code'] = ('OOdirectives', 'include_code')
-registry['include-output'] = ('OOdirectives', 'include_output')
-
-en.directives['index'] = 'index'
-en.directives['include-code'] = 'include-code'
-en.directives['include-output'] = 'include-output'
-
-
-#class index_entry(nodes.General, nodes.Element): pass
-class index_entry(nodes.Inline, nodes.TextElement): pass
-
-
-def index_directive(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- #nodes = []
- #for entry in content:
- # nodes.append(index_entry(entry, entry))
- #return nodes
- entries = '\n'.join(content)
- return [index_entry(entries,entries)]
-
-index_directive.content = 1
-
-
-def include_code(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- #obj = state_machine.document.attributes
- #print >> sys.stderr, obj
- #print >> sys.stderr, dir(obj)
- document = state_machine.document
- dirname = getDocDir(document)
- fname = os.path.join(dirname, arguments[0])
- code = open(fname).read()
- return [nodes.literal_block(code, code)]
-
-include_code.arguments = (0, 1, 0)
-
-
-def include_output(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- document = state_machine.document
- dirname = getDocDir(document)
- fname = os.path.join(dirname, arguments[0])
- cmd = os.environ['PYTHON'] + ' ' + fname
- f_input, f_output = os.popen4(cmd)
- output = f_output.read()
- f_output.close()
- return [nodes.literal_block(output, output)]
-
-include_output.arguments = (0, 1, 0)
-
-
-def getDocDir(document):
- source = document.current_source
- if source is None:
- return os.getcwd()
- else:
- dirname = os.path.dirname(os.path.abspath(source))
- if dirname is None:
- return os.getcwd()
- else:
- return dirname
diff --git a/sandbox/pobrien/OpenOffice/OOtext.py b/sandbox/pobrien/OpenOffice/OOtext.py
deleted file mode 100644
index ee7509e9b..000000000
--- a/sandbox/pobrien/OpenOffice/OOtext.py
+++ /dev/null
@@ -1,707 +0,0 @@
-"""Text used in the creation of the XML files."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-
-# Can't have blank line at beginning of XML
-
-manifest = '''<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd">
-<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
-<manifest:file-entry manifest:media-type="application/vnd.sun.xml.writer" manifest:full-path="/"/>
-%s
-%s
-</manifest:manifest>
-'''
-
-# The pictures list gets populated by OOwriter as it comes across
-# images in the document.
-pictures = []
-
-m_xml_format = '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="%s"/>'
-
-m_tif_format = '<manifest:file-entry manifest:media-type="image/tif" manifest:full-path="Pictures/%s"/>'
-
-m_png_format = '<manifest:file-entry manifest:media-type="image/png" manifest:full-path="Pictures/%s"/>'
-
-content_header = '''<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE office:document-content PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
-<office:document-content
-xmlns:office="http://openoffice.org/2000/office"
-xmlns:style="http://openoffice.org/2000/style"
-xmlns:text="http://openoffice.org/2000/text"
-xmlns:table="http://openoffice.org/2000/table"
-xmlns:draw="http://openoffice.org/2000/drawing"
-xmlns:fo="http://www.w3.org/1999/XSL/Format"
-xmlns:xlink="http://www.w3.org/1999/xlink"
-xmlns:number="http://openoffice.org/2000/datastyle"
-xmlns:svg="http://www.w3.org/2000/svg"
-xmlns:chart="http://openoffice.org/2000/chart"
-xmlns:dr3d="http://openoffice.org/2000/dr3d"
-xmlns:math="http://www.w3.org/1998/Math/MathML"
-xmlns:form="http://openoffice.org/2000/form"
-xmlns:script="http://openoffice.org/2000/script" office:class="text"
-office:version="1.0">
-<office:body>
-<text:sequence-decls>
-<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
-<text:sequence-decl text:display-outline-level="0" text:name="Table"/>
-<text:sequence-decl text:display-outline-level="0" text:name="Text"/>
-<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
-</text:sequence-decls>
-'''
-
-content_footer = '''
-</office:body>
-</office:document-content>
-'''
-
-styles = '''<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE office:document-styles PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
-
-<office:document-styles
-xmlns:office="http://openoffice.org/2000/office"
-xmlns:style="http://openoffice.org/2000/style"
-xmlns:text="http://openoffice.org/2000/text"
-xmlns:table="http://openoffice.org/2000/table"
-xmlns:draw="http://openoffice.org/2000/drawing"
-xmlns:fo="http://www.w3.org/1999/XSL/Format"
-xmlns:xlink="http://www.w3.org/1999/xlink"
-xmlns:number="http://openoffice.org/2000/datastyle"
-xmlns:svg="http://www.w3.org/2000/svg"
-xmlns:chart="http://openoffice.org/2000/chart"
-xmlns:dr3d="http://openoffice.org/2000/dr3d"
-xmlns:math="http://www.w3.org/1998/Math/MathML"
-xmlns:form="http://openoffice.org/2000/form"
-xmlns:script="http://openoffice.org/2000/script"
-office:version="1.0">
-
-<office:font-decls>
-
-<style:font-decl style:name="Wingdings"
-fo:font-family="Wingdings"
-style:font-pitch="variable"
-style:font-charset="x-symbol"/>
-<style:font-decl style:name="Palatino"
-fo:font-family="Palatino"/>
-<style:font-decl style:name="Courier"
-fo:font-family="Courier"
-style:font-family-generic="modern"/>
-<style:font-decl style:name="Arial Unicode MS"
-fo:font-family="&apos;Arial Unicode MS&apos;"
-style:font-pitch="variable"/>
-<style:font-decl style:name="HG Mincho Light J"
-fo:font-family="&apos;HG Mincho Light J&apos;"
-style:font-pitch="variable"/>
-<style:font-decl style:name="AGaramond"
-fo:font-family="AGaramond"
-style:font-family-generic="roman"
-style:font-pitch="variable"/>
-<style:font-decl style:name="AGaramond Bold"
-fo:font-family="&apos;AGaramond Bold&apos;"
-style:font-family-generic="roman"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Times"
-fo:font-family="Times"
-style:font-family-generic="roman"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Times New Roman"
-fo:font-family="&apos;Times New Roman&apos;"
-style:font-family-generic="roman"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Arial"
-fo:font-family="Arial"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Helvetica"
-fo:font-family="Helvetica"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Helvetica-Narrow"
-fo:font-family="Helvetica-Narrow"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Humanst521 Cn BT"
-fo:font-family="&apos;Humanst521 Cn BT&apos;"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Luxi Sans"
-fo:font-family="&apos;Luxi Sans&apos;"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Tahoma"
-fo:font-family="Tahoma"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-<style:font-decl style:name="Univers 45 Light"
-fo:font-family="&apos;Univers 45 Light&apos;"
-style:font-family-generic="swiss"
-style:font-pitch="variable"/>
-
-</office:font-decls>
-<office:styles>
-
-
-<style:default-style style:family="graphics">
-<style:properties draw:start-line-spacing-horizontal="0.1114inch"
-draw:start-line-spacing-vertical="0.1114inch"
-draw:end-line-spacing-horizontal="0.1114inch"
-draw:end-line-spacing-vertical="0.1114inch" fo:color="#000000"
-style:font-name="Palatino" fo:font-size="12pt" fo:language="en"
-fo:country="US" style:font-name-asian="HG Mincho Light J"
-style:font-size-asian="12pt" style:language-asian="none"
-style:country-asian="none" style:font-name-complex="Arial Unicode MS"
-style:font-size-complex="12pt" style:language-complex="none"
-style:country-complex="none" style:text-autospace="ideograph-alpha"
-style:punctuation-wrap="simple" style:line-break="strict">
-<style:tab-stops/></style:properties></style:default-style>
-
-<style:default-style style:family="paragraph">
-<style:properties fo:color="#000000" style:font-name="Palatino"
-fo:font-size="12pt" fo:language="en" fo:country="US"
-style:font-name-asian="HG Mincho Light J" style:font-size-asian="12pt"
-style:language-asian="none" style:country-asian="none"
-style:font-name-complex="Arial Unicode MS"
-style:font-size-complex="12pt" style:language-complex="none"
-style:country-complex="none" fo:hyphenate="false"
-fo:hyphenation-remain-char-count="2"
-fo:hyphenation-push-char-count="2"
-fo:hyphenation-ladder-count="no-limit"
-style:text-autospace="ideograph-alpha"
-style:punctuation-wrap="hanging" style:line-break="strict"
-style:tab-stop-distance="0.5inch"/></style:default-style>
-
-<style:style style:name="Standard"
-style:family="paragraph"
-style:class="text">
-<style:properties fo:color="#000000"
-style:font-name="Times New Roman" fo:font-size="10pt" fo:language="en"
-fo:country="US" style:font-name-asian="Times New Roman"
-style:font-size-asian="10pt" fo:orphans="2"
-fo:widows="2"/></style:style>
-
-<style:style style:name="Text body"
-style:family="paragraph"
-style:parent-style-name="Standard"
-style:class="text">
-<style:properties fo:margin-top="0inch"
-fo:margin-bottom="0.0835inch"/></style:style>
-
-<style:style style:name="Header"
-style:family="paragraph"
-style:parent-style-name="Standard"
-style:class="extra">
-<style:properties>
-<style:tab-stops>
-<style:tab-stop
-style:position="3inch" style:type="center"/>
-<style:tab-stop
-style:position="6inch"
-style:type="right"/></style:tab-stops></style:properties></style:style>
-
-<style:style style:name="Footer"
-style:family="paragraph"
-style:parent-style-name="Standard"
-style:class="extra">
-<style:properties fo:color="#000000"
-style:font-name="AGaramond">
-<style:tab-stops>
-<style:tab-stop
-style:position="3inch" style:type="center"/>
-<style:tab-stop
-style:position="6inch"
-style:type="right"/></style:tab-stops></style:properties></style:style>
-
-<style:style style:name="Table Contents"
-style:family="paragraph"
-style:parent-style-name="Text body"
-style:class="extra">
-<style:properties text:number-lines="false"
-text:line-number="0"/></style:style>
-
-<style:style style:name="Table
-Heading" style:family="paragraph"
-style:parent-style-name="Table Contents"
-style:class="extra">
-<style:properties fo:font-style="italic"
-fo:font-weight="bold" style:font-style-asian="italic"
-style:font-weight-asian="bold" style:font-style-complex="italic"
-style:font-weight-complex="bold" fo:text-align="center"
-style:justify-single-word="false" text:number-lines="false"
-text:line-number="0"/></style:style>
-
-<style:style style:name="Caption"
-style:family="paragraph"
-style:parent-style-name="Standard"
-style:class="extra">
-<style:properties fo:margin-top="0.0835inch"
-fo:margin-bottom="0.0835inch" style:font-name="Palatino"
-fo:font-size="10pt" fo:font-style="italic"
-style:font-size-asian="10pt" style:font-style-asian="italic"
-style:font-size-complex="10pt" style:font-style-complex="italic"
-text:number-lines="false"
-text:line-number="0"/></style:style>
-
-<style:style style:name="Frame contents"
-style:family="paragraph"
-style:parent-style-name="Text body"
-style:class="extra"/>
-<style:style style:name="Index"
-style:family="paragraph" style:parent-style-name="Standard"
-style:class="index">
-<style:properties style:font-name="Palatino"
-text:number-lines="false"
-text:line-number="0"/></style:style>
-
-<style:style style:name="code"
-style:family="text">
-<style:properties style:font-name="Courier"/></style:style>
-
-<style:style style:name=".body"
-style:family="paragraph">
-<style:properties fo:margin-left="0inch"
-fo:margin-right="0inch" fo:margin-top="0inch" fo:margin-bottom="0inch"
-fo:color="#000000" style:font-name="AGaramond" fo:font-size="11pt"
-fo:language="en" fo:country="US" style:font-name-asian="Times New
-Roman" style:font-size-asian="11pt" fo:line-height="0.1937inch"
-fo:text-align="justify" style:justify-single-word="false"
-fo:orphans="2" fo:widows="2" fo:text-indent="0.25inch"
-style:auto-text-indent="false">
-<style:tab-stops/></style:properties></style:style>
-
-<style:style style:name=".body1"
-style:family="paragraph"
-style:parent-style-name=".body"
-style:next-style-name=".body">
-<style:properties fo:margin-left="0inch"
-fo:margin-right="0inch" fo:font-size="11pt"
-style:font-size-asian="11pt" fo:text-indent="0inch"
-style:auto-text-indent="false"/></style:style>
-
-<style:style style:name=".bullet"
-style:family="paragraph"
-style:list-style-name="BulletList">
-<style:properties
-fo:margin-left="0.5inch"
-fo:margin-right="0inch"
-fo:margin-top="0.028inch"
-fo:margin-bottom="0.028inch"
-fo:color="#000000"
-style:font-name="AGaramond"
-fo:font-size="11pt"
-fo:language="en"
-fo:country="US"
-style:font-name-asian="Times New Roman"
-style:font-size-asian="11pt"
-fo:line-height="0.1937inch"
-fo:text-align="justify"
-style:justify-single-word="false"
-fo:orphans="0"
-fo:widows="0"
-fo:text-indent="0inch"
-style:auto-text-indent="false">
-<style:tab-stops>
-<style:tab-stop
-style:position="0inch"/>
-</style:tab-stops>
-</style:properties>
-</style:style>
-
-<text:list-style style:name="BulletList">
-<text:list-level-style-bullet text:level="1"
-text:style-name="Bullet"
-style:num-suffix="."
-text:bullet-char="*">
-<style:properties
-text:min-label-width="0.25inch"
-style:font-name="Wingdings"/>
-</text:list-level-style-bullet>
-</text:list-style>
-
-<style:style style:name="Bullet"
-style:family="text">
-<style:properties
-style:font-name="Wingdings"/>
-</style:style>
-
-<style:style style:name=".CALLOUT"
-style:family="paragraph"
-style:parent-style-name=".body">
-<style:properties
-fo:margin-left="0.25inch" fo:margin-right="0.25inch"
-fo:margin-top="0.0835inch" fo:margin-bottom="0.0835inch"
-fo:text-indent="0inch"
-style:auto-text-indent="false"/></style:style>
-
-<style:style style:name=".cell body"
-style:family="paragraph">
-<style:properties
-fo:color="#000000" style:font-name="Univers 45 Light"
-fo:font-size="8pt" fo:language="en" fo:country="US"
-style:font-name-asian="Times New Roman" style:font-size-asian="8pt"
-style:line-height-at-least="0.139inch" fo:orphans="0"
-fo:widows="0"/></style:style>
-
-<style:style style:name=".cell head"
-style:family="paragraph">
-<style:properties fo:color="#000000"
-style:font-name="Univers 45 Light" fo:font-size="8pt" fo:language="en"
-fo:country="US" fo:font-weight="bold" style:font-name-asian="Times New
-Roman" style:font-size-asian="8pt" style:font-weight-asian="bold"
-style:line-height-at-least="0.139inch" fo:orphans="0"
-fo:widows="0"/></style:style>
-
-<style:style style:name=".ch title"
-style:family="paragraph">
-<style:properties
-fo:margin-top="0.5inch" fo:margin-bottom="0.25inch" fo:color="#000000"
-style:font-name="AGaramond" fo:font-size="29.5pt" fo:language="en"
-fo:country="US" fo:font-style="italic" style:font-name-asian="Times
-New Roman" style:font-size-asian="29.5pt"
-style:font-style-asian="italic"
-style:line-height-at-least="0.4161inch" fo:orphans="0"
-fo:widows="0"/></style:style>
-
-<style:style style:name=".code"
-style:family="paragraph">
-<style:properties fo:color="#000000"
-style:font-name="Courier" fo:font-size="10pt" fo:language="en"
-fo:country="US" style:font-name-asian="Times New Roman"
-style:font-size-asian="10pt" style:language-asian="en"
-style:country-asian="US" style:line-height-at-least="0.1665inch"
-fo:orphans="0" fo:widows="0"/></style:style>
-
-<style:style style:name=".code NOTATION"
-style:family="paragraph">
-<style:properties
-style:use-window-font-color="true" style:font-name="Helvetica-Narrow"
-fo:font-size="9pt" fo:font-weight="bold" style:font-name-asian="Times
-New Roman" style:font-size-asian="9pt" style:font-weight-asian="bold"
-fo:orphans="2" fo:widows="2"/></style:style>
-
-<style:style style:name=".figure"
-style:family="paragraph">
-<style:properties
-fo:margin-top="0inch" fo:margin-bottom="0inch" fo:color="#000000"
-style:font-name="Univers 45 Light" fo:font-size="8pt" fo:language="en"
-fo:country="US" fo:font-weight="bold" style:font-name-asian="Times New
-Roman" style:font-size-asian="8pt" style:font-weight-asian="bold"
-fo:line-height="0.139inch" fo:orphans="0"
-fo:widows="0"/></style:style>
-
-<style:style style:name=".head 1"
-style:family="paragraph">
-<style:properties
-fo:margin-top="0.278inch" fo:margin-bottom="0.1665inch"
-fo:color="#000000" style:font-name="AGaramond" fo:font-size="20pt"
-fo:language="en" fo:country="US" fo:font-style="italic"
-style:font-name-asian="Times New Roman" style:font-size-asian="20pt"
-style:font-style-asian="italic" fo:line-height="0.278inch"
-fo:orphans="0" fo:widows="0"
-fo:keep-with-next="true"/></style:style>
-
-<style:style style:name=".head 2"
-style:family="paragraph"
-style:parent-style-name=".head 1"
-style:next-style-name=".body1">
-<style:properties
-fo:margin-top="0.0972inch" fo:margin-bottom="0.0972inch"
-fo:font-size="16pt" style:font-size-asian="16pt"
-fo:line-height="0.222inch"/></style:style>
-
-<style:style style:name=".head 3alone"
-style:family="paragraph"
-style:next-style-name=".body">
-<style:properties
-fo:margin-top="0.0972inch" fo:margin-bottom="0.0555inch"
-style:use-window-font-color="true" style:font-name="AGaramond"
-fo:font-size="14pt" fo:font-style="italic"
-style:font-name-asian="Times New Roman" style:font-size-asian="14pt"
-style:font-style-asian="italic" fo:orphans="2"
-fo:widows="2"/></style:style>
-
-<style:style style:name=".numlist"
-style:family="paragraph"
-style:list-style-name="NumberedList">
-<style:properties
-fo:margin-top="0.028inch"
-fo:margin-bottom="0.028inch"
-fo:color="#000000"
-style:font-name="AGaramond"
-fo:font-size="11pt"
-fo:language="en"
-fo:country="US"
-style:font-name-asian="Times New Roman"
-style:font-size-asian="11pt"
-fo:line-height="0.1937inch"
-fo:text-align="justify"
-style:justify-single-word="false"
-fo:orphans="0" fo:widows="0">
-<style:tab-stops>
-<style:tab-stop style:position="0.5inch"/>
-</style:tab-stops>
-</style:properties></style:style>
-
-<text:list-style style:name="NumberedList">
-<text:list-level-style-number text:level="1"
-style:num-suffix="."
-style:num-format="1">
-<style:properties
-text:min-label-width="0.25inch"/>
-</text:list-level-style-number>
-</text:list-style>
-
-<style:style style:name=".numlist 1"
-style:family="paragraph"
-style:parent-style-name=".numlist"
-style:next-style-name=".numlist">
-<style:properties
-fo:margin-left="0inch" fo:margin-right="0inch" fo:text-indent="0inch"
-style:auto-text-indent="false"/></style:style>
-
-<style:style style:name=".table title"
-style:family="paragraph">
-<style:properties fo:color="#000000"
-style:font-name="Univers 45 Light" fo:font-size="8pt" fo:language="en"
-fo:country="US" fo:font-weight="bold" style:font-name-asian="Times New
-Roman" style:font-size-asian="8pt" style:font-weight-asian="bold"
-style:line-height-at-least="0.139inch" fo:text-align="justify"
-style:justify-single-word="false" fo:orphans="0"
-fo:widows="0"/></style:style>
-
-<style:style style:name="image"
-style:family="graphics">
-<style:properties style:wrap="none"
-style:vertical-pos="top"
-style:vertical-rel="char"
-style:horizontal-pos="from-left"
-style:horizontal-rel="paragraph-content"
-fo:background-color="transparent"
-fo:padding="0.0102inch"
-fo:border="none" style:mirror="none"
-fo:clip="rect(0inch 0inch 0inch 0inch)"
-draw:luminance="0%"
-draw:contrast="0%"
-draw:red="0%"
-draw:green="0%"
-draw:blue="0%"
-draw:gamma="100"
-draw:color-inversion="false"
-draw:transparency="-100%"
-draw:color-mode="standard">
-<style:background-image/>
-</style:properties>
-</style:style>
-
-<style:style style:name="Page Number"
-style:family="text"
-style:parent-style-name="WW-Default Paragraph Font"/>
-
-<style:style style:name="WW-Default Paragraph Font"
-style:family="text"/>
-
-<style:style style:name="Frame" style:family="graphics">
-<style:properties
-text:anchor-type="paragraph" svg:x="0inch" svg:y="0inch"
-style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
-style:wrap-contour="false" style:vertical-pos="top"
-style:vertical-rel="paragraph-content" style:horizontal-pos="center"
-style:horizontal-rel="paragraph-content"/></style:style>
-
-<style:style style:name="Graphics" style:family="graphics">
-<style:properties
-text:anchor-type="paragraph" svg:x="0inch" svg:y="0inch"
-style:wrap="none"
-style:vertical-pos="top"
-style:vertical-rel="char"
-style:horizontal-pos="from-left"
-style:horizontal-rel="paragraph-content"/></style:style>
-
-<style:style style:name="OLE" style:family="graphics">
-<style:properties
-text:anchor-type="paragraph" svg:x="0inch" svg:y="0inch"
-style:wrap="none" style:vertical-pos="top"
-style:vertical-rel="paragraph" style:horizontal-pos="center"
-style:horizontal-rel="paragraph"/></style:style>
-
-<text:footnotes-configuration
-style:num-format="1" text:start-value="0"
-text:footnotes-position="page"
-text:start-numbering-at="document"/>
-
-<text:endnotes-configuration
-style:num-format="i"
-text:start-value="0"/>
-
-<text:linenumbering-configuration
-text:number-lines="false" text:offset="0.1965inch"
-style:num-format="1" text:number-position="left"
-text:increment="5"/>
-
-</office:styles>
-
-
-<office:automatic-styles>
-
-<style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
-<style:properties
-fo:margin-left="0inch" fo:margin-right="0.25inch"
-style:font-name="AGaramond" fo:text-indent="0inch"
-style:auto-text-indent="false"/>
-</style:style>
-
-<style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
-<style:properties
-fo:margin-left="0inch" fo:margin-right="0.25inch"
-fo:text-indent="0.25inch"
-style:auto-text-indent="false"/>
-</style:style>
-
-<style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard">
-<style:properties>
-<style:tab-stops>
-<style:tab-stop
-style:position="0.0626inch"/>
-<style:tab-stop
-style:position="0.25inch"/>
-<style:tab-stop
-style:position="2.6252inch"/>
-<style:tab-stop
-style:position="6.3126inch"/>
-<style:tab-stop
-style:position="6.3752inch"/>
-</style:tab-stops></style:properties></style:style>
-
-<style:style style:name="P4" style:family="paragraph" style:parent-style-name="Standard">
-<style:properties
-fo:margin-left="0inch" fo:margin-right="0.25inch"
-fo:text-indent="0inch"
-style:auto-text-indent="false">
-<style:tab-stops>
-<style:tab-stop
-style:position="6.4402inch"
-style:type="right"/>
-</style:tab-stops></style:properties></style:style>
-
-<style:style style:name="P5" style:family="paragraph" style:parent-style-name="Standard">
-<style:properties
-fo:margin-left="0inch" fo:margin-right="0.25inch"
-fo:text-indent="0inch"
-style:auto-text-indent="false">
-<style:tab-stops>
-<style:tab-stop
-style:position="0inch"/>
-<style:tab-stop
-style:position="2.75inch"/>
-<style:tab-stop
-style:position="3.1874inch"/>
-<style:tab-stop
-style:position="6.1874inch"/>
-<style:tab-stop
-style:position="6.4402inch"
-style:type="right"/>
-</style:tab-stops></style:properties></style:style>
-
-<style:style style:name="T1" style:family="text" style:parent-style-name="Page Number">
-<style:properties
-style:font-name="AGaramond"/></style:style>
-
-<style:style style:name="fr1"
-style:family="graphics"
-style:parent-style-name="Graphics">
-<style:properties
-fo:background-color="transparent">
-<style:background-image/></style:properties></style:style>
-
-<style:page-master style:name="pm1" style:page-usage="mirrored">
-<style:properties
-fo:page-width="8.5inch" fo:page-height="11inch" style:num-format="1"
-style:print-orientation="portrait" fo:margin-top="0.4925inch"
-fo:margin-bottom="0.4925inch" fo:margin-left="1inch"
-fo:margin-right="1inch" style:layout-grid-color="#c0c0c0"
-style:layout-grid-lines="40"
-style:layout-grid-base-height="0.1945inch"
-style:layout-grid-ruby-height="0.0555inch"
-style:layout-grid-mode="none" style:layout-grid-ruby-below="false"
-style:layout-grid-print="false" style:layout-grid-display="false"
-style:footnote-max-height="0inch">
-<style:footnote-sep
-style:width="0.0071inch" style:distance-before-sep="0.0398inch"
-style:distance-after-sep="0.0398inch" style:adjustment="left"
-style:rel-width="25%"
-style:color="#000000"/>
-</style:properties>
-<style:header-style>
-<style:properties
-fo:min-height="0.5075inch"/>
-</style:header-style>
-<style:footer-style>
-<style:properties fo:min-height="0inch" fo:margin-top="0.0909inch"/>
-</style:footer-style>
-</style:page-master>
-</office:automatic-styles>
-
-
-<office:master-styles>
-<style:master-page style:name="Standard" style:page-master-name="pm1">
-
-<style:header>
-<text:p text:style-name="P1">
-<draw:text-box draw:style-name="fr1"
-draw:name="Frame1" text:anchor-type="paragraph" svg:y="0.0008inch"
-svg:width="0.2429inch" svg:height="0.0161inch" draw:z-index="2">
-<text:p text:style-name="Header">
-<text:span text:style-name="T1">
-<text:page-number text:select-page="current">10
-</text:page-number></text:span></text:p></draw:text-box></text:p>
-</style:header>
-
-<style:header-left>
-<text:p text:style-name="P2">
-<draw:text-box draw:style-name="fr1"
-draw:name="Frame2" text:anchor-type="paragraph" svg:y="0.0008inch"
-svg:width="0.2429inch" svg:height="0.0161inch" draw:z-index="3">
-<text:p text:style-name="Standard">
-<text:page-number text:select-page="current">10
-</text:page-number></text:p></draw:text-box></text:p>
-</style:header-left>
-
-<style:footer>
-<text:p text:style-name="P3">
-<text:tab-stop/></text:p>
-<text:p text:style-name="P3">
-Author Template
-<text:tab-stop/>
-Manning Publications Co.
-<text:tab-stop/>
-<text:span text:style-name="T1">
-<text:page-number text:select-page="current">10
-</text:page-number></text:span></text:p>
-</style:footer>
-
-<style:footer-left>
-<text:p text:style-name="P4"/>
-<text:p text:style-name="P5">
-Author Template
-<text:tab-stop/>
-Manning Publications Co.
-<text:tab-stop/>
-<text:tab-stop/>
-<text:span text:style-name="T1">
-<text:page-number text:select-page="current">10
-</text:page-number></text:span></text:p>
-</style:footer-left>
-
-</style:master-page>
-</office:master-styles>
-</office:document-styles>
-
-'''
-
-# Temporary style info:
-
-'''
-
-'''
diff --git a/sandbox/pobrien/OpenOffice/OOwriter.py b/sandbox/pobrien/OpenOffice/OOwriter.py
deleted file mode 100644
index 7fbd6b1c2..000000000
--- a/sandbox/pobrien/OpenOffice/OOwriter.py
+++ /dev/null
@@ -1,780 +0,0 @@
-"""OpenOffice writer
-
-The output is an OpenOffice.org 1.0-compatible document."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-# Based on work orginally created by:
-# Author: Aahz
-# Contact: aahz@pythoncraft.com
-
-__docformat__ = 'reStructuredText'
-
-import sys
-from warnings import warn
-import re
-
-import docutils
-from docutils import nodes, utils, writers, languages
-
-import OOtext
-
-import Image # from the Python Imaging Library
-
-section_styles = [
- '.ch title',
- '.head 1',
- '.head 2',
- '.head 3alone',
- ]
-
-
-class Writer(writers.Writer):
-
- supported = ('OpenOffice')
- """Formats this writer supports."""
-
- output = None
- """Final translated form of `document`."""
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = Translator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
-
-
-class Translator(nodes.NodeVisitor):
-
- header = [OOtext.content_header]
- footer = [OOtext.content_footer]
-
- start_para = '\n<text:p text:style-name="%s">\n'
- end_para = '\n</text:p>\n'
-
- start_charstyle = '<text:span text:style-name="%s">'
- end_charstyle = '</text:span>'
-
- line_break = '\n<text:line-break/>'
- re_spaces = re.compile(' +')
- spaces = '<text:s text:c="%d"/>'
-
- re_annotation = re.compile(r'#\d+(?:, #\d+)*$')
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.settings = document.settings
- self.body = []
- self.section_level = 0
- self.skip_para_tag = False
- self.para_styles = ['.body']
- self.compact_p = 1
- self.compact_simple = None
- self.context = []
- self.inBulletList = False
- self.inEnumList = False
- self.bodyOne = False
-
- def astext(self):
- """Return the final formatted document as a string."""
- return ''.join(self.header + self.body + self.footer)
-
- def encode(self, text):
- """Encode special characters in `text` & return."""
- # @@@ A codec to do these and all other HTML entities would be nice.
- text = text.replace("&", "&amp;")
- text = text.replace("<", "&lt;")
- text = text.replace('"', "&quot;")
- text = text.replace(">", "&gt;")
- return text
-
- def compress_spaces(self, line):
- while 1:
- match = self.re_spaces.search(line)
- if match:
- start, end = match.span()
- numspaces = end - start
- line = line[:start] + (self.spaces % numspaces) + line[end:]
- else:
- break
- return line
-
- def fix_annotation(self, line):
- match = self.re_annotation.search(line)
- if match:
- pos = match.start()
- line = line[:pos] + '|' + line[pos:]
- return line
-
- def visit_Text(self, node):
- self.body.append(self.encode(node.astext()))
-
- def depart_Text(self, node):
- pass
-
- def visit_admonition(self, node, name):
- self.skip_para_tag = False
- self.para_styles.append('.CALLOUT')
-
- def depart_admonition(self):
- self.para_styles.pop()
- self.bodyOne = True
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
-## def visit_(self, node):
-## pass
-
-## def depart_(self, node):
-## pass
-
- def visit_author(self, node):
- pass
-
- def depart_author(self, node):
- pass
-
- def visit_authors(self, node):
- pass
-
- def depart_authors(self, node):
- pass
-
- def visit_block_quote(self, node):
- self.skip_para_tag = True
- self.body.append(self.start_para % '.quotes')
-
- def depart_block_quote(self, node):
- self.body.append(self.end_para)
- self.skip_para_tag = False
- self.bodyOne = True
-
- def visit_bullet_list(self, node):
- self.inBulletList = True
- self.body.append('\n<text:unordered-list text:style-name="BulletList">\n')
-
- def depart_bullet_list(self, node):
- self.body.append('</text:unordered-list>\n')
- self.inBulletList = False
- self.bodyOne = True
-
- def visit_caption(self, node):
- pass
-
- def depart_caption(self, node):
- pass
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- self.body.append(self.starttag(node, 'table', CLASS='citation',
- frame="void", rules="none"))
- self.footnote_backrefs(node)
-
- def depart_citation(self, node):
- self.body.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_citation_reference(self, node):
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '[', href=href,
- CLASS='citation-reference'))
-
- def depart_citation_reference(self, node):
- self.body.append(']</a>')
-
- def visit_classifier(self, node):
- self.body.append(' <span class="classifier-delimiter">:</span> ')
- self.body.append(self.starttag(node, 'span', '', CLASS='classifier'))
-
- def depart_classifier(self, node):
- self.body.append('</span>')
-
- def visit_colspec(self, node):
- self.colspecs.append(node)
-
- def depart_colspec(self, node):
- pass
-
- def write_colspecs(self):
- width = 0
- for node in self.colspecs:
- width += node['colwidth']
- for node in self.colspecs:
- colwidth = int(node['colwidth'] * 100.0 / width + 0.5)
- self.body.append(self.emptytag(node, 'col',
- colwidth='%i%%' % colwidth))
- self.colspecs = []
-
- def visit_comment(self, node):
- raise nodes.SkipNode
-
- def visit_date(self, node):
- pass
-
- def depart_date(self, node):
- pass
-
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- self.body.append('</dt>\n')
- self.body.append(self.starttag(node, 'dd', ''))
- if len(node) and isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_definition(self, node):
- self.body.append('</dd>\n')
-
- def visit_definition_list(self, node):
- print node.astext()
- self.body.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- self.body.append('</dl>\n')
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- self.body.append(self.starttag(node, 'td', ''))
- if len(node) and isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_description(self, node):
- self.body.append('</td>')
-
- def visit_docinfo(self, node):
- raise nodes.SkipNode
-
- def depart_docinfo(self, node):
- pass
-
- def visit_doctest_block(self, node):
- self.visit_literal_block(node)
-
- def visit_document(self, node):
- pass
-
- def depart_document(self, node):
- pass
-
- def visit_emphasis(self, node):
- self.body.append(self.start_charstyle % 'italic')
-
- def depart_emphasis(self, node):
- self.body.append(self.end_charstyle)
-
- def visit_entry(self, node):
- if isinstance(node.parent.parent, nodes.thead):
- tagname = 'th'
- else:
- tagname = 'td'
- atts = {}
- if node.has_key('morerows'):
- atts['rowspan'] = node['morerows'] + 1
- if node.has_key('morecols'):
- atts['colspan'] = node['morecols'] + 1
- self.body.append(self.starttag(node, tagname, '', **atts))
- self.context.append('</%s>\n' % tagname.lower())
- if len(node) == 0: # empty cell
- self.body.append('&nbsp;')
- elif isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_entry(self, node):
- self.body.append(self.context.pop())
-
- def visit_enumerated_list(self, node):
- self.inEnumList = True
- self.body.append('\n<text:ordered-list text:style-name="NumberedList">\n')
-
- def depart_enumerated_list(self, node):
- self.body.append('</text:ordered-list>\n')
- self.inEnumList = False
- self.bodyOne = True
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- self.body.append(self.starttag(node, 'tr', '', CLASS='field'))
-
- def depart_field(self, node):
- self.body.append('</tr>\n')
-
- def visit_field_body(self, node):
- self.body.append(self.starttag(node, 'td', '', CLASS='field-body'))
- if len(node) and isinstance(node[0], nodes.paragraph):
- node[0].set_class('first')
-
- def depart_field_body(self, node):
- self.body.append('</td>\n')
-
- def visit_field_list(self, node):
- self.body.append(self.starttag(node, 'table', frame='void',
- rules='none', CLASS='field-list'))
- self.body.append('<col class="field-name" />\n'
- '<col class="field-body" />\n'
- '<tbody valign="top">\n')
-
- def depart_field_list(self, node):
- self.body.append('</tbody>\n</table>\n')
-
- def visit_field_name(self, node):
- atts = {}
- if self.in_docinfo:
- atts['class'] = 'docinfo-name'
- else:
- atts['class'] = 'field-name'
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'th', '', **atts))
-
- def depart_field_name(self, node):
- self.body.append(':</th>')
- self.body.append(self.context.pop())
-
- def visit_figure(self, node):
-## self.body.append('\n<text:p text:style-name=".body"/>')
- self.body.append(self.start_para % '.figure')
-
- def depart_figure(self, node):
- self.body.append(self.end_para)
- self.bodyOne = True
-
- def visit_footnote(self, node):
- raise nodes.SkipNode
-
- def footnote_backrefs(self, node):
- warn("footnote backrefs not available")
-
- def depart_footnote(self, node):
- pass
-
- def visit_footnote_reference(self, node):
- name = node['refid']
- id = node['id']
- number = node['auto']
- for footnote in self.document.autofootnotes:
- if name == footnote['name']:
- break
- self.body.append('<text:footnote text:id="%s">\n' % id)
- self.body.append('<text:footnote-citation text:string-value="%s"/>\n' % number)
- self.body.append('<text:footnote-body>\n')
- self.body.append(self.start_para % '.body')
- for child in footnote.children:
- if isinstance(child, nodes.paragraph):
- self.body.append(child.astext())
- self.body.append(self.end_para)
- self.body.append('</text:footnote-body>\n')
- self.body.append('</text:footnote>')
- raise nodes.SkipNode
-
- def depart_footnote_reference(self, node):
- pass
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_header(self, node):
- self.context.append(len(self.body))
-
- def depart_header(self, node):
- start = self.context.pop()
- self.body_prefix.append(self.starttag(node, 'div', CLASS='header'))
- self.body_prefix.extend(self.body[start:])
- self.body_prefix.append('<hr />\n</div>\n')
- del self.body[start:]
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- name = str(node.attributes['uri'])
- image = Image.open(name)
- format = image.format
- dpi = 96.0
- width, height = image.size
- width /= dpi
- height /= dpi
- scale = None
- if 'scale' in node.attributes:
- scale = node.attributes['scale']
- if scale is not None:
- factor = scale / 100.0
- width *= factor
- height *= factor
- # Add to our list so that rest2oo.py can create the manifest.
- if format == 'PNG':
- OOtext.pictures.append((name, OOtext.m_png_format % name))
- elif format == 'TIFF':
- OOtext.pictures.append((name, OOtext.m_tif_format % name))
- else:
- print '*** Image type not recognized ***', repr(name)
- #self.body.append('<text:line-break/>\n')
- self.body.append('<draw:image draw:style-name="image"\n')
- self.body.append('draw:name="%s"\n' % name)
- self.body.append('text:anchor-type="char"\n')
- self.body.append('svg:width="%0.2finch"\n' % width)
- self.body.append('svg:height="%0.2finch"\n' % height)
- self.body.append('draw:z-index="0"\n')
- self.body.append('xlink:href="#Pictures/%s"\n' % name)
- self.body.append('xlink:type="simple"\n')
- self.body.append('xlink:show="embed"\n')
- self.body.append('xlink:actuate="onLoad"/>')
- self.body.append('Figure X.X\n')
-
- def depart_image(self, node):
- pass
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_index_entry(self, node):
- index_format = '<text:alphabetical-index-mark text:string-value="%s"/>\n'
- self.body.append(self.start_para % '.body')
- entries = node.astext().split('\n')
- for entry in entries:
- self.body.append(index_format % self.encode(entry))
- self.body.append(self.end_para)
- raise nodes.SkipNode
-
- def visit_interpreted(self, node):
- # @@@ Incomplete, pending a proper implementation on the
- # Parser/Reader end.
- #self.body.append(node['role'] + ':')
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def depart_interpreted(self, node):
- pass
-
- # Don't need footnote labels/numbers
- def visit_label(self, node):
- print "!"
- raise nodes.SkipNode
-
- def visit_legend(self, node):
- self.body.append(self.starttag(node, 'div', CLASS='legend'))
-
- def depart_legend(self, node):
- self.body.append('</div>\n')
-
- def visit_line_block(self, node):
- self.body.append(self.start_para % '.quotes')
- lines = node.astext()
- lines = lines.split('\n')
- lines = self.line_break.join(lines)
- self.body.append(lines)
- self.body.append(self.end_para)
- raise nodes.SkipNode
-
- def visit_list_item(self, node):
- self.body.append('<text:list-item>')
-
- def depart_list_item(self, node):
- self.body.append('</text:list-item>\n')
-
- def visit_literal(self, node):
- self.body.append(self.start_charstyle % 'code')
-
- def depart_literal(self, node):
- self.body.append(self.end_charstyle)
-
- def visit_literal_block(self, node):
- self.body.append(self.start_para % '.code first')
- self.body.append(self.end_para)
- lines = self.encode(node.astext())
- lines = lines.split('\n')
- while lines[-1] == '':
- lines.pop()
- for line in lines:
- self.body.append(self.start_para % '.code')
- line = self.fix_annotation(line)
- line = self.compress_spaces(line)
- self.body.append(line)
- self.body.append(self.end_para)
- self.body.append(self.start_para % '.code last')
- self.body.append(self.end_para)
- self.bodyOne = True
- raise nodes.SkipNode
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
- def visit_option(self, node):
- if self.context[-1]:
- self.body.append(', ')
-
- def depart_option(self, node):
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- self.body.append(node.get('delimiter', ' '))
- self.body.append(self.starttag(node, 'var', ''))
-
- def depart_option_argument(self, node):
- self.body.append('</var>')
-
- def visit_option_group(self, node):
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'td', **atts))
- self.body.append('<kbd>')
- self.context.append(0) # count number of options
-
- def depart_option_group(self, node):
- self.context.pop()
- self.body.append('</kbd></td>\n')
- self.body.append(self.context.pop())
-
- def visit_option_list(self, node):
- self.body.append(
- self.starttag(node, 'table', CLASS='option-list',
- frame="void", rules="none"))
- self.body.append('<col class="option" />\n'
- '<col class="description" />\n'
- '<tbody valign="top">\n')
-
- def depart_option_list(self, node):
- self.body.append('</tbody>\n</table>\n')
-
- def visit_option_list_item(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_option_list_item(self, node):
- self.body.append('</tr>\n')
-
- def visit_option_string(self, node):
- self.body.append(self.starttag(node, 'span', '', CLASS='option'))
-
- def depart_option_string(self, node):
- self.body.append('</span>')
-
- def visit_paragraph(self, node):
- style = self.para_styles[-1]
- if self.inBulletList:
- style = '.bullet'
- elif self.inEnumList:
- style = '.numlist'
- elif node.astext().startswith('(annotation)'):
- style = '.code NOTATION'
- elif self.bodyOne or node.astext().startswith('#'):
- if style == '.body':
- style = '.body1'
- self.bodyOne = False
- if not self.skip_para_tag:
- self.body.append(self.start_para % style)
-
- def depart_paragraph(self, node):
- if not self.skip_para_tag:
- self.body.append(self.end_para)
-
- def visit_problematic(self, node):
- if node.hasattr('refid'):
- self.body.append('<a href="#%s" name="%s">' % (node['refid'],
- node['id']))
- self.context.append('</a>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'span', '', CLASS='problematic'))
-
- def depart_problematic(self, node):
- self.body.append('</span>')
- self.body.append(self.context.pop())
-
- def visit_raw(self, node):
- if node.has_key('format') and node['format'] == 'html':
- self.body.append(node.astext())
- raise nodes.SkipNode
-
- def visit_reference(self, node):
- pass
-
- def depart_reference(self, node):
- pass
-
- def visit_revision(self, node):
- pass
-
- def depart_revision(self, node):
- pass
-
- def visit_row(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- self.body.append('</tr>\n')
-
- def visit_section(self, node):
- self.section_level += 1
- self.bodyOne = True
-
- def depart_section(self, node):
- self.section_level -= 1
-
- def visit_strong(self, node):
- self.body.append('<strong>')
-
- def depart_strong(self, node):
- self.body.append('</strong>')
-
- def visit_table(self, node):
- self.body.append(
- self.starttag(node, 'table', CLASS="table",
- frame='border', rules='all'))
-
- def depart_table(self, node):
- self.body.append('</table>\n')
-
- def visit_target(self, node):
- if not (node.has_key('refuri') or node.has_key('refid')
- or node.has_key('refname')):
- self.body.append(self.starttag(node, 'a', '', CLASS='target'))
- self.context.append('</a>')
- else:
- self.context.append('')
-
- def depart_target(self, node):
- self.body.append(self.context.pop())
-
- def visit_tbody(self, node):
- self.write_colspecs()
- self.body.append(self.context.pop()) # '</colgroup>\n' or ''
- self.body.append(self.starttag(node, 'tbody', valign='top'))
-
- def depart_tbody(self, node):
- self.body.append('</tbody>\n')
-
- def visit_term(self, node):
- self.body.append(self.starttag(node, 'dt', ''))
-
- def depart_term(self, node):
- """
- Leave the end tag to `self.visit_definition()`, in case there's a
- classifier.
- """
- pass
-
- def visit_tgroup(self, node):
- # Mozilla needs <colgroup>:
- self.body.append(self.starttag(node, 'colgroup'))
- # Appended by thead or tbody:
- self.context.append('</colgroup>\n')
-
- def depart_tgroup(self, node):
- pass
-
- def visit_thead(self, node):
- self.write_colspecs()
- self.body.append(self.context.pop()) # '</colgroup>\n'
- # There may or may not be a <thead>; this is for <tbody> to use:
- self.context.append('')
- self.body.append(self.starttag(node, 'thead', valign='bottom'))
-
- def depart_thead(self, node):
- self.body.append('</thead>\n')
-
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition()
-
- def visit_title(self, node):
- """Only 4 section levels are supported by this writer."""
- title_tag = self.start_para % section_styles[self.section_level]
- self.body.append(title_tag)
-
- def depart_title(self, node):
- self.body.append(self.end_para)
-
- def visit_topic(self, node):
- if node.has_key('class') and node['class'] == 'contents':
- raise nodes.SkipNode
- else:
- pass
-
- def depart_topic(self, node):
- pass
-
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning')
-
- def depart_warning(self, node):
- self.depart_admonition()
-
- def visit_system_message(self, node):
- print node.astext()
-
- def depart_system_message(self, node):
- pass
-
- def unknown_visit(self, node):
- print "Failure processing at line", node.line
- print "Failure is", node.astext()
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
-
-
-"""
-<text:p text:style-name="Standard">
-<draw:image draw:style-name="fr1"
-draw:name="G2: hedgehog2"
-text:anchor-type="as-char"
-svg:width="3.2465inch"
-svg:height="1.6681inch"
-draw:z-index="0"
-xlink:href="#Pictures/100000000000041D0000021D9EBA28D3.png"
-xlink:type="simple"
-xlink:show="embed"
-xlink:actuate="onLoad"/>
-</text:p>
-"""
diff --git a/sandbox/pobrien/OpenOffice/__init__.py b/sandbox/pobrien/OpenOffice/__init__.py
deleted file mode 100644
index db6003cf3..000000000
--- a/sandbox/pobrien/OpenOffice/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# Orbtech python package. \ No newline at end of file
diff --git a/sandbox/pobrien/OpenOffice/rest2oo.py b/sandbox/pobrien/OpenOffice/rest2oo.py
deleted file mode 100755
index 6d7278b93..000000000
--- a/sandbox/pobrien/OpenOffice/rest2oo.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import sys
-import zipfile
-from cStringIO import StringIO
-
-from docutils import core, io
-
-import OOdirectives
-import OOtext
-import OOwriter
-
-
-def main():
- pub = core.Publisher(writer=OOwriter.Writer())
- pub.set_reader('standalone', None, 'restructuredtext')
- settings = pub.get_settings()
- pub.source = io.FileInput(settings, source_path=sys.argv[1])
- pub.destination = io.StringOutput(settings)
- content = pub.publish()
-
- xml_manifest_list = [
- ('content.xml', content),
- ('styles.xml', OOtext.styles)
- ]
-
- xml_entries = []
- for docname, _ in xml_manifest_list:
- xml_entries.append(OOtext.m_xml_format % docname)
-
- image_manifest_list = OOtext.pictures
-
- image_entries = []
- for name, format in image_manifest_list:
- image_entries.append(format)
-
- manifest = OOtext.manifest % ('\n '.join(image_entries), '\n '.join(xml_entries))
- xml_manifest_list.append(('META-INF/manifest.xml', manifest))
-
- zip = zipfile.ZipFile(sys.argv[2], "w")
- for docname, contents in xml_manifest_list:
- zinfo = zipfile.ZipInfo(docname)
- zip.writestr(zinfo, contents)
- for name, format in image_manifest_list:
- zip.write(name, 'Pictures/' + name)
- zip.close()
-
-if __name__ == '__main__':
- main()
diff --git a/sandbox/pobrien/OpenOffice/rest2oopseudo.py b/sandbox/pobrien/OpenOffice/rest2oopseudo.py
deleted file mode 100755
index 75565eac5..000000000
--- a/sandbox/pobrien/OpenOffice/rest2oopseudo.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env python
-
-"""
-A minimal front end to the Docutils Publisher, producing pseudo-XML.
-"""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-
-import OOdirectives
-
-description = ('Generates pseudo-XML from standalone reStructuredText '
- 'sources (for testing purposes). ' + default_description)
-
-publish_cmdline(description=description)
diff --git a/sandbox/pobrien/OpenOffice/rest2ooxml.py b/sandbox/pobrien/OpenOffice/rest2ooxml.py
deleted file mode 100755
index 671052845..000000000
--- a/sandbox/pobrien/OpenOffice/rest2ooxml.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env python
-
-"""Generates the OpenOffice.org content.xml file outside of a .swx zip
-file. Useful for debugging the OOwriter."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-import locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-from docutils.core import publish_cmdline, default_description
-
-from OOwriter import Writer
-
-
-def main():
- description = ("Generates OpenOffice.org XML. " + default_description)
- publish_cmdline(writer=Writer(), description=description)
-
-
-if __name__ == '__main__':
- main()
diff --git a/sandbox/pobrien/WriterTemplate.py b/sandbox/pobrien/WriterTemplate.py
deleted file mode 100644
index 868c8434a..000000000
--- a/sandbox/pobrien/WriterTemplate.py
+++ /dev/null
@@ -1,1081 +0,0 @@
-"""Template for creating a new writer."""
-
-__author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
-__cvsid__ = "$Id$"
-__revision__ = "$Revision$"[11:-2]
-
-
-__docformat__ = 'reStructuredText'
-
-
-import sys
-import os
-import time
-import re
-from types import ListType
-
-import docutils
-from docutils import nodes, utils, writers, languages
-
-
-class Writer(writers.Writer):
-
- supported = ('SomeFormat')
- """Formats this writer supports."""
-
- output = None
- """Final translated form of `document`."""
-
- def __init__(self):
- writers.Writer.__init__(self)
- self.translator_class = Translator
-
- def translate(self):
- visitor = self.translator_class(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
-
-
-class Translator(nodes.NodeVisitor):
- """Modify this to suite your needs."""
-
- words_and_spaces = re.compile(r'\S+| +|\n')
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.settings = settings = document.settings
- lcode = settings.language_code
- self.language = languages.get_language(lcode)
- self.head = []
- self.body = []
- self.foot = []
- self.section_level = 0
- self.context = []
- self.topic_class = ''
- self.colspecs = []
- self.compact_p = 1
- self.compact_simple = None
- self.in_docinfo = None
-
- def astext(self):
- """Return the final formatted document as a string."""
- raise NotImplementedError
- return ''.join(self.head + self.body + self.foot)
-
- def visit_Text(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(node.astext())
-
- def depart_Text(self, node):
- pass
-
- def visit_address(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'address', meta=None)
-
- def depart_address(self, node):
- self.depart_docinfo_item()
-
- def visit_admonition(self, node, name):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'div', CLASS=name))
- self.body.append('<p class="admonition-title">'
- + self.language.labels[name] + '</p>\n')
-
- def depart_admonition(self):
- raise NotImplementedError, node.astext()
- self.body.append('</div>\n')
-
- def visit_attention(self, node):
- self.visit_admonition(node, 'attention')
-
- def depart_attention(self, node):
- self.depart_admonition()
-
- def visit_author(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'author')
-
- def depart_author(self, node):
- self.depart_docinfo_item()
-
- def visit_authors(self, node):
- pass
-
- def depart_authors(self, node):
- pass
-
- def visit_block_quote(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'blockquote'))
-
- def depart_block_quote(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</blockquote>\n')
-
- def check_simple_list(self, node):
- raise NotImplementedError, node.astext()
- """Check for a simple list that can be rendered compactly."""
- visitor = SimpleListChecker(self.document)
- try:
- node.walk(visitor)
- except nodes.NodeFound:
- return None
- else:
- return 1
-
- def visit_bullet_list(self, node):
- raise NotImplementedError, node.astext()
- atts = {}
- old_compact_simple = self.compact_simple
- self.context.append((self.compact_simple, self.compact_p))
- self.compact_p = None
- self.compact_simple = (self.settings.compact_lists and
- (self.compact_simple
- or self.topic_class == 'contents'
- or self.check_simple_list(node)))
- if self.compact_simple and not old_compact_simple:
- atts['class'] = 'simple'
- self.body.append(self.starttag(node, 'ul', **atts))
-
- def depart_bullet_list(self, node):
- raise NotImplementedError, node.astext()
- self.compact_simple, self.compact_p = self.context.pop()
- self.body.append('</ul>\n')
-
- def visit_caption(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'p', '', CLASS='caption'))
-
- def depart_caption(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</p>\n')
-
- def visit_caution(self, node):
- self.visit_admonition(node, 'caution')
-
- def depart_caution(self, node):
- self.depart_admonition()
-
- def visit_citation(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'table', CLASS='citation',
- frame="void", rules="none"))
- self.body.append('<colgroup><col class="label" /><col /></colgroup>\n'
- '<col />\n'
- '<tbody valign="top">\n'
- '<tr>')
- self.footnote_backrefs(node)
-
- def depart_citation(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_citation_reference(self, node):
- raise NotImplementedError, node.astext()
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '[', href=href,
- CLASS='citation-reference'))
-
- def depart_citation_reference(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(']</a>')
-
- def visit_classifier(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(' <span class="classifier-delimiter">:</span> ')
- self.body.append(self.starttag(node, 'span', '', CLASS='classifier'))
-
- def depart_classifier(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</span>')
-
- def visit_colspec(self, node):
- self.colspecs.append(node)
-
- def depart_colspec(self, node):
- pass
-
- def write_colspecs(self):
- raise NotImplementedError, node.astext()
- width = 0
- for node in self.colspecs:
- width += node['colwidth']
- for node in self.colspecs:
- colwidth = int(node['colwidth'] * 100.0 / width + 0.5)
- self.body.append(self.emptytag(node, 'col',
- width='%i%%' % colwidth))
- self.colspecs = []
-
- def visit_comment(self, node,
- sub=re.compile('-(?=-)').sub):
- raise NotImplementedError, node.astext()
- """Escape double-dashes in comment text."""
- self.body.append('<!-- %s -->\n' % sub('- ', node.astext()))
- # Content already processed:
- raise nodes.SkipNode
-
- def visit_contact(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'contact', meta=None)
-
- def depart_contact(self, node):
- self.depart_docinfo_item()
-
- def visit_copyright(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'copyright')
-
- def depart_copyright(self, node):
- self.depart_docinfo_item()
-
- def visit_danger(self, node):
- self.visit_admonition(node, 'danger')
-
- def depart_danger(self, node):
- self.depart_admonition()
-
- def visit_date(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'date')
-
- def depart_date(self, node):
- self.depart_docinfo_item()
-
- def visit_decoration(self, node):
- pass
-
- def depart_decoration(self, node):
- pass
-
- def visit_definition(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</dt>\n')
- self.body.append(self.starttag(node, 'dd', ''))
- if len(node):
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_definition(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</dd>\n')
-
- def visit_definition_list(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'dl'))
-
- def depart_definition_list(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</dl>\n')
-
- def visit_definition_list_item(self, node):
- pass
-
- def depart_definition_list_item(self, node):
- pass
-
- def visit_description(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'td', ''))
- if len(node):
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_description(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</td>')
-
- def visit_docinfo(self, node):
- raise NotImplementedError, node.astext()
- self.context.append(len(self.body))
- self.body.append(self.starttag(node, 'table', CLASS='docinfo',
- frame="void", rules="none"))
- self.body.append('<col class="docinfo-name" />\n'
- '<col class="docinfo-content" />\n'
- '<tbody valign="top">\n')
- self.in_docinfo = 1
-
- def depart_docinfo(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tbody>\n</table>\n')
- self.in_docinfo = None
- start = self.context.pop()
- self.body_pre_docinfo = self.body[:start]
- self.docinfo = self.body[start:]
- self.body = []
-
- def visit_docinfo_item(self, node, name, meta=1):
- raise NotImplementedError, node.astext()
- if meta:
- self.head.append('<meta name="%s" content="%s" />\n'
- % (name, self.attval(node.astext())))
- self.body.append(self.starttag(node, 'tr', ''))
- self.body.append('<th class="docinfo-name">%s:</th>\n<td>'
- % self.language.labels[name])
- if len(node):
- if isinstance(node[0], nodes.Element):
- node[0].set_class('first')
- if isinstance(node[0], nodes.Element):
- node[-1].set_class('last')
-
- def depart_docinfo_item(self):
- raise NotImplementedError, node.astext()
- self.body.append('</td></tr>\n')
-
- def visit_doctest_block(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'pre', CLASS='doctest-block'))
-
- def depart_doctest_block(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('\n</pre>\n')
-
- def visit_document(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'div', CLASS='document'))
-
- def depart_document(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</div>\n')
-
- def visit_emphasis(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('<em>')
-
- def depart_emphasis(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</em>')
-
- def visit_entry(self, node):
- raise NotImplementedError, node.astext()
- if isinstance(node.parent.parent, nodes.thead):
- tagname = 'th'
- else:
- tagname = 'td'
- atts = {}
- if node.has_key('morerows'):
- atts['rowspan'] = node['morerows'] + 1
- if node.has_key('morecols'):
- atts['colspan'] = node['morecols'] + 1
- self.body.append(self.starttag(node, tagname, '', **atts))
- self.context.append('</%s>\n' % tagname.lower())
- if len(node) == 0: # empty cell
- self.body.append('&nbsp;')
- else:
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_entry(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.context.pop())
-
- def visit_enumerated_list(self, node):
- raise NotImplementedError, node.astext()
- """
- The 'start' attribute does not conform to HTML 4.01's strict.dtd, but
- CSS1 doesn't help. CSS2 isn't widely enough supported yet to be
- usable.
- """
- atts = {}
- if node.has_key('start'):
- atts['start'] = node['start']
- if node.has_key('enumtype'):
- atts['class'] = node['enumtype']
- # @@@ To do: prefix, suffix. How? Change prefix/suffix to a
- # single "format" attribute? Use CSS2?
- old_compact_simple = self.compact_simple
- self.context.append((self.compact_simple, self.compact_p))
- self.compact_p = None
- self.compact_simple = (self.settings.compact_lists and
- (self.compact_simple
- or self.topic_class == 'contents'
- or self.check_simple_list(node)))
- if self.compact_simple and not old_compact_simple:
- atts['class'] = (atts.get('class', '') + ' simple').strip()
- self.body.append(self.starttag(node, 'ol', **atts))
-
- def depart_enumerated_list(self, node):
- raise NotImplementedError, node.astext()
- self.compact_simple, self.compact_p = self.context.pop()
- self.body.append('</ol>\n')
-
- def visit_error(self, node):
- self.visit_admonition(node, 'error')
-
- def depart_error(self, node):
- self.depart_admonition()
-
- def visit_field(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'tr', '', CLASS='field'))
-
- def depart_field(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tr>\n')
-
- def visit_field_body(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'td', '', CLASS='field-body'))
- if len(node):
- node[0].set_class('first')
- node[-1].set_class('last')
-
- def depart_field_body(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</td>\n')
-
- def visit_field_list(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'table', frame='void',
- rules='none', CLASS='field-list'))
- self.body.append('<col class="field-name" />\n'
- '<col class="field-body" />\n'
- '<tbody valign="top">\n')
-
- def depart_field_list(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tbody>\n</table>\n')
-
- def visit_field_name(self, node):
- raise NotImplementedError, node.astext()
- atts = {}
- if self.in_docinfo:
- atts['class'] = 'docinfo-name'
- else:
- atts['class'] = 'field-name'
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'th', '', **atts))
-
- def depart_field_name(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(':</th>')
- self.body.append(self.context.pop())
-
- def visit_figure(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'div', CLASS='figure'))
-
- def depart_figure(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</div>\n')
-
- def visit_footer(self, node):
- raise NotImplementedError, node.astext()
- self.context.append(len(self.body))
-
- def depart_footer(self, node):
- raise NotImplementedError, node.astext()
- start = self.context.pop()
- footer = (['<hr class="footer"/>\n',
- self.starttag(node, 'div', CLASS='footer')]
- + self.body[start:] + ['</div>\n'])
- self.body_suffix[:0] = footer
- del self.body[start:]
-
- def visit_footnote(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'table', CLASS='footnote',
- frame="void", rules="none"))
- self.body.append('<colgroup><col class="label" /><col /></colgroup>\n'
- '<tbody valign="top">\n'
- '<tr>')
- self.footnote_backrefs(node)
-
- def footnote_backrefs(self, node):
- raise NotImplementedError, node.astext()
- if self.settings.footnote_backlinks and node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- self.context.append('')
- self.context.append('<a class="fn-backref" href="#%s" '
- 'name="%s">' % (backrefs[0], node['id']))
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append('<a class="fn-backref" href="#%s">%s</a>'
- % (backref, i))
- i += 1
- self.context.append('<em>(%s)</em> ' % ', '.join(backlinks))
- self.context.append('<a name="%s">' % node['id'])
- else:
- self.context.append('')
- self.context.append('<a name="%s">' % node['id'])
-
- def depart_footnote(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</td></tr>\n'
- '</tbody>\n</table>\n')
-
- def visit_footnote_reference(self, node):
- raise NotImplementedError, node.astext()
- href = ''
- if node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- format = self.settings.footnote_references
- if format == 'brackets':
- suffix = '['
- self.context.append(']')
- elif format == 'superscript':
- suffix = '<sup>'
- self.context.append('</sup>')
- else: # shouldn't happen
- suffix = '???'
- self.content.append('???')
- self.body.append(self.starttag(node, 'a', suffix, href=href,
- CLASS='footnote-reference'))
-
- def depart_footnote_reference(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.context.pop() + '</a>')
-
- def visit_generated(self, node):
- pass
-
- def depart_generated(self, node):
- pass
-
- def visit_header(self, node):
- raise NotImplementedError, node.astext()
- self.context.append(len(self.body))
-
- def depart_header(self, node):
- raise NotImplementedError, node.astext()
- start = self.context.pop()
- self.body_prefix.append(self.starttag(node, 'div', CLASS='header'))
- self.body_prefix.extend(self.body[start:])
- self.body_prefix.append('<hr />\n</div>\n')
- del self.body[start:]
-
- def visit_hint(self, node):
- self.visit_admonition(node, 'hint')
-
- def depart_hint(self, node):
- self.depart_admonition()
-
- def visit_image(self, node):
- raise NotImplementedError, node.astext()
- atts = node.attributes.copy()
- atts['src'] = atts['uri']
- del atts['uri']
- if not atts.has_key('alt'):
- atts['alt'] = atts['src']
- if isinstance(node.parent, nodes.TextElement):
- self.context.append('')
- else:
- self.body.append('<p>')
- self.context.append('</p>\n')
- self.body.append(self.emptytag(node, 'img', '', **atts))
-
- def depart_image(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.context.pop())
-
- def visit_important(self, node):
- self.visit_admonition(node, 'important')
-
- def depart_important(self, node):
- self.depart_admonition()
-
- def visit_label(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'td', '%s[' % self.context.pop(),
- CLASS='label'))
-
- def depart_label(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(']</a></td><td>%s' % self.context.pop())
-
- def visit_legend(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'div', CLASS='legend'))
-
- def depart_legend(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</div>\n')
-
- def visit_line_block(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'pre', CLASS='line-block'))
-
- def depart_line_block(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('\n</pre>\n')
-
- def visit_list_item(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'li', ''))
- if len(node):
- node[0].set_class('first')
-
- def depart_list_item(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</li>\n')
-
- def visit_literal(self, node):
- raise NotImplementedError, node.astext()
- """Process text to prevent tokens from wrapping."""
- self.body.append(self.starttag(node, 'tt', '', CLASS='literal'))
- text = node.astext()
- for token in self.words_and_spaces.findall(text):
- if token.strip():
- # Protect text like "--an-option" from bad line wrapping:
- self.body.append('<span class="pre">%s</span>'
- % self.encode(token))
- elif token in ('\n', ' '):
- # Allow breaks at whitespace:
- self.body.append(token)
- else:
- # Protect runs of multiple spaces; the last space can wrap:
- self.body.append('&nbsp;' * (len(token) - 1) + ' ')
- self.body.append('</tt>')
- # Content already processed:
- raise nodes.SkipNode
-
- def visit_literal_block(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'pre', CLASS='literal-block'))
-
- def depart_literal_block(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('\n</pre>\n')
-
- def visit_meta(self, node):
- raise NotImplementedError, node.astext()
- self.head.append(self.emptytag(node, 'meta', **node.attributes))
-
- def depart_meta(self, node):
- pass
-
- def visit_note(self, node):
- self.visit_admonition(node, 'note')
-
- def depart_note(self, node):
- self.depart_admonition()
-
- def visit_option(self, node):
- raise NotImplementedError, node.astext()
- if self.context[-1]:
- self.body.append(', ')
-
- def depart_option(self, node):
- raise NotImplementedError, node.astext()
- self.context[-1] += 1
-
- def visit_option_argument(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(node.get('delimiter', ' '))
- self.body.append(self.starttag(node, 'var', ''))
-
- def depart_option_argument(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</var>')
-
- def visit_option_group(self, node):
- raise NotImplementedError, node.astext()
- atts = {}
- if len(node.astext()) > 14:
- atts['colspan'] = 2
- self.context.append('</tr>\n<tr><td>&nbsp;</td>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'td', **atts))
- self.body.append('<kbd>')
- self.context.append(0) # count number of options
-
- def depart_option_group(self, node):
- raise NotImplementedError, node.astext()
- self.context.pop()
- self.body.append('</kbd></td>\n')
- self.body.append(self.context.pop())
-
- def visit_option_list(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(
- self.starttag(node, 'table', CLASS='option-list',
- frame="void", rules="none"))
- self.body.append('<col class="option" />\n'
- '<col class="description" />\n'
- '<tbody valign="top">\n')
-
- def depart_option_list(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tbody>\n</table>\n')
-
- def visit_option_list_item(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_option_list_item(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tr>\n')
-
- def visit_option_string(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'span', '', CLASS='option'))
-
- def depart_option_string(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</span>')
-
- def visit_organization(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'organization')
-
- def depart_organization(self, node):
- raise NotImplementedError, node.astext()
- self.depart_docinfo_item()
-
- def visit_paragraph(self, node):
- raise NotImplementedError, node.astext()
- # Omit <p> tags if this is an only child and optimizable.
- if (self.compact_simple or
- self.compact_p and (len(node.parent) == 1 or
- len(node.parent) == 2 and
- isinstance(node.parent[0], nodes.label))):
- self.context.append('')
- else:
- self.body.append(self.starttag(node, 'p', ''))
- self.context.append('</p>\n')
-
- def depart_paragraph(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.context.pop())
-
- def visit_problematic(self, node):
- raise NotImplementedError, node.astext()
- if node.hasattr('refid'):
- self.body.append('<a href="#%s" name="%s">' % (node['refid'],
- node['id']))
- self.context.append('</a>')
- else:
- self.context.append('')
- self.body.append(self.starttag(node, 'span', '', CLASS='problematic'))
-
- def depart_problematic(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</span>')
- self.body.append(self.context.pop())
-
- def visit_raw(self, node):
- raise NotImplementedError, node.astext()
- if node.get('format') == 'html':
- self.body.append(node.astext())
- # Keep non-HTML raw text out of output:
- raise nodes.SkipNode
-
- def visit_reference(self, node):
- raise NotImplementedError, node.astext()
- if node.has_key('refuri'):
- href = node['refuri']
- elif node.has_key('refid'):
- href = '#' + node['refid']
- elif node.has_key('refname'):
- href = '#' + self.document.nameids[node['refname']]
- self.body.append(self.starttag(node, 'a', '', href=href,
- CLASS='reference'))
-
- def depart_reference(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</a>')
-
- def visit_revision(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'revision', meta=None)
-
- def depart_revision(self, node):
- self.depart_docinfo_item()
-
- def visit_row(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tr>\n')
-
- def visit_section(self, node):
- raise NotImplementedError, node.astext()
- self.section_level += 1
- self.body.append(self.starttag(node, 'div', CLASS='section'))
-
- def depart_section(self, node):
- raise NotImplementedError, node.astext()
- self.section_level -= 1
- self.body.append('</div>\n')
-
- def visit_status(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'status', meta=None)
-
- def depart_status(self, node):
- self.depart_docinfo_item()
-
- def visit_strong(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('<strong>')
-
- def depart_strong(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</strong>')
-
- def visit_substitution_definition(self, node):
- """Internal only."""
- raise nodes.SkipNode
-
- def visit_substitution_reference(self, node):
- self.unimplemented_visit(node)
-
- def visit_subtitle(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'h2', '', CLASS='subtitle'))
-
- def depart_subtitle(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</h2>\n')
-
- def visit_system_message(self, node):
- raise NotImplementedError, node.astext()
- if node['level'] < self.document.reporter['writer'].report_level:
- # Level is too low to display:
- raise nodes.SkipNode
- self.body.append(self.starttag(node, 'div', CLASS='system-message'))
- self.body.append('<p class="system-message-title">')
- attr = {}
- backref_text = ''
- if node.hasattr('id'):
- attr['name'] = node['id']
- if node.hasattr('backrefs'):
- backrefs = node['backrefs']
- if len(backrefs) == 1:
- backref_text = ('; <em><a href="#%s">backlink</a></em>'
- % backrefs[0])
- else:
- i = 1
- backlinks = []
- for backref in backrefs:
- backlinks.append('<a href="#%s">%s</a>' % (backref, i))
- i += 1
- backref_text = ('; <em>backlinks: %s</em>'
- % ', '.join(backlinks))
- if node.hasattr('line'):
- line = ', line %s' % node['line']
- else:
- line = ''
- if attr:
- a_start = self.starttag({}, 'a', '', **attr)
- a_end = '</a>'
- else:
- a_start = a_end = ''
- self.body.append('System Message: %s%s/%s%s (<tt>%s</tt>%s)%s</p>\n'
- % (a_start, node['type'], node['level'], a_end,
- node['source'], line, backref_text))
-
- def depart_system_message(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</div>\n')
-
- def visit_table(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(
- self.starttag(node, 'table', CLASS="table",
- frame='border', rules='all'))
-
- def depart_table(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</table>\n')
-
- def visit_target(self, node):
- raise NotImplementedError, node.astext()
- if not (node.has_key('refuri') or node.has_key('refid')
- or node.has_key('refname')):
- self.body.append(self.starttag(node, 'a', '', CLASS='target'))
- self.context.append('</a>')
- else:
- self.context.append('')
-
- def depart_target(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.context.pop())
-
- def visit_tbody(self, node):
- raise NotImplementedError, node.astext()
- self.write_colspecs()
- self.body.append(self.context.pop()) # '</colgroup>\n' or ''
- self.body.append(self.starttag(node, 'tbody', valign='top'))
-
- def depart_tbody(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</tbody>\n')
-
- def visit_term(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'dt', ''))
-
- def depart_term(self, node):
- """
- Leave the end tag to `self.visit_definition()`, in case there's a
- classifier.
- """
- raise NotImplementedError, node.astext()
- pass
-
- def visit_tgroup(self, node):
- raise NotImplementedError, node.astext()
- # Mozilla needs <colgroup>:
- self.body.append(self.starttag(node, 'colgroup'))
- # Appended by thead or tbody:
- self.context.append('</colgroup>\n')
-
- def depart_tgroup(self, node):
- pass
-
- def visit_thead(self, node):
- raise NotImplementedError, node.astext()
- self.write_colspecs()
- self.body.append(self.context.pop()) # '</colgroup>\n'
- # There may or may not be a <thead>; this is for <tbody> to use:
- self.context.append('')
- self.body.append(self.starttag(node, 'thead', valign='bottom'))
-
- def depart_thead(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</thead>\n')
-
- def visit_tip(self, node):
- self.visit_admonition(node, 'tip')
-
- def depart_tip(self, node):
- self.depart_admonition()
-
- def visit_title(self, node):
- raise NotImplementedError, node.astext()
- """Only 6 section levels are supported by HTML."""
- if isinstance(node.parent, nodes.topic):
- self.body.append(
- self.starttag(node, 'p', '', CLASS='topic-title'))
- if node.parent.hasattr('id'):
- self.body.append(
- self.starttag({}, 'a', '', name=node.parent['id']))
- self.context.append('</a></p>\n')
- else:
- self.context.append('</p>\n')
- elif self.section_level == 0:
- # document title
- self.head.append('<title>%s</title>\n'
- % self.encode(node.astext()))
- self.body.append(self.starttag(node, 'h1', '', CLASS='title'))
- self.context.append('</h1>\n')
- else:
- self.body.append(
- self.starttag(node, 'h%s' % self.section_level, ''))
- atts = {}
- if node.parent.hasattr('id'):
- atts['name'] = node.parent['id']
- if node.hasattr('refid'):
- atts['class'] = 'toc-backref'
- atts['href'] = '#' + node['refid']
- self.body.append(self.starttag({}, 'a', '', **atts))
- self.context.append('</a></h%s>\n' % (self.section_level))
-
- def depart_title(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.context.pop())
-
- def visit_title_reference(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'cite', ''))
-
- def depart_title_reference(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</cite>')
-
- def visit_topic(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.starttag(node, 'div', CLASS='topic'))
- self.topic_class = node.get('class')
-
- def depart_topic(self, node):
- raise NotImplementedError, node.astext()
- self.body.append('</div>\n')
- self.topic_class = ''
-
- def visit_transition(self, node):
- raise NotImplementedError, node.astext()
- self.body.append(self.emptytag(node, 'hr'))
-
- def depart_transition(self, node):
- pass
-
- def visit_version(self, node):
- raise NotImplementedError, node.astext()
- self.visit_docinfo_item(node, 'version', meta=None)
-
- def depart_version(self, node):
- self.depart_docinfo_item()
-
- def visit_warning(self, node):
- self.visit_admonition(node, 'warning')
-
- def depart_warning(self, node):
- self.depart_admonition()
-
- def unimplemented_visit(self, node):
- raise NotImplementedError('visiting unimplemented node type: %s'
- % node.__class__.__name__)
-
-
-class SimpleListChecker(nodes.GenericNodeVisitor):
-
- """
- Raise `nodes.SkipNode` if non-simple list item is encountered.
-
- Here "simple" means a list item containing nothing other than a single
- paragraph, a simple list, or a paragraph followed by a simple list.
- """
-
- def default_visit(self, node):
- raise nodes.NodeFound
-
- def visit_bullet_list(self, node):
- pass
-
- def visit_enumerated_list(self, node):
- pass
-
- def visit_list_item(self, node):
- children = []
- for child in node.get_children():
- if not isinstance(child, nodes.Invisible):
- children.append(child)
- if (children and isinstance(children[0], nodes.paragraph)
- and (isinstance(children[-1], nodes.bullet_list)
- or isinstance(children[-1], nodes.enumerated_list))):
- children.pop()
- if len(children) <= 1:
- return
- else:
- raise nodes.NodeFound
-
- def visit_paragraph(self, node):
- raise nodes.SkipNode
-
- def invisible_visit(self, node):
- """Invisible nodes should be ignored."""
- pass
-
- visit_comment = invisible_visit
- visit_substitution_definition = invisible_visit
- visit_target = invisible_visit
- visit_pending = invisible_visit
diff --git a/sandbox/pobrien/dwArticle/__init__.py b/sandbox/pobrien/dwArticle/__init__.py
deleted file mode 100644
index db6003cf3..000000000
--- a/sandbox/pobrien/dwArticle/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# Orbtech python package. \ No newline at end of file
diff --git a/sandbox/richard/ZReST/.cvsignore b/sandbox/richard/ZReST/.cvsignore
deleted file mode 100644
index 533a4ce06..000000000
--- a/sandbox/richard/ZReST/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.pyc
-*.pyo
-*.tgz
diff --git a/sandbox/richard/ZReST/Makefile b/sandbox/richard/ZReST/Makefile
deleted file mode 100644
index 1f78c66e8..000000000
--- a/sandbox/richard/ZReST/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-FILES = ZReST.py __init__.py refresh.txt version.txt TODO.txt README.txt
-DTML = dtml/manage_addZReSTForm.dtml dtml/manage_editForm.dtml
-VERSION := $(shell cat version.txt)
-
-all: ${FILES} ${DTML}
- rm -rf dist
- mkdir dist
- mkdir dist/ZReST
- mkdir dist/ZReST/dtml
- cp ${FILES} dist/ZReST
- cp ${DTML} dist/ZReST/dtml
- (cd dist; tar zcf ZReST-${VERSION}.tgz ZReST)
- mv dist/ZReST-${VERSION}.tgz .
- rm -rf dist
-
diff --git a/sandbox/richard/ZReST/README.txt b/sandbox/richard/ZReST/README.txt
deleted file mode 100644
index 28b0af78a..000000000
--- a/sandbox/richard/ZReST/README.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-----------------------------------
-ReStructuredText Document for Zope
-----------------------------------
-
-Requirements
-============
-
-To use this product, you will need:
-
-python2.1+
- see http://www.python.org/
-Zope 2.5+
- see http://www.zope.org/
-A docutils snapshot from later than 21 August 2002
- see http://docutils.sourceforge.net/#development-snapshots
-
-Installation
-============
-
-To install this product, unpack it so the ZReST directory is in the Zope
-lib/python/Products directory. You should then restart Zope.
-
-You will now be able to add objects of type "ReStructuredText Document".
-
-Usage
-=====
-
-See the docutils user documentation section:
-
- http://docutils.sourceforge.net/#user-documentation
-
-I recommend starting with the ReST "primer":
-
- http://docutils.sourceforge.net/docs/rst/quickstart.html
-
-
-Footnotes
-=========
-
-This product was written by Richard Jones, rjones@ekit-inc.com.
-
-Please direct questions about ReStructureText to the docutils mailing lists.
-
-This package is placed in the Public Domain.
-
diff --git a/sandbox/richard/ZReST/TODO.txt b/sandbox/richard/ZReST/TODO.txt
deleted file mode 100644
index 6860c9423..000000000
--- a/sandbox/richard/ZReST/TODO.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-* charset configuration, defaulting to 'latin-1'
-
-* add "level" and "header" args to render / as_html
-
- - level indicates the header level to start at
- - header boolean turns page header tags on/off
diff --git a/sandbox/richard/ZReST/ZReST.py b/sandbox/richard/ZReST/ZReST.py
deleted file mode 100644
index e130cf18e..000000000
--- a/sandbox/richard/ZReST/ZReST.py
+++ /dev/null
@@ -1,288 +0,0 @@
-#
-# $Id$
-#
-''' ReStructuredText Product for Zope
-
-This Product stores two texts - a "source" text in ReStructureText format,
-and a HTML "formatted" version of that text.
-
-'''
-import docutils.core, docutils.io
-
-from Globals import InitializeClass, DTMLFile
-from OFS.SimpleItem import Item
-from OFS.PropertyManager import PropertyManager
-from OFS.History import Historical, html_diff
-from Acquisition import Implicit
-from Persistence import Persistent
-from AccessControl import ClassSecurityInfo
-from AccessControl import ModuleSecurityInfo
-from DateTime.DateTime import DateTime
-modulesecurity = ModuleSecurityInfo()
-
-modulesecurity.declareProtected('View management screens',
- 'manage_addZReSTForm')
-manage_addZReSTForm = DTMLFile('dtml/manage_addZReSTForm', globals())
-
-modulesecurity.declareProtected('Add Z Roundups', 'manage_addZReST')
-def manage_addZReST(self, id, file='', REQUEST=None):
- """Add a ZReST product """
- # validate the instance_home
- self._setObject(id, ZReST(id))
- self._getOb(id).manage_upload(file)
- if REQUEST:
- return self.manage_main(self, REQUEST)
-
-class Warnings:
- def __init__(self):
- self.messages = []
- def write(self, message):
- self.messages.append(message)
-
-class ZReST(Item, PropertyManager, Historical, Implicit, Persistent):
- '''An instance of this class provides an interface between Zope and
- ReStructuredText for one text.
- '''
- meta_type = 'ReStructuredText Document'
- security = ClassSecurityInfo()
-
- def __init__(self, id):
- self.id = id
- self.title = id
- self.stylesheet = 'default.css'
- self.report_level = '2'
- self.source = self.formatted = ''
-
- # define the properties that define this object
- _properties = (
- {'id':'stylesheet', 'type': 'string', 'mode': 'w',
- 'default': 'default.css'},
- {'id':'report_level', 'type': 'string', 'mode': 'w', 'default': '2'},
- )
- property_extensible_schema__ = 0
-
- # define the tabs for the management interface
- manage_options= ( {'label': 'Edit', 'action':'manage_main'},
- {'label': 'View', 'action':'index_html'},
- {'label': 'Source', 'action':'source_txt'},
- ) \
- + PropertyManager.manage_options \
- + Historical.manage_options \
- + Item.manage_options
-
- # access to the source text and formatted text
- security.declareProtected('View', 'index_html')
- def index_html(self, REQUEST=None):
- ''' Getting the formatted text
- '''
- REQUEST.RESPONSE.setHeader('content-type', 'text/html')
- return self.formatted
- security.declareProtected('View', 'source_txt')
- def source_txt(self, REQUEST=None):
- ''' Getting the source text
- '''
- REQUEST.RESPONSE.setHeader('content-type', 'text/plain')
- return self.source
-
- # edit form, which is also the primary interface
- security.declareProtected('Edit ReStructuredText', 'manage_editForm')
- manage_main = DTMLFile('dtml/manage_editForm', globals())
-
- # edit action
- security.declareProtected('Edit ReStructuredText', 'manage_edit')
- def manage_edit(self, data, SUBMIT='Change',dtpref_cols='50',
- dtpref_rows='20', REQUEST=None):
- '''Alias index_html to roundup's index
- '''
- if self._size_changes.has_key(SUBMIT):
- return self._er(data, SUBMIT, dtpref_cols, dtpref_rows, REQUEST)
- if data != self.source:
- self.source = data
- self.render()
-
- if REQUEST:
- message="Saved changes."
- return self.manage_main(self, REQUEST, manage_tabs_message=message)
-
- # handle edit window size changes
- _size_changes = {
- 'Bigger': (5,5),
- 'Smaller': (-5,-5),
- 'Narrower': (0,-5),
- 'Wider': (0,5),
- 'Taller': (5,0),
- 'Shorter': (-5,0),
- }
- def _er(self, data, SUBMIT, dtpref_cols, dtpref_rows, REQUEST):
- dr,dc = self._size_changes[SUBMIT]
- rows=max(1,int(dtpref_rows)+dr)
- cols=max(40,int(dtpref_cols)+dc)
- e=(DateTime('GMT') + 365).rfc822()
- resp=REQUEST['RESPONSE']
- resp.setCookie('dtpref_rows',str(rows),path='/',expires=e)
- resp.setCookie('dtpref_cols',str(cols),path='/',expires=e)
- return self.manage_main(self, REQUEST, __str__=self.quotedHTML(data),
- dtpref_cols=cols, dtpref_rows=rows)
- security.declarePrivate('quotedHTML')
- def quotedHTML(self,
- text=None,
- character_entities=(
- (('&'), '&amp;'),
- (("<"), '&lt;' ),
- ((">"), '&gt;' ),
- (('"'), '&quot;'))): #"
- if text is None: text=self.read_raw()
- for re,name in character_entities:
- if text.find(re) >= 0: text=name.join(text.split(re))
- return text
-
-
- # handle uploads too
- security.declareProtected('Edit ReStructuredText', 'manage_upload')
- def manage_upload(self, file='', REQUEST=None):
- ''' Replaces the current source with the upload.
- '''
- if isinstance(file, type('')):
- self.source = file
- else:
- self.source = file.read()
- self.render()
-
- if REQUEST:
- message="Saved changes."
- return self.manage_main(self, REQUEST, manage_tabs_message=message)
-
- security.declarePrivate('render')
- def render(self):
- ''' Render the source to HTML
- '''
- # format with strings
- pub = docutils.core.Publisher()
- pub.set_reader('standalone', None, 'restructuredtext')
- pub.set_writer('html')
-
- # go with the defaults
- pub.get_settings()
-
- # this is needed, but doesn't seem to do anything
- pub.settings._destination = ''
-
- # use the stylesheet chosen by the user
- pub.settings.stylesheet = self.stylesheet
-
- # set the reporting level to something sane
- pub.settings.report_level = int(self.report_level)
-
- # don't break if we get errors
- pub.settings.halt_level = 6
-
- # remember warnings
- pub.settings.warning_stream = Warnings()
-
- # input
- pub.source = docutils.io.StringInput(
- source=self.source, encoding=pub.settings.input_encoding)
-
- # output - not that it's needed
- pub.destination = docutils.io.StringOutput(
- encoding=pub.settings.output_encoding)
-
- # parse!
- document = pub.reader.read(pub.source, pub.parser, pub.settings)
- self.warnings = ''.join(pub.settings.warning_stream.messages)
-
- if document.children:
- item = document.children[0]
- if item.tagname == 'title':
- self.title = str(item.children[0])
-
- # do the format
- self.formatted = pub.writer.write(document, pub.destination)
-
-
- security.declareProtected('Edit ReStructuredText', 'PUT', 'manage_FTPput')
- def PUT(self, REQUEST, RESPONSE):
- ''' Handle HTTP PUT requests
- '''
- data = REQUEST.get('BODY', '')
- if data != self.source:
- if data.startswith('.. '):
- data = data.splitlines()
- new = []
- for i in range(len(data)):
- line = data[i]
- if not line.startswith('.. '):
- break
- if line.startswith('.. stylesheet='):
- self.stylesheet = line.split('=')[1]
- elif line.startswith('.. report_level='):
- self.report_level = line.split('=')[1]
- else:
- pass # ignore
- data = '\n'.join(new) + '\n'.join(data[i:])
- self.source = data
- self.render()
- RESPONSE.setStatus(204)
- return RESPONSE
-
- manage_FTPput = PUT
-
- def manage_FTPget(self):
- ''' Get source for FTP download
- '''
- self.REQUEST.RESPONSE.setHeader('Content-Type', 'text/plain')
- s = [
- '.. This is a ReStructuredText Document. Initial comment lines '
- '(".. ") will be stripped.',
- '.. stylesheet='+self.stylesheet,
- '.. report_level='+self.report_level
- ]
- if self.warnings:
- s.append('.. ')
- s.append('.. ' + '\n.. '.join(self.warnings.splitlines()))
- s.append('.. ')
- return '\n'.join(s) + '\n' + self.source
-
- def __str__(self):
- ''' Stringfy .. return the source
- '''
- return self.quotedHTML(self.source)
-
- def PrincipiaSearchSource(self):
- ''' Support for searching - the document's contents are searched.
- '''
- return self.source
-
- def manage_historyCompare(self, rev1, rev2, REQUEST,
- historyComparisonResults=''):
- return ZReST.inheritedAttribute('manage_historyCompare')(
- self, rev1, rev2, REQUEST,
- historyComparisonResults=html_diff(rev1.source, rev2.source))
-
-InitializeClass(ZReST)
-modulesecurity.apply(globals())
-
-
-#
-# $Log$
-# Revision 1.6 2002/11/28 03:44:50 goodger
-# updated
-#
-# Revision 1.5 2002/11/05 05:27:56 goodger
-# fixed Reader name
-#
-# Revision 1.4 2002/10/18 05:10:33 goodger
-# Refactored names (options -> settings; etc.); updated.
-#
-# Revision 1.3 2002/08/15 05:02:41 richard
-# pull out the document title too
-#
-# Revision 1.2 2002/08/15 04:36:56 richard
-# FTP interface and Reporter message snaffling
-#
-# Revision 1.1 2002/08/14 05:15:37 richard
-# Zope ReStructuredText Product
-#
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/sandbox/richard/ZReST/__init__.py b/sandbox/richard/ZReST/__init__.py
deleted file mode 100644
index e3feaf4ae..000000000
--- a/sandbox/richard/ZReST/__init__.py
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# $Id$
-#
-__version__='1.0'
-
-# product initialisation
-import ZReST
-def initialize(context):
- context.registerClass(
- ZReST, meta_type = 'ReStructuredText Document',
- constructors = (
- ZReST.manage_addZReSTForm, ZReST.manage_addZReST
- )
- )
-
-
-#
-# $Log$
-# Revision 1.2 2002/08/15 04:36:56 richard
-# FTP interface and Reporter message snaffling
-#
-# Revision 1.1 2002/08/14 05:15:37 richard
-# Zope ReStructuredText Product
-#
-#
-#
-# vim: set filetype=python ts=4 sw=4 et si
diff --git a/sandbox/richard/ZReST/dtml/manage_addZReSTForm.dtml b/sandbox/richard/ZReST/dtml/manage_addZReSTForm.dtml
deleted file mode 100644
index 971e63160..000000000
--- a/sandbox/richard/ZReST/dtml/manage_addZReSTForm.dtml
+++ /dev/null
@@ -1,45 +0,0 @@
-<dtml-var manage_page_header>
-
-<dtml-var "manage_form_title(this(), _, form_title='Add ReStructureText Document')">
-
-<p class="form-help">
-You may optionally select a file to upload from your local computer by
-clicking the <em>Browse</em> button.
-</p>
-
-<form action="manage_addZReST" method="post" enctype="multipart/form-data">
-<table cellspacing="0" cellpadding="2" border="0">
- <tr>
- <td align="left" valign="top">
- <div class="form-label">
- Id
- </div>
- </td>
- <td align="left" valign="top">
- <input type="text" name="id" size="40" />
- </td>
- </tr>
- <tr>
- <td align="left" valign="top">
- <div class="form-optional">
- File
- </div>
- </td>
- <td align="left" valign="top">
- <input type="file" name="file" size="25" value="" />
- </td>
- </tr>
- <tr>
- <td align="left" valign="top">
- </td>
- <td align="left" valign="top">
- <div class="form-element">
- <input class="form-element" type="submit" name="submit"
- value=" Add " />
- </div>
- </td>
- </tr>
-</table>
-</form>
-
-<dtml-var manage_page_footer>
diff --git a/sandbox/richard/ZReST/dtml/manage_editForm.dtml b/sandbox/richard/ZReST/dtml/manage_editForm.dtml
deleted file mode 100644
index e302893f9..000000000
--- a/sandbox/richard/ZReST/dtml/manage_editForm.dtml
+++ /dev/null
@@ -1,88 +0,0 @@
-<dtml-var manage_page_header>
-<dtml-var manage_tabs>
-
-<p class="form-help">
-You may edit the source for this document using the form below. You
-may also upload the source for this document from a local file. Click
-the <em>browse</em> button to select a local file to upload.
-</p>
-
-<dtml-if warnings>
-<pre class="system-msg">
-&dtml-warnings;
-</pre>
-</dtml-if>
-
-<p class="form-help"><strong>Help:</strong> ReStructuredText
- <a href="http://docutils.sourceforge.net/docs/rst/quickstart.html">primer</a>
- for beginners,
- <a href="http://docutils.sourceforge.net/docs/rst/quickref.html">quick
- reference</a> for the more advanced and
- <a href="http://docutils.sourceforge.net/rst.html">home page</a> for all
- the details.
-</p>
-
-<form action="manage_edit" method="post">
-<table cellpadding="2" cellspacing="0" width="100%" border="0">
-
-<dtml-with keyword_args mapping>
-<tr>
- <td align="left" valign="top" colspan="2">
- <div style="width: 100%;">
- <textarea name="data:text" wrap="off" style="width: 100%;"<dtml-if
- dtpref_cols> cols="<dtml-var dtpref_cols>"<dtml-else
- > cols="50"</dtml-if><dtml-if dtpref_rows> rows="<dtml-var
- dtpref_rows>"<dtml-else> rows="20"</dtml-if>><dtml-var
- __str__></textarea>
- </div>
- </td>
-</tr>
-</dtml-with>
-
-<tr>
- <td align="left" valign="top" colspan="2">
- <div class="form-element">
- <dtml-if wl_isLocked>
- <em>Locked by WebDAV</em>
- <dtml-else>
- <input class="form-element" type="submit" name="SUBMIT" value="Save Changes">
- </dtml-if>
- &nbsp;&nbsp;
- <input class="form-element" type="submit" name="SUBMIT" value="Taller">
- <input class="form-element" type="submit" name="SUBMIT" value="Shorter">
- <input class="form-element" type="submit" name="SUBMIT" value="Wider">
- <input class="form-element" type="submit" name="SUBMIT" value="Narrower">
- </div>
- </td>
-</tr>
-</table>
-</form>
-
-<form action="manage_upload" method="post" enctype="multipart/form-data">
-<table cellpadding="2" cellspacing="0" border="0">
-<tr>
- <td align="left" valign="top">
- <div class="form-label">
- File &nbsp;
- </div>
- </td>
- <td align="left" valign="top">
- <input type="file" name="file" size="25" value="">
- </td>
-</tr>
-<tr>
- <td></td>
- <td align="left" valign="top">
- <div class="form-element">
- <dtml-if wl_isLocked>
- <em>Locked by WebDAV</em>
- <dtml-else>
- <input class="form-element" type="submit" value="Upload File">
- </dtml-if>
- </div>
- </td>
-</tr>
-</table>
-</form>
-
-<dtml-var manage_page_footer>
diff --git a/sandbox/richard/ZReST/refresh.txt b/sandbox/richard/ZReST/refresh.txt
deleted file mode 100644
index 01ee0fa7b..000000000
--- a/sandbox/richard/ZReST/refresh.txt
+++ /dev/null
@@ -1 +0,0 @@
-This is a flag that tells Zope that the product may be auto-refreshed.
diff --git a/sandbox/richard/ZReST/version.txt b/sandbox/richard/ZReST/version.txt
deleted file mode 100644
index d3827e75a..000000000
--- a/sandbox/richard/ZReST/version.txt
+++ /dev/null
@@ -1 +0,0 @@
-1.0
diff --git a/sandbox/richard/pythonpoint/example_slides.txt b/sandbox/richard/pythonpoint/example_slides.txt
deleted file mode 100644
index 8633bafcc..000000000
--- a/sandbox/richard/pythonpoint/example_slides.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-Presentation Cover
-------------------
-
-*Richard Jones, Another Author*
-
-http://docutils.sf.net/ is cool.
-
-*Some very important conference, March 2002*
-
-Second slide
-------------
-
-- blah, blah blah blah blah. blah, blah blah blah blah.
-- blah, blah blah blah blah.
-
-Another slide
--------------
-
-bare para blah, blah blah blah blah. blah, blah blah blah blah.
-
-definition term
- blah, blah blah blah blah. blah, blah blah blah blah.
-another one
- note, don't have more than one para in here!
-
-bare para blah, blah blah blah blah. blah, blah blah blah blah.
-
-Another slide
--------------
-
-hi, another para
-
-- ooh, bullet points
-- yeah!
-- woo! **bold** and *italics* are OK!
-
-don't nest _anything_ ... PLATYPUS can't deal with it. That means no
-indented bullets, no multiple paras in bullets or definitions...
diff --git a/sandbox/richard/pythonpoint/pythonpoint.py b/sandbox/richard/pythonpoint/pythonpoint.py
deleted file mode 100644
index d2c0b9418..000000000
--- a/sandbox/richard/pythonpoint/pythonpoint.py
+++ /dev/null
@@ -1,328 +0,0 @@
-import cStringIO, cgi, sys, urllib
-import docutils.core, docutils.io
-from docutils import writers, nodes, languages
-
-class Writer(writers.Writer):
-
- settings_spec = ()
- settings_default_overrides = {}
- output = None
-
- def translate(self):
- visitor = DumbPythonPointFormatter(self.document)
- self.document.walkabout(visitor)
- self.output = visitor.astext()
- #self.head_prefix = visitor.head_prefix
- #self.head = visitor.head
- #self.body_prefix = visitor.body_prefix
- #self.body = visitor.body
- #self.body_suffix = visitor.body_suffix
-
-class DumbPythonPointFormatter(nodes.NodeVisitor):
-
- def __init__(self, document):
- nodes.NodeVisitor.__init__(self, document)
- self.section = 0
- self.closers = []
- self.slidenum = 0
- self.body = []
- self.w = self.body.append
- self.suppress_para = 0
-
- def astext(self):
- return ''.join(self.body)
-
- def visit_reference(self, node):
- pass
- def depart_reference(self, node):
- pass
-
- def visit_document(self, node):
- self.w('<presentation>\n'
- '<stylesheet module="modern" function="getParagraphStyles"/>\n'
- '<section name="Main">\n')
- def depart_document(self, node):
- self.w('</section>\n'
- '</presentation>\n')
-
- def visit_section(self, node):
- if node.attributes.has_key('dupname'):
- name = node.attributes['dupname']
- else:
- name = node.attributes['name']
- self.slidenum += 1
- self.w('<slide id="Slide%03d" title="%s">\n'
- '<frame x="90" y="72" width="600" height="432" leftmargin="12"'
- 'rightmargin="0">\n'%(self.slidenum, name))
- def depart_section(self, node):
- self.w('</frame>\n</slide>\n')
-
- def visit_title(self, node):
- self.w('<para style="Heading2">')
- self.suppress_para = 1
- def depart_title(self, node):
- self.suppress_para = 0
- self.w('</para>\n')
-
- def visit_paragraph(self, node):
- if not self.suppress_para: self.w('<para style="BodyText">')
- def depart_paragraph(self, node):
- if not self.suppress_para: self.w('</para>\n')
-
- # Simple lists
- def visit_bullet_list(self, node):
- pass
- def depart_bullet_list(self, node):
- pass
- def visit_enumerated_list(self, node):
- pass
- def depart_enumerated_list(self, node):
- pass
-
- def visit_list_item(self, node):
- self.w('<para style="Bullet">')
- self.suppress_para = 1
- def depart_list_item(self, node):
- self.suppress_para = 0
- self.w('</para>\n')
-
- # Definition List
- def visit_definition_list(self, node):
- pass
- def depart_definition_list(self, node):
- pass
- def visit_definition_list_item(self, node):
- pass
- def depart_definition_list_item(self, node):
- pass
-
- def visit_term(self, node):
- self.w('<para><b>')
- def depart_term(self, node):
- self.w('</b>')
-
- def visit_classifier(self, node):
- self.w('<i>')
- def depart_classifier(self, node):
- self.w('</i>')
-
- def visit_definition(self, node):
- self.w('</para>\n<para style="Definition">')
- self.suppress_para = 1
- def depart_definition(self, node):
- self.suppress_para = 0
- self.w('</para>\n')
-
- def visit_field(self, node):
- self.w('<para>')
- def depart_field(self, node):
- self.w('</para>\n')
-
- def visit_field_body(self, node):
- self.suppress_para = 1
- return
- def depart_field_body(self, node):
- self.suppress_para = 0
-
- def visit_field_list(self, node):
- return
- def depart_field_list(self, node):
- return
-
- def visit_field_name(self, node):
- self.w('<b>')
-
- def depart_field_name(self, node):
- self.w(':')
- self.w('</b>')
-
- # Literal Block
- def visit_literal_block(self, node):
- self.w('<prefmt style="Code">')
- self.suppress_para = 1
- def depart_literal_block(self, node):
- self.suppress_para = 0
- self.w('</prefmt>\n')
-
- # Block Quote
- def visit_block_quote(self, node):
- self.w('<para style="Indent">')
- def depart_block_quote(self, node):
- self.w('</para>\n')
-
- def visit_image(self, node):
- ''' EMPTY
- uri CDATA #REQUIRED
- alt CDATA #IMPLIED
- height NMTOKEN #IMPLIED
- width NMTOKEN #IMPLIED
- scale NMTOKEN #IMPLIED
- '''
- attrs = node.attributes
- l = ['src="%(uri)s"'%attrs]
- # TODO: scale
- self.w('<image filename="%s"/>'%node.attributes['uri'])
- def depart_image(self, node):
- pass
-
- #
- # Tables:
- # NOT IN DOM YET
- #
- def visit_table(self, node):
- '''
- +------------------------+------------+----------+----------+
- | Header row, column 1 | Header 2 | Header 3 | Header 4 |
- | (header rows optional) | | | |
- +========================+============+==========+==========+
- | body row 1, column 1 | column 2 | column 3 | column 4 |
- +------------------------+------------+----------+----------+
- | body row 2 | Cells may span columns. |
- +------------------------+------------+---------------------+
- | body row 3 | Cells may | - Table cells |
- +------------------------+ span rows. | - contain |
- | body row 4 | | - body elements. |
- +------------------------+------------+---------------------+
- '''
- self.w('<table border=1>\n')
- def depart_table(self, node):
- self.w('</table>\n')
-
- def visit_tgroup(self, node):
- pass
- def depart_tgroup(self, node):
- pass
-
- def visit_colspec(self, node):
- pass
- def depart_colspec(self, node):
- pass
-
- def visit_row(self, node):
- self.body.append(self.starttag(node, 'tr', ''))
-
- def depart_row(self, node):
- self.body.append('</tr>\n')
-
- def visit_thead(self, node):
- self.thead = 1
- def depart_thead(self, node):
- self.thead = 0
- def visit_tbody(self, node):
- self.thead = 1
- def depart_tbody(self, node):
- self.thead = 0
-
- def visit_entry(self, node):
- if self.thead:
- s = 'th '
- else:
- s = 'td '
- attrs = node.attributes
- if attrs.has_key('morecols'):
- s = s + 'colspan=%d '%(attrs['morecols']+1)
- if attrs.has_key('morerows'):
- s = s + 'rowspan=%d '%(attrs['morerows']+1)
- self.w('<%svalign="top" align="left">'%s)
-
- def depart_entry(self, node):
- if self.thead:
- self.w('</th>\n')
- else:
- self.w('</td>\n')
-
- def visit_emphasis(self, node):
- self.w('<i>')
- def depart_emphasis(self, node):
- self.w('</i>')
-
- def visit_strong(self, node):
- self.w('<b>')
- def depart_strong(self, node):
- self.w('</b>')
-
- def visit_interpreted(self, node):
- pass #raise NotImplementedError, node
- def depart_interpreted(self, node):
- pass #raise NotImplementedError, node
-
- def visit_literal(self, node):
- self.w('<div style="Code">')
- def depart_literal(self, node):
- self.w('</div>')
-
- def visit_reference(self, node):
- attrs = node.attributes
- doc = self.document
- ok = 1
- if attrs.has_key('refuri'):
- self.w('<a href="%s">'%attrs['refuri'])
- elif doc.explicit_targets.has_key(attrs['refname']):
- # an external reference has been defined
- ref = doc.explicit_targets[attrs['refname']]
- if ref.attributes.has_key('refuri'):
- self.w('<a href="%s">'%ref.attributes['refuri'])
- else:
- self.w('<a href="#%s">'%attrs['refname'])
- elif doc.implicit_targets.has_key(attrs['refname']):
- # internal reference
- name = attrs['refname']
- self.w('<a href="#%s">'%urllib.quote(name))
- else:
- self.w('<span class="formatter_error">target "%s" '
- 'undefined</span>'%attrs['refname'])
-
- def depart_reference(self, node):
- self.w('</a>')
-
- def visit_footnote_reference(self, node):
- raise NotImplementedError, node
-
- def visit_substitution_reference(self, node):
- pass
- def depart_substitution_reference(self, node):
- pass
-
- def visit_problematic(self, node):
- raise NotImplementedError, node
- def depart_problematic(self, node):
- raise NotImplementedError, node
-
- def visit_system_message(self, node):
- print >>sys.stderr, '%s: %s'%(node.attributes['type'], node[0][0].data)
- def depart_system_message(self, node):
- pass
-
- def visit_comment(self, node):
- pass
- def depart_comment(self, node):
- pass
-
- def visit_Text(self, node):
- self.w(cgi.escape(node.data))
- def depart_Text(self, node):
- pass
-
-def main(filename, debug=0):
- pub = docutils.core.Publisher()
- pub.set_reader('standalone', None, 'restructuredtext')
- pub.writer = Writer()
- pub.get_settings()
- pub.settings._destination = ''
- pub.source = docutils.io.StringInput(source=open(filename).read(),
- encoding='latin-1')
- pub.destination = docutils.io.StringOutput(encoding='latin-1')
- document = pub.reader.read(pub.source, pub.parser, pub.settings)
- pub.apply_transforms(document)
-
- if debug == 1:
- print document.pformat()
- else:
- print pub.writer.write(document, pub.destination)
-
-if __name__ == '__main__':
- if len(sys.argv) > 2:
- main(sys.argv[1], debug=1)
- else:
- main(sys.argv[1])
-
diff --git a/sandbox/richard/pythonpoint/readme.txt b/sandbox/richard/pythonpoint/readme.txt
deleted file mode 100644
index 3f889e361..000000000
--- a/sandbox/richard/pythonpoint/readme.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-This generates an XML slideshow usable by PythonPoint.
-
- http://www.reportlab.com/demos/pythonpoint/pythonpoint.html
-
-See the example slides.stx for information - and restrictions.
diff --git a/sandbox/simonb/inline_target.txt b/sandbox/simonb/inline_target.txt
deleted file mode 100644
index f54aaa2aa..000000000
--- a/sandbox/simonb/inline_target.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-.. Note:: This functionality has been implemented as `embedded URIs
- <http://docutils.sf.net/spec/rst/reStructuredText.html#embedded-uris>`_.
-
-
-Sample usage of inline targets
-------------------------------
-
-Here is some sample text, that tests an syntax for inline targets.
-There has been a lot of discussion starting here__
-__<http://mail.python.org/pipermail/doc-sig/2002-June/002648.html>
-
-This just has been an anonymous reference, that immediately got resolved.
-Please note, that this can be mixed freely__ with "real" anonymous__
-links__ __<http://www.gimp.org> and the inlined target will always__
-be assigned to the anonymous link immediately in front of it.
-
-regular anonymous links should not be disturbed. They should get resolved
-without noticing that there has been an immediately resolved one inbetween.
-
- __ anonlink1.html
- __ anonlink2.html
- __ anonlink3.html
-
-As a not yet discussed feature I have the equivalent construct for named
-links. this example_ _<http://example.com> shows how this works. You can refer
-a second time to example_ as usual.
-
-I wonder what happenes here__
- __ <here.html>
-
-Of course you can `add links to multiple words`__ __<multiple.html>.
-So `the implementation`_ is kind of consistent with the usual link
-syntax. I am not sure if the added space and the doubling of the
-underscores is worth it just to avoid long words.
-It introduces a lot of line noise. Changing this in `the
-implementation`_ _<file:/home/simon/ST/docutils/parsers/rst/states.py>
-should be fairly trivial: I'd guess that adjsuting te regex in two places
-would do the trick.
-
-Some real use: Bookmark lists:
-
-- `Cool Modifications`__ __<http://metku.net/>
-- `Cool Image Manipulation`__ __<http://www.gimp.org>
-- `Cool Homepage`__ __<http://www.home.unix-ag.org/simon/>
-- `Cool Comics`__ __<http://www.nichtlustig.de/>
-- `something with a Cool long URL`__ __<http://something.
- with.a-cool.long.url/plus additional_newlines.and/
- spaces#and_a/fragment_identifier>
diff --git a/sandbox/tibs/pysource/.cvsignore b/sandbox/tibs/pysource/.cvsignore
deleted file mode 100644
index 52e4e6114..000000000
--- a/sandbox/tibs/pysource/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.pyc
-*.pyo
diff --git a/sandbox/tibs/pysource/__init__.py b/sandbox/tibs/pysource/__init__.py
deleted file mode 100755
index 66239ca01..000000000
--- a/sandbox/tibs/pysource/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-"""Extract information from Python files, for DOCUTILS/reST purposes
-
-:Author: Tibs <tibs@tibsnjoan.co.uk>
-:Version: 0.1
-"""
diff --git a/sandbox/tibs/pysource/buildhtml.py b/sandbox/tibs/pysource/buildhtml.py
deleted file mode 100755
index f620a7a02..000000000
--- a/sandbox/tibs/pysource/buildhtml.py
+++ /dev/null
@@ -1,354 +0,0 @@
-"""Convenience mechanisms for writing HTML
-
-Similar in concept to buildtree.py (qv), but very different in the details.
-"""
-
-import sys
-import string
-
-__docformat__ = "reST"
-
-EMPTY = ["br","hr"]
-"""Elements that do not (may not) have content.
-"""
-
-INLINE = ["em","strong","samp","code","tt","text"]
-"""Elements that may occur 'inline' - within a paragraph, etc.
-
-Note that we include the 'pseudo-element' "text".
-"""
-
-NEWLINE_AFTER = ["html","head","body","table","address"]
-
-LISTS = ["ol","ul","dl"]
-
-
-# ----------------------------------------------------------------------
-class BuildHTML:
-
- def __init__(self,stream=None):
- """Instantiate a BuildHTML instance.
-
- `stream` should be either something that "looks like" a file
- instance (specifically, it has to have a "write" method), or
- else `None` if we want to default to sys.stdout
- """
-
- self.stream = stream or sys.stdout
- self.stack = []
- """A stack of tag names (e.g., ["html","body","h1","p"])
- """
- self.last = None
- """The last element we were told to add to our output.
- """
- self.fancy = 0
-
- def write_doctype(self):
- """Write out the DOCTYPE element at the start of the HTML file.
-
- For the moment, we don't provide any flexibility in this...
- """
- self.stream.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01'
- ' Transitional//EN"'
- ' "http://www.w3.org/TR/html4/loose.dtd">\n')
-
- def finish(self):
- """Call this to indicate we have finished.
-
- It will grumble if anything is left unclosed - i.e., if there
- is still stuff on the internal stack.
- """
- if len(self.stack) > 0:
- raise ValueError,"Items still outstanding on stack: %s"%\
- self._stack_as_string()
-
- def _maybe_write_newline(self,tag,before=1):
- """Decide whether to write a newline before or after an element.
- """
- if before:
- if tag not in INLINE:
- self.stream.write("\n")
- else:
- if tag in NEWLINE_AFTER:
- self.stream.write("\n")
-
- def add(self,tag,*args,**keywords):
- """Write an HTML element at the current level.
-
- For instance::
-
- build.add("em","Some simple text.")
-
- If `tag` is "text" then it will automagically be converted
- to ordinary inline text (even though there is no such HTML
- element).
-
- Otherwise, this produces (for instance)::
-
- <em>Some simple text.</em>
-
- See `write` (which this uses) for more details of the arguments.
- """
- self._maybe_write_newline(tag)
- self.stream.write(self.element(tag,*args,**keywords))
- self.last = "/"+tag
-
- def start(self,tag,*args,**keywords):
- """Write out the start of an HTML element, and start a new level.
-
- `tag` should be the name of an HTML element (a tag), or "comment".
-
- For instance::
-
- build.start("li","some text")
-
- might cause::
-
- <li>some text
-
- to be written out. Note that the element's closing tag is *not*
- written out - see `end()` for that.
-
- If `args` are given, they are assumed to be (things that resolve
- to) more text elements (i.e., strings). For instance::
-
- build.start("li","some text",
- build.element("strong","and emphasis"),
- "and plain text again")
-
- See `write` (which this uses) for more details of the use of the
- `tag` and `keywords` arguments.
- """
- if tag in EMPTY:
- raise ValueError,"Cannot start an 'empty' element (%s)"%tag
- elif tag == "text":
- raise ValueError,"Cannot start 'text'"
- elif tag == "html" and len(self.stack) > 0:
- raise ValueError,\
- "Cannot insert 'html' except at root of stack"
-
- self._maybe_write_newline(tag,before=1)
- self.stream.write(self.start_tag(tag,**keywords))
- content = self._content(tag,args)
- if content:
- self.stream.write(content)
- self._stack_add(tag)
- self.last = tag
-
- def end(self,tag,*args):
- """Write out the end of an HTML element, and finish the current level.
-
- `tag` should be the name of an HTML element (a tag), or "comment".
-
- For instance::
-
- build.end("ul")
-
- Otherwise, for the moment at least, the `tag` being ended
- must be the last tag that was begun (in the future, we *might*
- support automatic "unrolling" of the stack, but not at the
- moment).
-
- NB: if `args` are given, they will also be treated as closing
- tags, in order - thus, for example::
-
- build.end("td","tr","table")
-
- is exactly equivalent to::
-
- build.end("td")
- build.end("tr")
- build.end("table")
-
- (Hmm - I'm not sure if that last is a good idea. Still, I *do*
- use it for that specific instance, which is a relatively common
- thing to want to do, and it does save "wasting" two fairly
- uninteresting lines of code.)
- """
- if tag in EMPTY:
- raise ValueError,"Cannot start an 'empty' element (%s)"%tag
-
- if tag == "text":
- raise ValueError,"Cannot end 'text'"
-
- self._stack_remove(tag)
- self.stream.write(self.end_tag(tag))
- self._maybe_write_newline(tag,before=0)
-
- if args:
- for item in args:
- self.end(item)
- self.last = "/"+args[-1]
- else:
- self.last = "/"+tag
-
- def start_tag(self,tag,**keywords):
- """Construct and return a start tag.
-
- `tag` should be the name of an HTML element (a tag)
-
- `tag` may not be "text".
-
- `keywords` should be attributes for the tag.
- """
- if tag == "comment":
- return "<!-- "
-
- str = "<%s"%tag
- if keywords:
- keys = keywords.keys()
- keys.sort()
- for key in keys:
- value = self.escape(keywords[key])
- str += " %s='%s'"%(key,value)
- return str + ">"
-
- def end_tag(self,tag):
- """Construct and return an end tag.
-
- `tag` should be the name of an HTML element (a tag)
-
- `tag` may not be "text".
- """
- if tag == "comment":
- return " -->"
- else:
- return "</%s>"%tag
-
- def element(self,tag,*args,**keywords):
- """Construct and return a complete HTML element.
-
- `tag` should be the name of an HTML element (a tag), or "text".
-
- If `tag` is "text" then `keywords` is ignored, and the result
- of concatenating `args` is returned.
-
- Otherwise:
-
- - an opening tag is composed from `tag` and `keywords`
- (see `start_tag()`)
- - the result of concatentating `args` is appended to that
- - a closing tag (see `end_tag()`) is appended to that
-
- and the result is returned.
-
- Within `args`, non-strings are coerced to their representations.
- """
- content = self._content(tag,args)
- if tag == "text":
- return content
- else:
- return self.start_tag(tag,**keywords) + content + \
- self.end_tag(tag)
-
-
- def _content(self,tag,args):
- """Return the *content* of an element.
-
- `tag` is not currently used, but *might* be useful later on?
- """
- content = ""
- if args:
- for item in args:
- if type(item) == type(""):
- content += item
- else:
- content += `item`
- return content
-
- def escape(self,text):
- """Return `text` as valid HTML
-
- (that is, with any "special" characters escaped)
- """
- # Hmm - paranoia, just in case
- if type(text) != type(""): return text
-
- text = string.replace(text, "&", "&amp;")
- text = string.replace(text, "<", "&lt;")
- text = string.replace(text, '"', "&quot;")
- text = string.replace(text, ">", "&gt;")
-
- if self.fancy:
- text = string.replace(text, " ", "&deg;")
- text = string.replace(text, "\n", "&para;\n")
- return text
-
- def last_tag(self):
- """Return the last element we were asked to add to our output.
-
- Note that if we just closed element "XX" (for instance), then
- we will return "/XX".
- """
- return self.last
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Stack queries
-
- def _in_list(self):
- """Are we *immediately* within a list
-
- (i.e., the first child element of a list)
- """
- return self.stack[-1] in LISTS
-
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Stack maintenance
-
- def _stack_ends(self,name):
- """Return true if the stack ends with the named entity.
- """
- return self.stack[-1] == name
-
- def _stack_add(self,name):
- """Add a new level to the stack.
- """
- self.stack.append(name)
-
- def _stack_remove(self,name):
- """Remove the last level from the stack
-
- (but only if it is of the right sort).
- """
- if len(self.stack) == 0:
- raise ValueError,"Cannot end %s - nothing outstanding to end"%\
- (name)
- if name != self.stack[-1]:
- raise ValueError,"Cannot end %s - last thing begun was %s"%\
- (name,self.stack[-1])
- del self.stack[-1]
-
- def _stack_as_string(self):
- names = []
- for name in self.stack:
- names.append(name)
- return string.join(names,",")
-
-
-# ----------------------------------------------------------------------
-if __name__ == "__main__":
- build = BuildHTML()
-
- print "Building a page"
- build.start("html")
- build.start("body")
- build.add("h1","Fred")
- build.start("p")
- build.add("text","This is some text.")
- build.add("strong","Really.")
- build.start("p","Another paragraph")
- build.end("body")
- build.end("html")
- build.finish()
-
- print
- print "Building a broken page"
- try:
- build.start("html")
- build.start("body")
- build.add("h1","Fred")
- build.start("p")
- build.finish()
- except ValueError,detail:
- print "ValueError:",detail
diff --git a/sandbox/tibs/pysource/buildtree.py b/sandbox/tibs/pysource/buildtree.py
deleted file mode 100755
index 977226f8d..000000000
--- a/sandbox/tibs/pysource/buildtree.py
+++ /dev/null
@@ -1,403 +0,0 @@
-"""This module explores a different approach to building doctree elements...
-
-The "normal" way of building a DOCUTILS tree involves, well, building a tree
-structure. So one might do::
-
- section = docutils.nodes.section()
- section += docutils.nodes.title(text="Title")
- para = docutils.nodes.paragraph()
- section += para
- para += docutils.nodes.Text("Some ")
- para += docutils.nodes.strong(text="strong text.")
-
-That's all very nice, if one is *thinking* in terms of a tree structure,
-but it is not, for me, a very natural way to construct a text.
-
- (OK - I *know* in practice one would also have imported `paragraph`,
- etc., from `docutils.nodes`, but that is not my point.)
-
-This module allows one to use a more LaTex style of construction, with
-begin and end delimitors for DOCUTILS nodes. Thus the above example becomes::
-
- build.start("section")
- build.add("title","Title")
- build.start("paragraph","Some ")
- build.add("strong","Strong text.")
- build.end("section")
-
-(As a convenience, paragraphs are automatically ended.)
-
-A slightly shorter, and possibly more obfuscated, way of writing this
-would be::
-
- build.start("section",build.make("title","Title")
- build.start("paragraph","Some ",build.make("strong","Strong text."))
- build.end("section")
-
-Sometimes I think that sort of approach makes more sense, sometimes not.
-""" # we need a " to keep [X]Emacs Python mode happy.
-
-import string
-import docutils.nodes
-import docutils.utils
-
-__docformat__ = "reST"
-
-
-# ----------------------------------------------------------------------
-class group(docutils.nodes.Element):
- """Group is a way of grouping together elements.
-
- Compare it to HTML <div> and <span>, or to TeX (?check?)
- \begingroup and \endgroup.
-
- It takes the special attribute `style`, which indicates what
- sort of thing it is grouping - for instance, "docstring" or
- "attributes".
-
- Although it (should be) supplied by the standard DOCUTILS tree,
- reST itself does not use `group`. It is solely used by
- extensions, such as ``pysource``.
-
- In the default HTML Writer, `group` renders invisibly
- (that is, it has no effect at all on the formatted output).
- """
-
- pass
-
-
-# ----------------------------------------------------------------------
-class BuildTree:
-
- def __init__(self, with_groups=1, root=None):
- self.stack = []
- """A stack of tuples of the form ("classname",classinstance).
- """
-
- self.root = root
- """A memory of the first item on the stack (notionally, the
- "document") - we need this because if we `start` a document,
- fill it up, and then `end` it, that final `end` will remove
- the appropriate instance from the stack, leaving no record.
- Thus this is that record.
- """
- if root is not None:
- self._stack_add(root)
-
- self.with_groups = with_groups
-
- def finish(self):
- """Call this to indicate we have finished.
-
- It will grumble if anything is left unclosed, but will
- return the "root" instance of the DOCUTILS tree we've been
- building if all is well...
- """
- if len(self.stack) > 0:
- raise ValueError,"Items still outstanding on stack: %s"%\
- self._stack_as_string()
- else:
- return self.root
-
- def add(self,thing,*args,**keywords):
- """Add a `thing` DOCUTILS node at the current level.
-
- For instance::
-
- build.add("paragraph","Some simple text.")
-
- If `thing` is "text" then it will automagically be converted
- to "Text" (this makes life easier for the user, as all of the
- other DOCUTILS node classes they are likely to use start with a
- lowercase letter, and "Text" is the sole exception).
-
- See `make` (which this uses) for more details of the arguments.
- """
- if thing == "group" and not self.with_groups:
- return
-
- instance = self.make(thing,*args,**keywords)
- self._stack_append(instance)
-
- def addsubtree(self,subtree):
- """Add a DOCUTILS subtree to the current item.
- """
- self._stack_append(subtree)
-
- def current(self):
- """Return the "current" item.
-
- That is, return the item to which `add()` will add DOCUTILS nodes.
- """
- return self._stack_current()
-
- def start(self,thing,*args,**keywords):
- """Add a `thing` DOCUTILS node, starting a new level.
-
- `thing` should be either the name of a docutils.nodes class, or
- else a class itself.
-
- If `thing` is "text" then it will automagically be converted
- to "Text" (this makes life easier for the user, as all of the
- other DOCUTILS node classes they are likely to use start with a
- lowercase letter, and "Text" is the sole exception).
-
- For instance::
-
- build.start("bullet_list")
-
- As a convenience, if `thing` is a paragraph, and if the current
- item is another paragraph, this method will end the old paragraph
- before starting the new.
-
- Note that if `thing` is "document", some extra magic is worked
- internally. If the keywords `warninglevel` and `errorlevel` are
- given, they will be passed to a docutils.utils.Reporter instance,
- as well as being passed down to the `document` class's initialiser.
-
- See `make` (which this uses) for more details of the arguments.
- """
- name = self._nameof(thing)
-
- if name == "group" and not self.with_groups:
- return
-
- if name == "paragraph" and self._stack_ends("paragraph"):
- self.end("paragraph")
-
- if name == "document":
- if self.root:
- return
- if len(self.stack) > 0:
- raise ValueError,\
- "Cannot insert 'document' except at root of stack"
- warninglevel = keywords.get("warninglevel",2)
- errorlevel = keywords.get("errorlevel",4)
- reporter = docutils.utils.Reporter('fubar', warninglevel,
- errorlevel)
- instance = docutils.nodes.document(reporter,"en")
- else:
- instance = self.make(thing,*args,**keywords)
-
- if len(self.stack) == 0:
- self.root = instance
- else:
- self._stack_append(instance)
-
- self._stack_add(instance)
-
- def end(self,thing):
- """End the level started below a `thing` DOCUTILS node.
-
- `thing` should be either the name of a docutils.nodes class, or
- else a class itself.
-
- For instance::
-
- build.end("bullet_list")
-
- As a convenience, if the last item constructed was actually
- a paragraph, and `thing` is the container for said paragraph,
- then the paragraph will be automatically ended.
-
- Otherwise, for the moment at least, the `thing` being ended
- must be the last thing that was begun (in the future, we *might*
- support automatic "unrolling" of the stack, but not at the
- moment).
- """
- name = self._nameof(thing)
-
- if thing == "group" and not self.with_groups:
- return
-
- if self._stack_ends("paragraph") and name != "paragraph":
- self.end("paragraph")
-
- self._stack_remove(name)
-
- def make(self,thing,*args,**keywords):
- """Return an instance of `docutils.nodes.thing`
-
- Attempts to regularise the initialisation of putting initial
- text into an Element and a TextElement...
-
- `thing` should be either the name of a docutils.nodes class, or
- else a class itself (so, for instance, one might call
- ``build.make("paragraph")`` or
- ``build.make(docutils.nodes.paragraph)``),
- or else None.
-
- If `thing` is "text" then it will automagically be converted
- to "Text" (this makes life easier for the user, as all of the
- other DOCUTILS node classes they are likely to use start with a
- lowercase letter, and "Text" is the sole exception).
-
- If `thing` is an Element subclass, then the arguments are just
- passed straight through - any *args list is taken to be children
- for the element (strings are coerced to Text instances), and any
- **keywords are taken as attributes.
-
- If `thing` is an TextElement subclass, then if the first
- item in *args is a string, it is passed down as the `text`
- parameter. Any remaining items from *args are used as child
- nodes, and any **keywords as attributes.
-
- If `thing` is a Text subclass, then a single argument is expected
- within *args, which must be a string, to be used as the Text's
- content.
-
- For instance::
-
- n1 = build.make("paragraph","Some ",
- build.make("emphasis","text"),
- ".",align="center")
- n2 = build.make(None,"Just plain text")
- """
-
- #print "make: %s, %s, %s"%(thing,args,keywords)
-
- # Temporary special case - since group is not (yet) in docutils.nodes...
- if thing == "group":
- thing = group
-
- if thing == None:
- dps_class = docutils.nodes.Text
- elif type(thing) == type(""):
- if thing == "text":
- thing = "Text"
- try:
- dps_class = getattr(docutils.nodes,thing)
- except AttributeError:
- raise ValueError,"docutils.nodes does not define '%s'"%thing
- else:
- dps_class = thing
-
- # NB: check for TextElement before checking for Element,
- # since TextElement is itself a subclass of Element!
- if issubclass(dps_class,docutils.nodes.TextElement):
- # Force the use of the argument list as such, by insisting
- # that the `rawsource` and `text` arguments are empty strings
- args = self._convert_args(args)
- dps_instance = dps_class("","",*args,**keywords)
- elif issubclass(dps_class,docutils.nodes.Element):
- # Force the use of the argument list as such, by insisting
- # that the `rawsource` arguments is an empty string
- args = self._convert_args(args)
- dps_instance = dps_class("",*args,**keywords)
- elif issubclass(dps_class,docutils.nodes.Text):
- if len(args) > 1:
- raise ValueError,\
- "Text subclass %s may only take one argument"%\
- self._nameof(thing)
- elif len(args) == 1:
- text = args[0]
- else:
- text = ""
- if keywords:
- raise ValueError,\
- "Text subclass %s cannot use keyword arguments"%\
- self._nameof(thing)
- dps_instance = dps_class(text)
- else:
- raise ValueError,"%s is not an Element or TextElement"%\
- self._nameof(thing)
-
- #print " ",dps_instance
- return dps_instance
-
- def _convert_args(self,args):
- """Return the arguments, with strings converted to Texts.
- """
- newargs = []
- for arg in args:
- if type(arg) == type(""):
- newargs.append(docutils.nodes.Text(arg))
- else:
- newargs.append(arg)
- return newargs
-
- def __getattr__(self,name):
- """Return an appropriate DOCUTILS class, for instantiation.
- """
- return getattr(docutils.nodes,name)
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def _nameof(self,thing):
- if thing is None:
- return "Text"
- elif type(thing) == type(""):
- return thing
- else:
- return thing.__name__
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Stack maintenance
-
- def _stack_ends(self,name):
- """Return true if the stack ends with the named entity.
- """
- return self.stack[-1][0] == name
-
- def _stack_add(self,instance):
- """Add a new level to the stack.
- """
- self.stack.append((instance.__class__.__name__,instance))
-
- def _stack_remove(self,name):
- """Remove the last level from the stack
-
- (but only if it is of the right sort).
- """
- if len(self.stack) == 0:
- raise ValueError,"Cannot end %s - nothing outstanding to end"%\
- (name)
- if name != self.stack[-1][0]:
- raise ValueError,"Cannot end %s - last thing begun was %s"%\
- (name,self.stack[-1][0])
- del self.stack[-1]
-
- def _stack_append(self,instance):
- """Append an instance to the last item on the stack.
- """
- if len(self.stack) > 0:
- self.stack[-1][1].append(instance)
- else:
- raise ValueError,"Cannot add %s to current level" \
- " - nothing current"%(instance.__class__.__name__)
-
- def _stack_current(self):
- """Return the "current" element from the stack
-
- That is, the element to which we would append any new instances
- with `_stack_append()`
- """
- return self.stack[-1][1]
-
- def _stack_as_string(self):
- names = []
- for name,inst in self.stack:
- names.append(name)
- return string.join(names,",")
-
-
-# ----------------------------------------------------------------------
-if __name__ == "__main__":
- build = BuildTree()
- #print build.make("paragraph",text="fred")
- #print build.paragraph(text="fred")
-
- print "Building a section"
- build.start("section")
- build.add("title","Fred")
- build.start("paragraph")
- build.add("text","This is some text.")
- build.add("strong","Really.")
- build.start("paragraph","Another paragraph")
- build.end("section")
- print build.finish()
-
- #print "Building a broken section"
- #build.start("section")
- #build.add("title","Fred")
- #build.start("paragraph")
- #print build.finish()
diff --git a/sandbox/tibs/pysource/doc/readme.rtxt b/sandbox/tibs/pysource/doc/readme.rtxt
deleted file mode 100644
index 5710eaa53..000000000
--- a/sandbox/tibs/pysource/doc/readme.rtxt
+++ /dev/null
@@ -1,189 +0,0 @@
-pysource
-========
-
-:Author: Tibs (tibs@tibsnjoan.co.uk)
-:Date: $Date$
-:Revision: $Revision$
-:Version: 0.1
-
-Ahem
-----
-This file needs updating - unless this notice has disappeared, treat the
-rest of the file as out-of-date...
-
-History
--------
-2002-04:
-
-* Name changed from 'pydps' to 'pysource' (in line with a suggestion
- made a while back on the Doc-SIG by David Goodger).
-
- It's not that that's a great name, just that it's better than 'pydps'
- (especially now that 'dps' has become 'docutils'), and the rather more
- obvious 'pydoc' is already taken. Any suggestions for a better name will
- be gratefully received!
-
-* Converted from the old 'dps' and 'restructuredtext' packages to the
- new 'docutils' package.
-
-* All previous history is elided with the change of name and first release...
-
-Obtaining the package
----------------------
-The latest version of 'pysource' may be found in the Docutils sandbox
-(tarball_ and browsable_).
-
-.. _tarball: http://docutils.sourceforge.net/docutils-sandbox-snapshot.tgz
-.. _browsable: http://docutils.sourceforge.net/sandbox/tibs/pysource/
-
-I hope to keep a copy of the current "released" version at
-
- http://www.tibsnjoan.co.uk/reST/pysource.tgz
-
-Purpose
--------
-This module provides code to
-
- * parse a Python file using the Python Compiler module, which is
- standard with Python 2.2 and later, and available in the Tools
- directory in earlier versions,
- * extract relevant information, including docstrings,
- * and ultimately produce (in the first instance) HTML documentation
- therefrom.
-
-As a subsidiary capability, it can read a restructuredtext file and produce
-HTML from that.
-
-There are obviously other tools which perform similar tasks - see the
-accompanying file whythis.rtxt for some comparisons, and an
-explanation of why I think it is worth developing this tool
-independently.
-
-
-*** TO HERE ***
-
-Usage
------
-The command ``python pysource/pysource.py --help`` gives the following
-information::
-
- """The command line interface to docutil's Python documentation extractor.
-
- Usage: ``pysource.py <switches> <inpath> [<outfile>]``
-
- <inpath> is the path to a package or module.
-
- <outfile> is the path to the output file. If it's not given, then
- output will be written to a file with the same name as the input
- file, but defaulting to the current directory, and with extension
- derived from the type of output:
-
- - show -> ``.show``
- - ast -> ``.ast``
- - xml -> ``.xml``
- - html -> ``.html``
- - pretty -> ``.pretty``
-
- (unless --stdout is requested). The default is --html.
-
- Note that progress messages (and ``verb`` information) are written
- to ``sys.stderr``.
- """
-
- <switches> are:
-
- -v, --verbose Report on progress in more detail
- -q, --quiet Suppress normal progress messages
- -t, --text The input file is a plain (text) reST file
- -s, --show Output basic information about the input
- -a, --ast Output a representation of the AST
- -x, --xml Output an XML representation of the input
- -h, --html Output an HTML representation of the input [default]
- -p, --pretty Output a 'pretty' representation of the input
- -d, --doctest Treat a reST file as doctest input.
- -h, --help Show 'help' information
- -n, --new Use David Goodger's HTML Writer (sort of)
- --stdout Write output to stdout, instead of a file
-
-I recommend use of the ``--pretty`` option for gaining an understanding of the
-DPS tree itself.
-
-Limitations and dependencies
-----------------------------
-This is beta software, and is still, to some extent, a proof and exploration of
-concept.
-
-The following limitations are obvious:
-
- * Its concept of a "package" is rather limited - it doesn't understand
- sub-packages (i.e., it only copes with a "flat" directory structure).
- * It only produces a single HTML file - a more sophisticated approach
- is clearly needed, particularly for large packages (or even large
- modules).
- * It is not fully integrated with the Docutils HTML Writer, which it
- should be using in preference to my own home-grown approach.
- * The Docutils tree that it produces could use some improvement - in
- particular the Python specific nodes need various design decisions
- to be made.
-
-Also:
-
- * It doesn't throw away as much information as it should.
- * It doesn't check all assignments for use of global values.
- * It doesn't handle all Python entities that it should.
- * The HTML it produces is pretty yuck, and is *designed* not
- to look terribly nice (although you should remember not to
- ask my opinion of the HTML output by pydoc).
- * Autonumbered footnote resolution is done by the HTML writer,
- which means that it will likely go wrong if it needs to do
- anything with Python source that contains autonumbered
- footnotes in docstrings(!). But it does work (I believe)
- for .rtxt files.
- * Various other Docutils tree transforms that should be applied
- are not yet performed.
-
-Subtler things:
-
- * The ``--doctest`` mode just pretends that the whole file is
- a single doctest string (i.e., just as if doctest had found
- it as a docstring in a Python file).
-
- That's quite sensible, except that the current doctest doesn't
- know that it should ignore literal blocks, and thus may find
- apparent Python code where it shouldn't.
-
-It depends on:
-
- * The latest versions of Docutils, as of the
- time it was uploaded (I generally track these fairly well,
- so am normally using the latest versions whilst developing).
- These should have been installed (using the setup scripts
- they provide).
- * Python 2.0 or above
- * Tools/compiler for the current Python. For Pythons before
- 2.2a4 (I think it was) this should be installed using the
- setup script it provides (after that it comes as standard).
-
-I develop it with Python 2.1 on Windows/NT and with Python 2.2 on
-Debian GNU/Linux.
-
-Refactoring warning
--------------------
-It is my aim to refactor this code to follow David Goodger's
-
- Reader - Transformer - Writer
-
-model more closely than it currently does. And there is also lots of
-tidying up to do (especially in `visit.py`).
-
-Interesting things to do
-------------------------
-Run it over docutils/spec/reStructuredText.txt.
-
-Run it over docutils/docutils.
-
-Run it over pysource/visit.py.
-
-Run it over the standard string module, and compare the result with that
-of ``pydoc``.
-
diff --git a/sandbox/tibs/pysource/doc/whythis.rtxt b/sandbox/tibs/pysource/doc/whythis.rtxt
deleted file mode 100644
index 0307654a2..000000000
--- a/sandbox/tibs/pysource/doc/whythis.rtxt
+++ /dev/null
@@ -1,122 +0,0 @@
-Why pysource?
-=============
-
-There is the question of why a new tool is needed to go with Docutils and
-reStructuredText, when there are several existing tools which could have been
-adopted.
-
-Perhaps the main reason is simply as a "proof of concept" - even if pysource
-itself is not adopted as *the* tool for use in documenting Python source files
-(and I certainly would not advocate that it be the only one, as other tools
-present their own particular advantages), it *is* worth doing as a "proof of
-concept" - as an examplar that it is possible to do the job.
-
-Three existing tools deserve particular consideration:
-
- - pydoc
- - HappyDoc
- - PyPaSax
-
-pydoc
------
-
-pydoc is Ka-Ping Yee's classic application. It is now (as of Python 2.1)
-included in the standard Python library, where it also provides the backbone
-for the "help" command.
-
-pydoc uses introspection of "live" objects to determine information - that is,
-it requires that the modules to be documented be imported. This can be a
-limiting factor - sometimes it is not advisable to import a module, and
-sometimes it is simply not possible.
-
-It provides output as HTML, and also has a rather output mode for use at
-a terminal.
-
-.. note:
- I've still to work out how to make pydoc work as a standalone tool
- (i.e., at the terminal prompt) for documenting my own Python code
- - for instance, doing ``pydoc.py pysource/visit.py``, which, at best,
- doesn't seem to see any documentation!
-
-HappyDoc
---------
-
- http://happydoc.sourceforge.net/
-
-HappyDoc is a seriously neat tool, and one of the longest standing in the
-arena. It is a mature tool, and:
-
- - supports several forms of structured text within docstrings - notably
- plain text, "raw" text, StructuredTextClassic and StructuredTextNG.
-
- - allows the extraction of documentation from comments as well as from
- docstrings.
-
- - supports several forms of output - notably HTML, SGML and XML DocBook,
- plain text, and Dia files.
-
- - has documented mechanisms for adding new import and export filters.
-
- - has sophisticated control over the actual details of export (HTML options,
- single or multiple files, etc.)
-
-I would expect it to add support for reStructuredText in the near future.
-
-PyPaSax
--------
-
- http://www.logilab.org/pypasax/
-
-PyPaSax is a Python module that uses the python parser to generate Sax2 events,
-and thus enables the visualisation of a python document as an XML tree. This is
-used at Logilab for documenting the source code of Narval. Logilab are also
-working on an XSL transformation to generate XMI from the generated XML, which
-should allow interface to UML tools.
-
-This is a very interesting approach to the problem of extracting information
-from Python modules, but it is currently relatively "coarse grained" - it does
-not, for instance, pay attention to docstrings.
-
-pysource
---------
-
-http://docutils.sourceforge.net/sandbox/pysource/ (or from the tarball_).
-
-.. _tarball: http://docutils.sourceforge.net/docutils-sandbox-snapshot.tgz
-
-pysource is intended as a proof-of-concept implementation of the concepts in
-the Docutils PEPs.
-
-It parses Python files using the Compiler module, honouring the __docformat__
-module value to decide whether docstrings are in reStructuredText or plain
-text.
-
-It uses Docutils to organise the information so gained, and the results of
-parsing the Python code are integrated with the parsed docstring text into a
-single Docutils nodes tree.
-
-The initial version of pysource supports the output of XML (which is a native
-ability of Docutils itself), and HTML. Since it is intended that pysource
-integrate closely with Docutils, additional output formats will occur as new
-Writers are added to Docutils itself.
-
-See also
---------
-pep-0256: Docstring Processing System Framework
-
- This includes a closer analysis of why pydoc is not directly suitable
- for the purposes of Docutils.
-
-pep-0257: Docstring conventions
-
- This describes the high-level structure of docstrings.
-
-pep-0258: Docutils Design Specification
-
- This includes a description of what a tool such as pysource should
- actually do - what docstrings to extract and from where, and how to
- decide what format is used within said docstrings.
-
-pep-0287: reStructuredText Standard Docstring Format
-
- The PEP for reStructuredText itself.
diff --git a/sandbox/tibs/pysource/group-notes.txt b/sandbox/tibs/pysource/group-notes.txt
deleted file mode 100644
index 6c3f281f9..000000000
--- a/sandbox/tibs/pysource/group-notes.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-Adding <group>, losing <package_section> and their ilk
-======================================================
-
-:Author: Tibs
-:Date: 2001-11-18
-
-Background
-----------
-I am currently writing software that will take information from
-Python source files, produce a DPS node tree therefrom, and allow
-the user to generate HTML from that.
-
-My initial implementation produced a *variant* of the DPS node
-tree, which contained many structures that related closely to the
-information derived from Python - for instance, something like::
-
- <py_class name="Fred">
- <docstring>
- This is a very silly class.
- <py_attr_list>
- <py_attr name="jim">
- <py_method "name="method">
-
-For various reasons, the (implicit) DTD wasn't shaping up very
-like that proposed by David Goodger, so I asked about the
-possibility of amending the "standard" DTD. This led to a
-discussion of how the flow of information through a DPS processor
-should actually work, with the result being David's diagram
-[#diagram]_::
-
- +--------+ +--------+ +------------+ +--------+
- | READER | --> | linker | --> | transforms | --> | WRITER |
- +--------+ +--------+ +------------+ +--------+
- | TOC, index, |
- | etc. (optional) |
- +--------+ +--------+
- | PARSER | | filer |
- +--------+ +--------+
-
-David also made the point that, within this plan, the result of
-the ``linker`` phase is a normal DPS tree, which can be
-transformed with any of the "standard" transformation tools (for
-instance, to resolve automatic footnotes), and then output with
-any writer.
-
-Whilst David's diagram is not *quite* how I see the process, it's
-close enough for this purpose. Thus pydps [#pydps]_ might be shown
-as::
-
- +--------+ +--------------+ +------------+ +---------+
- | READER | --> | transform.py | --> | transforms | --> | html.py |
- +--------+ +--------------+ +------------+ +---------+
- | |
- +----------+ +---------------+
- | visit.py | | buildhtml.py |
- +----------+ +---------------+
-
-The "READER" is implicit in the main utility (currently
-``pydps.py``), and locates the relevant Python files. It then
-uses ``visit.py`` to generate a tree representing the Python code
-(the Python ``compiler`` module, standard with Python 2.2 and
-above, but in ``Tools`` before that, is used).
-
-``transform.py`` (which, by David's diagrams, should maybe be
-called ``link``) transforms that information into a proper DPS
-node tree. At the time of writing, no transformations are done.
-
-Finally, HTML is output from the DPS node tree by ``html.py``.
-
-So, in summary:
-
- 1. ``transform.py`` generates a *normal* DPS tree. It doesn't
- use any "odd" nodes (except <group> - but we'll discuss
- that later on). This means that it should be possible to
- plug in any other writer, and produce a different format as
- output - a very significant advantage.
-
- 2. ``html.py`` expects to be given a *normal* DPS tree. This
- means that it should be usable by any other utility that
- also provides a normal DPS tree - again an advantage.
-
-The problem
------------
-But there is a clash in requirements here. Whilst it is very nice
-to be able to represent the Python information as "normal" DPS
-(guaranteeing that anyone can do useful things with it), there is
-some need to transfer information that goes beyond that. There
-are two main reasons for wanting to do this:
-
- * Data mining
- * Presentation
-
-For the first, although DPS/reST/pydps is primarily about
-producing human-viewable documentation, it might also be nice to
-be able to extract parts of it automatically, for various
-purposes - for instance, retrieve just the information about
-which classes inherit from other. This information will, in part,
-be obvious from the text chosen within the document (a title like
-"Class Fred" might be taken to be useful, for instance!), but it
-would be nice to give a bit more help.
-
-For the second, it's relatively difficult to produce better
-layout for DPS Python documentation without more information to
-work on. If one uses the (rather garish) default presentation
-produced by pydps (and no, I'm not saying that's a *nice*
-presentation, but it is the one I've got as an example), it is
-clearly useful to be able to:
-
- 1. group together the package/class/method/etc title and its
- full name/path/whatever
-
- 2. group together a method or function's signature and its
- docstring
-
-David's original approach to this was to introduce a host of
-Python specific tags into ``nodes.py`` [#nodes]_ - for instance::
-
- package_section
- module_section
- ...
- instance_attribute_section
- ...
- parameter_item
- parameter_tuple
- ...
- package
- module
- class_attribute
-
-There are several problems with approach. Perhaps the most
-serious is that *all* generic DPS writers need to understand
-this host of elements that are only relevant to Python. Clearly,
-someone writing a writer for other purposes may be reluctant to
-go to this (to them) redundant effort.
-
-From my point of view, an immediate problem is that the set of
-elements is not *quite* what I want - which means working towards
-a set of patches for ``nodes.py`` and the relevant DTD, and
-getting David to agree to them (well, that last is a useful
-process to have in place, but still). Since I'm not likely to get
-it right immediately, this is a repetitive process.
-
-Lastly, one might imagine someone from another programming
-language domain adopting DPS/reST. One can expect them to be
-frustrated if the set of constructs provided for Python doesn't
-quite match the set of constructs required to describe their
-language in a natural manner.
-
-Luckily (!), I have a counter proposal, which hopefully keeps the
-baby and just loses the bath water.
-
-Groups and "style"
-------------------
-The first thing that I realised was that, for convenience of
-output at least, I wanted to be able to group elements together -
-or, in terms of the DPS tree, insert an arbitrary "subroot"
-within the tree to 'abstract' a branch of the tree.
-
-This is particularly useful for linking together the parts of the
-text that deal with (for instance) attribution, or unusual
-globals, without having to embed yet another section.
-
-There is, of course, precedent. HTML provides <div> and <span> -
-one for "structural" elements, and one for inline elements (I
-forget which is which), and TeX and LaTeX are well-known for
-their use of grouping (e.g., the ``\begin{xxx}`` and
-``\end{xxx}`` in LaTeX).
-
-I don't consider it worth making the <div>/<span> distinction in
-the context of a tree - it is perfectly evident what is beingp
-grouped from the elements themselves.
-
-Once one has a <group> element, it is natural to annotate it with
-*what* it is a group of/for. I chose the arbitrary term "style" -
-partly because it is not used in HTML/XML for any purpose I am
-aware of.
-
-And once one has the "style" attribute, it becomes possible to
-use it elsewhere - most notably in <section> elements, saving the
-need for a myriad of different sections for different purposes.
-
-In these instances, it is perhaps acting more like the "class"
-attribute in HTML - indicating, to some extent, meaning, but
-aimed mostly at presentation (via CSS).
-
-The other obvious place to use it is in the automatically
-generated text for things like names, where (at least
-pre-"combing"/transformation) one is "pretending" to have
-assigned a role (just as a person might in a docstring) (but see
-[#style]_).
-
-Summary
--------
-Current DPS defines many element types for use in Python code
-representation.
-
-However, there are major advantages in only using the "simple"
-DPS nodes for all purposes.
-
-This becomes simple and practical given a single extra, general
-purpose, element: <group>.
-
-Furthermore, adding a standard attribute called "style" (or
-perhaps "role" - see [#style]_) seems to fulfil any other
-outstanding requirements.
-
-References
-----------
-.. [#diagram] in email by David Goodger to Doc-SIG, dated
- 21 September 2001 04:31, "Re: [Doc-SIG] DPS components".
-
-.. [#style] Hmm - maybe "style" should be "role", to match
- with the way that a ``:role:`of something``` gets handled...
-
-.. [#pydps] Normally to be found at
- http://www.tibsnjoan.co.uk/reST/pydps.tgz,
- although note that this is not currently up-to-date.
-
-.. [#nodes] dps/dps/nodes.py in the DPS distribution
- (``dps.nodes`` if one is importing it).
diff --git a/sandbox/tibs/pysource/html.py b/sandbox/tibs/pysource/html.py
deleted file mode 100755
index 398151a0e..000000000
--- a/sandbox/tibs/pysource/html.py
+++ /dev/null
@@ -1,1163 +0,0 @@
-"""Output DOCUTILS nodes as HTML.
-
-This is a quick-and-dirty approach to writing out HTML derived from
-a DOCUTILS node tree. It maintains a minimum of state, and doesn't attempt
-any particular intelligence about the tree structure.
-
- Note: for debugging purposes some HTML elements are output with
- "style" attributes - this is so I can track which elements were
- written for what purpose, and is temporary.
-
- (Use of "class" attributes to make CSS usage easier is a
- separate consideration, to be made later on.)
-
-Use of this should ultimately be replaced by use of David's new mechanisms
-from the docutils module - but they didn't exist when I started, so we'll live
-with this for a little longer.
-"""
-
-import time
-import buildhtml
-
-__docformat__ = "reST"
-
-class HTMLError(Exception):
- pass
-
-
-# ----------------------------------------------------------------------
-class Writer:
- """Encapsulate the HTML writing stuff in a class
-
- - it makes it easier to handle values we want to keep around
- """
-
- colours = {"Information": "#FF0000",
- "Warning" : "#FF0000",
- "Error" : "#FF0000",
- "Fatal" : "#FF0000",
- "WarningBG" : "Silver", # (was "lightgrey" or #DDDDDD)
- "default" : "#FFFFCC",
- }
- """Colours to use to distinguish various contexts
-
- Note that the HTML4 spec defines the following colours:
-
- * Black = "#000000"
- * Silver = "#C0C0C0"
- * Gray = "#808080"
- * White = "#FFFFFF"
- * Maroon = "#800000"
- * Red = "#FF0000"
- * Purple = "#800080"
- * Fuchsia = "#FF00FF"
- * Green = "#008000"
- * Lime = "#00FF00"
- * Olive = "#808000"
- * Yellow = "#FFFF00"
- * Navy = "#000080"
- * Blue = "#0000FF"
- * Teal = "#008080"
- * Aqua = "#00FFFF"
- """ #"
-
- role_text = {"package" : "Package",
- "module" : "Module",
- "class" : "Class",
- "method" : "Method",
- "function" : "Function",
- "module_attribute" : "Module attribute",
- "class_attribute" : "Class attribute",
- "instance_attribute": "Instance attribute",
- "variable" : "Name",
- "parameter" : "Argument",
- "type" : "Type",
- "exception_class" : "Exception class",
- "exception" : "Exception",
- "warning_class" : "Warning class",
- "warning" : "Warning"}
- """If an interpreted text has a role, we want to write that role
- out. We thus need a dictionary to relate role names to the text
- to be written out.
- """
-
- fancy = 0
- """Do we want fancy presentation?"""
-
- want_contents = 0
- """Do we *want* contents for this document?
- """
-
- language = "en"
- """The language that we believe our document to be
- destined for.
- """
-
- showwarnings = 1
- """Should we show warnings, or try to continue silently?
- """
-
- showinforms = 1
- """Should we show informational messages, or ignore them?
- """
-
- visible_targets = 0
- """Show link target names
- """
-
- visible_links = 0
- """Show link references (although not all of the possible links
- we produce).
- """
-
- def __init__(self):
-
- # The current document tree - unset it here just in case...
- self.document = None
-
- # Our HTML builder - ditto
- self.html = None
-
- # Our method cache - we seed it with the entry for "#text"
- # because we can't deduce the method name from that tag
- # ("write_#text" is not a valid Python name!)
- self.method_cache = {"#text":self.write_text}
-
- def __call__(self,document,stream):
- """Output an HTML representation of `document` to `stream`.
-
- Arguments:
-
- * document -- the DOCUTILS tree we are to output as HTML
- * stream -- something like a File, with a write method
- """
-
- self.document = document
- self.html = buildhtml.BuildHTML(stream)
-
- # Reset things (i.e., so we can be called more than once)
-
- # The header level to use for <section> titles
- # (i.e., <h2>, <h3>, etc).
- self.level = 0
-
- # Have we output Contents for this document?
- self.got_contents = 0
-
- # Are we within the body of a field list item?
- self.infield = 0
-
- # Or in a paragraph? (note - only in the sense that the DOCUTILS
- # tree says that we're in a paragraph)
- self.in_paragraph = 0
-
- # Footnote autonumbers
- self.auto_footnote = 0
- """The current auto-numbered footnote's number.
- This will be stored as attribute "auto-index" on
- the footnote itself, by `find_auto_footnotes()`.
- """
- self.auto_footnote_names = {}
- """A dictionary linking an auto-numbered footnote label
- to the corresponding (generated) footnote number. This
- is populated by `find_auto_footnotes()`.
- """
- self.auto_footnote_list = []
- """A list of the auto-numbered footnote numbers that
- are used for non-named footnotes. This list is then
- used to populate the [#]_ footnote references. It is
- populated by `find_auto_footnotes()`.
- """
- self.auto_footnote_index = 0
- """An index into `self.auto_footnote_list`.
- """
- self.auto_footnote_target = 0
- """This is used to record the numbering for the "link" end
- of footnotes - i.e., the number for autonumbered references.
- """
-
- self.find_auto_footnotes(document)
-
- # Table location
- self.in_table_header = 0
- self.in_table_body = 0
-
- # And now down to work...
- self.html.write_doctype()
- self.html.start("html")
-
- # Hmm - have we been handed a "document" rooted tree,
- # or a DOM-like tree that has "document" as its single child?
- if document.tagname == "document":
- self.write_html(document,stream)
- else:
- for element in document:
- self.write_html(element,stream)
-
- self.html.end("html")
- self.html.finish()
-
- def find_auto_footnotes(self,element):
- """Locate and number autonumbered footnotes...
- """
-
- if element.tagname == "#text":
- return
- elif element.tagname == "footnote":
- # This is a footnote body - it is the footnote bodies
- # that determine their order and numbering...
- name = auto = None
- if element.hasattr("name"):
- name = element["name"]
- if element.hasattr("auto"):
- auto = element["auto"]
- self.auto_footnote += 1
- element["auto-index"] = self.auto_footnote
- if auto:
- if name:
- if not self.auto_footnote_names.has_key(name):
- self.auto_footnote_names[name] = self.auto_footnote
- else:
- # Well, what should we do?
- # Removing it seems the best bet...
- del self.auto_footnote_names[name]
- else:
- self.auto_footnote_list.append(self.auto_footnote)
-
- for node in element:
- self.find_auto_footnotes(node)
-
- def write_document(self,element,stream):
- document_is_section = 0
- if element.hasattr("title"):
- title = self.html.escape(element["title"])
- else:
- firstchild = element[0]
- if firstchild.tagname == "title":
- title = self.html.escape(firstchild.astext())
- document_is_section = 1
- elif firstchild.hasattr("title"):
- title = self.html.escape(firstchild["title"])
- else:
- title = "Document produced by pysource"
-
- self.html.start("head")
- self.html.add("title",title)
- self.html.end("head")
-
- self.html.start("body")
- if document_is_section:
- # There is no internal <section> - instead we just
- # have a <document> whose first element is <title>
- # So, given that, pretend we ARE a section...
- self.write_section(element,stream)
- else:
- for node in element:
- self.write_html(node,stream)
-
- self.html.add("hr")
- self.html.start("p")
- self.html.add("em","Automatically generated by ",
- self.html.element("code","pysource"),
- " on %s\n"%time.ctime(time.time()))
- self.html.end("p")
- self.html.end("body")
-
- def write_text(self,element,stream):
- """Write out plain text.
- """
- self.html.add("text",self.html.escape(element.astext()))
-
- def write_html(self,element,stream):
- """Write out the HTML representation of `element` on `stream`.
- """
-
- name = element.tagname
- try:
- method = self.method_cache[name]
- except KeyError:
- method = getattr(self,"write_%s"%name,self.write_unknown)
- self.method_cache[name] = method
- method(element,stream)
-
- def write_unknown(self,element,stream):
- """Write out an element which we don't recognise.
- """
-
- self.html.add("p",self.html.element("comment","just a spacer"))
-
- self.html.start("font","&lt;%s"%element.tagname,color="red")
- for name,value in element.attlist():
- self.html.add("text"," %s='%s'"%(name,self.html.escape(value)))
- self.html.add("text","&gt;")
- self.html.end("font")
-
- for node in element:
- self.write_html(node,stream)
-
- self.html.add("font","&lt;/%s&gt;"%element.tagname,
- color="red")
-
- def write_section(self,element,stream):
- """Write a section - i.e., something with a title
- """
-
- self.level += 1
-
- if element.hasattr("name"):
- # Lazily, escape the name so we don't have to worry
- # about single quotes in it...
- name=self.html.escape(element["name"])
-
- # Hmm - we *want* to write "\n\n<a name='...'></a>"
- # which isn't *quite* what this does - maybe have a specialised
- # call in buildhtml.py?
- self.html.add("text",self.html.element("a",name=name))
- if self.visible_links:
- self.html.start("font",color="green")
- self.html.add("text","&lt;%s&gt;"%name)
- self.html.end("font")
-
- for node in element:
- self.write_html(node,stream)
-
- self.level -= 1
-
- def write_title(self,element,stream):
- if 1 <= self.level <= 6:
- self.html.start("h%d"%self.level)
- for node in element:
- self.write_html(node,stream)
- self.html.end("h%d"%self.level)
- else:
- # Put a warning here?
- self.html.start("p")
- self.html.start("font",size="-1",color="red")
- self.html.add("text","[problem: header level='%d']"%self.level)
- self.html.end("font")
- self.html.start("strong")
- for node in element:
- self.write_html(node,stream)
- self.html.end("strong")
- self.html.end("p")
-
- def write_transition(self,element,stream):
- self.html.start("p", # hmm - strictly not legal...
- self.html.element("hr"))
-
- def write_enumerated_list(self,element,stream):
- typedict = {"arabic" : "1",
- "roman" : "i",
- "Roman" : "I",
- "alpha" : "a",
- "Alpha" : "A"}
- try:
- enumtype = typedict[element["enumtype"]]
- except:
- enumtype = "1"
-
- # Does this match how DOCUTILS nodes work?
- if element.hasattr("start"):
- self.html.start("ol",type=enumtype,start=element["start"])
- else:
- self.html.start("ol",type=enumtype)
- for node in element:
- self.write_html(node,stream)
- self.html.end("ol")
-
- def write_bullet_list(self,element,stream):
- # Hmm - the translation is fairly arbitrary
- # - but at least consistent
- bulletdict = {"*" : "disc",
- "-" : "circle",
- "+" : "square"}
- try:
- bullet = bulletdict[element["bullet"]]
- except:
- bullet = None
-
- if bullet:
- self.html.start("ul",type=bullet)
- else:
- self.html.start("ul")
- for node in element:
- self.write_html(node,stream)
- self.html.end("ul")
-
- def write_definition_list(self,element,stream):
- self.html.start("dl")
- for node in element:
- self.write_html(node,stream)
- self.html.end("dl")
-
- def write_definition_list_item(self,element,stream):
- # Nothing special to do for this one
- for node in element:
- self.write_html(node,stream)
-
- def write_term(self,element,stream):
- self.html.start("dt")
- self.html.start("strong")
- for node in element:
- self.write_html(node,stream)
- self.html.add("text"," ") # to separate consecutive parts,
- # in option lists
- self.html.end("strong")
- self.html.end("dt")
-
- def write_list_item(self,element,stream):
- self.html.start("li")
- for node in element:
- self.write_html(node,stream)
- self.html.end("li")
-
- def write_option_list(self,element,stream):
- self.html.start("dl")
- for node in element:
- self.write_html(node,stream)
- self.html.end("dl")
-
- def write_option_list_item(self,element,stream):
- for node in element:
- self.write_html(node,stream)
-
- def write_option(self,element,stream):
- self.html.start("dt")
- self.html.start("strong")
- for node in element:
- self.write_html(node,stream)
- self.html.add("text"," ") # to separate consecutive parts,
- # in option lists
- self.html.end("strong")
- self.html.end("dt")
-
- def write_definition(self,element,stream):
- self.html.start("dd")
- for node in element:
- self.write_html(node,stream)
- self.html.end("dd")
-
- def write_short_option(self,element,stream):
- self.html.start("samp")
- for node in element:
- self.write_html(node,stream)
- self.html.end("samp")
-
- def write_long_option(self,element,stream):
- self.html.start("samp")
- for node in element:
- self.write_html(node,stream)
- self.html.end("samp")
-
- def write_vms_option(self,element,stream):
- self.html.start("samp")
- for node in element:
- self.write_html(node,stream)
- self.html.end("samp")
-
- def write_option_argument(self,element,stream):
- self.html.start("samp")
- for node in element:
- self.write_html(node,stream)
- self.html.end("samp")
-
- def write_description(self,element,stream):
- self.html.start("dd")
- for node in element:
- self.write_html(node,stream)
- self.html.end("dd")
-
- def write_field_list(self,element,stream):
- """Write out a fieldlist.
- """
- # The colour is for debugging purposes only!
- self.html.start("table",width="100%",bgcolor="palegreen")
-
- self.infield = 1
- for node in element:
- self.write_html(node,stream)
- self.infield = 0
-
- self.html.end("table")
-
- def write_field(self,element,stream):
- self.html.start("tr",valign="top",dps="field")
- for node in element:
- self.write_html(node,stream)
- self.html.end("tr")
-
- def write_field_name(self,element,stream):
- self.html.start("td",dps="field_name")
- self.html.start("strong")
- for node in element:
- self.write_html(node,stream)
- self.html.end("strong")
- self.html.end("td")
-
- def write_field_body(self,element,stream):
- self.infield = 1
- self.paranum = 0
- self.html.start("td",dps="field_body")
- for node in element:
- self.write_html(node,stream)
- self.html.end("td")
- self.infield = 0
-
- def write_biblio_field(self,element,stream,name):
- """Write out a document bibliographic datum.
- """
- self.infield = 1
- # The colour is for debugging purposes only!
- self.html.start("table",width="100%",bgcolor="palegreen")
- self.html.start("tr",valign="top")
- self.html.start("td",dps="biblio_field")
- self.html.add("strong",name)
-
- if len(element) != 1:
- raise HTMLError,"Found %d children in field %s"%\
- (len(element),name)
-
- self.write_field_body(element[0],stream)
-
- self.html.end("td","tr","table")
- self.infield = 0
-
- def write_subtitle(self,element,stream):
- self.write_biblio_field(element,stream,"Subtitle")
-
- def write_author(self,element,stream):
- self.write_biblio_field(element,stream,"Author")
-
- def write_authors(self,element,stream):
- self.write_biblio_field(element,stream,"Authors")
-
- def write_organization(self,element,stream):
- self.write_biblio_field(element,stream,"Organisation")
-
- def write_organisation(self,element,stream):
- self.write_biblio_field(element,stream,"Organisation")
-
- def write_contact(self,element,stream):
- self.write_biblio_field(element,stream,"Contact")
-
- def write_version(self,element,stream):
- self.write_biblio_field(element,stream,"Version")
-
- def write_status(self,element,stream):
- self.write_biblio_field(element,stream,"Status")
-
- def write_date(self,element,stream):
- self.write_biblio_field(element,stream,"Date")
-
- def write_revision(self,element,stream):
- self.write_biblio_field(element,stream,"Revision")
-
- def write_copyright(self,element,stream):
- self.write_biblio_field(element,stream,"Copyright")
-
- def write_abstract(self,element,stream):
- self.write_biblio_field(element,stream,"Abstract")
-
- def write_reference(self,element,stream):
- """Write a link - the "pointer" to a target.
-
- Doesn't yet handle "indirect" links...
- """
- if element.hasattr("refuri"):
- name = self.html.escape(element["refuri"])
- self.html.start("a",href=name)
- elif element.hasattr("refname"):
- # Escape the name to match what we do with titles...
- name = "#"+self.html.escape(element["refname"])
- self.html.start("a",href=name)
- else:
- self.write_unknown(element,stream)
- return
- for node in element:
- self.write_html(node,stream)
- self.html.end("a")
- if self.visible_links:
- self.html.start("font",color="green")
- self.html.add("text","&lt;%s&gt;"%name)
- self.html.end("font")
-
- def write_target(self,element,stream):
- """Write the target end of a link.
-
- Ultimately, the user should be able to choose to fold these into
- the document (i.e., into the "link" itself).
- """
- try:
- name = element["name"]
- except:
- name = "**no target name**"
-
- ##if not self.in_paragraph:
- ## self.html.start("p")
-
- # Provide some "debugging" information
- if self.visible_targets:
- self.html.start("font",color="green")
- self.html.start("strong")
- self.html.start("em")
- self.html.add("text",name)
- self.html.end("em")
- self.html.end("strong")
- self.html.end("font")
-
- self.html.add("a",name=self.html.escape(name))
-
- if element.has_key("refuri"):
- uri = self.html.escape(element["refuri"])
- self.html.add("text",":&nbsp;")
- self.html.add("a",element["refuri"],href=uri)
-
- ##if not self.in_paragraph:
- ## self.html.end("p")
-
- def write_footnote(self,element,stream):
- """Write out the body of a footnote.
-
- It's not entirely clear how to do this in HTML, so we'll
- just try for something distinctive...
- """
- name = auto = index = None
- if element.hasattr("name"):
- name = element["name"]
- if element.hasattr("auto"):
- auto = element["auto"]
- if element.hasattr("auto-index"):
- index = element["auto-index"]
-
- if auto and index == None:
- raise HTMLError,"Footnote auto-numbering has not been done"
-
- if name and auto:
- self.html.start("p")
- self.html.add("a",name=self.html.escape(name))
- self.html.add("text"," ")
- self.html.add("a",name=`index`)
- self.html.end("p")
- elif name:
- self.html.start("p")
- self.html.add("a",name=self.html.escape(name))
- self.html.end("p")
- elif auto:
- self.html.start("p")
- self.html.add("a",name=`index`)
- self.html.end("p")
- else:
- self.write_message(stream,level=2,
- text="Footnote doesn't have name"
- " or auto attributes")
-
- self.html.start("table",align="center",width="80%")
- self.html.start("tr")
- self.html.start("td")
-
- # Automatically numbered footnotes don't contain an explicit
- # <label> element, so we have to do it by hand...
- if auto:
- self.write_label(element,stream,index)
-
- for node in element:
- self.write_html(node,stream)
-
- self.html.end("td","tr","table")
-
- def write_label(self,element,stream,index=None):
- """Write out the label for a footnote.
- """
- self.html.add("p",
- self.html.element("hr"))
-
- self.html.start("p","Footnote ")
- if index == None:
- self.html.add("strong",element.astext())
- else:
- self.html.add("strong",`index`)
- self.html.end("p")
- self.html.add("br")
- self.html.add("hr")
-
- def write_footnote_reference(self,element,stream):
- """Write out the link to a footnote.
- """
- name = auto = None
- if element.hasattr("refname"):
- name = element["refname"]
- if element.hasattr("auto"):
- auto = element["auto"]
-
- if auto:
- if name:
- if self.auto_footnote_names.has_key(name):
- number = self.auto_footnote_names[name]
- else:
- self.write_message(stream,level=2,
- text="Autonumber footnote name"
- " '%s' doesn't match a"
- " footnote"%name)
- number = 0
- else:
- try:
- number = self.auto_footnote_list[self.auto_footnote_index]
- self.auto_footnote_index += 1
- except IndexError:
- # Hmm - probably a [#]_ with no footnotes for it to
- # point to - best we can do is write *something* out
- self.html.start("font",color=self.colours["Error"])
- self.html.add("text","[")
- self.html.add("strong","#")
- self.html.add("text","]")
- self.html.end("font")
- return
-
- if auto:
- self.html.start("a",href="#%d"%number)
- self.html.add("text","[")
- self.html.add("strong",`number`)
- self.html.add("text","]")
- self.html.end("a")
- elif name:
- self.html.start("a",href="#%s"%self.html.escape(name))
- self.html.add("text","[")
- self.html.add("strong",element.astext())
- self.html.add("text","]")
- self.html.end("a")
- else:
- self.write_unknown(element,stream)
- return
-
-
- def write_comment(self,element,stream):
- """Write out a comment
- """
- # Technically, this may not be enough, as we don't know what
- # they might *have* in the comment - but in practice, it's
- # likely to do...
- self.html.start("comment")
- for node in element:
- self.write_html(node,stream)
- self.html.end("comment")
-
- def write_paragraph(self,element,stream):
- """Write a new paragraph.
-
- This is a method simply because I do odd things inside
- a field body, to make it "look" better.
- """
- if self.html.last_tag() not in ["li","dd","td","th"]:
- self.html.start("p")
- write_slash_p = 1
- else:
- write_slash_p = 0
-
- for node in element:
- self.write_html(node,stream)
-
- if write_slash_p:
- self.html.end("p")
- return
-
-
- self.in_paragraph = 1
- if self.infield:
- self.write_field_paragraph(element,stream)
- else:
- self.html.start("p")
- for node in element:
- self.write_html(node,stream)
- self.html.end("p")
- self.in_paragraph = 0
-
- def write_field_paragraph(self,element,stream):
- """Write a new paragraph inside a field body.
- """
- started_row = 0
- if self.paranum > 0:
- self.html.start("tr")
- self.html.add("td") # an empty column...
- self.html.start("td",dps="paragraph")
- started_row = 1
- self.paranum += 1
- for node in element:
- self.write_html(node,stream)
- if self.paranum > 1:
- self.html.end("td")
- if started_row:
- self.html.end("tr")
-
- def write_table(self,element,stream):
- """Write out a table - initially in a very visible manner
- """
- self.html.start("table",border="1",align="center")
- for node in element:
- self.write_html(node,stream)
- self.html.end("table")
-
- def write_tgroup(self,element,stream):
- for node in element:
- self.write_html(node,stream)
-
- def write_colspec(self,element,stream):
- for node in element:
- self.write_html(node,stream)
-
- def write_rowspec(self,element,stream):
- for node in element:
- self.write_html(node,stream)
-
- def write_thead(self,element,stream):
- """Write out a table header section
- """
- self.html.start("thead")
- self.in_table_header = 1
- for node in element:
- self.write_html(node,stream)
- self.in_table_header = 0
- self.html.end("thead")
-
- def write_tbody(self,element,stream):
- """Write out a table body section
- """
- self.html.start("tbody")
- self.in_table_body = 1
- for node in element:
- self.write_html(node,stream)
- self.in_table_body = 0
- self.html.end("tbody")
-
- def write_row(self,element,stream):
- """Write out a table row.
- """
- if self.in_table_header:
- self.html.start("tr",valign="top",align="left")
- else:
- self.html.start("tr",valign="top")
- for node in element:
- self.write_html(node,stream)
- self.html.end("tr")
-
- def write_entry(self,element,stream):
- """Write out the equivalent of a table "entry" (e.g., HTML <td>)
- """
- keywords = {}
- if element.hasattr("morecols"):
- keywords["colspan"] = element["morecols"]+1
- if element.hasattr("morerows"):
- keywords["rowspan"] = element["morerows"]+1
- keywords["dps"] = "entry"
- self.html.start("td",**keywords)
-
- if self.in_table_header:
- self.html.start("strong")
-
- if len(element) == 0:
- # Since we're writing a table with a border, it looks better if
- # even an empty entry has *some* content - a non-breaking space
- # will suffice to make sure the entry is properly bordered
- self.html.add("text","&nbsp;")
- else:
- for node in element:
- self.write_html(node,stream)
-
- if self.in_table_header:
- self.html.end("strong")
-
- self.html.end("td")
-
- def write_message(self,stream,level=2,text=None,element=None):
- names = {1: "Information",
- 2: "Warning",
- 3: "Error",
- 4: "Fatal"}
-
- if level == 0 and not self.showinforms:
- return
- elif level == 1 and not self.showwarnings:
- return
-
- try:
- name = names[level]
- colour = self.colours[name]
- except:
- name = "Unrecognised warning level %d"%level
- colour = self.colours["Fatal"]
- bgcolour = self.colours["WarningBG"]
-
- self.html.start("table",width="100%%",bgcolor=bgcolour)
- self.html.start("tr")
- self.html.start("td")
- self.html.start("font",color=colour)
- self.html.add("strong",name)
- self.html.end("font")
- self.html.end("td","tr")
-
- self.html.start("tr")
- self.html.start("td")
- if text:
- self.html.add("text",text)
- if element:
- for node in element:
- self.write_html(node,stream)
- self.html.end("td","tr")
- self.html.end("table")
-
- def write_problematic(self,element,stream):
- self.html.start("a",href="#%s"%element["refid"])
- self.html.start("font",color="red")
- for node in element:
- self.write_html(node,stream)
- self.html.end("font")
- self.html.end("a")
-
- def write_system_message(self,element,stream):
- try:
- target = element["refid"]
- except:
- target = None
- if target:
- self.html.add("a","",name="%s"%target)
- self.write_message(stream,level=element["level"],element=element)
-
- def write_group(self,element,stream):
- """By default, we don't do anything with <group> tags.
- """
- for node in element:
- self.write_html(node,stream)
-
- def write_emphasis(self,element,stream):
- self.html.start("em")
- for node in element:
- self.write_html(node,stream)
- self.html.end("em")
-
- def write_strong(self,element,stream):
- self.html.start("strong")
- for node in element:
- self.write_html(node,stream)
- self.html.end("strong")
-
- def write_interpreted(self,element,stream):
- if element.hasattr("refname"):
- self.html.start("a",href="#"+self.html.escape(element["refname"]))
- inref = 1
- else:
- inref = 0
-
- self.html.start("samp",style="interpreted")
- if element.hasattr("role"):
- role = element["role"]
- if self.role_text.has_key(role):
- self.html.add("text","%s "%self.role_text[role])
-
- for node in element:
- self.write_html(node,stream)
- self.html.end("samp")
-
- if inref:
- self.html.end("a")
- if self.visible_links:
- self.html.start("font",color="green")
- self.html.add("text","&lt;%s&gt;"%element["refname"])
- self.html.end("font")
-
- def write_literal(self,element,stream):
- self.html.start("samp",style="literal")
- for node in element:
- self.write_html(node,stream)
- self.html.end("samp")
-
- def write_literal_block(self,element,stream):
- self.html.start("pre")
- for node in element:
- self.write_html(node,stream)
- self.html.end("pre")
-
- def write_doctest_block(self,element,stream):
- self.html.start("pre",style="doctest")
- for node in element:
- self.write_html(node,stream)
- self.html.end("pre")
-
- def write_block_quote(self,element,stream):
- self.html.start("blockquote")
- for node in element:
- self.write_html(node,stream)
- self.html.end("blockquote")
-
-
-# ----------------------------------------------------------------------
-class PythonWriter(Writer):
- """A Writer that understands how Python is represented using DOCUTILS.
-
- Note that as a princple, I don't believe that "modes" should add extra
- DOCUTILS nodes - in other words, any DOCUTILS tree should be presentable by
- the default writer (albeit maybe not very well).
- """
-
- python_colours = {"package" : "Aqua",
- "module" : "#FFFF00",
- "class" : "#99CCFF", # Python blue
- "method" : "#AAFFAA",
- "function" : "#FFAAFF",
- "docstring" : "#FFFFCC", # pale yellow-ish
- "generator" : "pink",
- }
-
- def write_group(self,element,stream):
- """Write out a group according to its style.
- """
-
- try:
- style = element["style"]
- except:
- style = None
-
- if style == "docstring":
- self.write_docstring(element,stream)
- elif style == "generator":
- self.html.start("table",bgcolor=self.python_colours["generator"],
- width="100%")
- self.html.start("tr")
- self.html.start("td")
-
- for node in element:
- self.write_html(node,stream)
-
- self.html.end("td")
- self.html.end("tr")
- self.html.end("table")
- else:
- for node in element:
- self.write_html(node,stream)
-
- def write_docstring(self,element,stream):
- """Write out a docstring
- """
-
- self.html.start("table",bgcolor=self.python_colours["docstring"],
- width="100%")
- self.html.start("tr")
- self.html.start("td")
-
- # Within a docstring, we want traditional HTML headers,
- # starting at <h2> and working downwards
- self.level = 1
-
- for node in element:
- self.write_html(node,stream)
-
- self.html.end("td")
- self.html.end("tr")
- self.html.end("table")
-
- def write_section(self,element,stream):
- """Write a section - i.e., something with a title
- """
-
- try:
- style = element["style"]
- except:
- style = None
-
- if style in ["package","module","class","method","function"]:
- self.write_py_section(element,stream,style)
- else:
- Writer.write_section(self,element,stream)
-
- def write_py_section(self,element,stream,style):
- """Write out the HTML for a Python section.
- """
-
- self.level += 1
-
- try:
- colour = self.python_colours[style]
- except:
- colour = self.colours["default"]
-
- self.html.start("table",width="100%",cellspacing="0")
-
- # First row - full width, coloured
- self.html.start("tr",bgcolor=colour)
- self.html.add("td",self.html.element("hr"),colspan="2")
- self.html.end("tr")
-
- # Now, if the section has a <title> and a <group> with
- # style="details", we want to treat them specially - and
- # we *know* that they should, if present, be the first
- # two child elements...
- # Optional first-and-a-halfth row
- offset = self.write_py_section_details(element,stream,colour)
-
- if len(element.children) > offset:
- # Second row - left hand margin coloured, "body" not
- self.html.start("tr")
- self.html.add("td","&nbsp;",width="1%",bgcolor=colour)
- self.html.start("td",width="99%")
-
- # More detail needed here?
- for node in element.children[offset:]:
- self.write_html(node,stream)
-
- self.html.end("td")
- self.html.end("tr")
-
- # Third row - full width coloured
- self.html.start("tr",bgcolor=colour)
- self.html.add("td",self.html.element("hr"),colspan="2")
- self.html.end("tr")
-
- if self.got_contents:
- # Fourth row - full width coloured
- self.html.start("tr",bgcolor=colour)
- self.html.add("td","&nbsp;")
- self.html.start("td",align="right")
- self.html.add("text","Return to ")
- self.html.add("a","Contents",href="#contents")
- self.html.end("td")
- self.html.end("tr")
-
- self.html.end("table")
-
- self.level -= 1
-
- def write_py_section_details(self,element,stream,colour):
- """Deal with the title and details for a Python section.
-
- Returns the offset within the <section> elements children
- at which we should continue processing...
- """
- offset = 0
- if element[0].tagname == "title":
- offset = 1
- self.html.start("tr",bgcolor=colour)
- self.html.start("td",colspan="2")
- self.html.start("table",width="100%")
- self.html.start("tr",valign="top")
- self.html.start("td")
- # Hmm. It doesn't work too well using <h2>..<h6> as header
- # elements for nested module, class, etc. Let's do this
- # by "hand"
- self.html.start("font",size="+2")
- for node in element[0]:
- self.write_html(node,stream)
- self.html.end("font")
- self.html.end("td")
- self.html.end("tr")
-
- if element[1].tagname == "group" and \
- element[1].hasattr("style") and \
- element[1]["style"] == "details":
- offset = 2
- self.html.start("tr")
- self.html.start("td",align="right")
- self.write_html(element[1],stream)
- self.html.end("td")
- self.html.end("tr")
- self.html.end("table")
- self.html.end("td")
- self.html.end("tr")
- return offset
diff --git a/sandbox/tibs/pysource/notes/notes.py b/sandbox/tibs/pysource/notes/notes.py
deleted file mode 100755
index a7fd81f51..000000000
--- a/sandbox/tibs/pysource/notes/notes.py
+++ /dev/null
@@ -1,115 +0,0 @@
-"""Notes (i.e., me working things out...)
-
-Given the following Python::
-
- def func(a,b=1,c='jim',d=None,e=[],f={'a':1},g=(1,2,3)):
-
-the tree produced by compiler looks like::
-
- <Function> 'func' 'a' 'b' 'c' 'd' 'e' 'f' 'g'
- <Const> 1
- <Const> 'jim'
- <Name> 'None'
- <List>
- <Dict>
- <Const> 'a'
- <Const> 1
- <Tuple>
- <Const> 1
- <Const> 2
- <Const> 3 0
-
-If one has::
-
- def func2(a,*args,**kargs):
-
-one gets::
-
- <Function> 'func2' 'a' 'args' 'kargs' 3 None
-
-and lastly::
-
- def func3((a,b,c),d):
-
-gives::
-
- <Function> 'func3' 'a' 'b' 'c' 'd' 0 None
-
-
-`compiler.misc` defines `flatten(tup)` - maybe I should try it?
-
-"""
-
-
-# compiler.transformer contains this useful set of comments:
-#
-#
-# The output tree has the following nodes:
-#
-# Source Python line #'s appear at the end of each of all of these nodes
-# If a line # doesn't apply, there will be a None instead.
-#
-# module: doc, node
-# stmt: [ node1, ..., nodeN ]
-# function: name, argnames, defaults, flags, doc, codeNode
-# lambda: argnames, defaults, flags, codeNode
-# classdef: name, bases, doc, codeNode
-# pass:
-# break:
-# continue:
-# for: assignNode, listNode, bodyNode, elseNode
-# while: testNode, bodyNode, elseNode
-# if: [ (testNode, suiteNode), ... ], elseNode
-# exec: expr1Node, expr2Node, expr3Node
-# from: modname, [ name1, ..., nameN ]
-# import: [ name1, ..., nameN ]
-# raise: expr1Node, expr2Node, expr3Node
-# tryfinally: trySuiteNode, finSuiteNode
-# tryexcept: trySuiteNode, [ (exprNode, assgnNode, suiteNode), ... ], elseNode
-# return: valueNode
-# const: value
-# print: [ node1, ..., nodeN ] [, dest]
-# printnl: [ node1, ..., nodeN ] [, dest]
-# discard: exprNode
-# augassign: node, op, expr
-# assign: [ node1, ..., nodeN ], exprNode
-# ass_tuple: [ node1, ..., nodeN ]
-# ass_list: [ node1, ..., nodeN ]
-# ass_name: name, flags
-# ass_attr: exprNode, attrname, flags
-# list: [ node1, ..., nodeN ]
-# dict: [ (key1, val1), ..., (keyN, valN) ]
-# not: exprNode
-# compare: exprNode, [ (op, node), ..., (op, node) ]
-# name: name
-# global: [ name1, ..., nameN ]
-# backquote: node
-# getattr: exprNode, attrname
-# call_func: node, [ arg1, ..., argN ]
-# keyword: name, exprNode
-# subscript: exprNode, flags, [ sub1, ..., subN ]
-# ellipsis:
-# sliceobj: [ node1, ..., nodeN ]
-# slice: exprNode, flags, lowerNode, upperNode
-# assert: expr1, expr2
-#
-# Compiled as "binary" ops:
-# tuple: [ node1, ..., nodeN ]
-# or: [ node1, ..., nodeN ]
-# and: [ node1, ..., nodeN ]
-# bitor: [ node1, ..., nodeN ]
-# bitxor: [ node1, ..., nodeN ]
-# bitand: [ node1, ..., nodeN ]
-#
-# Operations easily evaluateable on constants:
-# <<: exprNode, shiftNode
-# >>: exprNode, shiftNode
-# +: leftNode, rightNode
-# -: leftNode, rightNode
-# *: leftNode, rightNode
-# /: leftNode, rightNode
-# %: leftNode, rightNode
-# power: leftNode, rightNode
-# unary+: node
-# unary-: node
-# invert: node
diff --git a/sandbox/tibs/pysource/notes/notes.txt b/sandbox/tibs/pysource/notes/notes.txt
deleted file mode 100644
index 548d792a1..000000000
--- a/sandbox/tibs/pysource/notes/notes.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Paul Moore's summary of backquoted markup possibilities::
-
- `xxxxx`_ - named hyperlink reference (type 2)
- `xxxxx`__ - anonymous hyperlink reference (type 2)
- _`xxxx` - inline hyperlink targets
- `/xxx/` - substitution reference
- `xxxxx` - interpreted text
diff --git a/sandbox/tibs/pysource/notes/roles.txt b/sandbox/tibs/pysource/notes/roles.txt
deleted file mode 100644
index b063e026d..000000000
--- a/sandbox/tibs/pysource/notes/roles.txt
+++ /dev/null
@@ -1,61 +0,0 @@
-The following is taken from the DPS document pysource-reader.txt::
-
- Interpreted Text
- ================
-
- DTD elements: package, module, class, method, function,
- module_attribute, class_attribute, instance_attribute, variable,
- parameter, type, exception_class, warning_class.
-
- In Python docstrings, interpreted text is used to classify and mark up
- program identifiers, such as the names of variables, functions,
- classes, and modules. If the identifier alone is given, its role is
- inferred implicitly according to the Python namespace lookup rules.
- For functions and methods (even when dynamically assigned),
- parentheses ('()') may be included::
-
- This function uses `another()` to do its work.
-
- For class, instance and module attributes, dotted identifiers are used
- when necessary::
-
- class Keeper(Storer):
-
- """
- Extend `Storer`. Class attribute `instances` keeps track of
- the number of `Keeper` objects instantiated.
- """
-
- instances = 0
- """How many `Keeper` objects are there?"""
-
- def __init__(self):
- """
- Extend `Storer.__init__()` to keep track of instances.
-
- Keep count in `self.instances` and data in `self.data`.
- """
- Storer.__init__(self)
- self.instances += 1
-
- self.data = []
- """Store data in a list, most recent last."""
-
- def storedata(self, data):
- """
- Extend `Storer.storedata()`; append new `data` to a list
- (in `self.data`).
- """
- self.data = data
-
- To classify identifiers explicitly, the role is given along with the
- identifier in either prefix or suffix form::
-
- Use :method:`Keeper.storedata` to store the object's data in
- `Keeper.data`:instance_attribute:.
-
- The role may be one of 'package', 'module', 'class', 'method',
- 'function', 'module_attribute', 'class_attribute',
- 'instance_attribute', 'variable', 'parameter', 'type',
- 'exception_class', 'exception', 'warning_class', or 'warning'. Other
- roles may be defined.
diff --git a/sandbox/tibs/pysource/notes/scope.txt b/sandbox/tibs/pysource/notes/scope.txt
deleted file mode 100644
index 1ad889c1b..000000000
--- a/sandbox/tibs/pysource/notes/scope.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-On finding names
-================
-
-We are not trying for a general solution to the problem of "find the item
-that is being referred to" - we are just trying to provide useful links
-between <interpreted> items in docstrings and those things that they
-might reasonably be expected to be referring to.
-
-Some rules thus occur.
-
-1. We will not show attributes, docstring or not, if they are not
-
- a. At module level (so a ModuleValue)
- b. Within a class (so a ClassValue)
- c. Within a method called __init__ or __new__.
-
- So discard any attributes that do not match these criteria.
-
-Hmm - is that the only rule? Can it be so simple?
diff --git a/sandbox/tibs/pysource/notes/string.html b/sandbox/tibs/pysource/notes/string.html
deleted file mode 100755
index e09c30e2b..000000000
--- a/sandbox/tibs/pysource/notes/string.html
+++ /dev/null
@@ -1,225 +0,0 @@
-
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html><head><title>Python: module string</title>
-<style type="text/css"><!--
-TT { font-family: lucidatypewriter, lucida console, courier }
---></style></head><body bgcolor="#f0f0f8">
-
-<table width="100%" cellspacing=0 cellpadding=2 border=0>
-<tr bgcolor="#7799ee">
-<td valign=bottom><small>&nbsp;<br></small
-><font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>string</strong></big></big></font></td
-><td align=right valign=bottom
-><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:///C|/python21/lib/string.py">c:\python21\lib\string.py</a></font></td></tr></table>
- <p><small><tt>A&nbsp;collection&nbsp;of&nbsp;string&nbsp;operations&nbsp;(most&nbsp;are&nbsp;no&nbsp;longer&nbsp;used&nbsp;in&nbsp;Python&nbsp;1.6).<br>
-&nbsp;<br>
-Warning:&nbsp;most&nbsp;of&nbsp;the&nbsp;code&nbsp;you&nbsp;see&nbsp;here&nbsp;isn't&nbsp;normally&nbsp;used&nbsp;nowadays.&nbsp;&nbsp;With<br>
-Python&nbsp;1.6,&nbsp;many&nbsp;of&nbsp;these&nbsp;functions&nbsp;are&nbsp;implemented&nbsp;as&nbsp;methods&nbsp;on&nbsp;the<br>
-standard&nbsp;string&nbsp;object.&nbsp;They&nbsp;used&nbsp;to&nbsp;be&nbsp;implemented&nbsp;by&nbsp;a&nbsp;built-in&nbsp;module<br>
-called&nbsp;strop,&nbsp;but&nbsp;strop&nbsp;is&nbsp;now&nbsp;obsolete&nbsp;itself.<br>
-&nbsp;<br>
-Public&nbsp;module&nbsp;variables:<br>
-&nbsp;<br>
-whitespace&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;whitespace<br>
-lowercase&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;lowercase&nbsp;letters<br>
-uppercase&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;uppercase&nbsp;letters<br>
-letters&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;letters<br>
-digits&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;decimal&nbsp;digits<br>
-hexdigits&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;hexadecimal&nbsp;digits<br>
-octdigits&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;octal&nbsp;digits<br>
-punctuation&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;punctuation<br>
-printable&nbsp;--&nbsp;a&nbsp;string&nbsp;containing&nbsp;all&nbsp;characters&nbsp;considered&nbsp;printable</tt></small></p>
-
-<p><table width="100%" cellspacing=0 cellpadding=2 border=0>
-<tr bgcolor="#eeaa77">
-<td colspan=3 valign=bottom><small><small>&nbsp;<br></small></small
-><font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
-
-<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;&nbsp;</td>
-<td width="100%"><dl><dt><a name="-_float"><strong>_float</strong></a> = float(...)<dd><small><tt>float(x)&nbsp;-&gt;&nbsp;floating&nbsp;point&nbsp;number<br>
-&nbsp;<br>
-Convert&nbsp;a&nbsp;string&nbsp;or&nbsp;number&nbsp;to&nbsp;a&nbsp;floating&nbsp;point&nbsp;number,&nbsp;if&nbsp;possible.</tt></small></dl>
- <dl><dt><a name="-_int"><strong>_int</strong></a> = int(...)<dd><small><tt>int(x[,&nbsp;base])&nbsp;-&gt;&nbsp;integer<br>
-&nbsp;<br>
-Convert&nbsp;a&nbsp;string&nbsp;or&nbsp;number&nbsp;to&nbsp;an&nbsp;integer,&nbsp;if&nbsp;possible.&nbsp;&nbsp;A&nbsp;floating&nbsp;point<br>
-argument&nbsp;will&nbsp;be&nbsp;truncated&nbsp;towards&nbsp;zero&nbsp;(this&nbsp;does&nbsp;not&nbsp;include&nbsp;a&nbsp;string<br>
-representation&nbsp;of&nbsp;a&nbsp;floating&nbsp;point&nbsp;number!)&nbsp;&nbsp;When&nbsp;converting&nbsp;a&nbsp;string,&nbsp;use<br>
-the&nbsp;optional&nbsp;base.&nbsp;&nbsp;It&nbsp;is&nbsp;an&nbsp;error&nbsp;to&nbsp;supply&nbsp;a&nbsp;base&nbsp;when&nbsp;converting&nbsp;a<br>
-non-string.</tt></small></dl>
- <dl><dt><a name="-_long"><strong>_long</strong></a> = long(...)<dd><small><tt>long(x)&nbsp;-&gt;&nbsp;long&nbsp;integer<br>
-long(x,&nbsp;base)&nbsp;-&gt;&nbsp;long&nbsp;integer<br>
-&nbsp;<br>
-Convert&nbsp;a&nbsp;string&nbsp;or&nbsp;number&nbsp;to&nbsp;a&nbsp;long&nbsp;integer,&nbsp;if&nbsp;possible.&nbsp;&nbsp;A&nbsp;floating<br>
-point&nbsp;argument&nbsp;will&nbsp;be&nbsp;truncated&nbsp;towards&nbsp;zero&nbsp;(this&nbsp;does&nbsp;not&nbsp;include&nbsp;a<br>
-string&nbsp;representation&nbsp;of&nbsp;a&nbsp;floating&nbsp;point&nbsp;number!)&nbsp;&nbsp;When&nbsp;converting&nbsp;a<br>
-string,&nbsp;use&nbsp;the&nbsp;given&nbsp;base.&nbsp;&nbsp;It&nbsp;is&nbsp;an&nbsp;error&nbsp;to&nbsp;supply&nbsp;a&nbsp;base&nbsp;when<br>
-converting&nbsp;a&nbsp;non-string.</tt></small></dl>
- <dl><dt><a name="-atof"><strong>atof</strong></a>(s)<dd><small><tt><a href="#-atof">atof</a>(s)&nbsp;-&gt;&nbsp;float<br>
-&nbsp;<br>
-Return&nbsp;the&nbsp;floating&nbsp;point&nbsp;number&nbsp;represented&nbsp;by&nbsp;the&nbsp;string&nbsp;s.</tt></small></dl>
- <dl><dt><a name="-atoi"><strong>atoi</strong></a>(s, base<small><font color="#909090">=10</font></small>)<dd><small><tt><a href="#-atoi">atoi</a>(s&nbsp;[,base])&nbsp;-&gt;&nbsp;int<br>
-&nbsp;<br>
-Return&nbsp;the&nbsp;integer&nbsp;represented&nbsp;by&nbsp;the&nbsp;string&nbsp;s&nbsp;in&nbsp;the&nbsp;given<br>
-base,&nbsp;which&nbsp;defaults&nbsp;to&nbsp;10.&nbsp;&nbsp;The&nbsp;string&nbsp;s&nbsp;must&nbsp;consist&nbsp;of&nbsp;one<br>
-or&nbsp;more&nbsp;digits,&nbsp;possibly&nbsp;preceded&nbsp;by&nbsp;a&nbsp;sign.&nbsp;&nbsp;If&nbsp;base&nbsp;is&nbsp;0,&nbsp;it<br>
-is&nbsp;chosen&nbsp;from&nbsp;the&nbsp;leading&nbsp;characters&nbsp;of&nbsp;s,&nbsp;0&nbsp;for&nbsp;octal,&nbsp;0x&nbsp;or<br>
-0X&nbsp;for&nbsp;hexadecimal.&nbsp;&nbsp;If&nbsp;base&nbsp;is&nbsp;16,&nbsp;a&nbsp;preceding&nbsp;0x&nbsp;or&nbsp;0X&nbsp;is<br>
-accepted.</tt></small></dl>
- <dl><dt><a name="-atol"><strong>atol</strong></a>(s, base<small><font color="#909090">=10</font></small>)<dd><small><tt><a href="#-atol">atol</a>(s&nbsp;[,base])&nbsp;-&gt;&nbsp;long<br>
-&nbsp;<br>
-Return&nbsp;the&nbsp;long&nbsp;integer&nbsp;represented&nbsp;by&nbsp;the&nbsp;string&nbsp;s&nbsp;in&nbsp;the<br>
-given&nbsp;base,&nbsp;which&nbsp;defaults&nbsp;to&nbsp;10.&nbsp;&nbsp;The&nbsp;string&nbsp;s&nbsp;must&nbsp;consist<br>
-of&nbsp;one&nbsp;or&nbsp;more&nbsp;digits,&nbsp;possibly&nbsp;preceded&nbsp;by&nbsp;a&nbsp;sign.&nbsp;&nbsp;If&nbsp;base<br>
-is&nbsp;0,&nbsp;it&nbsp;is&nbsp;chosen&nbsp;from&nbsp;the&nbsp;leading&nbsp;characters&nbsp;of&nbsp;s,&nbsp;0&nbsp;for<br>
-octal,&nbsp;0x&nbsp;or&nbsp;0X&nbsp;for&nbsp;hexadecimal.&nbsp;&nbsp;If&nbsp;base&nbsp;is&nbsp;16,&nbsp;a&nbsp;preceding<br>
-0x&nbsp;or&nbsp;0X&nbsp;is&nbsp;accepted.&nbsp;&nbsp;A&nbsp;trailing&nbsp;L&nbsp;or&nbsp;l&nbsp;is&nbsp;not&nbsp;accepted,<br>
-unless&nbsp;base&nbsp;is&nbsp;0.</tt></small></dl>
- <dl><dt><a name="-capitalize"><strong>capitalize</strong></a>(s)<dd><small><tt><a href="#-capitalize">capitalize</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;with&nbsp;only&nbsp;its&nbsp;first&nbsp;character<br>
-capitalized.</tt></small></dl>
- <dl><dt><a name="-capwords"><strong>capwords</strong></a>(s, sep<small><font color="#909090">=None</font></small>)<dd><small><tt><a href="#-capwords">capwords</a>(s,&nbsp;[sep])&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Split&nbsp;the&nbsp;argument&nbsp;into&nbsp;words&nbsp;using&nbsp;split,&nbsp;capitalize&nbsp;each<br>
-word&nbsp;using&nbsp;capitalize,&nbsp;and&nbsp;join&nbsp;the&nbsp;capitalized&nbsp;words&nbsp;using<br>
-join.&nbsp;Note&nbsp;that&nbsp;this&nbsp;replaces&nbsp;runs&nbsp;of&nbsp;whitespace&nbsp;characters&nbsp;by<br>
-a&nbsp;single&nbsp;space.</tt></small></dl>
- <dl><dt><a name="-center"><strong>center</strong></a>(s, width)<dd><small><tt><a href="#-center">center</a>(s,&nbsp;width)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;center&nbsp;version&nbsp;of&nbsp;s,&nbsp;in&nbsp;a&nbsp;field&nbsp;of&nbsp;the&nbsp;specified<br>
-width.&nbsp;padded&nbsp;with&nbsp;spaces&nbsp;as&nbsp;needed.&nbsp;&nbsp;The&nbsp;string&nbsp;is&nbsp;never<br>
-truncated.</tt></small></dl>
- <dl><dt><a name="-count"><strong>count</strong></a>(s, *args)<dd><small><tt><a href="#-count">count</a>(s,&nbsp;sub[,&nbsp;start[,end]])&nbsp;-&gt;&nbsp;int<br>
-&nbsp;<br>
-Return&nbsp;the&nbsp;number&nbsp;of&nbsp;occurrences&nbsp;of&nbsp;substring&nbsp;sub&nbsp;in&nbsp;string<br>
-s[start:end].&nbsp;&nbsp;Optional&nbsp;arguments&nbsp;start&nbsp;and&nbsp;end&nbsp;are<br>
-interpreted&nbsp;as&nbsp;in&nbsp;slice&nbsp;notation.</tt></small></dl>
- <dl><dt><a name="-expandtabs"><strong>expandtabs</strong></a>(s, tabsize<small><font color="#909090">=8</font></small>)<dd><small><tt><a href="#-expandtabs">expandtabs</a>(s&nbsp;[,tabsize])&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;with&nbsp;all&nbsp;tab&nbsp;characters&nbsp;replaced<br>
-by&nbsp;the&nbsp;appropriate&nbsp;number&nbsp;of&nbsp;spaces,&nbsp;depending&nbsp;on&nbsp;the&nbsp;current<br>
-column,&nbsp;and&nbsp;the&nbsp;tabsize&nbsp;(default&nbsp;8).</tt></small></dl>
- <dl><dt><a name="-find"><strong>find</strong></a>(s, *args)<dd><small><tt><a href="#-find">find</a>(s,&nbsp;sub&nbsp;[,start&nbsp;[,end]])&nbsp;-&gt;&nbsp;in<br>
-&nbsp;<br>
-Return&nbsp;the&nbsp;lowest&nbsp;index&nbsp;in&nbsp;s&nbsp;where&nbsp;substring&nbsp;sub&nbsp;is&nbsp;found,<br>
-such&nbsp;that&nbsp;sub&nbsp;is&nbsp;contained&nbsp;within&nbsp;s[start,end].&nbsp;&nbsp;Optional<br>
-arguments&nbsp;start&nbsp;and&nbsp;end&nbsp;are&nbsp;interpreted&nbsp;as&nbsp;in&nbsp;slice&nbsp;notation.<br>
-&nbsp;<br>
-Return&nbsp;-1&nbsp;on&nbsp;failure.</tt></small></dl>
- <dl><dt><a name="-index"><strong>index</strong></a>(s, *args)<dd><small><tt><a href="#-index">index</a>(s,&nbsp;sub&nbsp;[,start&nbsp;[,end]])&nbsp;-&gt;&nbsp;int<br>
-&nbsp;<br>
-Like&nbsp;find&nbsp;but&nbsp;raises&nbsp;ValueError&nbsp;when&nbsp;the&nbsp;substring&nbsp;is&nbsp;not&nbsp;found.</tt></small></dl>
- <dl><dt><a name="-join"><strong>join</strong></a>(words, sep<small><font color="#909090">=' '</font></small>)<dd><small><tt><a href="#-join">join</a>(list&nbsp;[,sep])&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;string&nbsp;composed&nbsp;of&nbsp;the&nbsp;words&nbsp;in&nbsp;list,&nbsp;with<br>
-intervening&nbsp;occurrences&nbsp;of&nbsp;sep.&nbsp;&nbsp;The&nbsp;default&nbsp;separator&nbsp;is&nbsp;a<br>
-single&nbsp;space.<br>
-&nbsp;<br>
-(joinfields&nbsp;and&nbsp;join&nbsp;are&nbsp;synonymous)</tt></small></dl>
- <dl><dt><a name="-joinfields"><strong>joinfields</strong></a> = join(words, sep<small><font color="#909090">=' '</font></small>)<dd><small><tt><a href="#-join">join</a>(list&nbsp;[,sep])&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;string&nbsp;composed&nbsp;of&nbsp;the&nbsp;words&nbsp;in&nbsp;list,&nbsp;with<br>
-intervening&nbsp;occurrences&nbsp;of&nbsp;sep.&nbsp;&nbsp;The&nbsp;default&nbsp;separator&nbsp;is&nbsp;a<br>
-single&nbsp;space.<br>
-&nbsp;<br>
-(joinfields&nbsp;and&nbsp;join&nbsp;are&nbsp;synonymous)</tt></small></dl>
- <dl><dt><a name="-ljust"><strong>ljust</strong></a>(s, width)<dd><small><tt><a href="#-ljust">ljust</a>(s,&nbsp;width)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;left-justified&nbsp;version&nbsp;of&nbsp;s,&nbsp;in&nbsp;a&nbsp;field&nbsp;of&nbsp;the<br>
-specified&nbsp;width,&nbsp;padded&nbsp;with&nbsp;spaces&nbsp;as&nbsp;needed.&nbsp;&nbsp;The&nbsp;string&nbsp;is<br>
-never&nbsp;truncated.</tt></small></dl>
- <dl><dt><a name="-lower"><strong>lower</strong></a>(s)<dd><small><tt><a href="#-lower">lower</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;converted&nbsp;to&nbsp;lowercase.</tt></small></dl>
- <dl><dt><a name="-lstrip"><strong>lstrip</strong></a>(s)<dd><small><tt><a href="#-lstrip">lstrip</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;with&nbsp;leading&nbsp;whitespace&nbsp;removed.</tt></small></dl>
- <dl><dt><a name="-maketrans"><strong>maketrans</strong></a>(...)<dd><small><tt><a href="#-maketrans">maketrans</a>(frm,&nbsp;to)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;translation&nbsp;table&nbsp;(a&nbsp;string&nbsp;of&nbsp;256&nbsp;bytes&nbsp;long)<br>
-suitable&nbsp;for&nbsp;use&nbsp;in&nbsp;string.translate.&nbsp;&nbsp;The&nbsp;strings&nbsp;frm&nbsp;and&nbsp;to<br>
-must&nbsp;be&nbsp;of&nbsp;the&nbsp;same&nbsp;length.</tt></small></dl>
- <dl><dt><a name="-replace"><strong>replace</strong></a>(s, old, new, maxsplit<small><font color="#909090">=-1</font></small>)<dd><small><tt>replace&nbsp;(str,&nbsp;old,&nbsp;new[,&nbsp;maxsplit])&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;string&nbsp;str&nbsp;with&nbsp;all&nbsp;occurrences&nbsp;of&nbsp;substring<br>
-old&nbsp;replaced&nbsp;by&nbsp;new.&nbsp;If&nbsp;the&nbsp;optional&nbsp;argument&nbsp;maxsplit&nbsp;is<br>
-given,&nbsp;only&nbsp;the&nbsp;first&nbsp;maxsplit&nbsp;occurrences&nbsp;are&nbsp;replaced.</tt></small></dl>
- <dl><dt><a name="-rfind"><strong>rfind</strong></a>(s, *args)<dd><small><tt><a href="#-rfind">rfind</a>(s,&nbsp;sub&nbsp;[,start&nbsp;[,end]])&nbsp;-&gt;&nbsp;int<br>
-&nbsp;<br>
-Return&nbsp;the&nbsp;highest&nbsp;index&nbsp;in&nbsp;s&nbsp;where&nbsp;substring&nbsp;sub&nbsp;is&nbsp;found,<br>
-such&nbsp;that&nbsp;sub&nbsp;is&nbsp;contained&nbsp;within&nbsp;s[start,end].&nbsp;&nbsp;Optional<br>
-arguments&nbsp;start&nbsp;and&nbsp;end&nbsp;are&nbsp;interpreted&nbsp;as&nbsp;in&nbsp;slice&nbsp;notation.<br>
-&nbsp;<br>
-Return&nbsp;-1&nbsp;on&nbsp;failure.</tt></small></dl>
- <dl><dt><a name="-rindex"><strong>rindex</strong></a>(s, *args)<dd><small><tt><a href="#-rindex">rindex</a>(s,&nbsp;sub&nbsp;[,start&nbsp;[,end]])&nbsp;-&gt;&nbsp;int<br>
-&nbsp;<br>
-Like&nbsp;rfind&nbsp;but&nbsp;raises&nbsp;ValueError&nbsp;when&nbsp;the&nbsp;substring&nbsp;is&nbsp;not&nbsp;found.</tt></small></dl>
- <dl><dt><a name="-rjust"><strong>rjust</strong></a>(s, width)<dd><small><tt><a href="#-rjust">rjust</a>(s,&nbsp;width)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;right-justified&nbsp;version&nbsp;of&nbsp;s,&nbsp;in&nbsp;a&nbsp;field&nbsp;of&nbsp;the<br>
-specified&nbsp;width,&nbsp;padded&nbsp;with&nbsp;spaces&nbsp;as&nbsp;needed.&nbsp;&nbsp;The&nbsp;string&nbsp;is<br>
-never&nbsp;truncated.</tt></small></dl>
- <dl><dt><a name="-rstrip"><strong>rstrip</strong></a>(s)<dd><small><tt><a href="#-rstrip">rstrip</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;with&nbsp;trailing&nbsp;whitespace<br>
-removed.</tt></small></dl>
- <dl><dt><a name="-split"><strong>split</strong></a>(s, sep<small><font color="#909090">=None</font></small>, maxsplit<small><font color="#909090">=-1</font></small>)<dd><small><tt><a href="#-split">split</a>(s&nbsp;[,sep&nbsp;[,maxsplit]])&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;strings<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;list&nbsp;of&nbsp;the&nbsp;words&nbsp;in&nbsp;the&nbsp;string&nbsp;s,&nbsp;using&nbsp;sep&nbsp;as&nbsp;the<br>
-delimiter&nbsp;string.&nbsp;&nbsp;If&nbsp;maxsplit&nbsp;is&nbsp;given,&nbsp;splits&nbsp;into&nbsp;at&nbsp;most<br>
-maxsplit&nbsp;words.&nbsp;&nbsp;If&nbsp;sep&nbsp;is&nbsp;not&nbsp;specified,&nbsp;any&nbsp;whitespace&nbsp;string<br>
-is&nbsp;a&nbsp;separator.<br>
-&nbsp;<br>
-(split&nbsp;and&nbsp;splitfields&nbsp;are&nbsp;synonymous)</tt></small></dl>
- <dl><dt><a name="-splitfields"><strong>splitfields</strong></a> = split(s, sep<small><font color="#909090">=None</font></small>, maxsplit<small><font color="#909090">=-1</font></small>)<dd><small><tt><a href="#-split">split</a>(s&nbsp;[,sep&nbsp;[,maxsplit]])&nbsp;-&gt;&nbsp;list&nbsp;of&nbsp;strings<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;list&nbsp;of&nbsp;the&nbsp;words&nbsp;in&nbsp;the&nbsp;string&nbsp;s,&nbsp;using&nbsp;sep&nbsp;as&nbsp;the<br>
-delimiter&nbsp;string.&nbsp;&nbsp;If&nbsp;maxsplit&nbsp;is&nbsp;given,&nbsp;splits&nbsp;into&nbsp;at&nbsp;most<br>
-maxsplit&nbsp;words.&nbsp;&nbsp;If&nbsp;sep&nbsp;is&nbsp;not&nbsp;specified,&nbsp;any&nbsp;whitespace&nbsp;string<br>
-is&nbsp;a&nbsp;separator.<br>
-&nbsp;<br>
-(split&nbsp;and&nbsp;splitfields&nbsp;are&nbsp;synonymous)</tt></small></dl>
- <dl><dt><a name="-strip"><strong>strip</strong></a>(s)<dd><small><tt><a href="#-strip">strip</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;with&nbsp;leading&nbsp;and&nbsp;trailing<br>
-whitespace&nbsp;removed.</tt></small></dl>
- <dl><dt><a name="-swapcase"><strong>swapcase</strong></a>(s)<dd><small><tt><a href="#-swapcase">swapcase</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;with&nbsp;upper&nbsp;case&nbsp;characters<br>
-converted&nbsp;to&nbsp;lowercase&nbsp;and&nbsp;vice&nbsp;versa.</tt></small></dl>
- <dl><dt><a name="-translate"><strong>translate</strong></a>(s, table, deletions<small><font color="#909090">=''</font></small>)<dd><small><tt><a href="#-translate">translate</a>(s,table&nbsp;[,deletions])&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s,&nbsp;where&nbsp;all&nbsp;characters&nbsp;occurring<br>
-in&nbsp;the&nbsp;optional&nbsp;argument&nbsp;deletions&nbsp;are&nbsp;removed,&nbsp;and&nbsp;the<br>
-remaining&nbsp;characters&nbsp;have&nbsp;been&nbsp;mapped&nbsp;through&nbsp;the&nbsp;given<br>
-translation&nbsp;table,&nbsp;which&nbsp;must&nbsp;be&nbsp;a&nbsp;string&nbsp;of&nbsp;length&nbsp;256.&nbsp;&nbsp;The<br>
-deletions&nbsp;argument&nbsp;is&nbsp;not&nbsp;allowed&nbsp;for&nbsp;Unicode&nbsp;strings.</tt></small></dl>
- <dl><dt><a name="-upper"><strong>upper</strong></a>(s)<dd><small><tt><a href="#-upper">upper</a>(s)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Return&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;string&nbsp;s&nbsp;converted&nbsp;to&nbsp;uppercase.</tt></small></dl>
- <dl><dt><a name="-zfill"><strong>zfill</strong></a>(x, width)<dd><small><tt><a href="#-zfill">zfill</a>(x,&nbsp;width)&nbsp;-&gt;&nbsp;string<br>
-&nbsp;<br>
-Pad&nbsp;a&nbsp;numeric&nbsp;string&nbsp;x&nbsp;with&nbsp;zeros&nbsp;on&nbsp;the&nbsp;left,&nbsp;to&nbsp;fill&nbsp;a&nbsp;field<br>
-of&nbsp;the&nbsp;specified&nbsp;width.&nbsp;&nbsp;The&nbsp;string&nbsp;x&nbsp;is&nbsp;never&nbsp;truncated.</tt></small></dl>
-</td></tr></table>
-<p><table width="100%" cellspacing=0 cellpadding=2 border=0>
-<tr bgcolor="#55aa55">
-<td colspan=3 valign=bottom><small><small>&nbsp;<br></small></small
-><font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
-
-<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;&nbsp;</td>
-<td width="100%"><strong>_StringType</strong> = &lt;type 'string'&gt;<br>
-<strong>__file__</strong> = r'c:\Python21\Lib\string.pyc'<br>
-<strong>__name__</strong> = 'string'<br>
-<strong>_idmap</strong> = '<font color="#c040c0">\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f</font> !"#$%&amp;<font color="#c040c0">\'</font>()*+,-./...<font color="#c040c0">\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff</font>'<br>
-<strong>_idmapL</strong> = None<br>
-<strong>digits</strong> = '0123456789'<br>
-<strong>hexdigits</strong> = '0123456789abcdefABCDEF'<br>
-<strong>letters</strong> = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'<br>
-<strong>lowercase</strong> = 'abcdefghijklmnopqrstuvwxyz'<br>
-<strong>octdigits</strong> = '01234567'<br>
-<strong>printable</strong> = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&amp;<font color="#c040c0">\'</font>()*+,-./:;&lt;=&gt;?@[<font color="#c040c0">\\</font>]^_`{|}~ <font color="#c040c0">\t\n\r\x0b\x0c</font>'<br>
-<strong>punctuation</strong> = '!"#$%&amp;<font color="#c040c0">\'</font>()*+,-./:;&lt;=&gt;?@[<font color="#c040c0">\\</font>]^_`{|}~'<br>
-<strong>uppercase</strong> = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'<br>
-<strong>whitespace</strong> = '<font color="#c040c0">\t\n\x0b\x0c\r</font> '</td></tr></table>
-</body></html> \ No newline at end of file
diff --git a/sandbox/tibs/pysource/notes/thoughts.txt b/sandbox/tibs/pysource/notes/thoughts.txt
deleted file mode 100644
index 59691717b..000000000
--- a/sandbox/tibs/pysource/notes/thoughts.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-Thoughts on pysource
-====================
-
-:Author: Tibs
-:Date: 19 Sep 2002
-
-..
-
- [This is the contents of an email sent from Tibs to me, to tie up
- -- or at least identify -- loose ends. When Tibs writes "you",
- he's referring to me. It is published with Tibs' permission. I
- mostly agree with what Tibs has written. I've added my own notes,
- indented in square brackets, like this one.
-
- --David Goodger]
-
-Well, having looked back at the pysource sources, I'm confirmed
-in my opinion that, if I were to start work on the project again,
-I would probably start a new version of pysource from scratch,
-using what I have learned (essentially, the content of visit.py),
-and taking advantage of all the new technology that is in the
-modern DOCUTILS.
-
-Thus I would (at least):
-
-1. produce a "frontend" using Optik
-2. rewrite visit.py more neatly
-3. construct DOCUTILS nodes to match pysource.dtd
-4. *possibly* meld those into the classes in visit.py
- (but possibly not - some of the stuff in visit.py
- seems to me to be, of necessity, a bit messy as it
- is constructing stuff, and thus it may be premature
- to "DOCUTILS" it before it is necessary).
-5. produce an example transform to amend the Python
- specific DOCUTILS tree into a generic DOCUTILS
- tree.
-
-That's a fair amount of work, and I'm not convinced that I can
-find the sustained effort [1]_, especially if you might be
-willing to take the task on (and if I would have been refactoring
-anyway, a whole different head may be a significant benefit).
-
-.. [1] I believe that's called "British understatement".
-
-Some comments on pysource.txt and pysource.dtd
-----------------------------------------------
-
-I believe that a <docstring> node is a Good Thing. It's a natural
-construct (if one believes that the other nodes are good things
-as well!), and it allows the "transform" of the Python specific
-tree to be done more sensibly.
-
- [I think I finally understand what Tibs is getting at here. I
- thought he meant to have a <docstring> node in an otherwise
- standard Docutils doctree, which just contained the raw docstring.
- Instead, I believe he means that the Python-specific Docutils
- doctree elements like <class_section> and
- <module_section> (see pysource.dtd), should each have a <docstring>
- element which contains ``%structure.model;``, instead of the
- current ``%structure.model;`` directly inside the element. In
- other words, a <docstring> element would be a simple container for
- all the parsed elements of the docstring. On second thought, each
- Python-specific section element would still have to have
- ``%structure.model;``, in order to contain subsections. A
- <package_section> would contain <module_section>s, which would
- contain <class_section>s, and so on.
-
- So a <docstring> element may be useful as a convenience to
- transforms. It would be a trivial change anyhow.
-
- The initial (internal) data structure resulting from the parsing
- of Python modules & packages is a completely different beast. It
- should contain <docstring> nodes, along with <package>, <module>,
- <class>, etc., nodes. But these should *not* be subclasses of
- docutils.nodes.Node, and this tree should not be a "Docutils
- document tree". It should be a separate, parallel structure.
- Document tree nodes (docutils.nodes.Node objects) are not suited
- for this work.
-
- --DG]
-
-I recommend some initial "surgery" on the initial parse tree to
-make finding the docstrings for nodes easier.
-
-I reckon that one produces a Python-specific doctree, and then
-chooses one of several transforms to produce generic doctrees.
-
-By the way, I still vote for "static" introspection - that is,
-without actually importing the module. It does limit what one can
-do in some respects, but there are modules one might want to
-document that one does not wish to import (and indeed, at work we
-have some Python files that essentially cannot be introspected in
-this manner with any ease - they are "designed" to be imported by
-other modules after ``sys.path`` has been mangled suitably, and
-just don't work stand-alone).
-
-I've tried to expand out the ideas you had on how the "pysource"
-tool should work below.
-
- although it occurs to me that this is all terribly obvious,
- really. Oh well...
-
-The pysource tool
------------------
-
-The "input mode" should be the "Python Source Reader".
-
- You can see where I'm starting from in pysource.txt.
-
-This produces, as its output, a Python-specific doctree,
-containing extra nodes as defined in pysource.dtd (etc.).
-
-One of the tasks undertaken by the Python Source Reader is to
-decide what to do with docstrings. For each Python file, it
-discovers (from ``__docformat__``) if the input parser is
-"reStructuredText". If it is, then the contents of each docstring
-in that file will be parsed as such, including sorting out
-interpreted text (i.e., rendering it into links across the tree).
-If it is not, then each docstring will be treated as a literal
-block.
-
- This admits the posibility of adding other parsers *for
- docstrings* at a later date - which I suspect is how HappyDoc
- does it. It is just necessary to publicise the API for the
- Docstring class, and then someone else can provide alternate
- plugins.
-
-The output of the Python Source Reader is thus a Python-specific
-doctree, with all docstrings fully processed (as appropriate),
-and held inside <docstring> elements.
-
-The next stage is handled by the Layout Transformer.
-
- [What I call "stylist transforms". --DG]
-
-This determines the layout of the document to be produced - the
-*kind* or *style* of output that the user wants (e.g., PyDoc
-style, LibRefMan style, generic docutils style, etc.).
-
-Each layout is represented by a class that walks the
-Python-specific doctree, replacing the Python-specific nodes with
-appropriate generic nodes. The output of the Layout Transformer
-is thus a generic doctree.
-
-The final stage is thus a normal DOCUTILS Writer - since it is
-taking input that is a generic doctree, this makes perfect
-sense. This also means that we get maximum leverage from existing
-Writers, which is essential (not just a Good Thing).
-
-As you point out, some layouts will probably only be appropriate
-for some output formats. Well, that's OK. On the other hand, if
-the output of the Layout stage *is* a generic doctree, we're not
-likely to get fatal errors by putting it through the wrong
-Writer, so we needn't worry too much.
-
-Thus one might envisage a command line something like::
-
- pysource --layout:book --format:html this_module
-
-Of course, other command line switches would be options for
-particular phases (e.g., to use frames or not for HTML output). I
-can see wanting a series of configuration files that one could
-reference, to save specifying lots of switches.
-
-One specific thing to be decided, particularly for HTML, is
-whether one is outputting a "cluster" of files (e.g., as javadoc
-does). I reckon this can be left for later on, though (as can
-such issues as saying "other interesting sources are *over
-there*, so reference them if you can" - e.g., the Python
-library).
diff --git a/sandbox/tibs/pysource/pysource.py b/sandbox/tibs/pysource/pysource.py
deleted file mode 100755
index a62c96ebb..000000000
--- a/sandbox/tibs/pysource/pysource.py
+++ /dev/null
@@ -1,262 +0,0 @@
-#! /usr/bin/env python
-"""A simple command line interface for the pysource package
-
-This will become more interesting later on...
-"""
-
-import os
-import sys
-import getopt
-
-import docutils.nodes
-import docutils.utils
-
-# Local modules
-import utils
-import visit
-import html
-
-import transform
-
-__docformat__ = "reST"
-
-
-# ----------------------------------------------------------------------
-def rest_document(filename):
- """Return an reST document.
- """
-
- from docutils.parsers.rst import Parser
-
- file = open(filename)
- try:
- text = file.read()
- finally:
- file.close()
-
- parser = Parser()
- docroot = docutils.utils.new_document()
- parser.parse(text,docroot)
- return docroot
-
-
-# ----------------------------------------------------------------------
-# I don't much like the Unix command line style (I always thought the
-# VMS approach was much more flexible and sensible), but it *does* seem
-# to be what people expect these days...
-
-options = [
- # long option, short, description
- ("verbose", "v", "Report on progress in more detail"),
- ("quiet", "q", "Suppress normal progress messages"),
- ("text", "t", "The input file is a plain (text) reST file"),
- ("show", "s", "Output basic information about the input"),
- ("ast", "a", "Output a representation of the AST"),
- ("xml", "x", "Output an XML representation of the input"),
- ("html", "h", "Output an HTML representation of the input [default]"),
- ("pretty", "p", "Output a 'pretty' representation of the input"),
- ("doctest", "d", "Treat a reST file as doctest input."),
- ("help", "h", "Show 'help' information"),
- ("new", "n", "Use David Goodger's HTML Writer (sort of)"),
- ("stdout", "", "Write output to stdout, instead of a file"),
- ]
-
-def print_usage():
- docstring = visit.Docstring(main.__doc__)
- docstring.show(sys.stdout)
- print
- print " <switches> are:"
- print
- for longopt, shortopt, description in options:
- if shortopt:
- print " -%s, --%-9s %s"%(shortopt,longopt,description)
- else:
- print " --%-9s %s"%(longopt,description)
-
-def main():
- """The command line interface to docutil's Python documentation extractor.
-
- Usage: ``pysource.py <switches> <inpath> [<outfile>]``
-
- <inpath> is the path to a package or module.
-
- <outfile> is the path to the output file. If it's not given, then
- output will be written to a file with the same name as the input
- file, but defaulting to the current directory, and with extension
- derived from the type of output:
-
- - show -> ``.show``
- - ast -> ``.ast``
- - xml -> ``.xml``
- - html -> ``.html``
- - pretty -> ``.pretty``
-
- (unless --stdout is requested). The default is --html.
-
- Note that progress messages (and ``verb`` information) are written
- to ``sys.stderr``.
- """
-
- if len(sys.argv) <= 1:
- print "Not enough arguments"
- print_usage()
- return
-
- shortopts = ''.join([option[1] for option in options])
- longopts = [option[0] for option in options]
- try:
- opts, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
- except getopt.GetoptError,detail:
- print "Problem with options:",detail
- print_usage()
- return
-
- verbose = 0
- quiet = 0
- input_format = "python"
- output_format = "html"
- want_docutilstree = 1
- new_writer = 0
- write_stdout = 0
-
- for opt, arg in opts:
- if opt in ["-?","--help"]:
- print_usage()
- return
- elif opt in ["-n","--new"]:
- new_writer = 1
- output_format = "html"
- print >>sys.stderr, "Using new HTML Writer"
- elif opt in ["-v","--verbose"]:
- verbose = 1
- elif opt in ["-q","--quiet"]:
- quiet = 1
- elif opt in ["-t","--text"]:
- input_format = "text"
- elif opt in ["-s","--show"]:
- output_format = "show"
- want_docutilstree = 0
- elif opt in ["-a","--ast"]:
- output_format = "ast"
- want_docutilstree = 0
- elif opt in ["-x","--xml"]:
- output_format = "xml"
- elif opt in ["-h","--html"]:
- output_format = "html"
- elif opt in ["-d","--doctest"]:
- output_format = "doctest"
- elif opt in ["-p","--pretty"]:
- output_format = "pretty"
- elif opt == "--stdout":
- write_stdout = 1
- else:
- raise getopt.GetoptError, "getopt should have saved us!"
-
- if len(args) == 0 or len(args) > 2:
- print "Please specify an input and an (optional) output"
- print_usage()
- return
-
- if input_format == "text" and \
- output_format not in ["xml","html","pretty","doctest"]:
- print "--text only supports --xml, --html, --pretty or --doctest"
- print_usage()
- return
-
- if input_format == "text" and output_format == "doctest" \
- and len(args) == 2:
- print "--doctest does not accept an output file"
- # Should it?
- print_usage()
- return
-
- if write_stdout and len(args) == 2:
- print "It doesn't make sense to specify --stdout and an output file"
- print_usage()
- return
-
- filename = args[0]
- if len(args) == 2:
- if not quiet:
- print >>sys.stderr, "... Output will go to",args[1]
- outstream = open(args[1],"w")
- elif write_stdout:
- if not quiet:
- print >>sys.stderr, "... Output will go to standard output"
- outstream = sys.stdout
- else:
- head,tail = os.path.split(filename)
- base,ext = os.path.splitext(tail)
- outname = "%s.%s"%(base,output_format)
- if not quiet:
- print >>sys.stderr, "... Output will go to",outname
- outstream = open(outname,"w")
-
- try:
- if output_format == "doctest":
- from doctest import Tester
- if not quiet: print >>sys.stderr, "*** Doctesting the document"
- t = Tester(globs={},verbose=verbose)
- (fail,total) = t.runstring(open(filename).read(),filename)
- if not quiet and not verbose:
- print >>sys.stderr, "*** ",
- if fail:
- print "%d of"%fail,
- if total == 1:
- print "1 example",
- else:
- print "%d examples"%total,
- if fail:
- print "failed"
- else:
- print "passed"
- elif input_format == "text":
- if not quiet: print >>sys.stderr, "*** Making the document"
- document = rest_document(filename)
- else:
- if os.path.isdir(filename):
- print >>sys.stderr, "*** Parsing the Python package",filename
- thing = visit.Package(None, filename)
- else:
- print >>sys.stderr, "*** Parsing the Python file",filename
- thing = visit.Module(None, filename)
-
- if want_docutilstree:
- if not quiet:
- print >>sys.stderr, "*** Making the document"
- with_groups = not new_writer
- process = transform.Process(with_groups)
- document = process(thing)
-
- if output_format == "show":
- thing.show(outstream)
- elif output_format == "ast":
- thing.show_ast(outstream)
- print
- elif output_format == "pretty":
- outstream.write(document.pformat(indent=" "))
- elif output_format == "xml":
- if not quiet: print >>sys.stderr, "*** Producing a DOM tree"
- domtree = document.asdom()
- if not quiet: print >>sys.stderr, " Writing XML"
- domtree.writexml(outstream,indent="", addindent=" ",newl="\n")
- elif output_format == "html":
- if not quiet: print >>sys.stderr, "*** Writing HTML"
- if new_writer:
- from docutils.writers.html4css1 import Writer
- writer = Writer()
- writer.write(document,outstream)
- elif input_format == "text":
- writer = html.Writer()
- writer(document,outstream)
- else:
- writer = html.PythonWriter()
- writer(document,outstream)
- finally:
- if outstream != sys.stdout:
- outstream.close()
-
-
-# ----------------------------------------------------------------------
-if __name__ == "__main__":
- main()
diff --git a/sandbox/tibs/pysource/rjhack.py b/sandbox/tibs/pysource/rjhack.py
deleted file mode 100755
index 6046312ac..000000000
--- a/sandbox/tibs/pysource/rjhack.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-
-# Author: Richard Jones
-# Contact: richard@users.sourceforge.net
-# Revision: $Revision$
-# Date: $Date$
-# Copyright: This module has been placed in the public domain.
-
-"""
-A front end to the Docutils Publisher, taking Python source and producing HTML.
-"""
-
-import os, locale
-try:
- locale.setlocale(locale.LC_ALL, '')
-except:
- pass
-
-import visit, transform
-
-from docutils.parsers.rst import Parser
-class SourceParser(Parser):
- supported = ('pysource',)
- settings_spec = (
- 'PySource Parser Options',
- None,
- (('Be verbose while parsing', ['--verbose-parse'],
- {'action': 'store_true'}),
- )) + Parser.settings_spec
- def parse(self, filename, document):
- if os.path.isdir(filename):
- thing = visit.Package(document.settings, filename)
- else:
- thing = visit.Module(document.settings, filename)
- process = transform.Process(with_groups=0, document=document)
- process(thing)
-
-from docutils.readers import Reader
-class SourceReader(Reader):
- def read(self, source, parser, settings):
- self.source = source
- if not self.parser:
- self.parser = parser
- self.settings = settings
- # we want the input as the filename, not the file content
- self.source.source.close()
- self.input = self.source.source_path
- self.parse()
- return self.document
-
-from docutils.core import publish_cmdline, default_description
-description = ('Generates (X)HTML documents from Python sources. '
- + default_description)
-parser = SourceParser()
-reader = SourceReader(parser, 'pysource')
-publish_cmdline(reader=reader, parser=parser, writer_name='html',
- description=description)
-
diff --git a/sandbox/tibs/pysource/test/readme.txt b/sandbox/tibs/pysource/test/readme.txt
deleted file mode 100644
index a6af4576d..000000000
--- a/sandbox/tibs/pysource/test/readme.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Files in the ``test`` directory
--------------------------------
-
-This directory is intended to contain various test file. They are (hopefully)
-named in a consistent manner:
-
-README.txt
- This file.
-
-``*.rtxt``
- Sample reST text files, suitable for checking odd things.
-
-``*.py``
- Sample Python test files, ditto.
-
-``*.doctest``
- Files that contain "semiliterate testing" [1]_ -- that is,
- descriptive text (written with reST) surrounding doctest blocks.
- The idea is that these files should be passed to (for instance)
- pydps.py (or whatever it is called at the moment) to be tested by
- Tim Peters' doctest - for instance::
-
- pydps/pydps.py --text --doctest simple.doctest
-
-
-
-.. [1] a semi-lame reference to literate programming, I'm afraid.
diff --git a/sandbox/tibs/pysource/test/test.doctest b/sandbox/tibs/pysource/test/test.doctest
deleted file mode 100644
index bc91115ad..000000000
--- a/sandbox/tibs/pysource/test/test.doctest
+++ /dev/null
@@ -1,12 +0,0 @@
-The following is some Python code:
-
- >>> a = 1
- >>> a
- 1
-
-and here is some more:
-
- >>> a + 1
- 3
-
-and that's all.
diff --git a/sandbox/tibs/pysource/test/test.py b/sandbox/tibs/pysource/test/test.py
deleted file mode 100755
index b3e380526..000000000
--- a/sandbox/tibs/pysource/test/test.py
+++ /dev/null
@@ -1,124 +0,0 @@
-"""A simple test file for input to ast-mining.py.
-
-But it isn't a "raw" string, so:
-
- \\*escape* \\`with` "\\\\"
-"""
-
-__docformat__ = "reST"
-
-import string
-
-one = 1
-
-"""Documentation after `one` (intervening blank line)"""
-
-two,three = 2,3
-"""Documenatation after ``two,three=2,3``"""
-
-four,five = two,three
-
-six = [four,five]
-"""Documentation after ``six=[four,five]``"""
-
-global gmodule
-gmodule = 1
-"""Global at the module level"""
-
-def func(a,b=1,c='jim',d=None,e=[],f={'a':1},g=(1,2,3)):
- r"""Function at the module level
-
- This *is* a "raw" string, so:
-
- \*escape* \`with` "\\"
- """
-
- from string import lstrip,rstrip
-
- a = 3
-
- global gfunc
- gfunc = 1
- """Global referenced only within `func()`"""
-
- global one
- one = 2
-
- class InFunc:
- pass
-
- def infunc():
- """Function defined inside function `func()`"""
- global ginner
- ginner = 1
- """Global referenced only within `infunc()`"""
-
- class Silly:
- pass
-
- def silly_fn():
- pass
-
-def func2(a,*args,**kargs):
- pass
-
-def func3((a,b,c),d):
- pass
-
-class Fred:
- """Class at the module level."""
-
- a = 1
- """Documentation for class value `a`"""
-
- global gclass
- gclass = 2
- """Global referenced only within `Fred`"""
-
- def __init__(self):
- """Initialisation for `Fred`"""
- self.b = 2
- """`self.b` within `Fred.__init__()`"""
-
- c = 3
- """Local variable within `Fred.__init__()`"""
-
- global gmeth
- gmeth = 3
- """Global referenced only within a method"""
-
- global gagain
- gagain = 3
-
- class Insider:
- """Class defined inside `Fred.__init__()`"""
-
- a = 'jim'
- """Local name within class inside `Fred.__init__()`"""
-
- global gclass2
- gclass2 = 4
- """Global referenced only within a class within a method"""
-
- global gunused
- global gagain
-
- def fred(self):
- global gunused2,gfunc2
- gfunc2 = 5
- """Global referenced only within a method in a
- class in a method
- """
-
- def fredinner():
- global ginner2
- global gagain
- ginner2 = 6
- gagain = 6
-
- infredinner = 7
-
-class Jim(Fred):
- pass
-
-
diff --git a/sandbox/tibs/pysource/test/test.rtxt b/sandbox/tibs/pysource/test/test.rtxt
deleted file mode 100644
index f28a3d4e2..000000000
--- a/sandbox/tibs/pysource/test/test.rtxt
+++ /dev/null
@@ -1,442 +0,0 @@
-pydps test document
-===================
-
-:Author: Tibs
-:Version: 0.1
-:Eggs: Green
-:Ham: Green
-
-This is intended to be a simple test document, with "something of everything".
-It is *not* intended to trawl for *problems*, but just to check I've got the
-writing out of just about everything supported in the HTML writer.
-
- :Author: Tibs
- :Version: 0.1
- :Eggs: Green
- :Ham: Green
- :Parameter i: integer
-
-Lists
------
-1. A list
-2. Some more
-3.
-
- * What's this?
- - and this?
- + and this?
-
-i. And this is Roman
-
-a. And this is alpha
-
-A. And so is this
-
-I. What is this?
-
-.. Just a comment, honest.
- That's all.
-
-A title
- and some text.
-And another
- and more text.
-
-Short options:
-
--a option a
-
--b file option b
-
--cname option c
-
-Long options:
-
---aaaa option aaaa
---bbbb=file option bbbb
---cccc name option cccc
---d-e-f-g option d-e-f-g
---h_i_j_k option h_i_j_k
-
-VMS/DOS-style options:
-
-/A option A
-/B file option B
-/Cstring option C
-
-Mixed short, long, and VMS/DOS options:
-
--a option a
---bbbb=file option bbbb
-/C option C
---dddd name option dddd
--e string option e
-/F file option F
-
-Aliased options:
-
--a, --aaaa, /A option a, aaaa, A
--b file, --bbbb=file, /B file option b, bbbb, B
-
-Multiple lines in descriptions, aligned:
-
--a option a, line 1
- line 2
--b file option b, line 1
- line 2
-
-Multiple lines in descriptions, not aligned:
-
--a option a, line 1
- line 2
--b file option b, line 1
- line 2
-
-Some edge cases:
-
---option=arg arg too many arguments
-
---option=arg=arg too many arguments
-
--aletter arg too many arguments (-a letter)
-
-/Aletter arg too many arguments (/A letter)
-
--a=b can't use = for short arguments
-
-/A=b can't use = for DOS/VMS arguments?
-
---option= argument missing
-
---=argument option missing
-
--- everything missing
-
-- this should be a bullet list item
-
-+ bullet
-
-.. Comments swallow up all indented text following.
-
- (Therefore this is not a) block quote.
-
-- bullet
-
- If we want a block quote after this bullet list item,
- we need to use an empty comment:
-
-..
-
- Block quote.
-
-Other blocks
-------------
-
-::
-
- Anonymous literal block
-
-This is a literal block::
-
- This here.
-
-And we don't need colons ::
-
- Not really.
-
-Of course, **I** like Python:
-
- >>> print " Indented block & output."
- Indented block & output.
-
-Or maybe I don't::
-
- >>> print " Indented block & output."
- Indented block & output.
-
-Footnotes
----------
-
-Autonumbered footnotes
-......................
-[#]_ is the first auto-numbered footnote reference.
-[#]_ is the second auto-numbered footnote reference.
-
-.. [#] Auto-numbered footnote 1.
-.. [#] Auto-numbered footnote 2.
-.. [#] Auto-numbered footnote 3.
-
-[#]_ is the third auto-numbered footnote reference.
-
-Autonumbered and named footnotes
-................................
-[#six]_ is a reference to the sixth auto-numbered footnote.
-
-.. [#four] Fourth auto-numbered footnote.
-.. [#five] Fifth auto-numbered footnote.
-.. [#six] Sixth auto-numbered footnote.
-
-[#five]_ is a reference to the fifth auto-numbered footnote.
-[#four]_ is a reference to the fourth auto-numbered footnote.
-[#six]_ is another reference to the sixth auto-numbered footnote.
-
-Here are some internal cross-references to the implicit targets
-generated by the footnotes: four_, five_, six_.
-
-Mixed anonymous and labelled auto-numbered footnotes
-....................................................
-[#ten]_ should be 10, [#]_ should be 7,
-[#]_ should be 9, [#]_ is one too many,
-[#eight]_ should be 8, and [#twelve]_ doesn't exist,
-nor does [#eleven]_.
-
-.. [#] Auto-numbered footnote 7.
-.. [#eight] Auto-numbered footnote 8.
-.. [#] Auto-numbered footnote 9.
-.. [#ten] Auto-numbered footnote 10.
-.. [#eleven] Auto-numbered footnote 11.
-.. [#eleven] Auto-numbered footnote 11 again (duplicate).
-
-Inline stuff
-------------
-(**strong**) but not (**) or '(** ' or x**2 or \\**kwargs or **
-
-(however, '**kwargs' will trigger a warning and may be problematic)
-
-Strong asterisk: *****
-
-Strong double asterisk: ******
-
-``literal``
-``lite\\ral``
-
-``literal ``TeX quotes'' & \\backslash`` but not "``" or ``
-
-(however, ``standalone TeX quotes'' will trigger a warning
-and may be problematic)
-
-Find the ```interpreted text``` in this paragraph!
-
-`interpreted`
-:role:`interpreted`
-
-`interpreted` but not \\`interpreted` [`] or ({[`] or [`]}) or `
-
-`interpreted`-text `interpreted`: text `interpreted`:text `text`'s interpreted
-
-http://www.standalone.hyperlink.com
-
-one-slash-only:/absolute.path
-
-mailto:someone@somewhere.com
-
-news:comp.lang.python
-
-An email address in a sentence: someone@somewhere.com.
-
-ftp://ends.with.a.period.
-
-(a.question.mark@end?)
-
-Tables
-------
-
-+-------------------------------------+
-| A table with one cell and one line. |
-+-------------------------------------+
-
-+-----------------------+
-| A malformed table. |
-+-----------------------+
-
-+------------------------+
-| A well-formed | table. |
-+------------------------+
-
-+------------------------+
-| This +----------+ too! |
-+------------------------+
-
-+--------------------------+
-| A table with three rows, |
-+------------+-------------+
-| and two | columns. |
-+------------+-------------+
-| First and last rows |
-| contain column spans. |
-+--------------------------+
-
-+------------+-------------+---------------+
-| A table | two rows in | and row spans |
-| with three +-------------+ to left and |
-| columns, | the middle, | right. |
-+------------+-------------+---------------+
-
-+------------+-------------+---------------+
-| A table | | two rows in | and funny |
-| with 3 +--+-------------+-+ stuff. |
-| columns, | the middle, | | |
-+------------+-------------+---------------+
-
-+-----------+-------------------------+
-| W/NW cell | N/NE cell |
-| +-------------+-----------+
-| | Middle cell | E/SE cell |
-+-----------+-------------+ |
-| S/SE cell | |
-+-------------------------+-----------+
-
-+--------------+-------------+
-| A bad table. | |
-+--------------+ |
-| Cells must be rectangles. |
-+----------------------------+
-
-+-------------------------------+
-| A table with two header rows, |
-+------------+------------------+
-| the first | with a span. |
-+============+==================+
-| Two body | rows, |
-+------------+------------------+
-| the second with a span. |
-+-------------------------------+
-
-+-------------------------------+
-| A table with two head/body |
-+=============+=================+
-| row | separators. |
-+=============+=================+
-| That's bad. | |
-+-------------+-----------------+
-
-The traditional:
-
- +------------------------+------------+----------+----------+
- | Header row, column 1 | Header 2 | Header 3 | Header 4 |
- +========================+============+==========+==========+
- | body row 1, column 1 | column 2 | column 3 | column 4 |
- +------------------------+------------+----------+----------+
- | body row 2 | Cells may span columns. |
- +------------------------+------------+---------------------+
- | body row 3 | Cells may | - Table cells |
- +------------------------+ span rows. | - contain |
- | body row 4 | | - body elements. |
- +------------------------+------------+---------------------+
-
-+-----------------+--------+
-| A simple table | cell 2 |
-+-----------------+--------+
-| cell 3 | cell 4 |
-+-----------------+--------+
-No blank line after table.
-
-+-----------------+--------+
-| A simple table | cell 2 |
-+-----------------+--------+
-| cell 3 | cell 4 |
-+-----------------+--------+
- Unexpected indent and no blank line after table.
-
-+------------------------------+
-| This table contains another. |
-| |
-| +-------------------------+ |
-| | A table within a table. | |
-| +-------------------------+ |
-+------------------------------+
-
-+------------------+--------+
-| A simple table | |
-+------------------+--------+
-| with empty cells | |
-+------------------+--------+
-
-Links and so on
----------------
-.. _target:
-
-(internal hyperlink)
-
-.. _one-liner: http://structuredtext.sourceforge.net
-
-.. _starts-on-this-line: http://
- structuredtext.
- sourceforge.net
-
-.. _entirely-below:
- http://structuredtext.
- sourceforge.net
-
-.. _target1: Not a proper hyperlink target
-
-.. _a long target name:
-
-.. _`a target name: including a colon (quoted)`:
-
-.. _a target name\: including a colon (escaped):
-
-.. _target2: http://www.python.org/
-
-(indirect external hyperlink)
-
-Duplicate indirect links (different URIs):
-
-.. _target3: first
-
-.. _target3: second
-
-Duplicate indirect links (same URIs):
-
-.. _target4: first
-
-.. _target4: first
-
-Directives
-----------
-.. Attention:: Directives at large.
-
-.. Note:: This is a note.
-
-.. Tip:: 15% if the
- service is good.
-
-- .. WARNING:: Strong prose may provoke extreme mental exertion.
- Reader discretion is strongly advised.
-- .. Error:: Does not compute.
-
-.. Caution::
-
- Don't take any wooden nickels.
-
-.. DANGER:: Mad scientist at work!
-
-.. Important::
- - Wash behind your ears.
- - Clean up your room.
- - Call your mother.
- - Back up your data.
-
-.. image:: images/ball.gif
-
-.. image::
- picture.png
- [height=100 width=200 scale=50]
-
-.. figure:: picture.png
-
- A picture with a caption.
-
-.. figure:: picture.png
-
- A picture with a caption and a legend.
-
- +-----------------------+-----------------------+
- | Symbol | Meaning |
- +=======================+=======================+
- | .. image:: tent.png | Campground |
- +-----------------------+-----------------------+
- | .. image:: waves.png | Lake |
- +-----------------------+-----------------------+
- | .. image:: peak.png | Mountain |
- +-----------------------+-----------------------+
diff --git a/sandbox/tibs/pysource/test/testassign.py b/sandbox/tibs/pysource/test/testassign.py
deleted file mode 100755
index e4d70a356..000000000
--- a/sandbox/tibs/pysource/test/testassign.py
+++ /dev/null
@@ -1,12 +0,0 @@
-class Jim:
-
- def __init__(self):
- a = 1
- a = [2,3]
- a,b = 4,5
- a,b = [6,7]
- a,self.a = 8,9
- a = b = self.a = 10
- a,b = c,d = 11,12
- self.a,self.b = 13,14
- self.a = self.b = 15
diff --git a/sandbox/tibs/pysource/test/testfunc.py b/sandbox/tibs/pysource/test/testfunc.py
deleted file mode 100755
index 4a887b098..000000000
--- a/sandbox/tibs/pysource/test/testfunc.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Stuff needed to make the examples compile...
-class Fred:
- def __getitem__(self,index):
- pass
-a = Fred()
-b = [1,2,3,4]
-d = Fred()
-
-def func1(a,b=1,c='jim',d=None,e=[],f={'a':1,a:1},g=(1,2,3)):
- pass
-
-def func2(a,*args,**kargs):
- pass
-
-def func2a(a,*args):
- pass
-
-def func2b(a,**kargs):
- pass
-
-def func3((a,b,c),d):
- pass
-
-def func4(a=a,b=Fred,c=Fred()):
- pass
-
-def func5(a=[x for x in [1,2,3] if x > 2],
- b=[(x,y) for x in [1,2,3] for y in [3,4,5]]):
- pass
-
-def func6(a=b[1:2],c=d[1,4:6,...,8:9:10],
- e=lambda x: x*2,
- f=lambda x,a=a: func5(x,a)):
- pass
diff --git a/sandbox/tibs/pysource/test/testinterpreted.py b/sandbox/tibs/pysource/test/testinterpreted.py
deleted file mode 100755
index 00eb59311..000000000
--- a/sandbox/tibs/pysource/test/testinterpreted.py
+++ /dev/null
@@ -1,44 +0,0 @@
-"""Test interpreted text
-
-This module (`testinterpreted`) contains one :class:`Fred`
-(and one hopes `Fred` will also work) and a function *and*
-a method called `fred`.
-
-NB: the above sentence *should*, when transformed into HTML
-or some other output format, hopefully, contain text something
-like::
-
- contains one class Fred
-
-i.e., the ``:class:`Fred``` should probably cause the "insertion"
-of the word "class". Or so I think.
-""" #'
-
-__docformat__ = "reST"
-
-class Fred:
- """This class (`Fred`), in :module:`testinterpreted`, contains
- a method `fred`.
- """
-
- jim = None
- """A class value, a default.
- """
-
- def fred(self):
- """This method (`fred`) is in class `Fred`
- """
- fred = 3
- """This name (`fred`) is in :function:`fred` in class `Fred`.
- """
-
-def fred(fred):
- """This function (:function:`fred`) is *not* in class `Fred`.
-
- It has one argument, :parameter:`fred`.
-
- If I just say `fred`, what *should* that resolve to?
- """
- fred.jim = 3
- """We assume that `fred` must be something with a `jim` attribute...
- """
diff --git a/sandbox/tibs/pysource/test/testinterpreted2.py b/sandbox/tibs/pysource/test/testinterpreted2.py
deleted file mode 100755
index 59dac777a..000000000
--- a/sandbox/tibs/pysource/test/testinterpreted2.py
+++ /dev/null
@@ -1,37 +0,0 @@
-"""
-This is the example from David Goodger's DPS document pysource-reader.txt.
-"""
-
-__docformat__ = "restructuredtext"
-
-class Keeper(Storer):
-
- """
- Extend `Storer`. Class attribute `instances` keeps track of
- the number of `Keeper` objects instantiated.
- """
-
- instances = 0
- """How many `Keeper` objects are there?"""
-
- def __init__(self):
- """
- Extend `Storer.__init__()` to keep track of instances.
-
- Keep count in `self.instances` and data in `self.data`.
- """
- Storer.__init__(self)
- self.instances += 1
-
- self.data = []
- """Store data in a list, most recent last."""
-
- def storedata(self, data):
- """
- Extend `Storer.storedata()`; append new `data` to a list
- (in `self.data`).
-
- Use :method:`Keeper.storedata` to store the object's data in
- `Keeper.data`:instance_attribute:.
- """
- self.data = data
diff --git a/sandbox/tibs/pysource/test/testsimp.py b/sandbox/tibs/pysource/test/testsimp.py
deleted file mode 100755
index 7dfeb4202..000000000
--- a/sandbox/tibs/pysource/test/testsimp.py
+++ /dev/null
@@ -1,12 +0,0 @@
-a = 'b'
-class Fred:
- """A *silly* demonstration."""
-
- def __init__(self, b=1, c='jim', d=None, f={'a':1,a:1},
- g=[x for x in [1,2,3] if x > 2]):
- """Initialise ourselves."""
- self.list = g
-
- def __call__(self,a):
- """Call ourselves."""
- pass
diff --git a/sandbox/tibs/pysource/test/testyield.py b/sandbox/tibs/pysource/test/testyield.py
deleted file mode 100755
index e3fd1d2d0..000000000
--- a/sandbox/tibs/pysource/test/testyield.py
+++ /dev/null
@@ -1,8 +0,0 @@
-from __future__ import generators
-from string import lower as lll
-from string import lower as lll, upper as uuu, lower, lower as xxx
-
-def fred():
- a = 1
- yield a
-
diff --git a/sandbox/tibs/pysource/transform.py b/sandbox/tibs/pysource/transform.py
deleted file mode 100755
index f93f17ed4..000000000
--- a/sandbox/tibs/pysource/transform.py
+++ /dev/null
@@ -1,358 +0,0 @@
-"""Transfer the structure from visit.py into a DOCUTILS node tree.
-
-TODO: ensure that the encoding of individual items makes sense.
-
-This should probably be using David's new mechanisms from the docutils module
-to build the DOCUTILS tree - but they were written after this was coded, and
-I've still to investigate them.
-"""
-
-import string
-
-import docutils.nodes
-import docutils.utils
-
-import visit
-import utils
-import buildtree
-
-__docformat__ = "reST"
-
-
-# ----------------------------------------------------------------------
-class Process:
- """The infrastucture that knows how to produce our DOCUTILS node tree.
- """
-
- def __init__(self, with_groups=1, document=None):
- """Instantiate our transformation to a DOCUTILS tree.
-
- At the moment, whilst we are considering both my own old HTML
- output and also moving towards David Goodger's DOCUTILS HTML output,
- we have the ``with_groups`` argument - if this is false then
- buildtree will not output "group" elements...
- """
- self.current_module = None
- self.dps = buildtree.BuildTree(with_groups=with_groups, root=document)
-
- def __call__(self,thing):
- """Produce a DOCUTILS 'document' node and attach our information to it
- """
- self.dps.start("document")
-
- if thing.__class__ == visit.Package:
- self.add_package(thing)
- elif thing.__class__ == visit.Module:
- self.add_module(thing)
- else:
- raise ValueError,"Argument must be a Package or Module,"\
- " not a %s"%thing.__class__.__name__
-
- self.dps.end("document")
- document = self.dps.finish()
-
- # David's HTML writer requires the document to have a "source"
- # attribute - so add a temporary one (something better should
- # be done later on - see what David does!)
- document["source"] = "pysource"
- return document
-
- def add_package(self,thing):
- """Process a package and produce DOCUTILS nodes for it.
- """
-
- self.dps.start("section",style="package")
- self.dps.add("target",name=thing.label())
- self.dps.add("title",self.title(thing))
-
- self.dps.start("group",style="details")
- self.dps.add("paragraph","Path: "+thing.directory)
- self.dps.end("group")
-
- for mod in thing.getModules():
- self.add_module(mod)
-
- self.dps.end("section")
-
- def add_module(self,thing):
- """Process a module and produce DOCUTILS nodes for it.
- """
-
- self.current_module = thing
-
- self.dps.add("target",name=thing.label())
- self.dps.start("section",style="module")
- self.dps.add("title",self.title(thing))
-
- self.dps.start("group",style="details")
- self.dps.start("paragraph","Full name: ")
- self.dps.add("emphasis",thing.fullname)
- self.dps.end("paragraph")
- self.dps.add("paragraph","Path: "+thing.filename)
- self.dps.end("group")
-
- self.add_generic(thing)
-
- obscure = thing.getObscureGlobals()
- if obscure:
- self.dps.start("group",style="obscure_globals")
- self.dps.start("paragraph")
- self.dps.add("strong","Globals in obscure places")
- self.dps.start("bullet_list")
-
- for name,places in thing.getObscureGlobals():
- self.dps.start("list_item")
- self.dps.start("paragraph")
- self.dps.add("literal",name)
- self.dps.add("text"," defined and used in")
- if len(places) == 1:
- self.dps.add("text"," ")
- self.dps.add("literal",places[0])
- else:
- self.dps.add("text",":")
- self.dps.start("bullet_list")
- for place in places:
- self.dps.add("list_item",
- self.dps.make("literal",place))
- self.dps.end("bullet_list")
- self.dps.end("list_item")
- self.dps.end("bullet_list")
- self.dps.end("group")
-
- self.dps.end("section")
-
- def add_generic(self,thing):
- """Basic stuff, common to just about all things
- """
-
- # Side effects, all is side effects...
- self.add_docstring(thing)
- self.add_imports(thing)
- self.add_attributes(thing)
- self.add_classes(thing)
- self.add_functions(thing)
-
- def add_docstring(self,thing):
- is_function = (thing.__class__ in [visit.Method,visit.Function])
-
- if not thing.docstring and not is_function:
- return
-
- self.dps.start("group",style="docstring")
-
- if is_function:
- args = thing.getArgs()
- self.dps.start("paragraph")
- # Make the function/method name easily findable...
- self.dps.start("literal",style="funcall")
- self.dps.add("text",thing.name)
- self.dps.end("literal")
- # And then we have the arguments...
- self.dps.add("target",name=thing.args_label())
- self.dps.start("literal",style="funargs")
- self.dps.add("text","(%s)"%string.join(args,", "))
- self.dps.end("literal")
- self.dps.end("paragraph")
-
- if thing.docstring:
- # Insert the docstring into our tree structure
- thing.docstring.add_to_DPS(self.dps)
-
- self.dps.end("group")
-
- # #############################################################
- # Should we sort things alphabetically within each list, below?
- # - maybe yes for some, but no for others...
- # #############################################################
-
- def add_imports(self,thing):
- """Work out a description of any imports.
-
- `thing` is the visitor node that we are to use to construct
- DOCUTILS nodes.
- """
-
- imports = thing.getImports()
- froms = thing.getFromImports()
-
- if not imports and not froms:
- return
-
- self.dps.add("target",name=thing.label())
- self.dps.start("group",style="imports")
- self.dps.start("paragraph")
- self.dps.add("strong","Imports:")
- self.dps.start("bullet_list")
-
- if imports:
- names = imports.keys()
- names.sort()
- for name in names:
- self.dps.start("list_item")
- self.dps.start("paragraph","import ")
- self._add_import(name,imports)
- self.dps.end("list_item")
-
- if froms:
- #print froms
- modnames = froms.keys()
- modnames.sort()
- for modname in modnames:
- self.dps.start("list_item")
- self.dps.start("paragraph","from ")
- self.dps.add("literal",modname)
- self.dps.add("text"," import ")
- dict = froms[modname]
- names = dict.keys()
- names.sort()
- uselist = len(names) > 1
- if uselist:
- self.dps.start("bullet_list")
- for name in names:
- if uselist:
- self.dps.start("list_item")
- self._add_import(name,dict)
- self.dps.end("list_item")
- else:
- self._add_import(name,dict)
- if uselist:
- self.dps.end("bullet_list")
- self.dps.end("list_item")
-
- self.dps.end("bullet_list")
- self.dps.end("group")
-
- def _add_import(self,name,import_dict):
- self.dps.add("literal",name)
- aslist = import_dict[name]
- if len(aslist) == 1 and aslist[0] == None:
- self.dps.add("text"," (as ");
- self.dps.add("emphasis","itself");
- self.dps.add("text",")");
- else:
- self._add_aslist(aslist)
-
- def _add_aslist(self,aslist):
- self.dps.add("text"," as ")
- another = 0
- for name in aslist:
- if another:
- self.dps.add("text",", ")
- else:
- another = 1
- if name is None:
- self.dps.add("emphasis","itself")
- else:
- self.dps.add("literal",name)
-
- def add_attributes(self,thing):
- attributes = thing.getAttributeNames()
- if not attributes:
- return
-
- # We don't do attributes for functions, or for methods that are
- # not called "__init__" or "__new__" (the DOCUTILS spec doesn't require
- # retention of attributes in "__new__" methods, but it seems sensible
- # to me, and I'm not sure they were around when the DOCUTILS spec was
- # first written...)
- if thing.__class__ == visit.Function:
- return
- if thing.__class__ == visit.Method and \
- thing.name not in ("__init__","__new__"):
- return
-
- self.dps.start("group",style="attributes")
- self.dps.start("paragraph")
- self.dps.add("strong","Attributes:")
- self.dps.start("bullet_list")
-
- for name in attributes:
- self.dps.start("list_item")
- nameinst = thing.getAttribute(name)
- self.dps.start("paragraph")
- self.dps.add("target",name=nameinst.label())
- self.dps.add("literal",nameinst.getAsString())
- if nameinst.isGlobal():
- self.dps.add("text"," ")
- self.dps.add("emphasis","(global)")
- if nameinst.__class__ == visit.InstanceValue and \
- nameinst.see_also:
- self.dps.add("text"," - see also class instance ")
- self.dps.add("a",nameinst.our_class.name,
- href="#"+nameinst.our_class.label())
- self.add_docstring(nameinst)
- self.dps.end("list_item")
-
- self.dps.end("bullet_list")
- self.dps.end("group")
-
- def add_classes(self,thing):
- class_names = thing.getClassNames()
- for name in class_names:
- class_instance = thing.getClass(name)
- self.add_class(class_instance)
-
- def add_class(self,thing):
- """Process a class and produce DOCUTILS nodes for it.
- """
-
- self.dps.add("target",name=thing.label())
- self.dps.start("section",style="class")
- self.dps.add("title",self.title(thing))
-
- self.dps.start("group",style="details")
- self.dps.start("paragraph","Full name: ")
- self.dps.add("emphasis",thing.fullname)
-
- names = thing.getBaseNames()
- if names:
- self.dps.start("paragraph","Inherits from: ")
- done_one = 0
- for name in names:
- if done_one:
- self.dps.add("text",", ")
- else:
- done_one = 1
- self.dps.add("literal",name)
- self.dps.end("group")
-
- self.add_generic(thing)
- self.dps.end("section")
-
- def add_functions(self,thing):
- """Add information about any functions or methods.
- """
-
- func_names = thing.getFunctionNames()
- for name in func_names:
- fun_instance = thing.getFunction(name)
- self.add_function(fun_instance)
-
- def add_function(self,thing):
- """Process a function or method and produce DOCUTILS nodes for it.
- """
-
- if thing.__class__ == visit.Method:
- style = "method"
- else:
- style = "function"
- self.dps.add("target",name=thing.label())
- self.dps.start("section",style=style)
- self.dps.add("title",self.title(thing))
-
- self.dps.start("group",style="details")
- self.dps.start("paragraph","Full name: ")
- self.dps.add("emphasis",thing.fullname)
- self.dps.end("group")
-
- if thing.generator:
- self.dps.start("group",style="generator")
- self.dps.add("paragraph","%s %s is actually a generator"%\
- (thing.__class__.__name__,thing.name))
- self.dps.end("group")
-
- self.add_generic(thing)
- self.dps.end("section")
-
- def title(self,thing):
- return "%s %s"%(thing.__class__.__name__,thing.name)
diff --git a/sandbox/tibs/pysource/utils.py b/sandbox/tibs/pysource/utils.py
deleted file mode 100755
index 8823c9265..000000000
--- a/sandbox/tibs/pysource/utils.py
+++ /dev/null
@@ -1,474 +0,0 @@
-"""Utilities for pysource
-"""
-
-import types
-import string
-import compiler
-
-# We'd better have at least *one* module in this package that demonstrates
-# *not* using reST for our docstrings...
-__docformat__ = "none"
-
-
-# ----------------------------------------------------------------------
-PLAINTEXT = "plaintext"
-RESTRUCTUREDTEXT = "restructuredtext"
-
-canonical_format = { "plaintext" : PLAINTEXT,
- "plain" : PLAINTEXT,
- "none" : PLAINTEXT,
- "rst" : RESTRUCTUREDTEXT,
- "rest" : RESTRUCTUREDTEXT,
- "rtxt" : RESTRUCTUREDTEXT,
- "restructuredtext" : RESTRUCTUREDTEXT,
- }
-
-def docformat(text):
- """Interpret a module's __docformat__ string.
-
- Returns a tuple of (format,language)
- """
- if text == None:
- return PLAINTEXT,"en"
-
- words = string.split(string.lower(text))
-
- #print words
-
- if len(words) == 0:
- return PLAINTEXT,"en"
- elif len(words) > 2:
- raise ValueError,"__docformat__ may be at most two 'words'"
-
- if len(words) == 2:
- language = string.lower(words[1])
- else:
- language = "en"
-
- try:
- format = canonical_format[string.lower(words[0])]
- except KeyError:
- legal = canonical_format.keys()
- legal.sort()
- raise ValueError,"__docformat__ should be one of %s"%legal
-
- return format,language
-
-
-# ----------------------------------------------------------------------
-def flatten(item):
- """Retrieve some simpler representation of our AST.
-
- (and it's not meant to be 'theoretically' wonderful, just something
- I can look at to work out how an AST works...)
- """
- if isinstance(item,compiler.ast.Node):
- things = [item.__class__.__name__]
- children = item.getChildren()
- for child in children:
- things.append(flatten(child))
- return things
- else:
- return [item]
-
-
-# ----------------------------------------------------------------------
-def treeprint(stream,item,indent=0):
- """Simple pretty printer for the AST."""
- if isinstance(item,compiler.ast.Node):
- stream.write("\n%s<%s>"%(" "*indent,item.__class__.__name__))
-
- children = item.getChildren()
- for child in children:
- treeprint(stream,child,indent+2)
-
- # Fake our docstring as a sub-node (it's *really* more an attribute)
- if hasattr(item,"docstring"):
- stream.write("\n%s <docstring> %s"%(" "*indent,item.docstring))
-
- # And ditto for a remembered assignment expression
- if hasattr(item,"assign_expr"):
- stream.write("\n%s <assign_expr>"%(" "*indent))
- treeprint(stream,item.assign_expr,indent+4)
- else:
- stream.write(" ")
- stream.write(`item`)
-
-
-# ----------------------------------------------------------------------
-def find_attr_docs(tree,verbose=0):
- """Find candidates for documented attributes
-
- Note that after this, it may be that the AST will not garbage collect
- its own nodes properly anymore, as we are adding in cross-linkages.
- """
-
- if not isinstance(tree,compiler.ast.Node):
- return
-
- children = tree.getChildren()
-
- # Might as well get our recursion done with first...
- for child in children:
- find_attr_docs(child,verbose)
-
- # I believe that only Stmt nodes can have Assign and Discard
- # nodes as children
- if not isinstance(tree,compiler.ast.Stmt):
- return
-
- if len(children) == 0:
- return
-
- pairs = []
- last = children[0]
- for item in children[1:]:
- pairs.append((last,item))
- last = item
-
- for this,next in pairs:
- if isinstance(this,compiler.ast.Assign) and \
- isinstance(next,compiler.ast.Discard):
- if verbose:
- print
- print
- print "*** Attribute docstring candidate"
- treeprint(this,4)
- treeprint(next,4)
- print
-
- nextexpr = next.expr
- if isinstance(nextexpr,compiler.ast.Const):
- if type(nextexpr.value) == types.StringType:
- docstring = nextexpr.value
- else:
- if verbose:
- print
- print "... Discarded constant is not a string"
- continue
- else:
- if verbose:
- print
- print "... Discarded expression is not a constant"
- continue
-
- # If there is more than one assignment attached to
- # the <Assign> node, we are not interested
- if len(this.nodes) > 1:
- if verbose:
- print
- print "... (but there are too many assignments in the <Assign>)"
- continue
-
- target = this.nodes[0]
- if isinstance(target,compiler.ast.AssName):
- # Let's be cheeky and glue the docstring on...
- target.docstring = docstring
- elif isinstance(target,compiler.ast.AssAttr):
- # Let's be cheeky and glue the docstring on...
- target.docstring = docstring
- else:
- if verbose:
- print
- print "... (but the assignment is to a tuple/list/etc.)"
- continue
-
- if verbose:
- print
- print "Becomes:"
- treeprint(this,4)
-
-
-# ----------------------------------------------------------------------
-def find_attr_vals(tree,verbose=0):
- """Find attributes whose values we're interested in.
-
- Clearly, when this is working, it could do with being "folded" into
- `find_attr_docs()`.
-
- Note that after this, it may be that the AST will not garbage collect
- its own nodes properly anymore, as we are adding in cross-linkages.
- """
-
- if not isinstance(tree,compiler.ast.Node):
- return
-
- children = tree.getChildren()
-
- # Might as well get our recursion done with first...
- for child in children:
- find_attr_vals(child,verbose)
-
- # I believe that only Stmt nodes can have Assign and Discard
- # nodes as children
- if not isinstance(tree,compiler.ast.Stmt):
- return
-
- for this in children:
- if isinstance(this,compiler.ast.Assign):
- if verbose:
- print
- print
- print "*** Assignment - name/value candidate"
- treeprint(this,4)
- print
-
- # If there is more than one assignment attached to
- # the <Assign> node, we are not interested
- if len(this.nodes) > 1:
- if verbose:
- print
- print "... (but there are too many assignments in the <Assign>)"
- continue
-
- target = this.nodes[0]
- if isinstance(target,compiler.ast.AssName) or \
- isinstance(target,compiler.ast.AssAttr):
- # Let's be cheeky and glue the associated expression on...
- target.assign_expr = this.expr
- else:
- if verbose:
- print
- print "... (but the assignment is to a tuple/list/etc.)"
- continue
-
- if verbose:
- print
- print "Becomes:"
- treeprint(this,4)
-
-
-# ----------------------------------------------------------------------
-def stringify_arg(thing):
- """Return a string representation of a function argument.
-
- This just works for tuples of (strings or tuples (of strings ...) ...)
- """
- if type(thing) == types.StringType:
- return thing
- elif type(thing) == types.TupleType:
- innards = []
- for item in thing:
- innards.append(stringify_arg(item))
- return "(" + string.join(innards,",") + ")"
- else:
- raise ValueError,"Tried to stringify type %s"%type(thing)
-
-
-# ----------------------------------------------------------------------
-def merge_args(args,defaults):
- """Merge together arguments and defaults from an argument list.
-
- Returns a list of argument strings.
- """
- if args == None:
- return []
-
- if defaults == None:
- defaults = []
-
- # This is horrible - do it nicely later on!
- argstrs = []
- for item in args:
- argstrs.append(stringify_arg(item))
-
- pos = len(args) - len(defaults)
- next = 0
- for index in range(pos,len(args)):
- thing = defaults[next]
- thing = stringify_expr(thing)
- argstrs[index] = "%s=%s"%(argstrs[index],thing)
- next = next + 1
- return argstrs
-
-
-# ----------------------------------------------------------------------
-def stringify_expr(thing):
- """Return a very simple string representation of an expression node
-
- Specifically, this function aims to support stringifying things
- which can be on the RHS of an assignment - is that *actually* the
- same as stringifying expression nodes?
- """
-
- # Humph - saving typing may be a good thing...
- strify = stringify_expr
-
- #print thing.__class__.__name__
-
- if thing == None:
- return 'None'
- elif isinstance(thing,compiler.ast.Add):
- return strify(thing.left) + " + " + strify(thing.right)
- elif isinstance(thing,compiler.ast.And):
- exprs = []
- for node in thing.nodes:
- exprs.append(strify(node))
- return string.join(exprs," && ")
- elif isinstance(thing,compiler.ast.AssAttr):
- # Attribute as target of assignment
- if thing.flags == compiler.consts.OP_ASSIGN:
- return strify(thing.expr) + "." + thing.attrname
- else:
- raise ValueError,"Unexpected flag %d in %s"%(thing.flags,`thing`)
- elif isinstance(thing,compiler.ast.AssName):
- # Name as target of assignment, but this also means name
- # as target of "in" assignment (e.g., "x in [1,2,3]"),
- # which is why *we're* interested in it (since this can
- # occur in list comprehensions, which can occur as the
- # RHS of assignments)
- if thing.flags == compiler.consts.OP_ASSIGN:
- return thing.name
- else:
- raise ValueError,"Unexpected flag %d in %s"%(thing.flags,`thing`)
- elif isinstance(thing,compiler.ast.Backquote):
- return "`" + strify(thing.expr) + "`"
- elif isinstance(thing,compiler.ast.Bitand):
- exprs = []
- for node in thing.nodes:
- exprs.append(strify(node))
- return string.join(exprs," & ")
- elif isinstance(thing,compiler.ast.Bitor):
- exprs = []
- for node in thing.nodes:
- exprs.append(strify(node))
- return string.join(exprs," | ")
- elif isinstance(thing,compiler.ast.Bitxor):
- exprs = []
- for node in thing.nodes:
- exprs.append(strify(node))
- return string.join(exprs," ^ ")
- elif isinstance(thing,compiler.ast.CallFunc):
- # Yuck - this is getting complicated!
- # (for an example, see method `hyperlink_target` in
- # restructuredtext/states.py)
- str = strify(thing.node) + "("
- arglist = []
- if thing.args:
- for arg in thing.args:
- arglist.append(strify(arg))
- if thing.star_args:
- arglist.append("*"+strify(thing.star_args))
- if thing.dstar_args:
- arglist.append("**"+strify(thing.dstar_args))
- if arglist:
- str += string.join(arglist,", ")
- return str+")"
- elif isinstance(thing,compiler.ast.Compare):
- str = strify(thing.expr) + " "
- for op,val in thing.ops:
- str += op + " " + strify(val)
- return str
- elif isinstance(thing,compiler.ast.Const):
- # Try not to let long strings take up too much room...
- value = thing.value
- if type(value) == type("") and len(value) > 50:
- value = value[:47] + "..."
- # Make Python decide for us if it needs quotes round it
- # (and, if so, what sort)
- return `value`
- elif isinstance(thing,compiler.ast.Dict):
- innards = []
- for key,val in thing.items:
- key = strify(key)
- val = strify(val)
- innards.append(key+":"+val)
- return "{" + string.join(innards,", ") + "}"
- elif isinstance(thing,compiler.ast.Div):
- return strify(thing.left) + " / " + strify(thing.right)
- elif isinstance(thing,compiler.ast.Ellipsis):
- return "..."
- elif isinstance(thing,compiler.ast.Getattr):
- return strify(thing.expr) + "." + thing.attrname
- elif isinstance(thing,compiler.ast.Invert):
- # Bitwise negation
- return "~" + strify(thing.expr)
- elif isinstance(thing,compiler.ast.Keyword):
- # An 'arg=value' within a function call
- return thing.name + "=" + strify(thing.expr)
- elif isinstance(thing,compiler.ast.Lambda):
- str = "lambda "
- if thing.flags != 0:
- str += " <flag %d> "%thing.flags
- str += string.join(merge_args(thing.argnames,thing.defaults),", ")
- str += ": "
- str += strify(thing.code)
- return str
- elif isinstance(thing,compiler.ast.LeftShift):
- return strify(thing.left) + " << " + strify(thing.right)
- elif isinstance(thing,compiler.ast.List):
- innards = []
- for item in thing.nodes:
- innards.append(strify(item))
- return "[" + string.join(innards,", ") + "]"
- elif isinstance(thing,compiler.ast.ListComp):
- str = "["+strify(thing.expr)
- for node in thing.quals:
- str += " "+strify(node)
- return str+"]"
- elif isinstance(thing,compiler.ast.ListCompFor):
- str = "for "+strify(thing.assign)
- str += " in "+strify(thing.list)
- if thing.ifs:
- for node in thing.ifs:
- str += " "+strify(node)
- return str
- elif isinstance(thing,compiler.ast.ListCompIf):
- return "if "+strify(thing.test)
- elif isinstance(thing,compiler.ast.Mod):
- return strify(thing.left) + "%" + strify(thing.right)
- elif isinstance(thing,compiler.ast.Mul):
- return strify(thing.left) + " * " + strify(thing.right)
- elif isinstance(thing,compiler.ast.Name):
- return thing.name
- elif isinstance(thing,compiler.ast.Not):
- return "not " + strify(thing.expr)
- elif isinstance(thing,compiler.ast.Or):
- exprs = []
- for node in thing.nodes:
- exprs.append(strify(node))
- return string.join(exprs," || ")
- elif isinstance(thing,compiler.ast.Power):
- return strify(thing.left) + " ** " + strify(thing.right)
- elif isinstance(thing,compiler.ast.RightShift):
- return strify(thing.left) + " >> " + strify(thing.right)
- elif isinstance(thing,compiler.ast.Slice):
- if thing.flags != compiler.consts.OP_APPLY:
- raise ValueError,"Unexpected flag %d in %s"%(thing.flags,`thing`)
- return strify(thing.expr) + "[" + \
- strify(thing.lower) + ":" + strify(thing.upper) + "]"
- elif isinstance(thing,compiler.ast.Sliceobj):
- slicelist = []
- for idx in thing.nodes:
- slicelist.append(strify(idx))
- return string.join(slicelist,":")
- elif isinstance(thing,compiler.ast.Sub):
- return strify(thing.left) + " - " + strify(thing.right)
- elif isinstance(thing,compiler.ast.Subscript):
- if thing.flags != compiler.consts.OP_APPLY:
- raise ValueError,"Unexpected flag %d in %s"%(thing.flags,`thing`)
- str = strify(thing.expr) + "["
- sublist = []
- for sub in thing.subs:
- sublist.append(strify(sub))
- return str + string.join(sublist,", ") + "]"
- elif isinstance(thing,compiler.ast.Tuple):
- innards = []
- for item in thing.nodes:
- innards.append(strify(item))
- return "(" + string.join(innards,", ") + ")"
- elif isinstance(thing,compiler.ast.UnaryAdd):
- return "+" + strify(thing.expr)
- elif isinstance(thing,compiler.ast.UnarySub):
- return "-" + strify(thing.expr)
- else:
- return _whatsthis(thing)
-
-def _whatsthis(thing):
- # Wrong, but what else can we do?
- import sys
- print >>sys.stderr,"stringify_expr - don't recognise %s %s"%\
- (thing.__class__.__name__,thing)
- return `thing`
-
-
diff --git a/sandbox/tibs/pysource/visit.py b/sandbox/tibs/pysource/visit.py
deleted file mode 100755
index ec5a2992f..000000000
--- a/sandbox/tibs/pysource/visit.py
+++ /dev/null
@@ -1,2074 +0,0 @@
-#! /usr/bin/env python
-"""Extract information from a Python file (module) for the DOCUTILS
-
-An example of using Jeremy Hylton's compiler module.
-
-Originally based on an example *by* Jeremy Hylton. In the introduction
-to that example, he said:
-
- Here's a trivial example program that extracts some information
- about methods and attributes from a class and its methods.
- I wasn't exhaustive here. I'll get attributes assigned to by
- `self.x` in a method body and I'll get method definitions in
- the class body. I don't deal with obvious things like attributes
- defined at the class level.
-
-I'm expanding it, initially as a bigger example, and also so I get to
-understand how things work!
-
-Note: there should be an example Python file called test.py in the
-same directory as this module - it's meant to be a suitable input
-for testing/learning purposes.
-
-:Author: Tibs <tibs@tibsnjoan.co.uk>
-:Version: Whatever. Oh, 0.4, then
-:Date: 2002-January-18
-
-Aims for DOCUTILS
------------------
-1. Locate all modules, classes, functions, methods and their docstrings.
-2. "Filter" these to leave the ones that DOCUTILS is interested in.
-3. Annotate functions and methods with their arguments.
-4. Locate all assignments which have docstrings.
-5. Similarly "filter" these.
-6. Locate all uses of `global` assignments.
-7. Filter out those which are not obvious from the module level,
- so that the user can be warned about them.
-8. Produce a tree structure suitable for DOCUTILS processing, containing
- the suitable results of the above.
-
-(At least some of) 1, 3 and 4 have already been done.
-
-Still to do
------------
-* *all* sorts of assignment should be visited, so that
- we can tie down the use of globals properly.
-* the option of ignoring _name and __name things should be
- available (should this be the default?)
-* Some consideration should be given to freeing up this mess of things
- when they are all finished with - there are so many interconnections
- that automatic deletion is unlikely to work well
-* other things as they occur to me
-* Finish off InstanceValue (its potential link to the class that defines it)
-
-Names and fullnames
--------------------
-A "name" is taken to be the name as presented in Python code. Note that
-for class instance attribute references (e.g., "self.fred"), the name is
-includes the class reference, dot and attribute name (e.g., "self.fred").
-
-A "fullname" includes the full path to the name as well - that is,
-including all of the elements required to "reach" this item. Thus, for
-instance, a method Fred in class Jim in module Bill would be::
-
- Bill.Jim.Fred
-
-whilst a name A defined within Fred would be::
-
- Bill.Jim.Fred:A
-
-Note that if Fred contains a reference to self.B, then that would (for the
-moment at least) be written as::
-
- Bill.Jim.Fred:self.B
-
-Within an eventual HTML document, such fullnames become anchor and link
-names for nodes. For that purpose, they will be transformed so that they
-do not contain "." or ":", but are still not accidentally confusable with
-legitimate Python names. Thus the last example would be transformed to::
-
- Bill-Jim-Fred--self-B
-
-Note that we also have a "special" label, artificially "generated" - that
-is, there is a single label for all arguments to a function or method,
-which is formed of the label for the function or method, followed by
-*three* hyphens, and then the text "args" - so, for example:
-
- Bill-Jim---args
-
-Special cases
--------------
-Notes on special cases in name resolution:
-
-- obviously I should be taking account of explicit roles.
-
-- if it can't find the name directly via the "scope", it should be looking
- up in the module - so the ScopeMixin needs to provide support for that...
-
-- the module name should be recognised as, in some sense, within the
- module's "parent" - even if there is no such beast.
-
-- that generalises - in general, an object's own name should be visible
- to its docstring, I think - so, for instance::
-
- digit = 3
- '''We store the current digit of pi in `digit`'''
-
- (yes, I know that's poor documentation, but even so)
-
-- <self>.name in a method (where <self> is the first argument to said
- method) should be regarded as being a name in the class containing
- the method, in some sense (but what sense?)
-""" #"
-
-import os
-import sys
-import string
-import compiler
-
-from docutils.parsers.rst import Parser
-
-# Local modules
-import utils
-import visit
-
-__docformat__ = "reST"
-
-
-# ----------------------------------------------------------------------
-def make_Docstring(text, settings):
- """A factory function to handle non-existant docstrings.
- """
- if text:
- return Docstring(text, settings)
- else:
- return None
-
-class Docstring:
- """We use this to represent a docstring, parsed and unparsed.
- """
-
- def __init__(self, text, settings, debug=0):
- """Instantiate a new Docstring from its text.
- """
- self.text = self._trim(text)
- """The text of the docstring.
- """
- self.document = None
- """The result of parsing the docstring, if requested.
- (thus, only non-None if we *are* parsing docstrings in
- the containing module).
- """
- self.settings = settings
- """The docutils settings to apply to new document parsers.
- """
-
- self.debug = debug
-
- def _trim(self,docstring):
- """Trim leading space appropriately from the docstring text.
-
- When the docstring is read from the source file, it is likely
- to have all but the first line indented with respect to the
- first - for example, consider this docstring.
-
- Before it is *used* for anything (e.g., typing it out to be
- read by the user), it is necessary to adjust for this. The
- way to do this is well-defined (???where???).
-
- Returns the adjusted text.
- """
-
- # Remove any confusing tabs - follow the normal Python rules
- # - and split into convenient lines
- lines = string.split(string.expandtabs(docstring),"\n")
-
- # Find significant indentation
- firstline = lines[0]
- if firstline and firstline[0] == " ":
- oldlen = len(firstline)
- firstline = string.lstrip(firstline)
- indent = oldlen - len(firstline)
- else:
- indent = 0
- for line in lines[1:]:
- oldlen = len(line)
- lin = string.lstrip(line)
- if lin:
- indent = oldlen - len(lin)
- break
-
- # And remove it...
- newlines = [firstline]
- for line in lines[1:]:
- oldlen = len(line)
- lin = string.lstrip(line)
- if lin:
- extra = oldlen - len(lin) - indent
- if extra > 0:
- lin = " "*extra + lin
- newlines.append(lin)
-
- # Don't introduce a trailing blank line if they did some
- # variant of the following layout::
- # """Some text
- # """
- if newlines and newlines[-1] == "":
- del newlines[-1]
-
- # And lastly, reassemble it back into text again
- return string.join(newlines,"\n")
-
- def show(self,stream,spaces=""):
- # Not optimised for efficiency...
- lines = string.split(self.text,"\n")
-
- # For the moment, don't try to format it very nicely at all...
- stream.write('%s"""%s\n'%(spaces,lines[0]))
- for line in lines[1:]:
- stream.write(spaces+line+"\n")
- stream.write('%s"""\n'%spaces)
-
- def parse(self,parser):
- """Parse our text with the given parser.
- """
- import docutils
- self.document = docutils.utils.new_document(self.text, self.settings)
- parser.parse(self.text,self.document)
-
- def add_to_DPS(self,dps):
- """Add this docstring content to a DOCUTILS subtree.
-
- Calls the appropriate things from `dps`, which is a
- builtree.BuildTree instance.
- """
- if self.document:
- for child in self.document.children:
- dps.addsubtree(child)
- else:
- dps.start("literal_block")
- dps.add("text",self.text)
- dps.end("literal_block")
-
- # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- # Experimental <interpreted> node code...
- # Copied from transform.py, and not adjusted yet (except superficially
- # and stupidly) for its position in this class.
- # - despite the comments in the docstring, it doesn't *do* anything yet...
-
- def transform_interpreted(self,thing):
- """Deal with <interpreted> nodes in this docstring.
-
- The intent is to find any <interpreted> nodes, try to locate the
- relevant Python value, and insert an appropriate cross-reference.
-
- `thing` is the `Module`, `Class`, `Function`, `Method` or
- `Name` instance to which this docstring is "attached". It
- is used to resolve the <interpreted> names.
- """
- if self.debug:
- print "\n*** Locating <interpreted> items for %s"%thing.fullname
- self.show(sys.stdout," ")
- self.locate_interpreted(self.document,thing)
-
- def locate_interpreted(self,element,thing):
- """Deal with finding "interpreted" nodes in a document subtree.
- """
- for node in element:
- if node.tagname == "#text":
- continue
- elif node.tagname == "interpreted":
- self.treat_interpreted(node,thing)
- else:
- self.locate_interpreted(node,thing)
-
- def treat_interpreted(self,element,thing):
- """Do something interesting with an "interpreted" node.
- """
- if element.has_key("role"):
- role = element["role"]
- else:
- role = None
-
- name = element.astext()
-
- #if role:
- # print "...<interpreted> :%s: %s"%(role,name)
- #else:
- # print "...<interpreted> %s"%name
-
- # Attempt to work out what this <interpreted> item refers to
- target = thing.scope_find_name(name,role=role,indent="...")
- if target:
- element["refname"] = target
-
-
-# ----------------------------------------------------------------------
-class ScopeMixin:
- """Learning about how to represent scope.
-
- The idea of this mixin class is to work out the best way of representing
- scope, so that I can use the results when working out exactly what an
- <interpreted> item in a docstring refers to.
-
- Note that I do not intend (at least, for the moment) to worry about Python
- before 2.2 - i.e., before embedded scope became non-optional. This is
- purely laziness on my part...
- """
-
- scope_debug = 0
-
- def scope_init(self):
- """Call at the end of `__init__` to initilise our experiments
- """
-
- self.scope_module = None
- """Which Module we are in.
- """
-
- self.scope_parent = None
- """The *immediate* parent entity.
- Note that for a method, this will be the class defining it.
-
- (Ultimately, it might be better if this were a weak reference.)
- """
-
- self.scope_encloser = None
- """The innermost enclosing block. Note that for a method,
- this should *not* be the class, but the innermost enclosing
- function/method/module/whatever (whatever?).
- """
-
- self.scope_defines = []
- """A list of the names *defined* by this entity
- (by assignment, definition or whatever).
-
- The list is ordered by last occurrence of the name.
- """
-
- self.scope_fullname = {}
- """The key is the name from `self.scope_defines`, the value is the
- "full" name for the defined value.
- """
-
- self.scope_children = {}
- """A dictionary of the entities defined by this entity.
-
- The keys are the entity name (so correspond to those in
- `self.scope_defines`), and the values are NULL if the entity
- is defined by simple assignment, otherwise the relevant
- "scope" instance (e.g., a Method or Class).
- """
-
- self.scope_globals = []
- """A list of names which are declared global in this scope.
- """
-
- def scope_define_parent(self,parent=None,module=None):
- """Define our parent and encloser.
- """
- self.scope_module = module
- self.scope_parent = parent
- self.scope_encloser = parent
- if isinstance(self,Method):
- while isinstance(self.scope_encloser,Class):
- self.scope_encloser = self.scope_encloser.scope_parent
-
- def scope_define_name(self,name,fullname,child=None):
- """Add a name that is defined in this scope.
-
- - `name` is the obvious name of the name being defined.
- - `fullname` is the "path" to it, starting at the module.
- - `child` is the class representing that name - e.g., a Class
- or Name instance.
-
- Note - remember that functions/methods "define" their arguments...
-
- HOWEVER we are not trying for a general solution to the problem of
- "find the item that is being referred to" - we are just trying to
- provide useful links between <interpreted> items in docstrings and
- those things that they might reasonably be expected to be referring to.
-
- Furthermore, we know that we will not show attributes, docstring or
- not, if they are not
-
- a. At module level (so a ModuleValue)
- b. Within a class (so a ClassValue)
- c. Within a method called __init__ or __new__.
- d. An argument (we always want to know about arguments).
-
- So we discard any attributes that do not match these criteria...
- """
- if self.scope_debug:
- if name in self.scope_defines:
- redef = "(re)"
- else:
- redef = " "
- print "%-15s %-30s %sdefined in %s"%(child.__class__.__name__,
- name,redef,self.name)
-
- # Should we ignore this name?
- if isinstance(child,Name):
- if self.__class__ not in [Package,Module,Class] and \
- not (self.__class__ == Method and
- self.name in ["__init__","__new__"]) and \
- child.__class__ != Argument:
- return
- # Remember to ensure the name is always at the END of the list
- # (even if it was already there)
- if name in self.scope_defines:
- self.scope_defines.remove(name)
- self.scope_defines.append(name)
- self.scope_fullname[name] = fullname
- self.scope_children[name] = child
-
- def scope_define_global(self,name):
- """Indicate that a name is actually global.
-
- Note that it is entirely possible that the name is also present
- in `self.scope_defines` - being global should be remembered as taking
- precedence.
- """
- if self.scope_debug:
- if name in self.scope_defines:
- redef = "(re)"
- else:
- redef = " "
- print "%-10s %-30s %sdefined in %s"%("[Global]",
- name,redef,self.name)
- if name not in self.scope_globals:
- self.scope_globals.append(name)
-
- def scope_get_object(self,name):
- """Return the defined object corresponding to `name`, or None.
- """
- try:
- return self.scope_children[name]
- except:
- return None
-
- def scope_get_type(self,name):
- """Return the "type" of the defined object corresponding to `name`.
- """
- try:
- return self.scope_children[name].__class__.__name__
- except:
- return None
-
- def scope_name_in_self(self,name):
- """Return true if the `name` is defined by ourselves.
- """
- return name in self.scope_defines
-
- def scope_name_in_encloser(self,name):
- """Return true if the `name` is defined by our encloser.
-
- (If we don't *have* an encloser - e.g., we're a module - then
- it obviously returns false.)
- """
- if self.scope_encloser:
- return name in self.scope_encloser.scope_defines
- else:
- return 0
-
- def scope_name_in_module(self,name):
- """Return true if the `name` is defined by our module.
- """
- if self.scope_module:
- return name in self.scope_module.scope_defines
- else:
- return 0
-
- def scope_up_is_module(self):
- """Is our encloser the module?
- """
- return self.scope_module == self.scope_encloser
-
- # We need a dictionary to relate role names to the classes we use
- # A value of None against a key means that we are not attempting
- # to handle this yet.
- roles = {"package" : "Package",
- "module" : "Module",
- "class" : "Class",
- "method" : "Method",
- "function" : "Function",
- "module_attribute" : "ModuleValue",
- "class_attribute" : "ClassValue",
- "instance_attribute": "InstanceValue",
- "variable" : "Name",
- "parameter" : "Argument",
- "type" : None,
- "exception_class" : None,
- "exception" : None,
- "warning_class" : None,
- "warning" : None}
-
- def scope_obj_role_match(self,what,role):
- """Decide if the role (if any) makes sense with respect to `what`.
-
- `what` is the object we thing might be our item of interest,
- and `role` is the role we're looking for, or None if we're not
- particular.
- """
- if role:
- if what.__class__.__name__ == self.roles[role]:
- return 1
- else:
- return 0
- else:
- return 1
-
- def scope_class_role_match(self,class_name,role):
- """Decide if the role (if any) makes sense with respect to `what`.
-
- `what` is the class name of the object we thing might be our item
- of interest, and `role` is the role we're looking for, or None if
- we're not particular.
- """
- if role:
- if class_name == self.roles[role]:
- return 1
- else:
- return 0
- else:
- return 1
-
- def scope_callable_match(self,what,need_callable):
- """Does the callable state of the `what` match our needs? Do we care?
- """
- if need_callable:
- return what.is_callable()
- else:
- return 1
-
- def scope_find_name(self,name,role=None,indent=" "):
- """A first pass at looking up names in scope.
-
- - `name` is the text that the user has enclosed in backquotes,
- to make it interpreted
- - `role`, if given, specifies exactly what sort of name the
- user determines it to be.
-
- This makes no attempt to do anything beyond looking up a
- simple name - it doesn't try to deal with (for instance)
- a "()" at the end of the name, nor does it try to cope
- with dotted names in any clever way.
-
- Returns either the label for the referenced entity (which is
- a translation of its `fullname` into something legal as an
- XML name), or None.
- """
- if name.endswith("()"):
- name = name[:-2]
- need_callable = 1
- else:
- need_callable = 0
-
- if self.scope_debug:
- print indent,
- if role:
- print ":%s:"%role,
-
- # Is it a reference to ourself?
- if name == self.name and \
- self.scope_obj_role_match(self,role) and \
- self.scope_callable_match(self,need_callable):
- if self.scope_debug:
- print "%s '%s' IS %s %s"%\
- (self.__class__.__name__,name,
- self.__class__.__name__,self.name)
- return self.label()
-
- # Is it a reference to one of our children?
- if self.scope_name_in_self(name):
- what = self.scope_get_type(name)
- whom = self.scope_children[name]
- if self.scope_class_role_match(what,role) and \
- self.scope_callable_match(whom,need_callable):
- if self.scope_debug:
- print "%s '%s' found HERE in %s %s"%\
- (what,name,self.__class__.__name__,self.name)
- if whom.__class__ == Argument:
- return self.args_label()
- else:
- return whom.label()
-
- # Is it a reference to one of our encloser's children?
- if self.scope_name_in_encloser(name):
- what = self.scope_encloser.scope_get_type(name)
- whom = self.scope_encloser.scope_children[name]
- if self.scope_class_role_match(what,role) and \
- self.scope_callable_match(whom,need_callable):
- if self.scope_debug:
- print "%s '%s' found UP in %s %s"%\
- (what,name,self.scope_encloser.__class__.__name__,
- self.scope_encloser.name)
- if whom.__class__ == Argument:
- return self.scope_encloser.args_label()
- else:
- return whom.label()
-
- # Is it a reference to our encloser?
- if self.scope_encloser and name == self.scope_encloser.name:
- # I'm not sure about this one - *should* we be able to "see"
- # the name of our encloser? Or is what I'm *really* after
- # the name of the *parent*?
- #
- # Specific instance - consider a method M in class C
- # - should `C` in `M`s docstring refer to class C,
- # even if class C is *not* defined at module level?
- if self.scope_obj_role_match(self.scope_encloser,role) and \
- self.scope_callable_match(self.scope_encloser,need_callable):
- if self.scope_debug:
- print "%s '%s' IS %s %s"%\
- (self.scope_encloser.__class__.__name__,name,
- self.scope_encloser.__class__.__name__,
- self.scope_encloser.name)
- return self.scope_encloser.label()
-
- # Is it a reference to a child of our module?
- if not self.scope_up_is_module() and self.scope_name_in_module(name):
- what = self.scope_module.scope_get_type(name)
- whom = self.scope_module.scope_children[name]
- if self.scope_class_role_match(what,role) and \
- self.scope_callable_match(whom,need_callable):
- if self.scope_debug:
- print "%s '%s' found GLOBAL in %s %s"%\
- (what,name,self.scope_module.__class__.__name__,
- self.scope_module.name)
- # Modules don't have arguments...
- return whom.label()
-
- # Is it a reference to our module itself?
- if name == self.scope_module.name:
- if self.scope_obj_role_match(self.scope_module,role) and \
- not need_callable:
- if self.scope_debug:
- print "%s '%s' IS %s %s"%\
- (self.scope_module.__class__.__name__,name,
- self.scope_module.__class__.__name__,
- self.scope_module.name)
- return self.scope_module.label()
-
- if self.scope_debug:
- print "'%s' not in %s %s"%(name,self.__class__.__name__,self.name),
- if self.scope_encloser:
- print "or %s %s"%(self.scope_encloser.__class__.__name__,
- self.scope_encloser.name),
- if self.scope_up_is_module():
- print
- else:
- print "or %s %s"%(self.scope_module.__class__.__name__,
- self.scope_module.name)
- return None
-
- def scope_show(self,indent=""):
- print "%s%s %s"%(indent,self.__class__.__name__,self.name),
- if self.scope_encloser and self.scope_encloser != self.scope_parent:
- print "<<upscope %s %s>>"%(self.scope_encloser.__class__.__name__,
- self.scope_encloser.name)
- else:
- print
-
- extra_indent = indent+" "
-
- if self.scope_globals:
- print "%sglobals %s"%(extra_indent,self.scope_globals)
-
- for name in self.scope_defines:
- child = self.scope_children[name]
- if child:
- child.scope_show(extra_indent)
-
-
-# ----------------------------------------------------------------------
-class Base(ScopeMixin):
- """A simple base class for common functionality.
- """
-
- verbose = 0
-
- def __init__(self, settings, name, fullname, docstring=None):
- self.settings = settings
- """ The parser settings
- """
-
- self.name = name
- """The name of this scope entity.
- """
-
- self.fullname = fullname
- """The fully qualified name of this entity
- - for instance, for a method `fred` in a class `Jim`
- in a module `bob`, this would be "bob.Jim.fred"
- """
-
- self.docstring = make_Docstring(docstring, settings)
- """The docstring for this scope, or None.
- Note that, at least for the moment, we're only supporting
- one docstring for an entity. This may need to change for
- proper DOCUTILS support (but I [1]_, personally, hope not).
-
- .. [1] "I" being Tibs, at this point, and at this time [2]_.
- .. [2] "This time" being April 2002.
- """
-
- self.imports = {}
- """Import statements within this scope. The key is the
- name of each module being imported, the value is a list
- of the names "as" which the module is imported, with
- `None` meaning "as itself".
- """
-
- self.from_imports = {}
- """From <module> import <names> statements within this
- scope. The key is the <module>, the value a dictionary
- like that used for `self.imports`.
- """
-
- self.classes = {}
- """Classes defined within this scope. The key is the
- class name, the value is the Class instance for this ``class``.
- """
-
- self.functions = {}
- """Functions or methods defined within this scope. The key is the
- function name, the value is the Function or Method instance
- for this ``def``.
- """
-
- self.attributes = {}
- """Attributes assigned to within a scope. The key is the
- attribute name, the value is the Name instance for this ``name``.
- """
-
- self.children = []
- """A list of all of the items contained herein which might
- have, or have children which have, docstrings - i.e., packages,
- modules, classes, functions, methods.
- """
-
- self.class_list = []
- """A list of the class names defined in this scope, in order.
- """
-
- self.function_list = []
- """A list of the function/method names defined in this scope, in order.
- """
-
- self.attribute_list = []
- """A list of the attribute names defined in this scope, in order.
- """
-
- self.globals = {}
- """The names mentioned in global statements within a scope.
- The key is the name, the value doesn't matter.
- """
-
- self.parser = None
- """We may need a reStructuredText parser to handle our docstrings
- - if so, we'll generate one "on demand"."""
-
- def getParser(self):
- """Retrieve a reStructuredText parser, for docstring usage.
- """
- if not self.parser:
- self.parser = Parser()
- return self.parser
-
- def parse_docstrings(self,parser):
- """If we are meant to, parse our docstrings.
- """
- if self.docstring:
- self.docstring.parse(parser)
- for child in self.children:
- child.parse_docstrings(parser)
-
- def is_callable(self):
- """Does it make sense to call an object of this type?
- """
- return 0
-
- def label(self):
- """Return an XML-legal name for this object.
-
- Note that we implicitly assume that all objects have their
- output XML/HTML representation written to the same file
- - i.e., that we do not have to worry about references that
- are anything beyond simple names.
- """
- str = string.replace(self.fullname,".","-")
- str = string.replace(str,":","--")
- return str
-
- def addGlobal(self,name):
- self.globals[name] = name
-
- def addClass(self,klass):
- self.classes[klass.name] = klass
- self.class_list.append(klass.name)
- self.children.append(klass)
-
- def addFunction(self,func):
- self.functions[func.name] = func
- self.function_list.append(func.name)
- self.children.append(func)
-
- def addAttribute(self,name,instance):
- self.attributes[name] = instance
- self.attribute_list.append(name)
- self.children.append(instance)
-
- def addImport(self,names):
- """Remember an import statement.
-
- `names` is a list of ``(name,as)`` tuples, where ``name``
- is the name of the item being imported, and ``as`` is either
- None of else the name "as" which this item is being imported
-
- Note we aren't even *trying* to remember its exact locality.
- """
- for name,as in names:
- if not self.imports.has_key(name):
- self.imports[name] = [as]
- else:
- if as not in self.imports[name]:
- self.imports[name].append(as)
-
- def addFromImport(self,modname,names):
- """Remember a from import statement.
-
- `modname` is the name of the module "from" which things are
- being imported.
-
- `names` is a list of ``(name,as)`` tuples, where ``name``
- is the name of the item being imported, and ``as`` is either
- None of else the name "as" which this item is being imported
-
- Note we aren't even *trying* to remember its exact locality.
- """
- if not self.from_imports.has_key(modname):
- self.from_imports[modname] = {}
-
- dict = self.from_imports[modname]
- for name,as in names:
- if not dict.has_key(name):
- dict[name] = [as]
- else:
- if as not in dict[name]:
- dict[name].append(as)
-
- def isGlobal(self,name):
- return self.globals.has_key(name)
-
- def getClassNames(self):
- return self.class_list
- #return self.classes.keys()
-
- def getClass(self,name):
- return self.classes[name]
-
- def getFunctionNames(self):
- return self.function_list
- #return self.functions.keys()
-
- def getFunction(self,name):
- return self.functions[name]
-
- def getAttributeNames(self):
- return self.attribute_list
- #return self.attributes.keys()
-
- def getAttribute(self,name):
- return self.attributes[name]
-
- def getAttributeDocstring(self,name):
- """Return an attribute docstring, or None
- """
- return self.attributes[name]
-
- def getImports(self):
- """Return our "import"s, but not in any particular order.
- """
- return self.imports
-
- def getFromImports(self):
- """Return our "from ... import"s, but not in any particular order.
- """
- return self.from_imports
-
- def getFromImportNames(self,name):
- return self.from_imports[name]
-
- def getSelf(self):
- """Return the name used for "self". Doesn't do much elsewhere.
-
- (Actually, for a method *or* a function, it returns the name
- of the first argument.)
- """
- return None
-
- def _show_body(self,stream,indent=0):
- spaces = indent*" "
-
- if self.docstring:
- self.docstring.show(stream,spaces+" ")
-
- if self.imports:
- names = self.imports.keys()
- stream.write("%s Import %s\n"%(spaces,string.join(names,", ")))
-
- if self.from_imports:
- modnames = self.from_imports.keys()
- for mod in modnames:
- names = self.from_imports[mod]
- stream.write("%s From %s import %s\n"%\
- (spaces,mod,string.join(names,", ")))
-
- # Should we sort things alphabetically within each list?
-
- if self.verbose:
- globals = self.globals.keys()
- if globals:
- stream.write("%s Global statements\n"%spaces)
- for name in globals:
- stream.write("%s %s\n"%(spaces,name))
-
- attributes = self.attributes.keys()
- if attributes:
- stream.write("%s Attributes\n"%spaces)
- for name in attributes:
- self.attributes[name].show(stream,indent+4)
-
- class_names = self.classes.keys()
- if class_names:
- for name in class_names:
- self.classes[name].show(stream,indent+2)
-
- func_names = self.functions.keys()
- if func_names:
- for name in func_names:
- self.functions[name].show(stream,indent+2)
-
- def show(self,stream,indent=0):
- """Override as necessary."""
- stream.write("%s%s %s\n"%(" "*indent,self.__class__.__name__,
- self.name))
- self._show_body(stream,indent)
-
- # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- # Experimental <interpreted> node code...
- def find_docstrings(self):
- """Find each docstring in our subtree.
- """
- if self.docstring:
- self.docstring.transform_interpreted(self)
- for child in self.children:
- child.find_docstrings()
- # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
-
-# ----------------------------------------------------------------------
-class Package(Base):
- """The representation of a Python package.
-
- Unlike the other children of `Base`, this class actually visits
- its members itself - that is, it is self-constructing.
- """
-
- def __init__(self,settings,directory,parent=None,debug=0):
- """Instantiate a new package.
-
- If this is a "sub" package, then `parent` should be a Package
- instance, within which we may be found...
-
- `settings` will give the parsing settings -- `verbose_parse` will
- cause the generation of a message for each stage of the production
- of our data, and `debug` will give a message for each "entity"
- in the AST that we visit.
- """
-
- self.settings = settings
- self.verbose = settings.verbose_parse
- self.debug = debug
-
- path = os.path.expanduser(directory) # expand "~"
- path = os.path.expandvars(directory) # expand "$fred" or "%fred%"
- path = os.path.abspath(path) # expand to a 'full' path
- path = os.path.normpath(path) # sort out "/fred" versus "/fred/"
- self.directory = path
- """The `directory` is our best guess as to the actual
- path to the package."""
-
- # Take the package name to be the final component
- base,name = os.path.split(path)
- if parent:
- fullname = parent.fullname + "." + name
- Base.__init__(self,settings,name,fullname)
- else:
- # With no parent, our name and fullname are the same.
- Base.__init__(self,settings,name,name)
-
- self.modules = {}
- """Remember the modules (or Python files, really)
- in this package. The key is the module name, the
- value the Module instance for this module.
- """
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope setup
- self.scope_init()
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- self.parse_modules()
-
- def parse_modules(self):
- """Locate our constituent modules and parse them.
- """
- files = os.listdir(self.directory)
-
- if "__init__.py" not in files:
- raise ValueError,\
- "Directory %s does not contain an __init__.py file"%\
- self.directory
-
- # Parsing the __init__.py file may give us further information,
- # such as an __all__ value, which we may later want to use to
- # determine which files to read and parse, and which to ignore
- path = os.path.join(self.directory,"__init__.py")
- self.addModule(Module(self.settings,path,package=self, debug=self.debug))
-
- # But, for the moment, just parse all the Python files...
- for file in files:
- name,ext = os.path.splitext(file)
- if name == "__init__":
- continue
- elif ext in [".py",".pyw"]:
- path = os.path.join(self.directory,file)
- self.addModule(Module(self.settings,path,package=self,
- debug=self.debug))
-
- def addModule(self,mod):
- self.modules[mod.name] = mod
- self.children.append(mod)
-
- def getModuleNames(self):
- return self.modules.keys()
-
- def getModule(self,name):
- return self.modules[name]
-
- def getModules(self):
- """Return a list of Module instances.
- """
- return self.modules.values()
-
- def show(self,stream,indent=0):
- stream.write("%sPackage %s"%(" "*indent,self.name))
- if self.directory:
- stream.write("(in %s)\n"%self.directory)
- else:
- stream.write("\n")
-
- names = self.modules.keys()
- names.sort()
- for name in names:
- self.modules[name].show(stream)
-
- def show_ast(self,stream):
- """Print out a representation of our ASTs.
- """
- names = self.modules.keys()
- names.sort()
- for name in names:
- self.modules[name].show_ast(stream)
-
-
-# ----------------------------------------------------------------------
-class Module(Base):
- """The representation of a Python module.
-
- This class also knows how to *parse* a Python module.
-
- Still known to be missing:
-
- - visitLambda (I shudder)
- - should we also do visitExec?
-
- - visitAssign
- - visitAugAssign
-
- These last two are needed to allow us to link a Name with its value(s).
-
- If attribute docstrings are to be found, then the AST on which we
- act must first have been processed with `find_attr_docs()`.
-
- Note we also need to visit the *other* sorts of assignment, so
- we can update our Module with any globals used therein...
- """
-
- def __init__(self,settings,filename,docstring=None,package=None,debug=0):
- """Instantiate a new module.
-
- If this is a module within a package, then `package` should be
- a Package instance.
-
- `settings` will give the parsing settings -- `verbose_parse` will
- cause the generation of a message for each stage of the production
- of our data, and `debug` will give a message for each "entity"
- in the AST that we visit.
- """
- self.settings = settings
- self.package = package
- self.verbose = settings.verbose_parse
- self.debug = debug
-
- self.docformat,self.language = utils.docformat("plaintext")
-
- filename = os.path.expanduser(filename) # expand "~"
- filename = os.path.expandvars(filename) # expand "$fred" or "%fred%"
- filename = os.path.abspath(filename) # expand to a 'full' path
- filename = os.path.normpath(filename) # and tidy up
- self.filename = filename
- """The `filename` is our best guess as to the actual
- path to the module."""
-
- dir,file = os.path.split(filename)
- name,ext = os.path.splitext(file)
-
- if package:
- fullname = package.fullname + "." + name
- Base.__init__(self,settings, name,fullname,docstring)
- else:
- # Without a package, our name and fullname are the same
- Base.__init__(self,settings, name,name,docstring)
-
- self.ast = None
- """The parse tree, as produced by compiler.
- """
-
- self.globals_used = {}
- """Remember the globals promulgated on this module
- (that is, occurrences of a global statement, associated
- with assignment *to* the named global, within the same
- scope).
-
- The key is the global name, the value a list of
- (scope,superscope) pairs.
- """
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope setup
- self.scope_init()
- self.scope_define_parent(parent=package,module=self)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- # Now, parse ourselves!
- self.parse_module()
-
- # And then perform our "finishing off" operations
- self.determine_docformat()
-
- if self.verbose:
- print >>sys.stderr, \
- " >> docformat: %s, language %s"%(self.docformat,
- self.language)
-
- if self.docformat == utils.RESTRUCTUREDTEXT:
- if self.verbose:
- print >>sys.stderr," .. parsing docstrings in module",\
- self.name
- parser = self.getParser()
- self.parse_docstrings(parser)
- if self.verbose:
- print >>sys.stderr," .. finding <interpreted> nodes"
- self.find_docstrings()
-
- def parse_module(self):
- """Parse ourselves (!)
- """
- if self.verbose: print >>sys.stderr, "*** Parsing file",self.filename
- self.ast = compiler.parseFile(self.filename)
-
- # "Comb" the tree to sort out attribute docstrings
- if self.verbose: print >>sys.stderr, " Locating attribute docstrings"
- utils.find_attr_docs(self.ast)
-
- # And to link names and their values in assignments
- if self.verbose: print >>sys.stderr, " Locating attribute values"
- utils.find_attr_vals(self.ast)
-
- if self.verbose: print >>sys.stderr, " Walking the tree"
- compiler.walk(self.ast,self)
-
- def determine_docformat(self):
- """Call this after reading in the module, before "using" it.
-
- This detects whether there is a module value called __docformat__, and
- if so, inspect its value.
- """
- if self.attributes.has_key("__docformat__"):
- name = self.attributes["__docformat__"]
- try:
- value = name.actualLastValue()
- except ValueError, detail:
- print >>sys.stderr, "Ignoring __docformat__"
- print >>sys.stderr, detail
- return
- self.docformat,self.language = utils.docformat(value)
-
- def addGlobalUsed(self,name,where):
- if self.globals_used.has_key(name):
- self.globals_used[name].append(where)
- else:
- self.globals_used[name] = [where]
-
- def getObscureGlobals(self):
- """Return a list of (name,[fullname]) tuples
- """
- globals = self.globals_used.keys()
- globals.sort()
- attributes = self.attributes.keys()
- obscure = []
- for name in globals:
- if name not in attributes:
- wherelist = self.globals_used[name]
- obscure.append( (name,wherelist) )
- return obscure
-
- # ----------------------------------------------------------------------
- # Extraction code
-
- def _scopes(self,scope,superscope):
- str = ""
- if scope:
- str = str + " in %-8s %-12s"%(scope.__class__.__name__,
- `scope.name`)
- if superscope:
- str = str + " in %-8s %-12s"%(superscope.__class__.__name__,
- `superscope.name`)
- return str
-
- def _report(self,what,name,scope,superscope):
- print >>sys.stderr,\
- "%-8s %-12s"%(what,name) + self._scopes(scope,superscope)
-
- def visitModule(self,node,scope=None,superscope=None):
- """Visit a Module node - heh, this must be us!
-
- We expect `scope` and `superscope` both to be None
- """
- if self.debug:
- self._report("Module",self.filename,scope,superscope)
-
- self.docstring = make_Docstring(node.doc, self.settings)
-
- # Visit our children with ourselves as their scope
- self.visit(node.node,self)
-
- def visitClass(self,node,scope=None,superscope=None):
- """Visit a Class node
-
- `scope` is the scope of this Class, and `superscope` is
- that scope's scope (if any).
-
- We don't yet cope well with things like::
-
- class Fred(docutils.nodes)
-
- - this will need fixing.
- """
- if self.debug:
- self._report("Class",node.name,scope,superscope)
-
- if scope:
- fullname = "%s.%s"%(scope.fullname,node.name)
- else:
- fullname = node.name
-
- # If we were nice, we'd resolve the
- # Getattr(Getattr(Name('docutils'), 'nodes'), '_TextElement')
- # that we get for something like docutils.nodes into something
- # easier to deal with...
- cls = Class(self.settings,node.name,fullname,node.bases,node.doc)
- if scope:
- scope.addClass(cls)
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope work
- if scope:
- cls.scope_define_parent(scope,self)
- scope.scope_define_name(node.name,fullname,cls)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- # Visit our children with ourselves as their scope,
- # and our scope as their superscope
- self.visit(node.code,cls,scope)
-
- def visitFunction(self,node,scope=None,superscope=None):
- """Visit a Function node (nb: this means "function or method")
-
- `scope` is the scope of this Function, and `superscope` is
- that scope's scope (if any).
- """
- if self.debug:
- if isinstance(scope,Class):
- self._report("Method",node.name,scope,superscope)
- else:
- self._report("Function",node.name,scope,superscope)
-
- fullname = "%s.%s"%(scope.fullname,node.name)
-
- if isinstance(scope,Class):
- fun = Method(self.settings,node.name,fullname,
- node.argnames,node.defaults,node.flags,node.doc)
- else:
- fun = Function(self.settings,node.name,fullname,
- node.argnames,node.defaults,node.flags,node.doc)
- scope.addFunction(fun)
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope work
- fun.scope_define_parent(scope,self)
- scope.scope_define_name(node.name,fullname,fun)
- for argname in node.argnames:
- fullname = "%s.%s:%s"%(scope.fullname,node.name,argname)
- name = Argument(self.settings,argname,fullname)
- name.scope_define_parent(fun,self)
- fun.scope_define_name(argname,fullname,name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- # Visit our children with this function as the scope, and
- # our scope as the superscope
- self.visit(node.code,fun,scope)
-
- def visitAssAttr(self,node,scope,superscope=None):
- """Visit an attribute assignment node.
-
- For example::
-
- self.a = 1
-
- Note that this is assignment to a *single* attribute only.
-
- `scope` is the scope of this assignment, and `superscope` is
- that scope's scope (if any).
- """
- if self.debug:
- self._report("attr",node.attrname,scope,superscope)
-
- # An AssAttr contains:
- # .expr - the expression on the LH of the dot
- # .attrname - the attribute name on the RH of the dot
- # .flags
- # We're (to a first approximation) only interested in
- # assignments of the form <self>.<attr>, where "<self>"
- # is whatever name was passed down as the first argument
- # to a containing method.
- if isinstance(node.expr,compiler.ast.Name):
- fullname = "%s:%s.%s"%(scope.fullname,node.expr.name,node.attrname)
- selfname = "%s.%s"%(node.expr.name,node.attrname)
- if node.expr.name == scope.getSelf():
- what = InstanceValue
- else:
- what = Name # hmm, this feels wrong, but I do want to distinguish
-
- if hasattr(node,"docstring"):
- #name = what(node.attrname,fullname,node.expr.name,node.docstring)
- name = what(selfname,fullname,node.expr.name,node.docstring)
- else:
- #name = what(node.attrname,fullname,node.expr.name)
- name = what(selfname,fullname,node.expr.name)
- if hasattr(node,"assign_expr"):
- name.setValue(node.assign_expr)
- scope.addAttribute(selfname,name)
-
- if node.expr.name == scope.getSelf() and scope.__class__ == Class:
- name.set_class(scope)
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # We should do *something* for our experimental scope
- # work at this point - but I guess it would be to add
- # this name to the class that contains the method in
- # which we are - and if we're actually in a *function*
- # which is to be assigned to a class at run-time (for
- # instance), that is a bit difficult (!). So ignore
- # this case for now...
- # OR maybe we should be adding in "fullname" and not
- # "name" each time we add something to the scope.
- name.scope_define_parent(scope,self)
- scope.scope_define_name(selfname,fullname,name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- else:
- # What to do here???
- # - it's presumably something like fred[3].attr, so I guess
- # we don't want to do anything very clever with it, at least
- # for the moment.
-
- print
- print ">>> Unhandled AST node <<<"
- print " visitAssAttr: %s"%(node)
- print " i.e.: %s"%(utils.stringify_expr(node))
- print " location: Module %s, %s %s, %s %s"%\
- (self.scope_module.name,
- scope.__class__.__name__,scope.name,
- superscope.__class__.__name__,superscope.name)
- print
-
- # Hmm - what scope and superscope does the
- # subexpression *really* want...
- # - is there any point (from a DPV point of view)
- # in following down the innards of the expression?
- self.visit(node.expr,scope,superscope)
-
- def visitAssName(self,node,scope=None,superscope=None):
- """Visit a name assignment node.
-
- For example::
-
- a = 1
-
- Note that this is assignment to a *single* name only.
-
- `scope` is the scope of this assignment, and `superscope` is
- that scope's scope (if any).
- """
- if self.debug:
- self._report("name",node.name,scope,superscope)
-
- # For the moment, allow any assignments - later we may restrict
- # this (e.g., to Module, Class, __init__ method)
- if scope:
- fullname = "%s:%s"%(scope.fullname,node.name)
- else:
- fullname = node.name
-
- if scope.__class__ == Module:
- what = ModuleValue
- elif scope.__class__ == Class:
- what = ClassValue
- else:
- what = Name
-
- if hasattr(node,"docstring"):
- name = what(self.settings,node.name,fullname,
- docstring=node.docstring)
- else:
- name = what(self.settings,node.name,fullname)
- if hasattr(node,"assign_expr"):
- name.setValue(node.assign_expr)
- if scope.isGlobal(node.name):
- name.setGlobal()
- scope.addAttribute(node.name,name)
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope work
- if scope:
- name.scope_define_parent(scope,self)
- scope.scope_define_name(node.name,fullname,name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- # Hmm - check whether the name is a global, and if so,
- # tell our Module about it...
- if scope.isGlobal(node.name):
- self.addGlobalUsed(node.name,scope.fullname)
-
- def visitAssTuple(self,node,scope=None,superscope=None):
- """Visit a tuple assignment statement.
-
- For example:
-
- a, b, c = 1, 2, 3
-
- Although we're not directly interested in these for docstring
- purposes, we *may* want to know that a variable has participated
- in one (why?).
- """
- for item in node.nodes:
- self.visit(item,scope,superscope)
-
- def visitAssList(self,node,scope=None,superscope=None):
- """Visit a list assignment statement.
-
- For example:
-
- a, b, c = [1, 2, 3]
-
- Although we're not directly interested in these for docstring
- purposes, we *may* want to know that a variable has participated
- in one (why?).
- """
- for item in node.nodes:
- self.visit(item,scope,superscope)
-
- def visitGlobal(self,node,scope=None,superscope=None):
- """Visit a global statement node
-
- `scope` is the scope of this global, and `superscope` is
- that scope's scope (if any).
- """
- if self.debug:
- for name in node.names:
- self._report("global",name,scope,superscope)
-
- for name in node.names:
- scope.addGlobal(name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope work
- scope.scope_define_global(name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- def visitYield(self,node,scope=None,superscope=None):
- """Visit a yield statement.
-
- The presence of a yield statement within a function indicates
- that it is a generator (well, unless that statement is
- unreachable - but we shall not worry about that, at least
- for the moment!).
-
- `scope` is the scope of this statement, and `superscope` is
- that scope's scope (if any).
- """
- if self.debug:
- self._report("yield",node.value,scope,superscope)
-
- # So tell our scope that it is (probably) a generator
- scope.generator = 1
-
- # There seems little point in visiting our value, but on
- # the other hand, why not
- self.visit(node.value,scope,superscope)
-
-
- def visitImport(self,node,scope=None,superscope=None):
- """Visit an import statement node
-
- `scope` is the scope of this import statement, and
- `superscope` is that scope's scope (if any).
- """
- if self.debug:
- self._report("import","",scope,superscope)
- print >>sys.stderr, "%8s %12s %s"%(" "," ",node.names)
-
- if scope:
- scope.addImport(node.names)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope work
- for item in node.names:
- fullname = scope.fullname + "." + item[0]
- name = ImportName(self.settings,item[0],fullname)
- name.scope_define_parent(scope,self)
- scope.scope_define_name(item[0],fullname,name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- def visitFrom(self,node,scope=None,superscope=None):
- """Visit a from .. import statement node
-
- The rules for `scope` and `superscope` should be identical
- to those for `visitImport()`.
- """
- if self.debug:
- self._report("from",node.modname,scope,superscope)
- print >>sys.stderr, "%8s %12s %s"%(" "," ",node.names)
-
- if scope is not None:
- scope.addFromImport(node.modname,node.names)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope work
- for item in node.names:
- fullname = scope.fullname + "." + item[0]
- name = ImportName(self.settings,item[0],fullname)
- name.scope_define_parent(scope,self)
- scope.scope_define_name(item[0],fullname,name)
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- # ----------------------------------------------------------------------
-
- def _prt(self,stream,indent,name,place):
- stream.write("%sGlobal %-10s in %s\n"%(" "*indent,name,place))
-
- def _and(self,stream,indent,name,place):
- stream.write("%s %-10s and in %s\n"%(" "*indent," "*len(name),
- place))
-
- def _show_odd_globals(self,stream,indent=0):
- """Show which global names are defined and used below module level
-
- Obviously (!) we are only interested in things which are not
- already known to be module level attributes - we want to warn
- the user about things that are defined in non-obvious places.
- """
- obscure = self.getObscureGlobals()
- done_header = 0
- for name,wherelist in obscure:
- if not done_header:
- stream.write("Globals defined *and used* below"
- " the top level:\n")
- done_header = 1
- self._prt(stream,indent+2,name,wherelist[0])
- for place in wherelist[1:]:
- self._and(stream,indent+2,name,place)
-
- def show(self,stream,indent=0):
- stream.write("%sModule %s"%(" "*indent,self.name))
- if self.filename:
- stream.write("(in file %s)\n"%self.filename)
- else:
- stream.write("\n")
- self._show_body(stream,indent)
- self._show_odd_globals(stream,indent)
-
- def show_ast(self,stream):
- """Print out a representation of our AST.
- """
- stream.write("AST for module %s\n"%self.name)
- utils.treeprint(stream,self.ast)
-
-# ----------------------------------------------------------------------
-class Class(Base):
- """The representation of a Python class."""
-
- def __init__(self,settings,name,fullname,bases,docstring):
- Base.__init__(self,settings,name,fullname,docstring)
-
- self.bases = bases or []
- """A list of the base classes for this class."""
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope setup
- self.scope_init()
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- def is_callable(self):
- """Does it make sense to call an object of this type?
-
- NB: it only makes sense to call this *after* the class has
- been parsed!
- """
- return self.functions.has_key("__call__")
-
- def show(self,stream,indent=0):
- basestr = ""
- if self.bases:
- names = self.getBaseNames()
- basestr = "(" + string.join(names,",") + ")"
- stream.write("%sClass %s%s\n"%(" "*indent,self.name,basestr))
- self._show_body(stream,indent)
-
- def getBaseNames(self):
- names = []
- for base in self.bases:
- # Unfortunately, we don't yet cope with base classes
- # like "docutils.nodes" in our visitor...
- # Make the best of it we can, for now
- try:
- names.append(base.name)
- except:
- names.append("???")
- return names
-
- # Is it worth doing this?
- addMethod = Base.addFunction
- getMethodNames = Base.getFunctionNames
-
-
-# ----------------------------------------------------------------------
-class Function(Base):
- """The representation of a Python function (and thus also of a method).
-
- But see also `Method`.
- """
-
- def __init__(self,settings,name,fullname,args,defaults,flags,docstring):
- Base.__init__(self,settings,name,fullname,docstring)
-
- self.args = args
- """The arguments for this function or method."""
-
- self.defaults = defaults
- """The defaults (if any) for the latter arguments.
-
- Note that if there are 4 arguments, and only the last
- 2 have defaults, then this list will be 2 items long.
- """
-
- self.flags = flags
- """Used to indicate \*args and \**kwargs.
- """
-
- self.generator = 0
- """Set to true if this function appears to be a generator
- (i.e., it contains a "yield" statement). Obscure code that
- doesn't actually *reach* the yield statement - for instance::
-
- def fred():
- print "3"
- if 1: return
- yield "2"
-
- will also, incorrectly, be recognised as a generator - tough.
- """
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope setup
- self.scope_init()
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- def is_callable(self):
- """Does it make sense to call an object of this type?
- """
- return 1
-
- def args_label(self):
- """Return the specialised label we use for all of our arguments.
- """
- return self.label() + "---args"
-
- def getArgs(self):
- """Return a representation of our arguments as a list (of strings).
-
- This is then suitable for joining with commas and displaying.
- """
- args = utils.merge_args(self.args,self.defaults)
- if not args:
- return args
-
- # The file compiler/consts.py defines CO_VARARGS=1 and
- # CO_VARKEYWORDS=2.
-
- # The method Transformer.com_arglist() in file compiler/transformer.py
- # handles a function's argument list.
-
- # According to that, if there's a "*args" item, then "flags" gets the
- # CO_VARARGS bit set, and if there's a "**args" item, then "flags" gets
- # the CO_VARKEYWORDS bit set. In either case, we *know* they've got to
- # be the last arguments, so we can count backwards (as we do for
- # default arguments).
-
- if self.flags & compiler.consts.CO_VARKEYWORDS:
- # If it's there, this must always be the last one...
- args[-1] = "**" + args[-1]
-
- if self.flags & compiler.consts.CO_VARARGS:
- # But this one might be last OR last but one
- if self.flags & compiler.consts.CO_VARKEYWORDS:
- args[-2] = "*" + args[-2]
- else:
- args[-1] = "*" + args[-1]
-
- return args
-
- def show(self,stream,indent=0):
- stream.write("%s%s %s(%s)\n"%(" "*indent,self.__class__.__name__,
- self.name,
- string.join(self.getArgs(),", ")))
- self._show_body(stream,indent)
-
- def getSelf(self):
- """For a method, return the name used for "self".
-
- (Actually, for a method *or* a function, return the name of
- the first argument - we need it on functions as well in case
- someone is defining a function later to be assigned to a class
- and used as a method.)
- """
- if len(self.args) > 0:
- return self.args[0]
- else:
- return None
-
-
-# ----------------------------------------------------------------------
-class Method(Function):
- """Just to get the class name right, I'm afraid...
- """
- pass
-
-
-# ----------------------------------------------------------------------
-class Name(ScopeMixin):
- """Information about use of a name in assignment.
-
- STILL UNDER CONSTRUCTION
-
- Test using pysource.py's "--show" option...
-
-
- We are not interested in *all* names, nor in all information
- about them...
-
- (We *could* inherit from Base, but that really brings too much other
- stuff that we don't need with it - and it doesn't *quite* seem worth
- having a mixin class (although the more I work with this, the more
- that seems a wrong decision - maybe next refactor time will change
- things.)
- """
-
- def __init__(self,settings,name,fullname,selfname=None,docstring=None):
- """Instantiate a new Name.
-
- * `settings` -- the settings for the parser
- * `name` -- the name of this, erm, name
- * `fullname` -- the "fully qualified" name - this is the "path" from
- our top-level entity down to this name (e.g., module.class.name)
- * `selfname` -- if this is an instance attribute, the string used
- as the "self" equivalent
- * `docstring` -- the docstring for this name, if any.
- """
-
- self.name = name
- """The name of this, erm, name.
- """
-
- self.fullname = fullname
- """The fully qualified name of this name
- - for instance, for a name `fred` in a class `Jim`
- in a module `bob`, this would be "bob.Jim.fred"
- """
-
- self.docstring = make_Docstring(docstring, settings)
- """The docstring for this name, or None.
- Note that, at least for the moment, we're only supporting
- one docstring for an entity. See the equivalent comment
- in `Base`.
- """
-
- self.firstuse = None
- """Remember the first use of this name - i.e., what is
- assigned to it. The value stored is the AST expression
- assigned to our name.
- """
-
- self.lastuse = None
- """Also remember the last use of this name. The value
- stored is the AST expression, as for firstuse.
- """
-
- self.reused = 0
- """Assume it has not been assigned to more than once.
- If it has, then we can't *really* report on its 'content',
- and `self.firstuse` should be ignored.
- """
-
- self.selfname = selfname
- """If this name is referred to as something like 'self.name'
- then we want to remember the string used as 'self' (since the
- user *might* be using something else). This will be ``None``
- if there is no 'prefix'.
- """
-
- self.isglobal = 0
- """True if this name is global to its module.
- """
-
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Experimental scope setup
- self.scope_init()
- # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- def parse_docstrings(self,parser):
- """If we are meant to, parse our docstrings.
-
- (The oddly plural name is for compatibility with those things
- that inherit from `Base` - another reason for thinking that a
- mixin class may be about due...)
- """
- if self.docstring:
- self.docstring.parse(parser)
-
- # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- # Experimental <interpreted> node code...
- def find_docstrings(self):
- """Find each docstring in our subtree.
-
- (The oddly plural name is for compatibility with those things
- that inherit from `Base` - another reason for thinking that a
- mixin class may be about due...)
- """
- if self.docstring:
- self.docstring.transform_interpreted(self)
- # ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- def is_callable(self):
- """Does it make sense to call an object of this type?
- """
- return 0
-
- def label(self):
- """Return an XML-legal name for this object.
-
- Note that we implicitly assume that all objects have their
- output XML/HTML representation written to the same file
- - i.e., that we do not have to worry about references that
- are anything beyond simple names.
-
- (another duplicate of a method in Base)
- """
- str = string.replace(self.fullname,".","-")
- str = string.replace(str,":","--")
- return str
-
- def setValue(self,expr):
- self.lastuse = expr
- if not self.firstuse:
- self.firstuse = expr
- else:
- self.reused = 1
-
- def setGlobal(self):
- self.isglobal = 1
-
- def isGlobal(self):
- return self.isglobal
-
- def getDocstring(self):
- return self.docstring
-
- def getSelfName(self):
- return self.selfname
-
- def getValueString(self):
- if self.reused or not self.firstuse:
- return None
- else:
- return utils.stringify_expr(self.firstuse)
-
- def getLastValueString(self):
- """Return the stringified value of this name, or None.
- """
- return utils.stringify_expr(self.lastuse)
-
- def actualLastValue(self):
- """Return the actual value assigned to this name.
-
- If the value assigned is a constant, then return it, otherwise
- raise a ValueError (we can't just return NULL because that *is*
- a sensible constant!).
- """
- thing = self.lastuse
- # See utils.stringify_expr() for information on what we think
- # we're doing here...
- if isinstance(thing,compiler.ast.Const):
- return thing.value
- else:
- raise ValueError,"Value assigned to %s is not a constant:\n" \
- "(%s)"%(self.getSelfName(),self.getLastValueString())
-
- def getAsString(self):
- str = self.name
- val = self.getValueString()
- if val:
- str += " = " + val
- return str
-
- def show(self,stream,indent=0):
- """Override as necessary."""
- stream.write("%s%s %s"%(" "*indent,self.__class__.__name__,
- self.getAsString()))
- if self.isglobal:
- stream.write(" (global)\n")
- else:
- stream.write("\n")
- if self.docstring:
- self.docstring.show(stream," "*(indent+2))
-
-
-# ----------------------------------------------------------------------
-class Argument(Name):
- """An argument to a method or function.
-
- This is a separate class just to get the class name right, I'm afraid...
- """
- pass
-
-
-# ----------------------------------------------------------------------
-class ModuleValue(Name):
- """A name defined by assignment at the top level of a module.
-
- This is a separate class just to get the class name right, I'm afraid...
- """
- pass
-
-
-# ----------------------------------------------------------------------
-class ClassValue(Name):
- """A name defined by assignment within a class definition.
-
- This is a separate class just to get the class name right, I'm afraid...
- """
- pass
-
-
-# ----------------------------------------------------------------------
-class InstanceValue(Name):
- """An instance defined by assignment within a method - e.g., self.thing
-
- TO DO: Hmm - I need to actually *implement* the use of `self.our_class`
- and `self.see_also`.
- """
-
- def __init__(self,*args,**kws):
- Name.__init__(self,*args,**kws)
-
- self.our_class = None
- """If we are self.thing in a method, then "self" refers to a class
- (the one enclosing the method!), and this will be a reference to it.
- """
-
- self.see_also = None
- """If the class already defined a `ClassInstance` of this name,
- then we'll ultimately want a reference to that class here, so
- that our output can say "see also class instance XXX".
- """
-
- def set_class(self,klass):
- """Indicate which Class we really belong to.
- """
- self.our_class = klass
-
-
-# ----------------------------------------------------------------------
-class ImportName(Name):
- """A name assigned by "import" or "from ... import"
-
- Should we distinguish these? ((yes))
-
- This is a separate class just to get the class name right, I'm afraid...
-
- NB: we don't yet deal with "import ... as ..."
- """
-
- def is_callable(self):
- """Does it make sense to call an object of this type?
-
- Unfortunately, if it's something imported with "from ... import"
- there is no simple way of knowing - so maybe err on the side of
- assuming so.
-
- ((Note that this is actually a good argument for separating out
- the two sorts of import, since we know *modules* are not callable,
- and "import" just makes modules visible.))
- """
- return 1
-
-
-# ----------------------------------------------------------------------
-def test_parse_module(filename):
- print "Reading file %s"%filename
- return Module(filename,debug=0)
-
-def test_show_ast(thing):
- print
- print "AST"
- print "==="
- thing.show(sys.stdout)
-
-def test_show_scopes(thing):
- print
- print "Scopes"
- print "======"
- thing.scope_show()
-
-def test():
- print "Testing pysource/visit.py"
- if len(sys.argv) <= 1:
- print "Usage: pysource/visit.py <python-file>"
- return
- filename = sys.argv[1]
- thing = test_parse_module(filename)
- test_show_ast(thing)
- test_show_scopes(thing)
-
-if __name__ == "__main__":
- test()
diff --git a/sandbox/wilk/french/docutils.conf b/sandbox/wilk/french/docutils.conf
deleted file mode 100644
index 5ebb1b126..000000000
--- a/sandbox/wilk/french/docutils.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-[options]
-
-language-code: fr
diff --git a/sandbox/wilk/french/quickstart-fr.txt b/sandbox/wilk/french/quickstart-fr.txt
deleted file mode 100644
index d6d0691ce..000000000
--- a/sandbox/wilk/french/quickstart-fr.txt
+++ /dev/null
@@ -1,375 +0,0 @@
-Introduction à ReStructuredText
-===============================
-
-:Auteur: Richard Jones
-:Version: 1.10
-:Traduction: William Dode <wilk *at* flibuste.net>
-
-.. contents::
-
-
-Ce texte contient des liens de la forme "(quickref__)". Ils sont
-relatifs au manuel de référence utilisateur `Quick reStructuredText`_.
-S'ils ne fonctionnent pas, référez vous au document `master quick
-reference`_.
-
-__
-.. _Quick reStructuredText: http://docutils.sourceforge.net/docs/rst/quickref.html
-.. _master quick reference:
- http://docutils.sourceforge.net/docs/rst/quickref.html
-
-
-Structure
----------
-
-Pour commencer, il me semble que "Structured Text" n'est pas tout à fait la
-bonne appellation. Nous devrions plutôt le nommer "Relaxed Text" qui contient
-quelques schémas logiques. Ces schémas sont interprétés par un convertisseur
-HTML pour produire "Very Structured Text" (un texte très structuré) qui pourra
-être utilisé par un navigateur web.
-
-Le schéma le plus simple est le **paragraphe** (quickref__).
-C'est un bloc de texte séparé par des lignes vides (une seule suffit).
-Les paragraphes doivent avoir le même décalage -- c'est à dire des espaces
-à gauche. Ces paragraphes produiront un texte décalé. Par exemple::
-
- Ceci est un paragraphe.
- Très court.
-
- Le texte de ce paragraphe sera décalé,
- généralement utilisé pour des citations.
-
- En voilà un autre
-
-Le résultat donne :
-
- Ceci est un paragraphe.
- Très court.
-
- Le texte de ce paragraphe sera décalé,
- généralement utilisé pour des citations.
-
- En voilà un autre
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#paragraphs
-
-Styles de texte
----------------
-
-(quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#inline-markup
-
-Dans les paragraphes et le corps du texte, nous pouvons utiliser
-des marqueurs pour *italique* avec "``*italique*``" ou **gras**
-avec "``**gras**``".
-
-Si l'on souhaite qu'un texte apparaisse dans une police à chasse
-fixe "````doubles apostrophes inversées````".
-Notez qu'aucun traitement supplémentaire n'est apporté entre deux
-doubles apostrophes inversées -- les astérisques, comme dans "``*``",
-sont donc conservées en l'état.
-
-Si vous souhaitez utiliser un de ces caractères "spéciaux" dans
-le texte, il n'y a généralement pas de problème -- reStructuredText
-est assez malin.
-Par exemple, cet astérisque * est traité correctement. Si vous
-souhaitez par contre \*entourer un texte par des astérisques*
-**sans** qu'il soit en italique, il est nécessaire d'indiquer que
-l'astérisque ne doit pas être interprété. Pour cela il suffit de placer
-une barre oblique inversée juste avant lui, comme ça "``\*``" (quickref__), ou
-en l'entourant de doubles apostrophes inversées (litteral), comme cela ::
-
- ``\*``
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#escaping
-
-Listes
-------
-
-Il y a trois types de listes: **numérotées**, **avec puces** et
-de **définitions**. Dans chaque cas, nous pouvons avoir autant
-de paragraphes, sous-listes, etc. que l'on souhaite, tant que
-le décalage à gauche est aligné sur la première ligne.
-
-Les listes doivent toujours démarrer un nouveau paragraphe
--- c'est à dire qu'il doit y avoir un saut de ligne juste avant.
-
-Listes **numérotées** (par des nombres, lettres, chiffres romains;
-quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#enumerated-lists
-
- En démarrant une ligne avec un numéro ou une lettre suivie d'un
- point ".", une parenthèse droite ")" ou entouré par des parenthèses
- -- comme vous préférez. Toutes ces formes sont reconnues::
-
- 1. nombres
-
- A. Lettres en majuscule
- qui continue sur plusieurs ligne
-
- avec deux paragraphes et tout !
-
- a. lettres minuscules
-
- 3. avec une sous-liste qui démarre à un nombre différent
- 4. faites attention à garder une séquence de nombre correcte !
-
- I. majuscules en chiffres romains
-
- i. minuscules en chiffres romains
-
- (1) des nombres à nouveau
-
- 1) et encore
-
- Le résultat (note : Tous les styles de listes ne sont pas toujours
- supportés par tous les navigateurs, vous ne verrez donc pas forcément
- les effets complets) :
-
- 1. nombres
-
- A. Lettres en majuscule
- qui continue sur plusieurs ligne
-
- avec deux paragraphes et tout !
-
- a. lettres minuscules
-
- 3. avec une sous-liste qui démarre à un nombre différent
- 4. faites attention à garder une séquence de nombre correcte !
-
- I. majuscules en chiffres romains
-
- i. minuscules en chiffres romains
-
- (1) des nombres à nouveau
-
- 1) et encore
-
-Listes **à puces** (quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#bullet-lists
-
- De la même manière que pour les listes numérotées, il faut démarrer
- la première ligne avec une puce -- soit "-", "+" ou "*"::
-
- * une puce "*"
-
- - une sous-liste avec "-"
-
- + à nouveau une sous-liste
-
- - une autre option
-
- Le résultat:
-
- * une puce "*"
-
- - une sous-liste avec "-"
-
- + à nouveau une sous-liste
-
- - une autre option
-
-Les listes de **définitions** (quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#definition-lists
-
- Comme les deux autres, les listes de définitions consistent en un
- terme et la définition de ce terme. Le format est le suivant::
-
- Quoi
- Les listes de définitions associent un terme avec une définition.
-
- *Comment*
- Le terme est une phrase d'une ligne, et la définition est d'un
- ou plusieurs paragraphes ou éléments, décalés par rapport au terme.
- Les lignes vides ne sont pas autorisées entre le terme et la définition.
-
- Le résultat:
-
- Quoi
- Les listes de définitions associent un terme avec une définition.
-
- *Comment*
- Le terme est une phrase d'une ligne, et la définition est d'un
- ou plusieurs paragraphes ou éléments, décalés par rapport au terme.
- Les lignes vides ne sont pas autorisées entre le terme et la définition.
-
-Préformatage
--------------
-(quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#literal-blocks
-
-Pour inclure un texte préformaté sans traitement
-il suffit de terminer le paragraphe par "``::``". Le texte préformaté est
-terminé lorsqu'une ligne retombe au niveau du décalage précédent. Par exemple::
-
- Un exemple::
-
- Espaces, nouvelles lignes, lignes vides, et toutes sortes de marqueurs
- (comme *ceci* ou \cela) sont préservés dans les bloc préformatés.
-
- Regardez ici, je suis descendu d'un niveau.
- (mais pas assez)
-
- Fin de l'exemple
-
-Le résultat:
-
- Un exemple::
-
- Espaces, nouvelles lignes, lignes vides, et toutes sortes de marqueurs
- (comme *ceci* ou \cela) sont préservés dans les bloc préformatés.
-
- Regardez ici, je suis descendu d'un niveau.
- (mais pas assez)
-
- Fin de l'exemple
-
-Notez que si le paragraphe contient seulement "``::``", il est ignoré.
-
- ::
-
- Ceci est un texte préformaté,
- le paragraphe "::" est ignoré.
-
-Sections
---------
-(quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#section-structure
-
-Pour diviser un texte en plusieurs sections, nous utilisons des
-**en-têtes de section**. C'est à dire une seule ligne de texte (d'un
-ou plusieurs mots) avec un ornement : juste en dessous et éventuellement
-dessus aussi, avec des tirets "``-----``", égal "``=====``", tildes
-"``~~~~~``" ou n'importe quel de ces caractères ``= - ` : ' " ~ ^ _ * + # < >``
-qui vous semble convenir. Un ornement simplement en dessous n'a pas la
-même signification qu'un ornement dessus-dessous avec le même caractère.
-Les ornements doivent avoir au moins la taille du texte. Soyez cohérent,
-les ornements identiques sont censés être du même niveau::
-
- Chapitre 1
- ==========
-
- Section 1.1
- -----------
-
- Sous-section 1.1.1
- ~~~~~~~~~~~~~~~~~~
-
- Section 1.2
- -----------
-
- Chapitre 2
- ==========
-
-Le résultat de cette structure, sous la forme pseudo-XML::
-
- <section>
- <title>
- Chapitre 1
- <section>
- <title>
- Section 1.1
- <section>
- <title>
- Sous-section 1.1.1
- <section>
- <title>
- Section 1.2
- <section>
- <title>
- Chapitre 2
-
-(Pseudo-XML utilise une indentation et n'as pas de balises finale. Il
-n'est pas possible de montrer le résultat, comme dans les autres exemples,
-du fait que les sections ne peuvent être utilisées à l'intérieur d'un
-paragraphe décalé. Pour un exemple concret, comparez la structure de
-ce document avec le résultat.)
-
-Notez que les en-têtes de section sont utilisable comme cible de liens,
-simplement en utilisant leur nom. Pour créer un lien sur la section Listes_,
-j'écris "``Listes_``". Si le titre comporte des espaces, il est nécessaire
-d'utiliser les doubles apostrophes inversées "```Styles de texte`_``".
-
-Pour indiquer le titre du document, utilisez un style d'ornement unique
-en début de document. Pour indiquer un sous-titre de document, utilisez
-un autre ornement unique juste après le titre.
-Par exemple::
-
- =================
- Titre du document
- =================
- ----------
- Sous-titre
- ----------
-
- Titre de la section
- ===================
-
- ...
-
-Notez que "Titre du document" et "Titre de la section" utilisent le signe
-égal, mais sont différents et sans relation. Le texte et l'ornement peuvent
-être de la même taille pour des questions d'esthétisme.
-
-
-Images
-------
-(quickref__)
-
-__ http://docutils.sourceforge.net/docs/rst/quickref.html#directives
-
-Pour inclure une image dans votre document, vous devez utiliser la directive__
-``image``.
-Par exemple::
-
- .. image:: images/biohazard.png
-
-Le résultat:
-
-.. image:: images/biohazard.png
-
-La partie ``images/biohazard.png`` indique le chemin d'accès au fichier
-de l'image qui doit apparaître. Il n'y a pas de restriction sur l'image
-(format, taille etc). Si l'image doit apparaître en HTML et que vous
-souhaitez lui ajouter des informations::
-
- .. image:: images/biohazard.png
- :height: 100
- :width: 200
- :scale: 50
- :alt: texte alternatif
-
-Consultez la documentation__ complète de la directive image pour plus d'informations.
-
-__ ../../spec/rst/directives.html
-__ ../../spec/rst/directives.html#images
-
-
-Et ensuite ?
-------------
-
-Cette introduction montre les possibilités les plus courantes de reStructuredText,
-mais il y en a bien d'autres à explorer. Le manuel de référence utilisateur
-'Quick reStructuredText`_ est recommandé pour aller plus loin. Pour les détails complets
-consultez `reStructuredText Markup Specification`_ [#]_.
-
-Les utilisateurs ayant besoin d'aide avec Docutils ou reStructuredText peuvent
-`poster un message`_ sur la liste de diffusion `Docutils-Users mailing list`_.
-Le `Docutils project web site`_ comporte davantage d'informations.
-
-.. [#] Si ce lien relatif ne fonctionne pas, consultez le document principal:
- http://docutils.sourceforge.net/spec/rst/reStructuredText.html.
-
-.. _reStructuredText Markup Specification:
- ../../spec/rst/reStructuredText.html
-.. _poster un message: mailto:docutils-users@lists.sourceforge.net
-.. _Docutils-Users mailing list:
- http://lists.sourceforge.net/lists/listinfo/docutils-users
-.. _Docutils project web site: http://docutils.sourceforge.net/