summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS.txt28
-rw-r--r--CHANGES.txt826
-rw-r--r--MANIFEST.in1
-rw-r--r--Makefile3
-rw-r--r--README.txt18
-rw-r--r--TODO.txt425
-rw-r--r--allcoverage.cmd49
-rw-r--r--allkits.cmd17
-rw-r--r--alltests.cmd40
-rw-r--r--checkeol.py33
-rw-r--r--covcov.ini16
-rw-r--r--coverage/__init__.py6
-rw-r--r--coverage/backward.py31
-rw-r--r--coverage/bytecode.py2
-rw-r--r--coverage/cmdline.py101
-rw-r--r--coverage/collector.py2
-rw-r--r--coverage/config.py95
-rw-r--r--coverage/control.py189
-rw-r--r--coverage/data.py19
-rw-r--r--coverage/execfile.py28
-rw-r--r--coverage/files.py7
-rw-r--r--coverage/html.py32
-rw-r--r--coverage/htmlfiles/coverage_html.js21
-rw-r--r--coverage/htmlfiles/index.html161
-rw-r--r--coverage/htmlfiles/pyfile.html106
-rw-r--r--coverage/htmlfiles/style.css4
-rw-r--r--coverage/misc.py16
-rw-r--r--coverage/parser.py17
-rw-r--r--coverage/phystokens.py3
-rw-r--r--coverage/summary.py2
-rw-r--r--coverage/templite.py8
-rw-r--r--doc/api.rst16
-rw-r--r--doc/branch.rst6
-rw-r--r--doc/changes.rst328
-rw-r--r--doc/cmd.rst7
-rw-r--r--doc/conf.py6
-rw-r--r--doc/config.rst119
-rw-r--r--doc/excluding.rst34
-rw-r--r--doc/faq.rst19
-rw-r--r--doc/index.rst230
-rw-r--r--doc/sample_html/README.txt10
-rw-r--r--doc/sample_html/_ned_py_path.html2967
-rw-r--r--doc/sample_html/cogapp_cogapp.html2887
-rw-r--r--doc/sample_html/cogapp_makefiles.html307
-rw-r--r--doc/sample_html/cogapp_test_cogapp.html7889
-rw-r--r--doc/sample_html/cogapp_whiteutils.html301
-rw-r--r--doc/sample_html/coverage_html.js79
-rw-r--r--doc/sample_html/index.html169
-rw-r--r--doc/sample_html/jquery.tablesorter.min.js2
-rw-r--r--doc/sample_html/style.css92
-rw-r--r--doc/subprocess.rst47
-rw-r--r--howto.txt23
-rw-r--r--lab/cmd-opts.txt83
-rw-r--r--lab/dataflow.txt4
-rw-r--r--mock.py16
-rw-r--r--setup.py6
-rw-r--r--test/backtest.py22
-rw-r--r--test/backunittest.py22
-rw-r--r--test/coverage_coverage.py30
-rw-r--r--test/coveragetest.py134
-rw-r--r--test/farm/annotate/run_multi.py2
-rw-r--r--test/farm/html/gold_a/a.html72
-rw-r--r--test/farm/html/gold_a/index.html129
-rw-r--r--test/farm/html/gold_b_branch/b.html156
-rw-r--r--test/farm/html/gold_b_branch/index.html147
-rw-r--r--test/farm/html/gold_omit_1/index.html99
-rw-r--r--test/farm/html/gold_omit_1/m1.html45
-rw-r--r--test/farm/html/gold_omit_1/m2.html45
-rw-r--r--test/farm/html/gold_omit_1/m3.html45
-rw-r--r--test/farm/html/gold_omit_1/main.html61
-rw-r--r--test/farm/html/gold_omit_2/index.html90
-rw-r--r--test/farm/html/gold_omit_2/m2.html45
-rw-r--r--test/farm/html/gold_omit_2/m3.html45
-rw-r--r--test/farm/html/gold_omit_2/main.html61
-rw-r--r--test/farm/html/gold_omit_3/index.html81
-rw-r--r--test/farm/html/gold_omit_3/m3.html45
-rw-r--r--test/farm/html/gold_omit_3/main.html61
-rw-r--r--test/farm/html/gold_omit_4/index.html90
-rw-r--r--test/farm/html/gold_omit_4/m1.html45
-rw-r--r--test/farm/html/gold_omit_4/m3.html45
-rw-r--r--test/farm/html/gold_omit_4/main.html61
-rw-r--r--test/farm/html/gold_omit_5/index.html81
-rw-r--r--test/farm/html/gold_omit_5/m1.html45
-rw-r--r--test/farm/html/gold_omit_5/main.html61
-rw-r--r--test/farm/html/gold_other/blah_blah_other.html60
-rw-r--r--test/farm/html/gold_other/here.html76
-rw-r--r--test/farm/html/gold_other/index.html147
-rw-r--r--test/farm/html/gold_x_xml/coverage.xml2
-rw-r--r--test/farm/html/run_a_xml_1.py (renamed from test/farm/html/run_x_xml.py)14
-rw-r--r--test/farm/html/run_a_xml_2.py20
-rw-r--r--test/farm/html/run_omit_1.py12
-rw-r--r--test/farm/html/run_omit_2.py12
-rw-r--r--test/farm/html/run_omit_3.py12
-rw-r--r--test/farm/html/run_omit_4.py12
-rw-r--r--test/farm/html/run_omit_5.py12
-rw-r--r--test/farm/html/run_tabbed.py2
-rw-r--r--test/farm/html/src/b.py2
-rw-r--r--test/farm/html/src/coverage.xml20
-rw-r--r--test/farm/html/src/m1.py2
-rw-r--r--test/farm/html/src/m2.py2
-rw-r--r--test/farm/html/src/m3.py2
-rw-r--r--test/farm/html/src/main.py10
-rw-r--r--test/farm/html/src/omit4.ini2
-rw-r--r--test/farm/html/src/omit5.ini8
-rw-r--r--test/farm/html/src/run_a_xml_2.ini3
-rw-r--r--test/farm/html/src/tabbed.py2
-rw-r--r--test/farm/html/src/x.py7
-rw-r--r--test/osinfo.py2
-rw-r--r--test/stress_phystoken.tok (renamed from test/stress_phystoken.txt)7
-rw-r--r--test/stress_phystoken_dos.tok52
-rw-r--r--test/test_api.py66
-rw-r--r--test/test_arcs.py31
-rw-r--r--test/test_cmdline.py159
-rw-r--r--test/test_codeunit.py8
-rw-r--r--test/test_config.py145
-rw-r--r--test/test_coverage.py193
-rw-r--r--test/test_execfile.py12
-rw-r--r--test/test_farm.py23
-rw-r--r--test/test_oddball.py4
-rw-r--r--test/test_phystokens.py5
-rw-r--r--test/test_process.py205
-rw-r--r--test/test_summary.py28
-rw-r--r--test/test_testing.py8
123 files changed, 11982 insertions, 9225 deletions
diff --git a/AUTHORS.txt b/AUTHORS.txt
new file mode 100644
index 0000000..2123fa3
--- /dev/null
+++ b/AUTHORS.txt
@@ -0,0 +1,28 @@
+Coverage.py was originally written by Gareth Rees, and since 2004 has been
+extended and maintained by Ned Batchelder.
+
+Other contributions have been made by:
+
+Chris Adams
+Danek Duvall
+Ross Lawley
+Ben Finney
+Bill Hart
+Christian Heimes
+Detlev Offenbach
+George Song
+David Christian
+Imri Goldberg
+Patrick Mezard
+Edward Loper
+Guillaume Chazarain
+Titus Brown
+Noel O'Boyle
+Catherine Proulx
+Joseph Tate
+Sigve Tjora
+Mark van der Wal
+Geoff Bache
+Martin Fuzzey
+Greg Rogers
+Christoph Zwerschke
diff --git a/CHANGES.txt b/CHANGES.txt
index 02974ad..6a8cf84 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,379 +1,447 @@
-------------------------------
-Change history for Coverage.py
-------------------------------
-
-Version 3.2b4, 1 December 2009
-------------------------------
-
-- Branch coverage improvements:
-
- - The XML report now includes branch information.
-
-- Click-to-sort HTML report columns are now persisted in a cookie. Viewing
- a report will sort it first the way you last had a coverage report sorted.
- Thanks, `Chris Adams`_.
-
-- On Python 3.x, setuptools has been replaced by `Distribute`_.
-
-.. _Distribute: http://packages.python.org/distribute/
-
-
-Version 3.2b3, 23 November 2009
--------------------------------
-
-- Fixed a memory leak in the C tracer that was introduced in 3.2b1.
-
-- Branch coverage improvements:
-
- - Branches to excluded code are ignored.
-
-- The table of contents in the HTML report is now sortable: click the headers
- on any column. Thanks, `Chris Adams`_.
-
-.. _Chris Adams: http://improbable.org/chris/
-
-
-Version 3.2b2, 19 November 2009
--------------------------------
-
-- Branch coverage improvements:
-
- - Classes are no longer incorrectly marked as branches: `issue 32`_.
-
- - "except" clauses with types are no longer incorrectly marked as branches:
- `issue 35`_.
-
-- Fixed some problems syntax coloring sources with line continuations and
- source with tabs: `issue 30`_ and `issue 31`_.
-
-- The --omit option now works much better than before, fixing `issue 14` and
- `issue 33`_. Thanks, Danek Duvall.
-
-.. _issue 14: http://bitbucket.org/ned/coveragepy/issue/14
-.. _issue 30: http://bitbucket.org/ned/coveragepy/issue/30
-.. _issue 31: http://bitbucket.org/ned/coveragepy/issue/31
-.. _issue 32: http://bitbucket.org/ned/coveragepy/issue/32
-.. _issue 33: http://bitbucket.org/ned/coveragepy/issue/33
-.. _issue 35: http://bitbucket.org/ned/coveragepy/issue/35
-
-
-Version 3.2b1, 10 November 2009
--------------------------------
-
-- Branch coverage!
-
-- XML reporting has file paths that let Cobertura find the source code.
-
-- The tracer code has changed, it's a few percent faster.
-
-- Some exceptions reported by the command line interface have been cleaned up
- so that tracebacks inside coverage.py aren't shown. Fixes `issue 23`_.
-
-.. _issue 23: http://bitbucket.org/ned/coveragepy/issue/23
-
-
-Version 3.1, 4 October 2009
----------------------------
-
-- Source code can now be read from eggs. Thanks, Ross Lawley. Fixes
- `issue 25`_.
-
-.. _issue 25: http://bitbucket.org/ned/coveragepy/issue/25
-
-
-Version 3.1b1, 27 September 2009
---------------------------------
-
-- Python 3.1 is now supported.
-
-- Coverage.py has a new command line syntax with sub-commands. This expands
- the possibilities for adding features and options in the future. The old
- syntax is still supported. Try "coverage help" to see the new commands.
- Thanks to Ben Finney for early help.
-
-- Added an experimental "coverage xml" command for producing coverage reports
- in a Cobertura-compatible XML format. Thanks, Bill Hart.
-
-- Added the --timid option to enable a simpler slower trace function that works
- for DecoratorTools projects, including TurboGears. Fixed `issue 12`_ and
- `issue 13`_.
-
-- HTML reports show modules from other directories. Fixed `issue 11`_.
-
-- HTML reports now display syntax-colored Python source.
-
-- Programs that change directory will still write .coverage files in the
- directory where execution started. Fixed `issue 24`_.
-
-- Added a "coverage debug" command for getting diagnostic information about the
- coverage.py installation.
-
-.. _issue 11: http://bitbucket.org/ned/coveragepy/issue/11
-.. _issue 12: http://bitbucket.org/ned/coveragepy/issue/12
-.. _issue 13: http://bitbucket.org/ned/coveragepy/issue/13
-.. _issue 24: http://bitbucket.org/ned/coveragepy/issue/24
-
-
-Version 3.0.1, 7 July 2009
---------------------------
-
-- Removed the recursion limit in the tracer function. Previously, code that
- ran more than 500 frames deep would crash. Fixed `issue 9`.
-
-- Fixed a bizarre problem involving pyexpat, whereby lines following XML parser
- invocations could be overlooked. Fixed `issue 10`.
-
-- On Python 2.3, coverage.py could mis-measure code with exceptions being
- raised. This is now fixed.
-
-- The coverage.py code itself will now not be measured by coverage.py, and no
- coverage modules will be mentioned in the nose --with-cover plug-in. Fixed
- `issue 8`.
-
-- When running source files, coverage.py now opens them in universal newline
- mode just like Python does. This lets it run Windows files on Mac, for
- example.
-
-.. _issue 9: http://bitbucket.org/ned/coveragepy/issue/9
-.. _issue 10: http://bitbucket.org/ned/coveragepy/issue/10
-.. _issue 8: http://bitbucket.org/ned/coveragepy/issue/8
-
-
-Version 3.0, 13 June 2009
--------------------------
-
-- Fixed the way the Python library was ignored. Too much code was being
- excluded the old way.
-
-- Tabs are now properly converted in HTML reports. Previously indentation was
- lost. Fixed `issue 6`.
-
-- Nested modules now get a proper flat_rootname. Thanks, Christian Heimes.
-
-.. _issue 6: http://bitbucket.org/ned/coveragepy/issue/6
-
-
-Version 3.0b3, 16 May 2009
---------------------------
-
-- Added parameters to coverage.__init__ for options that had been set on the
- coverage object itself.
-
-- Added clear_exclude() and get_exclude_list() methods for programmatic
- manipulation of the exclude regexes.
-
-- Added coverage.load() to read previously-saved data from the data file.
-
-- Improved the finding of code files. For example, .pyc files that have been
- installed after compiling are now located correctly. Thanks, Detlev
- Offenbach.
-
-- When using the object API (that is, constructing a coverage() object), data
- is no longer saved automatically on process exit. You can re-enable it with
- the auto_data=True parameter on the coverage() constructor. The module-level
- interface still uses automatic saving.
-
-
-Version 3.0b2, 30 April 2009
-----------------------------
-
-HTML reporting, and continued refactoring.
-
-- HTML reports and annotation of source files: use the new -b (browser) switch.
- Thanks to George Song for code, inspiration and guidance.
-
-- Code in the Python standard library is not measured by default. If you need
- to measure standard library code, use the -L command-line switch during
- execution, or the cover_pylib=True argument to the coverage() constructor.
-
-- Source annotation into a directory (-a -d) behaves differently. The
- annotated files are named with their hierarchy flattened so that same-named
- files from different directories no longer collide. Also, only files in the
- current tree are included.
-
-- coverage.annotate_file is no longer available.
-
-- Programs executed with -x now behave more as they should, for example,
- __file__ has the correct value.
-
-- .coverage data files have a new pickle-based format designed for better
- extensibility.
-
-- Removed the undocumented cache_file argument to coverage.usecache().
-
-
-Version 3.0b1, 7 March 2009
----------------------------
-
-Major overhaul.
-
-- Coverage is now a package rather than a module. Functionality has been split
- into classes.
-
-- The trace function is implemented in C for speed. Coverage runs are now
- much faster. Thanks to David Christian for productive micro-sprints and
- other encouragement.
-
-- Executable lines are identified by reading the line number tables in the
- compiled code, removing a great deal of complicated analysis code.
-
-- Precisely which lines are considered executable has changed in some cases.
- Therefore, your coverage stats may also change slightly.
-
-- The singleton coverage object is only created if the module-level functions
- are used. This maintains the old interface while allowing better
- programmatic use of Coverage.
-
-- The minimum supported Python version is 2.3.
-
-
-Version 2.85, 14 September 2008
--------------------------------
-
-- Add support for finding source files in eggs. Don't check for
- morf's being instances of ModuleType, instead use duck typing so that
- pseudo-modules can participate. Thanks, Imri Goldberg.
-
-- Use os.realpath as part of the fixing of file names so that symlinks won't
- confuse things. Thanks, Patrick Mezard.
-
-
-Version 2.80, 25 May 2008
--------------------------
-
-- Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper.
-
-
-Version 2.78, 30 September 2007
--------------------------------
-
-- Don't try to predict whether a file is Python source based on the extension.
- Extension-less files are often Pythons scripts. Instead, simply parse the file
- and catch the syntax errors. Hat tip to Ben Finney.
-
-
-Version 2.77, 29 July 2007
---------------------------
-
-- Better packaging.
-
-
-Version 2.76, 23 July 2007
---------------------------
-
-- Now Python 2.5 is *really* fully supported: the body of the new with
- statement is counted as executable.
-
-
-Version 2.75, 22 July 2007
---------------------------
-
-- Python 2.5 now fully supported. The method of dealing with multi-line
- statements is now less sensitive to the exact line that Python reports during
- execution. Pass statements are handled specially so that their disappearance
- during execution won't throw off the measurement.
-
-
-Version 2.7, 21 July 2007
--------------------------
-
-- "#pragma: nocover" is excluded by default.
-
-- Properly ignore docstrings and other constant expressions that appear in the
- middle of a function, a problem reported by Tim Leslie.
-
-- coverage.erase() shouldn't clobber the exclude regex. Change how parallel
- mode is invoked, and fix erase() so that it erases the cache when called
- programmatically.
-
-- In reports, ignore code executed from strings, since we can't do anything
- useful with it anyway.
-
-- Better file handling on Linux, thanks Guillaume Chazarain.
-
-- Better shell support on Windows, thanks Noel O'Boyle.
-
-- Python 2.2 support maintained, thanks Catherine Proulx.
-
-- Minor changes to avoid lint warnings.
-
-
-Version 2.6, 23 August 2006
----------------------------
-
-- Applied Joseph Tate's patch for function decorators.
-
-- Applied Sigve Tjora and Mark van der Wal's fixes for argument handling.
-
-- Applied Geoff Bache's parallel mode patch.
-
-- Refactorings to improve testability. Fixes to command-line logic for parallel
- mode and collect.
-
-
-Version 2.5, 4 December 2005
-----------------------------
-
-- Call threading.settrace so that all threads are measured. Thanks Martin
- Fuzzey.
-
-- Add a file argument to report so that reports can be captured to a different
- destination.
-
-- coverage.py can now measure itself.
-
-- Adapted Greg Rogers' patch for using relative file names, and sorting and
- omitting files to report on.
-
-
-Version 2.2, 31 December 2004
------------------------------
-
-- Allow for keyword arguments in the module global functions. Thanks, Allen.
-
-
-Version 2.1, 14 December 2004
------------------------------
-
-- Return 'analysis' to its original behavior and add 'analysis2'. Add a global
- for 'annotate', and factor it, adding 'annotate_file'.
-
-
-Version 2.0, 12 December 2004
------------------------------
-
-Significant code changes.
-
-- Finding executable statements has been rewritten so that docstrings and
- other quirks of Python execution aren't mistakenly identified as missing
- lines.
-
-- Lines can be excluded from consideration, even entire suites of lines.
-
-- The file system cache of covered lines can be disabled programmatically.
-
-- Modernized the code.
-
-
-Earlier History
----------------
-
-2001-12-04 GDR Created.
-
-2001-12-06 GDR Added command-line interface and source code annotation.
-
-2001-12-09 GDR Moved design and interface to separate documents.
-
-2001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and
--x, or -a and -r.
-
-2001-12-12 GDR Added command-line help. Cache analysis so that it only needs to
-be done once when you specify -a and -r.
-
-2001-12-13 GDR Improved speed while recording. Portable between Python 1.5.2
-and 2.1.1.
-
-2002-01-03 GDR Module-level functions work correctly.
-
-2002-01-07 GDR Update sys.path when running a file with the -x option, so that
-it matches the value the program would get if it were run on its own.
+------------------------------
+Change history for Coverage.py
+------------------------------
+
+
+Next version
+------------
+
+- Source files with DOS line endings are now properly tokenized for syntax
+ coloring on non-DOS machines. Fixes `issue 53`_.
+
+.. _issue 53: http://bitbucket.org/ned/coveragepy/issue/53
+
+
+Version 3.3.1, 6 March 2010
+---------------------------
+
+- Using `parallel=True` in .coveragerc file prevented reporting, but now does
+ not, fixing `issue 49`_.
+
+- When running your code with "coverage run", if you call `sys.exit()`,
+ coverage.py will exit with that status code, fixing `issue 50`_.
+
+.. _issue 49: http://bitbucket.org/ned/coveragepy/issue/49
+.. _issue 50: http://bitbucket.org/ned/coveragepy/issue/50
+
+
+Version 3.3, 24 February 2010
+-----------------------------
+
+- Settings are now read from a .coveragerc file. A specific file can be
+ specified on the command line with --rcfile=FILE. The name of the file can
+ be programmatically set with the `config_file` argument to the coverage()
+ constructor, or reading a config file can be disabled with
+ `config_file=False`.
+
+- Fixed a problem with nested loops having their branch possibilities
+ mischaracterized: `issue 39`_.
+
+- Added coverage.process_start to enable coverage measurement when Python
+ starts.
+
+- Parallel data file names now have a random number appended to them in
+ addition to the machine name and process id.
+
+- Parallel data files combined with "coverage combine" are deleted after
+ they're combined, to clean up unneeded files. Fixes `issue 40`_.
+
+- Exceptions thrown from product code run with "coverage run" are now displayed
+ without internal coverage.py frames, so the output is the same as when the
+ code is run without coverage.py.
+
+- The `data_suffix` argument to the coverage constructor is now appended with
+ an added dot rather than simply appended, so that .coveragerc files will not
+ be confused for data files.
+
+- Python source files that don't end with a newline can now be executed, fixing
+ `issue 47`_.
+
+- Added an AUTHORS.txt file.
+
+.. _issue 39: http://bitbucket.org/ned/coveragepy/issue/39
+.. _issue 40: http://bitbucket.org/ned/coveragepy/issue/40
+.. _issue 47: http://bitbucket.org/ned/coveragepy/issue/47
+
+
+Version 3.2, 5 December 2009
+----------------------------
+
+- Added a --version options on the command line.
+
+
+Version 3.2b4, 1 December 2009
+------------------------------
+
+- Branch coverage improvements:
+
+ - The XML report now includes branch information.
+
+- Click-to-sort HTML report columns are now persisted in a cookie. Viewing
+ a report will sort it first the way you last had a coverage report sorted.
+ Thanks, `Chris Adams`_.
+
+- On Python 3.x, setuptools has been replaced by `Distribute`_.
+
+.. _Distribute: http://packages.python.org/distribute/
+
+
+Version 3.2b3, 23 November 2009
+-------------------------------
+
+- Fixed a memory leak in the C tracer that was introduced in 3.2b1.
+
+- Branch coverage improvements:
+
+ - Branches to excluded code are ignored.
+
+- The table of contents in the HTML report is now sortable: click the headers
+ on any column. Thanks, `Chris Adams`_.
+
+.. _Chris Adams: http://improbable.org/chris/
+
+
+Version 3.2b2, 19 November 2009
+-------------------------------
+
+- Branch coverage improvements:
+
+ - Classes are no longer incorrectly marked as branches: `issue 32`_.
+
+ - "except" clauses with types are no longer incorrectly marked as branches:
+ `issue 35`_.
+
+- Fixed some problems syntax coloring sources with line continuations and
+ source with tabs: `issue 30`_ and `issue 31`_.
+
+- The --omit option now works much better than before, fixing `issue 14` and
+ `issue 33`_. Thanks, Danek Duvall.
+
+.. _issue 14: http://bitbucket.org/ned/coveragepy/issue/14
+.. _issue 30: http://bitbucket.org/ned/coveragepy/issue/30
+.. _issue 31: http://bitbucket.org/ned/coveragepy/issue/31
+.. _issue 32: http://bitbucket.org/ned/coveragepy/issue/32
+.. _issue 33: http://bitbucket.org/ned/coveragepy/issue/33
+.. _issue 35: http://bitbucket.org/ned/coveragepy/issue/35
+
+
+Version 3.2b1, 10 November 2009
+-------------------------------
+
+- Branch coverage!
+
+- XML reporting has file paths that let Cobertura find the source code.
+
+- The tracer code has changed, it's a few percent faster.
+
+- Some exceptions reported by the command line interface have been cleaned up
+ so that tracebacks inside coverage.py aren't shown. Fixes `issue 23`_.
+
+.. _issue 23: http://bitbucket.org/ned/coveragepy/issue/23
+
+
+Version 3.1, 4 October 2009
+---------------------------
+
+- Source code can now be read from eggs. Thanks, Ross Lawley. Fixes
+ `issue 25`_.
+
+.. _issue 25: http://bitbucket.org/ned/coveragepy/issue/25
+
+
+Version 3.1b1, 27 September 2009
+--------------------------------
+
+- Python 3.1 is now supported.
+
+- Coverage.py has a new command line syntax with sub-commands. This expands
+ the possibilities for adding features and options in the future. The old
+ syntax is still supported. Try "coverage help" to see the new commands.
+ Thanks to Ben Finney for early help.
+
+- Added an experimental "coverage xml" command for producing coverage reports
+ in a Cobertura-compatible XML format. Thanks, Bill Hart.
+
+- Added the --timid option to enable a simpler slower trace function that works
+ for DecoratorTools projects, including TurboGears. Fixed `issue 12`_ and
+ `issue 13`_.
+
+- HTML reports show modules from other directories. Fixed `issue 11`_.
+
+- HTML reports now display syntax-colored Python source.
+
+- Programs that change directory will still write .coverage files in the
+ directory where execution started. Fixed `issue 24`_.
+
+- Added a "coverage debug" command for getting diagnostic information about the
+ coverage.py installation.
+
+.. _issue 11: http://bitbucket.org/ned/coveragepy/issue/11
+.. _issue 12: http://bitbucket.org/ned/coveragepy/issue/12
+.. _issue 13: http://bitbucket.org/ned/coveragepy/issue/13
+.. _issue 24: http://bitbucket.org/ned/coveragepy/issue/24
+
+
+Version 3.0.1, 7 July 2009
+--------------------------
+
+- Removed the recursion limit in the tracer function. Previously, code that
+ ran more than 500 frames deep would crash. Fixed `issue 9`.
+
+- Fixed a bizarre problem involving pyexpat, whereby lines following XML parser
+ invocations could be overlooked. Fixed `issue 10`.
+
+- On Python 2.3, coverage.py could mis-measure code with exceptions being
+ raised. This is now fixed.
+
+- The coverage.py code itself will now not be measured by coverage.py, and no
+ coverage modules will be mentioned in the nose --with-cover plug-in. Fixed
+ `issue 8`.
+
+- When running source files, coverage.py now opens them in universal newline
+ mode just like Python does. This lets it run Windows files on Mac, for
+ example.
+
+.. _issue 9: http://bitbucket.org/ned/coveragepy/issue/9
+.. _issue 10: http://bitbucket.org/ned/coveragepy/issue/10
+.. _issue 8: http://bitbucket.org/ned/coveragepy/issue/8
+
+
+Version 3.0, 13 June 2009
+-------------------------
+
+- Fixed the way the Python library was ignored. Too much code was being
+ excluded the old way.
+
+- Tabs are now properly converted in HTML reports. Previously indentation was
+ lost. Fixed `issue 6`.
+
+- Nested modules now get a proper flat_rootname. Thanks, Christian Heimes.
+
+.. _issue 6: http://bitbucket.org/ned/coveragepy/issue/6
+
+
+Version 3.0b3, 16 May 2009
+--------------------------
+
+- Added parameters to coverage.__init__ for options that had been set on the
+ coverage object itself.
+
+- Added clear_exclude() and get_exclude_list() methods for programmatic
+ manipulation of the exclude regexes.
+
+- Added coverage.load() to read previously-saved data from the data file.
+
+- Improved the finding of code files. For example, .pyc files that have been
+ installed after compiling are now located correctly. Thanks, Detlev
+ Offenbach.
+
+- When using the object API (that is, constructing a coverage() object), data
+ is no longer saved automatically on process exit. You can re-enable it with
+ the auto_data=True parameter on the coverage() constructor. The module-level
+ interface still uses automatic saving.
+
+
+Version 3.0b2, 30 April 2009
+----------------------------
+
+HTML reporting, and continued refactoring.
+
+- HTML reports and annotation of source files: use the new -b (browser) switch.
+ Thanks to George Song for code, inspiration and guidance.
+
+- Code in the Python standard library is not measured by default. If you need
+ to measure standard library code, use the -L command-line switch during
+ execution, or the cover_pylib=True argument to the coverage() constructor.
+
+- Source annotation into a directory (-a -d) behaves differently. The
+ annotated files are named with their hierarchy flattened so that same-named
+ files from different directories no longer collide. Also, only files in the
+ current tree are included.
+
+- coverage.annotate_file is no longer available.
+
+- Programs executed with -x now behave more as they should, for example,
+ __file__ has the correct value.
+
+- .coverage data files have a new pickle-based format designed for better
+ extensibility.
+
+- Removed the undocumented cache_file argument to coverage.usecache().
+
+
+Version 3.0b1, 7 March 2009
+---------------------------
+
+Major overhaul.
+
+- Coverage is now a package rather than a module. Functionality has been split
+ into classes.
+
+- The trace function is implemented in C for speed. Coverage runs are now
+ much faster. Thanks to David Christian for productive micro-sprints and
+ other encouragement.
+
+- Executable lines are identified by reading the line number tables in the
+ compiled code, removing a great deal of complicated analysis code.
+
+- Precisely which lines are considered executable has changed in some cases.
+ Therefore, your coverage stats may also change slightly.
+
+- The singleton coverage object is only created if the module-level functions
+ are used. This maintains the old interface while allowing better
+ programmatic use of Coverage.
+
+- The minimum supported Python version is 2.3.
+
+
+Version 2.85, 14 September 2008
+-------------------------------
+
+- Add support for finding source files in eggs. Don't check for
+ morf's being instances of ModuleType, instead use duck typing so that
+ pseudo-modules can participate. Thanks, Imri Goldberg.
+
+- Use os.realpath as part of the fixing of file names so that symlinks won't
+ confuse things. Thanks, Patrick Mezard.
+
+
+Version 2.80, 25 May 2008
+-------------------------
+
+- Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper.
+
+
+Version 2.78, 30 September 2007
+-------------------------------
+
+- Don't try to predict whether a file is Python source based on the extension.
+ Extension-less files are often Pythons scripts. Instead, simply parse the file
+ and catch the syntax errors. Hat tip to Ben Finney.
+
+
+Version 2.77, 29 July 2007
+--------------------------
+
+- Better packaging.
+
+
+Version 2.76, 23 July 2007
+--------------------------
+
+- Now Python 2.5 is *really* fully supported: the body of the new with
+ statement is counted as executable.
+
+
+Version 2.75, 22 July 2007
+--------------------------
+
+- Python 2.5 now fully supported. The method of dealing with multi-line
+ statements is now less sensitive to the exact line that Python reports during
+ execution. Pass statements are handled specially so that their disappearance
+ during execution won't throw off the measurement.
+
+
+Version 2.7, 21 July 2007
+-------------------------
+
+- "#pragma: nocover" is excluded by default.
+
+- Properly ignore docstrings and other constant expressions that appear in the
+ middle of a function, a problem reported by Tim Leslie.
+
+- coverage.erase() shouldn't clobber the exclude regex. Change how parallel
+ mode is invoked, and fix erase() so that it erases the cache when called
+ programmatically.
+
+- In reports, ignore code executed from strings, since we can't do anything
+ useful with it anyway.
+
+- Better file handling on Linux, thanks Guillaume Chazarain.
+
+- Better shell support on Windows, thanks Noel O'Boyle.
+
+- Python 2.2 support maintained, thanks Catherine Proulx.
+
+- Minor changes to avoid lint warnings.
+
+
+Version 2.6, 23 August 2006
+---------------------------
+
+- Applied Joseph Tate's patch for function decorators.
+
+- Applied Sigve Tjora and Mark van der Wal's fixes for argument handling.
+
+- Applied Geoff Bache's parallel mode patch.
+
+- Refactorings to improve testability. Fixes to command-line logic for parallel
+ mode and collect.
+
+
+Version 2.5, 4 December 2005
+----------------------------
+
+- Call threading.settrace so that all threads are measured. Thanks Martin
+ Fuzzey.
+
+- Add a file argument to report so that reports can be captured to a different
+ destination.
+
+- coverage.py can now measure itself.
+
+- Adapted Greg Rogers' patch for using relative file names, and sorting and
+ omitting files to report on.
+
+
+Version 2.2, 31 December 2004
+-----------------------------
+
+- Allow for keyword arguments in the module global functions. Thanks, Allen.
+
+
+Version 2.1, 14 December 2004
+-----------------------------
+
+- Return 'analysis' to its original behavior and add 'analysis2'. Add a global
+ for 'annotate', and factor it, adding 'annotate_file'.
+
+
+Version 2.0, 12 December 2004
+-----------------------------
+
+Significant code changes.
+
+- Finding executable statements has been rewritten so that docstrings and
+ other quirks of Python execution aren't mistakenly identified as missing
+ lines.
+
+- Lines can be excluded from consideration, even entire suites of lines.
+
+- The file system cache of covered lines can be disabled programmatically.
+
+- Modernized the code.
+
+
+Earlier History
+---------------
+
+2001-12-04 GDR Created.
+
+2001-12-06 GDR Added command-line interface and source code annotation.
+
+2001-12-09 GDR Moved design and interface to separate documents.
+
+2001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and
+-x, or -a and -r.
+
+2001-12-12 GDR Added command-line help. Cache analysis so that it only needs to
+be done once when you specify -a and -r.
+
+2001-12-13 GDR Improved speed while recording. Portable between Python 1.5.2
+and 2.1.1.
+
+2002-01-03 GDR Module-level functions work correctly.
+
+2002-01-07 GDR Update sys.path when running a file with the -x option, so that
+it matches the value the program would get if it were run on its own.
diff --git a/MANIFEST.in b/MANIFEST.in
index 907d9d0..65a60a0 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -7,4 +7,5 @@ include ez_setup.py
include setup.py
include README.txt
include CHANGES.txt
+include AUTHORS.txt
prune test
diff --git a/Makefile b/Makefile
index 7ae4bf0..cc584c3 100644
--- a/Makefile
+++ b/Makefile
@@ -28,6 +28,9 @@ lint:
python /Python25/Lib/tabnanny.py $(LINTABLE)
python checkeol.py
+pep8:
+ pep8 --filename=*.py --ignore=E401,E301 --repeat coverage
+
testready: testdata devinst
tests: testready
diff --git a/README.txt b/README.txt
index 1dbbf5a..2c6fe3d 100644
--- a/README.txt
+++ b/README.txt
@@ -1,9 +1,9 @@
-Coverage.py: code coverage testing for Python
-
-Coverage.py measures code coverage, typically during test execution. It uses
-the code analysis tools and tracing hooks provided in the Python standard
-library to determine which lines are executable, and which have been executed.
-
-For more information, see http://nedbatchelder.com/code/coverage
-
-Code repo and issue tracking are at http://bitbucket.org/ned/coveragepy
+Coverage.py: code coverage testing for Python
+
+Coverage.py measures code coverage, typically during test execution. It uses
+the code analysis tools and tracing hooks provided in the Python standard
+library to determine which lines are executable, and which have been executed.
+
+For more information, see http://nedbatchelder.com/code/coverage
+
+Code repo and issue tracking are at http://bitbucket.org/ned/coveragepy
diff --git a/TODO.txt b/TODO.txt
index d1b3025..8409613 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,205 +1,220 @@
-Coverage TODO
-
-* 3.2
-
-+ Some kind of indication in the HTML where yellow lines aren't going.
-- Profile the reporting code: it's REALLY slow.
- - parser is doing some redundant work.
-- while TRUE claims to be partial?
-+ Analysis class should do rolling up of stats also (actually Numbers)
-+ Update docs for --branch.
-- self.coverage.data.has_arcs is ugly.
-+ Branches that never jump to nocover lines shouldn't be marked as partial.
- (see top of test_cogapp for examples)
-+ Maybe turning off yellow lines should make those lines green?
-+ A missing branch to leave the function shows an annotation of -1. Now "exit".
-+ XML report needs to get branch information.
-+ Add branch info to "coverage debug data"
-+ Polish up the help, and double-check the docs.
-
-
-* 3.3
-
-- Config file
-- Better omit handling that ignores files during measurement.
- - Deal with ~ in specified paths correctly.
-
-
-* Speed
-
-+ C extension collector
-- bitvector in trace extension.
-- Ignore certain modules
-+ Record linenos rather than (file,lineno) pairs in tracer.
-x Tricky swapping of collector like figleaf, pycov, et al. (Don't need to do
- this with C collector).
-- Seems like there should be a faster way to manage all the line number sets in
- CodeParser.raw_parse.
-- If tracing, canonical_filename_cache overlaps with should_trace_cache. Skip
- canonical_filename_cache. Maybe it isn't even worth it...
-- Would pre-allocating line number integers make the C tracer faster? It would
- use less memory.
-
-
-* Accuracy
-
-- Record magic number of module to ensure code hasn't changed
-- Record version of coverage data file, so we can update what's stored there.
-- Record options in coverage data file, so multiple runs are certain to make
- sense together.
-- Do I still need the lines in annotate_file that deal specially with "else"?
-
-
-* Power
-
-+ Branch coverage
- Titus' idea:
- 1: if a:
- 2: b = 2
- 3: c = 3
- if the coverage data shows 1,2,3, it was if-then. if it's 1,3, then the
- missing else was executed.
-- API for getting coverage data.
-- Instruction tracing instead of line tracing.
-- Path tracing (how does this even work?)
-- Count execution of lines
-- Track callers of functions (ala std module trace)
-- Method/Class/Module coverage reporting.
-- .coverage files that can be kept separate, rather than accumulated.
-- test/coverage map: http://rbtcollins.wordpress.com/2009/09/16/back-from-hiatus/
- - Similar to figleaf's sections.
-
-
-* Convenience
-
-- Command line modules should also be directories, meaning all the modules in that
- directory.
-- Why can't a morf also be a string, the name of a module?
-- ignore by module as well as file?
-- Use a .coveragerc file to control Coverage without the programmatic API.
-- Own the nose --with-cover plugin.
-x Why can't you specify execute (-x) and report (-r) in the same invocation?
- Maybe just because -x needs the rest of the command line?
-+ Support 2.3 - 3.1!
- http://pythonology.blogspot.com/2009/02/making-code-run-on-python-20-through-30.html
- http://www.rfk.id.au/blog/entry/preparing-pyenchant-for-python-3
- http://pydev.blogspot.com/2008/11/making-code-work-in-python-2-and-3.html
- + Explicitly set pickle protocol to 2.
-- An inference mode that marks lines as executed if they "must have been" executed:
- class definitions, etc, when coverage is started after the class is defined.
-- Different categories of exclude pragma? So you can enable and disable them
- from the command line, to reconsider exclusions.
-- Reporting on files never touched by coverage (package completeness)
-
-
-* Beauty
-
-+ HTML report
- - Colored bars indicating coverage per file.
- - Package navigation.
- - Rolled-up statistics.
- - Some way to focus in on red and yellow
- - Show only lines near highlights?
- - Jump to next highlight?
- - Keyboard navigation: N and P
- - Cookie for changes to pyfile.html state.
- + Clickable column headers on the index page.
- + Syntax coloring in HTML report.
- + Dynamic effects in HTML report.
- + Footer in reports pointing to coverage home page.
- + Baseline grid for linenumber font.
- + Separate out css and HTML.
- - Does it work right with utf-8 source files? http://www.python.org/dev/peps/pep-0263/
-
-
-* Community
-
-+ New docs, rather than pointing to Gareth's
- + Min python version is 2.3.
- - Three phases of work:
- - Collection
- - Analysis
- - Reporting
- - Distinction between:
- - ignore (files not to collect)
- - exclude (lines not to report as missed)
- - omit (files not to report)
- - Changes from coverage 2.x:
- - Bare "except:" lines now count as executable code.
- - Double function decorators: all decorator lines count as executable code.
- - Document the .coverage file format.
- + HTML reporting.
- - Much more detail about what's in the report.
- - References between pages are off:
- - They have <em> tags around them.
- - They use #anchors that don't survive the px->html conversion.
-+ Be sure --help text is complete (-i is missing).
-+ Host the project somewhere with a real bug tracker: bitbucket.org
-+ Point discussion to TIP
-- PEP 8 compliance?
-
-
-* Programmability
-
-+ Don't use sys.exit in CoverageScript.
-+ Remove singleton
- + Initialization of instance variables in the class.
-
-
-* Installation
-
-- How will Coverage package install over coverage.py module?
-- pip can't install it: it reads the coverage html page, and finds the kit link,
- but then can't handle the root-relative link.
-
-
-* Modernization
-
-+ Decide on minimum supported version
- + 2.3
- + Get rid of the basestring protection
- + Use enumerate
- + Use sets instead of dicts
-+ Switch from getopt to optparse.
-+ Get rid of the recursive nonsense.
-+ Docstrings.
-+ Remove huge document-style comments.
-- Better names:
- + self.cache -> self.cache_filename -> CoverageData.filename
- + self.usecache -> CoverageData.use_file
-- More classes:
- - Module munging
- + Coverage data files
-+ Why are some imports at the top of the file, and some in functions?
-+ Get rid of sys.exitfunc use.
-+ True and False (with no backward adaptation: the constants are new in 2.2.1)
-+ Get rid of compiler module
- + In analyzing code
- + In test_coverage.py
-+ Style:
- + lineno
- + filename
-
-
-* Correctness
-
-- What does -p (parallel mode) mean with -e (erase data)?
-
-
-* Tests
-
-+ Switch to a real test runner, like nose.
-+ Test both the C trace function and the Python trace function.
-+ parser.py has no direct tests.
-- Tests about the .coverage file.
-+ Tests about the --long-form of arguments.
-+ Tests about overriding the .coverage filename.
-- Tests about parallel mode.
-+ Tests about assigning a multi-line string.
-- Tests about tricky docstrings.
-+ Coverage test Coverage!
-- Tests that tracing stops after calling stop()
-- More intensive thread testing.
-x Tests about the "import __main__" in cmdline.py
-- What happens if the -x script raises an exception?
-- Test that the kit has all the proper contents.
+Coverage TODO
+
+* 3.3
+
+- Config file
+ + A command switch to point to the rc file.
+ - Write docs
+
+* Soon
+
+- Ship the nose and py.test plugin.
+- Better omit handling that ignores files during measurement.
+ - Deal with ~ in specified paths correctly.
+- while TRUE claims to be partial.
+ - A way to mark lines as partial branches, with a regex?
+ - Default to "while True:", "while 1:"
+- HTML keyboard short cuts
+
+
+* 3.2
+
++ Some kind of indication in the HTML where yellow lines aren't going.
+- Profile the reporting code: it's REALLY slow.
+ - parser is doing some redundant work.
++ Analysis class should do rolling up of stats also (actually Numbers)
++ Update docs for --branch.
+- self.coverage.data.has_arcs is ugly.
++ Branches that never jump to nocover lines shouldn't be marked as partial.
+ (see top of test_cogapp for examples)
++ Maybe turning off yellow lines should make those lines green?
++ A missing branch to leave the function shows an annotation of -1. Now "exit".
++ XML report needs to get branch information.
++ Add branch info to "coverage debug data"
++ Polish up the help, and double-check the docs.
+
+
+
+* Speed
+
++ C extension collector
+- bitvector in trace extension.
+- Ignore certain modules
++ Record linenos rather than (file,lineno) pairs in tracer.
+x Tricky swapping of collector like figleaf, pycov, et al. (Don't need to do
+ this with C collector).
+- Seems like there should be a faster way to manage all the line number sets in
+ CodeParser.raw_parse.
+- If tracing, canonical_filename_cache overlaps with should_trace_cache. Skip
+ canonical_filename_cache. Maybe it isn't even worth it...
+- Would pre-allocating line number integers make the C tracer faster? It would
+ use less memory.
+
+
+* Accuracy
+
+- Record magic number of module to ensure code hasn't changed
+- Record version of coverage data file, so we can update what's stored there.
+- Record options in coverage data file, so multiple runs are certain to make
+ sense together.
+- Do I still need the lines in annotate_file that deal specially with "else"?
+
+
+* Power
+
++ Branch coverage
+ Titus' idea:
+ 1: if a:
+ 2: b = 2
+ 3: c = 3
+ if the coverage data shows 1,2,3, it was if-then. if it's 1,3, then the
+ missing else was executed.
+- API for getting coverage data.
+- Instruction tracing instead of line tracing.
+- Path tracing (how does this even work?)
+- Count execution of lines
+- Track callers of functions (ala std module trace)
+- Method/Class/Module coverage reporting.
+- .coverage files that can be kept separate, rather than accumulated.
+- test/coverage map: http://rbtcollins.wordpress.com/2009/09/16/back-from-hiatus/
+ - Similar to figleaf's sections.
+
+
+* Convenience
+
+- Command line modules should also be directories, meaning all the modules in that
+ directory.
+- Why can't a morf also be a string, the name of a module?
+- ignore by module as well as file?
++ Use a .coveragerc file to control Coverage without the programmatic API.
+- Own the nose --with-cover plugin.
+x Why can't you specify execute (-x) and report (-r) in the same invocation?
+ Maybe just because -x needs the rest of the command line?
++ Support 2.3 - 3.1!
+ http://pythonology.blogspot.com/2009/02/making-code-run-on-python-20-through-30.html
+ http://www.rfk.id.au/blog/entry/preparing-pyenchant-for-python-3
+ http://pydev.blogspot.com/2008/11/making-code-work-in-python-2-and-3.html
+ + Explicitly set pickle protocol to 2.
+- An inference mode that marks lines as executed if they "must have been" executed:
+ class definitions, etc, when coverage is started after the class is defined.
+- Different categories of exclude pragma? So you can enable and disable them
+ from the command line, to reconsider exclusions.
+- Reporting on files never touched by coverage (package completeness)
+- A setup.py command? http://jeetworks.org/node/50
+- Deltas: indicate the change in coverage percentage from the last run.
+- Show lines missing rather than lines run in the reporting, since that's what
+ you need to focus on.
+
+
+* Beauty
+
++ HTML report
+ - Colored bars indicating coverage per file.
+ - Package navigation.
+ - Rolled-up statistics.
+ - Some way to focus in on red and yellow
+ - Show only lines near highlights?
+ - Jump to next highlight?
+ - Keyboard navigation: N and P
+ - Cookie for changes to pyfile.html state.
+ + Clickable column headers on the index page.
+ + Syntax coloring in HTML report.
+ + Dynamic effects in HTML report.
+ + Footer in reports pointing to coverage home page.
+ + Baseline grid for linenumber font.
+ + Separate out css and HTML.
+ - Does it work right with utf-8 source files? http://www.python.org/dev/peps/pep-0263/
+ - Use vim modeline to determine tab width: http://vimdoc.sourceforge.net/htmldoc/options.html#modeline
+
+
+* Community
+
++ New docs, rather than pointing to Gareth's
+ + Min python version is 2.3.
+ - Three phases of work:
+ - Collection
+ - Analysis
+ - Reporting
+ - Distinction between:
+ - ignore (files not to collect)
+ - exclude (lines not to report as missed)
+ - omit (files not to report)
+ - Changes from coverage 2.x:
+ - Bare "except:" lines now count as executable code.
+ - Double function decorators: all decorator lines count as executable code.
+ - Document the .coverage file format.
+ + HTML reporting.
+ - Much more detail about what's in the report.
+ - References between pages are off:
+ - They have <em> tags around them.
+ - They use #anchors that don't survive the px->html conversion.
++ Be sure --help text is complete (-i is missing).
++ Host the project somewhere with a real bug tracker: bitbucket.org
++ Point discussion to TIP
+- PEP 8 compliance?
+
+
+* Programmability
+
++ Don't use sys.exit in CoverageScript.
++ Remove singleton
+ + Initialization of instance variables in the class.
+
+
+* Installation
+
+- How will Coverage package install over coverage.py module?
+- pip can't install it: it reads the coverage html page, and finds the kit link,
+ but then can't handle the root-relative link.
+
+
+* Modernization
+
++ Decide on minimum supported version
+ + 2.3
+ + Get rid of the basestring protection
+ + Use enumerate
+ + Use sets instead of dicts
++ Switch from getopt to optparse.
++ Get rid of the recursive nonsense.
++ Docstrings.
++ Remove huge document-style comments.
+- Better names:
+ + self.cache -> self.cache_filename -> CoverageData.filename
+ + self.usecache -> CoverageData.use_file
+- More classes:
+ - Module munging
+ + Coverage data files
++ Why are some imports at the top of the file, and some in functions?
++ Get rid of sys.exitfunc use.
++ True and False (with no backward adaptation: the constants are new in 2.2.1)
++ Get rid of compiler module
+ + In analyzing code
+ + In test_coverage.py
++ Style:
+ + lineno
+ + filename
+
+
+* Correctness
+
+- What does -p (parallel mode) mean with -e (erase data)?
+
+
+* Tests
+
++ Switch to a real test runner, like nose.
++ Test both the C trace function and the Python trace function.
++ parser.py has no direct tests.
+- Tests about the .coverage file.
++ Tests about the --long-form of arguments.
++ Tests about overriding the .coverage filename.
+- Tests about parallel mode.
++ Tests about assigning a multi-line string.
+- Tests about tricky docstrings.
++ Coverage test Coverage!
+- Tests that tracing stops after calling stop()
+- More intensive thread testing.
+x Tests about the "import __main__" in cmdline.py
++ What happens if the -x script raises an exception?
+- Test that the kit has all the proper contents.
diff --git a/allcoverage.cmd b/allcoverage.cmd
index 2545427..5d80b4f 100644
--- a/allcoverage.cmd
+++ b/allcoverage.cmd
@@ -1,44 +1,19 @@
@echo off
make --quiet testdata
-call \ned\bin\switchpy 23
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
+del .coverage.*
+set COVERAGE_PROCESS_START=c:\ned\coverage\trunk\covcov.ini
+set COVERAGE_COVERAGE=1
-call \ned\bin\switchpy 24
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
+for %%v in (23 24 25 26 27 31) do (
+ call \ned\bin\switchpy %%v
+ python setup.py -q develop
+ set COVERAGE_TEST_TRACER=c
+ python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
+ del coverage\tracer.pyd
+ )
-call \ned\bin\switchpy 25
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-call \ned\bin\switchpy 26
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-call \ned\bin\switchpy 31
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-python test\coverage_coverage.py run %1 %2 %3 %4 %5 %6 %7 %8 %9
+set COVERAGE_PROCESS_START=
+set COVERAGE_COVERAGE=
python test\coverage_coverage.py report
diff --git a/allkits.cmd b/allkits.cmd
index 12c46d2..0d000a4 100644
--- a/allkits.cmd
+++ b/allkits.cmd
@@ -1,18 +1,11 @@
@REM Build all the kits for coverage.py
@REM Add "upload" onto the command line to also upload.
-call \ned\bin\switchpy 23
-python setup.py bdist_wininst %1
-call \ned\bin\switchpy 24
-python setup.py bdist_wininst %1
-call \ned\bin\switchpy 25
-python setup.py bdist_wininst %1
-call \ned\bin\switchpy 26
-python setup.py bdist_wininst %1
+for %%v in (23 24 25 26 27 31) do (
+ call \ned\bin\switchpy %%v
+ python setup.py bdist_wininst %1
+ )
+call \ned\bin\switchpy 26
set TAR_OPTIONS=--group=100
python setup.py sdist --formats=gztar %1
set TAR_OPTIONS=
-
-@REM Py3k
-call \ned\bin\switchpy 31
-python setup.py bdist_wininst %1
diff --git a/alltests.cmd b/alltests.cmd
index 5aee1e4..7285818 100644
--- a/alltests.cmd
+++ b/alltests.cmd
@@ -1,37 +1,15 @@
@echo off
make --quiet testdata
-call \ned\bin\switchpy 23
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-call \ned\bin\switchpy 24
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-call \ned\bin\switchpy 25
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-
-call \ned\bin\switchpy 26
-python setup.py -q develop
-set COVERAGE_TEST_TRACER=c
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
-del coverage\tracer.pyd
-set COVERAGE_TEST_TRACER=py
-nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
+for %%v in (23 24 25 26 27) do (
+ call \ned\bin\switchpy %%v
+ python setup.py -q develop
+ set COVERAGE_TEST_TRACER=c
+ nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
+ del coverage\tracer.pyd
+ set COVERAGE_TEST_TRACER=py
+ nosetests %1 %2 %3 %4 %5 %6 %7 %8 %9
+ )
call \ned\bin\switchpy 31
python setup.py -q develop
diff --git a/checkeol.py b/checkeol.py
index 68efc2f..6464893 100644
--- a/checkeol.py
+++ b/checkeol.py
@@ -1,24 +1,37 @@
-# Check files for incorrect newlines
+# Check files for incorrect newlines and trailing whitespace.
import fnmatch, os
-def check_file(fname):
+def check_file(fname, crlf=True, trail_white=True):
for n, line in enumerate(open(fname, "rb")):
- if "\r" in line:
- print "%s@%d: CR found" % (fname, n)
- return
+ if crlf:
+ if "\r" in line:
+ print "%s@%d: CR found" % (fname, n+1)
+ return
+ if trail_white:
+ line = line[:-1]
+ if line.rstrip() != line:
+ print "%s@%d: trailing whitespace found" % (fname, n+1)
+ return
-def check_files(root, patterns):
+
+def check_files(root, patterns, **kwargs):
for root, dirs, files in os.walk(root):
for f in files:
fname = os.path.join(root, f)
for p in patterns:
if fnmatch.fnmatch(fname, p):
- check_file(fname)
+ check_file(fname, **kwargs)
break
- if '.svn' in dirs:
- dirs.remove('.svn')
+ for pattern in ['.svn', '.hg']:
+ if pattern in dirs:
+ dirs.remove(pattern)
+
check_files("coverage", ["*.py"])
-check_files("test", ["*.py", "*,cover"])
+check_files("coverage/htmlfiles", ["*.html", "*.css", "*.js"])
+check_files("test", ["*.py"])
+check_files("test", ["*,cover"], trail_white=False)
check_file("setup.py")
+check_files("doc", ["*.rst"])
+check_files(".", ["*.txt"])
diff --git a/covcov.ini b/covcov.ini
new file mode 100644
index 0000000..9e1733f
--- /dev/null
+++ b/covcov.ini
@@ -0,0 +1,16 @@
+# Settings to use when using coverage.py to measure itself.
+[run]
+branch = true
+data_file = c:\ned\coverage\trunk\.coverage
+parallel = true
+
+[report]
+exclude_lines =
+ # pragma: no cover
+ # pragma: recursive coverage
+ def __repr__
+ if __name__ == .__main__.:
+ raise AssertionError
+
+omit = mock, ez_setup, distribute
+ignore_errors = true
diff --git a/coverage/__init__.py b/coverage/__init__.py
index 4db1240..9fd4a8d 100644
--- a/coverage/__init__.py
+++ b/coverage/__init__.py
@@ -5,11 +5,11 @@ http://nedbatchelder.com/code/coverage
"""
-__version__ = "3.2b4" # see detailed history in CHANGES.txt
+__version__ = "3.3.2a1" # see detailed history in CHANGES.txt
__url__ = "http://nedbatchelder.com/code/coverage"
-from coverage.control import coverage
+from coverage.control import coverage, process_startup
from coverage.data import CoverageData
from coverage.cmdline import main, CoverageScript
from coverage.misc import CoverageException
@@ -55,7 +55,7 @@ annotate = _singleton_method('annotate')
# COPYRIGHT AND LICENSE
#
# Copyright 2001 Gareth Rees. All rights reserved.
-# Copyright 2004-2009 Ned Batchelder. All rights reserved.
+# Copyright 2004-2010 Ned Batchelder. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
diff --git a/coverage/backward.py b/coverage/backward.py
index 66cfbb9..425bcc6 100644
--- a/coverage/backward.py
+++ b/coverage/backward.py
@@ -14,7 +14,6 @@ try:
except NameError:
from sets import Set as set
-
# Python 2.3 doesn't have `sorted`.
try:
sorted = sorted
@@ -26,7 +25,6 @@ except NameError:
return lst
# Pythons 2 and 3 differ on where to get StringIO
-
try:
from cStringIO import StringIO
BytesIO = StringIO
@@ -34,39 +32,42 @@ except ImportError:
from io import StringIO, BytesIO
# What's a string called?
-
try:
string_class = basestring
except NameError:
string_class = str
# Where do pickles come from?
-
try:
import cPickle as pickle
except ImportError:
import pickle
# range or xrange?
-
try:
range = xrange
except NameError:
range = range
# Exec is a statement in Py2, a function in Py3
-
-if sys.hexversion > 0x03000000:
- def exec_function(source, filename, global_map):
+if sys.version_info >= (3, 0):
+ def exec_code_object(code, global_map):
"""A wrapper around exec()."""
- exec(compile(source, filename, "exec"), global_map)
+ exec(code, global_map)
else:
# OK, this is pretty gross. In Py2, exec was a statement, but that will
# be a syntax error if we try to put it in a Py3 file, even if it is never
# executed. So hide it inside an evaluated string literal instead.
- eval(compile("""\
-def exec_function(source, filename, global_map):
- exec compile(source, filename, "exec") in global_map
-""",
- "<exec_function>", "exec"
- ))
+ eval(
+ compile(
+ "def exec_code_object(code, global_map):\n"
+ " exec code in global_map\n",
+ "<exec_function>", "exec"
+ )
+ )
+
+# ConfigParser was renamed to the more-standard configparser
+try:
+ import configparser
+except ImportError:
+ import ConfigParser as configparser
diff --git a/coverage/bytecode.py b/coverage/bytecode.py
index ac28034..ab522d6 100644
--- a/coverage/bytecode.py
+++ b/coverage/bytecode.py
@@ -22,7 +22,7 @@ class ByteCodes(object):
self.code = code
self.offset = 0
- if sys.hexversion > 0x03000000:
+ if sys.version_info >= (3, 0):
def __getitem__(self, i):
return self.code[i]
else:
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index 27c28d4..9e15074 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -1,9 +1,10 @@
"""Command-line support for Coverage."""
-import optparse, re, sys
+import optparse, re, sys, traceback
+from coverage.backward import sorted # pylint: disable-msg=W0622
from coverage.execfile import run_python_file
-from coverage.misc import CoverageException
+from coverage.misc import CoverageException, ExceptionDuringRun
class Opts(object):
@@ -60,8 +61,13 @@ class Opts(object):
)
parallel_mode = optparse.Option(
'-p', '--parallel-mode', action='store_true',
- help="Include the machine name and process id in the .coverage "
- "data file name."
+ help="Append the machine name, process id and random number to the "
+ ".coverage data file name to simplify collecting data from "
+ "many processes."
+ )
+ rcfile = optparse.Option(
+ '', '--rcfile', action='store',
+ help="Specify configuration file. Defaults to '.coveragerc'"
)
timid = optparse.Option(
'', '--timid', action='store_true',
@@ -95,6 +101,7 @@ class CoverageOptionParser(optparse.OptionParser, object):
omit=None,
parallel_mode=None,
pylib=None,
+ rcfile=True,
show_missing=None,
timid=None,
erase_first=None,
@@ -102,7 +109,11 @@ class CoverageOptionParser(optparse.OptionParser, object):
)
self.disable_interspersed_args()
- self.help_fn = lambda: None
+ self.help_fn = self.help_noop
+
+ def help_noop(self, error=None, topic=None, parser=None):
+ """No-op help function."""
+ pass
class OptionParserError(Exception):
"""Used to stop the optparse error handler ending the process."""
@@ -197,6 +208,10 @@ class CmdOptionParser(CoverageOptionParser):
# results, and they will compare equal to objects.
return (other == "<CmdOptionParser:%s>" % self.cmd)
+GLOBAL_ARGS = [
+ Opts.rcfile,
+ Opts.help,
+ ]
CMDS = {
'annotate': CmdOptionParser("annotate",
@@ -204,40 +219,21 @@ CMDS = {
Opts.directory,
Opts.ignore_errors,
Opts.omit,
- Opts.help,
- ],
+ ] + GLOBAL_ARGS,
usage = "[options] [modules]",
description = "Make annotated copies of the given files, marking "
"statements that are executed with > and statements that are "
"missed with !."
),
- 'help': CmdOptionParser("help", [Opts.help],
- usage = "[command]",
- description = "Describe how to use coverage.py"
- ),
-
- 'html': CmdOptionParser("html",
- [
- Opts.directory,
- Opts.ignore_errors,
- Opts.omit,
- Opts.help,
- ],
- usage = "[options] [modules]",
- description = "Create an HTML report of the coverage of the files. "
- "Each file gets its own page, with the source decorated to show "
- "executed, excluded, and missed lines."
- ),
-
- 'combine': CmdOptionParser("combine", [Opts.help],
+ 'combine': CmdOptionParser("combine", GLOBAL_ARGS,
usage = " ",
description = "Combine data from multiple coverage files collected "
"with 'run -p'. The combined results are written to a single "
"file representing the union of the data."
),
- 'debug': CmdOptionParser("debug", [Opts.help],
+ 'debug': CmdOptionParser("debug", GLOBAL_ARGS,
usage = "<topic>",
description = "Display information on the internals of coverage.py, "
"for diagnosing problems. "
@@ -245,18 +241,34 @@ CMDS = {
"or 'sys' to show installation information."
),
- 'erase': CmdOptionParser("erase", [Opts.help],
+ 'erase': CmdOptionParser("erase", GLOBAL_ARGS,
usage = " ",
description = "Erase previously collected coverage data."
),
+ 'help': CmdOptionParser("help", GLOBAL_ARGS,
+ usage = "[command]",
+ description = "Describe how to use coverage.py"
+ ),
+
+ 'html': CmdOptionParser("html",
+ [
+ Opts.directory,
+ Opts.ignore_errors,
+ Opts.omit,
+ ] + GLOBAL_ARGS,
+ usage = "[options] [modules]",
+ description = "Create an HTML report of the coverage of the files. "
+ "Each file gets its own page, with the source decorated to show "
+ "executed, excluded, and missed lines."
+ ),
+
'report': CmdOptionParser("report",
[
Opts.ignore_errors,
Opts.omit,
Opts.show_missing,
- Opts.help,
- ],
+ ] + GLOBAL_ARGS,
usage = "[options] [modules]",
description = "Report coverage statistics on modules."
),
@@ -268,8 +280,7 @@ CMDS = {
Opts.pylib,
Opts.parallel_mode,
Opts.timid,
- Opts.help,
- ],
+ ] + GLOBAL_ARGS,
defaults = {'erase_first': True},
cmd = "run",
usage = "[options] <pyfile> [program options]",
@@ -281,8 +292,7 @@ CMDS = {
Opts.ignore_errors,
Opts.omit,
Opts.output_xml,
- Opts.help,
- ],
+ ] + GLOBAL_ARGS,
cmd = "xml",
defaults = {'outfile': 'coverage.xml'},
usage = "[options] [modules]",
@@ -418,10 +428,11 @@ class CoverageScript(object):
# Do something.
self.coverage = self.covpkg.coverage(
- data_suffix = bool(options.parallel_mode),
+ data_suffix = options.parallel_mode,
cover_pylib = options.pylib,
timid = options.timid,
branch = options.branch,
+ config_file = options.rcfile,
)
if 'debug' in options.actions:
@@ -496,8 +507,6 @@ class CoverageScript(object):
directory=options.directory, **report_args)
if 'xml' in options.actions:
outfile = options.outfile
- if outfile == '-':
- outfile = None
self.coverage.xml_report(outfile=outfile, **report_args)
return OK
@@ -580,16 +589,30 @@ Coverage.py, version %(__version__)s. %(__url__)s
"""
-def main():
+def main(argv=None):
"""The main entrypoint to Coverage.
This is installed as the script entrypoint.
"""
+ if argv is None:
+ argv = sys.argv[1:]
try:
- status = CoverageScript().command_line(sys.argv[1:])
+ status = CoverageScript().command_line(argv)
+ except ExceptionDuringRun:
+ # An exception was caught while running the product code. The
+ # sys.exc_info() return tuple is packed into an ExceptionDuringRun
+ # exception.
+ _, err, _ = sys.exc_info()
+ traceback.print_exception(*err.args)
+ status = ERR
except CoverageException:
+ # A controlled error inside coverage.py: print the message to the user.
_, err, _ = sys.exc_info()
print(err)
status = ERR
+ except SystemExit:
+ # The user called `sys.exit()`. Exit with their status code.
+ _, err, _ = sys.exc_info()
+ status = err.args[0]
return status
diff --git a/coverage/collector.py b/coverage/collector.py
index 29dddf6..1837aae 100644
--- a/coverage/collector.py
+++ b/coverage/collector.py
@@ -251,7 +251,7 @@ class Collector(object):
line_data = {}
for f, arcs in self.data.items():
line_data[f] = ldf = {}
- for l1, _ in arcs:
+ for l1, _ in list(arcs.keys()):
if l1:
ldf[l1] = None
return line_data
diff --git a/coverage/config.py b/coverage/config.py
new file mode 100644
index 0000000..8f508f2
--- /dev/null
+++ b/coverage/config.py
@@ -0,0 +1,95 @@
+"""Config file for coverage.py"""
+
+import os
+from coverage.backward import configparser # pylint: disable-msg=W0622
+
+
+class CoverageConfig(object):
+ """Coverage.py configuration.
+
+ The attributes of this class are the various settings that control the
+ operation of coverage.py.
+
+ """
+
+ def __init__(self):
+ """Initialize the configuration attributes to their defaults."""
+ # Defaults for [run]
+ self.branch = False
+ self.cover_pylib = False
+ self.data_file = ".coverage"
+ self.parallel = False
+ self.timid = False
+
+ # Defaults for [report]
+ self.exclude_list = ['(?i)# *pragma[: ]*no *cover']
+ self.ignore_errors = False
+ self.omit_prefixes = None
+
+ # Defaults for [html]
+ self.html_dir = "htmlcov"
+
+ # Defaults for [xml]
+ self.xml_output = "coverage.xml"
+
+ def from_environment(self, env_var):
+ """Read configuration from the `env_var` environment variable."""
+ # Timidity: for nose users, read an environment variable. This is a
+ # cheap hack, since the rest of the command line arguments aren't
+ # recognized, but it solves some users' problems.
+ env = os.environ.get(env_var, '')
+ if env:
+ self.timid = ('--timid' in env)
+
+ def from_args(self, **kwargs):
+ """Read config values from `kwargs`."""
+ for k, v in kwargs.items():
+ if v is not None:
+ setattr(self, k, v)
+
+ def from_file(self, *files):
+ """Read configuration from .rc files.
+
+ Each argument in `files` is a file name to read.
+
+ """
+ cp = configparser.RawConfigParser()
+ cp.read(files)
+
+ # [run]
+ if cp.has_option('run', 'branch'):
+ self.branch = cp.getboolean('run', 'branch')
+ if cp.has_option('run', 'cover_pylib'):
+ self.cover_pylib = cp.getboolean('run', 'cover_pylib')
+ if cp.has_option('run', 'data_file'):
+ self.data_file = cp.get('run', 'data_file')
+ if cp.has_option('run', 'parallel'):
+ self.parallel = cp.getboolean('run', 'parallel')
+ if cp.has_option('run', 'timid'):
+ self.timid = cp.getboolean('run', 'timid')
+
+ # [report]
+ if cp.has_option('report', 'exclude_lines'):
+ # exclude_lines is a list of lines, leave out the blank ones.
+ exclude_list = cp.get('report', 'exclude_lines')
+ self.exclude_list = list(filter(None, exclude_list.split('\n')))
+ if cp.has_option('report', 'ignore_errors'):
+ self.ignore_errors = cp.getboolean('report', 'ignore_errors')
+ if cp.has_option('report', 'omit'):
+ # omit is a list of prefixes, on separate lines, or separated by
+ # commas.
+ omit_list = cp.get('report', 'omit')
+ self.omit_prefixes = []
+ for omit_line in omit_list.split('\n'):
+ for omit in omit_line.split(','):
+ omit = omit.strip()
+ if omit:
+ self.omit_prefixes.append(omit)
+
+ # [html]
+ if cp.has_option('html', 'directory'):
+ self.html_dir = cp.get('html', 'directory')
+
+ # [xml]
+ if cp.has_option('xml', 'output'):
+ self.xml_output = cp.get('xml', 'output')
diff --git a/coverage/control.py b/coverage/control.py
index 15bbe98..1456178 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -1,14 +1,16 @@
"""Core control stuff for Coverage."""
-import atexit, os, socket
+import atexit, os, random, socket, sys
from coverage.annotate import AnnotateReporter
-from coverage.backward import string_class # pylint: disable-msg=W0622
+from coverage.backward import string_class
from coverage.codeunit import code_unit_factory, CodeUnit
from coverage.collector import Collector
+from coverage.config import CoverageConfig
from coverage.data import CoverageData
from coverage.files import FileLocator
from coverage.html import HtmlReporter
+from coverage.misc import bool_or_none
from coverage.results import Analysis
from coverage.summary import SummaryReporter
from coverage.xmlreport import XmlReporter
@@ -28,13 +30,13 @@ class coverage(object):
"""
- def __init__(self, data_file=None, data_suffix=False, cover_pylib=False,
- auto_data=False, timid=False, branch=False):
+ def __init__(self, data_file=None, data_suffix=None, cover_pylib=None,
+ auto_data=False, timid=None, branch=None, config_file=True):
"""
`data_file` is the base name of the data file to use, defaulting to
- ".coverage". `data_suffix` is appended to `data_file` to create the
- final file name. If `data_suffix` is simply True, then a suffix is
- created with the machine and process identity included.
+ ".coverage". `data_suffix` is appended (with a dot) to `data_file` to
+ create the final file name. If `data_suffix` is simply True, then a
+ suffix is created with the machine and process identity included.
`cover_pylib` is a boolean determining whether Python code installed
with the Python interpreter is measured. This includes the Python
@@ -51,44 +53,67 @@ class coverage(object):
If `branch` is true, then branch coverage will be measured in addition
to the usual statement coverage.
+ `config_file` determines what config file to read. If it is a string,
+ it is the name of the config file to read. If it is True, then a
+ standard file is read (".coveragerc"). If it is False, then no file is
+ read.
+
"""
from coverage import __version__
- self.cover_pylib = cover_pylib
+ # Build our configuration from a number of sources:
+ # 1: defaults:
+ self.config = CoverageConfig()
+
+ # 2: from the coveragerc file:
+ if config_file:
+ if config_file is True:
+ config_file = ".coveragerc"
+ self.config.from_file(config_file)
+
+ # 3: from environment variables:
+ self.config.from_environment('COVERAGE_OPTIONS')
+ env_data_file = os.environ.get('COVERAGE_FILE')
+ if env_data_file:
+ self.config.data_file = env_data_file
+
+ # 4: from constructor arguments:
+ self.config.from_args(
+ data_file=data_file, cover_pylib=cover_pylib, timid=timid,
+ branch=branch, parallel=bool_or_none(data_suffix)
+ )
+
self.auto_data = auto_data
self.atexit_registered = False
self.exclude_re = ""
- self.exclude_list = []
+ self._compile_exclude()
self.file_locator = FileLocator()
- # Timidity: for nose users, read an environment variable. This is a
- # cheap hack, since the rest of the command line arguments aren't
- # recognized, but it solves some users' problems.
- timid = timid or ('--timid' in os.environ.get('COVERAGE_OPTIONS', ''))
self.collector = Collector(
- self._should_trace, timid=timid, branch=branch
+ self._should_trace, timid=self.config.timid,
+ branch=self.config.branch
)
# Create the data file.
- if data_suffix:
+ if data_suffix or self.config.parallel:
if not isinstance(data_suffix, string_class):
- # if data_suffix=True, use .machinename.pid
- data_suffix = ".%s.%s" % (socket.gethostname(), os.getpid())
+ # if data_suffix=True, use .machinename.pid.random
+ data_suffix = "%s.%s.%06d" % (
+ socket.gethostname(), os.getpid(), random.randint(0, 99999)
+ )
else:
data_suffix = None
+ self.run_suffix = data_suffix
self.data = CoverageData(
- basename=data_file, suffix=data_suffix,
+ basename=self.config.data_file,
collector="coverage v%s" % __version__
)
- # The default exclude pattern.
- self.exclude('# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]')
-
# The prefix for files considered "installed with the interpreter".
- if not self.cover_pylib:
+ if not self.config.cover_pylib:
# Look at where the "os" module is located. That's the indication
# for "installed with the interpreter".
os_file = self.file_locator.canonical_filename(os.__file__)
@@ -131,7 +156,7 @@ class coverage(object):
# If we aren't supposed to trace installed code, then check if this is
# near the Python standard library and skip it if so.
- if not self.cover_pylib:
+ if not self.config.cover_pylib:
if canonical.startswith(self.pylib_prefix):
return False
@@ -166,6 +191,14 @@ class coverage(object):
def start(self):
"""Start measuring code coverage."""
+ if self.run_suffix:
+ # If the .coveragerc file specifies parallel=True, then we need to
+ # remake the data file for collection, with a suffix.
+ from coverage import __version__
+ self.data = CoverageData(
+ basename=self.config.data_file, suffix=self.run_suffix,
+ collector="coverage v%s" % __version__
+ )
if self.auto_data:
self.load()
# Save coverage data when Python exits.
@@ -191,7 +224,7 @@ class coverage(object):
def clear_exclude(self):
"""Clear the exclude list."""
- self.exclude_list = []
+ self.config.exclude_list = []
self.exclude_re = ""
def exclude(self, regex):
@@ -203,12 +236,16 @@ class coverage(object):
Matching any of the regexes excludes a source line.
"""
- self.exclude_list.append(regex)
- self.exclude_re = "(" + ")|(".join(self.exclude_list) + ")"
+ self.config.exclude_list.append(regex)
+ self._compile_exclude()
+
+ def _compile_exclude(self):
+ """Build the internal usable form of the exclude list."""
+ self.exclude_re = "(" + ")|(".join(self.config.exclude_list) + ")"
def get_exclude_list(self):
"""Return the list of excluded regex patterns."""
- return self.exclude_list
+ return self.config.exclude_list
def save(self):
"""Save the collected coverage data to the data file."""
@@ -271,7 +308,7 @@ class coverage(object):
return Analysis(self, it)
- def report(self, morfs=None, show_missing=True, ignore_errors=False,
+ def report(self, morfs=None, show_missing=True, ignore_errors=None,
file=None, omit_prefixes=None): # pylint: disable-msg=W0622
"""Write a summary report to `file`.
@@ -279,10 +316,18 @@ class coverage(object):
statements, missing statements, and a list of lines missed.
"""
- reporter = SummaryReporter(self, show_missing, ignore_errors)
- reporter.report(morfs, outfile=file, omit_prefixes=omit_prefixes)
+ self.config.from_args(
+ ignore_errors=ignore_errors,
+ omit_prefixes=omit_prefixes
+ )
+ reporter = SummaryReporter(
+ self, show_missing, self.config.ignore_errors
+ )
+ reporter.report(
+ morfs, outfile=file, omit_prefixes=self.config.omit_prefixes
+ )
- def annotate(self, morfs=None, directory=None, ignore_errors=False,
+ def annotate(self, morfs=None, directory=None, ignore_errors=None,
omit_prefixes=None):
"""Annotate a list of modules.
@@ -292,40 +337,67 @@ class coverage(object):
excluded lines have "-", and missing lines have "!".
"""
- reporter = AnnotateReporter(self, ignore_errors)
+ self.config.from_args(
+ ignore_errors=ignore_errors,
+ omit_prefixes=omit_prefixes
+ )
+ reporter = AnnotateReporter(self, self.config.ignore_errors)
reporter.report(
- morfs, directory=directory, omit_prefixes=omit_prefixes)
+ morfs, directory=directory, omit_prefixes=self.config.omit_prefixes
+ )
- def html_report(self, morfs=None, directory=None, ignore_errors=False,
+ def html_report(self, morfs=None, directory=None, ignore_errors=None,
omit_prefixes=None):
"""Generate an HTML report.
"""
- reporter = HtmlReporter(self, ignore_errors)
+ self.config.from_args(
+ ignore_errors=ignore_errors,
+ omit_prefixes=omit_prefixes,
+ html_dir=directory,
+ )
+ reporter = HtmlReporter(self, self.config.ignore_errors)
reporter.report(
- morfs, directory=directory, omit_prefixes=omit_prefixes)
+ morfs, directory=self.config.html_dir,
+ omit_prefixes=self.config.omit_prefixes
+ )
- def xml_report(self, morfs=None, outfile=None, ignore_errors=False,
+ def xml_report(self, morfs=None, outfile=None, ignore_errors=None,
omit_prefixes=None):
"""Generate an XML report of coverage results.
The report is compatible with Cobertura reports.
+ Each module in `morfs` is included in the report. `outfile` is the
+ path to write the file to, "-" will write to stdout.
+
"""
- if outfile:
- outfile = open(outfile, "w")
+ self.config.from_args(
+ ignore_errors=ignore_errors,
+ omit_prefixes=omit_prefixes,
+ xml_output=outfile,
+ )
+ file_to_close = None
+ if self.config.xml_output:
+ if self.config.xml_output == '-':
+ outfile = sys.stdout
+ else:
+ outfile = open(self.config.xml_output, "w")
+ file_to_close = outfile
try:
- reporter = XmlReporter(self, ignore_errors)
+ reporter = XmlReporter(self, self.config.ignore_errors)
reporter.report(
- morfs, omit_prefixes=omit_prefixes, outfile=outfile)
+ morfs, omit_prefixes=self.config.omit_prefixes, outfile=outfile
+ )
finally:
- outfile.close()
+ if file_to_close:
+ file_to_close.close()
def sysinfo(self):
- """Return a list of key,value pairs showing internal information."""
+ """Return a list of (key, value) pairs showing internal information."""
import coverage as covmod
- import platform, re, sys
+ import platform, re
info = [
('version', covmod.__version__),
@@ -344,3 +416,32 @@ class coverage(object):
]),
]
return info
+
+
+def process_startup():
+ """Call this at Python startup to perhaps measure coverage.
+
+ If the environment variable COVERAGE_PROCESS_START is defined, coverage
+ measurement is started. The value of the variable is the config file
+ to use.
+
+ There are two ways to configure your Python installation to invoke this
+ function when Python starts:
+
+ #. Create or append to sitecustomize.py to add these lines::
+
+ import coverage
+ coverage.process_startup()
+
+ #. Create a .pth file in your Python installation containing::
+
+ import coverage; coverage.process_startup()
+
+ """
+ cps = os.environ.get("COVERAGE_PROCESS_START")
+ if cps:
+ cov = coverage(config_file=cps, auto_data=True)
+ if os.environ.get("COVERAGE_COVERAGE"):
+ # Measuring coverage within coverage.py takes yet more trickery.
+ cov.cover_prefix = "Please measure coverage.py!"
+ cov.start()
diff --git a/coverage/data.py b/coverage/data.py
index 11c7c01..9359af1 100644
--- a/coverage/data.py
+++ b/coverage/data.py
@@ -2,7 +2,7 @@
import os
-from coverage.backward import pickle, sorted # pylint: disable-msg=W0622
+from coverage.backward import pickle, sorted # pylint: disable-msg=W0622
class CoverageData(object):
@@ -34,21 +34,21 @@ class CoverageData(object):
`suffix` is a suffix to append to the base file name. This can be used
for multiple or parallel execution, so that many coverage data files
- can exist simultaneously.
+ can exist simultaneously. A dot will be used to join the base name and
+ the suffix.
`collector` is a string describing the coverage measurement software.
"""
- self.collector = collector
+ self.collector = collector or 'unknown'
self.use_file = True
# Construct the filename that will be used for data file storage, if we
# ever do any file storage.
- self.filename = (basename or
- os.environ.get(self.filename_env, self.filename_default))
+ self.filename = basename or ".coverage"
if suffix:
- self.filename += suffix
+ self.filename += "." + suffix
self.filename = os.path.abspath(self.filename)
# A map from canonical Python source file name to a dictionary in
@@ -169,18 +169,21 @@ class CoverageData(object):
"""Combine a number of data files together.
Treat `self.filename` as a file prefix, and combine the data from all
- of the data files starting with that prefix.
+ of the data files starting with that prefix plus a dot.
"""
data_dir, local = os.path.split(self.filename)
+ localdot = local + '.'
for f in os.listdir(data_dir or '.'):
- if f.startswith(local):
+ if f.startswith(localdot):
full_path = os.path.join(data_dir, f)
new_lines, new_arcs = self._read_file(full_path)
for filename, file_data in new_lines.items():
self.lines.setdefault(filename, {}).update(file_data)
for filename, file_data in new_arcs.items():
self.arcs.setdefault(filename, {}).update(file_data)
+ if f != local:
+ os.remove(full_path)
def add_line_data(self, line_data):
"""Add executed line data.
diff --git a/coverage/execfile.py b/coverage/execfile.py
index 15f0a5f..333163f 100644
--- a/coverage/execfile.py
+++ b/coverage/execfile.py
@@ -2,8 +2,8 @@
import imp, os, sys
-from coverage.backward import exec_function
-from coverage.misc import NoSource
+from coverage.backward import exec_code_object
+from coverage.misc import NoSource, ExceptionDuringRun
try:
@@ -36,11 +36,33 @@ def run_python_file(filename, args):
sys.path[0] = os.path.dirname(filename)
try:
+ # Open the source file.
try:
source = open(filename, 'rU').read()
except IOError:
raise NoSource("No file to run: %r" % filename)
- exec_function(source, filename, main_mod.__dict__)
+
+ # We have the source. `compile` still needs the last line to be clean,
+ # so make sure it is, then compile a code object from it.
+ if source[-1] != '\n':
+ source += '\n'
+ code = compile(source, filename, "exec")
+
+ # Execute the source file.
+ try:
+ exec_code_object(code, main_mod.__dict__)
+ except SystemExit:
+ # The user called sys.exit(). Just pass it along to the upper
+ # layers, where it will be handled.
+ raise
+ except:
+ # Something went wrong while executing the user code.
+ # Get the exc_info, and pack them into an exception that we can
+ # throw up to the outer loop. We peel two layers off the traceback
+ # so that the coverage.py code doesn't appear in the final printed
+ # traceback.
+ typ, err, tb = sys.exc_info()
+ raise ExceptionDuringRun(typ, err, tb.tb_next.tb_next)
finally:
# Restore the old __main__
sys.modules['__main__'] = old_main_mod
diff --git a/coverage/files.py b/coverage/files.py
index fb59732..28331a1 100644
--- a/coverage/files.py
+++ b/coverage/files.py
@@ -24,7 +24,8 @@ class FileLocator(object):
"""
common_prefix = os.path.commonprefix(
- [filename, self.relative_dir + os.sep])
+ [filename, self.relative_dir + os.sep]
+ )
return filename[len(common_prefix):]
def canonical_filename(self, filename):
@@ -40,6 +41,8 @@ class FileLocator(object):
f = os.path.basename(f)
if not os.path.isabs(f):
for path in [os.curdir] + sys.path:
+ if path is None:
+ continue
g = os.path.join(path, f)
if os.path.exists(g):
f = g
@@ -69,7 +72,7 @@ class FileLocator(object):
data = zi.get_data(parts[1])
except IOError:
continue
- if sys.hexversion > 0x03000000:
+ if sys.version_info >= (3, 0):
data = data.decode('utf8') # TODO: How to do this properly?
return data
return None
diff --git a/coverage/html.py b/coverage/html.py
index 4d51eb3..f8de2e4 100644
--- a/coverage/html.py
+++ b/coverage/html.py
@@ -69,27 +69,27 @@ class HtmlReporter(Reporter):
arcs = self.arcs
# These classes determine which lines are highlighted by default.
- c_run = " run hide_run"
- c_exc = " exc"
- c_mis = " mis"
- c_par = " par" + c_run
+ c_run = "run hide_run"
+ c_exc = "exc"
+ c_mis = "mis"
+ c_par = "par " + c_run
lines = []
for lineno, line in enumerate(source_token_lines(source)):
lineno += 1 # 1-based line numbers.
# Figure out how to mark this line.
- line_class = ""
+ line_class = []
annotate_html = ""
annotate_title = ""
if lineno in analysis.statements:
- line_class += " stm"
+ line_class.append("stm")
if lineno in analysis.excluded:
- line_class += c_exc
+ line_class.append(c_exc)
elif lineno in analysis.missing:
- line_class += c_mis
+ line_class.append(c_mis)
elif self.arcs and lineno in missing_branch_arcs:
- line_class += c_par
+ line_class.append(c_par)
n_par += 1
annlines = []
for b in missing_branch_arcs[lineno]:
@@ -103,21 +103,23 @@ class HtmlReporter(Reporter):
elif len(annlines) == 1:
annotate_title = "no jump to this line number"
elif lineno in analysis.statements:
- line_class += c_run
+ line_class.append(c_run)
# Build the HTML for the line
- html = ""
+ html = []
for tok_type, tok_text in line:
if tok_type == "ws":
- html += escape(tok_text)
+ html.append(escape(tok_text))
else:
tok_html = escape(tok_text) or '&nbsp;'
- html += "<span class='%s'>%s</span>" % (tok_type, tok_html)
+ html.append(
+ "<span class='%s'>%s</span>" % (tok_type, tok_html)
+ )
lines.append({
- 'html': html,
+ 'html': ''.join(html),
'number': lineno,
- 'class': line_class.strip() or "pln",
+ 'class': ' '.join(line_class) or "pln",
'annotate': annotate_html,
'annotate_title': annotate_title,
})
diff --git a/coverage/htmlfiles/coverage_html.js b/coverage/htmlfiles/coverage_html.js
index c0abab8..b70712c 100644
--- a/coverage/htmlfiles/coverage_html.js
+++ b/coverage/htmlfiles/coverage_html.js
@@ -33,7 +33,7 @@ function index_page_ready($) {
}
else {
// This is not the first load - something has
- // already defined sorting so we'll just update
+ // already defined sorting so we'll just update
// our stored value to match:
sort_list = table.config.sortList;
}
@@ -58,7 +58,22 @@ function index_page_ready($) {
});
// Watch for page unload events so we can save the final sort settings:
- $(window).unload(function() {
- document.cookie = cookie_name + "=" + sort_list.toString() + "; path=/"
+ $(window).unload(function() {
+ document.cookie = cookie_name + "=" + sort_list.toString() + "; path=/"
});
}
+
+// -- pyfile stuff --
+
+function toggle_lines(btn, cls) {
+ var btn = $(btn);
+ var hide = "hide_"+cls;
+ if (btn.hasClass(hide)) {
+ $("#source ."+cls).removeClass(hide);
+ btn.removeClass(hide);
+ }
+ else {
+ $("#source ."+cls).addClass(hide);
+ btn.addClass(hide);
+ }
+}
diff --git a/coverage/htmlfiles/index.html b/coverage/htmlfiles/index.html
index 0f38764..700ff8b 100644
--- a/coverage/htmlfiles/index.html
+++ b/coverage/htmlfiles/index.html
@@ -1,80 +1,81 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
- <title>Coverage report</title>
- <link rel='stylesheet' href='style.css' type='text/css'>
- <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
- <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
- <script type='text/javascript' src='coverage_html.js'></script>
- <script type="text/javascript" charset="utf-8">
- jQuery(document).ready(index_page_ready);
- </script>
- </head>
- <body>
-
- <div id='header'>
- <div class='content'>
- <h1>Coverage report:
- <span class='pc_cov'>{{totals.pc_covered|format_pct}}%</span>
- </h1>
- </div>
- </div>
-
- <div id='index'>
- <table class='index'>
- <thead>
- {# The title='' attr doesn't work in Safari. #}
- <tr class='tablehead' title='Click to sort'>
- <th class='name left headerSortDown'>Module</th>
- <th>statements</th>
- <th>run</th>
- <th>excluded</th>
- {% if arcs %}
- <th>branches</th>
- <th>br exec</th>
- {% endif %}
- <th class='right'>coverage</th>
- </tr>
- </thead>
- {# HTML syntax requires thead, tfoot, tbody #}
- <tfoot>
- <tr class='total'>
- <td class='name left'>Total</td>
- <td>{{totals.n_statements}}</td>
- <td>{{totals.n_executed}}</td>
- <td>{{totals.n_excluded}}</td>
- {% if arcs %}
- <td>{{totals.n_branches}}</td>
- <td>{{totals.n_executed_branches}}</td>
- {% endif %}
- <td class='right'>{{totals.pc_covered|format_pct}}%</td>
- </tr>
- </tfoot>
- <tbody>
- {% for file in files %}
- <tr class='file'>
- <td class='name left'><a href='{{file.html_filename}}'>{{file.cu.name}}</a></td>
- <td>{{file.nums.n_statements}}</td>
- <td>{{file.nums.n_executed}}</td>
- <td>{{file.nums.n_excluded}}</td>
- {% if arcs %}
- <td>{{file.nums.n_branches}}</td>
- <td>{{file.nums.n_executed_branches}}</td>
- {% endif %}
- <td class='right'>{{file.nums.pc_covered|format_pct}}%</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- </div>
-
- <div id='footer'>
- <div class='content'>
- <p>
- <a class='nav' href='{{__url__}}'>coverage.py v{{__version__}}</a>
- </p>
- </div>
- </div>
- </body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>{{totals.pc_covered|format_pct}}%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+ <table class='index'>
+ <thead>
+ {# The title='' attr doesn't work in Safari. #}
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+ {% if arcs %}
+ <th>branches</th>
+ <th>br exec</th>
+ {% endif %}
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+ {# HTML syntax requires thead, tfoot, tbody #}
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>{{totals.n_statements}}</td>
+ <td>{{totals.n_executed}}</td>
+ <td>{{totals.n_excluded}}</td>
+ {% if arcs %}
+ <td>{{totals.n_branches}}</td>
+ <td>{{totals.n_executed_branches}}</td>
+ {% endif %}
+ <td class='right'>{{totals.pc_covered|format_pct}}%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+ {% for file in files %}
+ <tr class='file'>
+ <td class='name left'><a href='{{file.html_filename}}'>{{file.cu.name}}</a></td>
+ <td>{{file.nums.n_statements}}</td>
+ <td>{{file.nums.n_executed}}</td>
+ <td>{{file.nums.n_excluded}}</td>
+ {% if arcs %}
+ <td>{{file.nums.n_branches}}</td>
+ <td>{{file.nums.n_executed_branches}}</td>
+ {% endif %}
+ <td class='right'>{{file.nums.pc_covered|format_pct}}%</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='{{__url__}}'>coverage.py v{{__version__}}</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/coverage/htmlfiles/pyfile.html b/coverage/htmlfiles/pyfile.html
index 62518ba..ec69556 100644
--- a/coverage/htmlfiles/pyfile.html
+++ b/coverage/htmlfiles/pyfile.html
@@ -1,59 +1,47 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
-<title>Coverage for {{cu.name|escape}}</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script type='text/javascript' src='jquery-1.3.2.min.js'></script>
-<script type='text/javascript'>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- var hide = "hide_"+cls;
- if (btn.hasClass(hide)) {
- $("#source ."+cls).removeClass(hide);
- btn.removeClass(hide);
- }
- else {
- $("#source ."+cls).addClass(hide);
- btn.addClass(hide);
- }
-}
-</script>
-</head>
-<body>
-<div id='header'>
- <div class='content'>
- <h1>Coverage for <b>{{cu.name|escape}}</b> :
- <span class='pc_cov'>{{nums.pc_covered|format_pct}}%</span>
- </h1>
- <h2 class='stats'>
- {{nums.n_statements}} statements
- <span class='{{c_run.strip}}' onclick='toggle_lines(this, "run")'>{{nums.n_executed}} run</span>
- <span class='{{c_exc.strip}}' onclick='toggle_lines(this, "exc")'>{{nums.n_excluded}} excluded</span>
- <span class='{{c_mis.strip}}' onclick='toggle_lines(this, "mis")'>{{nums.n_missing}} missing</span>
- {% if arcs %}
- <span class='{{c_par.strip}}' onclick='toggle_lines(this, "par")'>{{n_par}} partial</span>
- {% endif %}
- </h2>
- </div>
-</div>
-
-<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
- {% for line in lines %}
- <p class='{{line.class}}'>{{line.number}}</p>
- {% endfor %}
-</td>
-<td class='text' valign='top'>
- {% for line in lines %}
- <p class='{{line.class}}'>{% if line.annotate %}<span class='annotate' title='{{line.annotate_title}}'>{{line.annotate}}</span>{% endif %}{{line.html}}<span class='strut'>&nbsp;</span></p>
- {% endfor %}
-</td>
-</tr>
-</table>
-</div>
-
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for {{cu.name|escape}}: {{nums.pc_covered|format_pct}}%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>{{cu.name|escape}}</b> :
+ <span class='pc_cov'>{{nums.pc_covered|format_pct}}%</span>
+ </h1>
+ <h2 class='stats'>
+ {{nums.n_statements}} statements
+ <span class='{{c_run}}' onclick='toggle_lines(this, "run")'>{{nums.n_executed}} run</span>
+ <span class='{{c_exc}}' onclick='toggle_lines(this, "exc")'>{{nums.n_excluded}} excluded</span>
+ <span class='{{c_mis}}' onclick='toggle_lines(this, "mis")'>{{nums.n_missing}} missing</span>
+ {% if arcs %}
+ <span class='{{c_par}}' onclick='toggle_lines(this, "par")'>{{n_par}} partial</span>
+ {% endif %}
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+ {% for line in lines %}
+ <p id='n{{line.number}}' class='{{line.class}}'>{{line.number}}</p>
+ {% endfor %}
+ </td>
+ <td class='text' valign='top'>
+ {% for line in lines %}
+ <p id='t{{line.number}}' class='{{line.class}}'>{% if line.annotate %}<span class='annotate' title='{{line.annotate_title}}'>{{line.annotate}}</span>{% endif %}{{line.html}}<span class='strut'>&nbsp;</span></p>
+ {% endfor %}
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/coverage/htmlfiles/style.css b/coverage/htmlfiles/style.css
index b2987ea..25e7d11 100644
--- a/coverage/htmlfiles/style.css
+++ b/coverage/htmlfiles/style.css
@@ -20,7 +20,7 @@ body {
html>body {
font-size: 16px;
- }
+ }
/* Set base font size to 12/16 */
p {
@@ -115,7 +115,7 @@ td.text {
margin: 0;
padding: 0 0 0 .5em;
border-left: 2px solid #ffffff;
- white-space: nowrap;
+ white-space: nowrap;
}
.text p.mis {
diff --git a/coverage/misc.py b/coverage/misc.py
index 0e6bcf9..4218536 100644
--- a/coverage/misc.py
+++ b/coverage/misc.py
@@ -60,6 +60,14 @@ def expensive(fn):
return _wrapped
+def bool_or_none(b):
+ """Return bool(b), but preserve None."""
+ if b is None:
+ return None
+ else:
+ return bool(b)
+
+
class CoverageException(Exception):
"""An exception specific to Coverage."""
pass
@@ -67,3 +75,11 @@ class CoverageException(Exception):
class NoSource(CoverageException):
"""Used to indicate we couldn't find the source for a module."""
pass
+
+class ExceptionDuringRun(CoverageException):
+ """An exception happened while running customer code.
+
+ Construct it with three arguments, the values from `sys.exc_info`.
+
+ """
+ pass
diff --git a/coverage/parser.py b/coverage/parser.py
index 43f691f..aea05f3 100644
--- a/coverage/parser.py
+++ b/coverage/parser.py
@@ -256,6 +256,11 @@ OPS_CHUNK_END = _opcode_set(
'BREAK_LOOP', 'CONTINUE_LOOP',
)
+# Opcodes that unconditionally begin a new code chunk. By starting new chunks
+# with unconditional jump instructions, we neatly deal with jumps to jumps
+# properly.
+OPS_CHUNK_BEGIN = _opcode_set('JUMP_ABSOLUTE', 'JUMP_FORWARD')
+
# Opcodes that push a block on the block stack.
OPS_PUSH_BLOCK = _opcode_set('SETUP_LOOP', 'SETUP_EXCEPT', 'SETUP_FINALLY')
@@ -310,7 +315,7 @@ class ByteParser(object):
return map(lambda c: ByteParser(code=c), CodeObjects(self.code))
# Getting numbers from the lnotab value changed in Py3.0.
- if sys.hexversion >= 0x03000000:
+ if sys.version_info >= (3, 0):
def _lnotab_increments(self, lnotab):
"""Return a list of ints from the lnotab bytes in 3.x"""
return list(lnotab)
@@ -399,12 +404,20 @@ class ByteParser(object):
ult = penult = None
for bc in ByteCodes(self.code.co_code):
- # Maybe have to start a new block
+ # Maybe have to start a new chunk
if bc.offset in bytes_lines_map:
+ # Start a new chunk for each source line number.
if chunk:
chunk.exits.add(bc.offset)
chunk = Chunk(bc.offset, bytes_lines_map[bc.offset])
chunks.append(chunk)
+ elif bc.op in OPS_CHUNK_BEGIN:
+ # Jumps deserve their own unnumbered chunk. This fixes
+ # problems with jumps to jumps getting confused.
+ if chunk:
+ chunk.exits.add(bc.offset)
+ chunk = Chunk(bc.offset)
+ chunks.append(chunk)
if not chunk:
chunk = Chunk(bc.offset)
diff --git a/coverage/phystokens.py b/coverage/phystokens.py
index 5824b9b..60b8793 100644
--- a/coverage/phystokens.py
+++ b/coverage/phystokens.py
@@ -77,7 +77,8 @@ def source_token_lines(source):
ws_tokens = [token.INDENT, token.DEDENT, token.NEWLINE, tokenize.NL]
line = []
col = 0
- tokgen = tokenize.generate_tokens(StringIO(source.expandtabs(8)).readline)
+ source = source.expandtabs(8).replace('\r\n', '\n')
+ tokgen = tokenize.generate_tokens(StringIO(source).readline)
for ttype, ttext, (_, scol), (_, ecol), _ in phys_tokens(tokgen):
mark_start = True
for part in re.split('(\n)', ttext):
diff --git a/coverage/summary.py b/coverage/summary.py
index f4d3c2c..3db7b76 100644
--- a/coverage/summary.py
+++ b/coverage/summary.py
@@ -58,7 +58,7 @@ class SummaryReporter(Reporter):
args += (analysis.missing_formatted(),)
outfile.write(fmt_coverage % args)
total += nums
- except KeyboardInterrupt: #pragma: no cover
+ except KeyboardInterrupt: # pragma: no cover
raise
except:
if not self.ignore_errors:
diff --git a/coverage/templite.py b/coverage/templite.py
index d3c673c..c39e061 100644
--- a/coverage/templite.py
+++ b/coverage/templite.py
@@ -101,14 +101,14 @@ class Templite(object):
# Run it through an engine, and return the result.
engine = _TempliteEngine(ctx)
engine.execute(self.ops)
- return engine.result
+ return "".join(engine.result)
class _TempliteEngine(object):
"""Executes Templite objects to produce strings."""
def __init__(self, context):
self.context = context
- self.result = ""
+ self.result = []
def execute(self, ops):
"""Execute `ops` in the engine.
@@ -118,10 +118,10 @@ class _TempliteEngine(object):
"""
for op, args in ops:
if op == 'lit':
- self.result += args
+ self.result.append(args)
elif op == 'exp':
try:
- self.result += str(self.evaluate(args))
+ self.result.append(str(self.evaluate(args)))
except:
exc_class, exc, _ = sys.exc_info()
new_exc = exc_class("Couldn't evaluate {{ %s }}: %s"
diff --git a/doc/api.rst b/doc/api.rst
index 98187a8..fe4c3ac 100644
--- a/doc/api.rst
+++ b/doc/api.rst
@@ -6,11 +6,12 @@ Coverage API
:history: 20090524T134300, brand new docs.
:history: 20090613T164000, final touches for 3.0
+:history: 20100221T151500, docs for 3.3 (on the plane back from PyCon)
The API to coverage.py is very simple, contained in a single module called
-coverage containing a single class, also called coverage. Methods on the
-coverage object correspond to operations available in the command line
-interface. For example, a simple use would be::
+`coverage`. Most of the interface is in a single class, also called
+`coverage`. Methods on the coverage object correspond to operations available
+in the command line interface. For example, a simple use would be::
import coverage
@@ -30,3 +31,12 @@ The coverage module
.. autoclass:: coverage
:members:
+
+
+Starting coverage automatically
+-------------------------------
+
+This function is used to start coverage measurement automatically when Python
+starts. See :ref:`subprocess` for details.
+
+.. autofunction:: process_startup
diff --git a/doc/branch.rst b/doc/branch.rst
index 7e15603..7168131 100644
--- a/doc/branch.rst
+++ b/doc/branch.rst
@@ -6,6 +6,9 @@ Branch coverage measurement
:history: 20091127T201300, new for version 3.2
+.. highlight:: python
+ :linenothreshold: 5
+
Coverage.py now supports branch coverage measurement. Where a line in your
program could jump to more than one next line, coverage.py tracks which of
@@ -47,8 +50,7 @@ that were missing some branches are shown in yellow, with an annotation at the
far right showing branch destination line numbers that were not exercised.
The XML report produced by ``coverage xml`` also includes branch information,
-including separate statement and branch coverage percentages. Each line is
-annotated with
+including separate statement and branch coverage percentages.
How it works
diff --git a/doc/changes.rst b/doc/changes.rst
index bdf0ac7..4b64e20 100644
--- a/doc/changes.rst
+++ b/doc/changes.rst
@@ -1,141 +1,187 @@
-.. _change:
-
-====================================
-Major change history for coverage.py
-====================================
-
-:history: 20090524T134300, brand new docs.
-:history: 20090613T164000, final touches for 3.0
-:history: 20090706T205000, changes for 3.0.1
-:history: 20091004T170700, changes for 3.1
-:history: 20091128T072200, changes for 3.2
-
-
-These are the major changes for coverage.py. For a more complete change
-history, see the `CHANGES.txt`_ file in the source tree.
-
-.. _CHANGES.txt: http://bitbucket.org/ned/coveragepy/src/tip/CHANGES.txt
-
-
-Version 3.2
------------
-
-- Branch coverage: coverage.py can tell you which branches didn't have both
- choices executed, even where the choice doesn't affect which lines were
- executed. See :ref:`Branch Coverage <branch>` for more details.
-
-- The table of contents in the HTML report is now sortable: click the headers
- on any column. The sorting is persisted so that subsequent reports are
- sorted as you wish. Thanks, `Chris Adams`_.
-
-- XML reporting has file paths that let Cobertura find the source code, fixing
- `issue 21`_.
-
-- The ``--omit`` option now works much better than before, fixing `issue 14` and
- `issue 33`_. Thanks, Danek Duvall.
-
-- The tracer code has changed, it's a few percent faster.
-
-- Some exceptions reported by the command line interface have been cleaned up
- so that tracebacks inside coverage.py aren't shown. Fixes `issue 23`_.
-
-- Fixed some problems syntax coloring sources with line continuations and
- source with tabs: `issue 30`_ and `issue 31`_.
-
-.. _Chris Adams: http://improbable.org/chris/
-.. _issue 21: http://bitbucket.org/ned/coveragepy/issue/21
-.. _issue 23: http://bitbucket.org/ned/coveragepy/issue/23
-.. _issue 14: http://bitbucket.org/ned/coveragepy/issue/14
-.. _issue 30: http://bitbucket.org/ned/coveragepy/issue/30
-.. _issue 31: http://bitbucket.org/ned/coveragepy/issue/31
-.. _issue 33: http://bitbucket.org/ned/coveragepy/issue/33
-
-
-Version 3.1, 4 October 2009
----------------------------
-
-- Python 3.1 is now supported.
-
-- Coverage.py has a new command line syntax with sub-commands. This expands
- the possibilities for adding features and options in the future. The old
- syntax is still supported. Try ``coverage help`` to see the new commands.
- Thanks to Ben Finney for early help.
-
-- Added an experimental ``coverage xml`` command for producing coverage reports
- in a Cobertura-compatible XML format. Thanks, Bill Hart.
-
-- Added the ``--timid`` option to enable a simpler slower trace function that
- works for DecoratorTools projects, including TurboGears. Fixed `issue 12`_
- and `issue 13`_.
-
-- HTML reports now display syntax-colored Python source.
-
-- Added a ``coverage debug`` command for getting diagnostic information about the
- coverage.py installation.
-
-- Source code can now be read from eggs. Thanks, `Ross Lawley`_. Fixes
- `issue 25`_.
-
-.. _Ross Lawley: http://agileweb.org/
-.. _issue 25: http://bitbucket.org/ned/coveragepy/issue/25
-.. _issue 12: http://bitbucket.org/ned/coveragepy/issue/12
-.. _issue 13: http://bitbucket.org/ned/coveragepy/issue/13
-
-
-Version 3.0.1, 7 July 2009
---------------------------
-
-- Removed the recursion limit in the tracer function. Previously, code that
- ran more than 500 frames deep would crash.
-
-- Fixed a bizarre problem involving pyexpat, whereby lines following XML parser
- invocations could be overlooked.
-
-- On Python 2.3, coverage.py could mis-measure code with exceptions being
- raised. This is now fixed.
-
-- The coverage.py code itself will now not be measured by coverage.py, and no
- coverage modules will be mentioned in the nose ``--with-cover`` plugin.
-
-- When running source files, coverage.py now opens them in universal newline
- mode just like Python does. This lets it run Windows files on Mac, for
- example.
-
-
-Version 3.0, 13 June 2009
--------------------------
-
-- Coverage is now a package rather than a module. Functionality has been split
- into classes.
-
-- HTML reports and annotation of source files: use the new ``-b`` (browser)
- switch. Thanks to George Song for code, inspiration and guidance.
-
-- The trace function is implemented in C for speed. Coverage runs are now
- much faster. Thanks to David Christian for productive micro-sprints and
- other encouragement.
-
-- The minimum supported Python version is 2.3.
-
-- When using the object api (that is, constructing a coverage() object), data
- is no longer saved automatically on process exit. You can re-enable it with
- the ``auto_data=True`` parameter on the coverage() constructor.
- The module-level interface still uses automatic saving.
-
-- Code in the Python standard library is not measured by default. If you need
- to measure standard library code, use the ``-L`` command-line switch during
- execution, or the ``cover_pylib=True`` argument to the coverage() constructor.
-
-- API changes:
-
- - Added parameters to coverage.__init__ for options that had been set on
- the coverage object itself.
-
- - Added clear_exclude() and get_exclude_list() methods for programmatic
- manipulation of the exclude regexes.
-
- - Added coverage.load() to read previously-saved data from the data file.
-
- - coverage.annotate_file is no longer available.
-
- - Removed the undocumented cache_file argument to coverage.usecache().
+.. _change:
+
+====================================
+Major change history for coverage.py
+====================================
+
+:history: 20090524T134300, brand new docs.
+:history: 20090613T164000, final touches for 3.0
+:history: 20090706T205000, changes for 3.0.1
+:history: 20091004T170700, changes for 3.1
+:history: 20091128T072200, changes for 3.2
+:history: 20091205T161525, 3.2 final
+:history: 20100221T151900, changes for 3.3
+:history: 20100306T181400, changes for 3.3.1
+
+These are the major changes for coverage.py. For a more complete change
+history, see the `CHANGES.txt`_ file in the source tree.
+
+.. _CHANGES.txt: http://bitbucket.org/ned/coveragepy/src/tip/CHANGES.txt
+
+
+Version 3.3.1, 6 March 2010
+---------------------------
+
+- Using ``parallel=True`` in a .coveragerc file prevented reporting, but now
+ does not, fixing `issue 49`_.
+
+- When running your code with ``coverage run``, if you call ``sys.exit()``,
+ coverage.py will exit with that status code, fixing `issue 50`_.
+
+.. _issue 49: http://bitbucket.org/ned/coveragepy/issue/49
+.. _issue 50: http://bitbucket.org/ned/coveragepy/issue/50
+
+
+Version 3.3, 24 February 2010
+-----------------------------
+
+- Settings are now read from a .coveragerc file. A specific file can be
+ specified on the command line with ``--rcfile=FILE``. The name of the file
+ can be programmatically set with the ``config_file`` argument to the
+ coverage() constructor, or reading a config file can be disabled with
+ ``config_file=False``.
+
+- Added coverage.process_start to enable coverage measurement when Python
+ starts.
+
+- Parallel data file names now have a random number appended to them in
+ addition to the machine name and process id. Also, parallel data files
+ combined with ``coverage combine`` are deleted after they're combined, to
+ clean up unneeded files. Fixes `issue 40`_.
+
+- Exceptions thrown from product code run with ``coverage run`` are now
+ displayed without internal coverage.py frames, so the output is the same as
+ when the code is run without coverage.py.
+
+- Fixed `issue 39`_ and `issue 47`_.
+
+.. _issue 39: http://bitbucket.org/ned/coveragepy/issue/39
+.. _issue 40: http://bitbucket.org/ned/coveragepy/issue/40
+.. _issue 47: http://bitbucket.org/ned/coveragepy/issue/47
+
+
+Version 3.2, 5 December 2009
+----------------------------
+
+- Branch coverage: coverage.py can tell you which branches didn't have both (or
+ all) choices executed, even where the choice doesn't affect which lines were
+ executed. See :ref:`Branch Coverage <branch>` for more details.
+
+- The table of contents in the HTML report is now sortable: click the headers
+ on any column. The sorting is persisted so that subsequent reports are
+ sorted as you wish. Thanks, `Chris Adams`_.
+
+- XML reporting has file paths that let Cobertura find the source code, fixing
+ `issue 21`_.
+
+- The ``--omit`` option now works much better than before, fixing `issue 14`_
+ and `issue 33`_. Thanks, Danek Duvall.
+
+- Added a ``--version`` option on the command line.
+
+- Program execution under coverage is a few percent faster.
+
+- Some exceptions reported by the command line interface have been cleaned up
+ so that tracebacks inside coverage.py aren't shown. Fixes `issue 23`_.
+
+- Fixed some problems syntax coloring sources with line continuations and
+ source with tabs: `issue 30`_ and `issue 31`_.
+
+.. _Chris Adams: http://improbable.org/chris/
+.. _issue 21: http://bitbucket.org/ned/coveragepy/issue/21
+.. _issue 23: http://bitbucket.org/ned/coveragepy/issue/23
+.. _issue 14: http://bitbucket.org/ned/coveragepy/issue/14
+.. _issue 30: http://bitbucket.org/ned/coveragepy/issue/30
+.. _issue 31: http://bitbucket.org/ned/coveragepy/issue/31
+.. _issue 33: http://bitbucket.org/ned/coveragepy/issue/33
+
+
+Version 3.1, 4 October 2009
+---------------------------
+
+- Python 3.1 is now supported.
+
+- Coverage.py has a new command line syntax with sub-commands. This expands
+ the possibilities for adding features and options in the future. The old
+ syntax is still supported. Try ``coverage help`` to see the new commands.
+ Thanks to Ben Finney for early help.
+
+- Added an experimental ``coverage xml`` command for producing coverage reports
+ in a Cobertura-compatible XML format. Thanks, Bill Hart.
+
+- Added the ``--timid`` option to enable a simpler slower trace function that
+ works for DecoratorTools projects, including TurboGears. Fixed `issue 12`_
+ and `issue 13`_.
+
+- HTML reports now display syntax-colored Python source.
+
+- Added a ``coverage debug`` command for getting diagnostic information about
+ the coverage.py installation.
+
+- Source code can now be read from eggs. Thanks, `Ross Lawley`_. Fixes
+ `issue 25`_.
+
+.. _Ross Lawley: http://agileweb.org/
+.. _issue 25: http://bitbucket.org/ned/coveragepy/issue/25
+.. _issue 12: http://bitbucket.org/ned/coveragepy/issue/12
+.. _issue 13: http://bitbucket.org/ned/coveragepy/issue/13
+
+
+Version 3.0.1, 7 July 2009
+--------------------------
+
+- Removed the recursion limit in the tracer function. Previously, code that
+ ran more than 500 frames deep would crash.
+
+- Fixed a bizarre problem involving pyexpat, whereby lines following XML parser
+ invocations could be overlooked.
+
+- On Python 2.3, coverage.py could mis-measure code with exceptions being
+ raised. This is now fixed.
+
+- The coverage.py code itself will now not be measured by coverage.py, and no
+ coverage modules will be mentioned in the nose ``--with-cover`` plugin.
+
+- When running source files, coverage.py now opens them in universal newline
+ mode just like Python does. This lets it run Windows files on Mac, for
+ example.
+
+
+Version 3.0, 13 June 2009
+-------------------------
+
+- Coverage is now a package rather than a module. Functionality has been split
+ into classes.
+
+- HTML reports and annotation of source files: use the new ``-b`` (browser)
+ switch. Thanks to George Song for code, inspiration and guidance.
+
+- The trace function is implemented in C for speed. Coverage runs are now
+ much faster. Thanks to David Christian for productive micro-sprints and
+ other encouragement.
+
+- The minimum supported Python version is 2.3.
+
+- When using the object api (that is, constructing a coverage() object), data
+ is no longer saved automatically on process exit. You can re-enable it with
+ the ``auto_data=True`` parameter on the coverage() constructor.
+ The module-level interface still uses automatic saving.
+
+- Code in the Python standard library is not measured by default. If you need
+ to measure standard library code, use the ``-L`` command-line switch during
+ execution, or the ``cover_pylib=True`` argument to the coverage()
+ constructor.
+
+- API changes:
+
+ - Added parameters to coverage.__init__ for options that had been set on
+ the coverage object itself.
+
+ - Added clear_exclude() and get_exclude_list() methods for programmatic
+ manipulation of the exclude regexes.
+
+ - Added coverage.load() to read previously-saved data from the data file.
+
+ - coverage.annotate_file is no longer available.
+
+ - Removed the undocumented cache_file argument to coverage.usecache().
diff --git a/doc/cmd.rst b/doc/cmd.rst
index ab93845..08a966e 100644
--- a/doc/cmd.rst
+++ b/doc/cmd.rst
@@ -9,6 +9,7 @@ Coverage command line usage
:history: 20090913T084400, new command line syntax
:history: 20091004T170700, changes for 3.1
:history: 20091127T200700, changes for 3.2
+:history: 20100223T200600, changes for 3.3
.. highlight:: console
@@ -35,6 +36,12 @@ which determine the action performed:
Help is available with ``coverage help``, or with the ``--help`` switch on any
other command.
+Version information for coverage.py can be displayed with ``--version``.
+
+Any command can use a configuration file by specifying it with the
+``--rcfile=FILE`` command-line switch. See :ref:`Configuration Files <config>`
+for more details.
+
Execution
---------
diff --git a/doc/conf.py b/doc/conf.py
index 4a787f1..9c39b85 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -40,16 +40,16 @@ master_doc = 'index'
# General information about the project.
project = u'coverage.py'
-copyright = u'2009, Ned Batchelder'
+copyright = u'2009-2010, Ned Batchelder'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
-version = '3.2'
+version = '3.3.1'
# The full version, including alpha/beta/rc tags.
-release = '3.2'
+release = '3.3.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/doc/config.rst b/doc/config.rst
new file mode 100644
index 0000000..ada6d08
--- /dev/null
+++ b/doc/config.rst
@@ -0,0 +1,119 @@
+.. _config:
+
+===================
+Configuration files
+===================
+
+:history: 20100223T201600, new for 3.3
+
+Coverage.py options can be specified in a configuration file. This makes it
+easier to re-run coverage with consistent settings, and also allows for
+specification of options that are otherwise only available in the
+:ref:`API <api>`.
+
+Configuration files also make it easier to get coverage testing of spawned
+sub-processes. See :ref:`Subprocess measurement <subprocess>` for more details.
+
+
+
+Syntax
+------
+
+A coverage.py configuration file is in classic .ini file format: sections are
+introduced by a ``[section]`` header, and contain ``name = value`` entries.
+Lines beginning with ``#`` or ``;`` are ignored as comments.
+
+Strings don't need quotes. Multi-strings can be created by indenting values on
+multiple lines.
+
+Boolean values can be specified as ``on``, ``off``, ``true``, ``false``, ``1``,
+or ``0`` and are case-insensitive.
+
+Many sections and values correspond roughly to commands and options in the
+command-line interface.
+
+Here's a sample configuration file::
+
+ # .coveragerc to control coverage.py
+ [run]
+ branch = True
+
+ [report]
+ # Regexes for lines to exclude from consideration
+ exclude_lines =
+ # Have to re-enable the standard pragma
+ pragma: no cover
+
+ # Don't complain about missing debug-only code:
+ def __repr__
+ if self\.debug
+
+ # Don't complain if tests don't hit defensive assertion code:
+ raise AssertionError
+ raise NotImplementedError
+
+ # Don't complain if non-runnable code isn't run:
+ if 0:
+ if __name__ == .__main__.:
+
+ ignore_errors = True
+
+ [html]
+ directory = coverage_html_report
+
+
+[run]
+-----
+
+These values are generally used when running product code, though some apply
+to more than one command.
+
+``branch`` (boolean, default False): whether to measure
+:ref:`branch coverage <branch>` in addition to statement coverage.
+
+``cover_pylib`` (boolean, default False): whether to measure the Python
+standard library.
+
+``data_file`` (string, default ".coverage"): the name of the data file to use
+for storing or reporting coverage.
+
+``parallel`` (boolean, default False): append the machine name, process
+id and random number to the data file name to simplify collecting data from
+many processes.
+
+``timid`` (boolean, default False): use a simpler but slower trace method.
+Try this if you get seemingly impossible results.
+
+
+[report]
+--------
+
+Values common to many kinds of reporting.
+
+``exclude_lines`` (multi-string): a list of regular expressions. Any line of
+your source code that matches one of these regexes is excluded from being
+reported as missing. More details are in :ref:`excluding`. If you use this
+option, you are replacing all the exclude regexes, so you'll need to also
+supply the "pragma: no cover" regex if you still want to use it.
+
+``ignore_errors`` (boolean, default False): ignore source code that can't be
+found.
+
+``omit`` (multi-string): a list of file prefixes. If a source file begins with
+one of these prefixes, it will be omitted from the report.
+
+
+[html]
+------
+
+Values particular to HTML reporting.
+
+``directory`` (string, default "htmlcov"): where to write the HTML report files.
+
+
+[xml]
+-----
+
+Values particular to XML reporting.
+
+``output`` (string, default "coverage.xml"): where to write the XML report.
diff --git a/doc/excluding.rst b/doc/excluding.rst
index 1b91fc9..55acebe 100644
--- a/doc/excluding.rst
+++ b/doc/excluding.rst
@@ -5,6 +5,8 @@ Excluding code from coverage
============================
:history: 20090613T090500, brand new docs.
+:history: 20100224T200900, updated for 3.3.
+
You may have code in your project that you know won't be executed, and you want
to tell coverage to ignore it. For example, you may have debugging-only code
@@ -61,23 +63,31 @@ Advanced exclusion
------------------
Coverage identifies exclusions by matching lines against a list of regular
-expressions. Using the coverage :ref:`API <api>`, you can add to that list.
-This is useful if you have often-used constructs to exclude that can be matched
-with a regex. You can exclude them all at once without littering your code with
-exclusion pragmas.
+expressions. Using :ref:`configuration files <config>` or the coverage
+:ref:`API <api>`, you can add to that list. This is useful if you have
+often-used constructs to exclude that can be matched with a regex. You can
+exclude them all at once without littering your code with exclusion pragmas.
For example, you might decide that __repr__ functions are usually only used
in debugging code, and are uninteresting to test themselves. You could exclude
all of them by adding a regex to the exclusion list::
- coverage.exclude('def __repr__')
+ [report]
+ exclude_lines = def __repr__
Here's a list of exclusions I've used::
- coverage.exclude('def __repr__')
- coverage.exclude('if self.debug:')
- coverage.exclude('if settings.DEBUG')
- coverage.exclude('raise AssertionError')
- coverage.exclude('raise NotImplementedError')
- coverage.exclude('if 0:')
- coverage.exclude('if __name__ == .__main__.:')
+ [report]
+ exclude_lines =
+ pragma: no cover
+ def __repr__
+ if self.debug:
+ if settings.DEBUG
+ raise AssertionError
+ raise NotImplementedError
+ if 0:
+ if __name__ == .__main__.:
+
+Note that when using the ``exclude_lines`` option in a configuration file, you
+are taking control of the entire list of regexes, so you need to re-specify the
+default "pragma: no cover" match if you still want it to apply.
diff --git a/doc/faq.rst b/doc/faq.rst
index 605a2d2..9661d03 100644
--- a/doc/faq.rst
+++ b/doc/faq.rst
@@ -61,6 +61,25 @@ It's good, but `it isn't perfect`__.
__ http://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html
+.. Other resources
+ ---------------
+
+ There are a number of projects that help integrate coverage.py into other
+ systems:
+
+ - `trialcoverage`_ is a plug-in for Twisted trial.
+
+ .. _trialcoverage: http://pypi.python.org/pypi/trialcoverage
+
+ - `pytest-coverage`_
+
+ .. _pytest-coverage: http://pypi.python.org/pypi/pytest-coverage
+
+ - `django-coverage`_ for use with Django.
+
+ .. _django-coverage: http://pypi.python.org/pypi/django-coverage
+
+
Getting more help
-----------------
diff --git a/doc/index.rst b/doc/index.rst
index 5acbc9e..6ce3e82 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,112 +1,118 @@
-===========
-coverage.py
-===========
-
-:history: 20090524T134300, brand new docs.
-:history: 20090613T164000, final touches for 3.0
-:history: 20090618T195900, minor tweaks
-:history: 20090707T205200, changes for 3.0.1
-:history: 20090913T084400, new command line syntax
-:history: 20091004T211900, version 3.1
-:history: 20091127T155100, version 3.2
-
-
-Coverage.py is a tool for measuring code coverage of Python programs. It
-monitors your program, noting which parts of the code have been executed, then
-analyzes the source to identify code that could have been executed but was not.
-
-Coverage measurement is typically used to gauge the effectiveness of tests. It
-can show which parts of your product code are being exercised by tests, and
-which are not.
-
-The latest version is 3.2, released ?? November 2009.
-It is supported on Python 2.3 through 3.1.
-
-
-Quick start
------------
-
-Getting started is easy:
-
-#. Install coverage.py from the `coverage page on the Python Package Index`__,
- or by using "easy_install coverage". You may need to install the
- python-dev support files, for example with "apt-get install python-dev".
-
-#. Use ``coverage run`` to execute your program and gather data:
-
- .. code-block:: console
-
- $ coverage run my_program.py arg1 arg2
- blah blah ..your program's output.. blah blah
-
-#. Use ``coverage report`` to report on the results:
-
- .. code-block:: console
-
- $ coverage report -m
- Name Stmts Exec Cover Missing
- -------------------------------------------------------
- my_program 20 16 80% 33-35, 39
- my_other_module 56 50 89% 17-23
- -------------------------------------------------------
- TOTAL 76 66 87%
-
-#. For a nicer presentation, use ``coverage html`` to get annotated HTML
- listings detailing missed lines:
-
- .. code-block:: console
-
- $ coverage html -d htmlcov
-
- Then visit htmlcov/index.html in your browser, to see a
- `report like this`__.
-
-__ http://pypi.python.org/pypi/coverage
-__ /code/coverage/sample_html/index.html
-
-
-Using coverage.py
------------------
-
-There are a few different ways to use coverage.py. The simplest is the
-:ref:`command line <cmd>`, which lets you run your program and see the results.
-If you need more control over how your project is measured, you can use the
-:ref:`API <api>`.
-
-Some test runners provide coverage integration to make it easy to use coverage
-while running tests. For example, `nose`_ has a `cover plug-in`_.
-
-You can fine-tune coverage's view of your code by directing it to ignore parts
-that you know aren't interesting. See :ref:`Excluding Code <excluding>` for
-details.
-
-.. _nose: http://somethingaboutorange.com/mrl/projects/nose
-.. _cover plug-in: http://somethingaboutorange.com/mrl/projects/nose/0.11.1/plugins/cover.html
-
-
-History
--------
-
-Coverage.py was originally written by `Gareth Rees`_.
-Since 2004, `Ned Batchelder`_ has maintained and extended it.
-
-.. _Gareth Rees: http://garethrees.org/
-.. _Ned Batchelder: http://nedbatchelder.com
-
-
-More information
-----------------
-
-.. toctree::
- :maxdepth: 1
-
- cmd
- api
- excluding
- branch
- faq
- changes
-
-
-.. How it works
-.. .coverage file format
+===========
+coverage.py
+===========
+
+:history: 20090524T134300, brand new docs.
+:history: 20090613T164000, final touches for 3.0
+:history: 20090618T195900, minor tweaks
+:history: 20090707T205200, changes for 3.0.1
+:history: 20090913T084400, new command line syntax
+:history: 20091004T211900, version 3.1
+:history: 20091127T155100, version 3.2
+:history: 20091205T161429, version 3.2 for real.
+:history: 20100224T204700, version 3.3
+:history: 20100306T181500, version 3.3.1
+
+Coverage.py is a tool for measuring code coverage of Python programs. It
+monitors your program, noting which parts of the code have been executed, then
+analyzes the source to identify code that could have been executed but was not.
+
+Coverage measurement is typically used to gauge the effectiveness of tests. It
+can show which parts of your product code are being exercised by tests, and
+which are not.
+
+The latest version is 3.3.1, released 6 March 2010.
+It is supported on Python 2.3 through 3.1.
+
+
+Quick start
+-----------
+
+Getting started is easy:
+
+#. Install coverage.py from the `coverage page on the Python Package Index`__,
+ or by using "easy_install coverage". You may need to install the
+ python-dev support files, for example with "apt-get install python-dev".
+
+#. Use ``coverage run`` to execute your program and gather data:
+
+ .. code-block:: console
+
+ $ coverage run my_program.py arg1 arg2
+ blah blah ..your program's output.. blah blah
+
+#. Use ``coverage report`` to report on the results:
+
+ .. code-block:: console
+
+ $ coverage report -m
+ Name Stmts Exec Cover Missing
+ -------------------------------------------------------
+ my_program 20 16 80% 33-35, 39
+ my_other_module 56 50 89% 17-23
+ -------------------------------------------------------
+ TOTAL 76 66 87%
+
+#. For a nicer presentation, use ``coverage html`` to get annotated HTML
+ listings detailing missed lines:
+
+ .. code-block:: console
+
+ $ coverage html
+
+ Then visit htmlcov/index.html in your browser, to see a
+ `report like this`__.
+
+__ http://pypi.python.org/pypi/coverage
+__ /code/coverage/sample_html/index.html
+
+
+Using coverage.py
+-----------------
+
+There are a few different ways to use coverage.py. The simplest is the
+:ref:`command line <cmd>`, which lets you run your program and see the results.
+If you need more control over how your project is measured, you can use the
+:ref:`API <api>`.
+
+Some test runners provide coverage integration to make it easy to use coverage
+while running tests. For example, `nose`_ has a `cover plug-in`_.
+
+You can fine-tune coverage's view of your code by directing it to ignore parts
+that you know aren't interesting. See :ref:`Excluding Code <excluding>` for
+details.
+
+.. _nose: http://somethingaboutorange.com/mrl/projects/nose
+.. _cover plug-in: http://somethingaboutorange.com/mrl/projects/nose/0.11.1/plugins/cover.html
+
+
+History
+-------
+
+Coverage.py was originally written by `Gareth Rees`_.
+Since 2004, `Ned Batchelder`_ has extended and maintained it with the help of
+`many others`_.
+
+.. _Gareth Rees: http://garethrees.org/
+.. _Ned Batchelder: http://nedbatchelder.com
+.. _many others: http://bitbucket.org/ned/coveragepy/src/tip/AUTHORS.txt
+
+
+More information
+----------------
+
+.. toctree::
+ :maxdepth: 1
+
+ cmd
+ config
+ api
+ excluding
+ branch
+ subprocess
+ faq
+ changes
+
+
+.. How it works
+.. .coverage file format
diff --git a/doc/sample_html/README.txt b/doc/sample_html/README.txt
index c1e4982..2d3cd4a 100644
--- a/doc/sample_html/README.txt
+++ b/doc/sample_html/README.txt
@@ -1,5 +1,5 @@
-This directory was made with::
-
- cd C:\ned\cog\trunk
- coverage -e -x cogapp\test_cogapp.py CogTestsInMemory
- coverage -b -i -d htmlcov
+This directory was made with::
+
+ cd C:\ned\cog\trunk
+ coverage run --branch cogapp\test_cogapp.py CogTestsInMemory
+ coverage html -i -d htmlcov
diff --git a/doc/sample_html/_ned_py_path.html b/doc/sample_html/_ned_py_path.html
index 78637ee..72f1d75 100644
--- a/doc/sample_html/_ned_py_path.html
+++ b/doc/sample_html/_ned_py_path.html
@@ -1,1507 +1,1500 @@
-<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<title>Coverage for c:\ned\py\path</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script src='jquery-1.3.2.min.js'></script>
-<script>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- if (btn.hasClass("hide")) {
- $("#source ."+cls).removeClass("hide");
- btn.removeClass("hide");
- }
- else {
- $("#source ."+cls).addClass("hide");
- btn.addClass("hide");
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for c:\ned\py\path: 35%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>c:\ned\py\path</b> :
- <span class='pc_cov'>40%</span>
+ <span class='pc_cov'>35%</span>
</h1>
<h2 class='stats'>
286 statements
- <span class='run hide' onclick='toggle_lines(this, "run")'>114 run</span>
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>114 run</span>
<span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
<span class='mis' onclick='toggle_lines(this, "mis")'>172 missing</span>
+
+ <span class='par run hide_run' onclick='toggle_lines(this, "par")'>22 partial</span>
+
</h2>
</div>
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='pln'>3</p>
-<p class='pln'>4</p>
-<p class='pln'>5</p>
-<p class='pln'>6</p>
-<p class='pln'>7</p>
-<p class='pln'>8</p>
-<p class='pln'>9</p>
-<p class='pln'>10</p>
-<p class='pln'>11</p>
-<p class='pln'>12</p>
-<p class='pln'>13</p>
-<p class='pln'>14</p>
-<p class='pln'>15</p>
-<p class='pln'>16</p>
-<p class='pln'>17</p>
-<p class='pln'>18</p>
-<p class='pln'>19</p>
-<p class='pln'>20</p>
-<p class='pln'>21</p>
-<p class='pln'>22</p>
-<p class='pln'>23</p>
-<p class='pln'>24</p>
-<p class='pln'>25</p>
-<p class='pln'>26</p>
-<p class='pln'>27</p>
-<p class='pln'>28</p>
-<p class='pln'>29</p>
-<p class='pln'>30</p>
-<p class='pln'>31</p>
-<p class='stm run hide'>32</p>
-<p class='pln'>33</p>
-<p class='stm run hide'>34</p>
-<p class='pln'>35</p>
-<p class='stm run hide'>36</p>
-<p class='stm run hide'>37</p>
-<p class='pln'>38</p>
-<p class='pln'>39</p>
-<p class='stm run hide'>40</p>
-<p class='stm run hide'>41</p>
-<p class='stm run hide'>42</p>
-<p class='stm run hide'>43</p>
-<p class='stm mis'>44</p>
-<p class='stm mis'>45</p>
-<p class='pln'>46</p>
-<p class='pln'>47</p>
-<p class='stm run hide'>48</p>
-<p class='stm run hide'>49</p>
-<p class='stm mis'>50</p>
-<p class='stm mis'>51</p>
-<p class='pln'>52</p>
-<p class='pln'>53</p>
-<p class='stm run hide'>54</p>
-<p class='stm run hide'>55</p>
-<p class='stm run hide'>56</p>
-<p class='pln'>57</p>
-<p class='pln'>58</p>
-<p class='stm run hide'>59</p>
-<p class='pln'>60</p>
-<p class='pln'>61</p>
-<p class='pln'>62</p>
-<p class='pln'>63</p>
-<p class='pln'>64</p>
-<p class='pln'>65</p>
-<p class='pln'>66</p>
-<p class='pln'>67</p>
-<p class='stm run hide'>68</p>
-<p class='stm mis'>69</p>
-<p class='pln'>70</p>
-<p class='pln'>71</p>
-<p class='stm run hide'>72</p>
-<p class='stm mis'>73</p>
-<p class='pln'>74</p>
-<p class='stm run hide'>75</p>
-<p class='stm mis'>76</p>
-<p class='pln'>77</p>
-<p class='pln'>78</p>
-<p class='stm run hide'>79</p>
-<p class='pln'>80</p>
-<p class='pln'>81</p>
-<p class='pln'>82</p>
-<p class='pln'>83</p>
-<p class='pln'>84</p>
-<p class='stm mis'>85</p>
-<p class='pln'>86</p>
-<p class='pln'>87</p>
-<p class='stm run hide'>88</p>
-<p class='pln'>89</p>
-<p class='stm run hide'>90</p>
-<p class='pln'>91</p>
-<p class='stm mis'>92</p>
-<p class='stm run hide'>93</p>
-<p class='pln'>94</p>
-<p class='pln'>95</p>
-<p class='pln'>96</p>
-<p class='pln'>97</p>
-<p class='stm run hide'>98</p>
-<p class='stm run hide'>99</p>
-<p class='stm run hide'>100</p>
-<p class='stm run hide'>101</p>
-<p class='stm run hide'>102</p>
-<p class='stm run hide'>103</p>
-<p class='stm run hide'>104</p>
-<p class='stm run hide'>105</p>
-<p class='pln'>106</p>
-<p class='stm run hide'>107</p>
-<p class='pln'>108</p>
-<p class='pln'>109</p>
-<p class='pln'>110</p>
-<p class='pln'>111</p>
-<p class='pln'>112</p>
-<p class='pln'>113</p>
-<p class='stm mis'>114</p>
-<p class='pln'>115</p>
-<p class='stm run hide'>116</p>
-<p class='stm mis'>117</p>
-<p class='stm mis'>118</p>
-<p class='pln'>119</p>
-<p class='stm run hide'>120</p>
-<p class='stm mis'>121</p>
-<p class='stm mis'>122</p>
-<p class='pln'>123</p>
-<p class='stm run hide'>124</p>
-<p class='stm mis'>125</p>
-<p class='stm mis'>126</p>
-<p class='pln'>127</p>
-<p class='stm run hide'>128</p>
-<p class='pln'>129</p>
-<p class='pln'>130</p>
-<p class='pln'>131</p>
-<p class='pln'>132</p>
-<p class='pln'>133</p>
-<p class='pln'>134</p>
-<p class='stm run hide'>135</p>
-<p class='pln'>136</p>
-<p class='pln'>137</p>
-<p class='pln'>138</p>
-<p class='pln'>139</p>
-<p class='pln'>140</p>
-<p class='pln'>141</p>
-<p class='stm run hide'>142</p>
-<p class='pln'>143</p>
-<p class='pln'>144</p>
-<p class='pln'>145</p>
-<p class='pln'>146</p>
-<p class='pln'>147</p>
-<p class='pln'>148</p>
-<p class='pln'>149</p>
-<p class='stm run hide'>150</p>
-<p class='pln'>151</p>
-<p class='pln'>152</p>
-<p class='pln'>153</p>
-<p class='stm run hide'>154</p>
-<p class='pln'>155</p>
-<p class='pln'>156</p>
-<p class='pln'>157</p>
-<p class='pln'>158</p>
-<p class='pln'>159</p>
-<p class='stm run hide'>160</p>
-<p class='pln'>161</p>
-<p class='stm mis'>162</p>
-<p class='stm mis'>163</p>
-<p class='pln'>164</p>
-<p class='stm run hide'>165</p>
-<p class='pln'>166</p>
-<p class='pln'>167</p>
-<p class='pln'>168</p>
-<p class='pln'>169</p>
-<p class='pln'>170</p>
-<p class='pln'>171</p>
-<p class='stm mis'>172</p>
-<p class='stm mis'>173</p>
-<p class='pln'>174</p>
-<p class='stm run hide'>175</p>
-<p class='pln'>176</p>
-<p class='pln'>177</p>
-<p class='pln'>178</p>
-<p class='pln'>179</p>
-<p class='pln'>180</p>
-<p class='pln'>181</p>
-<p class='pln'>182</p>
-<p class='pln'>183</p>
-<p class='pln'>184</p>
-<p class='pln'>185</p>
-<p class='pln'>186</p>
-<p class='pln'>187</p>
-<p class='pln'>188</p>
-<p class='stm mis'>189</p>
-<p class='stm mis'>190</p>
-<p class='pln'>191</p>
-<p class='stm run hide'>192</p>
-<p class='pln'>193</p>
-<p class='pln'>194</p>
-<p class='pln'>195</p>
-<p class='pln'>196</p>
-<p class='pln'>197</p>
-<p class='stm mis'>198</p>
-<p class='pln'>199</p>
-<p class='stm run hide'>200</p>
-<p class='stm run hide'>201</p>
-<p class='stm mis'>202</p>
-<p class='stm mis'>203</p>
-<p class='pln'>204</p>
-<p class='stm run hide'>205</p>
-<p class='stm mis'>206</p>
-<p class='stm mis'>207</p>
-<p class='pln'>208</p>
-<p class='stm run hide'>209</p>
-<p class='pln'>210</p>
-<p class='pln'>211</p>
-<p class='pln'>212</p>
-<p class='pln'>213</p>
-<p class='stm run hide'>214</p>
-<p class='pln'>215</p>
-<p class='pln'>216</p>
-<p class='pln'>217</p>
-<p class='pln'>218</p>
-<p class='stm mis'>219</p>
-<p class='pln'>220</p>
-<p class='stm run hide'>221</p>
-<p class='pln'>222</p>
-<p class='pln'>223</p>
-<p class='pln'>224</p>
-<p class='pln'>225</p>
-<p class='pln'>226</p>
-<p class='pln'>227</p>
-<p class='pln'>228</p>
-<p class='pln'>229</p>
-<p class='pln'>230</p>
-<p class='stm mis'>231</p>
-<p class='stm mis'>232</p>
-<p class='stm mis'>233</p>
-<p class='stm mis'>234</p>
-<p class='stm mis'>235</p>
-<p class='stm mis'>236</p>
-<p class='stm mis'>237</p>
-<p class='stm mis'>238</p>
-<p class='stm mis'>239</p>
-<p class='stm mis'>240</p>
-<p class='stm mis'>241</p>
-<p class='pln'>242</p>
-<p class='stm run hide'>243</p>
-<p class='pln'>244</p>
-<p class='pln'>245</p>
-<p class='pln'>246</p>
-<p class='stm mis'>247</p>
-<p class='stm mis'>248</p>
-<p class='pln'>249</p>
-<p class='stm run hide'>250</p>
-<p class='pln'>251</p>
-<p class='pln'>252</p>
-<p class='pln'>253</p>
-<p class='pln'>254</p>
-<p class='pln'>255</p>
-<p class='pln'>256</p>
-<p class='stm mis'>257</p>
-<p class='stm mis'>258</p>
-<p class='pln'>259</p>
-<p class='stm mis'>260</p>
-<p class='pln'>261</p>
-<p class='stm mis'>262</p>
-<p class='pln'>263</p>
-<p class='stm mis'>264</p>
-<p class='pln'>265</p>
-<p class='stm mis'>266</p>
-<p class='pln'>267</p>
-<p class='pln'>268</p>
-<p class='stm mis'>269</p>
-<p class='stm mis'>270</p>
-<p class='stm mis'>271</p>
-<p class='stm mis'>272</p>
-<p class='stm mis'>273</p>
-<p class='pln'>274</p>
-<p class='pln'>275</p>
-<p class='pln'>276</p>
-<p class='pln'>277</p>
-<p class='stm mis'>278</p>
-<p class='pln'>279</p>
-<p class='stm mis'>280</p>
-<p class='stm mis'>281</p>
-<p class='pln'>282</p>
-<p class='stm mis'>283</p>
-<p class='pln'>284</p>
-<p class='stm mis'>285</p>
-<p class='pln'>286</p>
-<p class='pln'>287</p>
-<p class='pln'>288</p>
-<p class='pln'>289</p>
-<p class='stm run hide'>290</p>
-<p class='pln'>291</p>
-<p class='pln'>292</p>
-<p class='pln'>293</p>
-<p class='pln'>294</p>
-<p class='pln'>295</p>
-<p class='pln'>296</p>
-<p class='pln'>297</p>
-<p class='pln'>298</p>
-<p class='pln'>299</p>
-<p class='pln'>300</p>
-<p class='stm mis'>301</p>
-<p class='stm mis'>302</p>
-<p class='stm mis'>303</p>
-<p class='stm mis'>304</p>
-<p class='pln'>305</p>
-<p class='stm run hide'>306</p>
-<p class='pln'>307</p>
-<p class='pln'>308</p>
-<p class='pln'>309</p>
-<p class='pln'>310</p>
-<p class='pln'>311</p>
-<p class='pln'>312</p>
-<p class='pln'>313</p>
-<p class='pln'>314</p>
-<p class='pln'>315</p>
-<p class='pln'>316</p>
-<p class='stm mis'>317</p>
-<p class='pln'>318</p>
-<p class='stm run hide'>319</p>
-<p class='pln'>320</p>
-<p class='pln'>321</p>
-<p class='pln'>322</p>
-<p class='pln'>323</p>
-<p class='pln'>324</p>
-<p class='pln'>325</p>
-<p class='pln'>326</p>
-<p class='pln'>327</p>
-<p class='pln'>328</p>
-<p class='pln'>329</p>
-<p class='stm mis'>330</p>
-<p class='pln'>331</p>
-<p class='stm run hide'>332</p>
-<p class='pln'>333</p>
-<p class='pln'>334</p>
-<p class='pln'>335</p>
-<p class='pln'>336</p>
-<p class='pln'>337</p>
-<p class='pln'>338</p>
-<p class='pln'>339</p>
-<p class='pln'>340</p>
-<p class='pln'>341</p>
-<p class='stm mis'>342</p>
-<p class='stm mis'>343</p>
-<p class='stm mis'>344</p>
-<p class='stm mis'>345</p>
-<p class='stm mis'>346</p>
-<p class='stm mis'>347</p>
-<p class='pln'>348</p>
-<p class='stm run hide'>349</p>
-<p class='pln'>350</p>
-<p class='pln'>351</p>
-<p class='pln'>352</p>
-<p class='pln'>353</p>
-<p class='pln'>354</p>
-<p class='pln'>355</p>
-<p class='pln'>356</p>
-<p class='stm mis'>357</p>
-<p class='stm mis'>358</p>
-<p class='stm mis'>359</p>
-<p class='stm mis'>360</p>
-<p class='stm mis'>361</p>
-<p class='pln'>362</p>
-<p class='stm run hide'>363</p>
-<p class='pln'>364</p>
-<p class='pln'>365</p>
-<p class='pln'>366</p>
-<p class='pln'>367</p>
-<p class='pln'>368</p>
-<p class='pln'>369</p>
-<p class='pln'>370</p>
-<p class='stm mis'>371</p>
-<p class='stm mis'>372</p>
-<p class='stm mis'>373</p>
-<p class='stm mis'>374</p>
-<p class='stm mis'>375</p>
-<p class='stm mis'>376</p>
-<p class='stm mis'>377</p>
-<p class='pln'>378</p>
-<p class='stm run hide'>379</p>
-<p class='pln'>380</p>
-<p class='pln'>381</p>
-<p class='pln'>382</p>
-<p class='pln'>383</p>
-<p class='pln'>384</p>
-<p class='stm mis'>385</p>
-<p class='pln'>386</p>
-<p class='stm run hide'>387</p>
-<p class='pln'>388</p>
-<p class='pln'>389</p>
-<p class='pln'>390</p>
-<p class='pln'>391</p>
-<p class='pln'>392</p>
-<p class='pln'>393</p>
-<p class='pln'>394</p>
-<p class='stm mis'>395</p>
-<p class='pln'>396</p>
-<p class='pln'>397</p>
-<p class='pln'>398</p>
-<p class='pln'>399</p>
-<p class='stm run hide'>400</p>
-<p class='pln'>401</p>
-<p class='stm mis'>402</p>
-<p class='pln'>403</p>
-<p class='stm run hide'>404</p>
-<p class='pln'>405</p>
-<p class='stm mis'>406</p>
-<p class='stm mis'>407</p>
-<p class='stm mis'>408</p>
-<p class='pln'>409</p>
-<p class='stm mis'>410</p>
-<p class='pln'>411</p>
-<p class='stm run hide'>412</p>
-<p class='pln'>413</p>
-<p class='pln'>414</p>
-<p class='pln'>415</p>
-<p class='pln'>416</p>
-<p class='pln'>417</p>
-<p class='stm mis'>418</p>
-<p class='stm mis'>419</p>
-<p class='pln'>420</p>
-<p class='stm mis'>421</p>
-<p class='stm mis'>422</p>
-<p class='stm mis'>423</p>
-<p class='stm mis'>424</p>
-<p class='pln'>425</p>
-<p class='stm mis'>426</p>
-<p class='pln'>427</p>
-<p class='stm run hide'>428</p>
-<p class='pln'>429</p>
-<p class='pln'>430</p>
-<p class='pln'>431</p>
-<p class='pln'>432</p>
-<p class='pln'>433</p>
-<p class='pln'>434</p>
-<p class='pln'>435</p>
-<p class='pln'>436</p>
-<p class='pln'>437</p>
-<p class='pln'>438</p>
-<p class='pln'>439</p>
-<p class='pln'>440</p>
-<p class='pln'>441</p>
-<p class='pln'>442</p>
-<p class='stm mis'>443</p>
-<p class='pln'>444</p>
-<p class='stm mis'>445</p>
-<p class='stm mis'>446</p>
-<p class='stm mis'>447</p>
-<p class='pln'>448</p>
-<p class='stm mis'>449</p>
-<p class='pln'>450</p>
-<p class='pln'>451</p>
-<p class='stm mis'>452</p>
-<p class='pln'>453</p>
-<p class='pln'>454</p>
-<p class='stm mis'>455</p>
-<p class='stm mis'>456</p>
-<p class='pln'>457</p>
-<p class='stm mis'>458</p>
-<p class='stm mis'>459</p>
-<p class='pln'>460</p>
-<p class='stm run hide'>461</p>
-<p class='pln'>462</p>
-<p class='pln'>463</p>
-<p class='pln'>464</p>
-<p class='pln'>465</p>
-<p class='pln'>466</p>
-<p class='pln'>467</p>
-<p class='pln'>468</p>
-<p class='pln'>469</p>
-<p class='pln'>470</p>
-<p class='pln'>471</p>
-<p class='pln'>472</p>
-<p class='pln'>473</p>
-<p class='pln'>474</p>
-<p class='pln'>475</p>
-<p class='pln'>476</p>
-<p class='pln'>477</p>
-<p class='pln'>478</p>
-<p class='pln'>479</p>
-<p class='pln'>480</p>
-<p class='pln'>481</p>
-<p class='pln'>482</p>
-<p class='pln'>483</p>
-<p class='pln'>484</p>
-<p class='pln'>485</p>
-<p class='pln'>486</p>
-<p class='pln'>487</p>
-<p class='pln'>488</p>
-<p class='pln'>489</p>
-<p class='pln'>490</p>
-<p class='pln'>491</p>
-<p class='pln'>492</p>
-<p class='pln'>493</p>
-<p class='pln'>494</p>
-<p class='stm mis'>495</p>
-<p class='stm mis'>496</p>
-<p class='stm mis'>497</p>
-<p class='stm mis'>498</p>
-<p class='stm mis'>499</p>
-<p class='stm mis'>500</p>
-<p class='pln'>501</p>
-<p class='stm mis'>502</p>
-<p class='stm mis'>503</p>
-<p class='pln'>504</p>
-<p class='stm mis'>505</p>
-<p class='stm mis'>506</p>
-<p class='stm mis'>507</p>
-<p class='stm mis'>508</p>
-<p class='pln'>509</p>
-<p class='stm mis'>510</p>
-<p class='pln'>511</p>
-<p class='stm run hide'>512</p>
-<p class='pln'>513</p>
-<p class='pln'>514</p>
-<p class='pln'>515</p>
-<p class='pln'>516</p>
-<p class='pln'>517</p>
-<p class='pln'>518</p>
-<p class='pln'>519</p>
-<p class='pln'>520</p>
-<p class='pln'>521</p>
-<p class='pln'>522</p>
-<p class='pln'>523</p>
-<p class='pln'>524</p>
-<p class='pln'>525</p>
-<p class='pln'>526</p>
-<p class='pln'>527</p>
-<p class='pln'>528</p>
-<p class='stm mis'>529</p>
-<p class='stm mis'>530</p>
-<p class='stm mis'>531</p>
-<p class='stm mis'>532</p>
-<p class='pln'>533</p>
-<p class='stm mis'>534</p>
-<p class='pln'>535</p>
-<p class='stm mis'>536</p>
-<p class='pln'>537</p>
-<p class='stm run hide'>538</p>
-<p class='pln'>539</p>
-<p class='pln'>540</p>
-<p class='pln'>541</p>
-<p class='pln'>542</p>
-<p class='pln'>543</p>
-<p class='pln'>544</p>
-<p class='pln'>545</p>
-<p class='pln'>546</p>
-<p class='pln'>547</p>
-<p class='pln'>548</p>
-<p class='pln'>549</p>
-<p class='stm mis'>550</p>
-<p class='stm mis'>551</p>
-<p class='stm mis'>552</p>
-<p class='stm mis'>553</p>
-<p class='stm mis'>554</p>
-<p class='stm mis'>555</p>
-<p class='stm mis'>556</p>
-<p class='stm mis'>557</p>
-<p class='stm mis'>558</p>
-<p class='stm mis'>559</p>
-<p class='pln'>560</p>
-<p class='stm mis'>561</p>
-<p class='pln'>562</p>
-<p class='pln'>563</p>
-<p class='pln'>564</p>
-<p class='pln'>565</p>
-<p class='stm run hide'>566</p>
-<p class='stm run hide'>567</p>
-<p class='stm run hide'>568</p>
-<p class='stm run hide'>569</p>
-<p class='stm run hide'>570</p>
-<p class='stm run hide'>571</p>
-<p class='pln'>572</p>
-<p class='stm run hide'>573</p>
-<p class='stm mis'>574</p>
-<p class='pln'>575</p>
-<p class='stm run hide'>576</p>
-<p class='stm run hide'>577</p>
-<p class='pln'>578</p>
-<p class='pln'>579</p>
-<p class='pln'>580</p>
-<p class='stm run hide'>581</p>
-<p class='stm run hide'>582</p>
-<p class='pln'>583</p>
-<p class='pln'>584</p>
-<p class='pln'>585</p>
-<p class='stm run hide'>586</p>
-<p class='stm run hide'>587</p>
-<p class='stm run hide'>588</p>
-<p class='pln'>589</p>
-<p class='pln'>590</p>
-<p class='pln'>591</p>
-<p class='stm run hide'>592</p>
-<p class='stm run hide'>593</p>
-<p class='pln'>594</p>
-<p class='pln'>595</p>
-<p class='pln'>596</p>
-<p class='stm run hide'>597</p>
-<p class='stm run hide'>598</p>
-<p class='pln'>599</p>
-<p class='pln'>600</p>
-<p class='pln'>601</p>
-<p class='pln'>602</p>
-<p class='stm mis'>603</p>
-<p class='pln'>604</p>
-<p class='stm run hide'>605</p>
-<p class='pln'>606</p>
-<p class='stm mis'>607</p>
-<p class='pln'>608</p>
-<p class='stm run hide'>609</p>
-<p class='pln'>610</p>
-<p class='stm mis'>611</p>
-<p class='pln'>612</p>
-<p class='stm run hide'>613</p>
-<p class='stm mis'>614</p>
-<p class='pln'>615</p>
-<p class='stm mis'>616</p>
-<p class='pln'>617</p>
-<p class='stm run hide'>618</p>
-<p class='stm mis'>619</p>
-<p class='stm mis'>620</p>
-<p class='pln'>621</p>
-<p class='pln'>622</p>
-<p class='pln'>623</p>
-<p class='pln'>624</p>
-<p class='stm run hide'>625</p>
-<p class='pln'>626</p>
-<p class='stm mis'>627</p>
-<p class='pln'>628</p>
-<p class='stm run hide'>629</p>
-<p class='stm mis'>630</p>
-<p class='pln'>631</p>
-<p class='stm run hide'>632</p>
-<p class='stm mis'>633</p>
-<p class='stm mis'>634</p>
-<p class='pln'>635</p>
-<p class='stm run hide'>636</p>
-<p class='stm mis'>637</p>
-<p class='pln'>638</p>
-<p class='stm run hide'>639</p>
-<p class='stm mis'>640</p>
-<p class='pln'>641</p>
-<p class='pln'>642</p>
-<p class='pln'>643</p>
-<p class='pln'>644</p>
-<p class='stm run hide'>645</p>
-<p class='stm mis'>646</p>
-<p class='pln'>647</p>
-<p class='stm run hide'>648</p>
-<p class='stm mis'>649</p>
-<p class='pln'>650</p>
-<p class='stm run hide'>651</p>
-<p class='stm mis'>652</p>
-<p class='pln'>653</p>
-<p class='stm run hide'>654</p>
-<p class='stm mis'>655</p>
-<p class='pln'>656</p>
-<p class='pln'>657</p>
-<p class='pln'>658</p>
-<p class='pln'>659</p>
-<p class='stm run hide'>660</p>
-<p class='pln'>661</p>
-<p class='pln'>662</p>
-<p class='pln'>663</p>
-<p class='stm mis'>664</p>
-<p class='stm mis'>665</p>
-<p class='stm mis'>666</p>
-<p class='pln'>667</p>
-<p class='stm run hide'>668</p>
-<p class='stm mis'>669</p>
-<p class='pln'>670</p>
-<p class='stm run hide'>671</p>
-<p class='stm mis'>672</p>
-<p class='pln'>673</p>
-<p class='pln'>674</p>
-<p class='pln'>675</p>
-<p class='pln'>676</p>
-<p class='stm run hide'>677</p>
-<p class='stm mis'>678</p>
-<p class='pln'>679</p>
-<p class='stm mis'>680</p>
-<p class='pln'>681</p>
-<p class='stm run hide'>682</p>
-<p class='stm mis'>683</p>
-<p class='pln'>684</p>
-<p class='stm mis'>685</p>
-<p class='pln'>686</p>
-<p class='stm run hide'>687</p>
-<p class='stm mis'>688</p>
-<p class='pln'>689</p>
-<p class='pln'>690</p>
-<p class='pln'>691</p>
-<p class='pln'>692</p>
-<p class='stm mis'>693</p>
-<p class='pln'>694</p>
-<p class='stm mis'>695</p>
-<p class='pln'>696</p>
-<p class='pln'>697</p>
-<p class='pln'>698</p>
-<p class='pln'>699</p>
-<p class='stm mis'>700</p>
-<p class='stm mis'>701</p>
-<p class='stm mis'>702</p>
-<p class='pln'>703</p>
-<p class='stm mis'>704</p>
-<p class='pln'>705</p>
-<p class='pln'>706</p>
-<p class='pln'>707</p>
-<p class='pln'>708</p>
-<p class='stm run hide'>709</p>
-<p class='stm run hide'>710</p>
-<p class='stm run hide'>711</p>
-<p class='stm run hide'>712</p>
-<p class='stm run hide'>713</p>
-<p class='stm run hide'>714</p>
-<p class='stm run hide'>715</p>
-<p class='stm run hide'>716</p>
-<p class='stm run hide'>717</p>
-<p class='pln'>718</p>
-<p class='pln'>719</p>
-<p class='pln'>720</p>
-<p class='pln'>721</p>
-<p class='stm run hide'>722</p>
-<p class='stm mis'>723</p>
-<p class='stm mis'>724</p>
-<p class='pln'>725</p>
-<p class='stm run hide'>726</p>
-<p class='stm run hide'>727</p>
-<p class='stm mis'>728</p>
-<p class='pln'>729</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='str'>&quot;&quot;&quot; path.py - An object representing a path to a file or directory.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>Example:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>from path import path</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>d = path(&#39;/home/guido/bin&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>for f in d.files(&#39;*.py&#39;):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; f.chmod(0755)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>This module requires Python 2.2 or later.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>URL:&nbsp; &nbsp;&nbsp; http://www.jorendorff.com/articles/python/path</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>Author:&nbsp; Jason Orendorff &lt;jason@jorendorff.com&gt; (and others - see the url!)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>Date:&nbsp; &nbsp; 29 Feb 2004</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># TODO</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Bug in write_text().&nbsp; It doesn&#39;t support Universal newline mode.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Better error message in listdir() when self isn&#39;t a</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp;&nbsp; directory. (On Windows, the error message really sucks.)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Make sure everything has a good docstring.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Add methods for regex find and replace.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - guess_content_type() method?</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Perhaps support arguments to touch().</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Could add split() and join() methods that generate warnings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp;&nbsp; - Note:&nbsp; __add__() technically has a bug, I think, where</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp;&nbsp; it doesn&#39;t play nice with other types that implement</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp;&nbsp; __radd__().&nbsp; Test this.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>generators</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>fnmatch</span><span class='op'>,</span> <span class='nam'>glob</span><span class='op'>,</span> <span class='nam'>shutil</span><span class='op'>,</span> <span class='nam'>codecs</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;2.0.2&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;path&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># Pre-2.3 support.&nbsp; Are unicode filenames supported?</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>_base</span> <span class='op'>=</span> <span class='nam'>str</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>supports_unicode_filenames</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_base</span> <span class='op'>=</span> <span class='nam'>unicode</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'><span class='key'>except</span> <span class='nam'>AttributeError</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='key'>pass</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># Pre-2.3 workaround for basestring.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>basestring</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'><span class='key'>except</span> <span class='nam'>NameError</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='nam'>basestring</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>str</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># Universal newline support</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>_textmode</span> <span class='op'>=</span> <span class='str'>&#39;r&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>file</span><span class='op'>,</span> <span class='str'>&#39;newlines&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>_textmode</span> <span class='op'>=</span> <span class='str'>&#39;U&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Represents a filesystem path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; For documentation on individual methods, consult their</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; counterparts in os.path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Special Python methods.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__repr__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;path(%s)&#39;</span> <span class='op'>%</span> <span class='nam'>_base</span><span class='op'>.</span><span class='nam'>__repr__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Adding a path and a string yields a path.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__add__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>more</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>more</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__radd__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>other</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>other</span> <span class='op'>+</span> <span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># The / operator joins paths.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__div__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>rel</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; fp.__div__(rel) == fp / rel == fp.joinpath(rel)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Join two path components, adding a separator character if</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; needed.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>rel</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Make the / operator work even when true division is enabled.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>__truediv__</span> <span class='op'>=</span> <span class='nam'>__div__</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return the current working directory as a path object. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>getcwd</span> <span class='op'>=</span> <span class='nam'>staticmethod</span><span class='op'>(</span><span class='nam'>getcwd</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Operations on path strings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>abspath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>normpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>realpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>realpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>expanduser</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>expanduser</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>expandvars</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>expandvars</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>basename</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>basename</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>expand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Clean up a filename by calling expandvars(),</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; expanduser(), and normpath() on it.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This is commonly everything needed to clean up a filename</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; read from a configuration file, for example.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>expandvars</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>expanduser</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>normpath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_namebase</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>base</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>base</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_ext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>ext</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_drive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>drive</span><span class='op'>,</span> <span class='nam'>r</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitdrive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>drive</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>parent</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dirname</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; This path&#39;s parent directory, as a new path object.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/usr/local/lib/libpython.so&#39;).parent == path(&#39;/usr/local/lib&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>basename</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The name of this file or directory without the full path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/usr/local/lib/libpython.so&#39;).name == &#39;libpython.so&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>namebase</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_namebase</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The same as path.name, but with one file extension stripped off.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/home/guido/python.tar.gz&#39;).name&nbsp; &nbsp;&nbsp; == &#39;python.tar.gz&#39;,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; but&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; path(&#39;/home/guido/python.tar.gz&#39;).namebase == &#39;python.tar&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_ext</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The file extension, for example &#39;.py&#39;. &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>drive</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_drive</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The drive specifier, for example &#39;C:&#39;.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This is always empty on systems that don&#39;t use drive specifiers.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.splitpath() -&gt; Return (p.parent, p.name). &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parent</span><span class='op'>,</span> <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>parent</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>child</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitdrive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.splitdrive() -&gt; Return (p.drive, &lt;the rest of p&gt;).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Split the drive specifier from this path.&nbsp; If there is</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; no drive specifier, p.drive is empty, so the return value</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; is simply (path(&#39;&#39;), p).&nbsp; This is always the case on Unix.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>drive</span><span class='op'>,</span> <span class='nam'>rel</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitdrive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>drive</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>rel</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.splitext() -&gt; Return (p.stripext(), p.ext).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Split the filename extension from this path and return</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; the two parts.&nbsp; Either part may be empty.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The extension is everything from &#39;.&#39; to the end of the</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; last path segment.&nbsp; This has the property that if</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; (a, b) == p.splitext(), then a + b == p.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Cast to plain string using _base because Python 2.2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># implementations of os.path.splitext use &quot;for c in path:...&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># which means something different when applied to a path</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># object.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>ext</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>stripext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.stripext() -&gt; Remove one file extension from the path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/home/guido/python.tar.gz&#39;).stripext()</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; returns path(&#39;/home/guido/python.tar&#39;).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>,</span> <span class='str'>&#39;splitunc&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitunc</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>unc</span><span class='op'>,</span> <span class='nam'>rest</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitunc</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>unc</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>rest</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_uncshare</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>unc</span><span class='op'>,</span> <span class='nam'>r</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitunc</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>unc</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uncshare</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_uncshare</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The UNC mount point for this path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is empty for paths on local drives. &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>joinpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Join two or more path components, adding a separator</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; character (os.sep) if needed.&nbsp; Returns a new path</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; object.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitall</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a list of the path components in this path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The first item in the list will be a path.&nbsp; Its value will be</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; either os.curdir, os.pardir, empty, or the root directory of</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; this path (for example, &#39;/&#39; or &#39;C:\\&#39;).&nbsp; The other items in</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; the list will be strings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; path.path.joinpath(*result) will yield the original path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>loc</span> <span class='op'>=</span> <span class='nam'>self</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>loc</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>curdir</span> <span class='key'>and</span> <span class='nam'>loc</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>pardir</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prev</span> <span class='op'>=</span> <span class='nam'>loc</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>loc</span><span class='op'>,</span> <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>prev</span><span class='op'>.</span><span class='nam'>splitpath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>loc</span> <span class='op'>==</span> <span class='nam'>prev</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>child</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>loc</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span><span class='op'>.</span><span class='nam'>reverse</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>parts</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>relpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return this path as a relative path,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; based from the current working directory.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cwd</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>cwd</span><span class='op'>.</span><span class='nam'>relpathto</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>relpathto</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a relative path from self to dest.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If there is no relative path from self to dest, for example if</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; they reside on different drives in Windows, then this returns</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; dest.abspath().</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>origin</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dest</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>dest</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>orig_list</span> <span class='op'>=</span> <span class='nam'>origin</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>splitall</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Don&#39;t normcase dest!&nbsp; We want to preserve the case.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dest_list</span> <span class='op'>=</span> <span class='nam'>dest</span><span class='op'>.</span><span class='nam'>splitall</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>orig_list</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>dest_list</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Can&#39;t get here from there.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>dest</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Find the location where the two paths start to differ.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>i</span> <span class='op'>=</span> <span class='num'>0</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>start_seg</span><span class='op'>,</span> <span class='nam'>dest_seg</span> <span class='key'>in</span> <span class='nam'>zip</span><span class='op'>(</span><span class='nam'>orig_list</span><span class='op'>,</span> <span class='nam'>dest_list</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>start_seg</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>dest_seg</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>i</span> <span class='op'>+=</span> <span class='num'>1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Now i is the point where the two paths diverge.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Need a certain number of &quot;os.pardir&quot;s to work up</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># from the origin to the point of divergence.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>segments</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>pardir</span><span class='op'>]</span> <span class='op'>*</span> <span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>orig_list</span><span class='op'>)</span> <span class='op'>-</span> <span class='nam'>i</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Need to add the diverging part of dest_list.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>segments</span> <span class='op'>+=</span> <span class='nam'>dest_list</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>:</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>segments</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If they happen to be identical, use os.curdir.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>curdir</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='op'>*</span><span class='nam'>segments</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Listing, searching, walking, and matching</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.listdir() -&gt; List of items in this directory.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Use D.files() or D.dirs() instead if you want a listing</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; of just files or just subdirectories.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The elements of the list are path objects.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this only lists</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; items whose names match the given pattern.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>names</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>names</span> <span class='op'>=</span> <span class='nam'>fnmatch</span><span class='op'>.</span><span class='nam'>filter</span><span class='op'>(</span><span class='nam'>names</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>self</span> <span class='op'>/</span> <span class='nam'>child</span> <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>names</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>dirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.dirs() -&gt; List of this directory&#39;s subdirectories.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The elements of the list are path objects.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This does not walk recursively into subdirectories</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; (but see path.walkdirs).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this only lists</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; directories whose names match the given pattern.&nbsp; For</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; example, d.dirs(&#39;build-*&#39;).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>p</span> <span class='key'>for</span> <span class='nam'>p</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>isdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>files</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.files() -&gt; List of the files in this directory.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The elements of the list are path objects.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This does not walk into subdirectories (see path.walkfiles).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this only lists files</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; whose names match the given pattern.&nbsp; For example,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; d.files(&#39;*.pyc&#39;).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>p</span> <span class='key'>for</span> <span class='nam'>p</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='op'>)</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>walk</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.walk() -&gt; iterator over files and subdirs, recursively.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The iterator yields path objects naming each child item of</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; this directory and its descendants.&nbsp; This requires that</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; D.isdir().</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This performs a depth-first traversal of the directory tree.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Each directory is returned just before all its children.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>child</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>isdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>item</span> <span class='key'>in</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>walk</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>item</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>walkdirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.walkdirs() -&gt; iterator over subdirs, recursively.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this yields only</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; directories whose names match the given pattern.&nbsp; For</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; example, mydir.walkdirs(&#39;*test&#39;) yields only directories</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; with names ending in &#39;test&#39;.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>dirs</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>child</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>subsubdir</span> <span class='key'>in</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>walkdirs</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>subsubdir</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>walkfiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.walkfiles() -&gt; iterator over files in D, recursively.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The optional argument, pattern, limits the results to files</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; with names that match the pattern.&nbsp; For example,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; mydir.walkfiles(&#39;*.tmp&#39;) yields only files with the .tmp</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; extension.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>child</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>isdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>f</span> <span class='key'>in</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>walkfiles</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>f</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return True if self.name matches the given pattern.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; pattern - A filename pattern with wildcards,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for example &#39;*.py&#39;.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>fnmatch</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>glob</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a list of path objects that match the pattern.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; pattern - a path relative to this directory, with wildcards.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/users&#39;).glob(&#39;*/bin/*&#39;) returns a list</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; of all the files users have in their bin directories.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>map</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>,</span> <span class='nam'>glob</span><span class='op'>.</span><span class='nam'>glob</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span> <span class='op'>/</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Reading or writing an entire file at once.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='str'>&#39;r&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file.&nbsp; Return a file object. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>file</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>bytes</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file, read all bytes, return them as a string. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='str'>&#39;rb&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>write_bytes</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>bytes</span><span class='op'>,</span> <span class='nam'>append</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file and write the given bytes to it.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Default behavior is to overwrite any existing file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Call this with write_bytes(bytes, append=True) to append instead.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>append</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;ab&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;wb&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>text</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file, read it in, return the content as a string.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This uses &#39;U&#39; mode in Python 2.3 and later, so &#39;\r\n&#39; and &#39;\r&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; are automatically translated to &#39;\n&#39;.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Optional arguments:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; encoding - The Unicode encoding (or character set) of</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the file.&nbsp; If present, the content of the file is</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decoded and returned as a unicode object; otherwise</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it is returned as an 8-bit str.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; errors - How to handle Unicode errors; see help(str.decode)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for the options.&nbsp; Default is &#39;strict&#39;.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># 8-bit</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>_textmode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Unicode</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>codecs</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='str'>&#39;r&#39;</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># (Note - Can&#39;t use &#39;U&#39; mode here, since codecs.open</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># doesn&#39;t support &#39;U&#39; mode, even in Python 2.3.)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>t</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>t</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>u&#39;\r\n&#39;</span><span class='op'>,</span> <span class='str'>u&#39;\n&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>u&#39;\r&#39;</span><span class='op'>,</span> <span class='str'>u&#39;\n&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>write_text</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>,</span> <span class='nam'>append</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Write the given text to this file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The default behavior is to overwrite any existing file;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; to append instead, use the &#39;append=True&#39; keyword argument.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; There are two differences between path.write_text() and</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; path.write_bytes(): Unicode handling and newline handling.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; --- Unicode</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If &#39;text&#39; isn&#39;t Unicode, this essentially just does</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; open(self, &#39;w&#39;).write(text).&nbsp; The &#39;encoding&#39; and &#39;errors&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; arguments are ignored.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If &#39;text&#39; is Unicode, it is first converted to bytes using the</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; specified &#39;encoding&#39; (or the default encoding if &#39;encoding&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; isn&#39;t specified).&nbsp; The &#39;errors&#39; argument applies only to this</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; conversion.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; --- Newlines</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; write_text() converts from programmer-friendly newlines</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; (always &#39;\n&#39;) to platform-specific newlines (see os.linesep;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; on Windows, for example, the end-of-line marker is &#39;\r\n&#39;).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This applies to Unicode text the same as to 8-bit text.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Because of this conversion, the text should only contain plain</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; newlines (&#39;\n&#39;), just like the return value of path.text().</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If the text contains the characters &#39;\r\n&#39;, it may be written</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; as &#39;\r\r\n&#39; or &#39;\r\r&#39; depending on your platform.&nbsp; (This is</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; exactly the same as when you open a file for writing with</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; fopen(filename, &quot;w&quot;) in C or file(filename, &#39;w&#39;) in Python.)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>text</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>text</span> <span class='op'>=</span> <span class='nam'>text</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>u&#39;\n&#39;</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>encoding</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>getdefaultencoding</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bytes</span> <span class='op'>=</span> <span class='nam'>text</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>write_bytes</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>,</span> <span class='nam'>append</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>append</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;a&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>text</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>lines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>,</span> <span class='nam'>retain</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file, read all lines, return them in a list.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Optional arguments:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; encoding - The Unicode encoding (or character set) of</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the file.&nbsp; The default is None, meaning the content</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; of the file is read as 8-bit characters and returned</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; as a list of (non-Unicode) str objects.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errors - How to handle Unicode errors; see help(str.decode)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for the options.&nbsp; Default is &#39;strict&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retain - If true, retain newline characters; but all newline</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; character combinations (&#39;\r&#39;, &#39;\n&#39;, &#39;\r\n&#39;) are</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated to &#39;\n&#39;.&nbsp; If false, newline characters are</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stripped off.&nbsp; Default is True.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This uses &#39;U&#39; mode in Python 2.3 and later.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>retain</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>_textmode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>splitlines</span><span class='op'>(</span><span class='nam'>retain</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>write_lines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>lines</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>linesep</span><span class='op'>=</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Overwrite this file with the given lines of text.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; lines - A list of strings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; encoding - A Unicode encoding to use.&nbsp; This applies only if</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;lines&#39; contains any Unicode strings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; errors - How to handle errors in Unicode encoding.&nbsp; This</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; also applies only to Unicode strings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; linesep - A character sequence that will be added at the</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end of every line that doesn&#39;t already have it.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='str'>&#39;wb&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>line</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>endswith</span><span class='op'>(</span><span class='nam'>linesep</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>line</span> <span class='op'>+=</span> <span class='nam'>linesep</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>line</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>encoding</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>getdefaultencoding</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>line</span> <span class='op'>=</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='nam'>errors</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>line</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Methods for querying the filesystem.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>exists</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>exists</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>isabs</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isabs</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>isdir</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isdir</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>isfile</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>islink</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>islink</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>ismount</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>ismount</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>,</span> <span class='str'>&#39;samefile&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>samefile</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>samefile</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>getatime</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getatime</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>atime</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getatime</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Last access time of the file. &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>getmtime</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getmtime</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>mtime</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getmtime</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Last-modified time of the file. &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>,</span> <span class='str'>&#39;getctime&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getctime</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getctime</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ctime</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getctime</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Creation time of the file. &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>getsize</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getsize</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>size</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getsize</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Size of the file, in bytes. &quot;&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;access&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return true if current user has access to this path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mode - One of the constants os.F_OK, os.R_OK, os.W_OK, os.X_OK</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>stat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Perform a stat() system call on this path. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>stat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>lstat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Like path.stat(), but do not follow symbolic links. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>lstat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;statvfs&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>statvfs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Perform a statvfs() system call on this path. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>statvfs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;pathconf&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>pathconf</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>pathconf</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Modifying operations on files and directories</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>times</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Set the access and modified times of this file. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>times</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;chown&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>chown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>uid</span><span class='op'>,</span> <span class='nam'>gid</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>uid</span><span class='op'>,</span> <span class='nam'>gid</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>rename</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>rename</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>renames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>renames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Create/delete operations on directories</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>mkdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='num'>0777</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>makedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='num'>0777</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>makedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>rmdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>rmdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>removedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>removedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Modifying operations on files</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>touch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Set the access/modified times of this file to the current time.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Create the file if it does not exist.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fd</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>O_WRONLY</span> <span class='op'>|</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>O_CREAT</span><span class='op'>,</span> <span class='num'>0666</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='nam'>fd</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>remove</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>unlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>unlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Links</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;link&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>link</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newpath</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Create a hard link at &#39;newpath&#39;, pointing to this file. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>link</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newpath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;symlink&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>symlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newlink</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Create a symbolic link at &#39;newlink&#39;, pointing here. &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>symlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newlink</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;readlink&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>readlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return the path to which this symbolic link points.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The result may be an absolute or a relative path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>readlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>readlinkabs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return the path to which this symbolic link points.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The result is always an absolute path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>readlink</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>isabs</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>p</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>parent</span> <span class='op'>/</span> <span class='nam'>p</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- High-level functions from shutil</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>copyfile</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copyfile</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>copymode</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copymode</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>copystat</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copystat</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>copy</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copy</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>copy2</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copy2</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>copytree</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copytree</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>shutil</span><span class='op'>,</span> <span class='str'>&#39;move&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>move</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>move</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>rmtree</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>rmtree</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># --- Special stuff from os</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;chroot&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>chroot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chroot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;startfile&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>startfile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>startfile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='pln'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='pln'>5</p>
+<p id='n6' class='pln'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='pln'>8</p>
+<p id='n9' class='pln'>9</p>
+<p id='n10' class='pln'>10</p>
+<p id='n11' class='pln'>11</p>
+<p id='n12' class='pln'>12</p>
+<p id='n13' class='pln'>13</p>
+<p id='n14' class='pln'>14</p>
+<p id='n15' class='pln'>15</p>
+<p id='n16' class='pln'>16</p>
+<p id='n17' class='pln'>17</p>
+<p id='n18' class='pln'>18</p>
+<p id='n19' class='pln'>19</p>
+<p id='n20' class='pln'>20</p>
+<p id='n21' class='pln'>21</p>
+<p id='n22' class='pln'>22</p>
+<p id='n23' class='pln'>23</p>
+<p id='n24' class='pln'>24</p>
+<p id='n25' class='pln'>25</p>
+<p id='n26' class='pln'>26</p>
+<p id='n27' class='pln'>27</p>
+<p id='n28' class='pln'>28</p>
+<p id='n29' class='pln'>29</p>
+<p id='n30' class='pln'>30</p>
+<p id='n31' class='pln'>31</p>
+<p id='n32' class='stm run hide_run'>32</p>
+<p id='n33' class='pln'>33</p>
+<p id='n34' class='stm run hide_run'>34</p>
+<p id='n35' class='pln'>35</p>
+<p id='n36' class='stm run hide_run'>36</p>
+<p id='n37' class='stm run hide_run'>37</p>
+<p id='n38' class='pln'>38</p>
+<p id='n39' class='pln'>39</p>
+<p id='n40' class='stm run hide_run'>40</p>
+<p id='n41' class='stm run hide_run'>41</p>
+<p id='n42' class='stm par run hide_run'>42</p>
+<p id='n43' class='stm run hide_run'>43</p>
+<p id='n44' class='stm mis'>44</p>
+<p id='n45' class='stm mis'>45</p>
+<p id='n46' class='pln'>46</p>
+<p id='n47' class='pln'>47</p>
+<p id='n48' class='stm run hide_run'>48</p>
+<p id='n49' class='stm run hide_run'>49</p>
+<p id='n50' class='stm mis'>50</p>
+<p id='n51' class='stm mis'>51</p>
+<p id='n52' class='pln'>52</p>
+<p id='n53' class='pln'>53</p>
+<p id='n54' class='stm run hide_run'>54</p>
+<p id='n55' class='stm par run hide_run'>55</p>
+<p id='n56' class='stm run hide_run'>56</p>
+<p id='n57' class='pln'>57</p>
+<p id='n58' class='pln'>58</p>
+<p id='n59' class='stm run hide_run'>59</p>
+<p id='n60' class='pln'>60</p>
+<p id='n61' class='pln'>61</p>
+<p id='n62' class='pln'>62</p>
+<p id='n63' class='pln'>63</p>
+<p id='n64' class='pln'>64</p>
+<p id='n65' class='pln'>65</p>
+<p id='n66' class='pln'>66</p>
+<p id='n67' class='pln'>67</p>
+<p id='n68' class='stm run hide_run'>68</p>
+<p id='n69' class='stm mis'>69</p>
+<p id='n70' class='pln'>70</p>
+<p id='n71' class='pln'>71</p>
+<p id='n72' class='stm run hide_run'>72</p>
+<p id='n73' class='stm mis'>73</p>
+<p id='n74' class='pln'>74</p>
+<p id='n75' class='stm run hide_run'>75</p>
+<p id='n76' class='stm mis'>76</p>
+<p id='n77' class='pln'>77</p>
+<p id='n78' class='pln'>78</p>
+<p id='n79' class='stm run hide_run'>79</p>
+<p id='n80' class='pln'>80</p>
+<p id='n81' class='pln'>81</p>
+<p id='n82' class='pln'>82</p>
+<p id='n83' class='pln'>83</p>
+<p id='n84' class='pln'>84</p>
+<p id='n85' class='stm mis'>85</p>
+<p id='n86' class='pln'>86</p>
+<p id='n87' class='pln'>87</p>
+<p id='n88' class='stm run hide_run'>88</p>
+<p id='n89' class='pln'>89</p>
+<p id='n90' class='stm run hide_run'>90</p>
+<p id='n91' class='pln'>91</p>
+<p id='n92' class='stm mis'>92</p>
+<p id='n93' class='stm run hide_run'>93</p>
+<p id='n94' class='pln'>94</p>
+<p id='n95' class='pln'>95</p>
+<p id='n96' class='pln'>96</p>
+<p id='n97' class='pln'>97</p>
+<p id='n98' class='stm par run hide_run'>98</p>
+<p id='n99' class='stm par run hide_run'>99</p>
+<p id='n100' class='stm par run hide_run'>100</p>
+<p id='n101' class='stm par run hide_run'>101</p>
+<p id='n102' class='stm par run hide_run'>102</p>
+<p id='n103' class='stm par run hide_run'>103</p>
+<p id='n104' class='stm par run hide_run'>104</p>
+<p id='n105' class='stm run hide_run'>105</p>
+<p id='n106' class='pln'>106</p>
+<p id='n107' class='stm run hide_run'>107</p>
+<p id='n108' class='pln'>108</p>
+<p id='n109' class='pln'>109</p>
+<p id='n110' class='pln'>110</p>
+<p id='n111' class='pln'>111</p>
+<p id='n112' class='pln'>112</p>
+<p id='n113' class='pln'>113</p>
+<p id='n114' class='stm mis'>114</p>
+<p id='n115' class='pln'>115</p>
+<p id='n116' class='stm run hide_run'>116</p>
+<p id='n117' class='stm mis'>117</p>
+<p id='n118' class='stm mis'>118</p>
+<p id='n119' class='pln'>119</p>
+<p id='n120' class='stm run hide_run'>120</p>
+<p id='n121' class='stm mis'>121</p>
+<p id='n122' class='stm mis'>122</p>
+<p id='n123' class='pln'>123</p>
+<p id='n124' class='stm run hide_run'>124</p>
+<p id='n125' class='stm mis'>125</p>
+<p id='n126' class='stm mis'>126</p>
+<p id='n127' class='pln'>127</p>
+<p id='n128' class='stm run hide_run'>128</p>
+<p id='n129' class='pln'>129</p>
+<p id='n130' class='pln'>130</p>
+<p id='n131' class='pln'>131</p>
+<p id='n132' class='pln'>132</p>
+<p id='n133' class='pln'>133</p>
+<p id='n134' class='pln'>134</p>
+<p id='n135' class='stm run hide_run'>135</p>
+<p id='n136' class='pln'>136</p>
+<p id='n137' class='pln'>137</p>
+<p id='n138' class='pln'>138</p>
+<p id='n139' class='pln'>139</p>
+<p id='n140' class='pln'>140</p>
+<p id='n141' class='pln'>141</p>
+<p id='n142' class='stm run hide_run'>142</p>
+<p id='n143' class='pln'>143</p>
+<p id='n144' class='pln'>144</p>
+<p id='n145' class='pln'>145</p>
+<p id='n146' class='pln'>146</p>
+<p id='n147' class='pln'>147</p>
+<p id='n148' class='pln'>148</p>
+<p id='n149' class='pln'>149</p>
+<p id='n150' class='stm run hide_run'>150</p>
+<p id='n151' class='pln'>151</p>
+<p id='n152' class='pln'>152</p>
+<p id='n153' class='pln'>153</p>
+<p id='n154' class='stm run hide_run'>154</p>
+<p id='n155' class='pln'>155</p>
+<p id='n156' class='pln'>156</p>
+<p id='n157' class='pln'>157</p>
+<p id='n158' class='pln'>158</p>
+<p id='n159' class='pln'>159</p>
+<p id='n160' class='stm run hide_run'>160</p>
+<p id='n161' class='pln'>161</p>
+<p id='n162' class='stm mis'>162</p>
+<p id='n163' class='stm mis'>163</p>
+<p id='n164' class='pln'>164</p>
+<p id='n165' class='stm run hide_run'>165</p>
+<p id='n166' class='pln'>166</p>
+<p id='n167' class='pln'>167</p>
+<p id='n168' class='pln'>168</p>
+<p id='n169' class='pln'>169</p>
+<p id='n170' class='pln'>170</p>
+<p id='n171' class='pln'>171</p>
+<p id='n172' class='stm mis'>172</p>
+<p id='n173' class='stm mis'>173</p>
+<p id='n174' class='pln'>174</p>
+<p id='n175' class='stm run hide_run'>175</p>
+<p id='n176' class='pln'>176</p>
+<p id='n177' class='pln'>177</p>
+<p id='n178' class='pln'>178</p>
+<p id='n179' class='pln'>179</p>
+<p id='n180' class='pln'>180</p>
+<p id='n181' class='pln'>181</p>
+<p id='n182' class='pln'>182</p>
+<p id='n183' class='pln'>183</p>
+<p id='n184' class='pln'>184</p>
+<p id='n185' class='pln'>185</p>
+<p id='n186' class='pln'>186</p>
+<p id='n187' class='pln'>187</p>
+<p id='n188' class='pln'>188</p>
+<p id='n189' class='stm mis'>189</p>
+<p id='n190' class='stm mis'>190</p>
+<p id='n191' class='pln'>191</p>
+<p id='n192' class='stm run hide_run'>192</p>
+<p id='n193' class='pln'>193</p>
+<p id='n194' class='pln'>194</p>
+<p id='n195' class='pln'>195</p>
+<p id='n196' class='pln'>196</p>
+<p id='n197' class='pln'>197</p>
+<p id='n198' class='stm mis'>198</p>
+<p id='n199' class='pln'>199</p>
+<p id='n200' class='stm par run hide_run'>200</p>
+<p id='n201' class='stm run hide_run'>201</p>
+<p id='n202' class='stm mis'>202</p>
+<p id='n203' class='stm mis'>203</p>
+<p id='n204' class='pln'>204</p>
+<p id='n205' class='stm run hide_run'>205</p>
+<p id='n206' class='stm mis'>206</p>
+<p id='n207' class='stm mis'>207</p>
+<p id='n208' class='pln'>208</p>
+<p id='n209' class='stm run hide_run'>209</p>
+<p id='n210' class='pln'>210</p>
+<p id='n211' class='pln'>211</p>
+<p id='n212' class='pln'>212</p>
+<p id='n213' class='pln'>213</p>
+<p id='n214' class='stm run hide_run'>214</p>
+<p id='n215' class='pln'>215</p>
+<p id='n216' class='pln'>216</p>
+<p id='n217' class='pln'>217</p>
+<p id='n218' class='pln'>218</p>
+<p id='n219' class='stm mis'>219</p>
+<p id='n220' class='pln'>220</p>
+<p id='n221' class='stm run hide_run'>221</p>
+<p id='n222' class='pln'>222</p>
+<p id='n223' class='pln'>223</p>
+<p id='n224' class='pln'>224</p>
+<p id='n225' class='pln'>225</p>
+<p id='n226' class='pln'>226</p>
+<p id='n227' class='pln'>227</p>
+<p id='n228' class='pln'>228</p>
+<p id='n229' class='pln'>229</p>
+<p id='n230' class='pln'>230</p>
+<p id='n231' class='stm mis'>231</p>
+<p id='n232' class='stm mis'>232</p>
+<p id='n233' class='stm mis'>233</p>
+<p id='n234' class='stm mis'>234</p>
+<p id='n235' class='stm mis'>235</p>
+<p id='n236' class='stm mis'>236</p>
+<p id='n237' class='stm mis'>237</p>
+<p id='n238' class='stm mis'>238</p>
+<p id='n239' class='stm mis'>239</p>
+<p id='n240' class='stm mis'>240</p>
+<p id='n241' class='stm mis'>241</p>
+<p id='n242' class='pln'>242</p>
+<p id='n243' class='stm run hide_run'>243</p>
+<p id='n244' class='pln'>244</p>
+<p id='n245' class='pln'>245</p>
+<p id='n246' class='pln'>246</p>
+<p id='n247' class='stm mis'>247</p>
+<p id='n248' class='stm mis'>248</p>
+<p id='n249' class='pln'>249</p>
+<p id='n250' class='stm run hide_run'>250</p>
+<p id='n251' class='pln'>251</p>
+<p id='n252' class='pln'>252</p>
+<p id='n253' class='pln'>253</p>
+<p id='n254' class='pln'>254</p>
+<p id='n255' class='pln'>255</p>
+<p id='n256' class='pln'>256</p>
+<p id='n257' class='stm mis'>257</p>
+<p id='n258' class='stm mis'>258</p>
+<p id='n259' class='pln'>259</p>
+<p id='n260' class='stm mis'>260</p>
+<p id='n261' class='pln'>261</p>
+<p id='n262' class='stm mis'>262</p>
+<p id='n263' class='pln'>263</p>
+<p id='n264' class='stm mis'>264</p>
+<p id='n265' class='pln'>265</p>
+<p id='n266' class='stm mis'>266</p>
+<p id='n267' class='pln'>267</p>
+<p id='n268' class='pln'>268</p>
+<p id='n269' class='stm mis'>269</p>
+<p id='n270' class='stm mis'>270</p>
+<p id='n271' class='stm mis'>271</p>
+<p id='n272' class='stm mis'>272</p>
+<p id='n273' class='stm mis'>273</p>
+<p id='n274' class='pln'>274</p>
+<p id='n275' class='pln'>275</p>
+<p id='n276' class='pln'>276</p>
+<p id='n277' class='pln'>277</p>
+<p id='n278' class='stm mis'>278</p>
+<p id='n279' class='pln'>279</p>
+<p id='n280' class='stm mis'>280</p>
+<p id='n281' class='stm mis'>281</p>
+<p id='n282' class='pln'>282</p>
+<p id='n283' class='stm mis'>283</p>
+<p id='n284' class='pln'>284</p>
+<p id='n285' class='stm mis'>285</p>
+<p id='n286' class='pln'>286</p>
+<p id='n287' class='pln'>287</p>
+<p id='n288' class='pln'>288</p>
+<p id='n289' class='pln'>289</p>
+<p id='n290' class='stm run hide_run'>290</p>
+<p id='n291' class='pln'>291</p>
+<p id='n292' class='pln'>292</p>
+<p id='n293' class='pln'>293</p>
+<p id='n294' class='pln'>294</p>
+<p id='n295' class='pln'>295</p>
+<p id='n296' class='pln'>296</p>
+<p id='n297' class='pln'>297</p>
+<p id='n298' class='pln'>298</p>
+<p id='n299' class='pln'>299</p>
+<p id='n300' class='pln'>300</p>
+<p id='n301' class='stm mis'>301</p>
+<p id='n302' class='stm mis'>302</p>
+<p id='n303' class='stm mis'>303</p>
+<p id='n304' class='stm mis'>304</p>
+<p id='n305' class='pln'>305</p>
+<p id='n306' class='stm run hide_run'>306</p>
+<p id='n307' class='pln'>307</p>
+<p id='n308' class='pln'>308</p>
+<p id='n309' class='pln'>309</p>
+<p id='n310' class='pln'>310</p>
+<p id='n311' class='pln'>311</p>
+<p id='n312' class='pln'>312</p>
+<p id='n313' class='pln'>313</p>
+<p id='n314' class='pln'>314</p>
+<p id='n315' class='pln'>315</p>
+<p id='n316' class='pln'>316</p>
+<p id='n317' class='stm mis'>317</p>
+<p id='n318' class='pln'>318</p>
+<p id='n319' class='stm run hide_run'>319</p>
+<p id='n320' class='pln'>320</p>
+<p id='n321' class='pln'>321</p>
+<p id='n322' class='pln'>322</p>
+<p id='n323' class='pln'>323</p>
+<p id='n324' class='pln'>324</p>
+<p id='n325' class='pln'>325</p>
+<p id='n326' class='pln'>326</p>
+<p id='n327' class='pln'>327</p>
+<p id='n328' class='pln'>328</p>
+<p id='n329' class='pln'>329</p>
+<p id='n330' class='stm mis'>330</p>
+<p id='n331' class='pln'>331</p>
+<p id='n332' class='stm run hide_run'>332</p>
+<p id='n333' class='pln'>333</p>
+<p id='n334' class='pln'>334</p>
+<p id='n335' class='pln'>335</p>
+<p id='n336' class='pln'>336</p>
+<p id='n337' class='pln'>337</p>
+<p id='n338' class='pln'>338</p>
+<p id='n339' class='pln'>339</p>
+<p id='n340' class='pln'>340</p>
+<p id='n341' class='pln'>341</p>
+<p id='n342' class='stm mis'>342</p>
+<p id='n343' class='stm mis'>343</p>
+<p id='n344' class='stm mis'>344</p>
+<p id='n345' class='stm mis'>345</p>
+<p id='n346' class='stm mis'>346</p>
+<p id='n347' class='stm mis'>347</p>
+<p id='n348' class='pln'>348</p>
+<p id='n349' class='stm run hide_run'>349</p>
+<p id='n350' class='pln'>350</p>
+<p id='n351' class='pln'>351</p>
+<p id='n352' class='pln'>352</p>
+<p id='n353' class='pln'>353</p>
+<p id='n354' class='pln'>354</p>
+<p id='n355' class='pln'>355</p>
+<p id='n356' class='pln'>356</p>
+<p id='n357' class='stm mis'>357</p>
+<p id='n358' class='stm mis'>358</p>
+<p id='n359' class='stm mis'>359</p>
+<p id='n360' class='stm mis'>360</p>
+<p id='n361' class='stm mis'>361</p>
+<p id='n362' class='pln'>362</p>
+<p id='n363' class='stm run hide_run'>363</p>
+<p id='n364' class='pln'>364</p>
+<p id='n365' class='pln'>365</p>
+<p id='n366' class='pln'>366</p>
+<p id='n367' class='pln'>367</p>
+<p id='n368' class='pln'>368</p>
+<p id='n369' class='pln'>369</p>
+<p id='n370' class='pln'>370</p>
+<p id='n371' class='stm mis'>371</p>
+<p id='n372' class='stm mis'>372</p>
+<p id='n373' class='stm mis'>373</p>
+<p id='n374' class='stm mis'>374</p>
+<p id='n375' class='stm mis'>375</p>
+<p id='n376' class='stm mis'>376</p>
+<p id='n377' class='stm mis'>377</p>
+<p id='n378' class='pln'>378</p>
+<p id='n379' class='stm run hide_run'>379</p>
+<p id='n380' class='pln'>380</p>
+<p id='n381' class='pln'>381</p>
+<p id='n382' class='pln'>382</p>
+<p id='n383' class='pln'>383</p>
+<p id='n384' class='pln'>384</p>
+<p id='n385' class='stm mis'>385</p>
+<p id='n386' class='pln'>386</p>
+<p id='n387' class='stm run hide_run'>387</p>
+<p id='n388' class='pln'>388</p>
+<p id='n389' class='pln'>389</p>
+<p id='n390' class='pln'>390</p>
+<p id='n391' class='pln'>391</p>
+<p id='n392' class='pln'>392</p>
+<p id='n393' class='pln'>393</p>
+<p id='n394' class='pln'>394</p>
+<p id='n395' class='stm mis'>395</p>
+<p id='n396' class='pln'>396</p>
+<p id='n397' class='pln'>397</p>
+<p id='n398' class='pln'>398</p>
+<p id='n399' class='pln'>399</p>
+<p id='n400' class='stm run hide_run'>400</p>
+<p id='n401' class='pln'>401</p>
+<p id='n402' class='stm mis'>402</p>
+<p id='n403' class='pln'>403</p>
+<p id='n404' class='stm run hide_run'>404</p>
+<p id='n405' class='pln'>405</p>
+<p id='n406' class='stm mis'>406</p>
+<p id='n407' class='stm mis'>407</p>
+<p id='n408' class='stm mis'>408</p>
+<p id='n409' class='pln'>409</p>
+<p id='n410' class='stm mis'>410</p>
+<p id='n411' class='pln'>411</p>
+<p id='n412' class='stm run hide_run'>412</p>
+<p id='n413' class='pln'>413</p>
+<p id='n414' class='pln'>414</p>
+<p id='n415' class='pln'>415</p>
+<p id='n416' class='pln'>416</p>
+<p id='n417' class='pln'>417</p>
+<p id='n418' class='stm mis'>418</p>
+<p id='n419' class='stm mis'>419</p>
+<p id='n420' class='pln'>420</p>
+<p id='n421' class='stm mis'>421</p>
+<p id='n422' class='stm mis'>422</p>
+<p id='n423' class='stm mis'>423</p>
+<p id='n424' class='stm mis'>424</p>
+<p id='n425' class='pln'>425</p>
+<p id='n426' class='stm mis'>426</p>
+<p id='n427' class='pln'>427</p>
+<p id='n428' class='stm run hide_run'>428</p>
+<p id='n429' class='pln'>429</p>
+<p id='n430' class='pln'>430</p>
+<p id='n431' class='pln'>431</p>
+<p id='n432' class='pln'>432</p>
+<p id='n433' class='pln'>433</p>
+<p id='n434' class='pln'>434</p>
+<p id='n435' class='pln'>435</p>
+<p id='n436' class='pln'>436</p>
+<p id='n437' class='pln'>437</p>
+<p id='n438' class='pln'>438</p>
+<p id='n439' class='pln'>439</p>
+<p id='n440' class='pln'>440</p>
+<p id='n441' class='pln'>441</p>
+<p id='n442' class='pln'>442</p>
+<p id='n443' class='stm mis'>443</p>
+<p id='n444' class='pln'>444</p>
+<p id='n445' class='stm mis'>445</p>
+<p id='n446' class='stm mis'>446</p>
+<p id='n447' class='stm mis'>447</p>
+<p id='n448' class='pln'>448</p>
+<p id='n449' class='stm mis'>449</p>
+<p id='n450' class='pln'>450</p>
+<p id='n451' class='pln'>451</p>
+<p id='n452' class='stm mis'>452</p>
+<p id='n453' class='pln'>453</p>
+<p id='n454' class='pln'>454</p>
+<p id='n455' class='stm mis'>455</p>
+<p id='n456' class='stm mis'>456</p>
+<p id='n457' class='pln'>457</p>
+<p id='n458' class='stm mis'>458</p>
+<p id='n459' class='stm mis'>459</p>
+<p id='n460' class='pln'>460</p>
+<p id='n461' class='stm run hide_run'>461</p>
+<p id='n462' class='pln'>462</p>
+<p id='n463' class='pln'>463</p>
+<p id='n464' class='pln'>464</p>
+<p id='n465' class='pln'>465</p>
+<p id='n466' class='pln'>466</p>
+<p id='n467' class='pln'>467</p>
+<p id='n468' class='pln'>468</p>
+<p id='n469' class='pln'>469</p>
+<p id='n470' class='pln'>470</p>
+<p id='n471' class='pln'>471</p>
+<p id='n472' class='pln'>472</p>
+<p id='n473' class='pln'>473</p>
+<p id='n474' class='pln'>474</p>
+<p id='n475' class='pln'>475</p>
+<p id='n476' class='pln'>476</p>
+<p id='n477' class='pln'>477</p>
+<p id='n478' class='pln'>478</p>
+<p id='n479' class='pln'>479</p>
+<p id='n480' class='pln'>480</p>
+<p id='n481' class='pln'>481</p>
+<p id='n482' class='pln'>482</p>
+<p id='n483' class='pln'>483</p>
+<p id='n484' class='pln'>484</p>
+<p id='n485' class='pln'>485</p>
+<p id='n486' class='pln'>486</p>
+<p id='n487' class='pln'>487</p>
+<p id='n488' class='pln'>488</p>
+<p id='n489' class='pln'>489</p>
+<p id='n490' class='pln'>490</p>
+<p id='n491' class='pln'>491</p>
+<p id='n492' class='pln'>492</p>
+<p id='n493' class='pln'>493</p>
+<p id='n494' class='pln'>494</p>
+<p id='n495' class='stm mis'>495</p>
+<p id='n496' class='stm mis'>496</p>
+<p id='n497' class='stm mis'>497</p>
+<p id='n498' class='stm mis'>498</p>
+<p id='n499' class='stm mis'>499</p>
+<p id='n500' class='stm mis'>500</p>
+<p id='n501' class='pln'>501</p>
+<p id='n502' class='stm mis'>502</p>
+<p id='n503' class='stm mis'>503</p>
+<p id='n504' class='pln'>504</p>
+<p id='n505' class='stm mis'>505</p>
+<p id='n506' class='stm mis'>506</p>
+<p id='n507' class='stm mis'>507</p>
+<p id='n508' class='stm mis'>508</p>
+<p id='n509' class='pln'>509</p>
+<p id='n510' class='stm mis'>510</p>
+<p id='n511' class='pln'>511</p>
+<p id='n512' class='stm run hide_run'>512</p>
+<p id='n513' class='pln'>513</p>
+<p id='n514' class='pln'>514</p>
+<p id='n515' class='pln'>515</p>
+<p id='n516' class='pln'>516</p>
+<p id='n517' class='pln'>517</p>
+<p id='n518' class='pln'>518</p>
+<p id='n519' class='pln'>519</p>
+<p id='n520' class='pln'>520</p>
+<p id='n521' class='pln'>521</p>
+<p id='n522' class='pln'>522</p>
+<p id='n523' class='pln'>523</p>
+<p id='n524' class='pln'>524</p>
+<p id='n525' class='pln'>525</p>
+<p id='n526' class='pln'>526</p>
+<p id='n527' class='pln'>527</p>
+<p id='n528' class='pln'>528</p>
+<p id='n529' class='stm mis'>529</p>
+<p id='n530' class='stm mis'>530</p>
+<p id='n531' class='stm mis'>531</p>
+<p id='n532' class='stm mis'>532</p>
+<p id='n533' class='pln'>533</p>
+<p id='n534' class='stm mis'>534</p>
+<p id='n535' class='pln'>535</p>
+<p id='n536' class='stm mis'>536</p>
+<p id='n537' class='pln'>537</p>
+<p id='n538' class='stm run hide_run'>538</p>
+<p id='n539' class='pln'>539</p>
+<p id='n540' class='pln'>540</p>
+<p id='n541' class='pln'>541</p>
+<p id='n542' class='pln'>542</p>
+<p id='n543' class='pln'>543</p>
+<p id='n544' class='pln'>544</p>
+<p id='n545' class='pln'>545</p>
+<p id='n546' class='pln'>546</p>
+<p id='n547' class='pln'>547</p>
+<p id='n548' class='pln'>548</p>
+<p id='n549' class='pln'>549</p>
+<p id='n550' class='stm mis'>550</p>
+<p id='n551' class='stm mis'>551</p>
+<p id='n552' class='stm mis'>552</p>
+<p id='n553' class='stm mis'>553</p>
+<p id='n554' class='stm mis'>554</p>
+<p id='n555' class='stm mis'>555</p>
+<p id='n556' class='stm mis'>556</p>
+<p id='n557' class='stm mis'>557</p>
+<p id='n558' class='stm mis'>558</p>
+<p id='n559' class='stm mis'>559</p>
+<p id='n560' class='pln'>560</p>
+<p id='n561' class='stm mis'>561</p>
+<p id='n562' class='pln'>562</p>
+<p id='n563' class='pln'>563</p>
+<p id='n564' class='pln'>564</p>
+<p id='n565' class='pln'>565</p>
+<p id='n566' class='stm run hide_run'>566</p>
+<p id='n567' class='stm run hide_run'>567</p>
+<p id='n568' class='stm run hide_run'>568</p>
+<p id='n569' class='stm run hide_run'>569</p>
+<p id='n570' class='stm run hide_run'>570</p>
+<p id='n571' class='stm run hide_run'>571</p>
+<p id='n572' class='pln'>572</p>
+<p id='n573' class='stm par run hide_run'>573</p>
+<p id='n574' class='stm mis'>574</p>
+<p id='n575' class='pln'>575</p>
+<p id='n576' class='stm run hide_run'>576</p>
+<p id='n577' class='stm run hide_run'>577</p>
+<p id='n578' class='pln'>578</p>
+<p id='n579' class='pln'>579</p>
+<p id='n580' class='pln'>580</p>
+<p id='n581' class='stm run hide_run'>581</p>
+<p id='n582' class='stm run hide_run'>582</p>
+<p id='n583' class='pln'>583</p>
+<p id='n584' class='pln'>584</p>
+<p id='n585' class='pln'>585</p>
+<p id='n586' class='stm par run hide_run'>586</p>
+<p id='n587' class='stm run hide_run'>587</p>
+<p id='n588' class='stm run hide_run'>588</p>
+<p id='n589' class='pln'>589</p>
+<p id='n590' class='pln'>590</p>
+<p id='n591' class='pln'>591</p>
+<p id='n592' class='stm run hide_run'>592</p>
+<p id='n593' class='stm run hide_run'>593</p>
+<p id='n594' class='pln'>594</p>
+<p id='n595' class='pln'>595</p>
+<p id='n596' class='pln'>596</p>
+<p id='n597' class='stm par run hide_run'>597</p>
+<p id='n598' class='stm run hide_run'>598</p>
+<p id='n599' class='pln'>599</p>
+<p id='n600' class='pln'>600</p>
+<p id='n601' class='pln'>601</p>
+<p id='n602' class='pln'>602</p>
+<p id='n603' class='stm mis'>603</p>
+<p id='n604' class='pln'>604</p>
+<p id='n605' class='stm run hide_run'>605</p>
+<p id='n606' class='pln'>606</p>
+<p id='n607' class='stm mis'>607</p>
+<p id='n608' class='pln'>608</p>
+<p id='n609' class='stm run hide_run'>609</p>
+<p id='n610' class='pln'>610</p>
+<p id='n611' class='stm mis'>611</p>
+<p id='n612' class='pln'>612</p>
+<p id='n613' class='stm par run hide_run'>613</p>
+<p id='n614' class='stm mis'>614</p>
+<p id='n615' class='pln'>615</p>
+<p id='n616' class='stm mis'>616</p>
+<p id='n617' class='pln'>617</p>
+<p id='n618' class='stm par run hide_run'>618</p>
+<p id='n619' class='stm mis'>619</p>
+<p id='n620' class='stm mis'>620</p>
+<p id='n621' class='pln'>621</p>
+<p id='n622' class='pln'>622</p>
+<p id='n623' class='pln'>623</p>
+<p id='n624' class='pln'>624</p>
+<p id='n625' class='stm run hide_run'>625</p>
+<p id='n626' class='pln'>626</p>
+<p id='n627' class='stm mis'>627</p>
+<p id='n628' class='pln'>628</p>
+<p id='n629' class='stm run hide_run'>629</p>
+<p id='n630' class='stm mis'>630</p>
+<p id='n631' class='pln'>631</p>
+<p id='n632' class='stm par run hide_run'>632</p>
+<p id='n633' class='stm mis'>633</p>
+<p id='n634' class='stm mis'>634</p>
+<p id='n635' class='pln'>635</p>
+<p id='n636' class='stm run hide_run'>636</p>
+<p id='n637' class='stm mis'>637</p>
+<p id='n638' class='pln'>638</p>
+<p id='n639' class='stm run hide_run'>639</p>
+<p id='n640' class='stm mis'>640</p>
+<p id='n641' class='pln'>641</p>
+<p id='n642' class='pln'>642</p>
+<p id='n643' class='pln'>643</p>
+<p id='n644' class='pln'>644</p>
+<p id='n645' class='stm run hide_run'>645</p>
+<p id='n646' class='stm mis'>646</p>
+<p id='n647' class='pln'>647</p>
+<p id='n648' class='stm run hide_run'>648</p>
+<p id='n649' class='stm mis'>649</p>
+<p id='n650' class='pln'>650</p>
+<p id='n651' class='stm run hide_run'>651</p>
+<p id='n652' class='stm mis'>652</p>
+<p id='n653' class='pln'>653</p>
+<p id='n654' class='stm run hide_run'>654</p>
+<p id='n655' class='stm mis'>655</p>
+<p id='n656' class='pln'>656</p>
+<p id='n657' class='pln'>657</p>
+<p id='n658' class='pln'>658</p>
+<p id='n659' class='pln'>659</p>
+<p id='n660' class='stm run hide_run'>660</p>
+<p id='n661' class='pln'>661</p>
+<p id='n662' class='pln'>662</p>
+<p id='n663' class='pln'>663</p>
+<p id='n664' class='stm mis'>664</p>
+<p id='n665' class='stm mis'>665</p>
+<p id='n666' class='stm mis'>666</p>
+<p id='n667' class='pln'>667</p>
+<p id='n668' class='stm run hide_run'>668</p>
+<p id='n669' class='stm mis'>669</p>
+<p id='n670' class='pln'>670</p>
+<p id='n671' class='stm run hide_run'>671</p>
+<p id='n672' class='stm mis'>672</p>
+<p id='n673' class='pln'>673</p>
+<p id='n674' class='pln'>674</p>
+<p id='n675' class='pln'>675</p>
+<p id='n676' class='pln'>676</p>
+<p id='n677' class='stm par run hide_run'>677</p>
+<p id='n678' class='stm mis'>678</p>
+<p id='n679' class='pln'>679</p>
+<p id='n680' class='stm mis'>680</p>
+<p id='n681' class='pln'>681</p>
+<p id='n682' class='stm par run hide_run'>682</p>
+<p id='n683' class='stm mis'>683</p>
+<p id='n684' class='pln'>684</p>
+<p id='n685' class='stm mis'>685</p>
+<p id='n686' class='pln'>686</p>
+<p id='n687' class='stm par run hide_run'>687</p>
+<p id='n688' class='stm mis'>688</p>
+<p id='n689' class='pln'>689</p>
+<p id='n690' class='pln'>690</p>
+<p id='n691' class='pln'>691</p>
+<p id='n692' class='pln'>692</p>
+<p id='n693' class='stm mis'>693</p>
+<p id='n694' class='pln'>694</p>
+<p id='n695' class='stm mis'>695</p>
+<p id='n696' class='pln'>696</p>
+<p id='n697' class='pln'>697</p>
+<p id='n698' class='pln'>698</p>
+<p id='n699' class='pln'>699</p>
+<p id='n700' class='stm mis'>700</p>
+<p id='n701' class='stm mis'>701</p>
+<p id='n702' class='stm mis'>702</p>
+<p id='n703' class='pln'>703</p>
+<p id='n704' class='stm mis'>704</p>
+<p id='n705' class='pln'>705</p>
+<p id='n706' class='pln'>706</p>
+<p id='n707' class='pln'>707</p>
+<p id='n708' class='pln'>708</p>
+<p id='n709' class='stm run hide_run'>709</p>
+<p id='n710' class='stm run hide_run'>710</p>
+<p id='n711' class='stm run hide_run'>711</p>
+<p id='n712' class='stm run hide_run'>712</p>
+<p id='n713' class='stm run hide_run'>713</p>
+<p id='n714' class='stm run hide_run'>714</p>
+<p id='n715' class='stm par run hide_run'>715</p>
+<p id='n716' class='stm run hide_run'>716</p>
+<p id='n717' class='stm run hide_run'>717</p>
+<p id='n718' class='pln'>718</p>
+<p id='n719' class='pln'>719</p>
+<p id='n720' class='pln'>720</p>
+<p id='n721' class='pln'>721</p>
+<p id='n722' class='stm par run hide_run'>722</p>
+<p id='n723' class='stm mis'>723</p>
+<p id='n724' class='stm mis'>724</p>
+<p id='n725' class='pln'>725</p>
+<p id='n726' class='stm par run hide_run'>726</p>
+<p id='n727' class='stm run hide_run'>727</p>
+<p id='n728' class='stm mis'>728</p>
+<p id='n729' class='pln'>729</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot; path.py - An object representing a path to a file or directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='pln'><span class='str'>Example:</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='pln'><span class='str'>from path import path</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='pln'><span class='str'>d = path(&#39;/home/guido/bin&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='str'>for f in d.files(&#39;*.py&#39;):</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='pln'><span class='str'>&nbsp; &nbsp; f.chmod(0755)</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='pln'><span class='str'>This module requires Python 2.2 or later.</span><span class='strut'>&nbsp;</span></p>
+<p id='t11' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t12' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t13' class='pln'><span class='str'>URL:&nbsp; &nbsp;&nbsp; http://www.jorendorff.com/articles/python/path</span><span class='strut'>&nbsp;</span></p>
+<p id='t14' class='pln'><span class='str'>Author:&nbsp; Jason Orendorff &lt;jason@jorendorff.com&gt; (and others - see the url!)</span><span class='strut'>&nbsp;</span></p>
+<p id='t15' class='pln'><span class='str'>Date:&nbsp; &nbsp; 29 Feb 2004</span><span class='strut'>&nbsp;</span></p>
+<p id='t16' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t18' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t19' class='pln'><span class='com'># TODO</span><span class='strut'>&nbsp;</span></p>
+<p id='t20' class='pln'><span class='com'>#&nbsp;&nbsp; - Bug in write_text().&nbsp; It doesn&#39;t support Universal newline mode.</span><span class='strut'>&nbsp;</span></p>
+<p id='t21' class='pln'><span class='com'>#&nbsp;&nbsp; - Better error message in listdir() when self isn&#39;t a</span><span class='strut'>&nbsp;</span></p>
+<p id='t22' class='pln'><span class='com'>#&nbsp; &nbsp;&nbsp; directory. (On Windows, the error message really sucks.)</span><span class='strut'>&nbsp;</span></p>
+<p id='t23' class='pln'><span class='com'>#&nbsp;&nbsp; - Make sure everything has a good docstring.</span><span class='strut'>&nbsp;</span></p>
+<p id='t24' class='pln'><span class='com'>#&nbsp;&nbsp; - Add methods for regex find and replace.</span><span class='strut'>&nbsp;</span></p>
+<p id='t25' class='pln'><span class='com'>#&nbsp;&nbsp; - guess_content_type() method?</span><span class='strut'>&nbsp;</span></p>
+<p id='t26' class='pln'><span class='com'>#&nbsp;&nbsp; - Perhaps support arguments to touch().</span><span class='strut'>&nbsp;</span></p>
+<p id='t27' class='pln'><span class='com'>#&nbsp;&nbsp; - Could add split() and join() methods that generate warnings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t28' class='pln'><span class='com'>#&nbsp;&nbsp; - Note:&nbsp; __add__() technically has a bug, I think, where</span><span class='strut'>&nbsp;</span></p>
+<p id='t29' class='pln'><span class='com'>#&nbsp; &nbsp;&nbsp; it doesn&#39;t play nice with other types that implement</span><span class='strut'>&nbsp;</span></p>
+<p id='t30' class='pln'><span class='com'>#&nbsp; &nbsp;&nbsp; __radd__().&nbsp; Test this.</span><span class='strut'>&nbsp;</span></p>
+<p id='t31' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t32' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>__future__</span> <span class='key'>import</span> <span class='nam'>generators</span><span class='strut'>&nbsp;</span></p>
+<p id='t33' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t34' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>fnmatch</span><span class='op'>,</span> <span class='nam'>glob</span><span class='op'>,</span> <span class='nam'>shutil</span><span class='op'>,</span> <span class='nam'>codecs</span><span class='strut'>&nbsp;</span></p>
+<p id='t35' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t36' class='stm run hide_run'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;2.0.2&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t37' class='stm run hide_run'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;path&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t38' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t39' class='pln'><span class='com'># Pre-2.3 support.&nbsp; Are unicode filenames supported?</span><span class='strut'>&nbsp;</span></p>
+<p id='t40' class='stm run hide_run'><span class='nam'>_base</span> <span class='op'>=</span> <span class='nam'>str</span><span class='strut'>&nbsp;</span></p>
+<p id='t41' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t42' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>48</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>supports_unicode_filenames</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t43' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_base</span> <span class='op'>=</span> <span class='nam'>unicode</span><span class='strut'>&nbsp;</span></p>
+<p id='t44' class='stm mis'><span class='key'>except</span> <span class='nam'>AttributeError</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t45' class='stm mis'>&nbsp; &nbsp; <span class='key'>pass</span><span class='strut'>&nbsp;</span></p>
+<p id='t46' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t47' class='pln'><span class='com'># Pre-2.3 workaround for basestring.</span><span class='strut'>&nbsp;</span></p>
+<p id='t48' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t49' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>basestring</span><span class='strut'>&nbsp;</span></p>
+<p id='t50' class='stm mis'><span class='key'>except</span> <span class='nam'>NameError</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t51' class='stm mis'>&nbsp; &nbsp; <span class='nam'>basestring</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>str</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t52' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t53' class='pln'><span class='com'># Universal newline support</span><span class='strut'>&nbsp;</span></p>
+<p id='t54' class='stm run hide_run'><span class='nam'>_textmode</span> <span class='op'>=</span> <span class='str'>&#39;r&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t55' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>59</span><span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>file</span><span class='op'>,</span> <span class='str'>&#39;newlines&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t56' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>_textmode</span> <span class='op'>=</span> <span class='str'>&#39;U&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t57' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t58' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t59' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t60' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Represents a filesystem path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t61' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t62' class='pln'><span class='str'>&nbsp; &nbsp; For documentation on individual methods, consult their</span><span class='strut'>&nbsp;</span></p>
+<p id='t63' class='pln'><span class='str'>&nbsp; &nbsp; counterparts in os.path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t64' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t65' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t66' class='pln'>&nbsp; &nbsp; <span class='com'># --- Special Python methods.</span><span class='strut'>&nbsp;</span></p>
+<p id='t67' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t68' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__repr__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t69' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;path(%s)&#39;</span> <span class='op'>%</span> <span class='nam'>_base</span><span class='op'>.</span><span class='nam'>__repr__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t70' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t71' class='pln'>&nbsp; &nbsp; <span class='com'># Adding a path and a string yields a path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t72' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__add__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>more</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t73' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span> <span class='op'>+</span> <span class='nam'>more</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t74' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t75' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__radd__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>other</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t76' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>other</span> <span class='op'>+</span> <span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t77' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t78' class='pln'>&nbsp; &nbsp; <span class='com'># The / operator joins paths.</span><span class='strut'>&nbsp;</span></p>
+<p id='t79' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__div__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>rel</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t80' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; fp.__div__(rel) == fp / rel == fp.joinpath(rel)</span><span class='strut'>&nbsp;</span></p>
+<p id='t81' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t82' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Join two path components, adding a separator character if</span><span class='strut'>&nbsp;</span></p>
+<p id='t83' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; needed.</span><span class='strut'>&nbsp;</span></p>
+<p id='t84' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t85' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>rel</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t86' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t87' class='pln'>&nbsp; &nbsp; <span class='com'># Make the / operator work even when true division is enabled.</span><span class='strut'>&nbsp;</span></p>
+<p id='t88' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>__truediv__</span> <span class='op'>=</span> <span class='nam'>__div__</span><span class='strut'>&nbsp;</span></p>
+<p id='t89' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t90' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t91' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return the current working directory as a path object. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t92' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t93' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>getcwd</span> <span class='op'>=</span> <span class='nam'>staticmethod</span><span class='op'>(</span><span class='nam'>getcwd</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t94' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t95' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t96' class='pln'>&nbsp; &nbsp; <span class='com'># --- Operations on path strings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t97' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t98' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>abspath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t99' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t100' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>normpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t101' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>realpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>realpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t102' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>expanduser</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>expanduser</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t103' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>expandvars</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>expandvars</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t104' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t105' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>basename</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>basename</span><span class='strut'>&nbsp;</span></p>
+<p id='t106' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t107' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>expand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t108' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Clean up a filename by calling expandvars(),</span><span class='strut'>&nbsp;</span></p>
+<p id='t109' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; expanduser(), and normpath() on it.</span><span class='strut'>&nbsp;</span></p>
+<p id='t110' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t111' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This is commonly everything needed to clean up a filename</span><span class='strut'>&nbsp;</span></p>
+<p id='t112' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; read from a configuration file, for example.</span><span class='strut'>&nbsp;</span></p>
+<p id='t113' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t114' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>expandvars</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>expanduser</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>normpath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t115' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t116' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_namebase</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t117' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>base</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t118' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>base</span><span class='strut'>&nbsp;</span></p>
+<p id='t119' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t120' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_ext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t121' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t122' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>ext</span><span class='strut'>&nbsp;</span></p>
+<p id='t123' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t124' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_drive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t125' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>drive</span><span class='op'>,</span> <span class='nam'>r</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitdrive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t126' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>drive</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t127' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t128' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>parent</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t129' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dirname</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t130' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; This path&#39;s parent directory, as a new path object.</span><span class='strut'>&nbsp;</span></p>
+<p id='t131' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t132' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/usr/local/lib/libpython.so&#39;).parent == path(&#39;/usr/local/lib&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t133' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t134' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t135' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>name</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t136' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>basename</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t137' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The name of this file or directory without the full path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t138' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t139' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/usr/local/lib/libpython.so&#39;).name == &#39;libpython.so&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t140' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t141' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t142' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>namebase</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t143' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_namebase</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t144' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The same as path.name, but with one file extension stripped off.</span><span class='strut'>&nbsp;</span></p>
+<p id='t145' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t146' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/home/guido/python.tar.gz&#39;).name&nbsp; &nbsp;&nbsp; == &#39;python.tar.gz&#39;,</span><span class='strut'>&nbsp;</span></p>
+<p id='t147' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; but&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; path(&#39;/home/guido/python.tar.gz&#39;).namebase == &#39;python.tar&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t148' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t149' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t150' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t151' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_ext</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t152' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The file extension, for example &#39;.py&#39;. &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t153' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t154' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>drive</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t155' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_drive</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t156' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The drive specifier, for example &#39;C:&#39;.</span><span class='strut'>&nbsp;</span></p>
+<p id='t157' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This is always empty on systems that don&#39;t use drive specifiers.</span><span class='strut'>&nbsp;</span></p>
+<p id='t158' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t159' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t160' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t161' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.splitpath() -&gt; Return (p.parent, p.name). &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t162' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parent</span><span class='op'>,</span> <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t163' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>parent</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>child</span><span class='strut'>&nbsp;</span></p>
+<p id='t164' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t165' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitdrive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t166' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.splitdrive() -&gt; Return (p.drive, &lt;the rest of p&gt;).</span><span class='strut'>&nbsp;</span></p>
+<p id='t167' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t168' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Split the drive specifier from this path.&nbsp; If there is</span><span class='strut'>&nbsp;</span></p>
+<p id='t169' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; no drive specifier, p.drive is empty, so the return value</span><span class='strut'>&nbsp;</span></p>
+<p id='t170' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; is simply (path(&#39;&#39;), p).&nbsp; This is always the case on Unix.</span><span class='strut'>&nbsp;</span></p>
+<p id='t171' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t172' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>drive</span><span class='op'>,</span> <span class='nam'>rel</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitdrive</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t173' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>drive</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>rel</span><span class='strut'>&nbsp;</span></p>
+<p id='t174' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t175' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t176' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.splitext() -&gt; Return (p.stripext(), p.ext).</span><span class='strut'>&nbsp;</span></p>
+<p id='t177' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t178' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Split the filename extension from this path and return</span><span class='strut'>&nbsp;</span></p>
+<p id='t179' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; the two parts.&nbsp; Either part may be empty.</span><span class='strut'>&nbsp;</span></p>
+<p id='t180' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t181' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The extension is everything from &#39;.&#39; to the end of the</span><span class='strut'>&nbsp;</span></p>
+<p id='t182' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; last path segment.&nbsp; This has the property that if</span><span class='strut'>&nbsp;</span></p>
+<p id='t183' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; (a, b) == p.splitext(), then a + b == p.</span><span class='strut'>&nbsp;</span></p>
+<p id='t184' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t185' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Cast to plain string using _base because Python 2.2</span><span class='strut'>&nbsp;</span></p>
+<p id='t186' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># implementations of os.path.splitext use &quot;for c in path:...&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t187' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># which means something different when applied to a path</span><span class='strut'>&nbsp;</span></p>
+<p id='t188' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># object.</span><span class='strut'>&nbsp;</span></p>
+<p id='t189' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>filename</span><span class='op'>,</span> <span class='nam'>ext</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t190' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>filename</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>ext</span><span class='strut'>&nbsp;</span></p>
+<p id='t191' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t192' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>stripext</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t193' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; p.stripext() -&gt; Remove one file extension from the path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t194' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t195' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/home/guido/python.tar.gz&#39;).stripext()</span><span class='strut'>&nbsp;</span></p>
+<p id='t196' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; returns path(&#39;/home/guido/python.tar&#39;).</span><span class='strut'>&nbsp;</span></p>
+<p id='t197' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t198' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>splitext</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t199' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t200' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>214</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>,</span> <span class='str'>&#39;splitunc&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t201' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitunc</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t202' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>unc</span><span class='op'>,</span> <span class='nam'>rest</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitunc</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t203' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>unc</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>rest</span><span class='strut'>&nbsp;</span></p>
+<p id='t204' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t205' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>_get_uncshare</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t206' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>unc</span><span class='op'>,</span> <span class='nam'>r</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>splitunc</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t207' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>unc</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t208' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t209' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>uncshare</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t210' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>_get_uncshare</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t211' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The UNC mount point for this path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t212' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is empty for paths on local drives. &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t213' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t214' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>joinpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t215' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Join two or more path components, adding a separator</span><span class='strut'>&nbsp;</span></p>
+<p id='t216' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; character (os.sep) if needed.&nbsp; Returns a new path</span><span class='strut'>&nbsp;</span></p>
+<p id='t217' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; object.</span><span class='strut'>&nbsp;</span></p>
+<p id='t218' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t219' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t220' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t221' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>splitall</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t222' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a list of the path components in this path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t223' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t224' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The first item in the list will be a path.&nbsp; Its value will be</span><span class='strut'>&nbsp;</span></p>
+<p id='t225' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; either os.curdir, os.pardir, empty, or the root directory of</span><span class='strut'>&nbsp;</span></p>
+<p id='t226' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; this path (for example, &#39;/&#39; or &#39;C:\\&#39;).&nbsp; The other items in</span><span class='strut'>&nbsp;</span></p>
+<p id='t227' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; the list will be strings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t228' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t229' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; path.path.joinpath(*result) will yield the original path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t230' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t231' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t232' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>loc</span> <span class='op'>=</span> <span class='nam'>self</span><span class='strut'>&nbsp;</span></p>
+<p id='t233' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>loc</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>curdir</span> <span class='key'>and</span> <span class='nam'>loc</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>pardir</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t234' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prev</span> <span class='op'>=</span> <span class='nam'>loc</span><span class='strut'>&nbsp;</span></p>
+<p id='t235' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>loc</span><span class='op'>,</span> <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>prev</span><span class='op'>.</span><span class='nam'>splitpath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t236' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>loc</span> <span class='op'>==</span> <span class='nam'>prev</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t237' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
+<p id='t238' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>child</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t239' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>loc</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t240' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>parts</span><span class='op'>.</span><span class='nam'>reverse</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t241' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>parts</span><span class='strut'>&nbsp;</span></p>
+<p id='t242' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t243' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>relpath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t244' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return this path as a relative path,</span><span class='strut'>&nbsp;</span></p>
+<p id='t245' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; based from the current working directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t246' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t247' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cwd</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t248' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>cwd</span><span class='op'>.</span><span class='nam'>relpathto</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t249' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t250' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>relpathto</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>dest</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t251' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a relative path from self to dest.</span><span class='strut'>&nbsp;</span></p>
+<p id='t252' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t253' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If there is no relative path from self to dest, for example if</span><span class='strut'>&nbsp;</span></p>
+<p id='t254' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; they reside on different drives in Windows, then this returns</span><span class='strut'>&nbsp;</span></p>
+<p id='t255' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; dest.abspath().</span><span class='strut'>&nbsp;</span></p>
+<p id='t256' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t257' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>origin</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t258' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dest</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>dest</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t259' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t260' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>orig_list</span> <span class='op'>=</span> <span class='nam'>origin</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>splitall</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t261' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Don&#39;t normcase dest!&nbsp; We want to preserve the case.</span><span class='strut'>&nbsp;</span></p>
+<p id='t262' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dest_list</span> <span class='op'>=</span> <span class='nam'>dest</span><span class='op'>.</span><span class='nam'>splitall</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t263' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t264' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>orig_list</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>dest_list</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t265' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Can&#39;t get here from there.</span><span class='strut'>&nbsp;</span></p>
+<p id='t266' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>dest</span><span class='strut'>&nbsp;</span></p>
+<p id='t267' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t268' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Find the location where the two paths start to differ.</span><span class='strut'>&nbsp;</span></p>
+<p id='t269' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>i</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
+<p id='t270' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>start_seg</span><span class='op'>,</span> <span class='nam'>dest_seg</span> <span class='key'>in</span> <span class='nam'>zip</span><span class='op'>(</span><span class='nam'>orig_list</span><span class='op'>,</span> <span class='nam'>dest_list</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t271' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>start_seg</span> <span class='op'>!=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>normcase</span><span class='op'>(</span><span class='nam'>dest_seg</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t272' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
+<p id='t273' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>i</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t274' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t275' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Now i is the point where the two paths diverge.</span><span class='strut'>&nbsp;</span></p>
+<p id='t276' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Need a certain number of &quot;os.pardir&quot;s to work up</span><span class='strut'>&nbsp;</span></p>
+<p id='t277' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># from the origin to the point of divergence.</span><span class='strut'>&nbsp;</span></p>
+<p id='t278' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>segments</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>pardir</span><span class='op'>]</span> <span class='op'>*</span> <span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>orig_list</span><span class='op'>)</span> <span class='op'>-</span> <span class='nam'>i</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t279' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Need to add the diverging part of dest_list.</span><span class='strut'>&nbsp;</span></p>
+<p id='t280' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>segments</span> <span class='op'>+=</span> <span class='nam'>dest_list</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t281' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>segments</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t282' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If they happen to be identical, use os.curdir.</span><span class='strut'>&nbsp;</span></p>
+<p id='t283' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>curdir</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t284' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t285' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='op'>*</span><span class='nam'>segments</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t286' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t287' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t288' class='pln'>&nbsp; &nbsp; <span class='com'># --- Listing, searching, walking, and matching</span><span class='strut'>&nbsp;</span></p>
+<p id='t289' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t290' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t291' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.listdir() -&gt; List of items in this directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t292' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t293' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Use D.files() or D.dirs() instead if you want a listing</span><span class='strut'>&nbsp;</span></p>
+<p id='t294' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; of just files or just subdirectories.</span><span class='strut'>&nbsp;</span></p>
+<p id='t295' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t296' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The elements of the list are path objects.</span><span class='strut'>&nbsp;</span></p>
+<p id='t297' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t298' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this only lists</span><span class='strut'>&nbsp;</span></p>
+<p id='t299' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; items whose names match the given pattern.</span><span class='strut'>&nbsp;</span></p>
+<p id='t300' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t301' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>names</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t302' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='key'>not</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t303' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>names</span> <span class='op'>=</span> <span class='nam'>fnmatch</span><span class='op'>.</span><span class='nam'>filter</span><span class='op'>(</span><span class='nam'>names</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t304' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>self</span> <span class='op'>/</span> <span class='nam'>child</span> <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>names</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t305' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t306' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>dirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t307' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.dirs() -&gt; List of this directory&#39;s subdirectories.</span><span class='strut'>&nbsp;</span></p>
+<p id='t308' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t309' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The elements of the list are path objects.</span><span class='strut'>&nbsp;</span></p>
+<p id='t310' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This does not walk recursively into subdirectories</span><span class='strut'>&nbsp;</span></p>
+<p id='t311' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; (but see path.walkdirs).</span><span class='strut'>&nbsp;</span></p>
+<p id='t312' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t313' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this only lists</span><span class='strut'>&nbsp;</span></p>
+<p id='t314' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; directories whose names match the given pattern.&nbsp; For</span><span class='strut'>&nbsp;</span></p>
+<p id='t315' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; example, d.dirs(&#39;build-*&#39;).</span><span class='strut'>&nbsp;</span></p>
+<p id='t316' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t317' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>p</span> <span class='key'>for</span> <span class='nam'>p</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>isdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t318' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t319' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>files</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t320' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.files() -&gt; List of the files in this directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t321' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t322' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The elements of the list are path objects.</span><span class='strut'>&nbsp;</span></p>
+<p id='t323' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This does not walk into subdirectories (see path.walkfiles).</span><span class='strut'>&nbsp;</span></p>
+<p id='t324' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t325' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this only lists files</span><span class='strut'>&nbsp;</span></p>
+<p id='t326' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; whose names match the given pattern.&nbsp; For example,</span><span class='strut'>&nbsp;</span></p>
+<p id='t327' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; d.files(&#39;*.pyc&#39;).</span><span class='strut'>&nbsp;</span></p>
+<p id='t328' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t329' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t330' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>[</span><span class='nam'>p</span> <span class='key'>for</span> <span class='nam'>p</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span> <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t331' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t332' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>walk</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t333' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.walk() -&gt; iterator over files and subdirs, recursively.</span><span class='strut'>&nbsp;</span></p>
+<p id='t334' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t335' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The iterator yields path objects naming each child item of</span><span class='strut'>&nbsp;</span></p>
+<p id='t336' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; this directory and its descendants.&nbsp; This requires that</span><span class='strut'>&nbsp;</span></p>
+<p id='t337' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; D.isdir().</span><span class='strut'>&nbsp;</span></p>
+<p id='t338' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t339' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This performs a depth-first traversal of the directory tree.</span><span class='strut'>&nbsp;</span></p>
+<p id='t340' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Each directory is returned just before all its children.</span><span class='strut'>&nbsp;</span></p>
+<p id='t341' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t342' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t343' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t344' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>child</span><span class='strut'>&nbsp;</span></p>
+<p id='t345' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>isdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t346' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>item</span> <span class='key'>in</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>walk</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t347' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>item</span><span class='strut'>&nbsp;</span></p>
+<p id='t348' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t349' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>walkdirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t350' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.walkdirs() -&gt; iterator over subdirs, recursively.</span><span class='strut'>&nbsp;</span></p>
+<p id='t351' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t352' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; With the optional &#39;pattern&#39; argument, this yields only</span><span class='strut'>&nbsp;</span></p>
+<p id='t353' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; directories whose names match the given pattern.&nbsp; For</span><span class='strut'>&nbsp;</span></p>
+<p id='t354' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; example, mydir.walkdirs(&#39;*test&#39;) yields only directories</span><span class='strut'>&nbsp;</span></p>
+<p id='t355' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; with names ending in &#39;test&#39;.</span><span class='strut'>&nbsp;</span></p>
+<p id='t356' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t357' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>dirs</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t358' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t359' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>child</span><span class='strut'>&nbsp;</span></p>
+<p id='t360' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>subsubdir</span> <span class='key'>in</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>walkdirs</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t361' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>subsubdir</span><span class='strut'>&nbsp;</span></p>
+<p id='t362' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t363' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>walkfiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t364' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; D.walkfiles() -&gt; iterator over files in D, recursively.</span><span class='strut'>&nbsp;</span></p>
+<p id='t365' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t366' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The optional argument, pattern, limits the results to files</span><span class='strut'>&nbsp;</span></p>
+<p id='t367' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; with names that match the pattern.&nbsp; For example,</span><span class='strut'>&nbsp;</span></p>
+<p id='t368' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; mydir.walkfiles(&#39;*.tmp&#39;) yields only files with the .tmp</span><span class='strut'>&nbsp;</span></p>
+<p id='t369' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; extension.</span><span class='strut'>&nbsp;</span></p>
+<p id='t370' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t371' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>child</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>listdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t372' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>isfile</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t373' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>pattern</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>or</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t374' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>child</span><span class='strut'>&nbsp;</span></p>
+<p id='t375' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>isdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t376' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>f</span> <span class='key'>in</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>walkfiles</span><span class='op'>(</span><span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t377' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>yield</span> <span class='nam'>f</span><span class='strut'>&nbsp;</span></p>
+<p id='t378' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t379' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t380' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return True if self.name matches the given pattern.</span><span class='strut'>&nbsp;</span></p>
+<p id='t381' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t382' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; pattern - A filename pattern with wildcards,</span><span class='strut'>&nbsp;</span></p>
+<p id='t383' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for example &#39;*.py&#39;.</span><span class='strut'>&nbsp;</span></p>
+<p id='t384' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t385' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>fnmatch</span><span class='op'>.</span><span class='nam'>fnmatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>name</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t386' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t387' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>glob</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t388' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return a list of path objects that match the pattern.</span><span class='strut'>&nbsp;</span></p>
+<p id='t389' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t390' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; pattern - a path relative to this directory, with wildcards.</span><span class='strut'>&nbsp;</span></p>
+<p id='t391' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t392' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; For example, path(&#39;/users&#39;).glob(&#39;*/bin/*&#39;) returns a list</span><span class='strut'>&nbsp;</span></p>
+<p id='t393' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; of all the files users have in their bin directories.</span><span class='strut'>&nbsp;</span></p>
+<p id='t394' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t395' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>map</span><span class='op'>(</span><span class='nam'>path</span><span class='op'>,</span> <span class='nam'>glob</span><span class='op'>.</span><span class='nam'>glob</span><span class='op'>(</span><span class='nam'>_base</span><span class='op'>(</span><span class='nam'>self</span> <span class='op'>/</span> <span class='nam'>pattern</span><span class='op'>)</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t396' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t397' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t398' class='pln'>&nbsp; &nbsp; <span class='com'># --- Reading or writing an entire file at once.</span><span class='strut'>&nbsp;</span></p>
+<p id='t399' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t400' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='str'>&#39;r&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t401' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file.&nbsp; Return a file object. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t402' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>file</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t403' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t404' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>bytes</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t405' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file, read all bytes, return them as a string. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t406' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='str'>&#39;rb&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t407' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t408' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t409' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t410' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t411' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t412' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>write_bytes</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>bytes</span><span class='op'>,</span> <span class='nam'>append</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t413' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file and write the given bytes to it.</span><span class='strut'>&nbsp;</span></p>
+<p id='t414' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t415' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Default behavior is to overwrite any existing file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t416' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Call this with write_bytes(bytes, append=True) to append instead.</span><span class='strut'>&nbsp;</span></p>
+<p id='t417' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t418' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>append</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t419' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;ab&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t420' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t421' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;wb&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t422' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t423' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t424' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t425' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t426' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t427' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t428' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>text</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t429' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file, read it in, return the content as a string.</span><span class='strut'>&nbsp;</span></p>
+<p id='t430' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t431' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This uses &#39;U&#39; mode in Python 2.3 and later, so &#39;\r\n&#39; and &#39;\r&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t432' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; are automatically translated to &#39;\n&#39;.</span><span class='strut'>&nbsp;</span></p>
+<p id='t433' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t434' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Optional arguments:</span><span class='strut'>&nbsp;</span></p>
+<p id='t435' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t436' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; encoding - The Unicode encoding (or character set) of</span><span class='strut'>&nbsp;</span></p>
+<p id='t437' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the file.&nbsp; If present, the content of the file is</span><span class='strut'>&nbsp;</span></p>
+<p id='t438' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; decoded and returned as a unicode object; otherwise</span><span class='strut'>&nbsp;</span></p>
+<p id='t439' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; it is returned as an 8-bit str.</span><span class='strut'>&nbsp;</span></p>
+<p id='t440' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; errors - How to handle Unicode errors; see help(str.decode)</span><span class='strut'>&nbsp;</span></p>
+<p id='t441' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for the options.&nbsp; Default is &#39;strict&#39;.</span><span class='strut'>&nbsp;</span></p>
+<p id='t442' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t443' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t444' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># 8-bit</span><span class='strut'>&nbsp;</span></p>
+<p id='t445' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>_textmode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t446' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t447' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t448' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t449' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t450' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t451' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Unicode</span><span class='strut'>&nbsp;</span></p>
+<p id='t452' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>codecs</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='str'>&#39;r&#39;</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t453' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># (Note - Can&#39;t use &#39;U&#39; mode here, since codecs.open</span><span class='strut'>&nbsp;</span></p>
+<p id='t454' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># doesn&#39;t support &#39;U&#39; mode, even in Python 2.3.)</span><span class='strut'>&nbsp;</span></p>
+<p id='t455' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t456' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>t</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t457' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t458' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t459' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>t</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>u&#39;\r\n&#39;</span><span class='op'>,</span> <span class='str'>u&#39;\n&#39;</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>u&#39;\r&#39;</span><span class='op'>,</span> <span class='str'>u&#39;\n&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t460' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t461' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>write_text</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>,</span> <span class='nam'>append</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t462' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Write the given text to this file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t463' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t464' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; The default behavior is to overwrite any existing file;</span><span class='strut'>&nbsp;</span></p>
+<p id='t465' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; to append instead, use the &#39;append=True&#39; keyword argument.</span><span class='strut'>&nbsp;</span></p>
+<p id='t466' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t467' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; There are two differences between path.write_text() and</span><span class='strut'>&nbsp;</span></p>
+<p id='t468' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; path.write_bytes(): Unicode handling and newline handling.</span><span class='strut'>&nbsp;</span></p>
+<p id='t469' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t470' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; --- Unicode</span><span class='strut'>&nbsp;</span></p>
+<p id='t471' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t472' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If &#39;text&#39; isn&#39;t Unicode, this essentially just does</span><span class='strut'>&nbsp;</span></p>
+<p id='t473' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; open(self, &#39;w&#39;).write(text).&nbsp; The &#39;encoding&#39; and &#39;errors&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t474' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; arguments are ignored.</span><span class='strut'>&nbsp;</span></p>
+<p id='t475' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t476' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If &#39;text&#39; is Unicode, it is first converted to bytes using the</span><span class='strut'>&nbsp;</span></p>
+<p id='t477' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; specified &#39;encoding&#39; (or the default encoding if &#39;encoding&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t478' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; isn&#39;t specified).&nbsp; The &#39;errors&#39; argument applies only to this</span><span class='strut'>&nbsp;</span></p>
+<p id='t479' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; conversion.</span><span class='strut'>&nbsp;</span></p>
+<p id='t480' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t481' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; --- Newlines</span><span class='strut'>&nbsp;</span></p>
+<p id='t482' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t483' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; write_text() converts from programmer-friendly newlines</span><span class='strut'>&nbsp;</span></p>
+<p id='t484' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; (always &#39;\n&#39;) to platform-specific newlines (see os.linesep;</span><span class='strut'>&nbsp;</span></p>
+<p id='t485' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; on Windows, for example, the end-of-line marker is &#39;\r\n&#39;).</span><span class='strut'>&nbsp;</span></p>
+<p id='t486' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This applies to Unicode text the same as to 8-bit text.</span><span class='strut'>&nbsp;</span></p>
+<p id='t487' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t488' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Because of this conversion, the text should only contain plain</span><span class='strut'>&nbsp;</span></p>
+<p id='t489' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; newlines (&#39;\n&#39;), just like the return value of path.text().</span><span class='strut'>&nbsp;</span></p>
+<p id='t490' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; If the text contains the characters &#39;\r\n&#39;, it may be written</span><span class='strut'>&nbsp;</span></p>
+<p id='t491' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; as &#39;\r\r\n&#39; or &#39;\r\r&#39; depending on your platform.&nbsp; (This is</span><span class='strut'>&nbsp;</span></p>
+<p id='t492' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; exactly the same as when you open a file for writing with</span><span class='strut'>&nbsp;</span></p>
+<p id='t493' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; fopen(filename, &quot;w&quot;) in C or file(filename, &#39;w&#39;) in Python.)</span><span class='strut'>&nbsp;</span></p>
+<p id='t494' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t495' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>text</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t496' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>text</span> <span class='op'>=</span> <span class='nam'>text</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>u&#39;\n&#39;</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t497' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t498' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>encoding</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>getdefaultencoding</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t499' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bytes</span> <span class='op'>=</span> <span class='nam'>text</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t500' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>write_bytes</span><span class='op'>(</span><span class='nam'>bytes</span><span class='op'>,</span> <span class='nam'>append</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t501' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t502' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>append</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t503' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;a&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t504' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t505' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t506' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t507' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t508' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>text</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t509' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t510' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t511' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t512' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>lines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>,</span> <span class='nam'>retain</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t513' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Open this file, read all lines, return them in a list.</span><span class='strut'>&nbsp;</span></p>
+<p id='t514' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t515' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Optional arguments:</span><span class='strut'>&nbsp;</span></p>
+<p id='t516' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; encoding - The Unicode encoding (or character set) of</span><span class='strut'>&nbsp;</span></p>
+<p id='t517' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the file.&nbsp; The default is None, meaning the content</span><span class='strut'>&nbsp;</span></p>
+<p id='t518' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; of the file is read as 8-bit characters and returned</span><span class='strut'>&nbsp;</span></p>
+<p id='t519' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; as a list of (non-Unicode) str objects.</span><span class='strut'>&nbsp;</span></p>
+<p id='t520' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errors - How to handle Unicode errors; see help(str.decode)</span><span class='strut'>&nbsp;</span></p>
+<p id='t521' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for the options.&nbsp; Default is &#39;strict&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t522' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retain - If true, retain newline characters; but all newline</span><span class='strut'>&nbsp;</span></p>
+<p id='t523' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; character combinations (&#39;\r&#39;, &#39;\n&#39;, &#39;\r\n&#39;) are</span><span class='strut'>&nbsp;</span></p>
+<p id='t524' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; translated to &#39;\n&#39;.&nbsp; If false, newline characters are</span><span class='strut'>&nbsp;</span></p>
+<p id='t525' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stripped off.&nbsp; Default is True.</span><span class='strut'>&nbsp;</span></p>
+<p id='t526' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t527' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; This uses &#39;U&#39; mode in Python 2.3 and later.</span><span class='strut'>&nbsp;</span></p>
+<p id='t528' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t529' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span> <span class='key'>and</span> <span class='nam'>retain</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t530' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>_textmode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t531' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t532' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t533' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t534' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t535' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t536' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>splitlines</span><span class='op'>(</span><span class='nam'>retain</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t537' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t538' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>write_lines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>lines</span><span class='op'>,</span> <span class='nam'>encoding</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='str'>&#39;strict&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t539' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>linesep</span><span class='op'>=</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t540' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Overwrite this file with the given lines of text.</span><span class='strut'>&nbsp;</span></p>
+<p id='t541' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t542' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; lines - A list of strings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t543' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; encoding - A Unicode encoding to use.&nbsp; This applies only if</span><span class='strut'>&nbsp;</span></p>
+<p id='t544' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;lines&#39; contains any Unicode strings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t545' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; errors - How to handle errors in Unicode encoding.&nbsp; This</span><span class='strut'>&nbsp;</span></p>
+<p id='t546' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; also applies only to Unicode strings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t547' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; linesep - A character sequence that will be added at the</span><span class='strut'>&nbsp;</span></p>
+<p id='t548' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end of every line that doesn&#39;t already have it.</span><span class='strut'>&nbsp;</span></p>
+<p id='t549' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t550' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='str'>&#39;wb&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t551' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t552' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>line</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t553' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>endswith</span><span class='op'>(</span><span class='nam'>linesep</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t554' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>line</span> <span class='op'>+=</span> <span class='nam'>linesep</span><span class='strut'>&nbsp;</span></p>
+<p id='t555' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>line</span><span class='op'>,</span> <span class='nam'>unicode</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t556' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>encoding</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t557' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>encoding</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>getdefaultencoding</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t558' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>line</span> <span class='op'>=</span> <span class='nam'>line</span><span class='op'>.</span><span class='nam'>encode</span><span class='op'>(</span><span class='nam'>encoding</span><span class='op'>,</span> <span class='nam'>errors</span><span class='op'>=</span><span class='nam'>errors</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t559' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>line</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t560' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t561' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t562' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t563' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t564' class='pln'>&nbsp; &nbsp; <span class='com'># --- Methods for querying the filesystem.</span><span class='strut'>&nbsp;</span></p>
+<p id='t565' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t566' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>exists</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>exists</span><span class='strut'>&nbsp;</span></p>
+<p id='t567' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>isabs</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isabs</span><span class='strut'>&nbsp;</span></p>
+<p id='t568' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>isdir</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isdir</span><span class='strut'>&nbsp;</span></p>
+<p id='t569' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>isfile</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>isfile</span><span class='strut'>&nbsp;</span></p>
+<p id='t570' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>islink</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>islink</span><span class='strut'>&nbsp;</span></p>
+<p id='t571' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>ismount</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>ismount</span><span class='strut'>&nbsp;</span></p>
+<p id='t572' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t573' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>574</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>,</span> <span class='str'>&#39;samefile&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t574' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>samefile</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>samefile</span><span class='strut'>&nbsp;</span></p>
+<p id='t575' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t576' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>getatime</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getatime</span><span class='strut'>&nbsp;</span></p>
+<p id='t577' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>atime</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t578' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getatime</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t579' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Last access time of the file. &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t580' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t581' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>getmtime</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getmtime</span><span class='strut'>&nbsp;</span></p>
+<p id='t582' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>mtime</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t583' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getmtime</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t584' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Last-modified time of the file. &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t585' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t586' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>592</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>,</span> <span class='str'>&#39;getctime&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t587' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getctime</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getctime</span><span class='strut'>&nbsp;</span></p>
+<p id='t588' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>ctime</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t589' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getctime</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t590' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Creation time of the file. &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t591' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t592' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>getsize</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>getsize</span><span class='strut'>&nbsp;</span></p>
+<p id='t593' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>size</span> <span class='op'>=</span> <span class='nam'>property</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t594' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>getsize</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t595' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Size of the file, in bytes. &quot;&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t596' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t597' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>605</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;access&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t598' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t599' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return true if current user has access to this path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t600' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t601' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mode - One of the constants os.F_OK, os.R_OK, os.W_OK, os.X_OK</span><span class='strut'>&nbsp;</span></p>
+<p id='t602' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t603' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t604' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t605' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>stat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t606' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Perform a stat() system call on this path. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t607' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>stat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t608' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t609' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>lstat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t610' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Like path.stat(), but do not follow symbolic links. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t611' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>lstat</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t612' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t613' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>614</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;statvfs&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t614' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>statvfs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t615' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Perform a statvfs() system call on this path. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t616' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>statvfs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t617' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t618' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>619</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;pathconf&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t619' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>pathconf</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t620' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>pathconf</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>name</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t621' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t622' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t623' class='pln'>&nbsp; &nbsp; <span class='com'># --- Modifying operations on files and directories</span><span class='strut'>&nbsp;</span></p>
+<p id='t624' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t625' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>times</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t626' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Set the access and modified times of this file. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t627' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>times</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t628' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t629' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t630' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t631' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t632' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>633</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;chown&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t633' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>chown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>uid</span><span class='op'>,</span> <span class='nam'>gid</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t634' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>uid</span><span class='op'>,</span> <span class='nam'>gid</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t635' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t636' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>rename</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t637' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>rename</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t638' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t639' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>renames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t640' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>renames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>new</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t641' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t642' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t643' class='pln'>&nbsp; &nbsp; <span class='com'># --- Create/delete operations on directories</span><span class='strut'>&nbsp;</span></p>
+<p id='t644' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t645' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>mkdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='num'>0777</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t646' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t647' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t648' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>makedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>=</span><span class='num'>0777</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t649' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>makedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t650' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t651' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>rmdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t652' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>rmdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t653' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t654' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>removedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t655' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>removedirs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t656' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t657' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t658' class='pln'>&nbsp; &nbsp; <span class='com'># --- Modifying operations on files</span><span class='strut'>&nbsp;</span></p>
+<p id='t659' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t660' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>touch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t661' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Set the access/modified times of this file to the current time.</span><span class='strut'>&nbsp;</span></p>
+<p id='t662' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Create the file if it does not exist.</span><span class='strut'>&nbsp;</span></p>
+<p id='t663' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t664' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fd</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>open</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>O_WRONLY</span> <span class='op'>|</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>O_CREAT</span><span class='op'>,</span> <span class='num'>0666</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t665' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='nam'>fd</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t666' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>utime</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>None</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t667' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t668' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>remove</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t669' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t670' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t671' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>unlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t672' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>unlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t673' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t674' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t675' class='pln'>&nbsp; &nbsp; <span class='com'># --- Links</span><span class='strut'>&nbsp;</span></p>
+<p id='t676' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t677' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>678</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;link&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t678' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>link</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newpath</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t679' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Create a hard link at &#39;newpath&#39;, pointing to this file. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t680' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>link</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newpath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t681' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t682' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>683</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;symlink&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t683' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>symlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newlink</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t684' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Create a symbolic link at &#39;newlink&#39;, pointing here. &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t685' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>symlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>newlink</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t686' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t687' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>688</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;readlink&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t688' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>readlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t689' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return the path to which this symbolic link points.</span><span class='strut'>&nbsp;</span></p>
+<p id='t690' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t691' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The result may be an absolute or a relative path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t692' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t693' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>path</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>readlink</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t694' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t695' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>readlinkabs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t696' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Return the path to which this symbolic link points.</span><span class='strut'>&nbsp;</span></p>
+<p id='t697' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t698' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The result is always an absolute path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t699' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t700' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>readlink</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t701' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>p</span><span class='op'>.</span><span class='nam'>isabs</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t702' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>p</span><span class='strut'>&nbsp;</span></p>
+<p id='t703' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t704' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>parent</span> <span class='op'>/</span> <span class='nam'>p</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>abspath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t705' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t706' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t707' class='pln'>&nbsp; &nbsp; <span class='com'># --- High-level functions from shutil</span><span class='strut'>&nbsp;</span></p>
+<p id='t708' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t709' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>copyfile</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copyfile</span><span class='strut'>&nbsp;</span></p>
+<p id='t710' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>copymode</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copymode</span><span class='strut'>&nbsp;</span></p>
+<p id='t711' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>copystat</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copystat</span><span class='strut'>&nbsp;</span></p>
+<p id='t712' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>copy</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copy</span><span class='strut'>&nbsp;</span></p>
+<p id='t713' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>copy2</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copy2</span><span class='strut'>&nbsp;</span></p>
+<p id='t714' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>copytree</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>copytree</span><span class='strut'>&nbsp;</span></p>
+<p id='t715' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>717</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>shutil</span><span class='op'>,</span> <span class='str'>&#39;move&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t716' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>move</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>move</span><span class='strut'>&nbsp;</span></p>
+<p id='t717' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>rmtree</span> <span class='op'>=</span> <span class='nam'>shutil</span><span class='op'>.</span><span class='nam'>rmtree</span><span class='strut'>&nbsp;</span></p>
+<p id='t718' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t719' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t720' class='pln'>&nbsp; &nbsp; <span class='com'># --- Special stuff from os</span><span class='strut'>&nbsp;</span></p>
+<p id='t721' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t722' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>723</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;chroot&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t723' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>chroot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t724' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chroot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t725' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t726' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>,</span> <span class='str'>&#39;startfile&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t727' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>startfile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t728' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>startfile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t729' class='pln'><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/doc/sample_html/cogapp_cogapp.html b/doc/sample_html/cogapp_cogapp.html
index 555756f..30b1c6b 100644
--- a/doc/sample_html/cogapp_cogapp.html
+++ b/doc/sample_html/cogapp_cogapp.html
@@ -1,1467 +1,1460 @@
-<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<title>Coverage for cogapp\cogapp</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script src='jquery-1.3.2.min.js'></script>
-<script>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- if (btn.hasClass("hide")) {
- $("#source ."+cls).removeClass("hide");
- btn.removeClass("hide");
- }
- else {
- $("#source ."+cls).addClass("hide");
- btn.addClass("hide");
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for cogapp\cogapp: 51%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>cogapp\cogapp</b> :
- <span class='pc_cov'>57%</span>
+ <span class='pc_cov'>51%</span>
</h1>
<h2 class='stats'>
387 statements
- <span class='run hide' onclick='toggle_lines(this, "run")'>219 run</span>
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>219 run</span>
<span class='exc' onclick='toggle_lines(this, "exc")'>3 excluded</span>
<span class='mis' onclick='toggle_lines(this, "mis")'>168 missing</span>
+
+ <span class='par run hide_run' onclick='toggle_lines(this, "par")'>26 partial</span>
+
</h2>
</div>
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='pln'>3</p>
-<p class='pln'>4</p>
-<p class='pln'>5</p>
-<p class='pln'>6</p>
-<p class='stm run hide'>7</p>
-<p class='stm run hide'>8</p>
-<p class='pln'>9</p>
-<p class='pln'>10</p>
-<p class='stm run hide'>11</p>
-<p class='stm run hide'>12</p>
-<p class='stm run hide'>13</p>
-<p class='stm mis'>14</p>
-<p class='stm mis'>15</p>
-<p class='stm mis'>16</p>
-<p class='pln'>17</p>
-<p class='stm run hide'>18</p>
-<p class='pln'>19</p>
-<p class='stm run hide'>20</p>
-<p class='pln'>21</p>
-<p class='stm run hide'>22</p>
-<p class='pln'>23</p>
-<p class='pln'>24</p>
-<p class='pln'>25</p>
-<p class='pln'>26</p>
-<p class='pln'>27</p>
-<p class='pln'>28</p>
-<p class='pln'>29</p>
-<p class='pln'>30</p>
-<p class='pln'>31</p>
-<p class='pln'>32</p>
-<p class='pln'>33</p>
-<p class='pln'>34</p>
-<p class='pln'>35</p>
-<p class='pln'>36</p>
-<p class='pln'>37</p>
-<p class='pln'>38</p>
-<p class='pln'>39</p>
-<p class='pln'>40</p>
-<p class='pln'>41</p>
-<p class='pln'>42</p>
-<p class='pln'>43</p>
-<p class='pln'>44</p>
-<p class='pln'>45</p>
-<p class='pln'>46</p>
-<p class='pln'>47</p>
-<p class='pln'>48</p>
-<p class='pln'>49</p>
-<p class='stm run hide'>50</p>
-<p class='pln'>51</p>
-<p class='stm run hide'>52</p>
-<p class='pln'>53</p>
-<p class='pln'>54</p>
-<p class='stm run hide'>55</p>
-<p class='stm run hide'>56</p>
-<p class='stm run hide'>57</p>
-<p class='pln'>58</p>
-<p class='stm mis'>59</p>
-<p class='pln'>60</p>
-<p class='stm run hide'>61</p>
-<p class='pln'>62</p>
-<p class='pln'>63</p>
-<p class='exc'>64</p>
-<p class='pln'>65</p>
-<p class='stm run hide'>66</p>
-<p class='pln'>67</p>
-<p class='pln'>68</p>
-<p class='exc'>69</p>
-<p class='pln'>70</p>
-<p class='stm run hide'>71</p>
-<p class='pln'>72</p>
-<p class='pln'>73</p>
-<p class='exc'>74</p>
-<p class='pln'>75</p>
-<p class='stm run hide'>76</p>
-<p class='pln'>77</p>
-<p class='pln'>78</p>
-<p class='stm run hide'>79</p>
-<p class='stm run hide'>80</p>
-<p class='stm run hide'>81</p>
-<p class='pln'>82</p>
-<p class='stm run hide'>83</p>
-<p class='pln'>84</p>
-<p class='pln'>85</p>
-<p class='stm run hide'>86</p>
-<p class='stm run hide'>87</p>
-<p class='stm run hide'>88</p>
-<p class='stm mis'>89</p>
-<p class='pln'>90</p>
-<p class='stm run hide'>91</p>
-<p class='pln'>92</p>
-<p class='pln'>93</p>
-<p class='stm run hide'>94</p>
-<p class='stm run hide'>95</p>
-<p class='stm run hide'>96</p>
-<p class='stm run hide'>97</p>
-<p class='pln'>98</p>
-<p class='stm run hide'>99</p>
-<p class='stm run hide'>100</p>
-<p class='pln'>101</p>
-<p class='stm run hide'>102</p>
-<p class='stm run hide'>103</p>
-<p class='pln'>104</p>
-<p class='stm run hide'>105</p>
-<p class='pln'>106</p>
-<p class='pln'>107</p>
-<p class='pln'>108</p>
-<p class='pln'>109</p>
-<p class='pln'>110</p>
-<p class='stm run hide'>111</p>
-<p class='stm run hide'>112</p>
-<p class='stm run hide'>113</p>
-<p class='stm run hide'>114</p>
-<p class='pln'>115</p>
-<p class='stm run hide'>116</p>
-<p class='pln'>117</p>
-<p class='stm run hide'>118</p>
-<p class='pln'>119</p>
-<p class='stm run hide'>120</p>
-<p class='pln'>121</p>
-<p class='stm run hide'>122</p>
-<p class='stm run hide'>123</p>
-<p class='stm run hide'>124</p>
-<p class='pln'>125</p>
-<p class='pln'>126</p>
-<p class='stm run hide'>127</p>
-<p class='stm run hide'>128</p>
-<p class='pln'>129</p>
-<p class='pln'>130</p>
-<p class='stm run hide'>131</p>
-<p class='stm run hide'>132</p>
-<p class='stm run hide'>133</p>
-<p class='stm run hide'>134</p>
-<p class='pln'>135</p>
-<p class='stm run hide'>136</p>
-<p class='stm run hide'>137</p>
-<p class='pln'>138</p>
-<p class='pln'>139</p>
-<p class='pln'>140</p>
-<p class='pln'>141</p>
-<p class='stm run hide'>142</p>
-<p class='stm run hide'>143</p>
-<p class='pln'>144</p>
-<p class='stm run hide'>145</p>
-<p class='pln'>146</p>
-<p class='stm run hide'>147</p>
-<p class='stm mis'>148</p>
-<p class='pln'>149</p>
-<p class='stm run hide'>150</p>
-<p class='pln'>151</p>
-<p class='pln'>152</p>
-<p class='stm run hide'>153</p>
-<p class='stm run hide'>154</p>
-<p class='stm run hide'>155</p>
-<p class='stm run hide'>156</p>
-<p class='stm run hide'>157</p>
-<p class='stm run hide'>158</p>
-<p class='stm run hide'>159</p>
-<p class='stm run hide'>160</p>
-<p class='stm run hide'>161</p>
-<p class='stm run hide'>162</p>
-<p class='pln'>163</p>
-<p class='stm run hide'>164</p>
-<p class='pln'>165</p>
-<p class='pln'>166</p>
-<p class='stm run hide'>167</p>
-<p class='stm run hide'>168</p>
-<p class='pln'>169</p>
-<p class='stm run hide'>170</p>
-<p class='pln'>171</p>
-<p class='pln'>172</p>
-<p class='pln'>173</p>
-<p class='pln'>174</p>
-<p class='pln'>175</p>
-<p class='stm mis'>176</p>
-<p class='pln'>177</p>
-<p class='pln'>178</p>
-<p class='stm run hide'>179</p>
-<p class='pln'>180</p>
-<p class='pln'>181</p>
-<p class='stm run hide'>182</p>
-<p class='stm run hide'>183</p>
-<p class='stm run hide'>184</p>
-<p class='pln'>185</p>
-<p class='stm run hide'>186</p>
-<p class='stm run hide'>187</p>
-<p class='stm run hide'>188</p>
-<p class='stm run hide'>189</p>
-<p class='stm run hide'>190</p>
-<p class='pln'>191</p>
-<p class='stm run hide'>192</p>
-<p class='stm run hide'>193</p>
-<p class='pln'>194</p>
-<p class='pln'>195</p>
-<p class='stm run hide'>196</p>
-<p class='pln'>197</p>
-<p class='pln'>198</p>
-<p class='stm run hide'>199</p>
-<p class='pln'>200</p>
-<p class='stm run hide'>201</p>
-<p class='stm run hide'>202</p>
-<p class='stm run hide'>203</p>
-<p class='stm run hide'>204</p>
-<p class='stm run hide'>205</p>
-<p class='stm run hide'>206</p>
-<p class='stm run hide'>207</p>
-<p class='stm run hide'>208</p>
-<p class='stm run hide'>209</p>
-<p class='stm run hide'>210</p>
-<p class='stm run hide'>211</p>
-<p class='stm run hide'>212</p>
-<p class='stm run hide'>213</p>
-<p class='stm run hide'>214</p>
-<p class='pln'>215</p>
-<p class='stm run hide'>216</p>
-<p class='pln'>217</p>
-<p class='pln'>218</p>
-<p class='stm mis'>219</p>
-<p class='pln'>220</p>
-<p class='stm run hide'>221</p>
-<p class='pln'>222</p>
-<p class='pln'>223</p>
-<p class='stm mis'>224</p>
-<p class='pln'>225</p>
-<p class='stm run hide'>226</p>
-<p class='pln'>227</p>
-<p class='pln'>228</p>
-<p class='stm mis'>229</p>
-<p class='stm mis'>230</p>
-<p class='pln'>231</p>
-<p class='stm run hide'>232</p>
-<p class='pln'>233</p>
-<p class='stm mis'>234</p>
-<p class='stm mis'>235</p>
-<p class='stm mis'>236</p>
-<p class='stm mis'>237</p>
-<p class='pln'>238</p>
-<p class='pln'>239</p>
-<p class='stm mis'>240</p>
-<p class='stm mis'>241</p>
-<p class='stm mis'>242</p>
-<p class='stm mis'>243</p>
-<p class='stm mis'>244</p>
-<p class='stm mis'>245</p>
-<p class='stm mis'>246</p>
-<p class='stm mis'>247</p>
-<p class='stm mis'>248</p>
-<p class='stm mis'>249</p>
-<p class='stm mis'>250</p>
-<p class='stm mis'>251</p>
-<p class='stm mis'>252</p>
-<p class='stm mis'>253</p>
-<p class='stm mis'>254</p>
-<p class='stm mis'>255</p>
-<p class='stm mis'>256</p>
-<p class='stm mis'>257</p>
-<p class='stm mis'>258</p>
-<p class='stm mis'>259</p>
-<p class='stm mis'>260</p>
-<p class='stm mis'>261</p>
-<p class='stm mis'>262</p>
-<p class='stm mis'>263</p>
-<p class='stm mis'>264</p>
-<p class='stm mis'>265</p>
-<p class='stm mis'>266</p>
-<p class='stm mis'>267</p>
-<p class='stm mis'>268</p>
-<p class='stm mis'>269</p>
-<p class='pln'>270</p>
-<p class='pln'>271</p>
-<p class='pln'>272</p>
-<p class='stm mis'>273</p>
-<p class='pln'>274</p>
-<p class='stm run hide'>275</p>
-<p class='pln'>276</p>
-<p class='pln'>277</p>
-<p class='stm mis'>278</p>
-<p class='stm mis'>279</p>
-<p class='pln'>280</p>
-<p class='stm mis'>281</p>
-<p class='stm mis'>282</p>
-<p class='pln'>283</p>
-<p class='pln'>284</p>
-<p class='stm run hide'>285</p>
-<p class='pln'>286</p>
-<p class='pln'>287</p>
-<p class='stm run hide'>288</p>
-<p class='stm run hide'>289</p>
-<p class='stm run hide'>290</p>
-<p class='stm run hide'>291</p>
-<p class='stm run hide'>292</p>
-<p class='stm run hide'>293</p>
-<p class='stm run hide'>294</p>
-<p class='pln'>295</p>
-<p class='stm run hide'>296</p>
-<p class='stm run hide'>297</p>
-<p class='pln'>298</p>
-<p class='stm run hide'>299</p>
-<p class='pln'>300</p>
-<p class='stm run hide'>301</p>
-<p class='stm mis'>302</p>
-<p class='pln'>303</p>
-<p class='stm run hide'>304</p>
-<p class='stm run hide'>305</p>
-<p class='pln'>306</p>
-<p class='stm run hide'>307</p>
-<p class='stm run hide'>308</p>
-<p class='pln'>309</p>
-<p class='pln'>310</p>
-<p class='stm run hide'>311</p>
-<p class='stm run hide'>312</p>
-<p class='pln'>313</p>
-<p class='stm run hide'>314</p>
-<p class='pln'>315</p>
-<p class='pln'>316</p>
-<p class='pln'>317</p>
-<p class='stm run hide'>318</p>
-<p class='stm run hide'>319</p>
-<p class='stm run hide'>320</p>
-<p class='pln'>321</p>
-<p class='stm run hide'>322</p>
-<p class='pln'>323</p>
-<p class='pln'>324</p>
-<p class='pln'>325</p>
-<p class='pln'>326</p>
-<p class='stm run hide'>327</p>
-<p class='stm run hide'>328</p>
-<p class='stm run hide'>329</p>
-<p class='pln'>330</p>
-<p class='stm run hide'>331</p>
-<p class='pln'>332</p>
-<p class='stm mis'>333</p>
-<p class='stm mis'>334</p>
-<p class='stm run hide'>335</p>
-<p class='pln'>336</p>
-<p class='stm mis'>337</p>
-<p class='stm mis'>338</p>
-<p class='pln'>339</p>
-<p class='stm run hide'>340</p>
-<p class='stm run hide'>341</p>
-<p class='pln'>342</p>
-<p class='stm run hide'>343</p>
-<p class='pln'>344</p>
-<p class='stm run hide'>345</p>
-<p class='stm run hide'>346</p>
-<p class='pln'>347</p>
-<p class='pln'>348</p>
-<p class='stm run hide'>349</p>
-<p class='stm run hide'>350</p>
-<p class='pln'>351</p>
-<p class='pln'>352</p>
-<p class='stm run hide'>353</p>
-<p class='pln'>354</p>
-<p class='pln'>355</p>
-<p class='stm run hide'>356</p>
-<p class='stm run hide'>357</p>
-<p class='pln'>358</p>
-<p class='stm run hide'>359</p>
-<p class='stm run hide'>360</p>
-<p class='stm mis'>361</p>
-<p class='pln'>362</p>
-<p class='stm run hide'>363</p>
-<p class='stm mis'>364</p>
-<p class='pln'>365</p>
-<p class='stm run hide'>366</p>
-<p class='stm run hide'>367</p>
-<p class='stm run hide'>368</p>
-<p class='stm run hide'>369</p>
-<p class='stm run hide'>370</p>
-<p class='stm run hide'>371</p>
-<p class='pln'>372</p>
-<p class='pln'>373</p>
-<p class='stm run hide'>374</p>
-<p class='stm run hide'>375</p>
-<p class='stm run hide'>376</p>
-<p class='stm run hide'>377</p>
-<p class='stm run hide'>378</p>
-<p class='pln'>379</p>
-<p class='pln'>380</p>
-<p class='pln'>381</p>
-<p class='stm run hide'>382</p>
-<p class='stm run hide'>383</p>
-<p class='stm run hide'>384</p>
-<p class='stm run hide'>385</p>
-<p class='stm run hide'>386</p>
-<p class='pln'>387</p>
-<p class='pln'>388</p>
-<p class='stm run hide'>389</p>
-<p class='stm run hide'>390</p>
-<p class='pln'>391</p>
-<p class='pln'>392</p>
-<p class='stm run hide'>393</p>
-<p class='pln'>394</p>
-<p class='pln'>395</p>
-<p class='stm run hide'>396</p>
-<p class='stm run hide'>397</p>
-<p class='stm mis'>398</p>
-<p class='pln'>399</p>
-<p class='stm run hide'>400</p>
-<p class='stm mis'>401</p>
-<p class='pln'>402</p>
-<p class='stm run hide'>403</p>
-<p class='stm run hide'>404</p>
-<p class='stm run hide'>405</p>
-<p class='stm run hide'>406</p>
-<p class='stm run hide'>407</p>
-<p class='stm mis'>408</p>
-<p class='pln'>409</p>
-<p class='pln'>410</p>
-<p class='pln'>411</p>
-<p class='stm run hide'>412</p>
-<p class='stm run hide'>413</p>
-<p class='stm run hide'>414</p>
-<p class='pln'>415</p>
-<p class='stm run hide'>416</p>
-<p class='pln'>417</p>
-<p class='pln'>418</p>
-<p class='pln'>419</p>
-<p class='stm run hide'>420</p>
-<p class='stm run hide'>421</p>
-<p class='stm run hide'>422</p>
-<p class='stm mis'>423</p>
-<p class='pln'>424</p>
-<p class='stm run hide'>425</p>
-<p class='stm mis'>426</p>
-<p class='pln'>427</p>
-<p class='stm run hide'>428</p>
-<p class='stm run hide'>429</p>
-<p class='stm run hide'>430</p>
-<p class='pln'>431</p>
-<p class='stm run hide'>432</p>
-<p class='pln'>433</p>
-<p class='stm mis'>434</p>
-<p class='pln'>435</p>
-<p class='pln'>436</p>
-<p class='pln'>437</p>
-<p class='pln'>438</p>
-<p class='stm run hide'>439</p>
-<p class='stm run hide'>440</p>
-<p class='stm run hide'>441</p>
-<p class='stm run hide'>442</p>
-<p class='stm run hide'>443</p>
-<p class='stm run hide'>444</p>
-<p class='stm run hide'>445</p>
-<p class='stm run hide'>446</p>
-<p class='pln'>447</p>
-<p class='stm run hide'>448</p>
-<p class='pln'>449</p>
-<p class='pln'>450</p>
-<p class='stm run hide'>451</p>
-<p class='stm run hide'>452</p>
-<p class='stm mis'>453</p>
-<p class='stm mis'>454</p>
-<p class='stm mis'>455</p>
-<p class='stm mis'>456</p>
-<p class='pln'>457</p>
-<p class='pln'>458</p>
-<p class='stm mis'>459</p>
-<p class='pln'>460</p>
-<p class='pln'>461</p>
-<p class='stm mis'>462</p>
-<p class='stm mis'>463</p>
-<p class='pln'>464</p>
-<p class='pln'>465</p>
-<p class='pln'>466</p>
-<p class='stm run hide'>467</p>
-<p class='stm mis'>468</p>
-<p class='pln'>469</p>
-<p class='stm run hide'>470</p>
-<p class='stm run hide'>471</p>
-<p class='stm run hide'>472</p>
-<p class='pln'>473</p>
-<p class='stm run hide'>474</p>
-<p class='stm mis'>475</p>
-<p class='pln'>476</p>
-<p class='stm run hide'>477</p>
-<p class='stm mis'>478</p>
-<p class='stm run hide'>479</p>
-<p class='stm mis'>480</p>
-<p class='pln'>481</p>
-<p class='pln'>482</p>
-<p class='pln'>483</p>
-<p class='stm run hide'>484</p>
-<p class='pln'>485</p>
-<p class='stm run hide'>486</p>
-<p class='pln'>487</p>
-<p class='pln'>488</p>
-<p class='pln'>489</p>
-<p class='stm run hide'>490</p>
-<p class='pln'>491</p>
-<p class='stm mis'>492</p>
-<p class='stm mis'>493</p>
-<p class='stm run hide'>494</p>
-<p class='pln'>495</p>
-<p class='stm run hide'>496</p>
-<p class='pln'>497</p>
-<p class='pln'>498</p>
-<p class='pln'>499</p>
-<p class='stm run hide'>500</p>
-<p class='stm run hide'>501</p>
-<p class='stm run hide'>502</p>
-<p class='stm run hide'>503</p>
-<p class='pln'>504</p>
-<p class='stm run hide'>505</p>
-<p class='pln'>506</p>
-<p class='pln'>507</p>
-<p class='stm mis'>508</p>
-<p class='pln'>509</p>
-<p class='stm mis'>510</p>
-<p class='pln'>511</p>
-<p class='stm mis'>512</p>
-<p class='stm mis'>513</p>
-<p class='stm mis'>514</p>
-<p class='stm mis'>515</p>
-<p class='pln'>516</p>
-<p class='pln'>517</p>
-<p class='stm mis'>518</p>
-<p class='stm mis'>519</p>
-<p class='stm mis'>520</p>
-<p class='stm mis'>521</p>
-<p class='pln'>522</p>
-<p class='stm run hide'>523</p>
-<p class='stm mis'>524</p>
-<p class='stm mis'>525</p>
-<p class='pln'>526</p>
-<p class='stm run hide'>527</p>
-<p class='stm mis'>528</p>
-<p class='stm mis'>529</p>
-<p class='stm mis'>530</p>
-<p class='pln'>531</p>
-<p class='stm run hide'>532</p>
-<p class='stm mis'>533</p>
-<p class='stm mis'>534</p>
-<p class='pln'>535</p>
-<p class='stm run hide'>536</p>
-<p class='pln'>537</p>
-<p class='pln'>538</p>
-<p class='pln'>539</p>
-<p class='stm mis'>540</p>
-<p class='pln'>541</p>
-<p class='stm mis'>542</p>
-<p class='stm mis'>543</p>
-<p class='pln'>544</p>
-<p class='pln'>545</p>
-<p class='stm mis'>546</p>
-<p class='pln'>547</p>
-<p class='pln'>548</p>
-<p class='pln'>549</p>
-<p class='stm mis'>550</p>
-<p class='stm mis'>551</p>
-<p class='stm mis'>552</p>
-<p class='pln'>553</p>
-<p class='pln'>554</p>
-<p class='stm mis'>555</p>
-<p class='stm mis'>556</p>
-<p class='stm mis'>557</p>
-<p class='pln'>558</p>
-<p class='pln'>559</p>
-<p class='stm mis'>560</p>
-<p class='stm mis'>561</p>
-<p class='pln'>562</p>
-<p class='stm mis'>563</p>
-<p class='stm mis'>564</p>
-<p class='stm mis'>565</p>
-<p class='stm mis'>566</p>
-<p class='stm mis'>567</p>
-<p class='stm mis'>568</p>
-<p class='stm mis'>569</p>
-<p class='stm mis'>570</p>
-<p class='stm mis'>571</p>
-<p class='pln'>572</p>
-<p class='pln'>573</p>
-<p class='pln'>574</p>
-<p class='pln'>575</p>
-<p class='pln'>576</p>
-<p class='stm mis'>577</p>
-<p class='stm mis'>578</p>
-<p class='pln'>579</p>
-<p class='stm mis'>580</p>
-<p class='pln'>581</p>
-<p class='stm mis'>582</p>
-<p class='pln'>583</p>
-<p class='stm run hide'>584</p>
-<p class='pln'>585</p>
-<p class='pln'>586</p>
-<p class='stm mis'>587</p>
-<p class='stm mis'>588</p>
-<p class='stm mis'>589</p>
-<p class='stm mis'>590</p>
-<p class='pln'>591</p>
-<p class='stm mis'>592</p>
-<p class='stm mis'>593</p>
-<p class='stm mis'>594</p>
-<p class='pln'>595</p>
-<p class='stm mis'>596</p>
-<p class='stm mis'>597</p>
-<p class='stm mis'>598</p>
-<p class='stm mis'>599</p>
-<p class='pln'>600</p>
-<p class='stm run hide'>601</p>
-<p class='pln'>602</p>
-<p class='pln'>603</p>
-<p class='stm mis'>604</p>
-<p class='stm mis'>605</p>
-<p class='pln'>606</p>
-<p class='stm mis'>607</p>
-<p class='stm mis'>608</p>
-<p class='pln'>609</p>
-<p class='stm mis'>610</p>
-<p class='stm mis'>611</p>
-<p class='stm mis'>612</p>
-<p class='stm mis'>613</p>
-<p class='pln'>614</p>
-<p class='stm mis'>615</p>
-<p class='pln'>616</p>
-<p class='stm mis'>617</p>
-<p class='pln'>618</p>
-<p class='stm run hide'>619</p>
-<p class='pln'>620</p>
-<p class='pln'>621</p>
-<p class='pln'>622</p>
-<p class='pln'>623</p>
-<p class='stm mis'>624</p>
-<p class='pln'>625</p>
-<p class='pln'>626</p>
-<p class='stm mis'>627</p>
-<p class='stm mis'>628</p>
-<p class='stm mis'>629</p>
-<p class='pln'>630</p>
-<p class='stm mis'>631</p>
-<p class='stm mis'>632</p>
-<p class='pln'>633</p>
-<p class='stm mis'>634</p>
-<p class='stm mis'>635</p>
-<p class='stm mis'>636</p>
-<p class='pln'>637</p>
-<p class='stm mis'>638</p>
-<p class='stm mis'>639</p>
-<p class='stm mis'>640</p>
-<p class='pln'>641</p>
-<p class='stm mis'>642</p>
-<p class='pln'>643</p>
-<p class='stm run hide'>644</p>
-<p class='pln'>645</p>
-<p class='pln'>646</p>
-<p class='pln'>647</p>
-<p class='stm mis'>648</p>
-<p class='stm mis'>649</p>
-<p class='stm mis'>650</p>
-<p class='stm mis'>651</p>
-<p class='stm mis'>652</p>
-<p class='stm mis'>653</p>
-<p class='stm mis'>654</p>
-<p class='stm mis'>655</p>
-<p class='stm mis'>656</p>
-<p class='stm mis'>657</p>
-<p class='stm mis'>658</p>
-<p class='stm mis'>659</p>
-<p class='stm mis'>660</p>
-<p class='stm mis'>661</p>
-<p class='stm mis'>662</p>
-<p class='stm mis'>663</p>
-<p class='pln'>664</p>
-<p class='pln'>665</p>
-<p class='pln'>666</p>
-<p class='pln'>667</p>
-<p class='pln'>668</p>
-<p class='pln'>669</p>
-<p class='pln'>670</p>
-<p class='pln'>671</p>
-<p class='pln'>672</p>
-<p class='pln'>673</p>
-<p class='pln'>674</p>
-<p class='pln'>675</p>
-<p class='pln'>676</p>
-<p class='pln'>677</p>
-<p class='pln'>678</p>
-<p class='pln'>679</p>
-<p class='pln'>680</p>
-<p class='pln'>681</p>
-<p class='pln'>682</p>
-<p class='pln'>683</p>
-<p class='pln'>684</p>
-<p class='pln'>685</p>
-<p class='pln'>686</p>
-<p class='pln'>687</p>
-<p class='pln'>688</p>
-<p class='pln'>689</p>
-<p class='pln'>690</p>
-<p class='pln'>691</p>
-<p class='pln'>692</p>
-<p class='pln'>693</p>
-<p class='pln'>694</p>
-<p class='pln'>695</p>
-<p class='pln'>696</p>
-<p class='pln'>697</p>
-<p class='pln'>698</p>
-<p class='pln'>699</p>
-<p class='pln'>700</p>
-<p class='pln'>701</p>
-<p class='pln'>702</p>
-<p class='pln'>703</p>
-<p class='pln'>704</p>
-<p class='pln'>705</p>
-<p class='pln'>706</p>
-<p class='pln'>707</p>
-<p class='pln'>708</p>
-<p class='pln'>709</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='str'>&quot;&quot;&quot; Cog code generation tool.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>copy</span><span class='op'>,</span> <span class='nam'>getopt</span><span class='op'>,</span> <span class='nam'>imp</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>shlex</span><span class='op'>,</span> <span class='nam'>string</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>traceback</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cStringIO</span> <span class='key'>import</span> <span class='nam'>StringIO</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># The recommended way to compute md5&#39;s changed in Python 2.5</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>import</span> <span class='nam'>hashlib</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>hashlib</span><span class='op'>.</span><span class='nam'>md5</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='key'>import</span> <span class='nam'>md5</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>md5</span><span class='op'>.</span><span class='nam'>new</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;Cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;CogUsageError&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;2.2&#39;</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='com'># History at the end of the file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>usage</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>cog - generate code with inlined Python code.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>cog [OPTIONS] [INFILE | @FILELIST] ...</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>INFILE is the name of an input file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>FILELIST is the name of a text file containing file names or</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; other @FILELISTs.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>OPTIONS:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Checksum the output to protect it against accidental change.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -d&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delete the generator code from the output file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -D name=val Define a global string available to your generator code.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -e&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Warn if a file has no cog code in it.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -I PATH&nbsp; &nbsp;&nbsp; Add PATH to the list of directories for data files and modules.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -o OUTNAME&nbsp; Write the output to OUTNAME.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -r&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Replace the input file with the output.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -s STRING&nbsp;&nbsp; Suffix all generated output lines with STRING.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -U&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Write the output with Unix newlines (only LF line-endings).</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -w CMD&nbsp; &nbsp; &nbsp; Use CMD if the output file needs to be made writable.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A %s in the CMD will be filled with the filename.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -x&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Excise all the generated output without running the generators.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -z&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The [[[end]]] marker can be omitted, and is assumed at eof.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -v&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print the version of cog and exit.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; -h&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print this help.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># Other package modules</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='op'>*</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Any exception raised by Cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>file</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>file</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='str'>&quot;%s(%d): %s&quot;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>file</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An error in usage of command-line arguments in cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='key'>pass</span>&nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An error in the coding of Cog. Should never happen.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='key'>pass</span>&nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An error raised by a user&#39;s cog generator.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='key'>pass</span>&nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>Redirectable</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An object with its own stdout and stderr files.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Assign new files for standard out and/or standard error.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>stdout</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>stdout</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>stderr</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; A generator pulled from a source file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>getCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Extract the executable Python code from the generator.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If the markers and lines all have the same prefix</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># (end-of-line comment chars, for example),</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># then remove it from all the lines.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefIn</span> <span class='op'>=</span> <span class='nam'>commonPrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefIn</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>cog</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='str'>&#39;cog generator&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># figure out the right whitespace prefix for the output</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefOut</span> <span class='op'>=</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>intext</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>intext</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># In Python 2.2, the last line has to end in a newline.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>intext</span> <span class='op'>=</span> <span class='str'>&quot;import cog\n&quot;</span> <span class='op'>+</span> <span class='nam'>intext</span> <span class='op'>+</span> <span class='str'>&quot;\n&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>code</span> <span class='op'>=</span> <span class='nam'>compile</span><span class='op'>(</span><span class='nam'>intext</span><span class='op'>,</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>fname</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;exec&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Make sure the &quot;cog&quot; module has our state.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>msg</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>out</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outl</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outl</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>error</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>eval</span><span class='op'>(</span><span class='nam'>code</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We need to make sure that the last line in the output</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># ends with a newline, or it will be joined to the</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># end-output line, ruining cog&#39;s idempotency.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span> <span class='op'>!=</span> <span class='str'>&#39;\n&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='str'>&#39;\n&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>,</span> <span class='nam'>prefOut</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>msg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Message: &quot;</span><span class='op'>+</span><span class='nam'>s</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>out</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='nam'>dedent</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>trimblanklines</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The cog.out function.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>trimblanklines</span> <span class='key'>and</span> <span class='op'>(</span><span class='str'>&#39;\n&#39;</span> <span class='key'>in</span> <span class='nam'>sOut</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>sOut</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>lines</span> <span class='key'>and</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sOut</span> <span class='op'>=</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class='op'>+</span><span class='str'>&#39;\n&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>dedent</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sOut</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='nam'>sOut</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>outl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The cog.outl function.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>error</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='str'>&#39;Error raised by cog generator.&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The cog.error function.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Instead of raising standard python errors, cog generators can use</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this function.&nbsp; It will display the error without a scary Python</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; traceback.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>NumberedFileReader</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; A decorator for files that counts the readline()&#39;s called.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>f</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>f</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>=</span> <span class='num'>0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>readline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>+=</span> <span class='num'>1</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>l</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>linenumber</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogOptions</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Options for a run of cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Defaults for argument values.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>other</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Comparison operator for tests to use.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>.</span><span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>other</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>clone</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Make a clone of these options, for further refinement.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>copy</span><span class='op'>.</span><span class='nam'>deepcopy</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>dirs</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Add directories to the include path.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dirs</span> <span class='op'>=</span> <span class='nam'>dirs</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>pathsep</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>dirs</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Parse the command line arguments.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>getopt</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>,</span> <span class='str'>&#39;cdD:eI:o:rs:Uvw:xz&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Handle the command line arguments.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>o</span><span class='op'>,</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>opts</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-c&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-d&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-D&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>count</span><span class='op'>(</span><span class='str'>&#39;=&#39;</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='num'>1</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;-D takes a name=value argument&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;=&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>value</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-e&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-I&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>a</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-o&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>a</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-r&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-s&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>a</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-U&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-v&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-w&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>a</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-x&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-z&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Since getopt.getopt is given a list of possible flags,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># this is an internal error.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='str'>&quot;Don&#39;t understand argument %s&quot;</span> <span class='op'>%</span> <span class='nam'>o</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>validate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Does nothing if everything is OK, raises CogError&#39;s if it&#39;s not.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t use -d with -r (or you would delete all your source!)&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t use -o with -r (they are opposites)&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The Cog engine.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span> <span class='op'>=</span> <span class='str'>&#39;[[[cog&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span> <span class='op'>=</span> <span class='str'>&#39;]]]&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span> <span class='op'>=</span> <span class='str'>&#39;[[[end]]]&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>r&#39;\[\[\[end]]](?P&lt;hashsect&gt; *\(checksum: (?P&lt;hash&gt;[a-f0-9]+)\))&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>=</span> <span class='str'>&#39;[[[end]]] (checksum: %s)&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>installCogModule</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>showWarning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Warning:&quot;</span><span class='op'>,</span> <span class='nam'>msg</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span> <span class='key'>and</span> <span class='xx'>\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>installCogModule</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Magic mumbo-jumbo so that imported Python modules</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; can say &quot;import cog&quot; and get our state.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span> <span class='op'>=</span> <span class='nam'>imp</span><span class='op'>.</span><span class='nam'>new_module</span><span class='op'>(</span><span class='str'>&#39;cog&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='str'>&#39;cog&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process an input file object to an output file object.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fIn and fOut can be file objects, or file names.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>None</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Convert filenames to files.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Open the input file.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='str'>&#39;r&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Open the output file.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fOut</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>NumberedFileReader</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>inFile</span> <span class='op'>=</span> <span class='nam'>sFileIn</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outFile</span> <span class='op'>=</span> <span class='nam'>sFileOut</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The globals dict we&#39;ll use for this file.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>globals</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If there are any global defines, put them in the globals.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># loop over generator chunks</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Find the next spec begin</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># l is the begin spec</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>firstLineNum</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If the spec begin is also a spec end, then process the single</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># line of code inside.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>beg</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>end</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>beg</span> <span class='op'>&gt;</span> <span class='nam'>end</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Cog code markers inverted&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sCode</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>[</span><span class='nam'>beg</span><span class='op'>+</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class='op'>:</span><span class='nam'>end</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>sCode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Deal with an ordinary code block.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get all the lines in the spec</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;Cog block begun but never ended.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Eat all the lines in the output section.&nbsp; While reading past</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># them, compute the md5 hash of the old output.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>curHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We reached end of file before we found the end output line.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Missing &#39;%s&#39; before end of file.&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Write the output of the spec to be the new output if we&#39;re </span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># supposed to generate code.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNoGenerate</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFile</span> <span class='op'>=</span> <span class='str'>&quot;%s+%d&quot;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>firstLineNum</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>cog</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>newHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Write the ending output line</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hashMatch</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bHashOutput</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>oldHash</span> <span class='op'>=</span> <span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>&#39;hash&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>oldHash</span> <span class='op'>!=</span> <span class='nam'>curHash</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Create a new end line with the correct hash.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># There was no old hash, but we want a new hash.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>%</span> <span class='nam'>newHash</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>endpieces</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We don&#39;t want hashes output, so if there was one, get rid of</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># it.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>&#39;hashsect&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>bSawCog</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>showWarning</span><span class='op'>(</span><span class='str'>&quot;no cog code found in %s&quot;</span> <span class='op'>%</span> <span class='nam'>sFileIn</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>fInToClose</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fInToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>fOutToClose</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOutToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># A regex for non-empty lines, used by suffixLines.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>reNonEmptyLines</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>&quot;^\s*\S+.*$&quot;</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>MULTILINE</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Add suffixes to the lines in text, if our options desire it.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text is many lines, as a single string.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Find all non-blank lines, and add the suffix to the end.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>repl</span> <span class='op'>=</span> <span class='str'>r&quot;\g&lt;0&gt;&quot;</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;\\&#39;</span><span class='op'>,</span> <span class='str'>&#39;\\\\&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>text</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reNonEmptyLines</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='nam'>repl</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>text</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processString</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sInput</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process sInput as the text to cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Return the cogged output as a string.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOld</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='nam'>sInput</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fNew</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>fOld</span><span class='op'>,</span> <span class='nam'>fNew</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>fname</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>fNew</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Replace file sOldPath with the contents sNewText</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Need to ensure we can write.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Use an external command to make the file writable.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;%s&#39;</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>popen</span><span class='op'>(</span><span class='nam'>cmd</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Couldn&#39;t make %s writable&quot;</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Can&#39;t write!</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t overwrite %s&quot;</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sNewText</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>includePath</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process one filename through cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Since we know where the input file came from,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># push its directory onto the include path.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Set the file output mode based on whether we want \n or native</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># line endings.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNewlines</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>&#39;wb&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># How we process the file depends on where the output is going.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bReplace</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We want to replace the cog file with the output,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># but only if they differ.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Cogging %s&quot;</span> <span class='op'>%</span> <span class='nam'>sFile</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOldFile</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sOldText</span> <span class='op'>=</span> <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sNewText</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>sOldText</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>sOldText</span> <span class='op'>!=</span> <span class='nam'>sNewText</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;&nbsp; (changed)&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>False</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The try-finally block is so we can print a partial line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># with the name of the file, and print (changed) on the</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># same line, but also make sure to break the line before</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># any traceback.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>bNeedNewline</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFileList</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process the files in a file list.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>flist</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFileList</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Use shlex to parse the line like a shell.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span> <span class='op'>=</span> <span class='nam'>shlex</span><span class='op'>.</span><span class='nam'>shlex</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>posix</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>whitespace_split</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>commenters</span> <span class='op'>=</span> <span class='str'>&#39;#&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># No escapes, so that backslash can be part of the path</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>escape</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>lex</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>args</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process one command-line.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>saved_options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&#39;@&#39;</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t use -o with @file&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>saved_options</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; All of command-line cog, but in a callable form.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is used by main.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; argv is the equivalent of sys.argv.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>argv0</span> <span class='op'>=</span> <span class='nam'>argv</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Provide help if asked for anywhere in the command line.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;-?&#39;</span> <span class='key'>in</span> <span class='nam'>argv</span> <span class='key'>or</span> <span class='str'>&#39;-h&#39;</span> <span class='key'>in</span> <span class='nam'>argv</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>usage</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bShowVersion</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Cog version %s&quot;</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>a</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;No files to process&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>main</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Handle the command-line execution for cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>0</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>&quot;(for help use -?)&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>2</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>CogGeneratedError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>&quot;Error: %s&quot;</span> <span class='op'>%</span> <span class='nam'>err</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>3</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>1</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>print_exc</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># History:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20040210: First public version.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20040220: Text preceding the start and end marker are removed from Python lines.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -v option on the command line shows the version.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20040311: Make sure the last line of output is properly ended with a newline.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20040605: Fixed some blank line handling in cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Fixed problems with assigning to xml elements in handyxml.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20040621: Changed all line-ends to LF from CRLF.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20041002: Refactor some option handling to simplify unittesting the options.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20041118: cog.out and cog.outl have optional string arguments.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20041119: File names weren&#39;t being properly passed around for warnings, etc.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20041122: Added cog.firstLineNum: a property with the line number of the [[[cog line.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Added cog.inFile and cog.outFile: the names of the input and output file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20041218: Single-line cog generators, with start marker and end marker on</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; the same line.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20041230: Keep a single globals dict for all the code fragments in a single</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; file so they can share state.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050206: Added the -x switch to remove all generated output.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050218: Now code can be on the marker lines as well.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050219: Added -c switch to checksum the output so that edits can be</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; detected before they are obliterated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050521: Added cog.error, contributed by Alexander Belchenko.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050720: Added code deletion and settable globals contributed by Blake Winton.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050724: Many tweaks to improve code coverage.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050726: Error messages are now printed with no traceback.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Code can no longer appear on the marker lines,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; except for single-line style.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -z allows omission of the [[[end]]] marker, and it will be assumed</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; at the end of the file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050729: Refactor option parsing into a separate class, in preparation for</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; future features.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050805: The cogmodule.path wasn&#39;t being properly maintained.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050808: Added the -D option to define a global value.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050810: The %s in the -w command is dealt with more robustly.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Added the -s option to suffix output lines with a marker.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20050817: Now @files can have arguments on each line to change the cog&#39;s</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; behavior for that line.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20051006: Version 2.0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20080521: -U options lets you create Unix newlines on Windows.&nbsp; Thanks,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Alexander Belchenko.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20080522: It&#39;s now ok to have -d with output to stdout, and now we validate</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; the args after each line of an @file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># 20090520: Use hashlib where it&#39;s available, to avoid a warning.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Use the builtin compile() instead of compiler, for Jython.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Explicitly close files we opened, Jython likes this.</span><span class="strut">&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='pln'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='pln'>5</p>
+<p id='n6' class='pln'>6</p>
+<p id='n7' class='stm run hide_run'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='pln'>9</p>
+<p id='n10' class='pln'>10</p>
+<p id='n11' class='stm run hide_run'>11</p>
+<p id='n12' class='stm run hide_run'>12</p>
+<p id='n13' class='stm run hide_run'>13</p>
+<p id='n14' class='stm mis'>14</p>
+<p id='n15' class='stm mis'>15</p>
+<p id='n16' class='stm mis'>16</p>
+<p id='n17' class='pln'>17</p>
+<p id='n18' class='stm run hide_run'>18</p>
+<p id='n19' class='pln'>19</p>
+<p id='n20' class='stm run hide_run'>20</p>
+<p id='n21' class='pln'>21</p>
+<p id='n22' class='stm run hide_run'>22</p>
+<p id='n23' class='pln'>23</p>
+<p id='n24' class='pln'>24</p>
+<p id='n25' class='pln'>25</p>
+<p id='n26' class='pln'>26</p>
+<p id='n27' class='pln'>27</p>
+<p id='n28' class='pln'>28</p>
+<p id='n29' class='pln'>29</p>
+<p id='n30' class='pln'>30</p>
+<p id='n31' class='pln'>31</p>
+<p id='n32' class='pln'>32</p>
+<p id='n33' class='pln'>33</p>
+<p id='n34' class='pln'>34</p>
+<p id='n35' class='pln'>35</p>
+<p id='n36' class='pln'>36</p>
+<p id='n37' class='pln'>37</p>
+<p id='n38' class='pln'>38</p>
+<p id='n39' class='pln'>39</p>
+<p id='n40' class='pln'>40</p>
+<p id='n41' class='pln'>41</p>
+<p id='n42' class='pln'>42</p>
+<p id='n43' class='pln'>43</p>
+<p id='n44' class='pln'>44</p>
+<p id='n45' class='pln'>45</p>
+<p id='n46' class='pln'>46</p>
+<p id='n47' class='pln'>47</p>
+<p id='n48' class='pln'>48</p>
+<p id='n49' class='pln'>49</p>
+<p id='n50' class='stm run hide_run'>50</p>
+<p id='n51' class='pln'>51</p>
+<p id='n52' class='stm run hide_run'>52</p>
+<p id='n53' class='pln'>53</p>
+<p id='n54' class='pln'>54</p>
+<p id='n55' class='stm run hide_run'>55</p>
+<p id='n56' class='stm par run hide_run'>56</p>
+<p id='n57' class='stm run hide_run'>57</p>
+<p id='n58' class='pln'>58</p>
+<p id='n59' class='stm mis'>59</p>
+<p id='n60' class='pln'>60</p>
+<p id='n61' class='stm run hide_run'>61</p>
+<p id='n62' class='pln'>62</p>
+<p id='n63' class='pln'>63</p>
+<p id='n64' class='exc'>64</p>
+<p id='n65' class='pln'>65</p>
+<p id='n66' class='stm run hide_run'>66</p>
+<p id='n67' class='pln'>67</p>
+<p id='n68' class='pln'>68</p>
+<p id='n69' class='exc'>69</p>
+<p id='n70' class='pln'>70</p>
+<p id='n71' class='stm run hide_run'>71</p>
+<p id='n72' class='pln'>72</p>
+<p id='n73' class='pln'>73</p>
+<p id='n74' class='exc'>74</p>
+<p id='n75' class='pln'>75</p>
+<p id='n76' class='stm run hide_run'>76</p>
+<p id='n77' class='pln'>77</p>
+<p id='n78' class='pln'>78</p>
+<p id='n79' class='stm run hide_run'>79</p>
+<p id='n80' class='stm run hide_run'>80</p>
+<p id='n81' class='stm run hide_run'>81</p>
+<p id='n82' class='pln'>82</p>
+<p id='n83' class='stm run hide_run'>83</p>
+<p id='n84' class='pln'>84</p>
+<p id='n85' class='pln'>85</p>
+<p id='n86' class='stm par run hide_run'>86</p>
+<p id='n87' class='stm run hide_run'>87</p>
+<p id='n88' class='stm par run hide_run'>88</p>
+<p id='n89' class='stm mis'>89</p>
+<p id='n90' class='pln'>90</p>
+<p id='n91' class='stm run hide_run'>91</p>
+<p id='n92' class='pln'>92</p>
+<p id='n93' class='pln'>93</p>
+<p id='n94' class='stm run hide_run'>94</p>
+<p id='n95' class='stm run hide_run'>95</p>
+<p id='n96' class='stm run hide_run'>96</p>
+<p id='n97' class='stm run hide_run'>97</p>
+<p id='n98' class='pln'>98</p>
+<p id='n99' class='stm run hide_run'>99</p>
+<p id='n100' class='stm run hide_run'>100</p>
+<p id='n101' class='pln'>101</p>
+<p id='n102' class='stm run hide_run'>102</p>
+<p id='n103' class='stm run hide_run'>103</p>
+<p id='n104' class='pln'>104</p>
+<p id='n105' class='stm run hide_run'>105</p>
+<p id='n106' class='pln'>106</p>
+<p id='n107' class='pln'>107</p>
+<p id='n108' class='pln'>108</p>
+<p id='n109' class='pln'>109</p>
+<p id='n110' class='pln'>110</p>
+<p id='n111' class='stm run hide_run'>111</p>
+<p id='n112' class='stm run hide_run'>112</p>
+<p id='n113' class='stm run hide_run'>113</p>
+<p id='n114' class='stm run hide_run'>114</p>
+<p id='n115' class='pln'>115</p>
+<p id='n116' class='stm run hide_run'>116</p>
+<p id='n117' class='pln'>117</p>
+<p id='n118' class='stm run hide_run'>118</p>
+<p id='n119' class='pln'>119</p>
+<p id='n120' class='stm run hide_run'>120</p>
+<p id='n121' class='pln'>121</p>
+<p id='n122' class='stm run hide_run'>122</p>
+<p id='n123' class='stm run hide_run'>123</p>
+<p id='n124' class='stm run hide_run'>124</p>
+<p id='n125' class='pln'>125</p>
+<p id='n126' class='pln'>126</p>
+<p id='n127' class='stm run hide_run'>127</p>
+<p id='n128' class='stm run hide_run'>128</p>
+<p id='n129' class='pln'>129</p>
+<p id='n130' class='pln'>130</p>
+<p id='n131' class='stm run hide_run'>131</p>
+<p id='n132' class='stm run hide_run'>132</p>
+<p id='n133' class='stm run hide_run'>133</p>
+<p id='n134' class='stm run hide_run'>134</p>
+<p id='n135' class='pln'>135</p>
+<p id='n136' class='stm run hide_run'>136</p>
+<p id='n137' class='stm run hide_run'>137</p>
+<p id='n138' class='pln'>138</p>
+<p id='n139' class='pln'>139</p>
+<p id='n140' class='pln'>140</p>
+<p id='n141' class='pln'>141</p>
+<p id='n142' class='stm run hide_run'>142</p>
+<p id='n143' class='stm run hide_run'>143</p>
+<p id='n144' class='pln'>144</p>
+<p id='n145' class='stm run hide_run'>145</p>
+<p id='n146' class='pln'>146</p>
+<p id='n147' class='stm run hide_run'>147</p>
+<p id='n148' class='stm mis'>148</p>
+<p id='n149' class='pln'>149</p>
+<p id='n150' class='stm run hide_run'>150</p>
+<p id='n151' class='pln'>151</p>
+<p id='n152' class='pln'>152</p>
+<p id='n153' class='stm run hide_run'>153</p>
+<p id='n154' class='stm run hide_run'>154</p>
+<p id='n155' class='stm run hide_run'>155</p>
+<p id='n156' class='stm run hide_run'>156</p>
+<p id='n157' class='stm par run hide_run'>157</p>
+<p id='n158' class='stm run hide_run'>158</p>
+<p id='n159' class='stm run hide_run'>159</p>
+<p id='n160' class='stm run hide_run'>160</p>
+<p id='n161' class='stm run hide_run'>161</p>
+<p id='n162' class='stm run hide_run'>162</p>
+<p id='n163' class='pln'>163</p>
+<p id='n164' class='stm run hide_run'>164</p>
+<p id='n165' class='pln'>165</p>
+<p id='n166' class='pln'>166</p>
+<p id='n167' class='stm run hide_run'>167</p>
+<p id='n168' class='stm run hide_run'>168</p>
+<p id='n169' class='pln'>169</p>
+<p id='n170' class='stm run hide_run'>170</p>
+<p id='n171' class='pln'>171</p>
+<p id='n172' class='pln'>172</p>
+<p id='n173' class='pln'>173</p>
+<p id='n174' class='pln'>174</p>
+<p id='n175' class='pln'>175</p>
+<p id='n176' class='stm mis'>176</p>
+<p id='n177' class='pln'>177</p>
+<p id='n178' class='pln'>178</p>
+<p id='n179' class='stm run hide_run'>179</p>
+<p id='n180' class='pln'>180</p>
+<p id='n181' class='pln'>181</p>
+<p id='n182' class='stm run hide_run'>182</p>
+<p id='n183' class='stm run hide_run'>183</p>
+<p id='n184' class='stm run hide_run'>184</p>
+<p id='n185' class='pln'>185</p>
+<p id='n186' class='stm run hide_run'>186</p>
+<p id='n187' class='stm run hide_run'>187</p>
+<p id='n188' class='stm run hide_run'>188</p>
+<p id='n189' class='stm run hide_run'>189</p>
+<p id='n190' class='stm run hide_run'>190</p>
+<p id='n191' class='pln'>191</p>
+<p id='n192' class='stm run hide_run'>192</p>
+<p id='n193' class='stm run hide_run'>193</p>
+<p id='n194' class='pln'>194</p>
+<p id='n195' class='pln'>195</p>
+<p id='n196' class='stm run hide_run'>196</p>
+<p id='n197' class='pln'>197</p>
+<p id='n198' class='pln'>198</p>
+<p id='n199' class='stm run hide_run'>199</p>
+<p id='n200' class='pln'>200</p>
+<p id='n201' class='stm run hide_run'>201</p>
+<p id='n202' class='stm run hide_run'>202</p>
+<p id='n203' class='stm run hide_run'>203</p>
+<p id='n204' class='stm run hide_run'>204</p>
+<p id='n205' class='stm run hide_run'>205</p>
+<p id='n206' class='stm run hide_run'>206</p>
+<p id='n207' class='stm run hide_run'>207</p>
+<p id='n208' class='stm run hide_run'>208</p>
+<p id='n209' class='stm run hide_run'>209</p>
+<p id='n210' class='stm run hide_run'>210</p>
+<p id='n211' class='stm run hide_run'>211</p>
+<p id='n212' class='stm run hide_run'>212</p>
+<p id='n213' class='stm run hide_run'>213</p>
+<p id='n214' class='stm run hide_run'>214</p>
+<p id='n215' class='pln'>215</p>
+<p id='n216' class='stm run hide_run'>216</p>
+<p id='n217' class='pln'>217</p>
+<p id='n218' class='pln'>218</p>
+<p id='n219' class='stm mis'>219</p>
+<p id='n220' class='pln'>220</p>
+<p id='n221' class='stm run hide_run'>221</p>
+<p id='n222' class='pln'>222</p>
+<p id='n223' class='pln'>223</p>
+<p id='n224' class='stm mis'>224</p>
+<p id='n225' class='pln'>225</p>
+<p id='n226' class='stm run hide_run'>226</p>
+<p id='n227' class='pln'>227</p>
+<p id='n228' class='pln'>228</p>
+<p id='n229' class='stm mis'>229</p>
+<p id='n230' class='stm mis'>230</p>
+<p id='n231' class='pln'>231</p>
+<p id='n232' class='stm run hide_run'>232</p>
+<p id='n233' class='pln'>233</p>
+<p id='n234' class='stm mis'>234</p>
+<p id='n235' class='stm mis'>235</p>
+<p id='n236' class='stm mis'>236</p>
+<p id='n237' class='stm mis'>237</p>
+<p id='n238' class='pln'>238</p>
+<p id='n239' class='pln'>239</p>
+<p id='n240' class='stm mis'>240</p>
+<p id='n241' class='stm mis'>241</p>
+<p id='n242' class='stm mis'>242</p>
+<p id='n243' class='stm mis'>243</p>
+<p id='n244' class='stm mis'>244</p>
+<p id='n245' class='stm mis'>245</p>
+<p id='n246' class='stm mis'>246</p>
+<p id='n247' class='stm mis'>247</p>
+<p id='n248' class='stm mis'>248</p>
+<p id='n249' class='stm mis'>249</p>
+<p id='n250' class='stm mis'>250</p>
+<p id='n251' class='stm mis'>251</p>
+<p id='n252' class='stm mis'>252</p>
+<p id='n253' class='stm mis'>253</p>
+<p id='n254' class='stm mis'>254</p>
+<p id='n255' class='stm mis'>255</p>
+<p id='n256' class='stm mis'>256</p>
+<p id='n257' class='stm mis'>257</p>
+<p id='n258' class='stm mis'>258</p>
+<p id='n259' class='stm mis'>259</p>
+<p id='n260' class='stm mis'>260</p>
+<p id='n261' class='stm mis'>261</p>
+<p id='n262' class='stm mis'>262</p>
+<p id='n263' class='stm mis'>263</p>
+<p id='n264' class='stm mis'>264</p>
+<p id='n265' class='stm mis'>265</p>
+<p id='n266' class='stm mis'>266</p>
+<p id='n267' class='stm mis'>267</p>
+<p id='n268' class='stm mis'>268</p>
+<p id='n269' class='stm mis'>269</p>
+<p id='n270' class='pln'>270</p>
+<p id='n271' class='pln'>271</p>
+<p id='n272' class='pln'>272</p>
+<p id='n273' class='stm mis'>273</p>
+<p id='n274' class='pln'>274</p>
+<p id='n275' class='stm run hide_run'>275</p>
+<p id='n276' class='pln'>276</p>
+<p id='n277' class='pln'>277</p>
+<p id='n278' class='stm mis'>278</p>
+<p id='n279' class='stm mis'>279</p>
+<p id='n280' class='pln'>280</p>
+<p id='n281' class='stm mis'>281</p>
+<p id='n282' class='stm mis'>282</p>
+<p id='n283' class='pln'>283</p>
+<p id='n284' class='pln'>284</p>
+<p id='n285' class='stm run hide_run'>285</p>
+<p id='n286' class='pln'>286</p>
+<p id='n287' class='pln'>287</p>
+<p id='n288' class='stm run hide_run'>288</p>
+<p id='n289' class='stm run hide_run'>289</p>
+<p id='n290' class='stm run hide_run'>290</p>
+<p id='n291' class='stm run hide_run'>291</p>
+<p id='n292' class='stm run hide_run'>292</p>
+<p id='n293' class='stm run hide_run'>293</p>
+<p id='n294' class='stm run hide_run'>294</p>
+<p id='n295' class='pln'>295</p>
+<p id='n296' class='stm run hide_run'>296</p>
+<p id='n297' class='stm run hide_run'>297</p>
+<p id='n298' class='pln'>298</p>
+<p id='n299' class='stm run hide_run'>299</p>
+<p id='n300' class='pln'>300</p>
+<p id='n301' class='stm run hide_run'>301</p>
+<p id='n302' class='stm mis'>302</p>
+<p id='n303' class='pln'>303</p>
+<p id='n304' class='stm run hide_run'>304</p>
+<p id='n305' class='stm run hide_run'>305</p>
+<p id='n306' class='pln'>306</p>
+<p id='n307' class='stm run hide_run'>307</p>
+<p id='n308' class='stm run hide_run'>308</p>
+<p id='n309' class='pln'>309</p>
+<p id='n310' class='pln'>310</p>
+<p id='n311' class='stm run hide_run'>311</p>
+<p id='n312' class='stm run hide_run'>312</p>
+<p id='n313' class='pln'>313</p>
+<p id='n314' class='stm run hide_run'>314</p>
+<p id='n315' class='pln'>315</p>
+<p id='n316' class='pln'>316</p>
+<p id='n317' class='pln'>317</p>
+<p id='n318' class='stm run hide_run'>318</p>
+<p id='n319' class='stm run hide_run'>319</p>
+<p id='n320' class='stm run hide_run'>320</p>
+<p id='n321' class='pln'>321</p>
+<p id='n322' class='stm run hide_run'>322</p>
+<p id='n323' class='pln'>323</p>
+<p id='n324' class='pln'>324</p>
+<p id='n325' class='pln'>325</p>
+<p id='n326' class='pln'>326</p>
+<p id='n327' class='stm run hide_run'>327</p>
+<p id='n328' class='stm run hide_run'>328</p>
+<p id='n329' class='stm run hide_run'>329</p>
+<p id='n330' class='pln'>330</p>
+<p id='n331' class='stm par run hide_run'>331</p>
+<p id='n332' class='pln'>332</p>
+<p id='n333' class='stm mis'>333</p>
+<p id='n334' class='stm mis'>334</p>
+<p id='n335' class='stm par run hide_run'>335</p>
+<p id='n336' class='pln'>336</p>
+<p id='n337' class='stm mis'>337</p>
+<p id='n338' class='stm mis'>338</p>
+<p id='n339' class='pln'>339</p>
+<p id='n340' class='stm run hide_run'>340</p>
+<p id='n341' class='stm run hide_run'>341</p>
+<p id='n342' class='pln'>342</p>
+<p id='n343' class='stm run hide_run'>343</p>
+<p id='n344' class='pln'>344</p>
+<p id='n345' class='stm run hide_run'>345</p>
+<p id='n346' class='stm run hide_run'>346</p>
+<p id='n347' class='pln'>347</p>
+<p id='n348' class='pln'>348</p>
+<p id='n349' class='stm par run hide_run'>349</p>
+<p id='n350' class='stm run hide_run'>350</p>
+<p id='n351' class='pln'>351</p>
+<p id='n352' class='pln'>352</p>
+<p id='n353' class='stm run hide_run'>353</p>
+<p id='n354' class='pln'>354</p>
+<p id='n355' class='pln'>355</p>
+<p id='n356' class='stm run hide_run'>356</p>
+<p id='n357' class='stm run hide_run'>357</p>
+<p id='n358' class='pln'>358</p>
+<p id='n359' class='stm run hide_run'>359</p>
+<p id='n360' class='stm par run hide_run'>360</p>
+<p id='n361' class='stm mis'>361</p>
+<p id='n362' class='pln'>362</p>
+<p id='n363' class='stm par run hide_run'>363</p>
+<p id='n364' class='stm mis'>364</p>
+<p id='n365' class='pln'>365</p>
+<p id='n366' class='stm run hide_run'>366</p>
+<p id='n367' class='stm run hide_run'>367</p>
+<p id='n368' class='stm run hide_run'>368</p>
+<p id='n369' class='stm run hide_run'>369</p>
+<p id='n370' class='stm par run hide_run'>370</p>
+<p id='n371' class='stm run hide_run'>371</p>
+<p id='n372' class='pln'>372</p>
+<p id='n373' class='pln'>373</p>
+<p id='n374' class='stm run hide_run'>374</p>
+<p id='n375' class='stm run hide_run'>375</p>
+<p id='n376' class='stm run hide_run'>376</p>
+<p id='n377' class='stm run hide_run'>377</p>
+<p id='n378' class='stm run hide_run'>378</p>
+<p id='n379' class='pln'>379</p>
+<p id='n380' class='pln'>380</p>
+<p id='n381' class='pln'>381</p>
+<p id='n382' class='stm run hide_run'>382</p>
+<p id='n383' class='stm run hide_run'>383</p>
+<p id='n384' class='stm run hide_run'>384</p>
+<p id='n385' class='stm run hide_run'>385</p>
+<p id='n386' class='stm run hide_run'>386</p>
+<p id='n387' class='pln'>387</p>
+<p id='n388' class='pln'>388</p>
+<p id='n389' class='stm run hide_run'>389</p>
+<p id='n390' class='stm run hide_run'>390</p>
+<p id='n391' class='pln'>391</p>
+<p id='n392' class='pln'>392</p>
+<p id='n393' class='stm run hide_run'>393</p>
+<p id='n394' class='pln'>394</p>
+<p id='n395' class='pln'>395</p>
+<p id='n396' class='stm run hide_run'>396</p>
+<p id='n397' class='stm par run hide_run'>397</p>
+<p id='n398' class='stm mis'>398</p>
+<p id='n399' class='pln'>399</p>
+<p id='n400' class='stm par run hide_run'>400</p>
+<p id='n401' class='stm mis'>401</p>
+<p id='n402' class='pln'>402</p>
+<p id='n403' class='stm par run hide_run'>403</p>
+<p id='n404' class='stm run hide_run'>404</p>
+<p id='n405' class='stm run hide_run'>405</p>
+<p id='n406' class='stm run hide_run'>406</p>
+<p id='n407' class='stm par run hide_run'>407</p>
+<p id='n408' class='stm mis'>408</p>
+<p id='n409' class='pln'>409</p>
+<p id='n410' class='pln'>410</p>
+<p id='n411' class='pln'>411</p>
+<p id='n412' class='stm par run hide_run'>412</p>
+<p id='n413' class='stm run hide_run'>413</p>
+<p id='n414' class='stm run hide_run'>414</p>
+<p id='n415' class='pln'>415</p>
+<p id='n416' class='stm run hide_run'>416</p>
+<p id='n417' class='pln'>417</p>
+<p id='n418' class='pln'>418</p>
+<p id='n419' class='pln'>419</p>
+<p id='n420' class='stm run hide_run'>420</p>
+<p id='n421' class='stm run hide_run'>421</p>
+<p id='n422' class='stm par run hide_run'>422</p>
+<p id='n423' class='stm mis'>423</p>
+<p id='n424' class='pln'>424</p>
+<p id='n425' class='stm par run hide_run'>425</p>
+<p id='n426' class='stm mis'>426</p>
+<p id='n427' class='pln'>427</p>
+<p id='n428' class='stm run hide_run'>428</p>
+<p id='n429' class='stm run hide_run'>429</p>
+<p id='n430' class='stm run hide_run'>430</p>
+<p id='n431' class='pln'>431</p>
+<p id='n432' class='stm par run hide_run'>432</p>
+<p id='n433' class='pln'>433</p>
+<p id='n434' class='stm mis'>434</p>
+<p id='n435' class='pln'>435</p>
+<p id='n436' class='pln'>436</p>
+<p id='n437' class='pln'>437</p>
+<p id='n438' class='pln'>438</p>
+<p id='n439' class='stm run hide_run'>439</p>
+<p id='n440' class='stm par run hide_run'>440</p>
+<p id='n441' class='stm run hide_run'>441</p>
+<p id='n442' class='stm run hide_run'>442</p>
+<p id='n443' class='stm run hide_run'>443</p>
+<p id='n444' class='stm run hide_run'>444</p>
+<p id='n445' class='stm run hide_run'>445</p>
+<p id='n446' class='stm run hide_run'>446</p>
+<p id='n447' class='pln'>447</p>
+<p id='n448' class='stm run hide_run'>448</p>
+<p id='n449' class='pln'>449</p>
+<p id='n450' class='pln'>450</p>
+<p id='n451' class='stm run hide_run'>451</p>
+<p id='n452' class='stm par run hide_run'>452</p>
+<p id='n453' class='stm mis'>453</p>
+<p id='n454' class='stm mis'>454</p>
+<p id='n455' class='stm mis'>455</p>
+<p id='n456' class='stm mis'>456</p>
+<p id='n457' class='pln'>457</p>
+<p id='n458' class='pln'>458</p>
+<p id='n459' class='stm mis'>459</p>
+<p id='n460' class='pln'>460</p>
+<p id='n461' class='pln'>461</p>
+<p id='n462' class='stm mis'>462</p>
+<p id='n463' class='stm mis'>463</p>
+<p id='n464' class='pln'>464</p>
+<p id='n465' class='pln'>465</p>
+<p id='n466' class='pln'>466</p>
+<p id='n467' class='stm par run hide_run'>467</p>
+<p id='n468' class='stm mis'>468</p>
+<p id='n469' class='pln'>469</p>
+<p id='n470' class='stm par run hide_run'>470</p>
+<p id='n471' class='stm run hide_run'>471</p>
+<p id='n472' class='stm run hide_run'>472</p>
+<p id='n473' class='pln'>473</p>
+<p id='n474' class='stm par run hide_run'>474</p>
+<p id='n475' class='stm mis'>475</p>
+<p id='n476' class='pln'>476</p>
+<p id='n477' class='stm par run hide_run'>477</p>
+<p id='n478' class='stm mis'>478</p>
+<p id='n479' class='stm par run hide_run'>479</p>
+<p id='n480' class='stm mis'>480</p>
+<p id='n481' class='pln'>481</p>
+<p id='n482' class='pln'>482</p>
+<p id='n483' class='pln'>483</p>
+<p id='n484' class='stm run hide_run'>484</p>
+<p id='n485' class='pln'>485</p>
+<p id='n486' class='stm run hide_run'>486</p>
+<p id='n487' class='pln'>487</p>
+<p id='n488' class='pln'>488</p>
+<p id='n489' class='pln'>489</p>
+<p id='n490' class='stm par run hide_run'>490</p>
+<p id='n491' class='pln'>491</p>
+<p id='n492' class='stm mis'>492</p>
+<p id='n493' class='stm mis'>493</p>
+<p id='n494' class='stm run hide_run'>494</p>
+<p id='n495' class='pln'>495</p>
+<p id='n496' class='stm run hide_run'>496</p>
+<p id='n497' class='pln'>497</p>
+<p id='n498' class='pln'>498</p>
+<p id='n499' class='pln'>499</p>
+<p id='n500' class='stm run hide_run'>500</p>
+<p id='n501' class='stm run hide_run'>501</p>
+<p id='n502' class='stm run hide_run'>502</p>
+<p id='n503' class='stm run hide_run'>503</p>
+<p id='n504' class='pln'>504</p>
+<p id='n505' class='stm run hide_run'>505</p>
+<p id='n506' class='pln'>506</p>
+<p id='n507' class='pln'>507</p>
+<p id='n508' class='stm mis'>508</p>
+<p id='n509' class='pln'>509</p>
+<p id='n510' class='stm mis'>510</p>
+<p id='n511' class='pln'>511</p>
+<p id='n512' class='stm mis'>512</p>
+<p id='n513' class='stm mis'>513</p>
+<p id='n514' class='stm mis'>514</p>
+<p id='n515' class='stm mis'>515</p>
+<p id='n516' class='pln'>516</p>
+<p id='n517' class='pln'>517</p>
+<p id='n518' class='stm mis'>518</p>
+<p id='n519' class='stm mis'>519</p>
+<p id='n520' class='stm mis'>520</p>
+<p id='n521' class='stm mis'>521</p>
+<p id='n522' class='pln'>522</p>
+<p id='n523' class='stm run hide_run'>523</p>
+<p id='n524' class='stm mis'>524</p>
+<p id='n525' class='stm mis'>525</p>
+<p id='n526' class='pln'>526</p>
+<p id='n527' class='stm run hide_run'>527</p>
+<p id='n528' class='stm mis'>528</p>
+<p id='n529' class='stm mis'>529</p>
+<p id='n530' class='stm mis'>530</p>
+<p id='n531' class='pln'>531</p>
+<p id='n532' class='stm run hide_run'>532</p>
+<p id='n533' class='stm mis'>533</p>
+<p id='n534' class='stm mis'>534</p>
+<p id='n535' class='pln'>535</p>
+<p id='n536' class='stm run hide_run'>536</p>
+<p id='n537' class='pln'>537</p>
+<p id='n538' class='pln'>538</p>
+<p id='n539' class='pln'>539</p>
+<p id='n540' class='stm mis'>540</p>
+<p id='n541' class='pln'>541</p>
+<p id='n542' class='stm mis'>542</p>
+<p id='n543' class='stm mis'>543</p>
+<p id='n544' class='pln'>544</p>
+<p id='n545' class='pln'>545</p>
+<p id='n546' class='stm mis'>546</p>
+<p id='n547' class='pln'>547</p>
+<p id='n548' class='pln'>548</p>
+<p id='n549' class='pln'>549</p>
+<p id='n550' class='stm mis'>550</p>
+<p id='n551' class='stm mis'>551</p>
+<p id='n552' class='stm mis'>552</p>
+<p id='n553' class='pln'>553</p>
+<p id='n554' class='pln'>554</p>
+<p id='n555' class='stm mis'>555</p>
+<p id='n556' class='stm mis'>556</p>
+<p id='n557' class='stm mis'>557</p>
+<p id='n558' class='pln'>558</p>
+<p id='n559' class='pln'>559</p>
+<p id='n560' class='stm mis'>560</p>
+<p id='n561' class='stm mis'>561</p>
+<p id='n562' class='pln'>562</p>
+<p id='n563' class='stm mis'>563</p>
+<p id='n564' class='stm mis'>564</p>
+<p id='n565' class='stm mis'>565</p>
+<p id='n566' class='stm mis'>566</p>
+<p id='n567' class='stm mis'>567</p>
+<p id='n568' class='stm mis'>568</p>
+<p id='n569' class='stm mis'>569</p>
+<p id='n570' class='stm mis'>570</p>
+<p id='n571' class='stm mis'>571</p>
+<p id='n572' class='pln'>572</p>
+<p id='n573' class='pln'>573</p>
+<p id='n574' class='pln'>574</p>
+<p id='n575' class='pln'>575</p>
+<p id='n576' class='pln'>576</p>
+<p id='n577' class='stm mis'>577</p>
+<p id='n578' class='stm mis'>578</p>
+<p id='n579' class='pln'>579</p>
+<p id='n580' class='stm mis'>580</p>
+<p id='n581' class='pln'>581</p>
+<p id='n582' class='stm mis'>582</p>
+<p id='n583' class='pln'>583</p>
+<p id='n584' class='stm run hide_run'>584</p>
+<p id='n585' class='pln'>585</p>
+<p id='n586' class='pln'>586</p>
+<p id='n587' class='stm mis'>587</p>
+<p id='n588' class='stm mis'>588</p>
+<p id='n589' class='stm mis'>589</p>
+<p id='n590' class='stm mis'>590</p>
+<p id='n591' class='pln'>591</p>
+<p id='n592' class='stm mis'>592</p>
+<p id='n593' class='stm mis'>593</p>
+<p id='n594' class='stm mis'>594</p>
+<p id='n595' class='pln'>595</p>
+<p id='n596' class='stm mis'>596</p>
+<p id='n597' class='stm mis'>597</p>
+<p id='n598' class='stm mis'>598</p>
+<p id='n599' class='stm mis'>599</p>
+<p id='n600' class='pln'>600</p>
+<p id='n601' class='stm run hide_run'>601</p>
+<p id='n602' class='pln'>602</p>
+<p id='n603' class='pln'>603</p>
+<p id='n604' class='stm mis'>604</p>
+<p id='n605' class='stm mis'>605</p>
+<p id='n606' class='pln'>606</p>
+<p id='n607' class='stm mis'>607</p>
+<p id='n608' class='stm mis'>608</p>
+<p id='n609' class='pln'>609</p>
+<p id='n610' class='stm mis'>610</p>
+<p id='n611' class='stm mis'>611</p>
+<p id='n612' class='stm mis'>612</p>
+<p id='n613' class='stm mis'>613</p>
+<p id='n614' class='pln'>614</p>
+<p id='n615' class='stm mis'>615</p>
+<p id='n616' class='pln'>616</p>
+<p id='n617' class='stm mis'>617</p>
+<p id='n618' class='pln'>618</p>
+<p id='n619' class='stm run hide_run'>619</p>
+<p id='n620' class='pln'>620</p>
+<p id='n621' class='pln'>621</p>
+<p id='n622' class='pln'>622</p>
+<p id='n623' class='pln'>623</p>
+<p id='n624' class='stm mis'>624</p>
+<p id='n625' class='pln'>625</p>
+<p id='n626' class='pln'>626</p>
+<p id='n627' class='stm mis'>627</p>
+<p id='n628' class='stm mis'>628</p>
+<p id='n629' class='stm mis'>629</p>
+<p id='n630' class='pln'>630</p>
+<p id='n631' class='stm mis'>631</p>
+<p id='n632' class='stm mis'>632</p>
+<p id='n633' class='pln'>633</p>
+<p id='n634' class='stm mis'>634</p>
+<p id='n635' class='stm mis'>635</p>
+<p id='n636' class='stm mis'>636</p>
+<p id='n637' class='pln'>637</p>
+<p id='n638' class='stm mis'>638</p>
+<p id='n639' class='stm mis'>639</p>
+<p id='n640' class='stm mis'>640</p>
+<p id='n641' class='pln'>641</p>
+<p id='n642' class='stm mis'>642</p>
+<p id='n643' class='pln'>643</p>
+<p id='n644' class='stm run hide_run'>644</p>
+<p id='n645' class='pln'>645</p>
+<p id='n646' class='pln'>646</p>
+<p id='n647' class='pln'>647</p>
+<p id='n648' class='stm mis'>648</p>
+<p id='n649' class='stm mis'>649</p>
+<p id='n650' class='stm mis'>650</p>
+<p id='n651' class='stm mis'>651</p>
+<p id='n652' class='stm mis'>652</p>
+<p id='n653' class='stm mis'>653</p>
+<p id='n654' class='stm mis'>654</p>
+<p id='n655' class='stm mis'>655</p>
+<p id='n656' class='stm mis'>656</p>
+<p id='n657' class='stm mis'>657</p>
+<p id='n658' class='stm mis'>658</p>
+<p id='n659' class='stm mis'>659</p>
+<p id='n660' class='stm mis'>660</p>
+<p id='n661' class='stm mis'>661</p>
+<p id='n662' class='stm mis'>662</p>
+<p id='n663' class='stm mis'>663</p>
+<p id='n664' class='pln'>664</p>
+<p id='n665' class='pln'>665</p>
+<p id='n666' class='pln'>666</p>
+<p id='n667' class='pln'>667</p>
+<p id='n668' class='pln'>668</p>
+<p id='n669' class='pln'>669</p>
+<p id='n670' class='pln'>670</p>
+<p id='n671' class='pln'>671</p>
+<p id='n672' class='pln'>672</p>
+<p id='n673' class='pln'>673</p>
+<p id='n674' class='pln'>674</p>
+<p id='n675' class='pln'>675</p>
+<p id='n676' class='pln'>676</p>
+<p id='n677' class='pln'>677</p>
+<p id='n678' class='pln'>678</p>
+<p id='n679' class='pln'>679</p>
+<p id='n680' class='pln'>680</p>
+<p id='n681' class='pln'>681</p>
+<p id='n682' class='pln'>682</p>
+<p id='n683' class='pln'>683</p>
+<p id='n684' class='pln'>684</p>
+<p id='n685' class='pln'>685</p>
+<p id='n686' class='pln'>686</p>
+<p id='n687' class='pln'>687</p>
+<p id='n688' class='pln'>688</p>
+<p id='n689' class='pln'>689</p>
+<p id='n690' class='pln'>690</p>
+<p id='n691' class='pln'>691</p>
+<p id='n692' class='pln'>692</p>
+<p id='n693' class='pln'>693</p>
+<p id='n694' class='pln'>694</p>
+<p id='n695' class='pln'>695</p>
+<p id='n696' class='pln'>696</p>
+<p id='n697' class='pln'>697</p>
+<p id='n698' class='pln'>698</p>
+<p id='n699' class='pln'>699</p>
+<p id='n700' class='pln'>700</p>
+<p id='n701' class='pln'>701</p>
+<p id='n702' class='pln'>702</p>
+<p id='n703' class='pln'>703</p>
+<p id='n704' class='pln'>704</p>
+<p id='n705' class='pln'>705</p>
+<p id='n706' class='pln'>706</p>
+<p id='n707' class='pln'>707</p>
+<p id='n708' class='pln'>708</p>
+<p id='n709' class='pln'>709</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot; Cog code generation tool.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='pln'><span class='str'>&nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>copy</span><span class='op'>,</span> <span class='nam'>getopt</span><span class='op'>,</span> <span class='nam'>imp</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>shlex</span><span class='op'>,</span> <span class='nam'>string</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>traceback</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>cStringIO</span> <span class='key'>import</span> <span class='nam'>StringIO</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='pln'><span class='com'># The recommended way to compute md5&#39;s changed in Python 2.5</span><span class='strut'>&nbsp;</span></p>
+<p id='t11' class='stm run hide_run'><span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t12' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>import</span> <span class='nam'>hashlib</span><span class='strut'>&nbsp;</span></p>
+<p id='t13' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>hashlib</span><span class='op'>.</span><span class='nam'>md5</span><span class='strut'>&nbsp;</span></p>
+<p id='t14' class='stm mis'><span class='key'>except</span> <span class='nam'>ImportError</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t15' class='stm mis'>&nbsp; &nbsp; <span class='key'>import</span> <span class='nam'>md5</span><span class='strut'>&nbsp;</span></p>
+<p id='t16' class='stm mis'>&nbsp; &nbsp; <span class='nam'>hash_factory</span> <span class='op'>=</span> <span class='nam'>md5</span><span class='op'>.</span><span class='nam'>new</span><span class='strut'>&nbsp;</span></p>
+<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t18' class='stm run hide_run'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;Cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;CogUsageError&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t19' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t20' class='stm run hide_run'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;2.2&#39;</span>&nbsp; &nbsp; &nbsp;&nbsp; <span class='com'># History at the end of the file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t21' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t22' class='stm run hide_run'><span class='nam'>usage</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t23' class='pln'><span class='str'>cog - generate code with inlined Python code.</span><span class='strut'>&nbsp;</span></p>
+<p id='t24' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t25' class='pln'><span class='str'>cog [OPTIONS] [INFILE | @FILELIST] ...</span><span class='strut'>&nbsp;</span></p>
+<p id='t26' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t27' class='pln'><span class='str'>INFILE is the name of an input file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t28' class='pln'><span class='str'>FILELIST is the name of a text file containing file names or</span><span class='strut'>&nbsp;</span></p>
+<p id='t29' class='pln'><span class='str'>&nbsp; &nbsp; other @FILELISTs.</span><span class='strut'>&nbsp;</span></p>
+<p id='t30' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t31' class='pln'><span class='str'>OPTIONS:</span><span class='strut'>&nbsp;</span></p>
+<p id='t32' class='pln'><span class='str'>&nbsp; &nbsp; -c&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Checksum the output to protect it against accidental change.</span><span class='strut'>&nbsp;</span></p>
+<p id='t33' class='pln'><span class='str'>&nbsp; &nbsp; -d&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Delete the generator code from the output file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t34' class='pln'><span class='str'>&nbsp; &nbsp; -D name=val Define a global string available to your generator code.</span><span class='strut'>&nbsp;</span></p>
+<p id='t35' class='pln'><span class='str'>&nbsp; &nbsp; -e&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Warn if a file has no cog code in it.</span><span class='strut'>&nbsp;</span></p>
+<p id='t36' class='pln'><span class='str'>&nbsp; &nbsp; -I PATH&nbsp; &nbsp;&nbsp; Add PATH to the list of directories for data files and modules.</span><span class='strut'>&nbsp;</span></p>
+<p id='t37' class='pln'><span class='str'>&nbsp; &nbsp; -o OUTNAME&nbsp; Write the output to OUTNAME.</span><span class='strut'>&nbsp;</span></p>
+<p id='t38' class='pln'><span class='str'>&nbsp; &nbsp; -r&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Replace the input file with the output.</span><span class='strut'>&nbsp;</span></p>
+<p id='t39' class='pln'><span class='str'>&nbsp; &nbsp; -s STRING&nbsp;&nbsp; Suffix all generated output lines with STRING.</span><span class='strut'>&nbsp;</span></p>
+<p id='t40' class='pln'><span class='str'>&nbsp; &nbsp; -U&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Write the output with Unix newlines (only LF line-endings).</span><span class='strut'>&nbsp;</span></p>
+<p id='t41' class='pln'><span class='str'>&nbsp; &nbsp; -w CMD&nbsp; &nbsp; &nbsp; Use CMD if the output file needs to be made writable.</span><span class='strut'>&nbsp;</span></p>
+<p id='t42' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A %s in the CMD will be filled with the filename.</span><span class='strut'>&nbsp;</span></p>
+<p id='t43' class='pln'><span class='str'>&nbsp; &nbsp; -x&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Excise all the generated output without running the generators.</span><span class='strut'>&nbsp;</span></p>
+<p id='t44' class='pln'><span class='str'>&nbsp; &nbsp; -z&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; The [[[end]]] marker can be omitted, and is assumed at eof.</span><span class='strut'>&nbsp;</span></p>
+<p id='t45' class='pln'><span class='str'>&nbsp; &nbsp; -v&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print the version of cog and exit.</span><span class='strut'>&nbsp;</span></p>
+<p id='t46' class='pln'><span class='str'>&nbsp; &nbsp; -h&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Print this help.</span><span class='strut'>&nbsp;</span></p>
+<p id='t47' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t48' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t49' class='pln'><span class='com'># Other package modules</span><span class='strut'>&nbsp;</span></p>
+<p id='t50' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'>&nbsp;</span></p>
+<p id='t51' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t52' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='nam'>Exception</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t53' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Any exception raised by Cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t54' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t55' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>file</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='num'>0</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t56' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>59</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>file</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t57' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='str'>&quot;%s(%d): %s&quot;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>file</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t58' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t59' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Exception</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t60' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t61' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t62' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An error in usage of command-line arguments in cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t63' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t64' class='exc'>&nbsp; &nbsp; <span class='key'>pass</span>&nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t65' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t66' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t67' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An error in the coding of Cog. Should never happen.</span><span class='strut'>&nbsp;</span></p>
+<p id='t68' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t69' class='exc'>&nbsp; &nbsp; <span class='key'>pass</span>&nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t70' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t71' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t72' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An error raised by a user&#39;s cog generator.</span><span class='strut'>&nbsp;</span></p>
+<p id='t73' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t74' class='exc'>&nbsp; &nbsp; <span class='key'>pass</span>&nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t75' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t76' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>Redirectable</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t77' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; An object with its own stdout and stderr files.</span><span class='strut'>&nbsp;</span></p>
+<p id='t78' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t79' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t80' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stdout</span><span class='strut'>&nbsp;</span></p>
+<p id='t81' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>stderr</span><span class='strut'>&nbsp;</span></p>
+<p id='t82' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t83' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t84' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Assign new files for standard out and/or standard error.</span><span class='strut'>&nbsp;</span></p>
+<p id='t85' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t86' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>88</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>stdout</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t87' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span> <span class='op'>=</span> <span class='nam'>stdout</span><span class='strut'>&nbsp;</span></p>
+<p id='t88' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>89</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>stderr</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t89' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class='strut'>&nbsp;</span></p>
+<p id='t90' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t91' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t92' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; A generator pulled from a source file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t93' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t94' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t95' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t96' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t97' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t98' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t99' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t100' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t101' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t102' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t103' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t104' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t105' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>getCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t106' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Extract the executable Python code from the generator.</span><span class='strut'>&nbsp;</span></p>
+<p id='t107' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t108' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If the markers and lines all have the same prefix</span><span class='strut'>&nbsp;</span></p>
+<p id='t109' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># (end-of-line comment chars, for example),</span><span class='strut'>&nbsp;</span></p>
+<p id='t110' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># then remove it from all the lines.</span><span class='strut'>&nbsp;</span></p>
+<p id='t111' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefIn</span> <span class='op'>=</span> <span class='nam'>commonPrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t112' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefIn</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t113' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span> <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t114' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>=</span> <span class='op'>[</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>prefIn</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span> <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span> <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t115' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t116' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t117' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t118' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>cog</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='str'>&#39;cog generator&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t119' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># figure out the right whitespace prefix for the output</span><span class='strut'>&nbsp;</span></p>
+<p id='t120' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefOut</span> <span class='op'>=</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>markers</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t121' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t122' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>intext</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t123' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>intext</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t124' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t125' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t126' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># In Python 2.2, the last line has to end in a newline.</span><span class='strut'>&nbsp;</span></p>
+<p id='t127' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>intext</span> <span class='op'>=</span> <span class='str'>&quot;import cog\n&quot;</span> <span class='op'>+</span> <span class='nam'>intext</span> <span class='op'>+</span> <span class='str'>&quot;\n&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t128' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>code</span> <span class='op'>=</span> <span class='nam'>compile</span><span class='op'>(</span><span class='nam'>intext</span><span class='op'>,</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>fname</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;exec&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t129' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t130' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Make sure the &quot;cog&quot; module has our state.</span><span class='strut'>&nbsp;</span></p>
+<p id='t131' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>msg</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>msg</span><span class='strut'>&nbsp;</span></p>
+<p id='t132' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>out</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='strut'>&nbsp;</span></p>
+<p id='t133' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outl</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outl</span><span class='strut'>&nbsp;</span></p>
+<p id='t134' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cog</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>error</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>error</span><span class='strut'>&nbsp;</span></p>
+<p id='t135' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t136' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t137' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>eval</span><span class='op'>(</span><span class='nam'>code</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t138' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t139' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We need to make sure that the last line in the output</span><span class='strut'>&nbsp;</span></p>
+<p id='t140' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># ends with a newline, or it will be joined to the</span><span class='strut'>&nbsp;</span></p>
+<p id='t141' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># end-output line, ruining cog&#39;s idempotency.</span><span class='strut'>&nbsp;</span></p>
+<p id='t142' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span> <span class='op'>!=</span> <span class='str'>&#39;\n&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t143' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='str'>&#39;\n&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t144' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t145' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span><span class='op'>,</span> <span class='nam'>prefOut</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t146' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t147' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>msg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t148' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Message: &quot;</span><span class='op'>+</span><span class='nam'>s</span><span class='strut'>&nbsp;</span></p>
+<p id='t149' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t150' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>out</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='nam'>dedent</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>,</span> <span class='nam'>trimblanklines</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t151' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The cog.out function.</span><span class='strut'>&nbsp;</span></p>
+<p id='t152' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t153' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>trimblanklines</span> <span class='key'>and</span> <span class='op'>(</span><span class='str'>&#39;\n&#39;</span> <span class='key'>in</span> <span class='nam'>sOut</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t154' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>sOut</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t155' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t156' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t157' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>159</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>lines</span> <span class='key'>and</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>==</span> <span class='str'>&#39;&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t158' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>del</span> <span class='nam'>lines</span><span class='op'>[</span><span class='op'>-</span><span class='num'>1</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t159' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sOut</span> <span class='op'>=</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class='op'>+</span><span class='str'>&#39;\n&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t160' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>dedent</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t161' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sOut</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t162' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>outstring</span> <span class='op'>+=</span> <span class='nam'>sOut</span><span class='strut'>&nbsp;</span></p>
+<p id='t163' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t164' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>outl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOut</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t165' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The cog.outl function.</span><span class='strut'>&nbsp;</span></p>
+<p id='t166' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t167' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='nam'>sOut</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kw</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t168' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>out</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t169' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t170' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>error</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='str'>&#39;Error raised by cog generator.&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t171' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The cog.error function.</span><span class='strut'>&nbsp;</span></p>
+<p id='t172' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Instead of raising standard python errors, cog generators can use</span><span class='strut'>&nbsp;</span></p>
+<p id='t173' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this function.&nbsp; It will display the error without a scary Python</span><span class='strut'>&nbsp;</span></p>
+<p id='t174' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; traceback.</span><span class='strut'>&nbsp;</span></p>
+<p id='t175' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t176' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogGeneratedError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t177' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t178' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t179' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>NumberedFileReader</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t180' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; A decorator for files that counts the readline()&#39;s called.</span><span class='strut'>&nbsp;</span></p>
+<p id='t181' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t182' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>f</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t183' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>f</span><span class='strut'>&nbsp;</span></p>
+<p id='t184' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
+<p id='t185' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t186' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>readline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t187' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>f</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t188' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t189' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span> <span class='op'>+=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t190' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>l</span><span class='strut'>&nbsp;</span></p>
+<p id='t191' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t192' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>linenumber</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t193' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>n</span><span class='strut'>&nbsp;</span></p>
+<p id='t194' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t195' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t196' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogOptions</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t197' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Options for a run of cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t198' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t199' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t200' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Defaults for argument values.</span><span class='strut'>&nbsp;</span></p>
+<p id='t201' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t202' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t203' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t204' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t205' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
+<p id='t206' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t207' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t208' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
+<p id='t209' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t210' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t211' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t212' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t213' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
+<p id='t214' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t215' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t216' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>other</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t217' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Comparison operator for tests to use.</span><span class='strut'>&nbsp;</span></p>
+<p id='t218' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t219' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>.</span><span class='nam'>__cmp__</span><span class='op'>(</span><span class='nam'>other</span><span class='op'>.</span><span class='nam'>__dict__</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t220' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t221' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>clone</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t222' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Make a clone of these options, for further refinement.</span><span class='strut'>&nbsp;</span></p>
+<p id='t223' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t224' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>copy</span><span class='op'>.</span><span class='nam'>deepcopy</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t225' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t226' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>dirs</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t227' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Add directories to the include path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t228' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t229' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>dirs</span> <span class='op'>=</span> <span class='nam'>dirs</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>pathsep</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t230' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>dirs</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t231' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t232' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t233' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Parse the command line arguments.</span><span class='strut'>&nbsp;</span></p>
+<p id='t234' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t235' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>opts</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>getopt</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>,</span> <span class='str'>&#39;cdD:eI:o:rs:Uvw:xz&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t236' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>getopt</span><span class='op'>.</span><span class='nam'>error</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t237' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='nam'>msg</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t238' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t239' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Handle the command line arguments.</span><span class='strut'>&nbsp;</span></p>
+<p id='t240' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>o</span><span class='op'>,</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>opts</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t241' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-c&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t242' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bHashOutput</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t243' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-d&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t244' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t245' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-D&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t246' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>count</span><span class='op'>(</span><span class='str'>&#39;=&#39;</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='num'>1</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t247' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;-D takes a name=value argument&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t248' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>value</span> <span class='op'>=</span> <span class='nam'>a</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;=&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t249' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>[</span><span class='nam'>name</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>value</span><span class='strut'>&nbsp;</span></p>
+<p id='t250' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-e&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t251' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t252' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-I&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t253' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>a</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t254' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-o&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t255' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span> <span class='op'>=</span> <span class='nam'>a</span><span class='strut'>&nbsp;</span></p>
+<p id='t256' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-r&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t257' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t258' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-s&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t259' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sSuffix</span> <span class='op'>=</span> <span class='nam'>a</span><span class='strut'>&nbsp;</span></p>
+<p id='t260' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-U&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t261' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNewlines</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t262' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-v&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t263' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bShowVersion</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t264' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-w&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t265' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span> <span class='op'>=</span> <span class='nam'>a</span><span class='strut'>&nbsp;</span></p>
+<p id='t266' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-x&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t267' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bNoGenerate</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t268' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>o</span> <span class='op'>==</span> <span class='str'>&#39;-z&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t269' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t270' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t271' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Since getopt.getopt is given a list of possible flags,</span><span class='strut'>&nbsp;</span></p>
+<p id='t272' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># this is an internal error.</span><span class='strut'>&nbsp;</span></p>
+<p id='t273' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogInternalError</span><span class='op'>(</span><span class='str'>&quot;Don&#39;t understand argument %s&quot;</span> <span class='op'>%</span> <span class='nam'>o</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t274' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t275' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>validate</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t276' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Does nothing if everything is OK, raises CogError&#39;s if it&#39;s not.</span><span class='strut'>&nbsp;</span></p>
+<p id='t277' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t278' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t279' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t use -d with -r (or you would delete all your source!)&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t280' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t281' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>bReplace</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t282' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t use -o with -r (they are opposites)&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t283' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t284' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t285' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='nam'>Redirectable</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t286' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; The Cog engine.</span><span class='strut'>&nbsp;</span></p>
+<p id='t287' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t288' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t289' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Redirectable</span><span class='op'>.</span><span class='nam'>__init__</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t290' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span> <span class='op'>=</span> <span class='str'>&#39;[[[cog&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t291' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span> <span class='op'>=</span> <span class='str'>&#39;]]]&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t292' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span> <span class='op'>=</span> <span class='str'>&#39;[[[end]]]&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t293' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>r&#39;\[\[\[end]]](?P&lt;hashsect&gt; *\(checksum: (?P&lt;hash&gt;[a-f0-9]+)\))&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t294' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>=</span> <span class='str'>&#39;[[[end]]] (checksum: %s)&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t295' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t296' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t297' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t298' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t299' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>installCogModule</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t300' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t301' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>showWarning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t302' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Warning:&quot;</span><span class='op'>,</span> <span class='nam'>msg</span><span class='strut'>&nbsp;</span></p>
+<p id='t303' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t304' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t305' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
+<p id='t306' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t307' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t308' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span> <span class='key'>and</span> <span class='xx'>\</span><span class='strut'>&nbsp;</span></p>
+<p id='t309' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t310' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t311' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t312' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
+<p id='t313' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t314' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>installCogModule</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t315' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Magic mumbo-jumbo so that imported Python modules</span><span class='strut'>&nbsp;</span></p>
+<p id='t316' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; can say &quot;import cog&quot; and get our state.</span><span class='strut'>&nbsp;</span></p>
+<p id='t317' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t318' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span> <span class='op'>=</span> <span class='nam'>imp</span><span class='op'>.</span><span class='nam'>new_module</span><span class='op'>(</span><span class='str'>&#39;cog&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t319' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t320' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='str'>&#39;cog&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t321' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t322' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t323' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process an input file object to an output file object.</span><span class='strut'>&nbsp;</span></p>
+<p id='t324' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fIn and fOut can be file objects, or file names.</span><span class='strut'>&nbsp;</span></p>
+<p id='t325' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t326' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t327' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t328' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fname</span> <span class='key'>or</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t329' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>None</span><span class='strut'>&nbsp;</span></p>
+<p id='t330' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Convert filenames to files.</span><span class='strut'>&nbsp;</span></p>
+<p id='t331' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>333</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t332' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Open the input file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t333' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileIn</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='strut'>&nbsp;</span></p>
+<p id='t334' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>fInToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>,</span> <span class='str'>&#39;r&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t335' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>337</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t336' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Open the output file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t337' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileOut</span> <span class='op'>=</span> <span class='nam'>fOut</span><span class='strut'>&nbsp;</span></p>
+<p id='t338' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span> <span class='op'>=</span> <span class='nam'>fOutToClose</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>fOut</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t339' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t340' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t341' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fIn</span> <span class='op'>=</span> <span class='nam'>NumberedFileReader</span><span class='op'>(</span><span class='nam'>fIn</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t342' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t343' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t344' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t345' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>inFile</span> <span class='op'>=</span> <span class='nam'>sFileIn</span><span class='strut'>&nbsp;</span></p>
+<p id='t346' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>outFile</span> <span class='op'>=</span> <span class='nam'>sFileOut</span><span class='strut'>&nbsp;</span></p>
+<p id='t347' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t348' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The globals dict we&#39;ll use for this file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t349' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>353</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>globals</span> <span class='key'>is</span> <span class='nam'>None</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t350' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t351' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t352' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If there are any global defines, put them in the globals.</span><span class='strut'>&nbsp;</span></p>
+<p id='t353' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>defines</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t354' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t355' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># loop over generator chunks</span><span class='strut'>&nbsp;</span></p>
+<p id='t356' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t357' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t358' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Find the next spec begin</span><span class='strut'>&nbsp;</span></p>
+<p id='t359' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t360' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>361</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t361' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t362' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t363' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>364</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t364' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t365' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t366' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t367' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t368' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t369' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
+<p id='t370' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>374</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t371' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t372' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t373' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># l is the begin spec</span><span class='strut'>&nbsp;</span></p>
+<p id='t374' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t375' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t376' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t377' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t378' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>firstLineNum</span> <span class='op'>=</span> <span class='nam'>firstLineNum</span><span class='strut'>&nbsp;</span></p>
+<p id='t379' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t380' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If the spec begin is also a spec end, then process the single</span><span class='strut'>&nbsp;</span></p>
+<p id='t381' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># line of code inside.</span><span class='strut'>&nbsp;</span></p>
+<p id='t382' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t383' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>beg</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t384' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>end</span> <span class='op'>=</span> <span class='nam'>string</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t385' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>beg</span> <span class='op'>&gt;</span> <span class='nam'>end</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t386' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Cog code markers inverted&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t387' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t388' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t389' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sCode</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>[</span><span class='nam'>beg</span><span class='op'>+</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>)</span><span class='op'>:</span><span class='nam'>end</span><span class='op'>]</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t390' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>sCode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t391' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t392' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Deal with an ordinary code block.</span><span class='strut'>&nbsp;</span></p>
+<p id='t393' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t394' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t395' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get all the lines in the spec</span><span class='strut'>&nbsp;</span></p>
+<p id='t396' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t397' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>398</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t398' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t399' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t400' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>401</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t401' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t402' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t403' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>405</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t404' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t405' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t406' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t407' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>408</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t408' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t409' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;Cog block begun but never ended.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t410' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>firstLineNum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t411' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t412' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>414</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t413' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t414' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t415' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t416' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t417' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t418' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Eat all the lines in the output section.&nbsp; While reading past</span><span class='strut'>&nbsp;</span></p>
+<p id='t419' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># them, compute the md5 hash of the old output.</span><span class='strut'>&nbsp;</span></p>
+<p id='t420' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t421' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>while</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndOutputLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t422' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>423</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBeginSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t423' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sBeginSpec</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t424' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t425' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>426</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isEndSpecLine</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t426' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Unexpected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndSpec</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t427' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t428' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t429' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t430' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>curHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t431' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t432' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>434</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bEofCanBeEnd</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t433' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We reached end of file before we found the end output line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t434' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Missing &#39;%s&#39; before end of file.&quot;</span> <span class='op'>%</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t435' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t436' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t437' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Write the output of the spec to be the new output if we&#39;re </span><span class='strut'>&nbsp;</span></p>
+<p id='t438' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># supposed to generate code.</span><span class='strut'>&nbsp;</span></p>
+<p id='t439' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span> <span class='op'>=</span> <span class='nam'>hash_factory</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t440' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>446</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNoGenerate</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t441' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFile</span> <span class='op'>=</span> <span class='str'>&quot;%s+%d&quot;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>firstLineNum</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t442' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>gen</span><span class='op'>.</span><span class='nam'>evaluate</span><span class='op'>(</span><span class='nam'>cog</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t443' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sGen</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t444' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>update</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t445' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sGen</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t446' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>newHash</span> <span class='op'>=</span> <span class='nam'>hasher</span><span class='op'>.</span><span class='nam'>hexdigest</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t447' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t448' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bSawCog</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t449' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t450' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Write the ending output line</span><span class='strut'>&nbsp;</span></p>
+<p id='t451' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>hashMatch</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reEndOutput</span><span class='op'>.</span><span class='nam'>search</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t452' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>453</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bHashOutput</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t453' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t454' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>oldHash</span> <span class='op'>=</span> <span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>&#39;hash&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t455' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>oldHash</span> <span class='op'>!=</span> <span class='nam'>curHash</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t456' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t457' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>file</span><span class='op'>=</span><span class='nam'>sFileIn</span><span class='op'>,</span> <span class='nam'>line</span><span class='op'>=</span><span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>linenumber</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t458' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Create a new end line with the correct hash.</span><span class='strut'>&nbsp;</span></p>
+<p id='t459' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t460' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t461' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># There was no old hash, but we want a new hash.</span><span class='strut'>&nbsp;</span></p>
+<p id='t462' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>endpieces</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndOutput</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t463' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>sEndFormat</span> <span class='op'>%</span> <span class='nam'>newHash</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>endpieces</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t464' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t465' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We don&#39;t want hashes output, so if there was one, get rid of</span><span class='strut'>&nbsp;</span></p>
+<p id='t466' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># it.</span><span class='strut'>&nbsp;</span></p>
+<p id='t467' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>468</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hashMatch</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t468' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>hashMatch</span><span class='op'>.</span><span class='nam'>groupdict</span><span class='op'>(</span><span class='op'>)</span><span class='op'>[</span><span class='str'>&#39;hashsect&#39;</span><span class='op'>]</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t469' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t470' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>472</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t471' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOut</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t472' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>fIn</span><span class='op'>.</span><span class='nam'>readline</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t473' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t474' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>475</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>bSawCog</span> <span class='key'>and</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bWarnEmpty</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t475' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>showWarning</span><span class='op'>(</span><span class='str'>&quot;no cog code found in %s&quot;</span> <span class='op'>%</span> <span class='nam'>sFileIn</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t476' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t477' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>478</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>fInToClose</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t478' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fInToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t479' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>480</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>fOutToClose</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t480' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOutToClose</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t481' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t482' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t483' class='pln'>&nbsp; &nbsp; <span class='com'># A regex for non-empty lines, used by suffixLines.</span><span class='strut'>&nbsp;</span></p>
+<p id='t484' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>reNonEmptyLines</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>compile</span><span class='op'>(</span><span class='str'>&quot;^\s*\S+.*$&quot;</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>MULTILINE</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t485' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t486' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>suffixLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t487' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Add suffixes to the lines in text, if our options desire it.</span><span class='strut'>&nbsp;</span></p>
+<p id='t488' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text is many lines, as a single string.</span><span class='strut'>&nbsp;</span></p>
+<p id='t489' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t490' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>492</span>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t491' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Find all non-blank lines, and add the suffix to the end.</span><span class='strut'>&nbsp;</span></p>
+<p id='t492' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>repl</span> <span class='op'>=</span> <span class='str'>r&quot;\g&lt;0&gt;&quot;</span> <span class='op'>+</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sSuffix</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;\\&#39;</span><span class='op'>,</span> <span class='str'>&#39;\\\\&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t493' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>text</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>reNonEmptyLines</span><span class='op'>.</span><span class='nam'>sub</span><span class='op'>(</span><span class='nam'>repl</span><span class='op'>,</span> <span class='nam'>text</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t494' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>text</span><span class='strut'>&nbsp;</span></p>
+<p id='t495' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t496' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processString</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sInput</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t497' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process sInput as the text to cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t498' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Return the cogged output as a string.</span><span class='strut'>&nbsp;</span></p>
+<p id='t499' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t500' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOld</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='nam'>sInput</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t501' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fNew</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t502' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>fOld</span><span class='op'>,</span> <span class='nam'>fNew</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>fname</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t503' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>fNew</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t504' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t505' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t506' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Replace file sOldPath with the contents sNewText</span><span class='strut'>&nbsp;</span></p>
+<p id='t507' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t508' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t509' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Need to ensure we can write.</span><span class='strut'>&nbsp;</span></p>
+<p id='t510' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t511' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Use an external command to make the file writable.</span><span class='strut'>&nbsp;</span></p>
+<p id='t512' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sMakeWritableCmd</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;%s&#39;</span><span class='op'>,</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t513' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>popen</span><span class='op'>(</span><span class='nam'>cmd</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t514' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t515' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Couldn&#39;t make %s writable&quot;</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t516' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t517' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Can&#39;t write!</span><span class='strut'>&nbsp;</span></p>
+<p id='t518' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t overwrite %s&quot;</span> <span class='op'>%</span> <span class='nam'>sOldPath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t519' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sOldPath</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t520' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>sNewText</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t521' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t522' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t523' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t524' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t525' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t526' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t527' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t528' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedInclude</span><span class='strut'>&nbsp;</span></p>
+<p id='t529' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='strut'>&nbsp;</span></p>
+<p id='t530' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>savedSysPath</span><span class='strut'>&nbsp;</span></p>
+<p id='t531' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t532' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>includePath</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t533' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cogmodule</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t534' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>extend</span><span class='op'>(</span><span class='nam'>includePath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t535' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t536' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t537' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process one filename through cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t538' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t539' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t540' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>saveIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t541' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t542' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t543' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>includePath</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t544' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Since we know where the input file came from,</span><span class='strut'>&nbsp;</span></p>
+<p id='t545' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># push its directory onto the include path.</span><span class='strut'>&nbsp;</span></p>
+<p id='t546' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>addToIncludePath</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>os</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>.</span><span class='nam'>dirname</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t547' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t548' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Set the file output mode based on whether we want \n or native</span><span class='strut'>&nbsp;</span></p>
+<p id='t549' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># line endings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t550' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t551' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bNewlines</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t552' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sOutputMode</span> <span class='op'>=</span> <span class='str'>&#39;wb&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t553' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t554' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># How we process the file depends on where the output is going.</span><span class='strut'>&nbsp;</span></p>
+<p id='t555' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t556' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t557' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bReplace</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t558' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We want to replace the cog file with the output,</span><span class='strut'>&nbsp;</span></p>
+<p id='t559' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># but only if they differ.</span><span class='strut'>&nbsp;</span></p>
+<p id='t560' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Cogging %s&quot;</span> <span class='op'>%</span> <span class='nam'>sFile</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t561' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t562' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t563' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t564' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOldFile</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t565' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sOldText</span> <span class='op'>=</span> <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t566' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>fOldFile</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t567' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sNewText</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>sOldText</span><span class='op'>,</span> <span class='nam'>fname</span><span class='op'>=</span><span class='nam'>sFile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t568' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>sOldText</span> <span class='op'>!=</span> <span class='nam'>sNewText</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t569' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;&nbsp; (changed)&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t570' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>bNeedNewline</span> <span class='op'>=</span> <span class='nam'>False</span><span class='strut'>&nbsp;</span></p>
+<p id='t571' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>replaceFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>sNewText</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t572' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t573' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The try-finally block is so we can print a partial line</span><span class='strut'>&nbsp;</span></p>
+<p id='t574' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># with the name of the file, and print (changed) on the</span><span class='strut'>&nbsp;</span></p>
+<p id='t575' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># same line, but also make sure to break the line before</span><span class='strut'>&nbsp;</span></p>
+<p id='t576' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># any traceback.</span><span class='strut'>&nbsp;</span></p>
+<p id='t577' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>bNeedNewline</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t578' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='strut'>&nbsp;</span></p>
+<p id='t579' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t580' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='nam'>sFile</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='nam'>sFile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t581' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t582' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>restoreIncludePath</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t583' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t584' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFileList</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t585' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process the files in a file list.</span><span class='strut'>&nbsp;</span></p>
+<p id='t586' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t587' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>flist</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sFileList</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t588' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>readlines</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t589' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>flist</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t590' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t591' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Use shlex to parse the line like a shell.</span><span class='strut'>&nbsp;</span></p>
+<p id='t592' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span> <span class='op'>=</span> <span class='nam'>shlex</span><span class='op'>.</span><span class='nam'>shlex</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>,</span> <span class='nam'>posix</span><span class='op'>=</span><span class='nam'>True</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t593' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>whitespace_split</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t594' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>commenters</span> <span class='op'>=</span> <span class='str'>&#39;#&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t595' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># No escapes, so that backslash can be part of the path</span><span class='strut'>&nbsp;</span></p>
+<p id='t596' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lex</span><span class='op'>.</span><span class='nam'>escape</span> <span class='op'>=</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t597' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>args</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>lex</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t598' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>args</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t599' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t600' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t601' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>processArguments</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t602' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Process one command-line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t603' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t604' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>saved_options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='strut'>&nbsp;</span></p>
+<p id='t605' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t606' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t607' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t608' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t609' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t610' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span> <span class='op'>==</span> <span class='str'>&#39;@&#39;</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t611' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>sOutputName</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t612' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;Can&#39;t use -o with @file&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t613' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processFileList</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>[</span><span class='num'>1</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t614' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t615' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processOneFile</span><span class='op'>(</span><span class='nam'>args</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t616' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t617' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span> <span class='op'>=</span> <span class='nam'>saved_options</span><span class='strut'>&nbsp;</span></p>
+<p id='t618' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t619' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t620' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; All of command-line cog, but in a callable form.</span><span class='strut'>&nbsp;</span></p>
+<p id='t621' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is used by main.</span><span class='strut'>&nbsp;</span></p>
+<p id='t622' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; argv is the equivalent of sys.argv.</span><span class='strut'>&nbsp;</span></p>
+<p id='t623' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t624' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>argv0</span> <span class='op'>=</span> <span class='nam'>argv</span><span class='op'>.</span><span class='nam'>pop</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t625' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t626' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Provide help if asked for anywhere in the command line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t627' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='str'>&#39;-?&#39;</span> <span class='key'>in</span> <span class='nam'>argv</span> <span class='key'>or</span> <span class='str'>&#39;-h&#39;</span> <span class='key'>in</span> <span class='nam'>argv</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t628' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>usage</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t629' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
+<p id='t630' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t631' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t632' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>validate</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t633' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t634' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bShowVersion</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t635' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stdout</span><span class='op'>,</span> <span class='str'>&quot;Cog version %s&quot;</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class='strut'>&nbsp;</span></p>
+<p id='t636' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
+<p id='t637' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t638' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t639' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>a</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>args</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t640' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>processArguments</span><span class='op'>(</span><span class='op'>[</span><span class='nam'>a</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t641' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t642' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>CogUsageError</span><span class='op'>(</span><span class='str'>&quot;No files to process&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t643' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t644' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>main</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>argv</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t645' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Handle the command-line execution for cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t646' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t647' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t648' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t649' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t650' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>0</span><span class='strut'>&nbsp;</span></p>
+<p id='t651' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t652' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class='strut'>&nbsp;</span></p>
+<p id='t653' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>&quot;(for help use -?)&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t654' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+<p id='t655' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>CogGeneratedError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t656' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='str'>&quot;Error: %s&quot;</span> <span class='op'>%</span> <span class='nam'>err</span><span class='strut'>&nbsp;</span></p>
+<p id='t657' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
+<p id='t658' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>err</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t659' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>print</span> <span class='op'>&gt;&gt;</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>,</span> <span class='nam'>err</span><span class='strut'>&nbsp;</span></p>
+<p id='t660' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t661' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t662' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>traceback</span><span class='op'>.</span><span class='nam'>print_exc</span><span class='op'>(</span><span class='nam'>None</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>stderr</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t663' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t664' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t665' class='pln'><span class='com'># History:</span><span class='strut'>&nbsp;</span></p>
+<p id='t666' class='pln'><span class='com'># 20040210: First public version.</span><span class='strut'>&nbsp;</span></p>
+<p id='t667' class='pln'><span class='com'># 20040220: Text preceding the start and end marker are removed from Python lines.</span><span class='strut'>&nbsp;</span></p>
+<p id='t668' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -v option on the command line shows the version.</span><span class='strut'>&nbsp;</span></p>
+<p id='t669' class='pln'><span class='com'># 20040311: Make sure the last line of output is properly ended with a newline.</span><span class='strut'>&nbsp;</span></p>
+<p id='t670' class='pln'><span class='com'># 20040605: Fixed some blank line handling in cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t671' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Fixed problems with assigning to xml elements in handyxml.</span><span class='strut'>&nbsp;</span></p>
+<p id='t672' class='pln'><span class='com'># 20040621: Changed all line-ends to LF from CRLF.</span><span class='strut'>&nbsp;</span></p>
+<p id='t673' class='pln'><span class='com'># 20041002: Refactor some option handling to simplify unittesting the options.</span><span class='strut'>&nbsp;</span></p>
+<p id='t674' class='pln'><span class='com'># 20041118: cog.out and cog.outl have optional string arguments.</span><span class='strut'>&nbsp;</span></p>
+<p id='t675' class='pln'><span class='com'># 20041119: File names weren&#39;t being properly passed around for warnings, etc.</span><span class='strut'>&nbsp;</span></p>
+<p id='t676' class='pln'><span class='com'># 20041122: Added cog.firstLineNum: a property with the line number of the [[[cog line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t677' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Added cog.inFile and cog.outFile: the names of the input and output file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t678' class='pln'><span class='com'># 20041218: Single-line cog generators, with start marker and end marker on</span><span class='strut'>&nbsp;</span></p>
+<p id='t679' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; the same line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t680' class='pln'><span class='com'># 20041230: Keep a single globals dict for all the code fragments in a single</span><span class='strut'>&nbsp;</span></p>
+<p id='t681' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; file so they can share state.</span><span class='strut'>&nbsp;</span></p>
+<p id='t682' class='pln'><span class='com'># 20050206: Added the -x switch to remove all generated output.</span><span class='strut'>&nbsp;</span></p>
+<p id='t683' class='pln'><span class='com'># 20050218: Now code can be on the marker lines as well.</span><span class='strut'>&nbsp;</span></p>
+<p id='t684' class='pln'><span class='com'># 20050219: Added -c switch to checksum the output so that edits can be</span><span class='strut'>&nbsp;</span></p>
+<p id='t685' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; detected before they are obliterated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t686' class='pln'><span class='com'># 20050521: Added cog.error, contributed by Alexander Belchenko.</span><span class='strut'>&nbsp;</span></p>
+<p id='t687' class='pln'><span class='com'># 20050720: Added code deletion and settable globals contributed by Blake Winton.</span><span class='strut'>&nbsp;</span></p>
+<p id='t688' class='pln'><span class='com'># 20050724: Many tweaks to improve code coverage.</span><span class='strut'>&nbsp;</span></p>
+<p id='t689' class='pln'><span class='com'># 20050726: Error messages are now printed with no traceback.</span><span class='strut'>&nbsp;</span></p>
+<p id='t690' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Code can no longer appear on the marker lines,</span><span class='strut'>&nbsp;</span></p>
+<p id='t691' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; except for single-line style.</span><span class='strut'>&nbsp;</span></p>
+<p id='t692' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; -z allows omission of the [[[end]]] marker, and it will be assumed</span><span class='strut'>&nbsp;</span></p>
+<p id='t693' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; at the end of the file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t694' class='pln'><span class='com'># 20050729: Refactor option parsing into a separate class, in preparation for</span><span class='strut'>&nbsp;</span></p>
+<p id='t695' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; future features.</span><span class='strut'>&nbsp;</span></p>
+<p id='t696' class='pln'><span class='com'># 20050805: The cogmodule.path wasn&#39;t being properly maintained.</span><span class='strut'>&nbsp;</span></p>
+<p id='t697' class='pln'><span class='com'># 20050808: Added the -D option to define a global value.</span><span class='strut'>&nbsp;</span></p>
+<p id='t698' class='pln'><span class='com'># 20050810: The %s in the -w command is dealt with more robustly.</span><span class='strut'>&nbsp;</span></p>
+<p id='t699' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Added the -s option to suffix output lines with a marker.</span><span class='strut'>&nbsp;</span></p>
+<p id='t700' class='pln'><span class='com'># 20050817: Now @files can have arguments on each line to change the cog&#39;s</span><span class='strut'>&nbsp;</span></p>
+<p id='t701' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; behavior for that line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t702' class='pln'><span class='com'># 20051006: Version 2.0</span><span class='strut'>&nbsp;</span></p>
+<p id='t703' class='pln'><span class='com'># 20080521: -U options lets you create Unix newlines on Windows.&nbsp; Thanks,</span><span class='strut'>&nbsp;</span></p>
+<p id='t704' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Alexander Belchenko.</span><span class='strut'>&nbsp;</span></p>
+<p id='t705' class='pln'><span class='com'># 20080522: It&#39;s now ok to have -d with output to stdout, and now we validate</span><span class='strut'>&nbsp;</span></p>
+<p id='t706' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; the args after each line of an @file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t707' class='pln'><span class='com'># 20090520: Use hashlib where it&#39;s available, to avoid a warning.</span><span class='strut'>&nbsp;</span></p>
+<p id='t708' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Use the builtin compile() instead of compiler, for Jython.</span><span class='strut'>&nbsp;</span></p>
+<p id='t709' class='pln'><span class='com'>#&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; Explicitly close files we opened, Jython likes this.</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/doc/sample_html/cogapp_makefiles.html b/doc/sample_html/cogapp_makefiles.html
index 4d50521..77260de 100644
--- a/doc/sample_html/cogapp_makefiles.html
+++ b/doc/sample_html/cogapp_makefiles.html
@@ -1,177 +1,170 @@
-<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<title>Coverage for cogapp\makefiles</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script src='jquery-1.3.2.min.js'></script>
-<script>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- if (btn.hasClass("hide")) {
- $("#source ."+cls).removeClass("hide");
- btn.removeClass("hide");
- }
- else {
- $("#source ."+cls).addClass("hide");
- btn.addClass("hide");
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for cogapp\makefiles: 13%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>cogapp\makefiles</b> :
- <span class='pc_cov'>21%</span>
+ <span class='pc_cov'>13%</span>
</h1>
<h2 class='stats'>
29 statements
- <span class='run hide' onclick='toggle_lines(this, "run")'>6 run</span>
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>6 run</span>
<span class='exc' onclick='toggle_lines(this, "exc")'>3 excluded</span>
<span class='mis' onclick='toggle_lines(this, "mis")'>23 missing</span>
+
+ <span class='par run hide_run' onclick='toggle_lines(this, "par")'>0 partial</span>
+
</h2>
</div>
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='pln'>3</p>
-<p class='pln'>4</p>
-<p class='pln'>5</p>
-<p class='pln'>6</p>
-<p class='stm run hide'>7</p>
-<p class='stm run hide'>8</p>
-<p class='pln'>9</p>
-<p class='stm run hide'>10</p>
-<p class='stm run hide'>11</p>
-<p class='pln'>12</p>
-<p class='stm run hide'>13</p>
-<p class='pln'>14</p>
-<p class='pln'>15</p>
-<p class='stm mis'>16</p>
-<p class='stm mis'>17</p>
-<p class='stm mis'>18</p>
-<p class='stm mis'>19</p>
-<p class='stm mis'>20</p>
-<p class='stm mis'>21</p>
-<p class='stm mis'>22</p>
-<p class='stm mis'>23</p>
-<p class='stm mis'>24</p>
-<p class='stm mis'>25</p>
-<p class='stm mis'>26</p>
-<p class='stm mis'>27</p>
-<p class='pln'>28</p>
-<p class='stm mis'>29</p>
-<p class='stm mis'>30</p>
-<p class='stm mis'>31</p>
-<p class='pln'>32</p>
-<p class='stm run hide'>33</p>
-<p class='pln'>34</p>
-<p class='pln'>35</p>
-<p class='pln'>36</p>
-<p class='stm mis'>37</p>
-<p class='stm mis'>38</p>
-<p class='stm mis'>39</p>
-<p class='stm mis'>40</p>
-<p class='stm mis'>41</p>
-<p class='pln'>42</p>
-<p class='stm mis'>43</p>
-<p class='stm mis'>44</p>
-<p class='stm mis'>45</p>
-<p class='pln'>46</p>
-<p class='exc'>47</p>
-<p class='pln'>48</p>
-<p class='exc'>49</p>
-<p class='pln'>50</p>
-<p class='pln'>51</p>
-<p class='pln'>52</p>
-<p class='pln'>53</p>
-<p class='pln'>54</p>
-<p class='pln'>55</p>
-<p class='pln'>56</p>
-<p class='pln'>57</p>
-<p class='pln'>58</p>
-<p class='pln'>59</p>
-<p class='pln'>60</p>
-<p class='pln'>61</p>
-<p class='pln'>62</p>
-<p class='pln'>63</p>
-<p class='exc'>64</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='str'>&quot;&quot;&quot; Dictionary-to-filetree functions, to create test files for testing.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>path</span>&nbsp; &nbsp;&nbsp; <span class='com'># Non-standard, from http://www.jorendorff.com/articles/python/path</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='nam'>reindentBlock</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;1.0.20040126&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;makeFiles&#39;</span><span class='op'>,</span> <span class='str'>&#39;removeFiles&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>def</span> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>,</span> <span class='nam'>basedir</span><span class='op'>=</span><span class='str'>&#39;.&#39;</span><span class='op'>,</span> <span class='nam'>raw</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Create files from the dictionary d, in the directory named by dirpath.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='nam'>dirpath</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>basedir</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>contents</span> <span class='key'>in</span> <span class='nam'>d</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>dirpath</span> <span class='op'>/</span> <span class='nam'>name</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>raw</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;wb&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>child</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>raw</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>contents</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>exists</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>child</span><span class='op'>,</span> <span class='nam'>raw</span><span class='op'>=</span><span class='nam'>raw</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>def</span> <span class='nam'>removeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>,</span> <span class='nam'>basedir</span><span class='op'>=</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Remove the files created by makeFiles.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Directories are removed if they are empty.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='nam'>dirpath</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>basedir</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>contents</span> <span class='key'>in</span> <span class='nam'>d</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>dirpath</span> <span class='op'>/</span> <span class='nam'>name</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>removeFiles</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>child</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>files</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>dirs</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span><span class='op'>.</span><span class='nam'>rmdir</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='exc'><span class='key'>if</span> <span class='nam'>__name__</span> <span class='op'>==</span> <span class='str'>&#39;__main__&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Try it a little.</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test_makefiles&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;hey.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is hey.txt.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; It&#39;s very simple.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subdir&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;fooey&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Kablooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ew.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='pln'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='pln'>5</p>
+<p id='n6' class='pln'>6</p>
+<p id='n7' class='stm run hide_run'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='pln'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+<p id='n11' class='stm run hide_run'>11</p>
+<p id='n12' class='pln'>12</p>
+<p id='n13' class='stm run hide_run'>13</p>
+<p id='n14' class='pln'>14</p>
+<p id='n15' class='pln'>15</p>
+<p id='n16' class='stm mis'>16</p>
+<p id='n17' class='stm mis'>17</p>
+<p id='n18' class='stm mis'>18</p>
+<p id='n19' class='stm mis'>19</p>
+<p id='n20' class='stm mis'>20</p>
+<p id='n21' class='stm mis'>21</p>
+<p id='n22' class='stm mis'>22</p>
+<p id='n23' class='stm mis'>23</p>
+<p id='n24' class='stm mis'>24</p>
+<p id='n25' class='stm mis'>25</p>
+<p id='n26' class='stm mis'>26</p>
+<p id='n27' class='stm mis'>27</p>
+<p id='n28' class='pln'>28</p>
+<p id='n29' class='stm mis'>29</p>
+<p id='n30' class='stm mis'>30</p>
+<p id='n31' class='stm mis'>31</p>
+<p id='n32' class='pln'>32</p>
+<p id='n33' class='stm run hide_run'>33</p>
+<p id='n34' class='pln'>34</p>
+<p id='n35' class='pln'>35</p>
+<p id='n36' class='pln'>36</p>
+<p id='n37' class='stm mis'>37</p>
+<p id='n38' class='stm mis'>38</p>
+<p id='n39' class='stm mis'>39</p>
+<p id='n40' class='stm mis'>40</p>
+<p id='n41' class='stm mis'>41</p>
+<p id='n42' class='pln'>42</p>
+<p id='n43' class='stm mis'>43</p>
+<p id='n44' class='stm mis'>44</p>
+<p id='n45' class='stm mis'>45</p>
+<p id='n46' class='pln'>46</p>
+<p id='n47' class='exc'>47</p>
+<p id='n48' class='pln'>48</p>
+<p id='n49' class='exc'>49</p>
+<p id='n50' class='pln'>50</p>
+<p id='n51' class='pln'>51</p>
+<p id='n52' class='pln'>52</p>
+<p id='n53' class='pln'>53</p>
+<p id='n54' class='pln'>54</p>
+<p id='n55' class='pln'>55</p>
+<p id='n56' class='pln'>56</p>
+<p id='n57' class='pln'>57</p>
+<p id='n58' class='pln'>58</p>
+<p id='n59' class='pln'>59</p>
+<p id='n60' class='pln'>60</p>
+<p id='n61' class='pln'>61</p>
+<p id='n62' class='pln'>62</p>
+<p id='n63' class='pln'>63</p>
+<p id='n64' class='exc'>64</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot; Dictionary-to-filetree functions, to create test files for testing.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='pln'><span class='str'>&nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>path</span>&nbsp; &nbsp;&nbsp; <span class='com'># Non-standard, from http://www.jorendorff.com/articles/python/path</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='nam'>reindentBlock</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='nam'>__version__</span> <span class='op'>=</span> <span class='str'>&#39;1.0.20040126&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t11' class='stm run hide_run'><span class='nam'>__all__</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;makeFiles&#39;</span><span class='op'>,</span> <span class='str'>&#39;removeFiles&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t12' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t13' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>,</span> <span class='nam'>basedir</span><span class='op'>=</span><span class='str'>&#39;.&#39;</span><span class='op'>,</span> <span class='nam'>raw</span><span class='op'>=</span><span class='nam'>False</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t14' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Create files from the dictionary d, in the directory named by dirpath.</span><span class='strut'>&nbsp;</span></p>
+<p id='t15' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t16' class='stm mis'>&nbsp; &nbsp; <span class='nam'>dirpath</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>basedir</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t17' class='stm mis'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>contents</span> <span class='key'>in</span> <span class='nam'>d</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t18' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>dirpath</span> <span class='op'>/</span> <span class='nam'>name</span><span class='strut'>&nbsp;</span></p>
+<p id='t19' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t20' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;w&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t21' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>raw</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t22' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>mode</span> <span class='op'>=</span> <span class='str'>&#39;wb&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t23' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>child</span><span class='op'>,</span> <span class='nam'>mode</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t24' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>raw</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t25' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>contents</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t26' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>write</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t27' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t28' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t29' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>exists</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t30' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t31' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>child</span><span class='op'>,</span> <span class='nam'>raw</span><span class='op'>=</span><span class='nam'>raw</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t32' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t33' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>removeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>,</span> <span class='nam'>basedir</span><span class='op'>=</span><span class='str'>&#39;.&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t34' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Remove the files created by makeFiles.</span><span class='strut'>&nbsp;</span></p>
+<p id='t35' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Directories are removed if they are empty.</span><span class='strut'>&nbsp;</span></p>
+<p id='t36' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t37' class='stm mis'>&nbsp; &nbsp; <span class='nam'>dirpath</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>basedir</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t38' class='stm mis'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>name</span><span class='op'>,</span> <span class='nam'>contents</span> <span class='key'>in</span> <span class='nam'>d</span><span class='op'>.</span><span class='nam'>items</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t39' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span> <span class='op'>=</span> <span class='nam'>dirpath</span> <span class='op'>/</span> <span class='nam'>name</span><span class='strut'>&nbsp;</span></p>
+<p id='t40' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t41' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span><span class='op'>.</span><span class='nam'>remove</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t42' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t43' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>removeFiles</span><span class='op'>(</span><span class='nam'>contents</span><span class='op'>,</span> <span class='nam'>child</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t44' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>files</span><span class='op'>(</span><span class='op'>)</span> <span class='key'>and</span> <span class='key'>not</span> <span class='nam'>child</span><span class='op'>.</span><span class='nam'>dirs</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t45' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>child</span><span class='op'>.</span><span class='nam'>rmdir</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t46' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t47' class='exc'><span class='key'>if</span> <span class='nam'>__name__</span> <span class='op'>==</span> <span class='str'>&#39;__main__&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t48' class='pln'>&nbsp; &nbsp; <span class='com'># Try it a little.</span><span class='strut'>&nbsp;</span></p>
+<p id='t49' class='exc'>&nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t50' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test_makefiles&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t51' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;hey.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t52' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is hey.txt.</span><span class='strut'>&nbsp;</span></p>
+<p id='t53' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; It&#39;s very simple.</span><span class='strut'>&nbsp;</span></p>
+<p id='t54' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t55' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subdir&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t56' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;fooey&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t57' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t58' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Kablooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t59' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ew.</span><span class='strut'>&nbsp;</span></p>
+<p id='t60' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t61' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t62' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t63' class='pln'>&nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t64' class='exc'>&nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/doc/sample_html/cogapp_test_cogapp.html b/doc/sample_html/cogapp_test_cogapp.html
index 23355ae..024e94c 100644
--- a/doc/sample_html/cogapp_test_cogapp.html
+++ b/doc/sample_html/cogapp_test_cogapp.html
@@ -1,24 +1,14 @@
-<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<title>Coverage for cogapp\test_cogapp</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script src='jquery-1.3.2.min.js'></script>
-<script>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- if (btn.hasClass("hide")) {
- $("#source ."+cls).removeClass("hide");
- btn.removeClass("hide");
- }
- else {
- $("#source ."+cls).addClass("hide");
- btn.addClass("hide");
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for cogapp\test_cogapp: 33%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>cogapp\test_cogapp</b> :
@@ -26,3944 +16,3947 @@ function toggle_lines(btn, cls) {
</h1>
<h2 class='stats'>
587 statements
- <span class='run hide' onclick='toggle_lines(this, "run")'>195 run</span>
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>195 run</span>
<span class='exc' onclick='toggle_lines(this, "exc")'>17 excluded</span>
<span class='mis' onclick='toggle_lines(this, "mis")'>392 missing</span>
+
+ <span class='par run hide_run' onclick='toggle_lines(this, "par")'>0 partial</span>
+
</h2>
</div>
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='pln'>3</p>
-<p class='pln'>4</p>
-<p class='pln'>5</p>
-<p class='pln'>6</p>
-<p class='stm run hide'>7</p>
-<p class='stm run hide'>8</p>
-<p class='stm run hide'>9</p>
-<p class='stm run hide'>10</p>
-<p class='stm run hide'>11</p>
-<p class='stm run hide'>12</p>
-<p class='stm run hide'>13</p>
-<p class='stm run hide'>14</p>
-<p class='pln'>15</p>
-<p class='stm run hide'>16</p>
-<p class='pln'>17</p>
-<p class='pln'>18</p>
-<p class='stm run hide'>19</p>
-<p class='pln'>20</p>
-<p class='pln'>21</p>
-<p class='pln'>22</p>
-<p class='stm run hide'>23</p>
-<p class='stm run hide'>24</p>
-<p class='stm run hide'>25</p>
-<p class='stm run hide'>26</p>
-<p class='stm run hide'>27</p>
-<p class='pln'>28</p>
-<p class='exc'>29</p>
-<p class='stm run hide'>30</p>
-<p class='pln'>31</p>
-<p class='stm run hide'>32</p>
-<p class='exc'>33</p>
-<p class='pln'>34</p>
-<p class='exc'>35</p>
-<p class='exc'>36</p>
-<p class='exc'>37</p>
-<p class='exc'>38</p>
-<p class='exc'>39</p>
-<p class='exc'>40</p>
-<p class='exc'>41</p>
-<p class='pln'>42</p>
-<p class='stm run hide'>43</p>
-<p class='pln'>44</p>
-<p class='pln'>45</p>
-<p class='pln'>46</p>
-<p class='stm run hide'>47</p>
-<p class='stm run hide'>48</p>
-<p class='pln'>49</p>
-<p class='pln'>50</p>
-<p class='pln'>51</p>
-<p class='pln'>52</p>
-<p class='pln'>53</p>
-<p class='pln'>54</p>
-<p class='pln'>55</p>
-<p class='stm run hide'>56</p>
-<p class='stm run hide'>57</p>
-<p class='pln'>58</p>
-<p class='stm run hide'>59</p>
-<p class='stm run hide'>60</p>
-<p class='pln'>61</p>
-<p class='pln'>62</p>
-<p class='pln'>63</p>
-<p class='pln'>64</p>
-<p class='pln'>65</p>
-<p class='pln'>66</p>
-<p class='pln'>67</p>
-<p class='pln'>68</p>
-<p class='pln'>69</p>
-<p class='pln'>70</p>
-<p class='pln'>71</p>
-<p class='stm run hide'>72</p>
-<p class='pln'>73</p>
-<p class='pln'>74</p>
-<p class='pln'>75</p>
-<p class='pln'>76</p>
-<p class='pln'>77</p>
-<p class='pln'>78</p>
-<p class='pln'>79</p>
-<p class='pln'>80</p>
-<p class='pln'>81</p>
-<p class='pln'>82</p>
-<p class='pln'>83</p>
-<p class='pln'>84</p>
-<p class='pln'>85</p>
-<p class='stm run hide'>86</p>
-<p class='pln'>87</p>
-<p class='stm run hide'>88</p>
-<p class='pln'>89</p>
-<p class='pln'>90</p>
-<p class='stm run hide'>91</p>
-<p class='pln'>92</p>
-<p class='pln'>93</p>
-<p class='pln'>94</p>
-<p class='pln'>95</p>
-<p class='pln'>96</p>
-<p class='pln'>97</p>
-<p class='pln'>98</p>
-<p class='stm run hide'>99</p>
-<p class='stm run hide'>100</p>
-<p class='pln'>101</p>
-<p class='stm run hide'>102</p>
-<p class='pln'>103</p>
-<p class='stm run hide'>104</p>
-<p class='pln'>105</p>
-<p class='pln'>106</p>
-<p class='pln'>107</p>
-<p class='pln'>108</p>
-<p class='pln'>109</p>
-<p class='pln'>110</p>
-<p class='pln'>111</p>
-<p class='pln'>112</p>
-<p class='pln'>113</p>
-<p class='pln'>114</p>
-<p class='pln'>115</p>
-<p class='pln'>116</p>
-<p class='pln'>117</p>
-<p class='pln'>118</p>
-<p class='pln'>119</p>
-<p class='pln'>120</p>
-<p class='pln'>121</p>
-<p class='pln'>122</p>
-<p class='stm run hide'>123</p>
-<p class='stm run hide'>124</p>
-<p class='pln'>125</p>
-<p class='stm run hide'>126</p>
-<p class='stm run hide'>127</p>
-<p class='pln'>128</p>
-<p class='pln'>129</p>
-<p class='pln'>130</p>
-<p class='pln'>131</p>
-<p class='pln'>132</p>
-<p class='pln'>133</p>
-<p class='pln'>134</p>
-<p class='pln'>135</p>
-<p class='pln'>136</p>
-<p class='pln'>137</p>
-<p class='pln'>138</p>
-<p class='pln'>139</p>
-<p class='pln'>140</p>
-<p class='stm run hide'>141</p>
-<p class='stm run hide'>142</p>
-<p class='pln'>143</p>
-<p class='stm run hide'>144</p>
-<p class='stm run hide'>145</p>
-<p class='pln'>146</p>
-<p class='pln'>147</p>
-<p class='pln'>148</p>
-<p class='pln'>149</p>
-<p class='pln'>150</p>
-<p class='pln'>151</p>
-<p class='pln'>152</p>
-<p class='pln'>153</p>
-<p class='pln'>154</p>
-<p class='pln'>155</p>
-<p class='pln'>156</p>
-<p class='pln'>157</p>
-<p class='pln'>158</p>
-<p class='pln'>159</p>
-<p class='stm run hide'>160</p>
-<p class='stm run hide'>161</p>
-<p class='pln'>162</p>
-<p class='stm run hide'>163</p>
-<p class='pln'>164</p>
-<p class='pln'>165</p>
-<p class='stm run hide'>166</p>
-<p class='pln'>167</p>
-<p class='pln'>168</p>
-<p class='pln'>169</p>
-<p class='pln'>170</p>
-<p class='pln'>171</p>
-<p class='pln'>172</p>
-<p class='pln'>173</p>
-<p class='pln'>174</p>
-<p class='pln'>175</p>
-<p class='pln'>176</p>
-<p class='pln'>177</p>
-<p class='stm run hide'>178</p>
-<p class='stm run hide'>179</p>
-<p class='pln'>180</p>
-<p class='stm run hide'>181</p>
-<p class='stm run hide'>182</p>
-<p class='pln'>183</p>
-<p class='pln'>184</p>
-<p class='pln'>185</p>
-<p class='pln'>186</p>
-<p class='pln'>187</p>
-<p class='pln'>188</p>
-<p class='pln'>189</p>
-<p class='pln'>190</p>
-<p class='pln'>191</p>
-<p class='pln'>192</p>
-<p class='pln'>193</p>
-<p class='pln'>194</p>
-<p class='pln'>195</p>
-<p class='stm run hide'>196</p>
-<p class='stm run hide'>197</p>
-<p class='pln'>198</p>
-<p class='stm run hide'>199</p>
-<p class='stm run hide'>200</p>
-<p class='pln'>201</p>
-<p class='pln'>202</p>
-<p class='pln'>203</p>
-<p class='pln'>204</p>
-<p class='pln'>205</p>
-<p class='pln'>206</p>
-<p class='pln'>207</p>
-<p class='pln'>208</p>
-<p class='pln'>209</p>
-<p class='pln'>210</p>
-<p class='pln'>211</p>
-<p class='stm run hide'>212</p>
-<p class='stm run hide'>213</p>
-<p class='pln'>214</p>
-<p class='stm run hide'>215</p>
-<p class='stm run hide'>216</p>
-<p class='pln'>217</p>
-<p class='pln'>218</p>
-<p class='pln'>219</p>
-<p class='pln'>220</p>
-<p class='pln'>221</p>
-<p class='pln'>222</p>
-<p class='pln'>223</p>
-<p class='pln'>224</p>
-<p class='pln'>225</p>
-<p class='pln'>226</p>
-<p class='pln'>227</p>
-<p class='pln'>228</p>
-<p class='stm run hide'>229</p>
-<p class='stm run hide'>230</p>
-<p class='pln'>231</p>
-<p class='stm run hide'>232</p>
-<p class='stm run hide'>233</p>
-<p class='pln'>234</p>
-<p class='pln'>235</p>
-<p class='pln'>236</p>
-<p class='pln'>237</p>
-<p class='pln'>238</p>
-<p class='pln'>239</p>
-<p class='pln'>240</p>
-<p class='pln'>241</p>
-<p class='pln'>242</p>
-<p class='pln'>243</p>
-<p class='pln'>244</p>
-<p class='pln'>245</p>
-<p class='pln'>246</p>
-<p class='stm run hide'>247</p>
-<p class='stm run hide'>248</p>
-<p class='pln'>249</p>
-<p class='stm run hide'>250</p>
-<p class='pln'>251</p>
-<p class='pln'>252</p>
-<p class='stm run hide'>253</p>
-<p class='pln'>254</p>
-<p class='pln'>255</p>
-<p class='pln'>256</p>
-<p class='pln'>257</p>
-<p class='pln'>258</p>
-<p class='pln'>259</p>
-<p class='pln'>260</p>
-<p class='pln'>261</p>
-<p class='pln'>262</p>
-<p class='pln'>263</p>
-<p class='pln'>264</p>
-<p class='stm run hide'>265</p>
-<p class='stm run hide'>266</p>
-<p class='pln'>267</p>
-<p class='stm run hide'>268</p>
-<p class='pln'>269</p>
-<p class='stm run hide'>270</p>
-<p class='pln'>271</p>
-<p class='pln'>272</p>
-<p class='pln'>273</p>
-<p class='pln'>274</p>
-<p class='pln'>275</p>
-<p class='pln'>276</p>
-<p class='pln'>277</p>
-<p class='pln'>278</p>
-<p class='stm run hide'>279</p>
-<p class='stm run hide'>280</p>
-<p class='pln'>281</p>
-<p class='stm run hide'>282</p>
-<p class='pln'>283</p>
-<p class='pln'>284</p>
-<p class='pln'>285</p>
-<p class='stm run hide'>286</p>
-<p class='pln'>287</p>
-<p class='pln'>288</p>
-<p class='pln'>289</p>
-<p class='pln'>290</p>
-<p class='pln'>291</p>
-<p class='pln'>292</p>
-<p class='pln'>293</p>
-<p class='pln'>294</p>
-<p class='pln'>295</p>
-<p class='pln'>296</p>
-<p class='pln'>297</p>
-<p class='pln'>298</p>
-<p class='stm run hide'>299</p>
-<p class='stm run hide'>300</p>
-<p class='pln'>301</p>
-<p class='stm run hide'>302</p>
-<p class='pln'>303</p>
-<p class='pln'>304</p>
-<p class='pln'>305</p>
-<p class='stm run hide'>306</p>
-<p class='pln'>307</p>
-<p class='pln'>308</p>
-<p class='pln'>309</p>
-<p class='pln'>310</p>
-<p class='pln'>311</p>
-<p class='pln'>312</p>
-<p class='pln'>313</p>
-<p class='pln'>314</p>
-<p class='pln'>315</p>
-<p class='pln'>316</p>
-<p class='pln'>317</p>
-<p class='pln'>318</p>
-<p class='pln'>319</p>
-<p class='pln'>320</p>
-<p class='pln'>321</p>
-<p class='pln'>322</p>
-<p class='pln'>323</p>
-<p class='stm run hide'>324</p>
-<p class='stm run hide'>325</p>
-<p class='pln'>326</p>
-<p class='stm run hide'>327</p>
-<p class='stm run hide'>328</p>
-<p class='pln'>329</p>
-<p class='pln'>330</p>
-<p class='pln'>331</p>
-<p class='pln'>332</p>
-<p class='pln'>333</p>
-<p class='pln'>334</p>
-<p class='pln'>335</p>
-<p class='pln'>336</p>
-<p class='pln'>337</p>
-<p class='pln'>338</p>
-<p class='pln'>339</p>
-<p class='pln'>340</p>
-<p class='pln'>341</p>
-<p class='pln'>342</p>
-<p class='stm run hide'>343</p>
-<p class='stm run hide'>344</p>
-<p class='pln'>345</p>
-<p class='stm run hide'>346</p>
-<p class='stm run hide'>347</p>
-<p class='pln'>348</p>
-<p class='pln'>349</p>
-<p class='pln'>350</p>
-<p class='pln'>351</p>
-<p class='pln'>352</p>
-<p class='pln'>353</p>
-<p class='pln'>354</p>
-<p class='stm run hide'>355</p>
-<p class='pln'>356</p>
-<p class='pln'>357</p>
-<p class='pln'>358</p>
-<p class='pln'>359</p>
-<p class='pln'>360</p>
-<p class='pln'>361</p>
-<p class='pln'>362</p>
-<p class='stm run hide'>363</p>
-<p class='stm run hide'>364</p>
-<p class='pln'>365</p>
-<p class='stm run hide'>366</p>
-<p class='stm run hide'>367</p>
-<p class='pln'>368</p>
-<p class='pln'>369</p>
-<p class='pln'>370</p>
-<p class='pln'>371</p>
-<p class='pln'>372</p>
-<p class='pln'>373</p>
-<p class='stm run hide'>374</p>
-<p class='pln'>375</p>
-<p class='pln'>376</p>
-<p class='pln'>377</p>
-<p class='pln'>378</p>
-<p class='stm run hide'>379</p>
-<p class='stm run hide'>380</p>
-<p class='pln'>381</p>
-<p class='pln'>382</p>
-<p class='pln'>383</p>
-<p class='pln'>384</p>
-<p class='pln'>385</p>
-<p class='pln'>386</p>
-<p class='pln'>387</p>
-<p class='pln'>388</p>
-<p class='pln'>389</p>
-<p class='stm run hide'>390</p>
-<p class='pln'>391</p>
-<p class='pln'>392</p>
-<p class='pln'>393</p>
-<p class='pln'>394</p>
-<p class='pln'>395</p>
-<p class='pln'>396</p>
-<p class='pln'>397</p>
-<p class='pln'>398</p>
-<p class='pln'>399</p>
-<p class='pln'>400</p>
-<p class='stm run hide'>401</p>
-<p class='stm run hide'>402</p>
-<p class='pln'>403</p>
-<p class='stm run hide'>404</p>
-<p class='pln'>405</p>
-<p class='pln'>406</p>
-<p class='pln'>407</p>
-<p class='stm run hide'>408</p>
-<p class='stm mis'>409</p>
-<p class='stm mis'>410</p>
-<p class='stm mis'>411</p>
-<p class='stm mis'>412</p>
-<p class='stm mis'>413</p>
-<p class='stm mis'>414</p>
-<p class='stm mis'>415</p>
-<p class='pln'>416</p>
-<p class='stm run hide'>417</p>
-<p class='stm mis'>418</p>
-<p class='stm mis'>419</p>
-<p class='stm mis'>420</p>
-<p class='stm mis'>421</p>
-<p class='stm mis'>422</p>
-<p class='stm mis'>423</p>
-<p class='stm mis'>424</p>
-<p class='stm mis'>425</p>
-<p class='stm mis'>426</p>
-<p class='pln'>427</p>
-<p class='stm run hide'>428</p>
-<p class='pln'>429</p>
-<p class='stm mis'>430</p>
-<p class='stm mis'>431</p>
-<p class='stm mis'>432</p>
-<p class='stm mis'>433</p>
-<p class='stm mis'>434</p>
-<p class='pln'>435</p>
-<p class='stm run hide'>436</p>
-<p class='pln'>437</p>
-<p class='pln'>438</p>
-<p class='pln'>439</p>
-<p class='pln'>440</p>
-<p class='stm run hide'>441</p>
-<p class='stm mis'>442</p>
-<p class='stm mis'>443</p>
-<p class='pln'>444</p>
-<p class='pln'>445</p>
-<p class='pln'>446</p>
-<p class='stm run hide'>447</p>
-<p class='stm mis'>448</p>
-<p class='pln'>449</p>
-<p class='pln'>450</p>
-<p class='pln'>451</p>
-<p class='pln'>452</p>
-<p class='stm mis'>453</p>
-<p class='pln'>454</p>
-<p class='stm run hide'>455</p>
-<p class='stm mis'>456</p>
-<p class='pln'>457</p>
-<p class='pln'>458</p>
-<p class='pln'>459</p>
-<p class='pln'>460</p>
-<p class='pln'>461</p>
-<p class='stm mis'>462</p>
-<p class='pln'>463</p>
-<p class='stm mis'>464</p>
-<p class='pln'>465</p>
-<p class='pln'>466</p>
-<p class='pln'>467</p>
-<p class='pln'>468</p>
-<p class='pln'>469</p>
-<p class='pln'>470</p>
-<p class='pln'>471</p>
-<p class='pln'>472</p>
-<p class='stm mis'>473</p>
-<p class='pln'>474</p>
-<p class='stm run hide'>475</p>
-<p class='stm mis'>476</p>
-<p class='pln'>477</p>
-<p class='pln'>478</p>
-<p class='stm mis'>479</p>
-<p class='pln'>480</p>
-<p class='stm mis'>481</p>
-<p class='pln'>482</p>
-<p class='pln'>483</p>
-<p class='pln'>484</p>
-<p class='pln'>485</p>
-<p class='pln'>486</p>
-<p class='pln'>487</p>
-<p class='stm mis'>488</p>
-<p class='pln'>489</p>
-<p class='stm run hide'>490</p>
-<p class='stm mis'>491</p>
-<p class='pln'>492</p>
-<p class='pln'>493</p>
-<p class='stm mis'>494</p>
-<p class='pln'>495</p>
-<p class='stm mis'>496</p>
-<p class='pln'>497</p>
-<p class='pln'>498</p>
-<p class='pln'>499</p>
-<p class='pln'>500</p>
-<p class='pln'>501</p>
-<p class='pln'>502</p>
-<p class='stm mis'>503</p>
-<p class='pln'>504</p>
-<p class='stm run hide'>505</p>
-<p class='stm mis'>506</p>
-<p class='pln'>507</p>
-<p class='pln'>508</p>
-<p class='pln'>509</p>
-<p class='pln'>510</p>
-<p class='stm mis'>511</p>
-<p class='pln'>512</p>
-<p class='stm mis'>513</p>
-<p class='pln'>514</p>
-<p class='pln'>515</p>
-<p class='pln'>516</p>
-<p class='pln'>517</p>
-<p class='pln'>518</p>
-<p class='pln'>519</p>
-<p class='pln'>520</p>
-<p class='pln'>521</p>
-<p class='stm mis'>522</p>
-<p class='pln'>523</p>
-<p class='stm run hide'>524</p>
-<p class='stm mis'>525</p>
-<p class='pln'>526</p>
-<p class='pln'>527</p>
-<p class='pln'>528</p>
-<p class='pln'>529</p>
-<p class='pln'>530</p>
-<p class='pln'>531</p>
-<p class='stm mis'>532</p>
-<p class='pln'>533</p>
-<p class='stm mis'>534</p>
-<p class='pln'>535</p>
-<p class='pln'>536</p>
-<p class='pln'>537</p>
-<p class='pln'>538</p>
-<p class='pln'>539</p>
-<p class='pln'>540</p>
-<p class='pln'>541</p>
-<p class='pln'>542</p>
-<p class='pln'>543</p>
-<p class='pln'>544</p>
-<p class='stm mis'>545</p>
-<p class='pln'>546</p>
-<p class='stm run hide'>547</p>
-<p class='stm mis'>548</p>
-<p class='pln'>549</p>
-<p class='pln'>550</p>
-<p class='pln'>551</p>
-<p class='pln'>552</p>
-<p class='pln'>553</p>
-<p class='pln'>554</p>
-<p class='stm mis'>555</p>
-<p class='pln'>556</p>
-<p class='stm mis'>557</p>
-<p class='pln'>558</p>
-<p class='pln'>559</p>
-<p class='pln'>560</p>
-<p class='pln'>561</p>
-<p class='pln'>562</p>
-<p class='pln'>563</p>
-<p class='pln'>564</p>
-<p class='pln'>565</p>
-<p class='pln'>566</p>
-<p class='pln'>567</p>
-<p class='stm mis'>568</p>
-<p class='pln'>569</p>
-<p class='stm run hide'>570</p>
-<p class='pln'>571</p>
-<p class='pln'>572</p>
-<p class='pln'>573</p>
-<p class='stm run hide'>574</p>
-<p class='stm mis'>575</p>
-<p class='pln'>576</p>
-<p class='pln'>577</p>
-<p class='pln'>578</p>
-<p class='pln'>579</p>
-<p class='stm mis'>580</p>
-<p class='stm mis'>581</p>
-<p class='pln'>582</p>
-<p class='pln'>583</p>
-<p class='pln'>584</p>
-<p class='stm run hide'>585</p>
-<p class='stm mis'>586</p>
-<p class='pln'>587</p>
-<p class='pln'>588</p>
-<p class='pln'>589</p>
-<p class='pln'>590</p>
-<p class='stm mis'>591</p>
-<p class='stm mis'>592</p>
-<p class='pln'>593</p>
-<p class='pln'>594</p>
-<p class='pln'>595</p>
-<p class='stm run hide'>596</p>
-<p class='stm mis'>597</p>
-<p class='pln'>598</p>
-<p class='pln'>599</p>
-<p class='pln'>600</p>
-<p class='pln'>601</p>
-<p class='pln'>602</p>
-<p class='pln'>603</p>
-<p class='pln'>604</p>
-<p class='pln'>605</p>
-<p class='pln'>606</p>
-<p class='pln'>607</p>
-<p class='pln'>608</p>
-<p class='pln'>609</p>
-<p class='pln'>610</p>
-<p class='stm mis'>611</p>
-<p class='stm mis'>612</p>
-<p class='pln'>613</p>
-<p class='stm run hide'>614</p>
-<p class='pln'>615</p>
-<p class='pln'>616</p>
-<p class='pln'>617</p>
-<p class='pln'>618</p>
-<p class='stm run hide'>619</p>
-<p class='pln'>620</p>
-<p class='pln'>621</p>
-<p class='pln'>622</p>
-<p class='stm mis'>623</p>
-<p class='stm mis'>624</p>
-<p class='stm mis'>625</p>
-<p class='pln'>626</p>
-<p class='stm run hide'>627</p>
-<p class='stm mis'>628</p>
-<p class='stm mis'>629</p>
-<p class='stm mis'>630</p>
-<p class='pln'>631</p>
-<p class='stm run hide'>632</p>
-<p class='stm mis'>633</p>
-<p class='stm mis'>634</p>
-<p class='stm mis'>635</p>
-<p class='stm mis'>636</p>
-<p class='stm mis'>637</p>
-<p class='pln'>638</p>
-<p class='stm run hide'>639</p>
-<p class='pln'>640</p>
-<p class='stm mis'>641</p>
-<p class='stm mis'>642</p>
-<p class='stm mis'>643</p>
-<p class='stm mis'>644</p>
-<p class='stm mis'>645</p>
-<p class='pln'>646</p>
-<p class='stm run hide'>647</p>
-<p class='pln'>648</p>
-<p class='stm mis'>649</p>
-<p class='stm mis'>650</p>
-<p class='stm mis'>651</p>
-<p class='stm mis'>652</p>
-<p class='stm mis'>653</p>
-<p class='pln'>654</p>
-<p class='stm run hide'>655</p>
-<p class='pln'>656</p>
-<p class='stm mis'>657</p>
-<p class='stm mis'>658</p>
-<p class='stm mis'>659</p>
-<p class='stm mis'>660</p>
-<p class='stm mis'>661</p>
-<p class='pln'>662</p>
-<p class='stm run hide'>663</p>
-<p class='pln'>664</p>
-<p class='stm mis'>665</p>
-<p class='stm mis'>666</p>
-<p class='stm mis'>667</p>
-<p class='stm mis'>668</p>
-<p class='stm mis'>669</p>
-<p class='pln'>670</p>
-<p class='stm run hide'>671</p>
-<p class='pln'>672</p>
-<p class='pln'>673</p>
-<p class='stm mis'>674</p>
-<p class='stm mis'>675</p>
-<p class='stm mis'>676</p>
-<p class='stm mis'>677</p>
-<p class='stm mis'>678</p>
-<p class='stm mis'>679</p>
-<p class='pln'>680</p>
-<p class='stm run hide'>681</p>
-<p class='pln'>682</p>
-<p class='stm run hide'>683</p>
-<p class='pln'>684</p>
-<p class='pln'>685</p>
-<p class='pln'>686</p>
-<p class='stm mis'>687</p>
-<p class='stm mis'>688</p>
-<p class='stm mis'>689</p>
-<p class='pln'>690</p>
-<p class='stm run hide'>691</p>
-<p class='pln'>692</p>
-<p class='stm mis'>693</p>
-<p class='stm mis'>694</p>
-<p class='stm mis'>695</p>
-<p class='stm mis'>696</p>
-<p class='stm mis'>697</p>
-<p class='pln'>698</p>
-<p class='stm run hide'>699</p>
-<p class='stm mis'>700</p>
-<p class='pln'>701</p>
-<p class='stm mis'>702</p>
-<p class='pln'>703</p>
-<p class='stm run hide'>704</p>
-<p class='stm mis'>705</p>
-<p class='pln'>706</p>
-<p class='stm run hide'>707</p>
-<p class='stm mis'>708</p>
-<p class='stm mis'>709</p>
-<p class='stm mis'>710</p>
-<p class='stm mis'>711</p>
-<p class='pln'>712</p>
-<p class='stm mis'>713</p>
-<p class='stm mis'>714</p>
-<p class='pln'>715</p>
-<p class='pln'>716</p>
-<p class='stm run hide'>717</p>
-<p class='pln'>718</p>
-<p class='stm run hide'>719</p>
-<p class='pln'>720</p>
-<p class='stm mis'>721</p>
-<p class='stm mis'>722</p>
-<p class='stm mis'>723</p>
-<p class='stm mis'>724</p>
-<p class='stm mis'>725</p>
-<p class='pln'>726</p>
-<p class='stm run hide'>727</p>
-<p class='stm mis'>728</p>
-<p class='pln'>729</p>
-<p class='pln'>730</p>
-<p class='pln'>731</p>
-<p class='pln'>732</p>
-<p class='pln'>733</p>
-<p class='stm mis'>734</p>
-<p class='stm mis'>735</p>
-<p class='pln'>736</p>
-<p class='stm run hide'>737</p>
-<p class='stm mis'>738</p>
-<p class='stm mis'>739</p>
-<p class='stm mis'>740</p>
-<p class='pln'>741</p>
-<p class='stm run hide'>742</p>
-<p class='stm mis'>743</p>
-<p class='stm mis'>744</p>
-<p class='stm mis'>745</p>
-<p class='stm mis'>746</p>
-<p class='pln'>747</p>
-<p class='stm run hide'>748</p>
-<p class='pln'>749</p>
-<p class='stm mis'>750</p>
-<p class='stm mis'>751</p>
-<p class='stm mis'>752</p>
-<p class='stm mis'>753</p>
-<p class='pln'>754</p>
-<p class='stm run hide'>755</p>
-<p class='stm mis'>756</p>
-<p class='pln'>757</p>
-<p class='pln'>758</p>
-<p class='pln'>759</p>
-<p class='pln'>760</p>
-<p class='pln'>761</p>
-<p class='stm mis'>762</p>
-<p class='stm mis'>763</p>
-<p class='pln'>764</p>
-<p class='stm run hide'>765</p>
-<p class='stm mis'>766</p>
-<p class='pln'>767</p>
-<p class='pln'>768</p>
-<p class='pln'>769</p>
-<p class='pln'>770</p>
-<p class='pln'>771</p>
-<p class='pln'>772</p>
-<p class='pln'>773</p>
-<p class='pln'>774</p>
-<p class='pln'>775</p>
-<p class='pln'>776</p>
-<p class='pln'>777</p>
-<p class='pln'>778</p>
-<p class='pln'>779</p>
-<p class='pln'>780</p>
-<p class='pln'>781</p>
-<p class='pln'>782</p>
-<p class='pln'>783</p>
-<p class='pln'>784</p>
-<p class='pln'>785</p>
-<p class='pln'>786</p>
-<p class='pln'>787</p>
-<p class='pln'>788</p>
-<p class='stm mis'>789</p>
-<p class='stm mis'>790</p>
-<p class='pln'>791</p>
-<p class='pln'>792</p>
-<p class='stm mis'>793</p>
-<p class='stm mis'>794</p>
-<p class='stm mis'>795</p>
-<p class='pln'>796</p>
-<p class='stm run hide'>797</p>
-<p class='stm mis'>798</p>
-<p class='stm mis'>799</p>
-<p class='pln'>800</p>
-<p class='pln'>801</p>
-<p class='stm run hide'>802</p>
-<p class='pln'>803</p>
-<p class='stm run hide'>804</p>
-<p class='stm mis'>805</p>
-<p class='pln'>806</p>
-<p class='pln'>807</p>
-<p class='pln'>808</p>
-<p class='pln'>809</p>
-<p class='pln'>810</p>
-<p class='pln'>811</p>
-<p class='pln'>812</p>
-<p class='pln'>813</p>
-<p class='pln'>814</p>
-<p class='pln'>815</p>
-<p class='pln'>816</p>
-<p class='pln'>817</p>
-<p class='pln'>818</p>
-<p class='pln'>819</p>
-<p class='pln'>820</p>
-<p class='pln'>821</p>
-<p class='pln'>822</p>
-<p class='pln'>823</p>
-<p class='pln'>824</p>
-<p class='pln'>825</p>
-<p class='pln'>826</p>
-<p class='pln'>827</p>
-<p class='pln'>828</p>
-<p class='pln'>829</p>
-<p class='stm mis'>830</p>
-<p class='stm mis'>831</p>
-<p class='stm mis'>832</p>
-<p class='stm mis'>833</p>
-<p class='stm mis'>834</p>
-<p class='pln'>835</p>
-<p class='stm run hide'>836</p>
-<p class='pln'>837</p>
-<p class='stm mis'>838</p>
-<p class='pln'>839</p>
-<p class='pln'>840</p>
-<p class='pln'>841</p>
-<p class='pln'>842</p>
-<p class='pln'>843</p>
-<p class='pln'>844</p>
-<p class='pln'>845</p>
-<p class='pln'>846</p>
-<p class='pln'>847</p>
-<p class='pln'>848</p>
-<p class='pln'>849</p>
-<p class='pln'>850</p>
-<p class='pln'>851</p>
-<p class='pln'>852</p>
-<p class='pln'>853</p>
-<p class='pln'>854</p>
-<p class='pln'>855</p>
-<p class='pln'>856</p>
-<p class='pln'>857</p>
-<p class='pln'>858</p>
-<p class='pln'>859</p>
-<p class='pln'>860</p>
-<p class='pln'>861</p>
-<p class='pln'>862</p>
-<p class='stm mis'>863</p>
-<p class='stm mis'>864</p>
-<p class='stm mis'>865</p>
-<p class='pln'>866</p>
-<p class='stm run hide'>867</p>
-<p class='stm mis'>868</p>
-<p class='pln'>869</p>
-<p class='pln'>870</p>
-<p class='pln'>871</p>
-<p class='pln'>872</p>
-<p class='pln'>873</p>
-<p class='pln'>874</p>
-<p class='pln'>875</p>
-<p class='pln'>876</p>
-<p class='pln'>877</p>
-<p class='pln'>878</p>
-<p class='pln'>879</p>
-<p class='pln'>880</p>
-<p class='pln'>881</p>
-<p class='pln'>882</p>
-<p class='pln'>883</p>
-<p class='pln'>884</p>
-<p class='pln'>885</p>
-<p class='pln'>886</p>
-<p class='pln'>887</p>
-<p class='pln'>888</p>
-<p class='pln'>889</p>
-<p class='pln'>890</p>
-<p class='pln'>891</p>
-<p class='pln'>892</p>
-<p class='pln'>893</p>
-<p class='pln'>894</p>
-<p class='pln'>895</p>
-<p class='pln'>896</p>
-<p class='pln'>897</p>
-<p class='pln'>898</p>
-<p class='pln'>899</p>
-<p class='pln'>900</p>
-<p class='pln'>901</p>
-<p class='pln'>902</p>
-<p class='pln'>903</p>
-<p class='pln'>904</p>
-<p class='pln'>905</p>
-<p class='pln'>906</p>
-<p class='stm mis'>907</p>
-<p class='stm mis'>908</p>
-<p class='stm mis'>909</p>
-<p class='stm mis'>910</p>
-<p class='stm mis'>911</p>
-<p class='stm mis'>912</p>
-<p class='pln'>913</p>
-<p class='stm run hide'>914</p>
-<p class='stm mis'>915</p>
-<p class='pln'>916</p>
-<p class='pln'>917</p>
-<p class='pln'>918</p>
-<p class='pln'>919</p>
-<p class='pln'>920</p>
-<p class='pln'>921</p>
-<p class='pln'>922</p>
-<p class='pln'>923</p>
-<p class='pln'>924</p>
-<p class='pln'>925</p>
-<p class='pln'>926</p>
-<p class='pln'>927</p>
-<p class='pln'>928</p>
-<p class='pln'>929</p>
-<p class='pln'>930</p>
-<p class='pln'>931</p>
-<p class='pln'>932</p>
-<p class='pln'>933</p>
-<p class='pln'>934</p>
-<p class='pln'>935</p>
-<p class='pln'>936</p>
-<p class='pln'>937</p>
-<p class='pln'>938</p>
-<p class='pln'>939</p>
-<p class='pln'>940</p>
-<p class='pln'>941</p>
-<p class='pln'>942</p>
-<p class='pln'>943</p>
-<p class='pln'>944</p>
-<p class='pln'>945</p>
-<p class='pln'>946</p>
-<p class='pln'>947</p>
-<p class='pln'>948</p>
-<p class='pln'>949</p>
-<p class='pln'>950</p>
-<p class='pln'>951</p>
-<p class='pln'>952</p>
-<p class='pln'>953</p>
-<p class='pln'>954</p>
-<p class='pln'>955</p>
-<p class='pln'>956</p>
-<p class='pln'>957</p>
-<p class='stm mis'>958</p>
-<p class='stm mis'>959</p>
-<p class='stm mis'>960</p>
-<p class='stm mis'>961</p>
-<p class='stm mis'>962</p>
-<p class='stm mis'>963</p>
-<p class='pln'>964</p>
-<p class='stm run hide'>965</p>
-<p class='stm mis'>966</p>
-<p class='pln'>967</p>
-<p class='pln'>968</p>
-<p class='pln'>969</p>
-<p class='pln'>970</p>
-<p class='pln'>971</p>
-<p class='pln'>972</p>
-<p class='pln'>973</p>
-<p class='pln'>974</p>
-<p class='pln'>975</p>
-<p class='pln'>976</p>
-<p class='pln'>977</p>
-<p class='pln'>978</p>
-<p class='pln'>979</p>
-<p class='pln'>980</p>
-<p class='pln'>981</p>
-<p class='pln'>982</p>
-<p class='pln'>983</p>
-<p class='pln'>984</p>
-<p class='pln'>985</p>
-<p class='pln'>986</p>
-<p class='pln'>987</p>
-<p class='pln'>988</p>
-<p class='pln'>989</p>
-<p class='pln'>990</p>
-<p class='pln'>991</p>
-<p class='pln'>992</p>
-<p class='pln'>993</p>
-<p class='pln'>994</p>
-<p class='pln'>995</p>
-<p class='pln'>996</p>
-<p class='pln'>997</p>
-<p class='pln'>998</p>
-<p class='pln'>999</p>
-<p class='pln'>1000</p>
-<p class='pln'>1001</p>
-<p class='stm mis'>1002</p>
-<p class='stm mis'>1003</p>
-<p class='stm mis'>1004</p>
-<p class='stm mis'>1005</p>
-<p class='pln'>1006</p>
-<p class='stm run hide'>1007</p>
-<p class='stm mis'>1008</p>
-<p class='pln'>1009</p>
-<p class='pln'>1010</p>
-<p class='pln'>1011</p>
-<p class='pln'>1012</p>
-<p class='pln'>1013</p>
-<p class='pln'>1014</p>
-<p class='pln'>1015</p>
-<p class='pln'>1016</p>
-<p class='pln'>1017</p>
-<p class='pln'>1018</p>
-<p class='pln'>1019</p>
-<p class='pln'>1020</p>
-<p class='pln'>1021</p>
-<p class='pln'>1022</p>
-<p class='pln'>1023</p>
-<p class='stm mis'>1024</p>
-<p class='stm mis'>1025</p>
-<p class='pln'>1026</p>
-<p class='stm run hide'>1027</p>
-<p class='stm mis'>1028</p>
-<p class='pln'>1029</p>
-<p class='pln'>1030</p>
-<p class='pln'>1031</p>
-<p class='pln'>1032</p>
-<p class='pln'>1033</p>
-<p class='pln'>1034</p>
-<p class='pln'>1035</p>
-<p class='pln'>1036</p>
-<p class='pln'>1037</p>
-<p class='pln'>1038</p>
-<p class='pln'>1039</p>
-<p class='pln'>1040</p>
-<p class='pln'>1041</p>
-<p class='pln'>1042</p>
-<p class='pln'>1043</p>
-<p class='pln'>1044</p>
-<p class='pln'>1045</p>
-<p class='pln'>1046</p>
-<p class='pln'>1047</p>
-<p class='pln'>1048</p>
-<p class='pln'>1049</p>
-<p class='pln'>1050</p>
-<p class='pln'>1051</p>
-<p class='pln'>1052</p>
-<p class='pln'>1053</p>
-<p class='pln'>1054</p>
-<p class='pln'>1055</p>
-<p class='pln'>1056</p>
-<p class='pln'>1057</p>
-<p class='pln'>1058</p>
-<p class='pln'>1059</p>
-<p class='pln'>1060</p>
-<p class='pln'>1061</p>
-<p class='pln'>1062</p>
-<p class='pln'>1063</p>
-<p class='pln'>1064</p>
-<p class='pln'>1065</p>
-<p class='stm mis'>1066</p>
-<p class='stm mis'>1067</p>
-<p class='stm mis'>1068</p>
-<p class='stm mis'>1069</p>
-<p class='stm mis'>1070</p>
-<p class='pln'>1071</p>
-<p class='pln'>1072</p>
-<p class='stm run hide'>1073</p>
-<p class='pln'>1074</p>
-<p class='pln'>1075</p>
-<p class='stm run hide'>1076</p>
-<p class='pln'>1077</p>
-<p class='pln'>1078</p>
-<p class='pln'>1079</p>
-<p class='pln'>1080</p>
-<p class='pln'>1081</p>
-<p class='pln'>1082</p>
-<p class='pln'>1083</p>
-<p class='pln'>1084</p>
-<p class='stm run hide'>1085</p>
-<p class='pln'>1086</p>
-<p class='pln'>1087</p>
-<p class='pln'>1088</p>
-<p class='pln'>1089</p>
-<p class='pln'>1090</p>
-<p class='pln'>1091</p>
-<p class='pln'>1092</p>
-<p class='pln'>1093</p>
-<p class='stm run hide'>1094</p>
-<p class='stm mis'>1095</p>
-<p class='stm mis'>1096</p>
-<p class='stm mis'>1097</p>
-<p class='pln'>1098</p>
-<p class='stm run hide'>1099</p>
-<p class='stm mis'>1100</p>
-<p class='stm mis'>1101</p>
-<p class='stm mis'>1102</p>
-<p class='pln'>1103</p>
-<p class='stm run hide'>1104</p>
-<p class='stm mis'>1105</p>
-<p class='stm mis'>1106</p>
-<p class='stm mis'>1107</p>
-<p class='pln'>1108</p>
-<p class='stm run hide'>1109</p>
-<p class='stm mis'>1110</p>
-<p class='stm mis'>1111</p>
-<p class='stm mis'>1112</p>
-<p class='pln'>1113</p>
-<p class='pln'>1114</p>
-<p class='stm run hide'>1115</p>
-<p class='pln'>1116</p>
-<p class='pln'>1117</p>
-<p class='pln'>1118</p>
-<p class='pln'>1119</p>
-<p class='pln'>1120</p>
-<p class='stm run hide'>1121</p>
-<p class='stm mis'>1122</p>
-<p class='stm mis'>1123</p>
-<p class='pln'>1124</p>
-<p class='stm run hide'>1125</p>
-<p class='stm mis'>1126</p>
-<p class='pln'>1127</p>
-<p class='pln'>1128</p>
-<p class='pln'>1129</p>
-<p class='pln'>1130</p>
-<p class='stm mis'>1131</p>
-<p class='stm mis'>1132</p>
-<p class='stm mis'>1133</p>
-<p class='pln'>1134</p>
-<p class='pln'>1135</p>
-<p class='stm run hide'>1136</p>
-<p class='stm run hide'>1137</p>
-<p class='pln'>1138</p>
-<p class='pln'>1139</p>
-<p class='pln'>1140</p>
-<p class='pln'>1141</p>
-<p class='pln'>1142</p>
-<p class='pln'>1143</p>
-<p class='pln'>1144</p>
-<p class='pln'>1145</p>
-<p class='pln'>1146</p>
-<p class='pln'>1147</p>
-<p class='pln'>1148</p>
-<p class='pln'>1149</p>
-<p class='pln'>1150</p>
-<p class='pln'>1151</p>
-<p class='pln'>1152</p>
-<p class='pln'>1153</p>
-<p class='pln'>1154</p>
-<p class='pln'>1155</p>
-<p class='pln'>1156</p>
-<p class='pln'>1157</p>
-<p class='pln'>1158</p>
-<p class='pln'>1159</p>
-<p class='pln'>1160</p>
-<p class='pln'>1161</p>
-<p class='pln'>1162</p>
-<p class='pln'>1163</p>
-<p class='pln'>1164</p>
-<p class='pln'>1165</p>
-<p class='pln'>1166</p>
-<p class='pln'>1167</p>
-<p class='pln'>1168</p>
-<p class='pln'>1169</p>
-<p class='pln'>1170</p>
-<p class='pln'>1171</p>
-<p class='pln'>1172</p>
-<p class='pln'>1173</p>
-<p class='pln'>1174</p>
-<p class='pln'>1175</p>
-<p class='pln'>1176</p>
-<p class='pln'>1177</p>
-<p class='pln'>1178</p>
-<p class='pln'>1179</p>
-<p class='pln'>1180</p>
-<p class='pln'>1181</p>
-<p class='pln'>1182</p>
-<p class='stm run hide'>1183</p>
-<p class='pln'>1184</p>
-<p class='stm mis'>1185</p>
-<p class='stm mis'>1186</p>
-<p class='pln'>1187</p>
-<p class='stm run hide'>1188</p>
-<p class='pln'>1189</p>
-<p class='stm mis'>1190</p>
-<p class='stm mis'>1191</p>
-<p class='stm mis'>1192</p>
-<p class='pln'>1193</p>
-<p class='stm run hide'>1194</p>
-<p class='pln'>1195</p>
-<p class='stm mis'>1196</p>
-<p class='stm mis'>1197</p>
-<p class='stm mis'>1198</p>
-<p class='pln'>1199</p>
-<p class='stm run hide'>1200</p>
-<p class='pln'>1201</p>
-<p class='stm mis'>1202</p>
-<p class='stm mis'>1203</p>
-<p class='stm mis'>1204</p>
-<p class='pln'>1205</p>
-<p class='stm run hide'>1206</p>
-<p class='pln'>1207</p>
-<p class='stm mis'>1208</p>
-<p class='stm mis'>1209</p>
-<p class='stm mis'>1210</p>
-<p class='pln'>1211</p>
-<p class='stm run hide'>1212</p>
-<p class='stm mis'>1213</p>
-<p class='pln'>1214</p>
-<p class='pln'>1215</p>
-<p class='pln'>1216</p>
-<p class='pln'>1217</p>
-<p class='pln'>1218</p>
-<p class='pln'>1219</p>
-<p class='pln'>1220</p>
-<p class='pln'>1221</p>
-<p class='pln'>1222</p>
-<p class='pln'>1223</p>
-<p class='stm mis'>1224</p>
-<p class='pln'>1225</p>
-<p class='stm mis'>1226</p>
-<p class='stm mis'>1227</p>
-<p class='stm mis'>1228</p>
-<p class='pln'>1229</p>
-<p class='stm mis'>1230</p>
-<p class='stm mis'>1231</p>
-<p class='stm mis'>1232</p>
-<p class='pln'>1233</p>
-<p class='stm mis'>1234</p>
-<p class='stm mis'>1235</p>
-<p class='stm mis'>1236</p>
-<p class='pln'>1237</p>
-<p class='stm mis'>1238</p>
-<p class='stm mis'>1239</p>
-<p class='stm mis'>1240</p>
-<p class='pln'>1241</p>
-<p class='stm mis'>1242</p>
-<p class='stm mis'>1243</p>
-<p class='stm mis'>1244</p>
-<p class='pln'>1245</p>
-<p class='stm mis'>1246</p>
-<p class='stm mis'>1247</p>
-<p class='stm mis'>1248</p>
-<p class='pln'>1249</p>
-<p class='stm mis'>1250</p>
-<p class='stm mis'>1251</p>
-<p class='stm mis'>1252</p>
-<p class='pln'>1253</p>
-<p class='stm run hide'>1254</p>
-<p class='pln'>1255</p>
-<p class='pln'>1256</p>
-<p class='stm mis'>1257</p>
-<p class='pln'>1258</p>
-<p class='pln'>1259</p>
-<p class='pln'>1260</p>
-<p class='pln'>1261</p>
-<p class='pln'>1262</p>
-<p class='pln'>1263</p>
-<p class='pln'>1264</p>
-<p class='pln'>1265</p>
-<p class='pln'>1266</p>
-<p class='pln'>1267</p>
-<p class='pln'>1268</p>
-<p class='pln'>1269</p>
-<p class='pln'>1270</p>
-<p class='pln'>1271</p>
-<p class='pln'>1272</p>
-<p class='pln'>1273</p>
-<p class='pln'>1274</p>
-<p class='pln'>1275</p>
-<p class='pln'>1276</p>
-<p class='pln'>1277</p>
-<p class='pln'>1278</p>
-<p class='pln'>1279</p>
-<p class='pln'>1280</p>
-<p class='stm mis'>1281</p>
-<p class='pln'>1282</p>
-<p class='pln'>1283</p>
-<p class='stm mis'>1284</p>
-<p class='stm mis'>1285</p>
-<p class='pln'>1286</p>
-<p class='pln'>1287</p>
-<p class='stm run hide'>1288</p>
-<p class='pln'>1289</p>
-<p class='stm run hide'>1290</p>
-<p class='pln'>1291</p>
-<p class='stm mis'>1292</p>
-<p class='pln'>1293</p>
-<p class='pln'>1294</p>
-<p class='pln'>1295</p>
-<p class='pln'>1296</p>
-<p class='pln'>1297</p>
-<p class='pln'>1298</p>
-<p class='pln'>1299</p>
-<p class='pln'>1300</p>
-<p class='pln'>1301</p>
-<p class='pln'>1302</p>
-<p class='pln'>1303</p>
-<p class='pln'>1304</p>
-<p class='pln'>1305</p>
-<p class='pln'>1306</p>
-<p class='stm mis'>1307</p>
-<p class='stm mis'>1308</p>
-<p class='stm mis'>1309</p>
-<p class='stm mis'>1310</p>
-<p class='stm mis'>1311</p>
-<p class='stm mis'>1312</p>
-<p class='stm mis'>1313</p>
-<p class='stm mis'>1314</p>
-<p class='stm mis'>1315</p>
-<p class='stm mis'>1316</p>
-<p class='stm mis'>1317</p>
-<p class='stm mis'>1318</p>
-<p class='pln'>1319</p>
-<p class='stm run hide'>1320</p>
-<p class='stm mis'>1321</p>
-<p class='pln'>1322</p>
-<p class='pln'>1323</p>
-<p class='pln'>1324</p>
-<p class='pln'>1325</p>
-<p class='pln'>1326</p>
-<p class='pln'>1327</p>
-<p class='pln'>1328</p>
-<p class='pln'>1329</p>
-<p class='pln'>1330</p>
-<p class='pln'>1331</p>
-<p class='pln'>1332</p>
-<p class='pln'>1333</p>
-<p class='pln'>1334</p>
-<p class='pln'>1335</p>
-<p class='pln'>1336</p>
-<p class='pln'>1337</p>
-<p class='pln'>1338</p>
-<p class='pln'>1339</p>
-<p class='pln'>1340</p>
-<p class='pln'>1341</p>
-<p class='pln'>1342</p>
-<p class='pln'>1343</p>
-<p class='pln'>1344</p>
-<p class='pln'>1345</p>
-<p class='pln'>1346</p>
-<p class='stm mis'>1347</p>
-<p class='stm mis'>1348</p>
-<p class='stm mis'>1349</p>
-<p class='stm mis'>1350</p>
-<p class='stm mis'>1351</p>
-<p class='stm mis'>1352</p>
-<p class='pln'>1353</p>
-<p class='stm run hide'>1354</p>
-<p class='pln'>1355</p>
-<p class='stm mis'>1356</p>
-<p class='pln'>1357</p>
-<p class='pln'>1358</p>
-<p class='pln'>1359</p>
-<p class='pln'>1360</p>
-<p class='pln'>1361</p>
-<p class='pln'>1362</p>
-<p class='pln'>1363</p>
-<p class='pln'>1364</p>
-<p class='pln'>1365</p>
-<p class='pln'>1366</p>
-<p class='pln'>1367</p>
-<p class='pln'>1368</p>
-<p class='pln'>1369</p>
-<p class='pln'>1370</p>
-<p class='pln'>1371</p>
-<p class='pln'>1372</p>
-<p class='pln'>1373</p>
-<p class='pln'>1374</p>
-<p class='pln'>1375</p>
-<p class='pln'>1376</p>
-<p class='pln'>1377</p>
-<p class='pln'>1378</p>
-<p class='pln'>1379</p>
-<p class='pln'>1380</p>
-<p class='pln'>1381</p>
-<p class='pln'>1382</p>
-<p class='pln'>1383</p>
-<p class='pln'>1384</p>
-<p class='pln'>1385</p>
-<p class='pln'>1386</p>
-<p class='pln'>1387</p>
-<p class='pln'>1388</p>
-<p class='pln'>1389</p>
-<p class='pln'>1390</p>
-<p class='pln'>1391</p>
-<p class='pln'>1392</p>
-<p class='pln'>1393</p>
-<p class='pln'>1394</p>
-<p class='pln'>1395</p>
-<p class='pln'>1396</p>
-<p class='pln'>1397</p>
-<p class='pln'>1398</p>
-<p class='pln'>1399</p>
-<p class='pln'>1400</p>
-<p class='stm mis'>1401</p>
-<p class='stm mis'>1402</p>
-<p class='stm mis'>1403</p>
-<p class='stm mis'>1404</p>
-<p class='stm mis'>1405</p>
-<p class='stm mis'>1406</p>
-<p class='pln'>1407</p>
-<p class='stm run hide'>1408</p>
-<p class='stm mis'>1409</p>
-<p class='pln'>1410</p>
-<p class='pln'>1411</p>
-<p class='pln'>1412</p>
-<p class='pln'>1413</p>
-<p class='pln'>1414</p>
-<p class='pln'>1415</p>
-<p class='pln'>1416</p>
-<p class='pln'>1417</p>
-<p class='pln'>1418</p>
-<p class='pln'>1419</p>
-<p class='pln'>1420</p>
-<p class='pln'>1421</p>
-<p class='pln'>1422</p>
-<p class='pln'>1423</p>
-<p class='pln'>1424</p>
-<p class='pln'>1425</p>
-<p class='pln'>1426</p>
-<p class='pln'>1427</p>
-<p class='pln'>1428</p>
-<p class='pln'>1429</p>
-<p class='pln'>1430</p>
-<p class='pln'>1431</p>
-<p class='pln'>1432</p>
-<p class='pln'>1433</p>
-<p class='pln'>1434</p>
-<p class='pln'>1435</p>
-<p class='pln'>1436</p>
-<p class='stm mis'>1437</p>
-<p class='pln'>1438</p>
-<p class='stm mis'>1439</p>
-<p class='stm mis'>1440</p>
-<p class='stm mis'>1441</p>
-<p class='pln'>1442</p>
-<p class='stm mis'>1443</p>
-<p class='stm mis'>1444</p>
-<p class='stm mis'>1445</p>
-<p class='pln'>1446</p>
-<p class='stm mis'>1447</p>
-<p class='stm mis'>1448</p>
-<p class='pln'>1449</p>
-<p class='stm run hide'>1450</p>
-<p class='stm mis'>1451</p>
-<p class='pln'>1452</p>
-<p class='pln'>1453</p>
-<p class='pln'>1454</p>
-<p class='pln'>1455</p>
-<p class='pln'>1456</p>
-<p class='stm mis'>1457</p>
-<p class='stm mis'>1458</p>
-<p class='stm mis'>1459</p>
-<p class='stm mis'>1460</p>
-<p class='pln'>1461</p>
-<p class='stm run hide'>1462</p>
-<p class='pln'>1463</p>
-<p class='pln'>1464</p>
-<p class='stm mis'>1465</p>
-<p class='pln'>1466</p>
-<p class='pln'>1467</p>
-<p class='pln'>1468</p>
-<p class='pln'>1469</p>
-<p class='pln'>1470</p>
-<p class='pln'>1471</p>
-<p class='pln'>1472</p>
-<p class='pln'>1473</p>
-<p class='pln'>1474</p>
-<p class='pln'>1475</p>
-<p class='pln'>1476</p>
-<p class='pln'>1477</p>
-<p class='pln'>1478</p>
-<p class='stm mis'>1479</p>
-<p class='stm mis'>1480</p>
-<p class='stm mis'>1481</p>
-<p class='stm mis'>1482</p>
-<p class='stm mis'>1483</p>
-<p class='stm mis'>1484</p>
-<p class='stm mis'>1485</p>
-<p class='pln'>1486</p>
-<p class='stm run hide'>1487</p>
-<p class='stm mis'>1488</p>
-<p class='pln'>1489</p>
-<p class='pln'>1490</p>
-<p class='pln'>1491</p>
-<p class='pln'>1492</p>
-<p class='pln'>1493</p>
-<p class='pln'>1494</p>
-<p class='pln'>1495</p>
-<p class='pln'>1496</p>
-<p class='pln'>1497</p>
-<p class='pln'>1498</p>
-<p class='pln'>1499</p>
-<p class='pln'>1500</p>
-<p class='pln'>1501</p>
-<p class='pln'>1502</p>
-<p class='pln'>1503</p>
-<p class='pln'>1504</p>
-<p class='pln'>1505</p>
-<p class='pln'>1506</p>
-<p class='stm mis'>1507</p>
-<p class='stm mis'>1508</p>
-<p class='stm mis'>1509</p>
-<p class='stm mis'>1510</p>
-<p class='stm mis'>1511</p>
-<p class='stm mis'>1512</p>
-<p class='stm mis'>1513</p>
-<p class='stm mis'>1514</p>
-<p class='stm mis'>1515</p>
-<p class='stm mis'>1516</p>
-<p class='stm mis'>1517</p>
-<p class='stm mis'>1518</p>
-<p class='stm mis'>1519</p>
-<p class='stm mis'>1520</p>
-<p class='stm mis'>1521</p>
-<p class='stm mis'>1522</p>
-<p class='stm mis'>1523</p>
-<p class='stm mis'>1524</p>
-<p class='pln'>1525</p>
-<p class='stm run hide'>1526</p>
-<p class='stm mis'>1527</p>
-<p class='pln'>1528</p>
-<p class='pln'>1529</p>
-<p class='pln'>1530</p>
-<p class='pln'>1531</p>
-<p class='pln'>1532</p>
-<p class='pln'>1533</p>
-<p class='stm mis'>1534</p>
-<p class='stm mis'>1535</p>
-<p class='stm mis'>1536</p>
-<p class='stm mis'>1537</p>
-<p class='stm mis'>1538</p>
-<p class='stm mis'>1539</p>
-<p class='stm mis'>1540</p>
-<p class='stm mis'>1541</p>
-<p class='pln'>1542</p>
-<p class='stm run hide'>1543</p>
-<p class='stm mis'>1544</p>
-<p class='pln'>1545</p>
-<p class='pln'>1546</p>
-<p class='pln'>1547</p>
-<p class='pln'>1548</p>
-<p class='pln'>1549</p>
-<p class='pln'>1550</p>
-<p class='pln'>1551</p>
-<p class='pln'>1552</p>
-<p class='pln'>1553</p>
-<p class='pln'>1554</p>
-<p class='pln'>1555</p>
-<p class='pln'>1556</p>
-<p class='pln'>1557</p>
-<p class='pln'>1558</p>
-<p class='pln'>1559</p>
-<p class='pln'>1560</p>
-<p class='pln'>1561</p>
-<p class='pln'>1562</p>
-<p class='pln'>1563</p>
-<p class='stm mis'>1564</p>
-<p class='stm mis'>1565</p>
-<p class='stm mis'>1566</p>
-<p class='pln'>1567</p>
-<p class='stm run hide'>1568</p>
-<p class='stm mis'>1569</p>
-<p class='pln'>1570</p>
-<p class='pln'>1571</p>
-<p class='pln'>1572</p>
-<p class='pln'>1573</p>
-<p class='pln'>1574</p>
-<p class='pln'>1575</p>
-<p class='pln'>1576</p>
-<p class='pln'>1577</p>
-<p class='pln'>1578</p>
-<p class='pln'>1579</p>
-<p class='pln'>1580</p>
-<p class='pln'>1581</p>
-<p class='pln'>1582</p>
-<p class='pln'>1583</p>
-<p class='stm mis'>1584</p>
-<p class='stm mis'>1585</p>
-<p class='stm mis'>1586</p>
-<p class='pln'>1587</p>
-<p class='stm run hide'>1588</p>
-<p class='stm mis'>1589</p>
-<p class='pln'>1590</p>
-<p class='pln'>1591</p>
-<p class='pln'>1592</p>
-<p class='pln'>1593</p>
-<p class='pln'>1594</p>
-<p class='pln'>1595</p>
-<p class='pln'>1596</p>
-<p class='pln'>1597</p>
-<p class='pln'>1598</p>
-<p class='pln'>1599</p>
-<p class='pln'>1600</p>
-<p class='pln'>1601</p>
-<p class='stm mis'>1602</p>
-<p class='stm mis'>1603</p>
-<p class='stm mis'>1604</p>
-<p class='pln'>1605</p>
-<p class='stm run hide'>1606</p>
-<p class='pln'>1607</p>
-<p class='stm run hide'>1608</p>
-<p class='pln'>1609</p>
-<p class='pln'>1610</p>
-<p class='pln'>1611</p>
-<p class='pln'>1612</p>
-<p class='pln'>1613</p>
-<p class='pln'>1614</p>
-<p class='pln'>1615</p>
-<p class='pln'>1616</p>
-<p class='pln'>1617</p>
-<p class='pln'>1618</p>
-<p class='pln'>1619</p>
-<p class='pln'>1620</p>
-<p class='pln'>1621</p>
-<p class='pln'>1622</p>
-<p class='pln'>1623</p>
-<p class='pln'>1624</p>
-<p class='pln'>1625</p>
-<p class='pln'>1626</p>
-<p class='pln'>1627</p>
-<p class='pln'>1628</p>
-<p class='exc'>1629</p>
-<p class='pln'>1630</p>
-<p class='exc'>1631</p>
-<p class='exc'>1632</p>
-<p class='exc'>1633</p>
-<p class='pln'>1634</p>
-<p class='exc'>1635</p>
-<p class='exc'>1636</p>
-<p class='pln'>1637</p>
-<p class='stm run hide'>1638</p>
-<p class='stm mis'>1639</p>
-<p class='stm mis'>1640</p>
-<p class='stm mis'>1641</p>
-<p class='stm mis'>1642</p>
-<p class='stm mis'>1643</p>
-<p class='pln'>1644</p>
-<p class='stm run hide'>1645</p>
-<p class='stm mis'>1646</p>
-<p class='stm mis'>1647</p>
-<p class='pln'>1648</p>
-<p class='stm run hide'>1649</p>
-<p class='stm mis'>1650</p>
-<p class='pln'>1651</p>
-<p class='pln'>1652</p>
-<p class='stm mis'>1653</p>
-<p class='pln'>1654</p>
-<p class='stm run hide'>1655</p>
-<p class='stm mis'>1656</p>
-<p class='stm mis'>1657</p>
-<p class='stm mis'>1658</p>
-<p class='pln'>1659</p>
-<p class='stm run hide'>1660</p>
-<p class='stm mis'>1661</p>
-<p class='stm mis'>1662</p>
-<p class='stm mis'>1663</p>
-<p class='pln'>1664</p>
-<p class='stm run hide'>1665</p>
-<p class='stm mis'>1666</p>
-<p class='pln'>1667</p>
-<p class='pln'>1668</p>
-<p class='stm mis'>1669</p>
-<p class='pln'>1670</p>
-<p class='stm run hide'>1671</p>
-<p class='pln'>1672</p>
-<p class='stm run hide'>1673</p>
-<p class='stm mis'>1674</p>
-<p class='pln'>1675</p>
-<p class='pln'>1676</p>
-<p class='pln'>1677</p>
-<p class='pln'>1678</p>
-<p class='pln'>1679</p>
-<p class='pln'>1680</p>
-<p class='pln'>1681</p>
-<p class='pln'>1682</p>
-<p class='pln'>1683</p>
-<p class='pln'>1684</p>
-<p class='pln'>1685</p>
-<p class='pln'>1686</p>
-<p class='pln'>1687</p>
-<p class='pln'>1688</p>
-<p class='pln'>1689</p>
-<p class='pln'>1690</p>
-<p class='pln'>1691</p>
-<p class='pln'>1692</p>
-<p class='pln'>1693</p>
-<p class='stm mis'>1694</p>
-<p class='stm mis'>1695</p>
-<p class='stm mis'>1696</p>
-<p class='pln'>1697</p>
-<p class='stm run hide'>1698</p>
-<p class='stm mis'>1699</p>
-<p class='pln'>1700</p>
-<p class='pln'>1701</p>
-<p class='pln'>1702</p>
-<p class='pln'>1703</p>
-<p class='pln'>1704</p>
-<p class='pln'>1705</p>
-<p class='pln'>1706</p>
-<p class='pln'>1707</p>
-<p class='pln'>1708</p>
-<p class='pln'>1709</p>
-<p class='pln'>1710</p>
-<p class='pln'>1711</p>
-<p class='pln'>1712</p>
-<p class='pln'>1713</p>
-<p class='pln'>1714</p>
-<p class='pln'>1715</p>
-<p class='pln'>1716</p>
-<p class='pln'>1717</p>
-<p class='pln'>1718</p>
-<p class='pln'>1719</p>
-<p class='pln'>1720</p>
-<p class='pln'>1721</p>
-<p class='pln'>1722</p>
-<p class='stm mis'>1723</p>
-<p class='stm mis'>1724</p>
-<p class='stm mis'>1725</p>
-<p class='pln'>1726</p>
-<p class='stm run hide'>1727</p>
-<p class='stm mis'>1728</p>
-<p class='pln'>1729</p>
-<p class='pln'>1730</p>
-<p class='pln'>1731</p>
-<p class='pln'>1732</p>
-<p class='pln'>1733</p>
-<p class='pln'>1734</p>
-<p class='pln'>1735</p>
-<p class='pln'>1736</p>
-<p class='pln'>1737</p>
-<p class='pln'>1738</p>
-<p class='pln'>1739</p>
-<p class='pln'>1740</p>
-<p class='pln'>1741</p>
-<p class='pln'>1742</p>
-<p class='pln'>1743</p>
-<p class='pln'>1744</p>
-<p class='pln'>1745</p>
-<p class='pln'>1746</p>
-<p class='pln'>1747</p>
-<p class='pln'>1748</p>
-<p class='pln'>1749</p>
-<p class='pln'>1750</p>
-<p class='pln'>1751</p>
-<p class='stm mis'>1752</p>
-<p class='stm mis'>1753</p>
-<p class='stm mis'>1754</p>
-<p class='pln'>1755</p>
-<p class='stm run hide'>1756</p>
-<p class='stm mis'>1757</p>
-<p class='pln'>1758</p>
-<p class='pln'>1759</p>
-<p class='pln'>1760</p>
-<p class='pln'>1761</p>
-<p class='pln'>1762</p>
-<p class='pln'>1763</p>
-<p class='pln'>1764</p>
-<p class='pln'>1765</p>
-<p class='pln'>1766</p>
-<p class='pln'>1767</p>
-<p class='pln'>1768</p>
-<p class='pln'>1769</p>
-<p class='pln'>1770</p>
-<p class='pln'>1771</p>
-<p class='pln'>1772</p>
-<p class='pln'>1773</p>
-<p class='pln'>1774</p>
-<p class='pln'>1775</p>
-<p class='pln'>1776</p>
-<p class='pln'>1777</p>
-<p class='pln'>1778</p>
-<p class='pln'>1779</p>
-<p class='pln'>1780</p>
-<p class='pln'>1781</p>
-<p class='pln'>1782</p>
-<p class='pln'>1783</p>
-<p class='pln'>1784</p>
-<p class='pln'>1785</p>
-<p class='pln'>1786</p>
-<p class='pln'>1787</p>
-<p class='pln'>1788</p>
-<p class='pln'>1789</p>
-<p class='pln'>1790</p>
-<p class='pln'>1791</p>
-<p class='pln'>1792</p>
-<p class='pln'>1793</p>
-<p class='pln'>1794</p>
-<p class='pln'>1795</p>
-<p class='pln'>1796</p>
-<p class='pln'>1797</p>
-<p class='pln'>1798</p>
-<p class='pln'>1799</p>
-<p class='pln'>1800</p>
-<p class='pln'>1801</p>
-<p class='pln'>1802</p>
-<p class='pln'>1803</p>
-<p class='pln'>1804</p>
-<p class='pln'>1805</p>
-<p class='pln'>1806</p>
-<p class='pln'>1807</p>
-<p class='pln'>1808</p>
-<p class='pln'>1809</p>
-<p class='pln'>1810</p>
-<p class='pln'>1811</p>
-<p class='pln'>1812</p>
-<p class='pln'>1813</p>
-<p class='pln'>1814</p>
-<p class='pln'>1815</p>
-<p class='pln'>1816</p>
-<p class='pln'>1817</p>
-<p class='pln'>1818</p>
-<p class='pln'>1819</p>
-<p class='pln'>1820</p>
-<p class='pln'>1821</p>
-<p class='pln'>1822</p>
-<p class='pln'>1823</p>
-<p class='pln'>1824</p>
-<p class='pln'>1825</p>
-<p class='pln'>1826</p>
-<p class='pln'>1827</p>
-<p class='pln'>1828</p>
-<p class='pln'>1829</p>
-<p class='stm mis'>1830</p>
-<p class='stm mis'>1831</p>
-<p class='pln'>1832</p>
-<p class='pln'>1833</p>
-<p class='stm mis'>1834</p>
-<p class='pln'>1835</p>
-<p class='pln'>1836</p>
-<p class='stm mis'>1837</p>
-<p class='pln'>1838</p>
-<p class='pln'>1839</p>
-<p class='stm mis'>1840</p>
-<p class='pln'>1841</p>
-<p class='pln'>1842</p>
-<p class='stm mis'>1843</p>
-<p class='pln'>1844</p>
-<p class='pln'>1845</p>
-<p class='stm mis'>1846</p>
-<p class='pln'>1847</p>
-<p class='pln'>1848</p>
-<p class='pln'>1849</p>
-<p class='stm run hide'>1850</p>
-<p class='pln'>1851</p>
-<p class='pln'>1852</p>
-<p class='stm run hide'>1853</p>
-<p class='pln'>1854</p>
-<p class='stm mis'>1855</p>
-<p class='pln'>1856</p>
-<p class='pln'>1857</p>
-<p class='pln'>1858</p>
-<p class='pln'>1859</p>
-<p class='pln'>1860</p>
-<p class='pln'>1861</p>
-<p class='pln'>1862</p>
-<p class='pln'>1863</p>
-<p class='pln'>1864</p>
-<p class='pln'>1865</p>
-<p class='pln'>1866</p>
-<p class='pln'>1867</p>
-<p class='pln'>1868</p>
-<p class='pln'>1869</p>
-<p class='pln'>1870</p>
-<p class='pln'>1871</p>
-<p class='pln'>1872</p>
-<p class='pln'>1873</p>
-<p class='pln'>1874</p>
-<p class='pln'>1875</p>
-<p class='pln'>1876</p>
-<p class='stm mis'>1877</p>
-<p class='stm mis'>1878</p>
-<p class='stm mis'>1879</p>
-<p class='pln'>1880</p>
-<p class='stm run hide'>1881</p>
-<p class='stm mis'>1882</p>
-<p class='pln'>1883</p>
-<p class='pln'>1884</p>
-<p class='pln'>1885</p>
-<p class='pln'>1886</p>
-<p class='pln'>1887</p>
-<p class='stm mis'>1888</p>
-<p class='stm mis'>1889</p>
-<p class='pln'>1890</p>
-<p class='stm run hide'>1891</p>
-<p class='pln'>1892</p>
-<p class='pln'>1893</p>
-<p class='stm mis'>1894</p>
-<p class='pln'>1895</p>
-<p class='pln'>1896</p>
-<p class='pln'>1897</p>
-<p class='pln'>1898</p>
-<p class='pln'>1899</p>
-<p class='pln'>1900</p>
-<p class='pln'>1901</p>
-<p class='pln'>1902</p>
-<p class='pln'>1903</p>
-<p class='pln'>1904</p>
-<p class='pln'>1905</p>
-<p class='pln'>1906</p>
-<p class='pln'>1907</p>
-<p class='pln'>1908</p>
-<p class='pln'>1909</p>
-<p class='pln'>1910</p>
-<p class='pln'>1911</p>
-<p class='stm mis'>1912</p>
-<p class='stm mis'>1913</p>
-<p class='stm mis'>1914</p>
-<p class='stm mis'>1915</p>
-<p class='stm mis'>1916</p>
-<p class='stm mis'>1917</p>
-<p class='pln'>1918</p>
-<p class='stm run hide'>1919</p>
-<p class='pln'>1920</p>
-<p class='stm run hide'>1921</p>
-<p class='pln'>1922</p>
-<p class='stm mis'>1923</p>
-<p class='pln'>1924</p>
-<p class='pln'>1925</p>
-<p class='pln'>1926</p>
-<p class='pln'>1927</p>
-<p class='pln'>1928</p>
-<p class='pln'>1929</p>
-<p class='pln'>1930</p>
-<p class='pln'>1931</p>
-<p class='stm mis'>1932</p>
-<p class='stm mis'>1933</p>
-<p class='stm mis'>1934</p>
-<p class='stm mis'>1935</p>
-<p class='pln'>1936</p>
-<p class='stm run hide'>1937</p>
-<p class='pln'>1938</p>
-<p class='stm mis'>1939</p>
-<p class='pln'>1940</p>
-<p class='pln'>1941</p>
-<p class='pln'>1942</p>
-<p class='pln'>1943</p>
-<p class='pln'>1944</p>
-<p class='pln'>1945</p>
-<p class='pln'>1946</p>
-<p class='pln'>1947</p>
-<p class='stm mis'>1948</p>
-<p class='stm mis'>1949</p>
-<p class='stm mis'>1950</p>
-<p class='stm mis'>1951</p>
-<p class='stm mis'>1952</p>
-<p class='stm mis'>1953</p>
-<p class='pln'>1954</p>
-<p class='pln'>1955</p>
-<p class='exc'>1956</p>
-<p class='exc'>1957</p>
-<p class='pln'>1958</p>
-<p class='pln'>1959</p>
-<p class='pln'>1960</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='str'>&quot;&quot;&quot; Test cogapp.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>unittest</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>random</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>StringIO</span><span class='op'>,</span> <span class='nam'>stat</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>tempfile</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>path</span>&nbsp; &nbsp;&nbsp; <span class='com'># Non-standard, from http://www.jorendorff.com/articles/python/path</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>Cog</span><span class='op'>,</span> <span class='nam'>CogOptions</span><span class='op'>,</span> <span class='nam'>CogGenerator</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>CogGeneratedError</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>usage</span><span class='op'>,</span> <span class='nam'>__version__</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='nam'>reindentBlock</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>from</span> <span class='nam'>makefiles</span> <span class='key'>import</span> <span class='op'>*</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestCase</span><span class='op'>(</span><span class='nam'>unittest</span><span class='op'>.</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Base class for all Cog test cases.&nbsp; Adds utility methods I like.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>excClass</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>callableObj</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kwargs</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Just like unittest.TestCase.assertRaises,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; but checks that the message is right too.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>callableObj</span><span class='op'>(</span><span class='op'>*</span><span class='nam'>args</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kwargs</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>excClass</span><span class='op'>,</span> <span class='nam'>exc</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>excMsg</span> <span class='op'>=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>exc</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>msg</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># No message provided: it passes.</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span>&nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>excMsg</span> <span class='op'>==</span> <span class='nam'>msg</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Message provided, and we got the right message: it passes.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Message provided, and it didn&#39;t match: fail!</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>failureException</span><span class='op'>(</span><span class='str'>&quot;Right exception, wrong message: got &#39;%s&#39; expected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>excMsg</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>excClass</span><span class='op'>,</span><span class='str'>&#39;__name__&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>excName</span> <span class='op'>=</span> <span class='nam'>excClass</span><span class='op'>.</span><span class='nam'>__name__</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>excName</span> <span class='op'>=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>excClass</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>failureException</span><span class='op'>(</span><span class='str'>&quot;Expected to raise %s, didn&#39;t get an exception at all&quot;</span> <span class='op'>%</span> <span class='nam'>excName</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogTestsInMemory</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test cases for cogapp.Cog()</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>strings</span> <span class='op'>=</span> <span class='op'>[</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39; &#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39; \t \t \tx&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;hello&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;the cat\nin the\nhat.&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;Horton\n\tHears A\n\t\tWho&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some text.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line one\\n&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line two&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gobbledegook.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some text.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line one\\n&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line two&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>outfile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmptyCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The cog clause can be totally empty.&nbsp; Not sure why you&#39;d want it,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># but it works.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testMultipleCogs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># One file can have many cog chunks, even abutting each other.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk1&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk2&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; between chunks</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk3&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk3</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTrimBlankLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;This is line one\\n&quot;, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;&#39;, dedent=True, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line three&quot;, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line three</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTrimEmptyBlankLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;This is line one\\n&quot;, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;&#39;, dedent=True, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;, dedent=True, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line three&quot;, trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line three</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>test22EndOfLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># In Python 2.2, this cog file was not parsing because the</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># last line is indented but didn&#39;t end with a newline.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;%d\\n&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testIndentedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testPrefixedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testPrefixedIndentedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp;&nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp;&nbsp; for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; &nbsp;&nbsp; cog.out(&quot;xy%d\\n&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testBogusPrefixMatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # This comment should not be clobbered by removing the pound sign.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;xy%d\\n&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoFinalNewline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If the cog&#39;ed output has no final newline,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># it shouldn&#39;t eat up the cog terminator.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;%d&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 012</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoOutputAtAll</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If there is absolutely no cog output, that&#39;s ok.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i = 1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testPurelyBlankLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If there is a blank line in the cog code with no whitespace</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># prefix, that should be OK.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import sys</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;Hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;There&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HelloThere</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;$&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmptyOutl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Alexander Belchenko suggested the string argument to outl should</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># be optional.&nbsp; Does it work?</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;x&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl()</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;y&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(trimblanklines=True)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;z&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testFirstLineNum</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;started at line number %d&quot; % cog.firstLineNum)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; started at line number 2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;and again at line %d&quot; % cog.firstLineNum)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and again at line 8</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompactOneLineCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog cog.outl(&quot;hello %d&quot; % (3*3*3*3)) ]]] looky!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get rid of this!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog cog.outl(&quot;hello %d&quot; % (3*3*3*3)) ]]] looky!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello 81</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>outfile</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testInsideOutCompact</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey?: ]]] what is this? [[[cog strange!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get rid of this!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&quot;infile.txt(2): Cog code markers inverted&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&quot;infile.txt&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSharingGlobals</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog s=&quot;hey there&quot; ]]] looky!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more literal junk.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.outl(s) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog s=&quot;hey there&quot; ]]] looky!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more literal junk.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.outl(s) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey there</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>outfile</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogOptionsTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test the CogOptions class.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEquality</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-r&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertNotEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-r&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCloning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;booey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39; /*x*/&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>o</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;huey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo=quux&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertNotEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>q</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>q</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;booey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39; /*x*/&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;huey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo=quux&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>p</span><span class='op'>,</span> <span class='nam'>q</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCombiningFlags</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Single-character flags can be combined.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-e&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-erz&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>FileStructureTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test cases to check that we&#39;re properly strict about the structure</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; of files.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>msg</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;infile.txt&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testBeginNoEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(2): Cog block begun but never ended.&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoEoo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(4): Missing &#39;[[[end]]]&#39; before end of file.&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;goodbye&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(5): Unexpected &#39;[[[cog&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testStartWithEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(1): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]&nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(5): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testStartWithEoo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(1): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(5): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(3): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(7): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoBegins</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(2): Unexpected &#39;[[[cog&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(6): Unexpected &#39;[[[cog&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoEnds</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(4): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(8): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogErrorTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test cases for cog.error().</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.error(&quot;This ain&#39;t right!&quot;)]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogGeneratedError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;This ain&#39;t right!&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorNoMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.error()]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogGeneratedError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;Error raised by cog generator.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoErrorIfErrorNotCalled</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --for i in range(3):</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; if i &gt; 10:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; &nbsp; &nbsp; cog.error(&quot;Something is amiss!&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogGeneratorGetCodeTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Unit tests against CogGenerator to see if its getCode() method works</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; properly.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; All tests get a generator to use, and short same-length names for</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the functions we&#39;re going to use.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmpty</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// ]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;&nbsp; print &quot;hello&quot;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;&nbsp; print &quot;bye&quot;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// ]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;print &quot;hello&quot;\nprint &quot;bye&quot;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed1</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog: print &quot;&quot;&quot;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;// hello&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;// bye&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// &quot;&quot;&quot;)]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;hello\nbye&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed2</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog: print &quot;&quot;&quot;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;hello&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;bye&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// &quot;&quot;&quot;)]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;hello\nbye&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed3</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;print &quot;&quot;&quot;hello&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;bye&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// &quot;&quot;&quot;)]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;print &quot;&quot;&quot;hello\nbye&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed4</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog: print &quot;&quot;&quot;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;hello&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;bye&quot;&quot;&quot;)&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// ]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;hello\nbye&quot;&quot;&quot;)&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoCommonPrefixForMarkers</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># It&#39;s important to be able to use #if 0 to hide lines from a</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># C++ compiler.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;#if 0 //[[[cog&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;\timport cog, sys&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;\tprint sys.argv&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;#endif //]]]&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;import cog, sys\n\nprint sys.argv&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestCaseWithTempDir</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>newCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Initialize the cog members for another run.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Create a cog engine, and catch its output.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span> <span class='op'>=</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Create a temporary directory.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>tempfile</span><span class='op'>.</span><span class='nam'>gettempdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>/</span> <span class='op'>(</span><span class='str'>&#39;testcog_tempdir_&#39;</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>random</span><span class='op'>.</span><span class='nam'>random</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>olddir</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>olddir</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get rid of the temporary directory.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>.</span><span class='nam'>rmtree</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFName1</span><span class='op'>,</span> <span class='nam'>sFName2</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>assertFileContent</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFName</span><span class='op'>,</span> <span class='nam'>sContent</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sAbsName</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sAbsName</span><span class='op'>,</span> <span class='str'>&#39;rb&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileContent</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>sFileContent</span><span class='op'>,</span> <span class='nam'>sContent</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>ArgumentHandlingTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testArgumentFailure</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Return value 2 means usage problem.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-j&#39;</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>2</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;option -j not recognized&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-j&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoDashOAndAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashV</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-v&#39;</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='str'>&#39;Cog version %s\n&#39;</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class='op'>,</span> <span class='nam'>output</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>producesHelp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>argv</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>]</span> <span class='op'>+</span> <span class='nam'>args</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEquals</span><span class='op'>(</span><span class='nam'>usage</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashH</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># -h or -? anywhere on the command line should just print help.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;-h&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;-?&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;fooey.txt -h&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;-o -r @fooey.txt -? @booey.txt&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashOAndDashR</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfile.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cogfile.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashZ</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>&quot;test.cog(6): Missing &#39;[[[end]]]&#39; before end of file.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testBadDashD</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestFileHandling</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># -o sets the output file.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye cruel world</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;two.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNestedAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye cruel world</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @cogfiles2.txt</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles2.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # This one too, please.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;two.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFileWithArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;both.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one: True // ONE</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two: False // ONE</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one: False // TWO</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two: True // TWO</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -o both.one -s &#39; // ONE&#39; -D one=x</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -o both.two -s &#39; // TWO&#39; -D two=x</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;both.one&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;both.two&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFileWithBadArgCombo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;both.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -d # This is bad: -r and -d</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFileWithTrickyFilenames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one 1.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;hello world&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;hello world&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world //xxx</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subdir&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subback.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with backslashes&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subfwd.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with slashes&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subback.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with backslashes&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; down deep with backslashes //yyy</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subfwd.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with slashes&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; down deep with slashes //zzz</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one 1.cog&#39; -s &#39; //xxx&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subdir\subback.cog -s &#39; //yyy&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subdir/subfwd.cog -s &#39; //zzz&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one 1.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;subdir/subback.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;subback.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;subdir/subfwd.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;subfwd.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogTestLineEndings</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Tests for -U option (force LF line-endings in output).&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>lines_in</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;Some text.&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;//[[[cog&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog.outl(&quot;Cog text&quot;)&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;//]]]&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;gobbledegook.&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;//[[[end]]]&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;epilogue.&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>lines_out</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;Some text.&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;//[[[cog&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;cog.outl(&quot;Cog text&quot;)&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;//]]]&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;Cog text&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;//[[[end]]]&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;epilogue.&#39;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputNativeEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;infile&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='str'>&#39;infile&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputLfEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;infile&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-U&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='str'>&#39;infile&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReplaceNativeEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReplaceLfEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-U&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>TestCaseWithImports</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; When running tests which import modules, the sys.modules list</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; leaks from one test to the next.&nbsp; This test case class scrubs</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; the list after each run to keep the tests isolated from each other.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sysmodulekeys</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>modstoscrub</span> <span class='op'>=</span> <span class='op'>[</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>modname</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>modname</span> <span class='key'>in</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>modname</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sysmodulekeys</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>modname</span> <span class='key'>in</span> <span class='nam'>modstoscrub</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>del</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='nam'>modname</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogIncludeTests</span><span class='op'>(</span><span class='nam'>TestCaseWithImports</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>dincludes</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mymodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test2.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mymodule in inc2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;include&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;mymodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mymodule&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;inc2&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;mymodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mymodule in inc2&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;inc3&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;someothermodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is some other module.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNeedIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Try it without the -I, to see that an ImportError happens.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>ImportError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that -I adds include directories properly.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoIncludePaths</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that two -I&#39;s add include directories properly.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;inc2&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoIncludePaths2</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that two -I&#39;s add include directories properly.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;inc2&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test2.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testUselessIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that the search will continue past the first directory.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;inc3&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSysPathIsUnchanged</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;bad.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.error(&quot;Oh no!&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;good.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;Oh yes!&quot;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged just by creating a cog engine?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>oldsyspath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a successful run?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;good.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a successful run with includes?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;good.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a successful run with two includes?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;good.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a failed run?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;bad.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a failed run with includes?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;bad.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a failed run with two includes?</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;bad.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSubDirectories</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that relative paths on the command line work, with includes.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;code&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mysubmodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mysubmodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mysubmodule</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;mysubmodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mysubmodule&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We should be able to invoke cog without the -I switch, and it will</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># auto-include the current directory</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;code/test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;code/test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;code/test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>CogTestsInFiles</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testWarnIfNoCogCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that the -e switch warns if there is no Cog code.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;with.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;without.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; There&#39;s no cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; code in this file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-e&#39;</span><span class='op'>,</span> <span class='str'>&#39;with.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;Warning&quot;</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-e&#39;</span><span class='op'>,</span> <span class='str'>&#39;without.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;Warning: no cog code found in without.cog&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;without.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;Warning&quot;</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testFileNameProps</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this is cog1.txt in, cog1.txt out</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is cog1.txt in, cog1.txt out</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1out.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is cog1.txt in, cog1out.txt out</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1out.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1out.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1out.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testGlobalsDontCrossFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Make sure that global values don&#39;t get shared between files.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog s = &quot;This was set in one.cog&quot; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(s) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog s = &quot;This was set in one.cog&quot; ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(s) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This was set in one.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(s)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; except NameError:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;s isn&#39;t set!&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(s)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; except NameError:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;s isn&#39;t set!&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s isn&#39;t set!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;two.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testRemoveGeneratedOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out2&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Remove generated output.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-x&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Regenerate the generated output.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out2&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Remove the generated output again.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-x&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testMsgCall</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.msg(&quot;Hello there!&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>&quot;Message: Hello there!\n&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorMessageHasNoTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that a Cog error is printed to stderr with no traceback.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Xhis line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>stderr</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog1.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&quot;Cogging cog1.txt\n&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&quot;cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashD</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defined fooey as kablooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.einstein&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defined fooey as e=mc2</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=e=mc2&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.einstein&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dbar=quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dbar=quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=gooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputToStdout</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&#39;Hey there!&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>stderr</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outerr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>&quot;--[[[cog cog.outl(&#39;Hey there!&#39;) ]]]\nHey there!\n--[[[end]]]\n&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>outerr</span><span class='op'>,</span> <span class='str'>&quot;&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSuffixOutputLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hey there.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\n&nbsp;&nbsp; \\nc&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Good bye.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hey there.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\n&nbsp;&nbsp; \\nc&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a (foo)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b (foo)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c (foo)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Good bye.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39; (foo)&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmptySuffix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\nc&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\nc&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testHellishSuffix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\n\\nb&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\n\\nb&#39;) ]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a /\\n*+([)]&gt;&lt;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b /\\n*+([)]&gt;&lt;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>r&#39; /\n*+([)]&gt;&lt;&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>WritabilityTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>name</span> <span class='op'>==</span> <span class='str'>&#39;nt&#39;</span><span class='op'>:</span>&nbsp; &nbsp;&nbsp; <span class='com'># pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># for Windows</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_args</span> <span class='op'>=</span> <span class='str'>&#39;attrib -R %s&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_asterisk</span> <span class='op'>=</span> <span class='str'>&#39;attrib -R *&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'># pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># for unix-like</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_args</span> <span class='op'>=</span> <span class='str'>&#39;chmod +w %s&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_asterisk</span> <span class='op'>=</span> <span class='str'>&#39;chmod +w *&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='str'>&#39;test.cog&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>stat</span><span class='op'>.</span><span class='nam'>S_IREAD</span><span class='op'>)</span>&nbsp;&nbsp; <span class='com'># Make the file readonly.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>stat</span><span class='op'>.</span><span class='nam'>S_IWRITE</span><span class='op'>)</span>&nbsp;&nbsp; <span class='com'># Make the file writable again.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyNoCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>&quot;Can&#39;t overwrite test.cog&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyWithCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-w&#39;</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cmd_w_args</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyWithCommandWithNoSlot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-w&#39;</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cmd_w_asterisk</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyWithIneffectualCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>&quot;Couldn&#39;t make test.cog writable&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-w&#39;</span><span class='op'>,</span> <span class='str'>&#39;echo %s&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>ChecksumTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCreateChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCheckChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testRemoveChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] fooey</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTamperedChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Xhis line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog2.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah!</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog3.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog4.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah..</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog5.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; extra</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog6.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog1.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog1.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog2.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog2.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog3.txt(10): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog3.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog4.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog4.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog5.txt(10): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog5.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog6.txt(6): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog6.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>BlakeTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Blake Winton&#39;s contributions.&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDeleteCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># -o sets the output file.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some Sample Code Here</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]Data Data</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Some More</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Some More</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-d&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDeleteCodeWithDashRFails</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-d&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSettingGlobals</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Blake Winton contributed a way to set the globals that will be used in</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># processFile().</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some Sample Code Here</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]&quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoBlake();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoWinton();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoContribution();</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span><span class='op'>[</span><span class='str'>&#39;fnames&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;DoBlake&#39;</span><span class='op'>,</span> <span class='str'>&#39;DoWinton&#39;</span><span class='op'>,</span> <span class='str'>&#39;DoContribution&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>class</span> <span class='nam'>ErrorCallTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorCallHasNoTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that cog.error() doesn&#39;t show a traceback.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;error.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.error(&quot;Something Bad!&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;error.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>&quot;Cogging error.cog\nError: Something Bad!\n&quot;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testRealErrorHasTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that a genuine error does show a traceback.</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;error.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise RuntimeError(&quot;Hey!&quot;)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;error.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>msg</span> <span class='op'>=</span> <span class='str'>&#39;Actual output:\n&#39;</span> <span class='op'>+</span> <span class='nam'>output</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assert_</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>&quot;Cogging error.cog\nTraceback (most recent&quot;</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assert_</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;RuntimeError: Hey!&quot;</span><span class='op'>)</span> <span class='op'>&gt;</span> <span class='num'>0</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='exc'><span class='key'>if</span> <span class='nam'>__name__</span> <span class='op'>==</span> <span class='str'>&#39;__main__&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class="strut">&nbsp;</span></p>
-<p class='exc'>&nbsp; &nbsp; <span class='nam'>unittest</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># Things not yet tested:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='com'># - A bad -w command (currently fails silently).</span><span class="strut">&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='pln'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='pln'>5</p>
+<p id='n6' class='pln'>6</p>
+<p id='n7' class='stm run hide_run'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+<p id='n11' class='stm run hide_run'>11</p>
+<p id='n12' class='stm run hide_run'>12</p>
+<p id='n13' class='stm run hide_run'>13</p>
+<p id='n14' class='stm run hide_run'>14</p>
+<p id='n15' class='pln'>15</p>
+<p id='n16' class='stm run hide_run'>16</p>
+<p id='n17' class='pln'>17</p>
+<p id='n18' class='pln'>18</p>
+<p id='n19' class='stm run hide_run'>19</p>
+<p id='n20' class='pln'>20</p>
+<p id='n21' class='pln'>21</p>
+<p id='n22' class='pln'>22</p>
+<p id='n23' class='stm run hide_run'>23</p>
+<p id='n24' class='stm run hide_run'>24</p>
+<p id='n25' class='stm run hide_run'>25</p>
+<p id='n26' class='stm run hide_run'>26</p>
+<p id='n27' class='stm run hide_run'>27</p>
+<p id='n28' class='pln'>28</p>
+<p id='n29' class='exc'>29</p>
+<p id='n30' class='stm run hide_run'>30</p>
+<p id='n31' class='pln'>31</p>
+<p id='n32' class='stm run hide_run'>32</p>
+<p id='n33' class='exc'>33</p>
+<p id='n34' class='pln'>34</p>
+<p id='n35' class='exc'>35</p>
+<p id='n36' class='exc'>36</p>
+<p id='n37' class='exc'>37</p>
+<p id='n38' class='exc'>38</p>
+<p id='n39' class='exc'>39</p>
+<p id='n40' class='exc'>40</p>
+<p id='n41' class='exc'>41</p>
+<p id='n42' class='pln'>42</p>
+<p id='n43' class='stm run hide_run'>43</p>
+<p id='n44' class='pln'>44</p>
+<p id='n45' class='pln'>45</p>
+<p id='n46' class='pln'>46</p>
+<p id='n47' class='stm run hide_run'>47</p>
+<p id='n48' class='stm run hide_run'>48</p>
+<p id='n49' class='pln'>49</p>
+<p id='n50' class='pln'>50</p>
+<p id='n51' class='pln'>51</p>
+<p id='n52' class='pln'>52</p>
+<p id='n53' class='pln'>53</p>
+<p id='n54' class='pln'>54</p>
+<p id='n55' class='pln'>55</p>
+<p id='n56' class='stm run hide_run'>56</p>
+<p id='n57' class='stm run hide_run'>57</p>
+<p id='n58' class='pln'>58</p>
+<p id='n59' class='stm run hide_run'>59</p>
+<p id='n60' class='stm run hide_run'>60</p>
+<p id='n61' class='pln'>61</p>
+<p id='n62' class='pln'>62</p>
+<p id='n63' class='pln'>63</p>
+<p id='n64' class='pln'>64</p>
+<p id='n65' class='pln'>65</p>
+<p id='n66' class='pln'>66</p>
+<p id='n67' class='pln'>67</p>
+<p id='n68' class='pln'>68</p>
+<p id='n69' class='pln'>69</p>
+<p id='n70' class='pln'>70</p>
+<p id='n71' class='pln'>71</p>
+<p id='n72' class='stm run hide_run'>72</p>
+<p id='n73' class='pln'>73</p>
+<p id='n74' class='pln'>74</p>
+<p id='n75' class='pln'>75</p>
+<p id='n76' class='pln'>76</p>
+<p id='n77' class='pln'>77</p>
+<p id='n78' class='pln'>78</p>
+<p id='n79' class='pln'>79</p>
+<p id='n80' class='pln'>80</p>
+<p id='n81' class='pln'>81</p>
+<p id='n82' class='pln'>82</p>
+<p id='n83' class='pln'>83</p>
+<p id='n84' class='pln'>84</p>
+<p id='n85' class='pln'>85</p>
+<p id='n86' class='stm run hide_run'>86</p>
+<p id='n87' class='pln'>87</p>
+<p id='n88' class='stm run hide_run'>88</p>
+<p id='n89' class='pln'>89</p>
+<p id='n90' class='pln'>90</p>
+<p id='n91' class='stm run hide_run'>91</p>
+<p id='n92' class='pln'>92</p>
+<p id='n93' class='pln'>93</p>
+<p id='n94' class='pln'>94</p>
+<p id='n95' class='pln'>95</p>
+<p id='n96' class='pln'>96</p>
+<p id='n97' class='pln'>97</p>
+<p id='n98' class='pln'>98</p>
+<p id='n99' class='stm run hide_run'>99</p>
+<p id='n100' class='stm run hide_run'>100</p>
+<p id='n101' class='pln'>101</p>
+<p id='n102' class='stm run hide_run'>102</p>
+<p id='n103' class='pln'>103</p>
+<p id='n104' class='stm run hide_run'>104</p>
+<p id='n105' class='pln'>105</p>
+<p id='n106' class='pln'>106</p>
+<p id='n107' class='pln'>107</p>
+<p id='n108' class='pln'>108</p>
+<p id='n109' class='pln'>109</p>
+<p id='n110' class='pln'>110</p>
+<p id='n111' class='pln'>111</p>
+<p id='n112' class='pln'>112</p>
+<p id='n113' class='pln'>113</p>
+<p id='n114' class='pln'>114</p>
+<p id='n115' class='pln'>115</p>
+<p id='n116' class='pln'>116</p>
+<p id='n117' class='pln'>117</p>
+<p id='n118' class='pln'>118</p>
+<p id='n119' class='pln'>119</p>
+<p id='n120' class='pln'>120</p>
+<p id='n121' class='pln'>121</p>
+<p id='n122' class='pln'>122</p>
+<p id='n123' class='stm run hide_run'>123</p>
+<p id='n124' class='stm run hide_run'>124</p>
+<p id='n125' class='pln'>125</p>
+<p id='n126' class='stm run hide_run'>126</p>
+<p id='n127' class='stm run hide_run'>127</p>
+<p id='n128' class='pln'>128</p>
+<p id='n129' class='pln'>129</p>
+<p id='n130' class='pln'>130</p>
+<p id='n131' class='pln'>131</p>
+<p id='n132' class='pln'>132</p>
+<p id='n133' class='pln'>133</p>
+<p id='n134' class='pln'>134</p>
+<p id='n135' class='pln'>135</p>
+<p id='n136' class='pln'>136</p>
+<p id='n137' class='pln'>137</p>
+<p id='n138' class='pln'>138</p>
+<p id='n139' class='pln'>139</p>
+<p id='n140' class='pln'>140</p>
+<p id='n141' class='stm run hide_run'>141</p>
+<p id='n142' class='stm run hide_run'>142</p>
+<p id='n143' class='pln'>143</p>
+<p id='n144' class='stm run hide_run'>144</p>
+<p id='n145' class='stm run hide_run'>145</p>
+<p id='n146' class='pln'>146</p>
+<p id='n147' class='pln'>147</p>
+<p id='n148' class='pln'>148</p>
+<p id='n149' class='pln'>149</p>
+<p id='n150' class='pln'>150</p>
+<p id='n151' class='pln'>151</p>
+<p id='n152' class='pln'>152</p>
+<p id='n153' class='pln'>153</p>
+<p id='n154' class='pln'>154</p>
+<p id='n155' class='pln'>155</p>
+<p id='n156' class='pln'>156</p>
+<p id='n157' class='pln'>157</p>
+<p id='n158' class='pln'>158</p>
+<p id='n159' class='pln'>159</p>
+<p id='n160' class='stm run hide_run'>160</p>
+<p id='n161' class='stm run hide_run'>161</p>
+<p id='n162' class='pln'>162</p>
+<p id='n163' class='stm run hide_run'>163</p>
+<p id='n164' class='pln'>164</p>
+<p id='n165' class='pln'>165</p>
+<p id='n166' class='stm run hide_run'>166</p>
+<p id='n167' class='pln'>167</p>
+<p id='n168' class='pln'>168</p>
+<p id='n169' class='pln'>169</p>
+<p id='n170' class='pln'>170</p>
+<p id='n171' class='pln'>171</p>
+<p id='n172' class='pln'>172</p>
+<p id='n173' class='pln'>173</p>
+<p id='n174' class='pln'>174</p>
+<p id='n175' class='pln'>175</p>
+<p id='n176' class='pln'>176</p>
+<p id='n177' class='pln'>177</p>
+<p id='n178' class='stm run hide_run'>178</p>
+<p id='n179' class='stm run hide_run'>179</p>
+<p id='n180' class='pln'>180</p>
+<p id='n181' class='stm run hide_run'>181</p>
+<p id='n182' class='stm run hide_run'>182</p>
+<p id='n183' class='pln'>183</p>
+<p id='n184' class='pln'>184</p>
+<p id='n185' class='pln'>185</p>
+<p id='n186' class='pln'>186</p>
+<p id='n187' class='pln'>187</p>
+<p id='n188' class='pln'>188</p>
+<p id='n189' class='pln'>189</p>
+<p id='n190' class='pln'>190</p>
+<p id='n191' class='pln'>191</p>
+<p id='n192' class='pln'>192</p>
+<p id='n193' class='pln'>193</p>
+<p id='n194' class='pln'>194</p>
+<p id='n195' class='pln'>195</p>
+<p id='n196' class='stm run hide_run'>196</p>
+<p id='n197' class='stm run hide_run'>197</p>
+<p id='n198' class='pln'>198</p>
+<p id='n199' class='stm run hide_run'>199</p>
+<p id='n200' class='stm run hide_run'>200</p>
+<p id='n201' class='pln'>201</p>
+<p id='n202' class='pln'>202</p>
+<p id='n203' class='pln'>203</p>
+<p id='n204' class='pln'>204</p>
+<p id='n205' class='pln'>205</p>
+<p id='n206' class='pln'>206</p>
+<p id='n207' class='pln'>207</p>
+<p id='n208' class='pln'>208</p>
+<p id='n209' class='pln'>209</p>
+<p id='n210' class='pln'>210</p>
+<p id='n211' class='pln'>211</p>
+<p id='n212' class='stm run hide_run'>212</p>
+<p id='n213' class='stm run hide_run'>213</p>
+<p id='n214' class='pln'>214</p>
+<p id='n215' class='stm run hide_run'>215</p>
+<p id='n216' class='stm run hide_run'>216</p>
+<p id='n217' class='pln'>217</p>
+<p id='n218' class='pln'>218</p>
+<p id='n219' class='pln'>219</p>
+<p id='n220' class='pln'>220</p>
+<p id='n221' class='pln'>221</p>
+<p id='n222' class='pln'>222</p>
+<p id='n223' class='pln'>223</p>
+<p id='n224' class='pln'>224</p>
+<p id='n225' class='pln'>225</p>
+<p id='n226' class='pln'>226</p>
+<p id='n227' class='pln'>227</p>
+<p id='n228' class='pln'>228</p>
+<p id='n229' class='stm run hide_run'>229</p>
+<p id='n230' class='stm run hide_run'>230</p>
+<p id='n231' class='pln'>231</p>
+<p id='n232' class='stm run hide_run'>232</p>
+<p id='n233' class='stm run hide_run'>233</p>
+<p id='n234' class='pln'>234</p>
+<p id='n235' class='pln'>235</p>
+<p id='n236' class='pln'>236</p>
+<p id='n237' class='pln'>237</p>
+<p id='n238' class='pln'>238</p>
+<p id='n239' class='pln'>239</p>
+<p id='n240' class='pln'>240</p>
+<p id='n241' class='pln'>241</p>
+<p id='n242' class='pln'>242</p>
+<p id='n243' class='pln'>243</p>
+<p id='n244' class='pln'>244</p>
+<p id='n245' class='pln'>245</p>
+<p id='n246' class='pln'>246</p>
+<p id='n247' class='stm run hide_run'>247</p>
+<p id='n248' class='stm run hide_run'>248</p>
+<p id='n249' class='pln'>249</p>
+<p id='n250' class='stm run hide_run'>250</p>
+<p id='n251' class='pln'>251</p>
+<p id='n252' class='pln'>252</p>
+<p id='n253' class='stm run hide_run'>253</p>
+<p id='n254' class='pln'>254</p>
+<p id='n255' class='pln'>255</p>
+<p id='n256' class='pln'>256</p>
+<p id='n257' class='pln'>257</p>
+<p id='n258' class='pln'>258</p>
+<p id='n259' class='pln'>259</p>
+<p id='n260' class='pln'>260</p>
+<p id='n261' class='pln'>261</p>
+<p id='n262' class='pln'>262</p>
+<p id='n263' class='pln'>263</p>
+<p id='n264' class='pln'>264</p>
+<p id='n265' class='stm run hide_run'>265</p>
+<p id='n266' class='stm run hide_run'>266</p>
+<p id='n267' class='pln'>267</p>
+<p id='n268' class='stm run hide_run'>268</p>
+<p id='n269' class='pln'>269</p>
+<p id='n270' class='stm run hide_run'>270</p>
+<p id='n271' class='pln'>271</p>
+<p id='n272' class='pln'>272</p>
+<p id='n273' class='pln'>273</p>
+<p id='n274' class='pln'>274</p>
+<p id='n275' class='pln'>275</p>
+<p id='n276' class='pln'>276</p>
+<p id='n277' class='pln'>277</p>
+<p id='n278' class='pln'>278</p>
+<p id='n279' class='stm run hide_run'>279</p>
+<p id='n280' class='stm run hide_run'>280</p>
+<p id='n281' class='pln'>281</p>
+<p id='n282' class='stm run hide_run'>282</p>
+<p id='n283' class='pln'>283</p>
+<p id='n284' class='pln'>284</p>
+<p id='n285' class='pln'>285</p>
+<p id='n286' class='stm run hide_run'>286</p>
+<p id='n287' class='pln'>287</p>
+<p id='n288' class='pln'>288</p>
+<p id='n289' class='pln'>289</p>
+<p id='n290' class='pln'>290</p>
+<p id='n291' class='pln'>291</p>
+<p id='n292' class='pln'>292</p>
+<p id='n293' class='pln'>293</p>
+<p id='n294' class='pln'>294</p>
+<p id='n295' class='pln'>295</p>
+<p id='n296' class='pln'>296</p>
+<p id='n297' class='pln'>297</p>
+<p id='n298' class='pln'>298</p>
+<p id='n299' class='stm run hide_run'>299</p>
+<p id='n300' class='stm run hide_run'>300</p>
+<p id='n301' class='pln'>301</p>
+<p id='n302' class='stm run hide_run'>302</p>
+<p id='n303' class='pln'>303</p>
+<p id='n304' class='pln'>304</p>
+<p id='n305' class='pln'>305</p>
+<p id='n306' class='stm run hide_run'>306</p>
+<p id='n307' class='pln'>307</p>
+<p id='n308' class='pln'>308</p>
+<p id='n309' class='pln'>309</p>
+<p id='n310' class='pln'>310</p>
+<p id='n311' class='pln'>311</p>
+<p id='n312' class='pln'>312</p>
+<p id='n313' class='pln'>313</p>
+<p id='n314' class='pln'>314</p>
+<p id='n315' class='pln'>315</p>
+<p id='n316' class='pln'>316</p>
+<p id='n317' class='pln'>317</p>
+<p id='n318' class='pln'>318</p>
+<p id='n319' class='pln'>319</p>
+<p id='n320' class='pln'>320</p>
+<p id='n321' class='pln'>321</p>
+<p id='n322' class='pln'>322</p>
+<p id='n323' class='pln'>323</p>
+<p id='n324' class='stm run hide_run'>324</p>
+<p id='n325' class='stm run hide_run'>325</p>
+<p id='n326' class='pln'>326</p>
+<p id='n327' class='stm run hide_run'>327</p>
+<p id='n328' class='stm run hide_run'>328</p>
+<p id='n329' class='pln'>329</p>
+<p id='n330' class='pln'>330</p>
+<p id='n331' class='pln'>331</p>
+<p id='n332' class='pln'>332</p>
+<p id='n333' class='pln'>333</p>
+<p id='n334' class='pln'>334</p>
+<p id='n335' class='pln'>335</p>
+<p id='n336' class='pln'>336</p>
+<p id='n337' class='pln'>337</p>
+<p id='n338' class='pln'>338</p>
+<p id='n339' class='pln'>339</p>
+<p id='n340' class='pln'>340</p>
+<p id='n341' class='pln'>341</p>
+<p id='n342' class='pln'>342</p>
+<p id='n343' class='stm run hide_run'>343</p>
+<p id='n344' class='stm run hide_run'>344</p>
+<p id='n345' class='pln'>345</p>
+<p id='n346' class='stm run hide_run'>346</p>
+<p id='n347' class='stm run hide_run'>347</p>
+<p id='n348' class='pln'>348</p>
+<p id='n349' class='pln'>349</p>
+<p id='n350' class='pln'>350</p>
+<p id='n351' class='pln'>351</p>
+<p id='n352' class='pln'>352</p>
+<p id='n353' class='pln'>353</p>
+<p id='n354' class='pln'>354</p>
+<p id='n355' class='stm run hide_run'>355</p>
+<p id='n356' class='pln'>356</p>
+<p id='n357' class='pln'>357</p>
+<p id='n358' class='pln'>358</p>
+<p id='n359' class='pln'>359</p>
+<p id='n360' class='pln'>360</p>
+<p id='n361' class='pln'>361</p>
+<p id='n362' class='pln'>362</p>
+<p id='n363' class='stm run hide_run'>363</p>
+<p id='n364' class='stm run hide_run'>364</p>
+<p id='n365' class='pln'>365</p>
+<p id='n366' class='stm run hide_run'>366</p>
+<p id='n367' class='stm run hide_run'>367</p>
+<p id='n368' class='pln'>368</p>
+<p id='n369' class='pln'>369</p>
+<p id='n370' class='pln'>370</p>
+<p id='n371' class='pln'>371</p>
+<p id='n372' class='pln'>372</p>
+<p id='n373' class='pln'>373</p>
+<p id='n374' class='stm run hide_run'>374</p>
+<p id='n375' class='pln'>375</p>
+<p id='n376' class='pln'>376</p>
+<p id='n377' class='pln'>377</p>
+<p id='n378' class='pln'>378</p>
+<p id='n379' class='stm run hide_run'>379</p>
+<p id='n380' class='stm run hide_run'>380</p>
+<p id='n381' class='pln'>381</p>
+<p id='n382' class='pln'>382</p>
+<p id='n383' class='pln'>383</p>
+<p id='n384' class='pln'>384</p>
+<p id='n385' class='pln'>385</p>
+<p id='n386' class='pln'>386</p>
+<p id='n387' class='pln'>387</p>
+<p id='n388' class='pln'>388</p>
+<p id='n389' class='pln'>389</p>
+<p id='n390' class='stm run hide_run'>390</p>
+<p id='n391' class='pln'>391</p>
+<p id='n392' class='pln'>392</p>
+<p id='n393' class='pln'>393</p>
+<p id='n394' class='pln'>394</p>
+<p id='n395' class='pln'>395</p>
+<p id='n396' class='pln'>396</p>
+<p id='n397' class='pln'>397</p>
+<p id='n398' class='pln'>398</p>
+<p id='n399' class='pln'>399</p>
+<p id='n400' class='pln'>400</p>
+<p id='n401' class='stm run hide_run'>401</p>
+<p id='n402' class='stm run hide_run'>402</p>
+<p id='n403' class='pln'>403</p>
+<p id='n404' class='stm run hide_run'>404</p>
+<p id='n405' class='pln'>405</p>
+<p id='n406' class='pln'>406</p>
+<p id='n407' class='pln'>407</p>
+<p id='n408' class='stm run hide_run'>408</p>
+<p id='n409' class='stm mis'>409</p>
+<p id='n410' class='stm mis'>410</p>
+<p id='n411' class='stm mis'>411</p>
+<p id='n412' class='stm mis'>412</p>
+<p id='n413' class='stm mis'>413</p>
+<p id='n414' class='stm mis'>414</p>
+<p id='n415' class='stm mis'>415</p>
+<p id='n416' class='pln'>416</p>
+<p id='n417' class='stm run hide_run'>417</p>
+<p id='n418' class='stm mis'>418</p>
+<p id='n419' class='stm mis'>419</p>
+<p id='n420' class='stm mis'>420</p>
+<p id='n421' class='stm mis'>421</p>
+<p id='n422' class='stm mis'>422</p>
+<p id='n423' class='stm mis'>423</p>
+<p id='n424' class='stm mis'>424</p>
+<p id='n425' class='stm mis'>425</p>
+<p id='n426' class='stm mis'>426</p>
+<p id='n427' class='pln'>427</p>
+<p id='n428' class='stm run hide_run'>428</p>
+<p id='n429' class='pln'>429</p>
+<p id='n430' class='stm mis'>430</p>
+<p id='n431' class='stm mis'>431</p>
+<p id='n432' class='stm mis'>432</p>
+<p id='n433' class='stm mis'>433</p>
+<p id='n434' class='stm mis'>434</p>
+<p id='n435' class='pln'>435</p>
+<p id='n436' class='stm run hide_run'>436</p>
+<p id='n437' class='pln'>437</p>
+<p id='n438' class='pln'>438</p>
+<p id='n439' class='pln'>439</p>
+<p id='n440' class='pln'>440</p>
+<p id='n441' class='stm run hide_run'>441</p>
+<p id='n442' class='stm mis'>442</p>
+<p id='n443' class='stm mis'>443</p>
+<p id='n444' class='pln'>444</p>
+<p id='n445' class='pln'>445</p>
+<p id='n446' class='pln'>446</p>
+<p id='n447' class='stm run hide_run'>447</p>
+<p id='n448' class='stm mis'>448</p>
+<p id='n449' class='pln'>449</p>
+<p id='n450' class='pln'>450</p>
+<p id='n451' class='pln'>451</p>
+<p id='n452' class='pln'>452</p>
+<p id='n453' class='stm mis'>453</p>
+<p id='n454' class='pln'>454</p>
+<p id='n455' class='stm run hide_run'>455</p>
+<p id='n456' class='stm mis'>456</p>
+<p id='n457' class='pln'>457</p>
+<p id='n458' class='pln'>458</p>
+<p id='n459' class='pln'>459</p>
+<p id='n460' class='pln'>460</p>
+<p id='n461' class='pln'>461</p>
+<p id='n462' class='stm mis'>462</p>
+<p id='n463' class='pln'>463</p>
+<p id='n464' class='stm mis'>464</p>
+<p id='n465' class='pln'>465</p>
+<p id='n466' class='pln'>466</p>
+<p id='n467' class='pln'>467</p>
+<p id='n468' class='pln'>468</p>
+<p id='n469' class='pln'>469</p>
+<p id='n470' class='pln'>470</p>
+<p id='n471' class='pln'>471</p>
+<p id='n472' class='pln'>472</p>
+<p id='n473' class='stm mis'>473</p>
+<p id='n474' class='pln'>474</p>
+<p id='n475' class='stm run hide_run'>475</p>
+<p id='n476' class='stm mis'>476</p>
+<p id='n477' class='pln'>477</p>
+<p id='n478' class='pln'>478</p>
+<p id='n479' class='stm mis'>479</p>
+<p id='n480' class='pln'>480</p>
+<p id='n481' class='stm mis'>481</p>
+<p id='n482' class='pln'>482</p>
+<p id='n483' class='pln'>483</p>
+<p id='n484' class='pln'>484</p>
+<p id='n485' class='pln'>485</p>
+<p id='n486' class='pln'>486</p>
+<p id='n487' class='pln'>487</p>
+<p id='n488' class='stm mis'>488</p>
+<p id='n489' class='pln'>489</p>
+<p id='n490' class='stm run hide_run'>490</p>
+<p id='n491' class='stm mis'>491</p>
+<p id='n492' class='pln'>492</p>
+<p id='n493' class='pln'>493</p>
+<p id='n494' class='stm mis'>494</p>
+<p id='n495' class='pln'>495</p>
+<p id='n496' class='stm mis'>496</p>
+<p id='n497' class='pln'>497</p>
+<p id='n498' class='pln'>498</p>
+<p id='n499' class='pln'>499</p>
+<p id='n500' class='pln'>500</p>
+<p id='n501' class='pln'>501</p>
+<p id='n502' class='pln'>502</p>
+<p id='n503' class='stm mis'>503</p>
+<p id='n504' class='pln'>504</p>
+<p id='n505' class='stm run hide_run'>505</p>
+<p id='n506' class='stm mis'>506</p>
+<p id='n507' class='pln'>507</p>
+<p id='n508' class='pln'>508</p>
+<p id='n509' class='pln'>509</p>
+<p id='n510' class='pln'>510</p>
+<p id='n511' class='stm mis'>511</p>
+<p id='n512' class='pln'>512</p>
+<p id='n513' class='stm mis'>513</p>
+<p id='n514' class='pln'>514</p>
+<p id='n515' class='pln'>515</p>
+<p id='n516' class='pln'>516</p>
+<p id='n517' class='pln'>517</p>
+<p id='n518' class='pln'>518</p>
+<p id='n519' class='pln'>519</p>
+<p id='n520' class='pln'>520</p>
+<p id='n521' class='pln'>521</p>
+<p id='n522' class='stm mis'>522</p>
+<p id='n523' class='pln'>523</p>
+<p id='n524' class='stm run hide_run'>524</p>
+<p id='n525' class='stm mis'>525</p>
+<p id='n526' class='pln'>526</p>
+<p id='n527' class='pln'>527</p>
+<p id='n528' class='pln'>528</p>
+<p id='n529' class='pln'>529</p>
+<p id='n530' class='pln'>530</p>
+<p id='n531' class='pln'>531</p>
+<p id='n532' class='stm mis'>532</p>
+<p id='n533' class='pln'>533</p>
+<p id='n534' class='stm mis'>534</p>
+<p id='n535' class='pln'>535</p>
+<p id='n536' class='pln'>536</p>
+<p id='n537' class='pln'>537</p>
+<p id='n538' class='pln'>538</p>
+<p id='n539' class='pln'>539</p>
+<p id='n540' class='pln'>540</p>
+<p id='n541' class='pln'>541</p>
+<p id='n542' class='pln'>542</p>
+<p id='n543' class='pln'>543</p>
+<p id='n544' class='pln'>544</p>
+<p id='n545' class='stm mis'>545</p>
+<p id='n546' class='pln'>546</p>
+<p id='n547' class='stm run hide_run'>547</p>
+<p id='n548' class='stm mis'>548</p>
+<p id='n549' class='pln'>549</p>
+<p id='n550' class='pln'>550</p>
+<p id='n551' class='pln'>551</p>
+<p id='n552' class='pln'>552</p>
+<p id='n553' class='pln'>553</p>
+<p id='n554' class='pln'>554</p>
+<p id='n555' class='stm mis'>555</p>
+<p id='n556' class='pln'>556</p>
+<p id='n557' class='stm mis'>557</p>
+<p id='n558' class='pln'>558</p>
+<p id='n559' class='pln'>559</p>
+<p id='n560' class='pln'>560</p>
+<p id='n561' class='pln'>561</p>
+<p id='n562' class='pln'>562</p>
+<p id='n563' class='pln'>563</p>
+<p id='n564' class='pln'>564</p>
+<p id='n565' class='pln'>565</p>
+<p id='n566' class='pln'>566</p>
+<p id='n567' class='pln'>567</p>
+<p id='n568' class='stm mis'>568</p>
+<p id='n569' class='pln'>569</p>
+<p id='n570' class='stm run hide_run'>570</p>
+<p id='n571' class='pln'>571</p>
+<p id='n572' class='pln'>572</p>
+<p id='n573' class='pln'>573</p>
+<p id='n574' class='stm run hide_run'>574</p>
+<p id='n575' class='stm mis'>575</p>
+<p id='n576' class='pln'>576</p>
+<p id='n577' class='pln'>577</p>
+<p id='n578' class='pln'>578</p>
+<p id='n579' class='pln'>579</p>
+<p id='n580' class='stm mis'>580</p>
+<p id='n581' class='stm mis'>581</p>
+<p id='n582' class='pln'>582</p>
+<p id='n583' class='pln'>583</p>
+<p id='n584' class='pln'>584</p>
+<p id='n585' class='stm run hide_run'>585</p>
+<p id='n586' class='stm mis'>586</p>
+<p id='n587' class='pln'>587</p>
+<p id='n588' class='pln'>588</p>
+<p id='n589' class='pln'>589</p>
+<p id='n590' class='pln'>590</p>
+<p id='n591' class='stm mis'>591</p>
+<p id='n592' class='stm mis'>592</p>
+<p id='n593' class='pln'>593</p>
+<p id='n594' class='pln'>594</p>
+<p id='n595' class='pln'>595</p>
+<p id='n596' class='stm run hide_run'>596</p>
+<p id='n597' class='stm mis'>597</p>
+<p id='n598' class='pln'>598</p>
+<p id='n599' class='pln'>599</p>
+<p id='n600' class='pln'>600</p>
+<p id='n601' class='pln'>601</p>
+<p id='n602' class='pln'>602</p>
+<p id='n603' class='pln'>603</p>
+<p id='n604' class='pln'>604</p>
+<p id='n605' class='pln'>605</p>
+<p id='n606' class='pln'>606</p>
+<p id='n607' class='pln'>607</p>
+<p id='n608' class='pln'>608</p>
+<p id='n609' class='pln'>609</p>
+<p id='n610' class='pln'>610</p>
+<p id='n611' class='stm mis'>611</p>
+<p id='n612' class='stm mis'>612</p>
+<p id='n613' class='pln'>613</p>
+<p id='n614' class='stm run hide_run'>614</p>
+<p id='n615' class='pln'>615</p>
+<p id='n616' class='pln'>616</p>
+<p id='n617' class='pln'>617</p>
+<p id='n618' class='pln'>618</p>
+<p id='n619' class='stm run hide_run'>619</p>
+<p id='n620' class='pln'>620</p>
+<p id='n621' class='pln'>621</p>
+<p id='n622' class='pln'>622</p>
+<p id='n623' class='stm mis'>623</p>
+<p id='n624' class='stm mis'>624</p>
+<p id='n625' class='stm mis'>625</p>
+<p id='n626' class='pln'>626</p>
+<p id='n627' class='stm run hide_run'>627</p>
+<p id='n628' class='stm mis'>628</p>
+<p id='n629' class='stm mis'>629</p>
+<p id='n630' class='stm mis'>630</p>
+<p id='n631' class='pln'>631</p>
+<p id='n632' class='stm run hide_run'>632</p>
+<p id='n633' class='stm mis'>633</p>
+<p id='n634' class='stm mis'>634</p>
+<p id='n635' class='stm mis'>635</p>
+<p id='n636' class='stm mis'>636</p>
+<p id='n637' class='stm mis'>637</p>
+<p id='n638' class='pln'>638</p>
+<p id='n639' class='stm run hide_run'>639</p>
+<p id='n640' class='pln'>640</p>
+<p id='n641' class='stm mis'>641</p>
+<p id='n642' class='stm mis'>642</p>
+<p id='n643' class='stm mis'>643</p>
+<p id='n644' class='stm mis'>644</p>
+<p id='n645' class='stm mis'>645</p>
+<p id='n646' class='pln'>646</p>
+<p id='n647' class='stm run hide_run'>647</p>
+<p id='n648' class='pln'>648</p>
+<p id='n649' class='stm mis'>649</p>
+<p id='n650' class='stm mis'>650</p>
+<p id='n651' class='stm mis'>651</p>
+<p id='n652' class='stm mis'>652</p>
+<p id='n653' class='stm mis'>653</p>
+<p id='n654' class='pln'>654</p>
+<p id='n655' class='stm run hide_run'>655</p>
+<p id='n656' class='pln'>656</p>
+<p id='n657' class='stm mis'>657</p>
+<p id='n658' class='stm mis'>658</p>
+<p id='n659' class='stm mis'>659</p>
+<p id='n660' class='stm mis'>660</p>
+<p id='n661' class='stm mis'>661</p>
+<p id='n662' class='pln'>662</p>
+<p id='n663' class='stm run hide_run'>663</p>
+<p id='n664' class='pln'>664</p>
+<p id='n665' class='stm mis'>665</p>
+<p id='n666' class='stm mis'>666</p>
+<p id='n667' class='stm mis'>667</p>
+<p id='n668' class='stm mis'>668</p>
+<p id='n669' class='stm mis'>669</p>
+<p id='n670' class='pln'>670</p>
+<p id='n671' class='stm run hide_run'>671</p>
+<p id='n672' class='pln'>672</p>
+<p id='n673' class='pln'>673</p>
+<p id='n674' class='stm mis'>674</p>
+<p id='n675' class='stm mis'>675</p>
+<p id='n676' class='stm mis'>676</p>
+<p id='n677' class='stm mis'>677</p>
+<p id='n678' class='stm mis'>678</p>
+<p id='n679' class='stm mis'>679</p>
+<p id='n680' class='pln'>680</p>
+<p id='n681' class='stm run hide_run'>681</p>
+<p id='n682' class='pln'>682</p>
+<p id='n683' class='stm run hide_run'>683</p>
+<p id='n684' class='pln'>684</p>
+<p id='n685' class='pln'>685</p>
+<p id='n686' class='pln'>686</p>
+<p id='n687' class='stm mis'>687</p>
+<p id='n688' class='stm mis'>688</p>
+<p id='n689' class='stm mis'>689</p>
+<p id='n690' class='pln'>690</p>
+<p id='n691' class='stm run hide_run'>691</p>
+<p id='n692' class='pln'>692</p>
+<p id='n693' class='stm mis'>693</p>
+<p id='n694' class='stm mis'>694</p>
+<p id='n695' class='stm mis'>695</p>
+<p id='n696' class='stm mis'>696</p>
+<p id='n697' class='stm mis'>697</p>
+<p id='n698' class='pln'>698</p>
+<p id='n699' class='stm run hide_run'>699</p>
+<p id='n700' class='stm mis'>700</p>
+<p id='n701' class='pln'>701</p>
+<p id='n702' class='stm mis'>702</p>
+<p id='n703' class='pln'>703</p>
+<p id='n704' class='stm run hide_run'>704</p>
+<p id='n705' class='stm mis'>705</p>
+<p id='n706' class='pln'>706</p>
+<p id='n707' class='stm run hide_run'>707</p>
+<p id='n708' class='stm mis'>708</p>
+<p id='n709' class='stm mis'>709</p>
+<p id='n710' class='stm mis'>710</p>
+<p id='n711' class='stm mis'>711</p>
+<p id='n712' class='pln'>712</p>
+<p id='n713' class='stm mis'>713</p>
+<p id='n714' class='stm mis'>714</p>
+<p id='n715' class='pln'>715</p>
+<p id='n716' class='pln'>716</p>
+<p id='n717' class='stm run hide_run'>717</p>
+<p id='n718' class='pln'>718</p>
+<p id='n719' class='stm run hide_run'>719</p>
+<p id='n720' class='pln'>720</p>
+<p id='n721' class='stm mis'>721</p>
+<p id='n722' class='stm mis'>722</p>
+<p id='n723' class='stm mis'>723</p>
+<p id='n724' class='stm mis'>724</p>
+<p id='n725' class='stm mis'>725</p>
+<p id='n726' class='pln'>726</p>
+<p id='n727' class='stm run hide_run'>727</p>
+<p id='n728' class='stm mis'>728</p>
+<p id='n729' class='pln'>729</p>
+<p id='n730' class='pln'>730</p>
+<p id='n731' class='pln'>731</p>
+<p id='n732' class='pln'>732</p>
+<p id='n733' class='pln'>733</p>
+<p id='n734' class='stm mis'>734</p>
+<p id='n735' class='stm mis'>735</p>
+<p id='n736' class='pln'>736</p>
+<p id='n737' class='stm run hide_run'>737</p>
+<p id='n738' class='stm mis'>738</p>
+<p id='n739' class='stm mis'>739</p>
+<p id='n740' class='stm mis'>740</p>
+<p id='n741' class='pln'>741</p>
+<p id='n742' class='stm run hide_run'>742</p>
+<p id='n743' class='stm mis'>743</p>
+<p id='n744' class='stm mis'>744</p>
+<p id='n745' class='stm mis'>745</p>
+<p id='n746' class='stm mis'>746</p>
+<p id='n747' class='pln'>747</p>
+<p id='n748' class='stm run hide_run'>748</p>
+<p id='n749' class='pln'>749</p>
+<p id='n750' class='stm mis'>750</p>
+<p id='n751' class='stm mis'>751</p>
+<p id='n752' class='stm mis'>752</p>
+<p id='n753' class='stm mis'>753</p>
+<p id='n754' class='pln'>754</p>
+<p id='n755' class='stm run hide_run'>755</p>
+<p id='n756' class='stm mis'>756</p>
+<p id='n757' class='pln'>757</p>
+<p id='n758' class='pln'>758</p>
+<p id='n759' class='pln'>759</p>
+<p id='n760' class='pln'>760</p>
+<p id='n761' class='pln'>761</p>
+<p id='n762' class='stm mis'>762</p>
+<p id='n763' class='stm mis'>763</p>
+<p id='n764' class='pln'>764</p>
+<p id='n765' class='stm run hide_run'>765</p>
+<p id='n766' class='stm mis'>766</p>
+<p id='n767' class='pln'>767</p>
+<p id='n768' class='pln'>768</p>
+<p id='n769' class='pln'>769</p>
+<p id='n770' class='pln'>770</p>
+<p id='n771' class='pln'>771</p>
+<p id='n772' class='pln'>772</p>
+<p id='n773' class='pln'>773</p>
+<p id='n774' class='pln'>774</p>
+<p id='n775' class='pln'>775</p>
+<p id='n776' class='pln'>776</p>
+<p id='n777' class='pln'>777</p>
+<p id='n778' class='pln'>778</p>
+<p id='n779' class='pln'>779</p>
+<p id='n780' class='pln'>780</p>
+<p id='n781' class='pln'>781</p>
+<p id='n782' class='pln'>782</p>
+<p id='n783' class='pln'>783</p>
+<p id='n784' class='pln'>784</p>
+<p id='n785' class='pln'>785</p>
+<p id='n786' class='pln'>786</p>
+<p id='n787' class='pln'>787</p>
+<p id='n788' class='pln'>788</p>
+<p id='n789' class='stm mis'>789</p>
+<p id='n790' class='stm mis'>790</p>
+<p id='n791' class='pln'>791</p>
+<p id='n792' class='pln'>792</p>
+<p id='n793' class='stm mis'>793</p>
+<p id='n794' class='stm mis'>794</p>
+<p id='n795' class='stm mis'>795</p>
+<p id='n796' class='pln'>796</p>
+<p id='n797' class='stm run hide_run'>797</p>
+<p id='n798' class='stm mis'>798</p>
+<p id='n799' class='stm mis'>799</p>
+<p id='n800' class='pln'>800</p>
+<p id='n801' class='pln'>801</p>
+<p id='n802' class='stm run hide_run'>802</p>
+<p id='n803' class='pln'>803</p>
+<p id='n804' class='stm run hide_run'>804</p>
+<p id='n805' class='stm mis'>805</p>
+<p id='n806' class='pln'>806</p>
+<p id='n807' class='pln'>807</p>
+<p id='n808' class='pln'>808</p>
+<p id='n809' class='pln'>809</p>
+<p id='n810' class='pln'>810</p>
+<p id='n811' class='pln'>811</p>
+<p id='n812' class='pln'>812</p>
+<p id='n813' class='pln'>813</p>
+<p id='n814' class='pln'>814</p>
+<p id='n815' class='pln'>815</p>
+<p id='n816' class='pln'>816</p>
+<p id='n817' class='pln'>817</p>
+<p id='n818' class='pln'>818</p>
+<p id='n819' class='pln'>819</p>
+<p id='n820' class='pln'>820</p>
+<p id='n821' class='pln'>821</p>
+<p id='n822' class='pln'>822</p>
+<p id='n823' class='pln'>823</p>
+<p id='n824' class='pln'>824</p>
+<p id='n825' class='pln'>825</p>
+<p id='n826' class='pln'>826</p>
+<p id='n827' class='pln'>827</p>
+<p id='n828' class='pln'>828</p>
+<p id='n829' class='pln'>829</p>
+<p id='n830' class='stm mis'>830</p>
+<p id='n831' class='stm mis'>831</p>
+<p id='n832' class='stm mis'>832</p>
+<p id='n833' class='stm mis'>833</p>
+<p id='n834' class='stm mis'>834</p>
+<p id='n835' class='pln'>835</p>
+<p id='n836' class='stm run hide_run'>836</p>
+<p id='n837' class='pln'>837</p>
+<p id='n838' class='stm mis'>838</p>
+<p id='n839' class='pln'>839</p>
+<p id='n840' class='pln'>840</p>
+<p id='n841' class='pln'>841</p>
+<p id='n842' class='pln'>842</p>
+<p id='n843' class='pln'>843</p>
+<p id='n844' class='pln'>844</p>
+<p id='n845' class='pln'>845</p>
+<p id='n846' class='pln'>846</p>
+<p id='n847' class='pln'>847</p>
+<p id='n848' class='pln'>848</p>
+<p id='n849' class='pln'>849</p>
+<p id='n850' class='pln'>850</p>
+<p id='n851' class='pln'>851</p>
+<p id='n852' class='pln'>852</p>
+<p id='n853' class='pln'>853</p>
+<p id='n854' class='pln'>854</p>
+<p id='n855' class='pln'>855</p>
+<p id='n856' class='pln'>856</p>
+<p id='n857' class='pln'>857</p>
+<p id='n858' class='pln'>858</p>
+<p id='n859' class='pln'>859</p>
+<p id='n860' class='pln'>860</p>
+<p id='n861' class='pln'>861</p>
+<p id='n862' class='pln'>862</p>
+<p id='n863' class='stm mis'>863</p>
+<p id='n864' class='stm mis'>864</p>
+<p id='n865' class='stm mis'>865</p>
+<p id='n866' class='pln'>866</p>
+<p id='n867' class='stm run hide_run'>867</p>
+<p id='n868' class='stm mis'>868</p>
+<p id='n869' class='pln'>869</p>
+<p id='n870' class='pln'>870</p>
+<p id='n871' class='pln'>871</p>
+<p id='n872' class='pln'>872</p>
+<p id='n873' class='pln'>873</p>
+<p id='n874' class='pln'>874</p>
+<p id='n875' class='pln'>875</p>
+<p id='n876' class='pln'>876</p>
+<p id='n877' class='pln'>877</p>
+<p id='n878' class='pln'>878</p>
+<p id='n879' class='pln'>879</p>
+<p id='n880' class='pln'>880</p>
+<p id='n881' class='pln'>881</p>
+<p id='n882' class='pln'>882</p>
+<p id='n883' class='pln'>883</p>
+<p id='n884' class='pln'>884</p>
+<p id='n885' class='pln'>885</p>
+<p id='n886' class='pln'>886</p>
+<p id='n887' class='pln'>887</p>
+<p id='n888' class='pln'>888</p>
+<p id='n889' class='pln'>889</p>
+<p id='n890' class='pln'>890</p>
+<p id='n891' class='pln'>891</p>
+<p id='n892' class='pln'>892</p>
+<p id='n893' class='pln'>893</p>
+<p id='n894' class='pln'>894</p>
+<p id='n895' class='pln'>895</p>
+<p id='n896' class='pln'>896</p>
+<p id='n897' class='pln'>897</p>
+<p id='n898' class='pln'>898</p>
+<p id='n899' class='pln'>899</p>
+<p id='n900' class='pln'>900</p>
+<p id='n901' class='pln'>901</p>
+<p id='n902' class='pln'>902</p>
+<p id='n903' class='pln'>903</p>
+<p id='n904' class='pln'>904</p>
+<p id='n905' class='pln'>905</p>
+<p id='n906' class='pln'>906</p>
+<p id='n907' class='stm mis'>907</p>
+<p id='n908' class='stm mis'>908</p>
+<p id='n909' class='stm mis'>909</p>
+<p id='n910' class='stm mis'>910</p>
+<p id='n911' class='stm mis'>911</p>
+<p id='n912' class='stm mis'>912</p>
+<p id='n913' class='pln'>913</p>
+<p id='n914' class='stm run hide_run'>914</p>
+<p id='n915' class='stm mis'>915</p>
+<p id='n916' class='pln'>916</p>
+<p id='n917' class='pln'>917</p>
+<p id='n918' class='pln'>918</p>
+<p id='n919' class='pln'>919</p>
+<p id='n920' class='pln'>920</p>
+<p id='n921' class='pln'>921</p>
+<p id='n922' class='pln'>922</p>
+<p id='n923' class='pln'>923</p>
+<p id='n924' class='pln'>924</p>
+<p id='n925' class='pln'>925</p>
+<p id='n926' class='pln'>926</p>
+<p id='n927' class='pln'>927</p>
+<p id='n928' class='pln'>928</p>
+<p id='n929' class='pln'>929</p>
+<p id='n930' class='pln'>930</p>
+<p id='n931' class='pln'>931</p>
+<p id='n932' class='pln'>932</p>
+<p id='n933' class='pln'>933</p>
+<p id='n934' class='pln'>934</p>
+<p id='n935' class='pln'>935</p>
+<p id='n936' class='pln'>936</p>
+<p id='n937' class='pln'>937</p>
+<p id='n938' class='pln'>938</p>
+<p id='n939' class='pln'>939</p>
+<p id='n940' class='pln'>940</p>
+<p id='n941' class='pln'>941</p>
+<p id='n942' class='pln'>942</p>
+<p id='n943' class='pln'>943</p>
+<p id='n944' class='pln'>944</p>
+<p id='n945' class='pln'>945</p>
+<p id='n946' class='pln'>946</p>
+<p id='n947' class='pln'>947</p>
+<p id='n948' class='pln'>948</p>
+<p id='n949' class='pln'>949</p>
+<p id='n950' class='pln'>950</p>
+<p id='n951' class='pln'>951</p>
+<p id='n952' class='pln'>952</p>
+<p id='n953' class='pln'>953</p>
+<p id='n954' class='pln'>954</p>
+<p id='n955' class='pln'>955</p>
+<p id='n956' class='pln'>956</p>
+<p id='n957' class='pln'>957</p>
+<p id='n958' class='stm mis'>958</p>
+<p id='n959' class='stm mis'>959</p>
+<p id='n960' class='stm mis'>960</p>
+<p id='n961' class='stm mis'>961</p>
+<p id='n962' class='stm mis'>962</p>
+<p id='n963' class='stm mis'>963</p>
+<p id='n964' class='pln'>964</p>
+<p id='n965' class='stm run hide_run'>965</p>
+<p id='n966' class='stm mis'>966</p>
+<p id='n967' class='pln'>967</p>
+<p id='n968' class='pln'>968</p>
+<p id='n969' class='pln'>969</p>
+<p id='n970' class='pln'>970</p>
+<p id='n971' class='pln'>971</p>
+<p id='n972' class='pln'>972</p>
+<p id='n973' class='pln'>973</p>
+<p id='n974' class='pln'>974</p>
+<p id='n975' class='pln'>975</p>
+<p id='n976' class='pln'>976</p>
+<p id='n977' class='pln'>977</p>
+<p id='n978' class='pln'>978</p>
+<p id='n979' class='pln'>979</p>
+<p id='n980' class='pln'>980</p>
+<p id='n981' class='pln'>981</p>
+<p id='n982' class='pln'>982</p>
+<p id='n983' class='pln'>983</p>
+<p id='n984' class='pln'>984</p>
+<p id='n985' class='pln'>985</p>
+<p id='n986' class='pln'>986</p>
+<p id='n987' class='pln'>987</p>
+<p id='n988' class='pln'>988</p>
+<p id='n989' class='pln'>989</p>
+<p id='n990' class='pln'>990</p>
+<p id='n991' class='pln'>991</p>
+<p id='n992' class='pln'>992</p>
+<p id='n993' class='pln'>993</p>
+<p id='n994' class='pln'>994</p>
+<p id='n995' class='pln'>995</p>
+<p id='n996' class='pln'>996</p>
+<p id='n997' class='pln'>997</p>
+<p id='n998' class='pln'>998</p>
+<p id='n999' class='pln'>999</p>
+<p id='n1000' class='pln'>1000</p>
+<p id='n1001' class='pln'>1001</p>
+<p id='n1002' class='stm mis'>1002</p>
+<p id='n1003' class='stm mis'>1003</p>
+<p id='n1004' class='stm mis'>1004</p>
+<p id='n1005' class='stm mis'>1005</p>
+<p id='n1006' class='pln'>1006</p>
+<p id='n1007' class='stm run hide_run'>1007</p>
+<p id='n1008' class='stm mis'>1008</p>
+<p id='n1009' class='pln'>1009</p>
+<p id='n1010' class='pln'>1010</p>
+<p id='n1011' class='pln'>1011</p>
+<p id='n1012' class='pln'>1012</p>
+<p id='n1013' class='pln'>1013</p>
+<p id='n1014' class='pln'>1014</p>
+<p id='n1015' class='pln'>1015</p>
+<p id='n1016' class='pln'>1016</p>
+<p id='n1017' class='pln'>1017</p>
+<p id='n1018' class='pln'>1018</p>
+<p id='n1019' class='pln'>1019</p>
+<p id='n1020' class='pln'>1020</p>
+<p id='n1021' class='pln'>1021</p>
+<p id='n1022' class='pln'>1022</p>
+<p id='n1023' class='pln'>1023</p>
+<p id='n1024' class='stm mis'>1024</p>
+<p id='n1025' class='stm mis'>1025</p>
+<p id='n1026' class='pln'>1026</p>
+<p id='n1027' class='stm run hide_run'>1027</p>
+<p id='n1028' class='stm mis'>1028</p>
+<p id='n1029' class='pln'>1029</p>
+<p id='n1030' class='pln'>1030</p>
+<p id='n1031' class='pln'>1031</p>
+<p id='n1032' class='pln'>1032</p>
+<p id='n1033' class='pln'>1033</p>
+<p id='n1034' class='pln'>1034</p>
+<p id='n1035' class='pln'>1035</p>
+<p id='n1036' class='pln'>1036</p>
+<p id='n1037' class='pln'>1037</p>
+<p id='n1038' class='pln'>1038</p>
+<p id='n1039' class='pln'>1039</p>
+<p id='n1040' class='pln'>1040</p>
+<p id='n1041' class='pln'>1041</p>
+<p id='n1042' class='pln'>1042</p>
+<p id='n1043' class='pln'>1043</p>
+<p id='n1044' class='pln'>1044</p>
+<p id='n1045' class='pln'>1045</p>
+<p id='n1046' class='pln'>1046</p>
+<p id='n1047' class='pln'>1047</p>
+<p id='n1048' class='pln'>1048</p>
+<p id='n1049' class='pln'>1049</p>
+<p id='n1050' class='pln'>1050</p>
+<p id='n1051' class='pln'>1051</p>
+<p id='n1052' class='pln'>1052</p>
+<p id='n1053' class='pln'>1053</p>
+<p id='n1054' class='pln'>1054</p>
+<p id='n1055' class='pln'>1055</p>
+<p id='n1056' class='pln'>1056</p>
+<p id='n1057' class='pln'>1057</p>
+<p id='n1058' class='pln'>1058</p>
+<p id='n1059' class='pln'>1059</p>
+<p id='n1060' class='pln'>1060</p>
+<p id='n1061' class='pln'>1061</p>
+<p id='n1062' class='pln'>1062</p>
+<p id='n1063' class='pln'>1063</p>
+<p id='n1064' class='pln'>1064</p>
+<p id='n1065' class='pln'>1065</p>
+<p id='n1066' class='stm mis'>1066</p>
+<p id='n1067' class='stm mis'>1067</p>
+<p id='n1068' class='stm mis'>1068</p>
+<p id='n1069' class='stm mis'>1069</p>
+<p id='n1070' class='stm mis'>1070</p>
+<p id='n1071' class='pln'>1071</p>
+<p id='n1072' class='pln'>1072</p>
+<p id='n1073' class='stm run hide_run'>1073</p>
+<p id='n1074' class='pln'>1074</p>
+<p id='n1075' class='pln'>1075</p>
+<p id='n1076' class='stm run hide_run'>1076</p>
+<p id='n1077' class='pln'>1077</p>
+<p id='n1078' class='pln'>1078</p>
+<p id='n1079' class='pln'>1079</p>
+<p id='n1080' class='pln'>1080</p>
+<p id='n1081' class='pln'>1081</p>
+<p id='n1082' class='pln'>1082</p>
+<p id='n1083' class='pln'>1083</p>
+<p id='n1084' class='pln'>1084</p>
+<p id='n1085' class='stm run hide_run'>1085</p>
+<p id='n1086' class='pln'>1086</p>
+<p id='n1087' class='pln'>1087</p>
+<p id='n1088' class='pln'>1088</p>
+<p id='n1089' class='pln'>1089</p>
+<p id='n1090' class='pln'>1090</p>
+<p id='n1091' class='pln'>1091</p>
+<p id='n1092' class='pln'>1092</p>
+<p id='n1093' class='pln'>1093</p>
+<p id='n1094' class='stm run hide_run'>1094</p>
+<p id='n1095' class='stm mis'>1095</p>
+<p id='n1096' class='stm mis'>1096</p>
+<p id='n1097' class='stm mis'>1097</p>
+<p id='n1098' class='pln'>1098</p>
+<p id='n1099' class='stm run hide_run'>1099</p>
+<p id='n1100' class='stm mis'>1100</p>
+<p id='n1101' class='stm mis'>1101</p>
+<p id='n1102' class='stm mis'>1102</p>
+<p id='n1103' class='pln'>1103</p>
+<p id='n1104' class='stm run hide_run'>1104</p>
+<p id='n1105' class='stm mis'>1105</p>
+<p id='n1106' class='stm mis'>1106</p>
+<p id='n1107' class='stm mis'>1107</p>
+<p id='n1108' class='pln'>1108</p>
+<p id='n1109' class='stm run hide_run'>1109</p>
+<p id='n1110' class='stm mis'>1110</p>
+<p id='n1111' class='stm mis'>1111</p>
+<p id='n1112' class='stm mis'>1112</p>
+<p id='n1113' class='pln'>1113</p>
+<p id='n1114' class='pln'>1114</p>
+<p id='n1115' class='stm run hide_run'>1115</p>
+<p id='n1116' class='pln'>1116</p>
+<p id='n1117' class='pln'>1117</p>
+<p id='n1118' class='pln'>1118</p>
+<p id='n1119' class='pln'>1119</p>
+<p id='n1120' class='pln'>1120</p>
+<p id='n1121' class='stm run hide_run'>1121</p>
+<p id='n1122' class='stm mis'>1122</p>
+<p id='n1123' class='stm mis'>1123</p>
+<p id='n1124' class='pln'>1124</p>
+<p id='n1125' class='stm run hide_run'>1125</p>
+<p id='n1126' class='stm mis'>1126</p>
+<p id='n1127' class='pln'>1127</p>
+<p id='n1128' class='pln'>1128</p>
+<p id='n1129' class='pln'>1129</p>
+<p id='n1130' class='pln'>1130</p>
+<p id='n1131' class='stm mis'>1131</p>
+<p id='n1132' class='stm mis'>1132</p>
+<p id='n1133' class='stm mis'>1133</p>
+<p id='n1134' class='pln'>1134</p>
+<p id='n1135' class='pln'>1135</p>
+<p id='n1136' class='stm run hide_run'>1136</p>
+<p id='n1137' class='stm run hide_run'>1137</p>
+<p id='n1138' class='pln'>1138</p>
+<p id='n1139' class='pln'>1139</p>
+<p id='n1140' class='pln'>1140</p>
+<p id='n1141' class='pln'>1141</p>
+<p id='n1142' class='pln'>1142</p>
+<p id='n1143' class='pln'>1143</p>
+<p id='n1144' class='pln'>1144</p>
+<p id='n1145' class='pln'>1145</p>
+<p id='n1146' class='pln'>1146</p>
+<p id='n1147' class='pln'>1147</p>
+<p id='n1148' class='pln'>1148</p>
+<p id='n1149' class='pln'>1149</p>
+<p id='n1150' class='pln'>1150</p>
+<p id='n1151' class='pln'>1151</p>
+<p id='n1152' class='pln'>1152</p>
+<p id='n1153' class='pln'>1153</p>
+<p id='n1154' class='pln'>1154</p>
+<p id='n1155' class='pln'>1155</p>
+<p id='n1156' class='pln'>1156</p>
+<p id='n1157' class='pln'>1157</p>
+<p id='n1158' class='pln'>1158</p>
+<p id='n1159' class='pln'>1159</p>
+<p id='n1160' class='pln'>1160</p>
+<p id='n1161' class='pln'>1161</p>
+<p id='n1162' class='pln'>1162</p>
+<p id='n1163' class='pln'>1163</p>
+<p id='n1164' class='pln'>1164</p>
+<p id='n1165' class='pln'>1165</p>
+<p id='n1166' class='pln'>1166</p>
+<p id='n1167' class='pln'>1167</p>
+<p id='n1168' class='pln'>1168</p>
+<p id='n1169' class='pln'>1169</p>
+<p id='n1170' class='pln'>1170</p>
+<p id='n1171' class='pln'>1171</p>
+<p id='n1172' class='pln'>1172</p>
+<p id='n1173' class='pln'>1173</p>
+<p id='n1174' class='pln'>1174</p>
+<p id='n1175' class='pln'>1175</p>
+<p id='n1176' class='pln'>1176</p>
+<p id='n1177' class='pln'>1177</p>
+<p id='n1178' class='pln'>1178</p>
+<p id='n1179' class='pln'>1179</p>
+<p id='n1180' class='pln'>1180</p>
+<p id='n1181' class='pln'>1181</p>
+<p id='n1182' class='pln'>1182</p>
+<p id='n1183' class='stm run hide_run'>1183</p>
+<p id='n1184' class='pln'>1184</p>
+<p id='n1185' class='stm mis'>1185</p>
+<p id='n1186' class='stm mis'>1186</p>
+<p id='n1187' class='pln'>1187</p>
+<p id='n1188' class='stm run hide_run'>1188</p>
+<p id='n1189' class='pln'>1189</p>
+<p id='n1190' class='stm mis'>1190</p>
+<p id='n1191' class='stm mis'>1191</p>
+<p id='n1192' class='stm mis'>1192</p>
+<p id='n1193' class='pln'>1193</p>
+<p id='n1194' class='stm run hide_run'>1194</p>
+<p id='n1195' class='pln'>1195</p>
+<p id='n1196' class='stm mis'>1196</p>
+<p id='n1197' class='stm mis'>1197</p>
+<p id='n1198' class='stm mis'>1198</p>
+<p id='n1199' class='pln'>1199</p>
+<p id='n1200' class='stm run hide_run'>1200</p>
+<p id='n1201' class='pln'>1201</p>
+<p id='n1202' class='stm mis'>1202</p>
+<p id='n1203' class='stm mis'>1203</p>
+<p id='n1204' class='stm mis'>1204</p>
+<p id='n1205' class='pln'>1205</p>
+<p id='n1206' class='stm run hide_run'>1206</p>
+<p id='n1207' class='pln'>1207</p>
+<p id='n1208' class='stm mis'>1208</p>
+<p id='n1209' class='stm mis'>1209</p>
+<p id='n1210' class='stm mis'>1210</p>
+<p id='n1211' class='pln'>1211</p>
+<p id='n1212' class='stm run hide_run'>1212</p>
+<p id='n1213' class='stm mis'>1213</p>
+<p id='n1214' class='pln'>1214</p>
+<p id='n1215' class='pln'>1215</p>
+<p id='n1216' class='pln'>1216</p>
+<p id='n1217' class='pln'>1217</p>
+<p id='n1218' class='pln'>1218</p>
+<p id='n1219' class='pln'>1219</p>
+<p id='n1220' class='pln'>1220</p>
+<p id='n1221' class='pln'>1221</p>
+<p id='n1222' class='pln'>1222</p>
+<p id='n1223' class='pln'>1223</p>
+<p id='n1224' class='stm mis'>1224</p>
+<p id='n1225' class='pln'>1225</p>
+<p id='n1226' class='stm mis'>1226</p>
+<p id='n1227' class='stm mis'>1227</p>
+<p id='n1228' class='stm mis'>1228</p>
+<p id='n1229' class='pln'>1229</p>
+<p id='n1230' class='stm mis'>1230</p>
+<p id='n1231' class='stm mis'>1231</p>
+<p id='n1232' class='stm mis'>1232</p>
+<p id='n1233' class='pln'>1233</p>
+<p id='n1234' class='stm mis'>1234</p>
+<p id='n1235' class='stm mis'>1235</p>
+<p id='n1236' class='stm mis'>1236</p>
+<p id='n1237' class='pln'>1237</p>
+<p id='n1238' class='stm mis'>1238</p>
+<p id='n1239' class='stm mis'>1239</p>
+<p id='n1240' class='stm mis'>1240</p>
+<p id='n1241' class='pln'>1241</p>
+<p id='n1242' class='stm mis'>1242</p>
+<p id='n1243' class='stm mis'>1243</p>
+<p id='n1244' class='stm mis'>1244</p>
+<p id='n1245' class='pln'>1245</p>
+<p id='n1246' class='stm mis'>1246</p>
+<p id='n1247' class='stm mis'>1247</p>
+<p id='n1248' class='stm mis'>1248</p>
+<p id='n1249' class='pln'>1249</p>
+<p id='n1250' class='stm mis'>1250</p>
+<p id='n1251' class='stm mis'>1251</p>
+<p id='n1252' class='stm mis'>1252</p>
+<p id='n1253' class='pln'>1253</p>
+<p id='n1254' class='stm run hide_run'>1254</p>
+<p id='n1255' class='pln'>1255</p>
+<p id='n1256' class='pln'>1256</p>
+<p id='n1257' class='stm mis'>1257</p>
+<p id='n1258' class='pln'>1258</p>
+<p id='n1259' class='pln'>1259</p>
+<p id='n1260' class='pln'>1260</p>
+<p id='n1261' class='pln'>1261</p>
+<p id='n1262' class='pln'>1262</p>
+<p id='n1263' class='pln'>1263</p>
+<p id='n1264' class='pln'>1264</p>
+<p id='n1265' class='pln'>1265</p>
+<p id='n1266' class='pln'>1266</p>
+<p id='n1267' class='pln'>1267</p>
+<p id='n1268' class='pln'>1268</p>
+<p id='n1269' class='pln'>1269</p>
+<p id='n1270' class='pln'>1270</p>
+<p id='n1271' class='pln'>1271</p>
+<p id='n1272' class='pln'>1272</p>
+<p id='n1273' class='pln'>1273</p>
+<p id='n1274' class='pln'>1274</p>
+<p id='n1275' class='pln'>1275</p>
+<p id='n1276' class='pln'>1276</p>
+<p id='n1277' class='pln'>1277</p>
+<p id='n1278' class='pln'>1278</p>
+<p id='n1279' class='pln'>1279</p>
+<p id='n1280' class='pln'>1280</p>
+<p id='n1281' class='stm mis'>1281</p>
+<p id='n1282' class='pln'>1282</p>
+<p id='n1283' class='pln'>1283</p>
+<p id='n1284' class='stm mis'>1284</p>
+<p id='n1285' class='stm mis'>1285</p>
+<p id='n1286' class='pln'>1286</p>
+<p id='n1287' class='pln'>1287</p>
+<p id='n1288' class='stm run hide_run'>1288</p>
+<p id='n1289' class='pln'>1289</p>
+<p id='n1290' class='stm run hide_run'>1290</p>
+<p id='n1291' class='pln'>1291</p>
+<p id='n1292' class='stm mis'>1292</p>
+<p id='n1293' class='pln'>1293</p>
+<p id='n1294' class='pln'>1294</p>
+<p id='n1295' class='pln'>1295</p>
+<p id='n1296' class='pln'>1296</p>
+<p id='n1297' class='pln'>1297</p>
+<p id='n1298' class='pln'>1298</p>
+<p id='n1299' class='pln'>1299</p>
+<p id='n1300' class='pln'>1300</p>
+<p id='n1301' class='pln'>1301</p>
+<p id='n1302' class='pln'>1302</p>
+<p id='n1303' class='pln'>1303</p>
+<p id='n1304' class='pln'>1304</p>
+<p id='n1305' class='pln'>1305</p>
+<p id='n1306' class='pln'>1306</p>
+<p id='n1307' class='stm mis'>1307</p>
+<p id='n1308' class='stm mis'>1308</p>
+<p id='n1309' class='stm mis'>1309</p>
+<p id='n1310' class='stm mis'>1310</p>
+<p id='n1311' class='stm mis'>1311</p>
+<p id='n1312' class='stm mis'>1312</p>
+<p id='n1313' class='stm mis'>1313</p>
+<p id='n1314' class='stm mis'>1314</p>
+<p id='n1315' class='stm mis'>1315</p>
+<p id='n1316' class='stm mis'>1316</p>
+<p id='n1317' class='stm mis'>1317</p>
+<p id='n1318' class='stm mis'>1318</p>
+<p id='n1319' class='pln'>1319</p>
+<p id='n1320' class='stm run hide_run'>1320</p>
+<p id='n1321' class='stm mis'>1321</p>
+<p id='n1322' class='pln'>1322</p>
+<p id='n1323' class='pln'>1323</p>
+<p id='n1324' class='pln'>1324</p>
+<p id='n1325' class='pln'>1325</p>
+<p id='n1326' class='pln'>1326</p>
+<p id='n1327' class='pln'>1327</p>
+<p id='n1328' class='pln'>1328</p>
+<p id='n1329' class='pln'>1329</p>
+<p id='n1330' class='pln'>1330</p>
+<p id='n1331' class='pln'>1331</p>
+<p id='n1332' class='pln'>1332</p>
+<p id='n1333' class='pln'>1333</p>
+<p id='n1334' class='pln'>1334</p>
+<p id='n1335' class='pln'>1335</p>
+<p id='n1336' class='pln'>1336</p>
+<p id='n1337' class='pln'>1337</p>
+<p id='n1338' class='pln'>1338</p>
+<p id='n1339' class='pln'>1339</p>
+<p id='n1340' class='pln'>1340</p>
+<p id='n1341' class='pln'>1341</p>
+<p id='n1342' class='pln'>1342</p>
+<p id='n1343' class='pln'>1343</p>
+<p id='n1344' class='pln'>1344</p>
+<p id='n1345' class='pln'>1345</p>
+<p id='n1346' class='pln'>1346</p>
+<p id='n1347' class='stm mis'>1347</p>
+<p id='n1348' class='stm mis'>1348</p>
+<p id='n1349' class='stm mis'>1349</p>
+<p id='n1350' class='stm mis'>1350</p>
+<p id='n1351' class='stm mis'>1351</p>
+<p id='n1352' class='stm mis'>1352</p>
+<p id='n1353' class='pln'>1353</p>
+<p id='n1354' class='stm run hide_run'>1354</p>
+<p id='n1355' class='pln'>1355</p>
+<p id='n1356' class='stm mis'>1356</p>
+<p id='n1357' class='pln'>1357</p>
+<p id='n1358' class='pln'>1358</p>
+<p id='n1359' class='pln'>1359</p>
+<p id='n1360' class='pln'>1360</p>
+<p id='n1361' class='pln'>1361</p>
+<p id='n1362' class='pln'>1362</p>
+<p id='n1363' class='pln'>1363</p>
+<p id='n1364' class='pln'>1364</p>
+<p id='n1365' class='pln'>1365</p>
+<p id='n1366' class='pln'>1366</p>
+<p id='n1367' class='pln'>1367</p>
+<p id='n1368' class='pln'>1368</p>
+<p id='n1369' class='pln'>1369</p>
+<p id='n1370' class='pln'>1370</p>
+<p id='n1371' class='pln'>1371</p>
+<p id='n1372' class='pln'>1372</p>
+<p id='n1373' class='pln'>1373</p>
+<p id='n1374' class='pln'>1374</p>
+<p id='n1375' class='pln'>1375</p>
+<p id='n1376' class='pln'>1376</p>
+<p id='n1377' class='pln'>1377</p>
+<p id='n1378' class='pln'>1378</p>
+<p id='n1379' class='pln'>1379</p>
+<p id='n1380' class='pln'>1380</p>
+<p id='n1381' class='pln'>1381</p>
+<p id='n1382' class='pln'>1382</p>
+<p id='n1383' class='pln'>1383</p>
+<p id='n1384' class='pln'>1384</p>
+<p id='n1385' class='pln'>1385</p>
+<p id='n1386' class='pln'>1386</p>
+<p id='n1387' class='pln'>1387</p>
+<p id='n1388' class='pln'>1388</p>
+<p id='n1389' class='pln'>1389</p>
+<p id='n1390' class='pln'>1390</p>
+<p id='n1391' class='pln'>1391</p>
+<p id='n1392' class='pln'>1392</p>
+<p id='n1393' class='pln'>1393</p>
+<p id='n1394' class='pln'>1394</p>
+<p id='n1395' class='pln'>1395</p>
+<p id='n1396' class='pln'>1396</p>
+<p id='n1397' class='pln'>1397</p>
+<p id='n1398' class='pln'>1398</p>
+<p id='n1399' class='pln'>1399</p>
+<p id='n1400' class='pln'>1400</p>
+<p id='n1401' class='stm mis'>1401</p>
+<p id='n1402' class='stm mis'>1402</p>
+<p id='n1403' class='stm mis'>1403</p>
+<p id='n1404' class='stm mis'>1404</p>
+<p id='n1405' class='stm mis'>1405</p>
+<p id='n1406' class='stm mis'>1406</p>
+<p id='n1407' class='pln'>1407</p>
+<p id='n1408' class='stm run hide_run'>1408</p>
+<p id='n1409' class='stm mis'>1409</p>
+<p id='n1410' class='pln'>1410</p>
+<p id='n1411' class='pln'>1411</p>
+<p id='n1412' class='pln'>1412</p>
+<p id='n1413' class='pln'>1413</p>
+<p id='n1414' class='pln'>1414</p>
+<p id='n1415' class='pln'>1415</p>
+<p id='n1416' class='pln'>1416</p>
+<p id='n1417' class='pln'>1417</p>
+<p id='n1418' class='pln'>1418</p>
+<p id='n1419' class='pln'>1419</p>
+<p id='n1420' class='pln'>1420</p>
+<p id='n1421' class='pln'>1421</p>
+<p id='n1422' class='pln'>1422</p>
+<p id='n1423' class='pln'>1423</p>
+<p id='n1424' class='pln'>1424</p>
+<p id='n1425' class='pln'>1425</p>
+<p id='n1426' class='pln'>1426</p>
+<p id='n1427' class='pln'>1427</p>
+<p id='n1428' class='pln'>1428</p>
+<p id='n1429' class='pln'>1429</p>
+<p id='n1430' class='pln'>1430</p>
+<p id='n1431' class='pln'>1431</p>
+<p id='n1432' class='pln'>1432</p>
+<p id='n1433' class='pln'>1433</p>
+<p id='n1434' class='pln'>1434</p>
+<p id='n1435' class='pln'>1435</p>
+<p id='n1436' class='pln'>1436</p>
+<p id='n1437' class='stm mis'>1437</p>
+<p id='n1438' class='pln'>1438</p>
+<p id='n1439' class='stm mis'>1439</p>
+<p id='n1440' class='stm mis'>1440</p>
+<p id='n1441' class='stm mis'>1441</p>
+<p id='n1442' class='pln'>1442</p>
+<p id='n1443' class='stm mis'>1443</p>
+<p id='n1444' class='stm mis'>1444</p>
+<p id='n1445' class='stm mis'>1445</p>
+<p id='n1446' class='pln'>1446</p>
+<p id='n1447' class='stm mis'>1447</p>
+<p id='n1448' class='stm mis'>1448</p>
+<p id='n1449' class='pln'>1449</p>
+<p id='n1450' class='stm run hide_run'>1450</p>
+<p id='n1451' class='stm mis'>1451</p>
+<p id='n1452' class='pln'>1452</p>
+<p id='n1453' class='pln'>1453</p>
+<p id='n1454' class='pln'>1454</p>
+<p id='n1455' class='pln'>1455</p>
+<p id='n1456' class='pln'>1456</p>
+<p id='n1457' class='stm mis'>1457</p>
+<p id='n1458' class='stm mis'>1458</p>
+<p id='n1459' class='stm mis'>1459</p>
+<p id='n1460' class='stm mis'>1460</p>
+<p id='n1461' class='pln'>1461</p>
+<p id='n1462' class='stm run hide_run'>1462</p>
+<p id='n1463' class='pln'>1463</p>
+<p id='n1464' class='pln'>1464</p>
+<p id='n1465' class='stm mis'>1465</p>
+<p id='n1466' class='pln'>1466</p>
+<p id='n1467' class='pln'>1467</p>
+<p id='n1468' class='pln'>1468</p>
+<p id='n1469' class='pln'>1469</p>
+<p id='n1470' class='pln'>1470</p>
+<p id='n1471' class='pln'>1471</p>
+<p id='n1472' class='pln'>1472</p>
+<p id='n1473' class='pln'>1473</p>
+<p id='n1474' class='pln'>1474</p>
+<p id='n1475' class='pln'>1475</p>
+<p id='n1476' class='pln'>1476</p>
+<p id='n1477' class='pln'>1477</p>
+<p id='n1478' class='pln'>1478</p>
+<p id='n1479' class='stm mis'>1479</p>
+<p id='n1480' class='stm mis'>1480</p>
+<p id='n1481' class='stm mis'>1481</p>
+<p id='n1482' class='stm mis'>1482</p>
+<p id='n1483' class='stm mis'>1483</p>
+<p id='n1484' class='stm mis'>1484</p>
+<p id='n1485' class='stm mis'>1485</p>
+<p id='n1486' class='pln'>1486</p>
+<p id='n1487' class='stm run hide_run'>1487</p>
+<p id='n1488' class='stm mis'>1488</p>
+<p id='n1489' class='pln'>1489</p>
+<p id='n1490' class='pln'>1490</p>
+<p id='n1491' class='pln'>1491</p>
+<p id='n1492' class='pln'>1492</p>
+<p id='n1493' class='pln'>1493</p>
+<p id='n1494' class='pln'>1494</p>
+<p id='n1495' class='pln'>1495</p>
+<p id='n1496' class='pln'>1496</p>
+<p id='n1497' class='pln'>1497</p>
+<p id='n1498' class='pln'>1498</p>
+<p id='n1499' class='pln'>1499</p>
+<p id='n1500' class='pln'>1500</p>
+<p id='n1501' class='pln'>1501</p>
+<p id='n1502' class='pln'>1502</p>
+<p id='n1503' class='pln'>1503</p>
+<p id='n1504' class='pln'>1504</p>
+<p id='n1505' class='pln'>1505</p>
+<p id='n1506' class='pln'>1506</p>
+<p id='n1507' class='stm mis'>1507</p>
+<p id='n1508' class='stm mis'>1508</p>
+<p id='n1509' class='stm mis'>1509</p>
+<p id='n1510' class='stm mis'>1510</p>
+<p id='n1511' class='stm mis'>1511</p>
+<p id='n1512' class='stm mis'>1512</p>
+<p id='n1513' class='stm mis'>1513</p>
+<p id='n1514' class='stm mis'>1514</p>
+<p id='n1515' class='stm mis'>1515</p>
+<p id='n1516' class='stm mis'>1516</p>
+<p id='n1517' class='stm mis'>1517</p>
+<p id='n1518' class='stm mis'>1518</p>
+<p id='n1519' class='stm mis'>1519</p>
+<p id='n1520' class='stm mis'>1520</p>
+<p id='n1521' class='stm mis'>1521</p>
+<p id='n1522' class='stm mis'>1522</p>
+<p id='n1523' class='stm mis'>1523</p>
+<p id='n1524' class='stm mis'>1524</p>
+<p id='n1525' class='pln'>1525</p>
+<p id='n1526' class='stm run hide_run'>1526</p>
+<p id='n1527' class='stm mis'>1527</p>
+<p id='n1528' class='pln'>1528</p>
+<p id='n1529' class='pln'>1529</p>
+<p id='n1530' class='pln'>1530</p>
+<p id='n1531' class='pln'>1531</p>
+<p id='n1532' class='pln'>1532</p>
+<p id='n1533' class='pln'>1533</p>
+<p id='n1534' class='stm mis'>1534</p>
+<p id='n1535' class='stm mis'>1535</p>
+<p id='n1536' class='stm mis'>1536</p>
+<p id='n1537' class='stm mis'>1537</p>
+<p id='n1538' class='stm mis'>1538</p>
+<p id='n1539' class='stm mis'>1539</p>
+<p id='n1540' class='stm mis'>1540</p>
+<p id='n1541' class='stm mis'>1541</p>
+<p id='n1542' class='pln'>1542</p>
+<p id='n1543' class='stm run hide_run'>1543</p>
+<p id='n1544' class='stm mis'>1544</p>
+<p id='n1545' class='pln'>1545</p>
+<p id='n1546' class='pln'>1546</p>
+<p id='n1547' class='pln'>1547</p>
+<p id='n1548' class='pln'>1548</p>
+<p id='n1549' class='pln'>1549</p>
+<p id='n1550' class='pln'>1550</p>
+<p id='n1551' class='pln'>1551</p>
+<p id='n1552' class='pln'>1552</p>
+<p id='n1553' class='pln'>1553</p>
+<p id='n1554' class='pln'>1554</p>
+<p id='n1555' class='pln'>1555</p>
+<p id='n1556' class='pln'>1556</p>
+<p id='n1557' class='pln'>1557</p>
+<p id='n1558' class='pln'>1558</p>
+<p id='n1559' class='pln'>1559</p>
+<p id='n1560' class='pln'>1560</p>
+<p id='n1561' class='pln'>1561</p>
+<p id='n1562' class='pln'>1562</p>
+<p id='n1563' class='pln'>1563</p>
+<p id='n1564' class='stm mis'>1564</p>
+<p id='n1565' class='stm mis'>1565</p>
+<p id='n1566' class='stm mis'>1566</p>
+<p id='n1567' class='pln'>1567</p>
+<p id='n1568' class='stm run hide_run'>1568</p>
+<p id='n1569' class='stm mis'>1569</p>
+<p id='n1570' class='pln'>1570</p>
+<p id='n1571' class='pln'>1571</p>
+<p id='n1572' class='pln'>1572</p>
+<p id='n1573' class='pln'>1573</p>
+<p id='n1574' class='pln'>1574</p>
+<p id='n1575' class='pln'>1575</p>
+<p id='n1576' class='pln'>1576</p>
+<p id='n1577' class='pln'>1577</p>
+<p id='n1578' class='pln'>1578</p>
+<p id='n1579' class='pln'>1579</p>
+<p id='n1580' class='pln'>1580</p>
+<p id='n1581' class='pln'>1581</p>
+<p id='n1582' class='pln'>1582</p>
+<p id='n1583' class='pln'>1583</p>
+<p id='n1584' class='stm mis'>1584</p>
+<p id='n1585' class='stm mis'>1585</p>
+<p id='n1586' class='stm mis'>1586</p>
+<p id='n1587' class='pln'>1587</p>
+<p id='n1588' class='stm run hide_run'>1588</p>
+<p id='n1589' class='stm mis'>1589</p>
+<p id='n1590' class='pln'>1590</p>
+<p id='n1591' class='pln'>1591</p>
+<p id='n1592' class='pln'>1592</p>
+<p id='n1593' class='pln'>1593</p>
+<p id='n1594' class='pln'>1594</p>
+<p id='n1595' class='pln'>1595</p>
+<p id='n1596' class='pln'>1596</p>
+<p id='n1597' class='pln'>1597</p>
+<p id='n1598' class='pln'>1598</p>
+<p id='n1599' class='pln'>1599</p>
+<p id='n1600' class='pln'>1600</p>
+<p id='n1601' class='pln'>1601</p>
+<p id='n1602' class='stm mis'>1602</p>
+<p id='n1603' class='stm mis'>1603</p>
+<p id='n1604' class='stm mis'>1604</p>
+<p id='n1605' class='pln'>1605</p>
+<p id='n1606' class='stm run hide_run'>1606</p>
+<p id='n1607' class='pln'>1607</p>
+<p id='n1608' class='stm run hide_run'>1608</p>
+<p id='n1609' class='pln'>1609</p>
+<p id='n1610' class='pln'>1610</p>
+<p id='n1611' class='pln'>1611</p>
+<p id='n1612' class='pln'>1612</p>
+<p id='n1613' class='pln'>1613</p>
+<p id='n1614' class='pln'>1614</p>
+<p id='n1615' class='pln'>1615</p>
+<p id='n1616' class='pln'>1616</p>
+<p id='n1617' class='pln'>1617</p>
+<p id='n1618' class='pln'>1618</p>
+<p id='n1619' class='pln'>1619</p>
+<p id='n1620' class='pln'>1620</p>
+<p id='n1621' class='pln'>1621</p>
+<p id='n1622' class='pln'>1622</p>
+<p id='n1623' class='pln'>1623</p>
+<p id='n1624' class='pln'>1624</p>
+<p id='n1625' class='pln'>1625</p>
+<p id='n1626' class='pln'>1626</p>
+<p id='n1627' class='pln'>1627</p>
+<p id='n1628' class='pln'>1628</p>
+<p id='n1629' class='exc'>1629</p>
+<p id='n1630' class='pln'>1630</p>
+<p id='n1631' class='exc'>1631</p>
+<p id='n1632' class='exc'>1632</p>
+<p id='n1633' class='exc'>1633</p>
+<p id='n1634' class='pln'>1634</p>
+<p id='n1635' class='exc'>1635</p>
+<p id='n1636' class='exc'>1636</p>
+<p id='n1637' class='pln'>1637</p>
+<p id='n1638' class='stm run hide_run'>1638</p>
+<p id='n1639' class='stm mis'>1639</p>
+<p id='n1640' class='stm mis'>1640</p>
+<p id='n1641' class='stm mis'>1641</p>
+<p id='n1642' class='stm mis'>1642</p>
+<p id='n1643' class='stm mis'>1643</p>
+<p id='n1644' class='pln'>1644</p>
+<p id='n1645' class='stm run hide_run'>1645</p>
+<p id='n1646' class='stm mis'>1646</p>
+<p id='n1647' class='stm mis'>1647</p>
+<p id='n1648' class='pln'>1648</p>
+<p id='n1649' class='stm run hide_run'>1649</p>
+<p id='n1650' class='stm mis'>1650</p>
+<p id='n1651' class='pln'>1651</p>
+<p id='n1652' class='pln'>1652</p>
+<p id='n1653' class='stm mis'>1653</p>
+<p id='n1654' class='pln'>1654</p>
+<p id='n1655' class='stm run hide_run'>1655</p>
+<p id='n1656' class='stm mis'>1656</p>
+<p id='n1657' class='stm mis'>1657</p>
+<p id='n1658' class='stm mis'>1658</p>
+<p id='n1659' class='pln'>1659</p>
+<p id='n1660' class='stm run hide_run'>1660</p>
+<p id='n1661' class='stm mis'>1661</p>
+<p id='n1662' class='stm mis'>1662</p>
+<p id='n1663' class='stm mis'>1663</p>
+<p id='n1664' class='pln'>1664</p>
+<p id='n1665' class='stm run hide_run'>1665</p>
+<p id='n1666' class='stm mis'>1666</p>
+<p id='n1667' class='pln'>1667</p>
+<p id='n1668' class='pln'>1668</p>
+<p id='n1669' class='stm mis'>1669</p>
+<p id='n1670' class='pln'>1670</p>
+<p id='n1671' class='stm run hide_run'>1671</p>
+<p id='n1672' class='pln'>1672</p>
+<p id='n1673' class='stm run hide_run'>1673</p>
+<p id='n1674' class='stm mis'>1674</p>
+<p id='n1675' class='pln'>1675</p>
+<p id='n1676' class='pln'>1676</p>
+<p id='n1677' class='pln'>1677</p>
+<p id='n1678' class='pln'>1678</p>
+<p id='n1679' class='pln'>1679</p>
+<p id='n1680' class='pln'>1680</p>
+<p id='n1681' class='pln'>1681</p>
+<p id='n1682' class='pln'>1682</p>
+<p id='n1683' class='pln'>1683</p>
+<p id='n1684' class='pln'>1684</p>
+<p id='n1685' class='pln'>1685</p>
+<p id='n1686' class='pln'>1686</p>
+<p id='n1687' class='pln'>1687</p>
+<p id='n1688' class='pln'>1688</p>
+<p id='n1689' class='pln'>1689</p>
+<p id='n1690' class='pln'>1690</p>
+<p id='n1691' class='pln'>1691</p>
+<p id='n1692' class='pln'>1692</p>
+<p id='n1693' class='pln'>1693</p>
+<p id='n1694' class='stm mis'>1694</p>
+<p id='n1695' class='stm mis'>1695</p>
+<p id='n1696' class='stm mis'>1696</p>
+<p id='n1697' class='pln'>1697</p>
+<p id='n1698' class='stm run hide_run'>1698</p>
+<p id='n1699' class='stm mis'>1699</p>
+<p id='n1700' class='pln'>1700</p>
+<p id='n1701' class='pln'>1701</p>
+<p id='n1702' class='pln'>1702</p>
+<p id='n1703' class='pln'>1703</p>
+<p id='n1704' class='pln'>1704</p>
+<p id='n1705' class='pln'>1705</p>
+<p id='n1706' class='pln'>1706</p>
+<p id='n1707' class='pln'>1707</p>
+<p id='n1708' class='pln'>1708</p>
+<p id='n1709' class='pln'>1709</p>
+<p id='n1710' class='pln'>1710</p>
+<p id='n1711' class='pln'>1711</p>
+<p id='n1712' class='pln'>1712</p>
+<p id='n1713' class='pln'>1713</p>
+<p id='n1714' class='pln'>1714</p>
+<p id='n1715' class='pln'>1715</p>
+<p id='n1716' class='pln'>1716</p>
+<p id='n1717' class='pln'>1717</p>
+<p id='n1718' class='pln'>1718</p>
+<p id='n1719' class='pln'>1719</p>
+<p id='n1720' class='pln'>1720</p>
+<p id='n1721' class='pln'>1721</p>
+<p id='n1722' class='pln'>1722</p>
+<p id='n1723' class='stm mis'>1723</p>
+<p id='n1724' class='stm mis'>1724</p>
+<p id='n1725' class='stm mis'>1725</p>
+<p id='n1726' class='pln'>1726</p>
+<p id='n1727' class='stm run hide_run'>1727</p>
+<p id='n1728' class='stm mis'>1728</p>
+<p id='n1729' class='pln'>1729</p>
+<p id='n1730' class='pln'>1730</p>
+<p id='n1731' class='pln'>1731</p>
+<p id='n1732' class='pln'>1732</p>
+<p id='n1733' class='pln'>1733</p>
+<p id='n1734' class='pln'>1734</p>
+<p id='n1735' class='pln'>1735</p>
+<p id='n1736' class='pln'>1736</p>
+<p id='n1737' class='pln'>1737</p>
+<p id='n1738' class='pln'>1738</p>
+<p id='n1739' class='pln'>1739</p>
+<p id='n1740' class='pln'>1740</p>
+<p id='n1741' class='pln'>1741</p>
+<p id='n1742' class='pln'>1742</p>
+<p id='n1743' class='pln'>1743</p>
+<p id='n1744' class='pln'>1744</p>
+<p id='n1745' class='pln'>1745</p>
+<p id='n1746' class='pln'>1746</p>
+<p id='n1747' class='pln'>1747</p>
+<p id='n1748' class='pln'>1748</p>
+<p id='n1749' class='pln'>1749</p>
+<p id='n1750' class='pln'>1750</p>
+<p id='n1751' class='pln'>1751</p>
+<p id='n1752' class='stm mis'>1752</p>
+<p id='n1753' class='stm mis'>1753</p>
+<p id='n1754' class='stm mis'>1754</p>
+<p id='n1755' class='pln'>1755</p>
+<p id='n1756' class='stm run hide_run'>1756</p>
+<p id='n1757' class='stm mis'>1757</p>
+<p id='n1758' class='pln'>1758</p>
+<p id='n1759' class='pln'>1759</p>
+<p id='n1760' class='pln'>1760</p>
+<p id='n1761' class='pln'>1761</p>
+<p id='n1762' class='pln'>1762</p>
+<p id='n1763' class='pln'>1763</p>
+<p id='n1764' class='pln'>1764</p>
+<p id='n1765' class='pln'>1765</p>
+<p id='n1766' class='pln'>1766</p>
+<p id='n1767' class='pln'>1767</p>
+<p id='n1768' class='pln'>1768</p>
+<p id='n1769' class='pln'>1769</p>
+<p id='n1770' class='pln'>1770</p>
+<p id='n1771' class='pln'>1771</p>
+<p id='n1772' class='pln'>1772</p>
+<p id='n1773' class='pln'>1773</p>
+<p id='n1774' class='pln'>1774</p>
+<p id='n1775' class='pln'>1775</p>
+<p id='n1776' class='pln'>1776</p>
+<p id='n1777' class='pln'>1777</p>
+<p id='n1778' class='pln'>1778</p>
+<p id='n1779' class='pln'>1779</p>
+<p id='n1780' class='pln'>1780</p>
+<p id='n1781' class='pln'>1781</p>
+<p id='n1782' class='pln'>1782</p>
+<p id='n1783' class='pln'>1783</p>
+<p id='n1784' class='pln'>1784</p>
+<p id='n1785' class='pln'>1785</p>
+<p id='n1786' class='pln'>1786</p>
+<p id='n1787' class='pln'>1787</p>
+<p id='n1788' class='pln'>1788</p>
+<p id='n1789' class='pln'>1789</p>
+<p id='n1790' class='pln'>1790</p>
+<p id='n1791' class='pln'>1791</p>
+<p id='n1792' class='pln'>1792</p>
+<p id='n1793' class='pln'>1793</p>
+<p id='n1794' class='pln'>1794</p>
+<p id='n1795' class='pln'>1795</p>
+<p id='n1796' class='pln'>1796</p>
+<p id='n1797' class='pln'>1797</p>
+<p id='n1798' class='pln'>1798</p>
+<p id='n1799' class='pln'>1799</p>
+<p id='n1800' class='pln'>1800</p>
+<p id='n1801' class='pln'>1801</p>
+<p id='n1802' class='pln'>1802</p>
+<p id='n1803' class='pln'>1803</p>
+<p id='n1804' class='pln'>1804</p>
+<p id='n1805' class='pln'>1805</p>
+<p id='n1806' class='pln'>1806</p>
+<p id='n1807' class='pln'>1807</p>
+<p id='n1808' class='pln'>1808</p>
+<p id='n1809' class='pln'>1809</p>
+<p id='n1810' class='pln'>1810</p>
+<p id='n1811' class='pln'>1811</p>
+<p id='n1812' class='pln'>1812</p>
+<p id='n1813' class='pln'>1813</p>
+<p id='n1814' class='pln'>1814</p>
+<p id='n1815' class='pln'>1815</p>
+<p id='n1816' class='pln'>1816</p>
+<p id='n1817' class='pln'>1817</p>
+<p id='n1818' class='pln'>1818</p>
+<p id='n1819' class='pln'>1819</p>
+<p id='n1820' class='pln'>1820</p>
+<p id='n1821' class='pln'>1821</p>
+<p id='n1822' class='pln'>1822</p>
+<p id='n1823' class='pln'>1823</p>
+<p id='n1824' class='pln'>1824</p>
+<p id='n1825' class='pln'>1825</p>
+<p id='n1826' class='pln'>1826</p>
+<p id='n1827' class='pln'>1827</p>
+<p id='n1828' class='pln'>1828</p>
+<p id='n1829' class='pln'>1829</p>
+<p id='n1830' class='stm mis'>1830</p>
+<p id='n1831' class='stm mis'>1831</p>
+<p id='n1832' class='pln'>1832</p>
+<p id='n1833' class='pln'>1833</p>
+<p id='n1834' class='stm mis'>1834</p>
+<p id='n1835' class='pln'>1835</p>
+<p id='n1836' class='pln'>1836</p>
+<p id='n1837' class='stm mis'>1837</p>
+<p id='n1838' class='pln'>1838</p>
+<p id='n1839' class='pln'>1839</p>
+<p id='n1840' class='stm mis'>1840</p>
+<p id='n1841' class='pln'>1841</p>
+<p id='n1842' class='pln'>1842</p>
+<p id='n1843' class='stm mis'>1843</p>
+<p id='n1844' class='pln'>1844</p>
+<p id='n1845' class='pln'>1845</p>
+<p id='n1846' class='stm mis'>1846</p>
+<p id='n1847' class='pln'>1847</p>
+<p id='n1848' class='pln'>1848</p>
+<p id='n1849' class='pln'>1849</p>
+<p id='n1850' class='stm run hide_run'>1850</p>
+<p id='n1851' class='pln'>1851</p>
+<p id='n1852' class='pln'>1852</p>
+<p id='n1853' class='stm run hide_run'>1853</p>
+<p id='n1854' class='pln'>1854</p>
+<p id='n1855' class='stm mis'>1855</p>
+<p id='n1856' class='pln'>1856</p>
+<p id='n1857' class='pln'>1857</p>
+<p id='n1858' class='pln'>1858</p>
+<p id='n1859' class='pln'>1859</p>
+<p id='n1860' class='pln'>1860</p>
+<p id='n1861' class='pln'>1861</p>
+<p id='n1862' class='pln'>1862</p>
+<p id='n1863' class='pln'>1863</p>
+<p id='n1864' class='pln'>1864</p>
+<p id='n1865' class='pln'>1865</p>
+<p id='n1866' class='pln'>1866</p>
+<p id='n1867' class='pln'>1867</p>
+<p id='n1868' class='pln'>1868</p>
+<p id='n1869' class='pln'>1869</p>
+<p id='n1870' class='pln'>1870</p>
+<p id='n1871' class='pln'>1871</p>
+<p id='n1872' class='pln'>1872</p>
+<p id='n1873' class='pln'>1873</p>
+<p id='n1874' class='pln'>1874</p>
+<p id='n1875' class='pln'>1875</p>
+<p id='n1876' class='pln'>1876</p>
+<p id='n1877' class='stm mis'>1877</p>
+<p id='n1878' class='stm mis'>1878</p>
+<p id='n1879' class='stm mis'>1879</p>
+<p id='n1880' class='pln'>1880</p>
+<p id='n1881' class='stm run hide_run'>1881</p>
+<p id='n1882' class='stm mis'>1882</p>
+<p id='n1883' class='pln'>1883</p>
+<p id='n1884' class='pln'>1884</p>
+<p id='n1885' class='pln'>1885</p>
+<p id='n1886' class='pln'>1886</p>
+<p id='n1887' class='pln'>1887</p>
+<p id='n1888' class='stm mis'>1888</p>
+<p id='n1889' class='stm mis'>1889</p>
+<p id='n1890' class='pln'>1890</p>
+<p id='n1891' class='stm run hide_run'>1891</p>
+<p id='n1892' class='pln'>1892</p>
+<p id='n1893' class='pln'>1893</p>
+<p id='n1894' class='stm mis'>1894</p>
+<p id='n1895' class='pln'>1895</p>
+<p id='n1896' class='pln'>1896</p>
+<p id='n1897' class='pln'>1897</p>
+<p id='n1898' class='pln'>1898</p>
+<p id='n1899' class='pln'>1899</p>
+<p id='n1900' class='pln'>1900</p>
+<p id='n1901' class='pln'>1901</p>
+<p id='n1902' class='pln'>1902</p>
+<p id='n1903' class='pln'>1903</p>
+<p id='n1904' class='pln'>1904</p>
+<p id='n1905' class='pln'>1905</p>
+<p id='n1906' class='pln'>1906</p>
+<p id='n1907' class='pln'>1907</p>
+<p id='n1908' class='pln'>1908</p>
+<p id='n1909' class='pln'>1909</p>
+<p id='n1910' class='pln'>1910</p>
+<p id='n1911' class='pln'>1911</p>
+<p id='n1912' class='stm mis'>1912</p>
+<p id='n1913' class='stm mis'>1913</p>
+<p id='n1914' class='stm mis'>1914</p>
+<p id='n1915' class='stm mis'>1915</p>
+<p id='n1916' class='stm mis'>1916</p>
+<p id='n1917' class='stm mis'>1917</p>
+<p id='n1918' class='pln'>1918</p>
+<p id='n1919' class='stm run hide_run'>1919</p>
+<p id='n1920' class='pln'>1920</p>
+<p id='n1921' class='stm run hide_run'>1921</p>
+<p id='n1922' class='pln'>1922</p>
+<p id='n1923' class='stm mis'>1923</p>
+<p id='n1924' class='pln'>1924</p>
+<p id='n1925' class='pln'>1925</p>
+<p id='n1926' class='pln'>1926</p>
+<p id='n1927' class='pln'>1927</p>
+<p id='n1928' class='pln'>1928</p>
+<p id='n1929' class='pln'>1929</p>
+<p id='n1930' class='pln'>1930</p>
+<p id='n1931' class='pln'>1931</p>
+<p id='n1932' class='stm mis'>1932</p>
+<p id='n1933' class='stm mis'>1933</p>
+<p id='n1934' class='stm mis'>1934</p>
+<p id='n1935' class='stm mis'>1935</p>
+<p id='n1936' class='pln'>1936</p>
+<p id='n1937' class='stm run hide_run'>1937</p>
+<p id='n1938' class='pln'>1938</p>
+<p id='n1939' class='stm mis'>1939</p>
+<p id='n1940' class='pln'>1940</p>
+<p id='n1941' class='pln'>1941</p>
+<p id='n1942' class='pln'>1942</p>
+<p id='n1943' class='pln'>1943</p>
+<p id='n1944' class='pln'>1944</p>
+<p id='n1945' class='pln'>1945</p>
+<p id='n1946' class='pln'>1946</p>
+<p id='n1947' class='pln'>1947</p>
+<p id='n1948' class='stm mis'>1948</p>
+<p id='n1949' class='stm mis'>1949</p>
+<p id='n1950' class='stm mis'>1950</p>
+<p id='n1951' class='stm mis'>1951</p>
+<p id='n1952' class='stm mis'>1952</p>
+<p id='n1953' class='stm mis'>1953</p>
+<p id='n1954' class='pln'>1954</p>
+<p id='n1955' class='pln'>1955</p>
+<p id='n1956' class='exc'>1956</p>
+<p id='n1957' class='exc'>1957</p>
+<p id='n1958' class='pln'>1958</p>
+<p id='n1959' class='pln'>1959</p>
+<p id='n1960' class='pln'>1960</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot; Test cogapp.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='pln'><span class='str'>&nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>unittest</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>os</span><span class='op'>,</span> <span class='nam'>random</span><span class='op'>,</span> <span class='nam'>re</span><span class='op'>,</span> <span class='nam'>StringIO</span><span class='op'>,</span> <span class='nam'>stat</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>,</span> <span class='nam'>tempfile</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>path</span>&nbsp; &nbsp;&nbsp; <span class='com'># Non-standard, from http://www.jorendorff.com/articles/python/path</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>Cog</span><span class='op'>,</span> <span class='nam'>CogOptions</span><span class='op'>,</span> <span class='nam'>CogGenerator</span><span class='strut'>&nbsp;</span></p>
+<p id='t11' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>CogGeneratedError</span><span class='strut'>&nbsp;</span></p>
+<p id='t12' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>cogapp</span> <span class='key'>import</span> <span class='nam'>usage</span><span class='op'>,</span> <span class='nam'>__version__</span><span class='strut'>&nbsp;</span></p>
+<p id='t13' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>whiteutils</span> <span class='key'>import</span> <span class='nam'>reindentBlock</span><span class='strut'>&nbsp;</span></p>
+<p id='t14' class='stm run hide_run'><span class='key'>from</span> <span class='nam'>makefiles</span> <span class='key'>import</span> <span class='op'>*</span><span class='strut'>&nbsp;</span></p>
+<p id='t15' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t16' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>TestCase</span><span class='op'>(</span><span class='nam'>unittest</span><span class='op'>.</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t17' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Base class for all Cog test cases.&nbsp; Adds utility methods I like.</span><span class='strut'>&nbsp;</span></p>
+<p id='t18' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t19' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>excClass</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>,</span> <span class='nam'>callableObj</span><span class='op'>,</span> <span class='op'>*</span><span class='nam'>args</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kwargs</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t20' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Just like unittest.TestCase.assertRaises,</span><span class='strut'>&nbsp;</span></p>
+<p id='t21' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; but checks that the message is right too.</span><span class='strut'>&nbsp;</span></p>
+<p id='t22' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t23' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t24' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>callableObj</span><span class='op'>(</span><span class='op'>*</span><span class='nam'>args</span><span class='op'>,</span> <span class='op'>**</span><span class='nam'>kwargs</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t25' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>except</span> <span class='nam'>excClass</span><span class='op'>,</span> <span class='nam'>exc</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t26' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>excMsg</span> <span class='op'>=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>exc</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t27' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>msg</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t28' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># No message provided: it passes.</span><span class='strut'>&nbsp;</span></p>
+<p id='t29' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span>&nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t30' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>elif</span> <span class='nam'>excMsg</span> <span class='op'>==</span> <span class='nam'>msg</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t31' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Message provided, and we got the right message: it passes.</span><span class='strut'>&nbsp;</span></p>
+<p id='t32' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span><span class='strut'>&nbsp;</span></p>
+<p id='t33' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t34' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Message provided, and it didn&#39;t match: fail!</span><span class='strut'>&nbsp;</span></p>
+<p id='t35' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>failureException</span><span class='op'>(</span><span class='str'>&quot;Right exception, wrong message: got &#39;%s&#39; expected &#39;%s&#39;&quot;</span> <span class='op'>%</span> <span class='op'>(</span><span class='nam'>excMsg</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t36' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t37' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>hasattr</span><span class='op'>(</span><span class='nam'>excClass</span><span class='op'>,</span><span class='str'>&#39;__name__&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t38' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>excName</span> <span class='op'>=</span> <span class='nam'>excClass</span><span class='op'>.</span><span class='nam'>__name__</span><span class='strut'>&nbsp;</span></p>
+<p id='t39' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t40' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>excName</span> <span class='op'>=</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>excClass</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t41' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>raise</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>failureException</span><span class='op'>(</span><span class='str'>&quot;Expected to raise %s, didn&#39;t get an exception at all&quot;</span> <span class='op'>%</span> <span class='nam'>excName</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t42' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t43' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogTestsInMemory</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t44' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test cases for cogapp.Cog()</span><span class='strut'>&nbsp;</span></p>
+<p id='t45' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t46' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t47' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t48' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>strings</span> <span class='op'>=</span> <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
+<p id='t49' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t50' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39; &#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t51' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39; \t \t \tx&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t52' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;hello&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t53' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;the cat\nin the\nhat.&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t54' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;Horton\n\tHears A\n\t\tWho&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t55' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t56' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t57' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>s</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t58' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t59' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t60' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t61' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some text.</span><span class='strut'>&nbsp;</span></p>
+<p id='t62' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t63' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t64' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line one\\n&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t65' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line two&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t66' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t67' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gobbledegook.</span><span class='strut'>&nbsp;</span></p>
+<p id='t68' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t69' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue.</span><span class='strut'>&nbsp;</span></p>
+<p id='t70' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t71' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t72' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t73' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some text.</span><span class='strut'>&nbsp;</span></p>
+<p id='t74' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t75' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t76' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line one\\n&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t77' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line two&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t78' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t79' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</span><span class='strut'>&nbsp;</span></p>
+<p id='t80' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t81' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class='strut'>&nbsp;</span></p>
+<p id='t82' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t83' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue.</span><span class='strut'>&nbsp;</span></p>
+<p id='t84' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t85' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t86' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>outfile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t87' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t88' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmptyCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t89' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># The cog clause can be totally empty.&nbsp; Not sure why you&#39;d want it,</span><span class='strut'>&nbsp;</span></p>
+<p id='t90' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># but it works.</span><span class='strut'>&nbsp;</span></p>
+<p id='t91' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t92' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello</span><span class='strut'>&nbsp;</span></p>
+<p id='t93' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t94' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t95' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t96' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye</span><span class='strut'>&nbsp;</span></p>
+<p id='t97' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t98' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t99' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t100' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t101' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t102' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testMultipleCogs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t103' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># One file can have many cog chunks, even abutting each other.</span><span class='strut'>&nbsp;</span></p>
+<p id='t104' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t105' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t106' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk1&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t107' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t108' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk1</span><span class='strut'>&nbsp;</span></p>
+<p id='t109' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t110' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t111' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk2&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t112' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t113' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk2</span><span class='strut'>&nbsp;</span></p>
+<p id='t114' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t115' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; between chunks</span><span class='strut'>&nbsp;</span></p>
+<p id='t116' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t117' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;chunk3&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t118' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t119' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chunk3</span><span class='strut'>&nbsp;</span></p>
+<p id='t120' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t121' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t122' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t123' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t124' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t125' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t126' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTrimBlankLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t127' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t128' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t129' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;This is line one\\n&quot;, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t130' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t131' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class='strut'>&nbsp;</span></p>
+<p id='t132' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;&#39;, dedent=True, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t133' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line three&quot;, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t134' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t135' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</span><span class='strut'>&nbsp;</span></p>
+<p id='t136' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class='strut'>&nbsp;</span></p>
+<p id='t137' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line three</span><span class='strut'>&nbsp;</span></p>
+<p id='t138' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t139' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t140' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t141' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t142' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t143' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t144' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTrimEmptyBlankLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t145' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t146' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t147' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;This is line one\\n&quot;, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t148' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t149' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class='strut'>&nbsp;</span></p>
+<p id='t150' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;&#39;&#39;, dedent=True, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t151' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&#39;&#39;, dedent=True, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t152' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is line three&quot;, trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t153' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t154' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line one</span><span class='strut'>&nbsp;</span></p>
+<p id='t155' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line two</span><span class='strut'>&nbsp;</span></p>
+<p id='t156' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is line three</span><span class='strut'>&nbsp;</span></p>
+<p id='t157' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t158' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t159' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t160' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t161' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t162' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t163' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>test22EndOfLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t164' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># In Python 2.2, this cog file was not parsing because the</span><span class='strut'>&nbsp;</span></p>
+<p id='t165' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># last line is indented but didn&#39;t end with a newline.</span><span class='strut'>&nbsp;</span></p>
+<p id='t166' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t167' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t168' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t169' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t170' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;%d\\n&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t171' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t172' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0</span><span class='strut'>&nbsp;</span></p>
+<p id='t173' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1</span><span class='strut'>&nbsp;</span></p>
+<p id='t174' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2</span><span class='strut'>&nbsp;</span></p>
+<p id='t175' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t176' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t177' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t178' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t179' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t180' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t181' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testIndentedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t182' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t183' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class='strut'>&nbsp;</span></p>
+<p id='t184' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t185' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t186' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t187' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t188' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t189' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</span><span class='strut'>&nbsp;</span></p>
+<p id='t190' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</span><span class='strut'>&nbsp;</span></p>
+<p id='t191' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</span><span class='strut'>&nbsp;</span></p>
+<p id='t192' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t193' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class='strut'>&nbsp;</span></p>
+<p id='t194' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t195' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t196' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t197' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t198' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t199' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testPrefixedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t200' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t201' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t202' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t203' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t204' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t205' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t206' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</span><span class='strut'>&nbsp;</span></p>
+<p id='t207' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</span><span class='strut'>&nbsp;</span></p>
+<p id='t208' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</span><span class='strut'>&nbsp;</span></p>
+<p id='t209' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t210' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t211' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t212' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t213' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t214' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t215' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testPrefixedIndentedCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t216' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t217' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class='strut'>&nbsp;</span></p>
+<p id='t218' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t219' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp;&nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t220' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp;&nbsp; for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t221' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; &nbsp;&nbsp; cog.out(&quot;xy%d\\n&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t222' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t223' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy0</span><span class='strut'>&nbsp;</span></p>
+<p id='t224' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy1</span><span class='strut'>&nbsp;</span></p>
+<p id='t225' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy2</span><span class='strut'>&nbsp;</span></p>
+<p id='t226' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t227' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t228' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t229' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t230' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t231' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t232' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testBogusPrefixMatch</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t233' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t234' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class='strut'>&nbsp;</span></p>
+<p id='t235' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t236' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t237' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # This comment should not be clobbered by removing the pound sign.</span><span class='strut'>&nbsp;</span></p>
+<p id='t238' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t239' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;xy%d\\n&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t240' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t241' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy0</span><span class='strut'>&nbsp;</span></p>
+<p id='t242' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy1</span><span class='strut'>&nbsp;</span></p>
+<p id='t243' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xy2</span><span class='strut'>&nbsp;</span></p>
+<p id='t244' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t245' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t246' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t247' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t248' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t249' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t250' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoFinalNewline</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t251' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If the cog&#39;ed output has no final newline,</span><span class='strut'>&nbsp;</span></p>
+<p id='t252' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># it shouldn&#39;t eat up the cog terminator.</span><span class='strut'>&nbsp;</span></p>
+<p id='t253' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t254' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class='strut'>&nbsp;</span></p>
+<p id='t255' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t256' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t257' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t258' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;%d&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t259' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t260' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 012</span><span class='strut'>&nbsp;</span></p>
+<p id='t261' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t262' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class='strut'>&nbsp;</span></p>
+<p id='t263' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t264' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t265' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t266' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t267' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t268' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoOutputAtAll</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t269' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If there is absolutely no cog output, that&#39;s ok.</span><span class='strut'>&nbsp;</span></p>
+<p id='t270' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t271' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class='strut'>&nbsp;</span></p>
+<p id='t272' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t273' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; i = 1</span><span class='strut'>&nbsp;</span></p>
+<p id='t274' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t275' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t276' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class='strut'>&nbsp;</span></p>
+<p id='t277' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t278' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t279' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t280' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t281' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t282' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testPurelyBlankLine</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t283' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># If there is a blank line in the cog code with no whitespace</span><span class='strut'>&nbsp;</span></p>
+<p id='t284' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># prefix, that should be OK.</span><span class='strut'>&nbsp;</span></p>
+<p id='t285' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t286' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t287' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class='strut'>&nbsp;</span></p>
+<p id='t288' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t289' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import sys</span><span class='strut'>&nbsp;</span></p>
+<p id='t290' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;Hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t291' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $</span><span class='strut'>&nbsp;</span></p>
+<p id='t292' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.out(&quot;There&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t293' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t294' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HelloThere</span><span class='strut'>&nbsp;</span></p>
+<p id='t295' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t296' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class='strut'>&nbsp;</span></p>
+<p id='t297' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t298' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t299' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='str'>&#39;$&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t300' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t301' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t302' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmptyOutl</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t303' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Alexander Belchenko suggested the string argument to outl should</span><span class='strut'>&nbsp;</span></p>
+<p id='t304' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># be optional.&nbsp; Does it work?</span><span class='strut'>&nbsp;</span></p>
+<p id='t305' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t306' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t307' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prologue</span><span class='strut'>&nbsp;</span></p>
+<p id='t308' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t309' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;x&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t310' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl()</span><span class='strut'>&nbsp;</span></p>
+<p id='t311' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;y&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t312' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(trimblanklines=True)</span><span class='strut'>&nbsp;</span></p>
+<p id='t313' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;z&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t314' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t315' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x</span><span class='strut'>&nbsp;</span></p>
+<p id='t316' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t317' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; y</span><span class='strut'>&nbsp;</span></p>
+<p id='t318' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t319' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; z</span><span class='strut'>&nbsp;</span></p>
+<p id='t320' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t321' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; epilogue</span><span class='strut'>&nbsp;</span></p>
+<p id='t322' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t323' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t324' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t325' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t326' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t327' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testFirstLineNum</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t328' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t329' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t330' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t331' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;started at line number %d&quot; % cog.firstLineNum)</span><span class='strut'>&nbsp;</span></p>
+<p id='t332' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t333' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; started at line number 2</span><span class='strut'>&nbsp;</span></p>
+<p id='t334' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t335' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah</span><span class='strut'>&nbsp;</span></p>
+<p id='t336' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t337' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;and again at line %d&quot; % cog.firstLineNum)</span><span class='strut'>&nbsp;</span></p>
+<p id='t338' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t339' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and again at line 8</span><span class='strut'>&nbsp;</span></p>
+<p id='t340' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t341' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t342' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t343' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t344' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t345' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t346' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompactOneLineCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t347' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t348' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class='strut'>&nbsp;</span></p>
+<p id='t349' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog cog.outl(&quot;hello %d&quot; % (3*3*3*3)) ]]] looky!</span><span class='strut'>&nbsp;</span></p>
+<p id='t350' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get rid of this!</span><span class='strut'>&nbsp;</span></p>
+<p id='t351' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t352' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class='strut'>&nbsp;</span></p>
+<p id='t353' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t354' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t355' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t356' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class='strut'>&nbsp;</span></p>
+<p id='t357' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog cog.outl(&quot;hello %d&quot; % (3*3*3*3)) ]]] looky!</span><span class='strut'>&nbsp;</span></p>
+<p id='t358' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello 81</span><span class='strut'>&nbsp;</span></p>
+<p id='t359' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t360' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class='strut'>&nbsp;</span></p>
+<p id='t361' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t362' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t363' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t364' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>outfile</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t365' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t366' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testInsideOutCompact</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t367' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t368' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class='strut'>&nbsp;</span></p>
+<p id='t369' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey?: ]]] what is this? [[[cog strange!</span><span class='strut'>&nbsp;</span></p>
+<p id='t370' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get rid of this!</span><span class='strut'>&nbsp;</span></p>
+<p id='t371' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t372' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class='strut'>&nbsp;</span></p>
+<p id='t373' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t374' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t375' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&quot;infile.txt(2): Cog code markers inverted&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t376' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t377' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&quot;infile.txt&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t378' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t379' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSharingGlobals</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t380' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t381' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class='strut'>&nbsp;</span></p>
+<p id='t382' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog s=&quot;hey there&quot; ]]] looky!</span><span class='strut'>&nbsp;</span></p>
+<p id='t383' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t384' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more literal junk.</span><span class='strut'>&nbsp;</span></p>
+<p id='t385' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.outl(s) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t386' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t387' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class='strut'>&nbsp;</span></p>
+<p id='t388' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t389' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t390' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outfile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t391' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; first line</span><span class='strut'>&nbsp;</span></p>
+<p id='t392' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey: [[[cog s=&quot;hey there&quot; ]]] looky!</span><span class='strut'>&nbsp;</span></p>
+<p id='t393' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t394' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; more literal junk.</span><span class='strut'>&nbsp;</span></p>
+<p id='t395' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.outl(s) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t396' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hey there</span><span class='strut'>&nbsp;</span></p>
+<p id='t397' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t398' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; last line</span><span class='strut'>&nbsp;</span></p>
+<p id='t399' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t400' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t401' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t402' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>outfile</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t403' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t404' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogOptionsTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t405' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test the CogOptions class.</span><span class='strut'>&nbsp;</span></p>
+<p id='t406' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t407' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t408' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEquality</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t409' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t410' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t411' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t412' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-r&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t413' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertNotEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t414' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-r&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t415' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t416' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t417' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCloning</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t418' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t419' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;booey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39; /*x*/&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t420' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>o</span><span class='op'>.</span><span class='nam'>clone</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t421' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t422' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;huey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo=quux&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t423' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertNotEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t424' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>q</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t425' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>q</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;booey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39; /*x*/&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;huey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo=quux&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t426' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>p</span><span class='op'>,</span> <span class='nam'>q</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t427' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t428' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCombiningFlags</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t429' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Single-character flags can be combined.</span><span class='strut'>&nbsp;</span></p>
+<p id='t430' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t431' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>o</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-e&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t432' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span> <span class='op'>=</span> <span class='nam'>CogOptions</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t433' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>p</span><span class='op'>.</span><span class='nam'>parseArgs</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;-erz&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t434' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>o</span><span class='op'>,</span> <span class='nam'>p</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t435' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t436' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>FileStructureTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t437' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test cases to check that we&#39;re properly strict about the structure</span><span class='strut'>&nbsp;</span></p>
+<p id='t438' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; of files.</span><span class='strut'>&nbsp;</span></p>
+<p id='t439' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t440' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t441' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>=</span><span class='nam'>None</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t442' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t443' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t444' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>msg</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t445' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;infile.txt&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t446' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t447' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testBeginNoEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t448' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t449' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t450' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t451' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t452' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t453' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(2): Cog block begun but never ended.&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t454' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t455' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoEoo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t456' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t457' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t458' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t459' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t460' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t461' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t462' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(4): Missing &#39;[[[end]]]&#39; before end of file.&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t463' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t464' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t465' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t466' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t467' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t468' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t469' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t470' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;goodbye&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t471' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t472' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t473' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(5): Unexpected &#39;[[[cog&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t474' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t475' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testStartWithEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t476' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t477' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t478' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t479' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(1): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t480' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t481' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t482' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t483' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t484' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t485' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]&nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t486' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t487' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t488' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(5): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t489' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t490' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testStartWithEoo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t491' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t492' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t493' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t494' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(1): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t495' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t496' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t497' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t498' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t499' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t500' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t501' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t502' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t503' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(5): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t504' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t505' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoEnd</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t506' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t507' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t508' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t509' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t510' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t511' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(3): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t512' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t513' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t514' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t515' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&#39;hello&#39;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t516' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t517' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t518' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t519' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t520' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t521' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t522' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(7): Unexpected &#39;[[[end]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t523' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t524' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoBegins</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t525' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t526' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t527' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t528' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t529' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t530' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t531' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t532' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(2): Unexpected &#39;[[[cog&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t533' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t534' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t535' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t536' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t537' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t538' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t539' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t540' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t541' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t542' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t543' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t544' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t545' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(6): Unexpected &#39;[[[cog&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t546' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t547' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoEnds</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t548' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t549' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t550' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t551' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t552' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t553' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t554' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t555' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(4): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t556' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t557' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile2</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t558' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t559' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t560' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t561' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t562' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t563' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t564' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t565' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t566' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t567' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t568' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>isBad</span><span class='op'>(</span><span class='nam'>infile2</span><span class='op'>,</span> <span class='str'>&quot;infile.txt(8): Unexpected &#39;]]]&#39;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t569' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t570' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogErrorTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t571' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Test cases for cog.error().</span><span class='strut'>&nbsp;</span></p>
+<p id='t572' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t573' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t574' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t575' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t576' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.error(&quot;This ain&#39;t right!&quot;)]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t577' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t578' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t579' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t580' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t581' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogGeneratedError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t582' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;This ain&#39;t right!&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t583' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t584' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t585' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorNoMsg</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t586' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t587' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[cog cog.error()]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t588' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t589' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t590' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t591' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t592' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogGeneratedError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t593' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;Error raised by cog generator.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t594' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t595' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t596' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoErrorIfErrorNotCalled</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t597' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t598' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t599' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t600' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --for i in range(3):</span><span class='strut'>&nbsp;</span></p>
+<p id='t601' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; if i &gt; 10:</span><span class='strut'>&nbsp;</span></p>
+<p id='t602' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; &nbsp; &nbsp; cog.error(&quot;Something is amiss!&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t603' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&nbsp; &nbsp; cog.out(&quot;xx%d\\n&quot; % i)</span><span class='strut'>&nbsp;</span></p>
+<p id='t604' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t605' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx0</span><span class='strut'>&nbsp;</span></p>
+<p id='t606' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx1</span><span class='strut'>&nbsp;</span></p>
+<p id='t607' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xx2</span><span class='strut'>&nbsp;</span></p>
+<p id='t608' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t609' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t610' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t611' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t612' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t613' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t614' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogGeneratorGetCodeTests</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t615' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Unit tests against CogGenerator to see if its getCode() method works</span><span class='strut'>&nbsp;</span></p>
+<p id='t616' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; properly.</span><span class='strut'>&nbsp;</span></p>
+<p id='t617' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t618' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t619' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t620' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; All tests get a generator to use, and short same-length names for</span><span class='strut'>&nbsp;</span></p>
+<p id='t621' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the functions we&#39;re going to use.</span><span class='strut'>&nbsp;</span></p>
+<p id='t622' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t623' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span> <span class='op'>=</span> <span class='nam'>CogGenerator</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t624' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseMarker</span><span class='strut'>&nbsp;</span></p>
+<p id='t625' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>parseLine</span><span class='strut'>&nbsp;</span></p>
+<p id='t626' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t627' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmpty</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t628' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t629' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// ]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t630' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t631' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t632' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t633' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t634' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;&nbsp; print &quot;hello&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t635' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;&nbsp; print &quot;bye&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t636' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// ]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t637' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;print &quot;hello&quot;\nprint &quot;bye&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t638' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t639' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed1</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t640' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class='strut'>&nbsp;</span></p>
+<p id='t641' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog: print &quot;&quot;&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t642' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;// hello&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t643' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;// bye&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t644' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// &quot;&quot;&quot;)]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t645' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;hello\nbye&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t646' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t647' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed2</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t648' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class='strut'>&nbsp;</span></p>
+<p id='t649' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog: print &quot;&quot;&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t650' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;hello&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t651' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;bye&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t652' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// &quot;&quot;&quot;)]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t653' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;hello\nbye&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t654' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t655' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed3</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t656' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class='strut'>&nbsp;</span></p>
+<p id='t657' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t658' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;print &quot;&quot;&quot;hello&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t659' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;bye&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t660' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// &quot;&quot;&quot;)]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t661' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;print &quot;&quot;&quot;hello\nbye&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t662' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t663' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCompressed4</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t664' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># For a while, I supported compressed code blocks, but no longer.</span><span class='strut'>&nbsp;</span></p>
+<p id='t665' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// [[[cog: print &quot;&quot;&quot;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t666' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;hello&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t667' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;bye&quot;&quot;&quot;)&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t668' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;// ]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t669' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;hello\nbye&quot;&quot;&quot;)&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t670' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t671' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoCommonPrefixForMarkers</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t672' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># It&#39;s important to be able to use #if 0 to hide lines from a</span><span class='strut'>&nbsp;</span></p>
+<p id='t673' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># C++ compiler.</span><span class='strut'>&nbsp;</span></p>
+<p id='t674' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;#if 0 //[[[cog&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t675' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;\timport cog, sys&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t676' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t677' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>l</span><span class='op'>(</span><span class='str'>&#39;\tprint sys.argv&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t678' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>m</span><span class='op'>(</span><span class='str'>&#39;#endif //]]]&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t679' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>gen</span><span class='op'>.</span><span class='nam'>getCode</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&#39;import cog, sys\n\nprint sys.argv&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t680' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t681' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>TestCaseWithTempDir</span><span class='op'>(</span><span class='nam'>TestCase</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t682' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t683' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>newCog</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t684' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Initialize the cog members for another run.</span><span class='strut'>&nbsp;</span></p>
+<p id='t685' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t686' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Create a cog engine, and catch its output.</span><span class='strut'>&nbsp;</span></p>
+<p id='t687' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span> <span class='op'>=</span> <span class='nam'>Cog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t688' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t689' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stdout</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>,</span> <span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t690' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t691' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t692' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Create a temporary directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t693' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>=</span> <span class='nam'>path</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>(</span><span class='nam'>tempfile</span><span class='op'>.</span><span class='nam'>gettempdir</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>/</span> <span class='op'>(</span><span class='str'>&#39;testcog_tempdir_&#39;</span> <span class='op'>+</span> <span class='nam'>str</span><span class='op'>(</span><span class='nam'>random</span><span class='op'>.</span><span class='nam'>random</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='op'>[</span><span class='num'>2</span><span class='op'>:</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t694' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>.</span><span class='nam'>mkdir</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t695' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>olddir</span> <span class='op'>=</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>getcwd</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t696' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t697' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t698' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t699' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t700' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>os</span><span class='op'>.</span><span class='nam'>chdir</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>olddir</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t701' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Get rid of the temporary directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t702' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span><span class='op'>.</span><span class='nam'>rmtree</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t703' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t704' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFName1</span><span class='op'>,</span> <span class='nam'>sFName2</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t705' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName1</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName2</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>text</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t706' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t707' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>assertFileContent</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>sFName</span><span class='op'>,</span> <span class='nam'>sContent</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t708' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sAbsName</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='nam'>sFName</span><span class='strut'>&nbsp;</span></p>
+<p id='t709' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span> <span class='op'>=</span> <span class='nam'>open</span><span class='op'>(</span><span class='nam'>sAbsName</span><span class='op'>,</span> <span class='str'>&#39;rb&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t710' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>try</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t711' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>sFileContent</span> <span class='op'>=</span> <span class='nam'>f</span><span class='op'>.</span><span class='nam'>read</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t712' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>finally</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t713' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>f</span><span class='op'>.</span><span class='nam'>close</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t714' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>sFileContent</span><span class='op'>,</span> <span class='nam'>sContent</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t715' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t716' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t717' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ArgumentHandlingTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t718' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t719' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testArgumentFailure</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t720' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Return value 2 means usage problem.</span><span class='strut'>&nbsp;</span></p>
+<p id='t721' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-j&#39;</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>2</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t722' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t723' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;option -j not recognized&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t724' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t725' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-j&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t726' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t727' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNoDashOAndAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t728' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t729' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t730' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t731' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t732' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t733' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t734' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t735' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t736' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t737' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashV</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t738' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-v&#39;</span><span class='op'>]</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t739' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t740' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='str'>&#39;Cog version %s\n&#39;</span> <span class='op'>%</span> <span class='nam'>__version__</span><span class='op'>,</span> <span class='nam'>output</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t741' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t742' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>producesHelp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>,</span> <span class='nam'>args</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t743' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t744' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>argv</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>]</span> <span class='op'>+</span> <span class='nam'>args</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t745' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='nam'>argv</span><span class='op'>)</span> <span class='op'>==</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t746' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEquals</span><span class='op'>(</span><span class='nam'>usage</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t747' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t748' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashH</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t749' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># -h or -? anywhere on the command line should just print help.</span><span class='strut'>&nbsp;</span></p>
+<p id='t750' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;-h&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t751' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;-?&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t752' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;fooey.txt -h&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t753' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>producesHelp</span><span class='op'>(</span><span class='str'>&quot;-o -r @fooey.txt -? @booey.txt&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t754' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t755' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashOAndDashR</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t756' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t757' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfile.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t758' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t759' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t760' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t761' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t762' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t763' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;foo&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cogfile.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t764' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t765' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashZ</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t766' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t767' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t768' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t769' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t770' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t771' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t772' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t773' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t774' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t775' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t776' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t777' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t778' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t779' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t780' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t781' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t782' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t783' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class='strut'>&nbsp;</span></p>
+<p id='t784' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t785' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t786' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t787' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t788' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t789' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t790' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t791' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>&quot;test.cog(6): Missing &#39;[[[end]]]&#39; before end of file.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t792' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t793' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t794' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t795' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t796' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t797' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testBadDashD</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t798' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t799' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t800' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t801' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t802' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>TestFileHandling</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t803' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t804' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSimple</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t805' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t806' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t807' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t808' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t809' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t810' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t811' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t812' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t813' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t814' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t815' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t816' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t817' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t818' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t819' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t820' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t821' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t822' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t823' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class='strut'>&nbsp;</span></p>
+<p id='t824' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t825' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t826' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t827' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t828' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t829' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t830' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t831' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t832' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t833' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t834' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t835' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t836' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t837' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># -o sets the output file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t838' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t839' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t840' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t841' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t842' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t843' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t844' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t845' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t846' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t847' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t848' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t849' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t850' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t851' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t852' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t853' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t854' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t855' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t856' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class='strut'>&nbsp;</span></p>
+<p id='t857' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t858' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t859' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t860' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t861' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t862' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t863' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t864' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t865' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t866' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t867' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t868' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t869' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t870' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t871' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t872' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t873' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t874' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t875' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t876' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t877' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t878' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t879' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t880' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</span><span class='strut'>&nbsp;</span></p>
+<p id='t881' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t882' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t883' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t884' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t885' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t886' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t887' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t888' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t889' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t890' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t891' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t892' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t893' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t894' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t895' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye cruel world</span><span class='strut'>&nbsp;</span></p>
+<p id='t896' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t897' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t898' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t899' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t900' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t901' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t902' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t903' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t904' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t905' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t906' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t907' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t908' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t909' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t910' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;two.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t911' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t912' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t913' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t914' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNestedAtFile</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t915' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t916' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t917' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t918' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t919' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t920' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t921' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t922' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t923' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t924' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t925' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t926' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t927' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</span><span class='strut'>&nbsp;</span></p>
+<p id='t928' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t929' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t930' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t931' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t932' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t933' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t934' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t935' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t936' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t937' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t938' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t939' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t940' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;goodbye cruel world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t941' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t942' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; goodbye cruel world</span><span class='strut'>&nbsp;</span></p>
+<p id='t943' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t944' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t945' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t946' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t947' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t948' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t949' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @cogfiles2.txt</span><span class='strut'>&nbsp;</span></p>
+<p id='t950' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t951' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t952' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles2.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t953' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # This one too, please.</span><span class='strut'>&nbsp;</span></p>
+<p id='t954' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t955' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t956' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t957' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t958' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t959' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t960' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t961' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;two.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t962' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t963' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t964' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t965' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFileWithArgs</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t966' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t967' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;both.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t968' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t969' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t970' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t971' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t972' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t973' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t974' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t975' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t976' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t977' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t978' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t979' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t980' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one: True // ONE</span><span class='strut'>&nbsp;</span></p>
+<p id='t981' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two: False // ONE</span><span class='strut'>&nbsp;</span></p>
+<p id='t982' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t983' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t984' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t985' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t986' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t987' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t988' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t989' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t990' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one: False // TWO</span><span class='strut'>&nbsp;</span></p>
+<p id='t991' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two: True // TWO</span><span class='strut'>&nbsp;</span></p>
+<p id='t992' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t993' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t994' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t995' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t996' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t997' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -o both.one -s &#39; // ONE&#39; -D one=x</span><span class='strut'>&nbsp;</span></p>
+<p id='t998' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -o both.two -s &#39; // TWO&#39; -D two=x</span><span class='strut'>&nbsp;</span></p>
+<p id='t999' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1000' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1001' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1002' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1003' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1004' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;both.one&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1005' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;both.two&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1006' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1007' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFileWithBadArgCombo</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1008' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1009' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;both.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1010' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1011' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;one: %s&quot; % globals().has_key(&#39;one&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t1012' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;two: %s&quot; % globals().has_key(&#39;two&#39;))</span><span class='strut'>&nbsp;</span></p>
+<p id='t1013' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1014' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1015' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1016' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1017' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1018' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1019' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog </span><span class='strut'>&nbsp;</span></p>
+<p id='t1020' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; both.cog -d # This is bad: -r and -d</span><span class='strut'>&nbsp;</span></p>
+<p id='t1021' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1022' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1023' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1024' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1025' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1026' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1027' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testAtFileWithTrickyFilenames</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1028' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1029' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one 1.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1030' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;hello world&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1031' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1032' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1033' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1034' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;hello world&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1035' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world //xxx</span><span class='strut'>&nbsp;</span></p>
+<p id='t1036' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1037' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1038' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subdir&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1039' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subback.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1040' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with backslashes&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1041' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1042' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1043' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subfwd.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1044' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with slashes&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1045' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1046' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1047' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1048' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subback.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1049' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with backslashes&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1050' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; down deep with backslashes //yyy</span><span class='strut'>&nbsp;</span></p>
+<p id='t1051' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1052' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1053' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;subfwd.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1054' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;down deep with slashes&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1055' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; down deep with slashes //zzz</span><span class='strut'>&nbsp;</span></p>
+<p id='t1056' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1057' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1058' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1059' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1060' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;one 1.cog&#39; -s &#39; //xxx&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1061' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subdir\subback.cog -s &#39; //yyy&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1062' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; subdir/subfwd.cog -s &#39; //zzz&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1063' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1064' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1065' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1066' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1067' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1068' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one 1.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1069' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;subdir/subback.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;subback.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1070' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;subdir/subfwd.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;subfwd.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1071' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1072' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1073' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogTestLineEndings</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1074' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot;Tests for -U option (force LF line-endings in output).&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1075' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1076' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>lines_in</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;Some text.&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1077' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;//[[[cog&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1078' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog.outl(&quot;Cog text&quot;)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1079' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;//]]]&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1080' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;gobbledegook.&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1081' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;//[[[end]]]&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1082' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;epilogue.&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1083' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1084' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1085' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>lines_out</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;Some text.&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1086' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;//[[[cog&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1087' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;cog.outl(&quot;Cog text&quot;)&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1088' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;//]]]&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1089' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;Cog text&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1090' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;//[[[end]]]&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1091' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;epilogue.&#39;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1092' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1093' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1094' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputNativeEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1095' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;infile&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1096' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='str'>&#39;infile&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1097' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1098' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1099' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputLfEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1100' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;infile&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1101' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-U&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='str'>&#39;infile&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1102' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;outfile&#39;</span><span class='op'>,</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1103' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1104' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReplaceNativeEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1105' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1106' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1107' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>linesep</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1108' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1109' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReplaceLfEol</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1110' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='op'>{</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_in</span><span class='op'>)</span><span class='op'>}</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1111' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-U&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1112' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFileContent</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>lines_out</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1113' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1114' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1115' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>TestCaseWithImports</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1116' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; When running tests which import modules, the sys.modules list</span><span class='strut'>&nbsp;</span></p>
+<p id='t1117' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; leaks from one test to the next.&nbsp; This test case class scrubs</span><span class='strut'>&nbsp;</span></p>
+<p id='t1118' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; the list after each run to keep the tests isolated from each other.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1119' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1120' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1121' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1122' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1123' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sysmodulekeys</span> <span class='op'>=</span> <span class='nam'>list</span><span class='op'>(</span><span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1124' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1125' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1126' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>modstoscrub</span> <span class='op'>=</span> <span class='op'>[</span><span class='strut'>&nbsp;</span></p>
+<p id='t1127' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>modname</span><span class='strut'>&nbsp;</span></p>
+<p id='t1128' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>modname</span> <span class='key'>in</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='strut'>&nbsp;</span></p>
+<p id='t1129' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>modname</span> <span class='key'>not</span> <span class='key'>in</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>sysmodulekeys</span><span class='strut'>&nbsp;</span></p>
+<p id='t1130' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1131' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>modname</span> <span class='key'>in</span> <span class='nam'>modstoscrub</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1132' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>del</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>modules</span><span class='op'>[</span><span class='nam'>modname</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1133' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1134' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1135' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1136' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogIncludeTests</span><span class='op'>(</span><span class='nam'>TestCaseWithImports</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1137' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>dincludes</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1138' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1139' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1140' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1141' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1142' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1143' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1144' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1145' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1146' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1147' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1148' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1149' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mymodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1150' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1151' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1152' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1153' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test2.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1154' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1155' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mymodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1156' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1157' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mymodule in inc2</span><span class='strut'>&nbsp;</span></p>
+<p id='t1158' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1159' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1160' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1161' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;include&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1162' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;mymodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1163' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1164' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mymodule&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1165' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1166' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1167' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1168' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;inc2&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1169' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;mymodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1170' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1171' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mymodule in inc2&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1172' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1173' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1174' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1175' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;inc3&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1176' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;someothermodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1177' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1178' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is some other module.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1179' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1180' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1181' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1182' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1183' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testNeedIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1184' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Try it without the -I, to see that an ImportError happens.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1185' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1186' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>ImportError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1187' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1188' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1189' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that -I adds include directories properly.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1190' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1191' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1192' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1193' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1194' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoIncludePaths</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1195' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that two -I&#39;s add include directories properly.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1196' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1197' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;inc2&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1198' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1199' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1200' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTwoIncludePaths2</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1201' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that two -I&#39;s add include directories properly.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1202' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1203' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;inc2&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1204' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test2.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1205' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1206' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testUselessIncludePath</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1207' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that the search will continue past the first directory.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1208' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>dincludes</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1209' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;inc3&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;include&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1210' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1211' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1212' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSysPathIsUnchanged</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1213' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1214' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;bad.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1215' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.error(&quot;Oh no!&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1216' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1217' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1218' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;good.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1219' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(&quot;Oh yes!&quot;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1220' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1221' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1222' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1223' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1224' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1225' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged just by creating a cog engine?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1226' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>oldsyspath</span> <span class='op'>=</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>[</span><span class='op'>:</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1227' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1228' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1229' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a successful run?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1230' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1231' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;good.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1232' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1233' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a successful run with includes?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1234' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1235' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;good.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1236' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1237' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a successful run with two includes?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1238' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1239' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;good.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1240' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1241' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a failed run?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1242' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1243' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;bad.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1244' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1245' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a failed run with includes?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1246' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1247' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;bad.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1248' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1249' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Is it unchanged for a failed run with two includes?</span><span class='strut'>&nbsp;</span></p>
+<p id='t1250' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1251' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;xyzzy&#39;</span><span class='op'>,</span> <span class='str'>&#39;-I&#39;</span><span class='op'>,</span> <span class='str'>&#39;quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;bad.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1252' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>oldsyspath</span><span class='op'>,</span> <span class='nam'>sys</span><span class='op'>.</span><span class='nam'>path</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1253' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1254' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSubDirectories</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1255' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that relative paths on the command line work, with includes.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1256' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1257' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1258' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;code&#39;</span><span class='op'>:</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1259' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1260' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1261' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mysubmodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1262' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1263' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1264' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1265' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1266' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1267' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1268' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import mysubmodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1269' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1270' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hello from mysubmodule</span><span class='strut'>&nbsp;</span></p>
+<p id='t1271' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1272' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1273' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1274' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;mysubmodule.py&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1275' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; import cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1276' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;Hello from mysubmodule&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1277' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1278' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1279' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1280' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1281' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1282' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># We should be able to invoke cog without the -I switch, and it will</span><span class='strut'>&nbsp;</span></p>
+<p id='t1283' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># auto-include the current directory</span><span class='strut'>&nbsp;</span></p>
+<p id='t1284' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;code/test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1285' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;code/test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;code/test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1286' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1287' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1288' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>CogTestsInFiles</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1289' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1290' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testWarnIfNoCogCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1291' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that the -e switch warns if there is no Cog code.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1292' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1293' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;with.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1294' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1295' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;hello world&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1296' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1297' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hello world</span><span class='strut'>&nbsp;</span></p>
+<p id='t1298' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1299' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1300' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1301' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;without.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1302' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; There&#39;s no cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1303' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; code in this file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1304' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1305' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1306' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1307' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1308' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-e&#39;</span><span class='op'>,</span> <span class='str'>&#39;with.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1309' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1310' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;Warning&quot;</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1311' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1312' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-e&#39;</span><span class='op'>,</span> <span class='str'>&#39;without.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1313' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1314' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;Warning: no cog code found in without.cog&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1315' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1316' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;without.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1317' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1318' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;Warning&quot;</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1319' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1320' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testFileNameProps</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1321' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1322' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1323' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1324' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</span><span class='strut'>&nbsp;</span></p>
+<p id='t1325' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1326' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this is cog1.txt in, cog1.txt out</span><span class='strut'>&nbsp;</span></p>
+<p id='t1327' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1328' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1329' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1330' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1331' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1332' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</span><span class='strut'>&nbsp;</span></p>
+<p id='t1333' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1334' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is cog1.txt in, cog1.txt out</span><span class='strut'>&nbsp;</span></p>
+<p id='t1335' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1336' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1337' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1338' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1out.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1339' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1340' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This is %s in, %s out&quot; % (cog.inFile, cog.outFile))</span><span class='strut'>&nbsp;</span></p>
+<p id='t1341' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1342' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This is cog1.txt in, cog1out.txt out</span><span class='strut'>&nbsp;</span></p>
+<p id='t1343' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1344' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1345' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1346' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1347' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1348' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1349' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1350' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1351' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1out.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1352' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1out.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1out.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1353' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1354' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testGlobalsDontCrossFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1355' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Make sure that global values don&#39;t get shared between files.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1356' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1357' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1358' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog s = &quot;This was set in one.cog&quot; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1359' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1360' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(s) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1361' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1362' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1363' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1364' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;one.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1365' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog s = &quot;This was set in one.cog&quot; ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1366' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1367' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog cog.outl(s) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1368' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This was set in one.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1369' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1370' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1371' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1372' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1373' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1374' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1375' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(s)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1376' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; except NameError:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1377' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;s isn&#39;t set!&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1378' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1379' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1380' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1381' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1382' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;two.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1383' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1384' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1385' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(s)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1386' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; except NameError:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1387' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;s isn&#39;t set!&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1388' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1389' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; s isn&#39;t set!</span><span class='strut'>&nbsp;</span></p>
+<p id='t1390' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1391' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1392' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1393' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cogfiles.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1394' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Please run cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1395' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; one.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1396' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t1397' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; two.cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1398' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1399' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1400' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1401' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1402' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;@cogfiles.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1403' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;one.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;one.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1404' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;two.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;two.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1405' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1406' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;(changed)&quot;</span><span class='op'>)</span> <span class='op'>&gt;=</span> <span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1407' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1408' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testRemoveGeneratedOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1409' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1410' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1411' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1412' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1413' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1414' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1415' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1416' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1417' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1418' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1419' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1420' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1421' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1422' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1423' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1424' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1425' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1426' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1427' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out2&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1428' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1429' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1430' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1431' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1432' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1433' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1434' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1435' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1436' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1437' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1438' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Remove generated output.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1439' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-x&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1440' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1441' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1442' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Regenerate the generated output.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1443' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1444' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out2&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1445' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>newCog</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1446' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Remove the generated output again.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1447' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-x&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1448' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1449' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1450' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testMsgCall</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1451' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1452' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1453' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.msg(&quot;Hello there!&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1454' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1455' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1456' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1457' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>infile</span> <span class='op'>=</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1458' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>processString</span><span class='op'>(</span><span class='nam'>infile</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>infile</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1459' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1460' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>&quot;Message: Hello there!\n&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1461' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1462' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorMessageHasNoTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1463' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that a Cog error is printed to stderr with no traceback.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1464' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1465' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1466' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1467' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1468' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1469' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1470' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1471' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1472' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Xhis line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1473' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1474' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1475' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1476' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1477' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1478' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1479' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1480' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1481' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>stderr</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1482' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog1.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1483' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1484' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&quot;Cogging cog1.txt\n&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1485' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='op'>,</span> <span class='str'>&quot;cog1.txt(9): Output has been edited! Delete old checksum to unprotect.\n&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1486' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1487' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDashD</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1488' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1489' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1490' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1491' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1492' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1493' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1494' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1495' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1496' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defined fooey as kablooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t1497' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1498' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1499' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1500' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.einstein&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1501' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&quot;Defined fooey as &quot; + fooey) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1502' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Defined fooey as e=mc2</span><span class='strut'>&nbsp;</span></p>
+<p id='t1503' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1504' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1505' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1506' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1507' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1508' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-D&#39;</span><span class='op'>,</span> <span class='str'>&#39;fooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1509' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1510' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1511' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1512' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1513' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1514' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=e=mc2&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1515' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.einstein&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1516' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1517' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dbar=quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1518' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1519' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1520' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dbar=quux&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1521' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1522' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1523' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=gooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;-Dfooey=kablooey&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1524' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.kablooey&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1525' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1526' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testOutputToStdout</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1527' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1528' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1529' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[cog cog.outl(&#39;Hey there!&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1530' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1531' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1532' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1533' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1534' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1535' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>stderr</span> <span class='op'>=</span> <span class='nam'>StringIO</span><span class='op'>.</span><span class='nam'>StringIO</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1536' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>setOutput</span><span class='op'>(</span><span class='nam'>stderr</span><span class='op'>=</span><span class='nam'>stderr</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1537' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1538' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1539' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outerr</span> <span class='op'>=</span> <span class='nam'>stderr</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1540' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>&quot;--[[[cog cog.outl(&#39;Hey there!&#39;) ]]]\nHey there!\n--[[[end]]]\n&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1541' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>outerr</span><span class='op'>,</span> <span class='str'>&quot;&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1542' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1543' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSuffixOutputLines</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1544' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1545' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1546' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hey there.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1547' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\n&nbsp;&nbsp; \\nc&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1548' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1549' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Good bye.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1550' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1551' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1552' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1553' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Hey there.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1554' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\n&nbsp;&nbsp; \\nc&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1555' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a (foo)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1556' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b (foo)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1557' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t1558' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c (foo)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1559' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1560' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Good bye.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1561' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1562' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1563' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1564' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1565' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39; (foo)&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1566' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1567' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1568' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testEmptySuffix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1569' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1570' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1571' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\nc&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1572' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1573' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1574' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1575' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1576' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\nb\\nc&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1577' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a</span><span class='strut'>&nbsp;</span></p>
+<p id='t1578' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b</span><span class='strut'>&nbsp;</span></p>
+<p id='t1579' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c</span><span class='strut'>&nbsp;</span></p>
+<p id='t1580' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1581' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1582' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1583' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1584' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1585' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1586' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1587' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1588' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testHellishSuffix</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1589' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1590' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1591' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\n\\nb&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1592' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1593' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1594' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1595' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ;[[[cog cog.outl(&#39;a\\n\\nb&#39;) ]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1596' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a /\\n*+([)]&gt;&lt;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1597' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t1598' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b /\\n*+([)]&gt;&lt;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1599' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1600' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1601' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1602' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1603' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-z&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-s&#39;</span><span class='op'>,</span> <span class='str'>r&#39; /\n*+([)]&gt;&lt;&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1604' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1605' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1606' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>WritabilityTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1607' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1608' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1609' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1610' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1611' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1612' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1613' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1614' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1615' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1616' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1617' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1618' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1619' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1620' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1621' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1622' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1623' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1624' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1625' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1626' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1627' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1628' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1629' class='exc'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>name</span> <span class='op'>==</span> <span class='str'>&#39;nt&#39;</span><span class='op'>:</span>&nbsp; &nbsp;&nbsp; <span class='com'># pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t1630' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># for Windows</span><span class='strut'>&nbsp;</span></p>
+<p id='t1631' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_args</span> <span class='op'>=</span> <span class='str'>&#39;attrib -R %s&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1632' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_asterisk</span> <span class='op'>=</span> <span class='str'>&#39;attrib -R *&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1633' class='exc'>&nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span>&nbsp;&nbsp; <span class='com'># pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t1634' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># for unix-like</span><span class='strut'>&nbsp;</span></p>
+<p id='t1635' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_args</span> <span class='op'>=</span> <span class='str'>&#39;chmod +w %s&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1636' class='exc'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>cmd_w_asterisk</span> <span class='op'>=</span> <span class='str'>&#39;chmod +w *&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1637' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1638' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1639' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>setUp</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1640' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1641' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>tempdir</span> <span class='op'>/</span> <span class='str'>&#39;test.cog&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1642' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>stat</span><span class='op'>.</span><span class='nam'>S_IREAD</span><span class='op'>)</span>&nbsp;&nbsp; <span class='com'># Make the file readonly.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1643' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1644' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1645' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1646' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>.</span><span class='nam'>chmod</span><span class='op'>(</span><span class='nam'>stat</span><span class='op'>.</span><span class='nam'>S_IWRITE</span><span class='op'>)</span>&nbsp;&nbsp; <span class='com'># Make the file writable again.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1647' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>TestCaseWithTempDir</span><span class='op'>.</span><span class='nam'>tearDown</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1648' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1649' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyNoCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1650' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t1651' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>&quot;Can&#39;t overwrite test.cog&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1652' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1653' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1654' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1655' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyWithCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1656' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-w&#39;</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cmd_w_args</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1657' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1658' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1659' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1660' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyWithCommandWithNoSlot</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1661' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-w&#39;</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cmd_w_asterisk</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1662' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1663' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1664' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1665' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testReadonlyWithIneffectualCommand</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1666' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='strut'>&nbsp;</span></p>
+<p id='t1667' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>CogError</span><span class='op'>,</span> <span class='str'>&quot;Couldn&#39;t make test.cog writable&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1668' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-w&#39;</span><span class='op'>,</span> <span class='str'>&#39;echo %s&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1669' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>assert</span> <span class='key'>not</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>access</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>.</span><span class='nam'>testcog</span><span class='op'>,</span> <span class='nam'>os</span><span class='op'>.</span><span class='nam'>W_OK</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1670' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1671' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ChecksumTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1672' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1673' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCreateChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1674' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1675' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1676' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1677' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1678' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1679' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1680' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1681' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1682' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1683' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1684' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1685' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1686' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was generated.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1687' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1688' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1689' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1690' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was not.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1691' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1692' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1693' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1694' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1695' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1696' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1697' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1698' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testCheckChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1699' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1700' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1701' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1702' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1703' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1704' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1705' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1706' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1707' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1708' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1709' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1710' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1711' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1712' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1713' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1714' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1715' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1716' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1717' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1718' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1719' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1720' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1721' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1722' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1723' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1724' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1725' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1726' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1727' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testRemoveChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1728' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1729' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1730' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1731' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1732' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1733' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1734' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1735' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was generated.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1736' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: 8adb13fb59b996a1c7f0065ea9f3d893) fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t1737' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1738' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1739' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1740' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1741' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1742' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1743' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1744' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1745' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1746' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1747' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1748' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] fooey</span><span class='strut'>&nbsp;</span></p>
+<p id='t1749' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1750' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1751' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1752' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1753' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1754' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;cog1.txt&#39;</span><span class='op'>,</span> <span class='str'>&#39;cog1.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1755' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1756' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testTamperedChecksumOutput</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1757' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1758' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog1.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1759' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1760' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1761' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1762' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1763' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1764' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Xhis line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1765' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1766' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1767' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1768' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1769' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1770' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog2.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1771' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1772' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1773' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1774' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1775' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1776' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1777' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1778' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah!</span><span class='strut'>&nbsp;</span></p>
+<p id='t1779' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1780' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1781' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1782' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog3.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1783' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1784' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1785' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1786' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1787' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1788' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t1789' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1790' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1791' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1792' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1793' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1794' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1795' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog4.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1796' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1797' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1798' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1799' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1800' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1801' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1802' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1803' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah..</span><span class='strut'>&nbsp;</span></p>
+<p id='t1804' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1805' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1806' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1807' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog5.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1808' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1809' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1810' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1811' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1812' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1813' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; This line was newly</span><span class='strut'>&nbsp;</span></p>
+<p id='t1814' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; generated by cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1815' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; blah blah.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1816' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; extra</span><span class='strut'>&nbsp;</span></p>
+<p id='t1817' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1818' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1819' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1820' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;cog6.txt&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1821' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1822' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;This line was newly&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1823' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;generated by cog&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1824' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;blah blah.&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1825' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1826' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]] (checksum: a8540982e5ad6b95c9e9a184b26f4346)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1827' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1828' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1829' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1830' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1831' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1832' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog1.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1833' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog1.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1834' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1835' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog2.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1836' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog2.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1837' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1838' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog3.txt(10): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1839' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog3.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1840' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1841' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog4.txt(9): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1842' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog4.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1843' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1844' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog5.txt(10): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1845' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog5.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1846' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaisesMsg</span><span class='op'>(</span><span class='nam'>CogError</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1847' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&quot;cog6.txt(6): Output has been edited! Delete old checksum to unprotect.&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1848' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-c&#39;</span><span class='op'>,</span> <span class='str'>&quot;cog6.txt&quot;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1849' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1850' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>BlakeTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1851' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1852' class='pln'>&nbsp; &nbsp; <span class='com'># Blake Winton&#39;s contributions.&nbsp; &nbsp; &nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t1853' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDeleteCode</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1854' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># -o sets the output file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1855' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1856' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1857' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1858' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1859' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fnames = [&#39;DoSomething&#39;, &#39;DoAnotherThing&#39;, &#39;DoLastThing&#39;]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1860' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1861' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1862' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1863' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some Sample Code Here</span><span class='strut'>&nbsp;</span></p>
+<p id='t1864' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]Data Data</span><span class='strut'>&nbsp;</span></p>
+<p id='t1865' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Some More</span><span class='strut'>&nbsp;</span></p>
+<p id='t1866' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1867' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1868' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1869' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1870' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoSomething();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1871' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoAnotherThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1872' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoLastThing();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1873' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; And Some More</span><span class='strut'>&nbsp;</span></p>
+<p id='t1874' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1875' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1876' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1877' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1878' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-d&#39;</span><span class='op'>,</span> <span class='str'>&#39;-o&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1879' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1880' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1881' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testDeleteCodeWithDashRFails</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1882' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1883' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1884' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1885' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t1886' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1887' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1888' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1889' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertRaises</span><span class='op'>(</span><span class='nam'>CogUsageError</span><span class='op'>,</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>callableMain</span><span class='op'>,</span> <span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;-d&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1890' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1891' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testSettingGlobals</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1892' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Blake Winton contributed a way to set the globals that will be used in</span><span class='strut'>&nbsp;</span></p>
+<p id='t1893' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># processFile().</span><span class='strut'>&nbsp;</span></p>
+<p id='t1894' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1895' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1896' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1897' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1898' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for fn in fnames:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1899' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.outl(&quot;void %s();&quot; % fn)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1900' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1901' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Some Sample Code Here</span><span class='strut'>&nbsp;</span></p>
+<p id='t1902' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]&quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1903' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1904' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;test.out&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1905' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // This is my C++ file.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1906' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoBlake();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1907' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoWinton();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1908' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void DoContribution();</span><span class='strut'>&nbsp;</span></p>
+<p id='t1909' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1910' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1911' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1912' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1913' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span> <span class='op'>=</span> <span class='op'>{</span><span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1914' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>globals</span><span class='op'>[</span><span class='str'>&#39;fnames&#39;</span><span class='op'>]</span> <span class='op'>=</span> <span class='op'>[</span><span class='str'>&#39;DoBlake&#39;</span><span class='op'>,</span> <span class='str'>&#39;DoWinton&#39;</span><span class='op'>,</span> <span class='str'>&#39;DoContribution&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1915' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>options</span><span class='op'>.</span><span class='nam'>bDeleteCode</span> <span class='op'>=</span> <span class='nam'>True</span><span class='strut'>&nbsp;</span></p>
+<p id='t1916' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>processFile</span><span class='op'>(</span><span class='str'>&#39;test.cog&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='nam'>globals</span><span class='op'>=</span><span class='nam'>globals</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1917' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertFilesSame</span><span class='op'>(</span><span class='str'>&#39;test.cogged&#39;</span><span class='op'>,</span> <span class='str'>&#39;test.out&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1918' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1919' class='stm run hide_run'><span class='key'>class</span> <span class='nam'>ErrorCallTests</span><span class='op'>(</span><span class='nam'>TestCaseWithTempDir</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1920' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1921' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testErrorCallHasNoTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1922' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that cog.error() doesn&#39;t show a traceback.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1923' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1924' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;error.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1925' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1926' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cog.error(&quot;Something Bad!&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1927' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1928' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1929' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1930' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1931' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1932' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1933' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;error.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1934' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1935' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assertEqual</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>,</span> <span class='str'>&quot;Cogging error.cog\nError: Something Bad!\n&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1936' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1937' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>def</span> <span class='nam'>testRealErrorHasTraceback</span><span class='op'>(</span><span class='nam'>self</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1938' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='com'># Test that a genuine error does show a traceback.</span><span class='strut'>&nbsp;</span></p>
+<p id='t1939' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>d</span> <span class='op'>=</span> <span class='op'>{</span><span class='strut'>&nbsp;</span></p>
+<p id='t1940' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='str'>&#39;error.cog&#39;</span><span class='op'>:</span> <span class='str'>&quot;&quot;&quot;\</span><span class='strut'>&nbsp;</span></p>
+<p id='t1941' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t1942' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raise RuntimeError(&quot;Hey!&quot;)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1943' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1944' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //[[[end]]]</span><span class='strut'>&nbsp;</span></p>
+<p id='t1945' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;&quot;&quot;</span><span class='op'>,</span><span class='strut'>&nbsp;</span></p>
+<p id='t1946' class='pln'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='op'>}</span><span class='strut'>&nbsp;</span></p>
+<p id='t1947' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1948' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>makeFiles</span><span class='op'>(</span><span class='nam'>d</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1949' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>cog</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>[</span><span class='str'>&#39;argv0&#39;</span><span class='op'>,</span> <span class='str'>&#39;-r&#39;</span><span class='op'>,</span> <span class='str'>&#39;error.cog&#39;</span><span class='op'>]</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1950' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>output</span> <span class='op'>=</span> <span class='nam'>self</span><span class='op'>.</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>getvalue</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1951' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>msg</span> <span class='op'>=</span> <span class='str'>&#39;Actual output:\n&#39;</span> <span class='op'>+</span> <span class='nam'>output</span><span class='strut'>&nbsp;</span></p>
+<p id='t1952' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assert_</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>startswith</span><span class='op'>(</span><span class='str'>&quot;Cogging error.cog\nTraceback (most recent&quot;</span><span class='op'>)</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1953' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>self</span><span class='op'>.</span><span class='nam'>assert_</span><span class='op'>(</span><span class='nam'>output</span><span class='op'>.</span><span class='nam'>find</span><span class='op'>(</span><span class='str'>&quot;RuntimeError: Hey!&quot;</span><span class='op'>)</span> <span class='op'>&gt;</span> <span class='num'>0</span><span class='op'>,</span> <span class='nam'>msg</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1954' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1955' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1956' class='exc'><span class='key'>if</span> <span class='nam'>__name__</span> <span class='op'>==</span> <span class='str'>&#39;__main__&#39;</span><span class='op'>:</span>&nbsp; &nbsp; &nbsp; <span class='com'>#pragma: no cover</span><span class='strut'>&nbsp;</span></p>
+<p id='t1957' class='exc'>&nbsp; &nbsp; <span class='nam'>unittest</span><span class='op'>.</span><span class='nam'>main</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t1958' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t1959' class='pln'><span class='com'># Things not yet tested:</span><span class='strut'>&nbsp;</span></p>
+<p id='t1960' class='pln'><span class='com'># - A bad -w command (currently fails silently).</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/doc/sample_html/cogapp_whiteutils.html b/doc/sample_html/cogapp_whiteutils.html
index b2aaf86..621c89b 100644
--- a/doc/sample_html/cogapp_whiteutils.html
+++ b/doc/sample_html/cogapp_whiteutils.html
@@ -1,24 +1,14 @@
-<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<title>Coverage for cogapp\whiteutils</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script src='jquery-1.3.2.min.js'></script>
-<script>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- if (btn.hasClass("hide")) {
- $("#source ."+cls).removeClass("hide");
- btn.removeClass("hide");
- }
- else {
- $("#source ."+cls).addClass("hide");
- btn.addClass("hide");
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for cogapp\whiteutils: 92%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>cogapp\whiteutils</b> :
@@ -26,150 +16,153 @@ function toggle_lines(btn, cls) {
</h1>
<h2 class='stats'>
37 statements
- <span class='run hide' onclick='toggle_lines(this, "run")'>34 run</span>
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>34 run</span>
<span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
<span class='mis' onclick='toggle_lines(this, "mis")'>3 missing</span>
+
+ <span class='par run hide_run' onclick='toggle_lines(this, "par")'>2 partial</span>
+
</h2>
</div>
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='pln'>3</p>
-<p class='pln'>4</p>
-<p class='pln'>5</p>
-<p class='pln'>6</p>
-<p class='stm run hide'>7</p>
-<p class='pln'>8</p>
-<p class='stm run hide'>9</p>
-<p class='pln'>10</p>
-<p class='pln'>11</p>
-<p class='pln'>12</p>
-<p class='pln'>13</p>
-<p class='stm run hide'>14</p>
-<p class='pln'>15</p>
-<p class='stm run hide'>16</p>
-<p class='pln'>17</p>
-<p class='pln'>18</p>
-<p class='pln'>19</p>
-<p class='stm run hide'>20</p>
-<p class='pln'>21</p>
-<p class='pln'>22</p>
-<p class='pln'>23</p>
-<p class='stm run hide'>24</p>
-<p class='stm run hide'>25</p>
-<p class='stm run hide'>26</p>
-<p class='stm mis'>27</p>
-<p class='stm mis'>28</p>
-<p class='stm run hide'>29</p>
-<p class='pln'>30</p>
-<p class='stm run hide'>31</p>
-<p class='pln'>32</p>
-<p class='pln'>33</p>
-<p class='pln'>34</p>
-<p class='pln'>35</p>
-<p class='stm run hide'>36</p>
-<p class='stm run hide'>37</p>
-<p class='stm run hide'>38</p>
-<p class='stm run hide'>39</p>
-<p class='stm run hide'>40</p>
-<p class='stm run hide'>41</p>
-<p class='stm run hide'>42</p>
-<p class='stm run hide'>43</p>
-<p class='stm run hide'>44</p>
-<p class='stm run hide'>45</p>
-<p class='stm run hide'>46</p>
-<p class='pln'>47</p>
-<p class='stm run hide'>48</p>
-<p class='pln'>49</p>
-<p class='pln'>50</p>
-<p class='stm run hide'>51</p>
-<p class='stm mis'>52</p>
-<p class='stm run hide'>53</p>
-<p class='stm run hide'>54</p>
-<p class='stm run hide'>55</p>
-<p class='stm run hide'>56</p>
-<p class='stm run hide'>57</p>
-<p class='stm run hide'>58</p>
-<p class='stm run hide'>59</p>
-<p class='stm run hide'>60</p>
-<p class='stm run hide'>61</p>
-<p class='stm run hide'>62</p>
-<p class='stm run hide'>63</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='str'>&quot;&quot;&quot; Indentation utilities for Cog.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; </span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>import</span> <span class='nam'>re</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>def</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>strings</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Determine the whitespace prefix common to all non-blank lines</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; in the argument list.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Remove all blank lines from the list</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>strings</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>s</span> <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span> <span class='key'>if</span> <span class='nam'>s</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>!=</span> <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>strings</span><span class='op'>:</span> <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Find initial whitespace chunk in the first line.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># This is the best prefix we can hope for.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r&#39;\s*&#39;</span><span class='op'>,</span> <span class='nam'>strings</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Loop over the other strings, keeping only as much of</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># the prefix as matches each string.</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>s</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>i</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>prefix</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>def</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>,</span> <span class='nam'>newIndent</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Take a block of text as a string or list of lines.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Remove any common whitespace indentation.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Re-indent using newIndent, and return it as a single string.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>lines</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>oldIndent</span> <span class='op'>=</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>outLines</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>oldIndent</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>oldIndent</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='nam'>newIndent</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>newIndent</span> <span class='op'>+</span> <span class='nam'>l</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outLines</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>outLines</span><span class='op'>)</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'><span class='key'>def</span> <span class='nam'>commonPrefix</span><span class='op'>(</span><span class='nam'>strings</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Find the longest string that is a prefix of all the strings.</span><span class="strut">&nbsp;</span></p>
-<p class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>strings</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>strings</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>prefix</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>s</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span><span class='op'>:</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>i</span><span class='op'>]</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class="strut">&nbsp;</span></p>
-<p class='stm run hide'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>prefix</span><span class="strut">&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='pln'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='pln'>5</p>
+<p id='n6' class='pln'>6</p>
+<p id='n7' class='stm run hide_run'>7</p>
+<p id='n8' class='pln'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='pln'>10</p>
+<p id='n11' class='pln'>11</p>
+<p id='n12' class='pln'>12</p>
+<p id='n13' class='pln'>13</p>
+<p id='n14' class='stm run hide_run'>14</p>
+<p id='n15' class='pln'>15</p>
+<p id='n16' class='stm run hide_run'>16</p>
+<p id='n17' class='pln'>17</p>
+<p id='n18' class='pln'>18</p>
+<p id='n19' class='pln'>19</p>
+<p id='n20' class='stm run hide_run'>20</p>
+<p id='n21' class='pln'>21</p>
+<p id='n22' class='pln'>22</p>
+<p id='n23' class='pln'>23</p>
+<p id='n24' class='stm run hide_run'>24</p>
+<p id='n25' class='stm run hide_run'>25</p>
+<p id='n26' class='stm par run hide_run'>26</p>
+<p id='n27' class='stm mis'>27</p>
+<p id='n28' class='stm mis'>28</p>
+<p id='n29' class='stm run hide_run'>29</p>
+<p id='n30' class='pln'>30</p>
+<p id='n31' class='stm run hide_run'>31</p>
+<p id='n32' class='pln'>32</p>
+<p id='n33' class='pln'>33</p>
+<p id='n34' class='pln'>34</p>
+<p id='n35' class='pln'>35</p>
+<p id='n36' class='stm run hide_run'>36</p>
+<p id='n37' class='stm run hide_run'>37</p>
+<p id='n38' class='stm run hide_run'>38</p>
+<p id='n39' class='stm run hide_run'>39</p>
+<p id='n40' class='stm run hide_run'>40</p>
+<p id='n41' class='stm run hide_run'>41</p>
+<p id='n42' class='stm run hide_run'>42</p>
+<p id='n43' class='stm run hide_run'>43</p>
+<p id='n44' class='stm run hide_run'>44</p>
+<p id='n45' class='stm run hide_run'>45</p>
+<p id='n46' class='stm run hide_run'>46</p>
+<p id='n47' class='pln'>47</p>
+<p id='n48' class='stm run hide_run'>48</p>
+<p id='n49' class='pln'>49</p>
+<p id='n50' class='pln'>50</p>
+<p id='n51' class='stm par run hide_run'>51</p>
+<p id='n52' class='stm mis'>52</p>
+<p id='n53' class='stm run hide_run'>53</p>
+<p id='n54' class='stm run hide_run'>54</p>
+<p id='n55' class='stm run hide_run'>55</p>
+<p id='n56' class='stm run hide_run'>56</p>
+<p id='n57' class='stm run hide_run'>57</p>
+<p id='n58' class='stm run hide_run'>58</p>
+<p id='n59' class='stm run hide_run'>59</p>
+<p id='n60' class='stm run hide_run'>60</p>
+<p id='n61' class='stm run hide_run'>61</p>
+<p id='n62' class='stm run hide_run'>62</p>
+<p id='n63' class='stm run hide_run'>63</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='str'>&quot;&quot;&quot; Indentation utilities for Cog.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='str'>&nbsp; &nbsp; http://nedbatchelder.com/code/cog</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='pln'><span class='str'>&nbsp; &nbsp; </span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='str'>&nbsp; &nbsp; Copyright 2004-2009, Ned Batchelder.</span><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='pln'><span class='str'>&quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>re</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>strings</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Determine the whitespace prefix common to all non-blank lines</span><span class='strut'>&nbsp;</span></p>
+<p id='t11' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; in the argument list.</span><span class='strut'>&nbsp;</span></p>
+<p id='t12' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t13' class='pln'>&nbsp; &nbsp; <span class='com'># Remove all blank lines from the list</span><span class='strut'>&nbsp;</span></p>
+<p id='t14' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>strings</span> <span class='op'>=</span> <span class='op'>[</span><span class='nam'>s</span> <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span> <span class='key'>if</span> <span class='nam'>s</span><span class='op'>.</span><span class='nam'>strip</span><span class='op'>(</span><span class='op'>)</span> <span class='op'>!=</span> <span class='str'>&#39;&#39;</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t15' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t16' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>strings</span><span class='op'>:</span> <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t17' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t18' class='pln'>&nbsp; &nbsp; <span class='com'># Find initial whitespace chunk in the first line.</span><span class='strut'>&nbsp;</span></p>
+<p id='t19' class='pln'>&nbsp; &nbsp; <span class='com'># This is the best prefix we can hope for.</span><span class='strut'>&nbsp;</span></p>
+<p id='t20' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>re</span><span class='op'>.</span><span class='nam'>match</span><span class='op'>(</span><span class='str'>r&#39;\s*&#39;</span><span class='op'>,</span> <span class='nam'>strings</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='op'>)</span><span class='op'>.</span><span class='nam'>group</span><span class='op'>(</span><span class='num'>0</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t21' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t22' class='pln'>&nbsp; &nbsp; <span class='com'># Loop over the other strings, keeping only as much of</span><span class='strut'>&nbsp;</span></p>
+<p id='t23' class='pln'>&nbsp; &nbsp; <span class='com'># the prefix as matches each string.</span><span class='strut'>&nbsp;</span></p>
+<p id='t24' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t25' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t26' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>27</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>s</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t27' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>i</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t28' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
+<p id='t29' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>prefix</span><span class='strut'>&nbsp;</span></p>
+<p id='t30' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t31' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>reindentBlock</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>,</span> <span class='nam'>newIndent</span><span class='op'>=</span><span class='str'>&#39;&#39;</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t32' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Take a block of text as a string or list of lines.</span><span class='strut'>&nbsp;</span></p>
+<p id='t33' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Remove any common whitespace indentation.</span><span class='strut'>&nbsp;</span></p>
+<p id='t34' class='pln'><span class='str'>&nbsp; &nbsp; &nbsp; &nbsp; Re-indent using newIndent, and return it as a single string.</span><span class='strut'>&nbsp;</span></p>
+<p id='t35' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t36' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>isinstance</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>,</span> <span class='nam'>basestring</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t37' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>lines</span> <span class='op'>=</span> <span class='nam'>lines</span><span class='op'>.</span><span class='nam'>split</span><span class='op'>(</span><span class='str'>&#39;\n&#39;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t38' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>oldIndent</span> <span class='op'>=</span> <span class='nam'>whitePrefix</span><span class='op'>(</span><span class='nam'>lines</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t39' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>outLines</span> <span class='op'>=</span> <span class='op'>[</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t40' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>l</span> <span class='key'>in</span> <span class='nam'>lines</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t41' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>oldIndent</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t42' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>l</span><span class='op'>.</span><span class='nam'>replace</span><span class='op'>(</span><span class='nam'>oldIndent</span><span class='op'>,</span> <span class='str'>&#39;&#39;</span><span class='op'>,</span> <span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t43' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>l</span> <span class='key'>and</span> <span class='nam'>newIndent</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t44' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>l</span> <span class='op'>=</span> <span class='nam'>newIndent</span> <span class='op'>+</span> <span class='nam'>l</span><span class='strut'>&nbsp;</span></p>
+<p id='t45' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>outLines</span><span class='op'>.</span><span class='nam'>append</span><span class='op'>(</span><span class='nam'>l</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t46' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;\n&#39;</span><span class='op'>.</span><span class='nam'>join</span><span class='op'>(</span><span class='nam'>outLines</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t47' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t48' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>commonPrefix</span><span class='op'>(</span><span class='nam'>strings</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t49' class='pln'>&nbsp; &nbsp; <span class='str'>&quot;&quot;&quot; Find the longest string that is a prefix of all the strings.</span><span class='strut'>&nbsp;</span></p>
+<p id='t50' class='pln'><span class='str'>&nbsp; &nbsp; &quot;&quot;&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t51' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>52</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>strings</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t52' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t53' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>strings</span><span class='op'>[</span><span class='num'>0</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t54' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>s</span> <span class='key'>in</span> <span class='nam'>strings</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t55' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span> <span class='op'>&lt;</span> <span class='nam'>len</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t56' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>s</span><span class='op'>)</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t57' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='key'>not</span> <span class='nam'>prefix</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t58' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='str'>&#39;&#39;</span><span class='strut'>&nbsp;</span></p>
+<p id='t59' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='nam'>len</span><span class='op'>(</span><span class='nam'>prefix</span><span class='op'>)</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t60' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span> <span class='op'>!=</span> <span class='nam'>s</span><span class='op'>[</span><span class='nam'>i</span><span class='op'>]</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t61' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>prefix</span> <span class='op'>=</span> <span class='nam'>prefix</span><span class='op'>[</span><span class='op'>:</span><span class='nam'>i</span><span class='op'>]</span><span class='strut'>&nbsp;</span></p>
+<p id='t62' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
+<p id='t63' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>return</span> <span class='nam'>prefix</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/doc/sample_html/coverage_html.js b/doc/sample_html/coverage_html.js
new file mode 100644
index 0000000..b70712c
--- /dev/null
+++ b/doc/sample_html/coverage_html.js
@@ -0,0 +1,79 @@
+// Coverage.py HTML report browser code.
+
+// Loaded on index.html
+function index_page_ready($) {
+ // Look for a cookie containing previous sort settings:
+ sort_list = [];
+ cookie_name = "COVERAGE_INDEX_SORT";
+
+ // This almost makes it worth installing the jQuery cookie plugin:
+ if (document.cookie.indexOf(cookie_name) > -1) {
+ cookies = document.cookie.split(";");
+ for (var i=0; i < cookies.length; i++) {
+ parts = cookies[i].split("=")
+
+ if ($.trim(parts[0]) == cookie_name && parts[1]) {
+ sort_list = eval("[[" + parts[1] + "]]");
+ break;
+ }
+ }
+ }
+
+ // Create a new widget which exists only to save and restore
+ // the sort order:
+ $.tablesorter.addWidget({
+ id: "persistentSort",
+
+ // Format is called by the widget before displaying:
+ format: function(table) {
+ if (table.config.sortList.length == 0 && sort_list.length > 0) {
+ // This table hasn't been sorted before - we'll use
+ // our stored settings:
+ jQuery(table).trigger('sorton', [sort_list]);
+ }
+ else {
+ // This is not the first load - something has
+ // already defined sorting so we'll just update
+ // our stored value to match:
+ sort_list = table.config.sortList;
+ }
+ }
+ });
+
+ // Configure our tablesorter to handle the variable number of
+ // columns produced depending on report options:
+ var headers = {};
+ var col_count = jQuery("table.index > thead > tr > th").length;
+
+ headers[0] = { sorter: 'text' };
+ for (var i = 1; i < col_count-1; i++) {
+ headers[i] = { sorter: 'digit' };
+ }
+ headers[col_count-1] = { sorter: 'percent' };
+
+ // Enable the table sorter:
+ $("table.index").tablesorter({
+ widgets: ['persistentSort'],
+ headers: headers
+ });
+
+ // Watch for page unload events so we can save the final sort settings:
+ $(window).unload(function() {
+ document.cookie = cookie_name + "=" + sort_list.toString() + "; path=/"
+ });
+}
+
+// -- pyfile stuff --
+
+function toggle_lines(btn, cls) {
+ var btn = $(btn);
+ var hide = "hide_"+cls;
+ if (btn.hasClass(hide)) {
+ $("#source ."+cls).removeClass(hide);
+ btn.removeClass(hide);
+ }
+ else {
+ $("#source ."+cls).addClass(hide);
+ btn.addClass(hide);
+ }
+}
diff --git a/doc/sample_html/index.html b/doc/sample_html/index.html
index c44d355..d2fe7f2 100644
--- a/doc/sample_html/index.html
+++ b/doc/sample_html/index.html
@@ -1,83 +1,126 @@
-<!doctype html PUBLIC "-//W3C//DTD html 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<title>Coverage report</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
</head>
<body>
<div id='header'>
<div class='content'>
- <h1>Coverage report:
- <span class='pc_cov'>43%</span>
+ <h1>Coverage report:
+ <span class='pc_cov'>41%</span>
</h1>
</div>
</div>
<div id='index'>
-<table class='index'>
-<tr>
- <th class='name'>Module</th>
- <th>statements</th>
- <th>run</th>
- <th>excluded</th>
- <th>coverage</th>
-</tr>
-
-<tr>
- <td class='name'><a href='_ned_py_path.html'>c:\ned\py\path</a></td>
- <td>286</td>
- <td>114</td>
- <td>0</td>
- <td>40%</td>
-</tr>
-
-<tr>
- <td class='name'><a href='cogapp_cogapp.html'>cogapp\cogapp</a></td>
- <td>387</td>
- <td>219</td>
- <td>3</td>
- <td>57%</td>
-</tr>
-
-<tr>
- <td class='name'><a href='cogapp_makefiles.html'>cogapp\makefiles</a></td>
- <td>29</td>
- <td>6</td>
- <td>3</td>
- <td>21%</td>
-</tr>
-
-<tr>
- <td class='name'><a href='cogapp_test_cogapp.html'>cogapp\test_cogapp</a></td>
- <td>587</td>
- <td>195</td>
- <td>17</td>
- <td>33%</td>
-</tr>
-
-<tr>
- <td class='name'><a href='cogapp_whiteutils.html'>cogapp\whiteutils</a></td>
- <td>37</td>
- <td>34</td>
- <td>0</td>
- <td>92%</td>
-</tr>
-
-<tr class='total'>
-<td class='name'>Total</td>
-<td>1326</td>
-<td>568</td>
-<td>23</td>
-<td>43%</td>
-</tr>
-</table>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+
+ <th>branches</th>
+ <th>br exec</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>1326</td>
+ <td>568</td>
+ <td>23</td>
+
+ <td>305</td>
+ <td>104</td>
+
+ <td class='right'>41%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='_ned_py_path.html'>c:\ned\py\path</a></td>
+ <td>286</td>
+ <td>114</td>
+ <td>0</td>
+
+ <td>104</td>
+ <td>22</td>
+
+ <td class='right'>35%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='cogapp_cogapp.html'>cogapp\cogapp</a></td>
+ <td>387</td>
+ <td>219</td>
+ <td>3</td>
+
+ <td>153</td>
+ <td>54</td>
+
+ <td class='right'>51%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='cogapp_makefiles.html'>cogapp\makefiles</a></td>
+ <td>29</td>
+ <td>6</td>
+ <td>3</td>
+
+ <td>16</td>
+ <td>0</td>
+
+ <td class='right'>13%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='cogapp_test_cogapp.html'>cogapp\test_cogapp</a></td>
+ <td>587</td>
+ <td>195</td>
+ <td>17</td>
+
+ <td>4</td>
+ <td>2</td>
+
+ <td class='right'>33%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='cogapp_whiteutils.html'>cogapp\whiteutils</a></td>
+ <td>37</td>
+ <td>34</td>
+ <td>0</td>
+
+ <td>28</td>
+ <td>26</td>
+
+ <td class='right'>92%</td>
+ </tr>
+
+ </tbody>
+ </table>
</div>
<div id='footer'>
<div class='content'>
<p>
- <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.1</a>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3.1</a>
</p>
</div>
</div>
diff --git a/doc/sample_html/jquery.tablesorter.min.js b/doc/sample_html/jquery.tablesorter.min.js
new file mode 100644
index 0000000..64c7007
--- /dev/null
+++ b/doc/sample_html/jquery.tablesorter.min.js
@@ -0,0 +1,2 @@
+
+(function($){$.extend({tablesorter:new function(){var parsers=[],widgets=[];this.defaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",sortInitialOrder:"asc",sortMultiSortKey:"shiftKey",sortForce:null,sortAppend:null,textExtraction:"simple",parsers:{},widgets:[],widgetZebra:{css:["even","odd"]},headers:{},widthFixed:false,cancelSelection:true,sortList:[],headerList:[],dateFormat:"us",decimal:'.',debug:false};function benchmark(s,d){log(s+","+(new Date().getTime()-d.getTime())+"ms");}this.benchmark=benchmark;function log(s){if(typeof console!="undefined"&&typeof console.debug!="undefined"){console.log(s);}else{alert(s);}}function buildParserCache(table,$headers){if(table.config.debug){var parsersDebug="";}var rows=table.tBodies[0].rows;if(table.tBodies[0].rows[0]){var list=[],cells=rows[0].cells,l=cells.length;for(var i=0;i<l;i++){var p=false;if($.metadata&&($($headers[i]).metadata()&&$($headers[i]).metadata().sorter)){p=getParserById($($headers[i]).metadata().sorter);}else if((table.config.headers[i]&&table.config.headers[i].sorter)){p=getParserById(table.config.headers[i].sorter);}if(!p){p=detectParserForColumn(table,cells[i]);}if(table.config.debug){parsersDebug+="column:"+i+" parser:"+p.id+"\n";}list.push(p);}}if(table.config.debug){log(parsersDebug);}return list;};function detectParserForColumn(table,node){var l=parsers.length;for(var i=1;i<l;i++){if(parsers[i].is($.trim(getElementText(table.config,node)),table,node)){return parsers[i];}}return parsers[0];}function getParserById(name){var l=parsers.length;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==name.toLowerCase()){return parsers[i];}}return false;}function buildCache(table){if(table.config.debug){var cacheTime=new Date();}var totalRows=(table.tBodies[0]&&table.tBodies[0].rows.length)||0,totalCells=(table.tBodies[0].rows[0]&&table.tBodies[0].rows[0].cells.length)||0,parsers=table.config.parsers,cache={row:[],normalized:[]};for(var i=0;i<totalRows;++i){var c=table.tBodies[0].rows[i],cols=[];cache.row.push($(c));for(var j=0;j<totalCells;++j){cols.push(parsers[j].format(getElementText(table.config,c.cells[j]),table,c.cells[j]));}cols.push(i);cache.normalized.push(cols);cols=null;};if(table.config.debug){benchmark("Building cache for "+totalRows+" rows:",cacheTime);}return cache;};function getElementText(config,node){if(!node)return"";var t="";if(config.textExtraction=="simple"){if(node.childNodes[0]&&node.childNodes[0].hasChildNodes()){t=node.childNodes[0].innerHTML;}else{t=node.innerHTML;}}else{if(typeof(config.textExtraction)=="function"){t=config.textExtraction(node);}else{t=$(node).text();}}return t;}function appendToTable(table,cache){if(table.config.debug){var appendTime=new Date()}var c=cache,r=c.row,n=c.normalized,totalRows=n.length,checkCell=(n[0].length-1),tableBody=$(table.tBodies[0]),rows=[];for(var i=0;i<totalRows;i++){rows.push(r[n[i][checkCell]]);if(!table.config.appender){var o=r[n[i][checkCell]];var l=o.length;for(var j=0;j<l;j++){tableBody[0].appendChild(o[j]);}}}if(table.config.appender){table.config.appender(table,rows);}rows=null;if(table.config.debug){benchmark("Rebuilt table:",appendTime);}applyWidget(table);setTimeout(function(){$(table).trigger("sortEnd");},0);};function buildHeaders(table){if(table.config.debug){var time=new Date();}var meta=($.metadata)?true:false,tableHeadersRows=[];for(var i=0;i<table.tHead.rows.length;i++){tableHeadersRows[i]=0;};$tableHeaders=$("thead th",table);$tableHeaders.each(function(index){this.count=0;this.column=index;this.order=formatSortingOrder(table.config.sortInitialOrder);if(checkHeaderMetadata(this)||checkHeaderOptions(table,index))this.sortDisabled=true;if(!this.sortDisabled){$(this).addClass(table.config.cssHeader);}table.config.headerList[index]=this;});if(table.config.debug){benchmark("Built headers:",time);log($tableHeaders);}return $tableHeaders;};function checkCellColSpan(table,rows,row){var arr=[],r=table.tHead.rows,c=r[row].cells;for(var i=0;i<c.length;i++){var cell=c[i];if(cell.colSpan>1){arr=arr.concat(checkCellColSpan(table,headerArr,row++));}else{if(table.tHead.length==1||(cell.rowSpan>1||!r[row+1])){arr.push(cell);}}}return arr;};function checkHeaderMetadata(cell){if(($.metadata)&&($(cell).metadata().sorter===false)){return true;};return false;}function checkHeaderOptions(table,i){if((table.config.headers[i])&&(table.config.headers[i].sorter===false)){return true;};return false;}function applyWidget(table){var c=table.config.widgets;var l=c.length;for(var i=0;i<l;i++){getWidgetById(c[i]).format(table);}}function getWidgetById(name){var l=widgets.length;for(var i=0;i<l;i++){if(widgets[i].id.toLowerCase()==name.toLowerCase()){return widgets[i];}}};function formatSortingOrder(v){if(typeof(v)!="Number"){i=(v.toLowerCase()=="desc")?1:0;}else{i=(v==(0||1))?v:0;}return i;}function isValueInArray(v,a){var l=a.length;for(var i=0;i<l;i++){if(a[i][0]==v){return true;}}return false;}function setHeadersCss(table,$headers,list,css){$headers.removeClass(css[0]).removeClass(css[1]);var h=[];$headers.each(function(offset){if(!this.sortDisabled){h[this.column]=$(this);}});var l=list.length;for(var i=0;i<l;i++){h[list[i][0]].addClass(css[list[i][1]]);}}function fixColumnWidth(table,$headers){var c=table.config;if(c.widthFixed){var colgroup=$('<colgroup>');$("tr:first td",table.tBodies[0]).each(function(){colgroup.append($('<col>').css('width',$(this).width()));});$(table).prepend(colgroup);};}function updateHeaderSortCount(table,sortList){var c=table.config,l=sortList.length;for(var i=0;i<l;i++){var s=sortList[i],o=c.headerList[s[0]];o.count=s[1];o.count++;}}function multisort(table,sortList,cache){if(table.config.debug){var sortTime=new Date();}var dynamicExp="var sortWrapper = function(a,b) {",l=sortList.length;for(var i=0;i<l;i++){var c=sortList[i][0];var order=sortList[i][1];var s=(getCachedSortType(table.config.parsers,c)=="text")?((order==0)?"sortText":"sortTextDesc"):((order==0)?"sortNumeric":"sortNumericDesc");var e="e"+i;dynamicExp+="var "+e+" = "+s+"(a["+c+"],b["+c+"]); ";dynamicExp+="if("+e+") { return "+e+"; } ";dynamicExp+="else { ";}var orgOrderCol=cache.normalized[0].length-1;dynamicExp+="return a["+orgOrderCol+"]-b["+orgOrderCol+"];";for(var i=0;i<l;i++){dynamicExp+="}; ";}dynamicExp+="return 0; ";dynamicExp+="}; ";eval(dynamicExp);cache.normalized.sort(sortWrapper);if(table.config.debug){benchmark("Sorting on "+sortList.toString()+" and dir "+order+" time:",sortTime);}return cache;};function sortText(a,b){return((a<b)?-1:((a>b)?1:0));};function sortTextDesc(a,b){return((b<a)?-1:((b>a)?1:0));};function sortNumeric(a,b){return a-b;};function sortNumericDesc(a,b){return b-a;};function getCachedSortType(parsers,i){return parsers[i].type;};this.construct=function(settings){return this.each(function(){if(!this.tHead||!this.tBodies)return;var $this,$document,$headers,cache,config,shiftDown=0,sortOrder;this.config={};config=$.extend(this.config,$.tablesorter.defaults,settings);$this=$(this);$headers=buildHeaders(this);this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);var sortCSS=[config.cssDesc,config.cssAsc];fixColumnWidth(this);$headers.click(function(e){$this.trigger("sortStart");var totalRows=($this[0].tBodies[0]&&$this[0].tBodies[0].rows.length)||0;if(!this.sortDisabled&&totalRows>0){var $cell=$(this);var i=this.column;this.order=this.count++%2;if(!e[config.sortMultiSortKey]){config.sortList=[];if(config.sortForce!=null){var a=config.sortForce;for(var j=0;j<a.length;j++){if(a[j][0]!=i){config.sortList.push(a[j]);}}}config.sortList.push([i,this.order]);}else{if(isValueInArray(i,config.sortList)){for(var j=0;j<config.sortList.length;j++){var s=config.sortList[j],o=config.headerList[s[0]];if(s[0]==i){o.count=s[1];o.count++;s[1]=o.count%2;}}}else{config.sortList.push([i,this.order]);}};setTimeout(function(){setHeadersCss($this[0],$headers,config.sortList,sortCSS);appendToTable($this[0],multisort($this[0],config.sortList,cache));},1);return false;}}).mousedown(function(){if(config.cancelSelection){this.onselectstart=function(){return false};return false;}});$this.bind("update",function(){this.config.parsers=buildParserCache(this,$headers);cache=buildCache(this);}).bind("sorton",function(e,list){$(this).trigger("sortStart");config.sortList=list;var sortList=config.sortList;updateHeaderSortCount(this,sortList);setHeadersCss(this,$headers,sortList,sortCSS);appendToTable(this,multisort(this,sortList,cache));}).bind("appendCache",function(){appendToTable(this,cache);}).bind("applyWidgetId",function(e,id){getWidgetById(id).format(this);}).bind("applyWidgets",function(){applyWidget(this);});if($.metadata&&($(this).metadata()&&$(this).metadata().sortlist)){config.sortList=$(this).metadata().sortlist;}if(config.sortList.length>0){$this.trigger("sorton",[config.sortList]);}applyWidget(this);});};this.addParser=function(parser){var l=parsers.length,a=true;for(var i=0;i<l;i++){if(parsers[i].id.toLowerCase()==parser.id.toLowerCase()){a=false;}}if(a){parsers.push(parser);};};this.addWidget=function(widget){widgets.push(widget);};this.formatFloat=function(s){var i=parseFloat(s);return(isNaN(i))?0:i;};this.formatInt=function(s){var i=parseInt(s);return(isNaN(i))?0:i;};this.isDigit=function(s,config){var DECIMAL='\\'+config.decimal;var exp='/(^[+]?0('+DECIMAL+'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)'+DECIMAL+'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*'+DECIMAL+'0+$)/';return RegExp(exp).test($.trim(s));};this.clearTableBody=function(table){if($.browser.msie){function empty(){while(this.firstChild)this.removeChild(this.firstChild);}empty.apply(table.tBodies[0]);}else{table.tBodies[0].innerHTML="";}};}});$.fn.extend({tablesorter:$.tablesorter.construct});var ts=$.tablesorter;ts.addParser({id:"text",is:function(s){return true;},format:function(s){return $.trim(s.toLowerCase());},type:"text"});ts.addParser({id:"digit",is:function(s,table){var c=table.config;return $.tablesorter.isDigit(s,c);},format:function(s){return $.tablesorter.formatFloat(s);},type:"numeric"});ts.addParser({id:"currency",is:function(s){return/^[£$€?.]/.test(s);},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/[^0-9.]/g),""));},type:"numeric"});ts.addParser({id:"ipAddress",is:function(s){return/^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);},format:function(s){var a=s.split("."),r="",l=a.length;for(var i=0;i<l;i++){var item=a[i];if(item.length==2){r+="0"+item;}else{r+=item;}}return $.tablesorter.formatFloat(r);},type:"numeric"});ts.addParser({id:"url",is:function(s){return/^(https?|ftp|file):\/\/$/.test(s);},format:function(s){return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//),''));},type:"text"});ts.addParser({id:"isoDate",is:function(s){return/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);},format:function(s){return $.tablesorter.formatFloat((s!="")?new Date(s.replace(new RegExp(/-/g),"/")).getTime():"0");},type:"numeric"});ts.addParser({id:"percent",is:function(s){return/\%$/.test($.trim(s));},format:function(s){return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g),""));},type:"numeric"});ts.addParser({id:"usLongDate",is:function(s){return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));},format:function(s){return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"shortDate",is:function(s){return/\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);},format:function(s,table){var c=table.config;s=s.replace(/\-/g,"/");if(c.dateFormat=="us"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$1/$2");}else if(c.dateFormat=="uk"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/,"$3/$2/$1");}else if(c.dateFormat=="dd/mm/yy"||c.dateFormat=="dd-mm-yy"){s=s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/,"$1/$2/$3");}return $.tablesorter.formatFloat(new Date(s).getTime());},type:"numeric"});ts.addParser({id:"time",is:function(s){return/^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);},format:function(s){return $.tablesorter.formatFloat(new Date("2000/01/01 "+s).getTime());},type:"numeric"});ts.addParser({id:"metadata",is:function(s){return false;},format:function(s,table,cell){var c=table.config,p=(!c.parserMetadataName)?'sortValue':c.parserMetadataName;return $(cell).metadata()[p];},type:"numeric"});ts.addWidget({id:"zebra",format:function(table){if(table.config.debug){var time=new Date();}$("tr:visible",table.tBodies[0]).filter(':even').removeClass(table.config.widgetZebra.css[1]).addClass(table.config.widgetZebra.css[0]).end().filter(':odd').removeClass(table.config.widgetZebra.css[0]).addClass(table.config.widgetZebra.css[1]);if(table.config.debug){$.tablesorter.benchmark("Applying Zebra widget",time);}}});})(jQuery); \ No newline at end of file
diff --git a/doc/sample_html/style.css b/doc/sample_html/style.css
index 34ab10e..25e7d11 100644
--- a/doc/sample_html/style.css
+++ b/doc/sample_html/style.css
@@ -2,14 +2,14 @@
/* Page-wide styles */
html, body, h1, h2, h3, p, td, th {
margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- font-weight: inherit;
- font-style: inherit;
- font-size: 100%;
- font-family: inherit;
- vertical-align: baseline;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
}
/* Set baseline grid to 16 pt. */
@@ -20,7 +20,7 @@ body {
html>body {
font-size: 16px;
- }
+ }
/* Set base font size to 12/16 */
p {
@@ -89,9 +89,14 @@ h2.stats {
cursor: pointer;
border-color: #999 #ccc #ccc #999;
}
-.stats span.hide {
+.stats span.hide_run, .stats span.hide_exc,
+.stats span.hide_mis, .stats span.hide_par,
+.stats span.par.hide_run.hide_par {
border-color: #ccc #999 #999 #ccc;
}
+.stats span.par.hide_run {
+ border-color: #999 #ccc #ccc #999;
+}
/* Source file styles */
.linenos p {
@@ -100,7 +105,7 @@ h2.stats {
padding: 0 .5em;
color: #999999;
font-family: verdana, sans-serif;
- font-size: .625em; /* 10/16 */
+ font-size: .625em; /* 10/16 */
line-height: 1.6em; /* 16/10 */
}
td.text {
@@ -110,14 +115,14 @@ td.text {
margin: 0;
padding: 0 0 0 .5em;
border-left: 2px solid #ffffff;
- white-space: nowrap;
+ white-space: nowrap;
}
.text p.mis {
background: #ffdddd;
border-left: 2px solid #ff0000;
}
-.text p.run {
+.text p.run, .text p.run.hide_par {
background: #ddffdd;
border-left: 2px solid #00ff00;
}
@@ -125,40 +130,69 @@ td.text {
background: #eeeeee;
border-left: 2px solid #808080;
}
-.text p.hide {
+.text p.par, .text p.par.hide_run {
+ background: #ffffaa;
+ border-left: 2px solid #eeee99;
+ }
+.text p.hide_run, .text p.hide_exc, .text p.hide_mis, .text p.hide_par,
+.text p.hide_run.hide_par {
background: inherit;
}
+.text span.annotate {
+ font-family: georgia;
+ font-style: italic;
+ color: #666;
+ float: right;
+ padding-right: .5em;
+ }
+.text p.hide_par span.annotate {
+ display: none;
+ }
+
/* Syntax coloring */
.text .com {
- color: green;
- font-style: italic;
- line-height: 1px;
- }
+ color: green;
+ font-style: italic;
+ line-height: 1px;
+ }
.text .key {
- font-weight: bold;
- line-height: 1px;
- }
+ font-weight: bold;
+ line-height: 1px;
+ }
.text .str {
- color: #000080;
- }
+ color: #000080;
+ }
/* index styles */
#index td, #index th {
text-align: right;
- width: 6em;
- padding: .25em 0;
+ width: 5em;
+ padding: .25em .5em;
border-bottom: 1px solid #eee;
}
#index th {
font-style: italic;
color: #333;
border-bottom: 1px solid #ccc;
+ cursor: pointer;
+ }
+#index th:hover {
+ background: #eee;
+ border-bottom: 1px solid #999;
+ }
+#index td.left, #index th.left {
+ padding-left: 0;
+ }
+#index td.right, #index th.right {
+ padding-right: 0;
+ }
+#index th.headerSortDown, #index th.headerSortUp {
+ border-bottom: 1px solid #000;
}
#index td.name, #index th.name {
text-align: left;
width: auto;
- height: 1.5em;
}
#index td.name a {
text-decoration: none;
@@ -169,10 +203,12 @@ td.text {
color: #000;
}
#index tr.total {
- font-weight: bold;
}
#index tr.total td {
- padding: .25em 0;
+ font-weight: bold;
border-top: 1px solid #ccc;
border-bottom: none;
}
+#index tr.file:hover {
+ background: #eeeeee;
+ }
diff --git a/doc/subprocess.rst b/doc/subprocess.rst
new file mode 100644
index 0000000..d976f69
--- /dev/null
+++ b/doc/subprocess.rst
@@ -0,0 +1,47 @@
+.. _subprocess:
+
+======================
+Measuring subprocesses
+======================
+
+:history: 20100224T201800, new for 3.3.
+
+
+Complex test suites may spawn subprocesses to run tests, either to run them in
+parallel, or because subprocess behavior is an important part of the code under
+test. Measuring coverage in those subprocesses can be tricky because you have
+to modify the code spawning the process to invoke coverage.py.
+
+There's an easier way to do it: coverage.py includes a function,
+:func:`coverage.process_startup` designed to be invoked when Python starts. It
+examines the ``COVERAGE_PROCESS_START`` environment variable, and if it is set,
+begins coverage measurement. Its value will be used as the name of the
+:ref:`configuration file <config>` to use.
+
+When using this technique, be sure to set the parallel option to true so that
+multiple coverage.py runs will each write their data to a distinct file.
+
+
+Configuring Python for subprocess coverage
+------------------------------------------
+
+You can configure your Python installation to invoke the ``process_startup``
+function in two ways:
+
+#. Create or append to sitecustomize.py to add these lines::
+
+ import coverage
+ coverage.process_startup()
+
+#. Create a .pth file in your Python installation containing::
+
+ import coverage; coverage.process_startup()
+
+The sitecustomize.py technique is cleaner, but may involve modifying an existing
+sitecustomize.py, since there can be only one. If there is no sitecustomize.py
+already, you can create it in any directory on the Python path.
+
+The .pth technique seems like a hack, but works, and is documented behavior.
+On the plus side, you can create the file with any name you like so you don't
+have to coordinate with other .pth files. On the minus side, you have to create
+the file in a system-defined directory, so you may need privileges to write it.
diff --git a/howto.txt b/howto.txt
index ed58221..9c19577 100644
--- a/howto.txt
+++ b/howto.txt
@@ -7,7 +7,7 @@
- Pythons 2.3, 2.4, 2.5, 2.6, 3.1
- Version number in coverage/__init__.py
- 3.1a1, 3.1b1, 3.1c1, 3.1
-- Update CHANGES, including release date.
+- Update CHANGES.txt, including release date.
- Update docstring in setup.py, including "New in x.y:"
- Update docs
- Version, date, and changes in doc/changes.rst
@@ -17,8 +17,8 @@
cd C:\ned\cog\trunk
rmdir/s/q htmlcov
coverage run --branch cogapp\test_cogapp.py CogTestsInMemory
- coverage html -i -d htmlcov
- copy htmlcov\*.* C:\ned\coverage\trunk\doc\sample_html
+ coverage html -i
+ copy/y htmlcov\*.* C:\ned\coverage\trunk\doc\sample_html
- Build and publish docs:
$ make px publish
- Kits:
@@ -28,6 +28,8 @@
- $ make pypi
- upload the kits:
- $ allkits.cmd upload
+ # note: this seems to try to upload each file twice, so you'll have a
+ # successful upload, then a failure, but the file gets there.
- Visit http://pypi.python.org/pypi?%3Aaction=pkg_edit&name=coverage :
- show/hide the proper versions.
- Tag the tree
@@ -36,9 +38,17 @@
- Blog post?
- Update bitbucket:
- Issue tracker should get new version number in picker.
+ # Note: don't delete old version numbers: it marks changes on the tickets
+ # with that number.
- Announce on TIP.
+- Ask Christophe Zwerschke (cito@online.de) to build win64 kits.
+* Building
+
+- Create PythonXX\Lib\distutils\distutils.cfg::
+ [build]
+ compiler = mingw32
* Testing
@@ -46,9 +56,16 @@
- On Py 2.x: need setuptools installed
- On Py 3.x: need Distribute installed
+- Need nose installed
+- Need to have coverage dev-installed
- In each Python installation to be used, create a "coverage_test_egg.pth"
containing::
c:\ned\coverage\trunk\test\eggsrc\dist\covtestegg1-0.0.0-py2.5.egg
(or equivalent).
+
+- For complete coverage testing, in each Python installation, create a
+ "zzz_coverage_process_start.pth" containing::
+
+ import coverage; coverage.process_startup()
diff --git a/lab/cmd-opts.txt b/lab/cmd-opts.txt
index 87fd1e2..3397d64 100644
--- a/lab/cmd-opts.txt
+++ b/lab/cmd-opts.txt
@@ -1,48 +1,75 @@
coverage -e -x foo.py
coverage run foo.py
coverage run --timid foo.py
-coverage foo.py
+coverage foo.py *
-commands:
+global args:
- run -x
- --timid bool
- -p --parallel bool
- -L --stdlib bool
- --branch bool *
- -a --append bool
+ -h --help
+ --rcfile string
+ --version
+
+
+commands:
- erase -e
-
- combine -c
-
- report -r
- -m --missing bool
- -i --ignore-errors bool
- --omit list of string
-
annotate -a
-d --output-directory string
- -i --ignore-errors bool
- --omit list of string
-
+ -i --ignore-errors bool [report].ignore_errors
+ --omit list of string [report].omit
+
+ combine -c
+
+ debug
+
+ erase -e
+
+ help
+
html -b
-d --output-directory string
- -i --ignore-errors bool
- --omit list of string
+ -i --ignore-errors bool [report].ignore_errors
+ --omit list of string [report].omit
--red *
--green *
--style *
- help
+ report -r
+ -m --missing bool
+ -i --ignore-errors bool [report].ignore_errors
+ --omit list of string [report].omit
+
+ run -x
+ -a --append bool
+ --branch bool [run].branch
+ -L --pylib bool [run].cover_pylib
+ -p --parallel bool
+ --timid bool [run].timid
+
+
+ --include=directory * [run].include
+ --include=filename *
+ --include=module *
+ --exclude=directory * [run].exclude
+
+
+
+ xml
+ -i --ignore-errors bool [report].ignore_errors
+ --omit list of string [report].omit
+ -o string
+
+
byteprep *
-
- xml *
-
-
-
+
+
+Other config:
+
+ [report].exclude_lines list of string
+ [run].data_file string
+
+
Option scopes:
- Cmd line
diff --git a/lab/dataflow.txt b/lab/dataflow.txt
index 9ae891d..5796206 100644
--- a/lab/dataflow.txt
+++ b/lab/dataflow.txt
@@ -1,7 +1,7 @@
PyTracer.data:
{ filename: { lineno: None, .. }, ... }
OR: { filename: { (l1, l2): None, .. }, ... }
-
+
CoverageData.lines:
{ filename: { lineno: None, ...}, ... }
@@ -20,7 +20,7 @@ CoverageData.executed_files():
called by:
Reporter.find_code_units()
tests
-
+
CoverageData.executed_lines():
returns { lineno: None, ... }
called by:
diff --git a/mock.py b/mock.py
index 795ccc1..364a939 100644
--- a/mock.py
+++ b/mock.py
@@ -199,9 +199,16 @@ class _patch(object):
patching.__exit__()
patched.patchings = [self]
- patched.__name__ = func.__name__
+ try:
+ patched.__name__ = func.__name__
+ except TypeError:
+ pass # older Pythons don't let you change __name__
+ try:
+ firstlineno = func.func_code.co_firstlineno
+ except AttributeError:
+ firstlineno = func.__code__.co_firstlineno
patched.compat_co_firstlineno = getattr(func, "compat_co_firstlineno",
- func.func_code.co_firstlineno)
+ firstlineno)
return patched
@@ -255,7 +262,10 @@ def patch_object(target, attribute, new=DEFAULT, spec=None, create=False):
def patch(target, new=DEFAULT, spec=None, create=False):
try:
- target, attribute = target.rsplit('.', 1)
+ #target, attribute = target.rsplit('.', 1)
+ parts = target.split('.')
+ target = '.'.join(parts[:-1])
+ attribute = parts[-1]
except (TypeError, ValueError):
raise TypeError("Need a valid target to patch. You supplied: %r" % (target,))
target = _importer(target)
diff --git a/setup.py b/setup.py
index 6bd472a..e6645cf 100644
--- a/setup.py
+++ b/setup.py
@@ -12,6 +12,8 @@ Documentation is at `nedbatchelder.com <%s>`_. Code repository and issue
tracker are at `bitbucket.org <http://bitbucket.org/ned/coveragepy>`_.
New in 3.2: Branch coverage!
+
+New in 3.3: .coveragerc files
"""
# This file is used unchanged under all versions of Python, 2.x and 3.x.
@@ -33,7 +35,7 @@ import sys
# Distribute is a new fork of setuptools. It's supported on Py3.x, so we use
# it there, but stick with classic setuptools on Py2.x until Distribute becomes
# more accepted.
-if sys.hexversion > 0x03000000:
+if sys.version_info >= (3, 0):
from distribute_setup import use_setuptools
else:
from ez_setup import use_setuptools
@@ -88,7 +90,7 @@ setup(
# We need to get HTML assets from our htmlfiles dir.
zip_safe = False,
- author = 'Ned Batchelder',
+ author = 'Ned Batchelder and others',
author_email = 'ned@nedbatchelder.com',
description = doclines[0],
long_description = '\n'.join(doclines[2:]),
diff --git a/test/backtest.py b/test/backtest.py
index 58b1647..05a1e14 100644
--- a/test/backtest.py
+++ b/test/backtest.py
@@ -4,39 +4,33 @@
# (Redefining built-in blah)
# The whole point of this file is to redefine built-ins, so shut up about it.
-import os, sys
+import os
# Py2k and 3k don't agree on how to run commands in a subprocess.
try:
import subprocess
except ImportError:
- def run_command(cmd):
+ def run_command(cmd, status=0):
"""Run a command in a subprocess.
- Returns the exit code and the combined stdout and stderr.
+ Returns the exit status code and the combined stdout and stderr.
"""
_, stdouterr = os.popen4(cmd)
- return 0, stdouterr.read()
+ return status, stdouterr.read()
else:
- def run_command(cmd):
+ def run_command(cmd, status=0):
"""Run a command in a subprocess.
- Returns the exit code and the combined stdout and stderr.
+ Returns the exit status code and the combined stdout and stderr.
"""
- if sys.hexversion > 0x03000000 and cmd.startswith("coverage "):
- # We don't have a coverage command on 3.x, so fix it up to call the
- # script. Eventually we won't need this.
- script_path = os.path.join(sys.prefix, "Scripts", cmd)
- cmd = "python " + script_path
-
proc = subprocess.Popen(cmd, shell=True,
stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
)
- retcode = proc.wait()
+ status = proc.wait()
# Get the output, and canonicalize it to strings with newlines.
output = proc.stdout.read()
@@ -44,7 +38,7 @@ else:
output = output.decode('utf-8')
output = output.replace('\r', '')
- return retcode, output
+ return status, output
# No more execfile in Py3k
try:
diff --git a/test/backunittest.py b/test/backunittest.py
index 28978c7..3e521e5 100644
--- a/test/backunittest.py
+++ b/test/backunittest.py
@@ -17,11 +17,17 @@ class TestCase(unittest.TestCase):
the builtin `unittest` doesn't have them.
"""
+ if _need('assertTrue'):
+ def assertTrue(self, exp, msg=None):
+ """Assert that `exp` is true."""
+ if not exp:
+ self.fail(msg)
+
if _need('assertFalse'):
- def assertFalse(self, exp):
+ def assertFalse(self, exp, msg=None):
"""Assert that `exp` is false."""
if exp:
- self.fail()
+ self.fail(msg)
if _need('assertRaisesRegexp'):
def assertRaisesRegexp(self, excClass, regexp, callobj, *args, **kw):
@@ -36,7 +42,7 @@ class TestCase(unittest.TestCase):
if re.search(regexp, excMsg):
# Message provided, and we got the right one: it passes.
return
- else: #pragma: no cover
+ else:
# Message provided, and it didn't match: fail!
raise self.failureException(
"Right exception, wrong message: "
@@ -44,7 +50,7 @@ class TestCase(unittest.TestCase):
)
# No need to catch other exceptions: They'll fail the test all by
# themselves!
- else: #pragma: no cover
+ else:
if hasattr(excClass, '__name__'):
excName = excClass.__name__
else:
@@ -74,10 +80,10 @@ class TestCase(unittest.TestCase):
"""
# Adapted from Py3.1 unittest.
- self.assert_(isinstance(first, str), (
- 'First argument is not a string'))
- self.assert_(isinstance(second, str), (
- 'Second argument is not a string'))
+ self.assertTrue(isinstance(first, str),
+ 'First argument is not a string')
+ self.assertTrue(isinstance(second, str),
+ 'Second argument is not a string')
if first != second:
msg = ''.join(difflib.ndiff(first.splitlines(True),
diff --git a/test/coverage_coverage.py b/test/coverage_coverage.py
index b7f903b..1e1cba0 100644
--- a/test/coverage_coverage.py
+++ b/test/coverage_coverage.py
@@ -1,4 +1,16 @@
-"""Coverage-test Coverage.py itself."""
+"""Coverage-test Coverage.py itself.
+
+Run as:
+
+ $ python test/coverage_coverage.py run [NOSE_ARGS]
+
+to run and collect coverage, then:
+
+ $ python test/coverage_coverage.py report
+
+to put the HTML report into the htmlcov directory.
+
+"""
import os, shutil, sys
import nose
@@ -11,9 +23,9 @@ def run_tests_with_coverage():
tracer = os.environ.get('COVERAGE_TEST_TRACER', 'c')
version = "%s%s" % sys.version_info[:2]
- suffix = ".%s_%s" % (version, tracer)
+ suffix = "%s_%s" % (version, tracer)
- cov = coverage.coverage(branch=True, data_suffix=suffix)
+ cov = coverage.coverage(config_file="covcov.ini", data_suffix=suffix)
# Cheap trick: the coverage code itself is excluded from measurement, but
# if we clobber the cover_prefix in the coverage object, we can defeat the
# self-detection.
@@ -51,18 +63,10 @@ def report_on_combined_files():
print(":: Writing HTML report to %s/index.html" % HTML_DIR)
import coverage
- cov = coverage.coverage()
+ cov = coverage.coverage(config_file="covcov.ini")
cov.combine()
cov.save()
- cov.clear_exclude()
- cov.exclude("#pragma: no cover")
- cov.exclude("def __repr__")
- cov.exclude("if __name__ == .__main__.:")
- cov.exclude("raise AssertionError")
-
- cov.html_report(
- directory=HTML_DIR, ignore_errors=True, omit_prefixes=["mock"]
- )
+ cov.html_report(directory=HTML_DIR)
try:
diff --git a/test/coveragetest.py b/test/coveragetest.py
index 4471392..c82891e 100644
--- a/test/coveragetest.py
+++ b/test/coveragetest.py
@@ -38,8 +38,6 @@ class CoverageTest(TestCase):
self.old_dir = os.getcwd()
os.chdir(self.temp_dir)
- # Preserve changes to PYTHONPATH.
- self.old_pypath = os.environ.get('PYTHONPATH', '')
# Modules should be importable from this temp directory.
self.old_syspath = sys.path[:]
@@ -48,28 +46,70 @@ class CoverageTest(TestCase):
# Keep a counter to make every call to check_coverage unique.
self.n = 0
- # Use a Tee to capture stdout.
+ # Record environment variables that we changed with set_environ.
+ self.environ_undos = {}
+
+ # Capture stdout and stderr so we can examine them in tests.
+ # nose keeps stdout from littering the screen, so we can safely Tee it,
+ # but it doesn't capture stderr, so we don't want to Tee stderr to the
+ # real stderr, since it will interfere with our nice field of dots.
self.old_stdout = sys.stdout
self.captured_stdout = StringIO()
sys.stdout = Tee(sys.stdout, self.captured_stdout)
+ self.old_stderr = sys.stderr
+ self.captured_stderr = StringIO()
+ sys.stderr = self.captured_stderr
def tearDown(self):
if self.run_in_temp_dir:
- # Restore the original sys.path and PYTHONPATH
+ # Restore the original sys.path.
sys.path = self.old_syspath
- os.environ['PYTHONPATH'] = self.old_pypath
# Get rid of the temporary directory.
os.chdir(self.old_dir)
shutil.rmtree(self.temp_root)
- # Restore stdout.
+ # Restore the environment.
+ self.undo_environ()
+
+ # Restore stdout and stderr
sys.stdout = self.old_stdout
+ sys.stderr = self.old_stderr
+
+ def set_environ(self, name, value):
+ """Set an environment variable `name` to be `value`.
+
+ The environment variable is set, and record is kept that it was set,
+ so that `tearDown` can restore its original value.
+
+ """
+ if name not in self.environ_undos:
+ self.environ_undos[name] = os.environ.get(name)
+ os.environ[name] = value
+
+ def original_environ(self, name):
+ """The environment variable `name` from when the test started."""
+ if name in self.environ_undos:
+ return self.environ_undos[name]
+ else:
+ return os.environ.get(name)
+
+ def undo_environ(self):
+ """Undo all the changes made by `set_environ`."""
+ for name, value in self.environ_undos.items():
+ if value is None:
+ del os.environ[name]
+ else:
+ os.environ[name] = value
def stdout(self):
"""Return the data written to stdout during the test."""
return self.captured_stdout.getvalue()
+ def stderr(self):
+ """Return the data written to stderr during the test."""
+ return self.captured_stderr.getvalue()
+
def make_file(self, filename, text):
"""Create a temp file.
@@ -133,14 +173,22 @@ class CoverageTest(TestCase):
arcs.append((self._arcz_map[a], self._arcz_map[b]))
return sorted(arcs)
+ def assertEqualArcs(self, a1, a2):
+ """Assert that the arc lists `a1` and `a2` are equal."""
+ # Make them into multi-line strings so we can see what's going wrong.
+ s1 = "\n".join([repr(a) for a in a1]) + "\n"
+ s2 = "\n".join([repr(a) for a in a2]) + "\n"
+ self.assertMultiLineEqual(s1, s2)
+
def check_coverage(self, text, lines=None, missing="", excludes=None,
report="", arcz=None, arcz_missing="", arcz_unpredicted=""):
"""Check the coverage measurement of `text`.
The source `text` is run and measured. `lines` are the line numbers
- that are executable, `missing` are the lines not executed, `excludes`
- are regexes to match against for excluding lines, and `report` is
- the text of the measurement report.
+ that are executable, or a list of possible line numbers, any of which
+ could match. `missing` are the lines not executed, `excludes` are
+ regexes to match against for excluding lines, and `report` is the text
+ of the measurement report.
For arc measurement, `arcz` is a string that can be decoded into arcs
in the code (see `arcz_to_arcs` for the encoding scheme),
@@ -168,10 +216,10 @@ class CoverageTest(TestCase):
cov.exclude(exc)
cov.start()
- try:
+ try: # pragma: recursive coverage
# Import the python file, executing it.
mod = self.import_module(modname)
- finally:
+ finally: # pragma: recursive coverage
# Stop Coverage.
cov.stop()
@@ -182,8 +230,12 @@ class CoverageTest(TestCase):
analysis = cov._analyze(mod)
if lines is not None:
if type(lines[0]) == type(1):
+ # lines is just a list of numbers, it must match the statements
+ # found in the code.
self.assertEqual(analysis.statements, lines)
else:
+ # lines is a list of possible line number lists, one of them
+ # must match.
for line_list in lines:
if analysis.statements == line_list:
break
@@ -192,26 +244,27 @@ class CoverageTest(TestCase):
analysis.statements
)
- if missing is not None:
- if type(missing) == type(""):
- self.assertEqual(analysis.missing_formatted(), missing)
+ if type(missing) == type(""):
+ self.assertEqual(analysis.missing_formatted(), missing)
+ else:
+ for missing_list in missing:
+ if analysis.missing_formatted() == missing_list:
+ break
else:
- for missing_list in missing:
- if analysis.missing == missing_list:
- break
- else:
- self.fail("None of the missing choices matched %r" %
- analysis.missing_formatted()
- )
+ self.fail("None of the missing choices matched %r" %
+ analysis.missing_formatted()
+ )
if arcs is not None:
- self.assertEqual(analysis.arc_possibilities(), arcs)
+ self.assertEqualArcs(analysis.arc_possibilities(), arcs)
if arcs_missing is not None:
- self.assertEqual(analysis.arcs_missing(), arcs_missing)
+ self.assertEqualArcs(analysis.arcs_missing(), arcs_missing)
if arcs_unpredicted is not None:
- self.assertEqual(analysis.arcs_unpredicted(), arcs_unpredicted)
+ self.assertEqualArcs(
+ analysis.arcs_unpredicted(), arcs_unpredicted
+ )
if report:
frep = StringIO()
@@ -224,7 +277,7 @@ class CoverageTest(TestCase):
fname = os.path.join(*fparts)
return os.path.normcase(os.path.abspath(os.path.realpath(fname)))
- def command_line(self, args, ret=OK):
+ def command_line(self, args, ret=OK, _covpkg=None):
"""Run `args` through the command line.
Use this when you want to run the full coverage machinery, but in the
@@ -236,11 +289,12 @@ class CoverageTest(TestCase):
Returns None.
"""
- ret_actual = coverage.CoverageScript().command_line(shlex.split(args))
+ script = coverage.CoverageScript(_covpkg=_covpkg)
+ ret_actual = script.command_line(shlex.split(args))
self.assertEqual(ret_actual, ret)
def run_command(self, cmd):
- """ Run the command-line `cmd` in a subprocess, and print its output.
+ """Run the command-line `cmd` in a subprocess, and print its output.
Use this when you need to test the process behavior of coverage.
@@ -249,17 +303,35 @@ class CoverageTest(TestCase):
Returns the process' stdout text.
"""
+ _, output = self.run_command_status(cmd)
+ return output
+
+ def run_command_status(self, cmd, status=0):
+ """Run the command-line `cmd` in a subprocess, and print its output.
+
+ Use this when you need to test the process behavior of coverage.
+
+ Compare with `command_line`.
+
+ Returns a pair: the process' exit status and stdout text.
+
+ The `status` argument is returned as the status on older Pythons where
+ we can't get the actual exit status of the process.
+
+ """
# Add our test modules directory to PYTHONPATH. I'm sure there's too
# much path munging here, but...
here = os.path.dirname(self.nice_file(coverage.__file__, ".."))
testmods = self.nice_file(here, 'test/modules')
zipfile = self.nice_file(here, 'test/zipmods.zip')
- pypath = self.old_pypath
+ pypath = self.original_environ('PYTHONPATH')
if pypath:
pypath += os.pathsep
+ else:
+ pypath = ""
pypath += testmods + os.pathsep + zipfile
- os.environ['PYTHONPATH'] = pypath
+ self.set_environ('PYTHONPATH', pypath)
- _, output = run_command(cmd)
+ status, output = run_command(cmd, status=status)
print(output)
- return output
+ return status, output
diff --git a/test/farm/annotate/run_multi.py b/test/farm/annotate/run_multi.py
index 872f097..4e8252e 100644
--- a/test/farm/annotate/run_multi.py
+++ b/test/farm/annotate/run_multi.py
@@ -1,7 +1,7 @@
copy("src", "out_multi")
run("""
coverage -e -x multi.py
- coverage -a
+ coverage -a
""", rundir="out_multi")
compare("out_multi", "gold_multi", "*,cover")
clean("out_multi")
diff --git a/test/farm/html/gold_a/a.html b/test/farm/html/gold_a/a.html
index ed734e3..8bd4937 100644
--- a/test/farm/html/gold_a/a.html
+++ b/test/farm/html/gold_a/a.html
@@ -1,26 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
-<title>Coverage for a</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script type='text/javascript' src='jquery-1.3.2.min.js'></script>
-<script type='text/javascript'>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- var hide = "hide_"+cls;
- if (btn.hasClass(hide)) {
- $("#source ."+cls).removeClass(hide);
- btn.removeClass(hide);
- }
- else {
- $("#source ."+cls).addClass(hide);
- btn.addClass(hide);
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for a: 67%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>a</b> :
@@ -37,30 +25,30 @@ function toggle_lines(btn, cls) {
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='stm run hide_run'>3</p>
-<p class='pln'>4</p>
-<p class='stm run hide_run'>5</p>
-<p class='pln'>6</p>
-<p class='stm mis'>7</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='com'># A test file for HTML reporting by coverage.</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>if</span> <span class='num'>1</span> <span class='op'>&lt;</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># Needed a &lt; to look at HTML entities.</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>4</span><span class='strut'>&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='pln'>6</p>
+<p id='n7' class='stm mis'>7</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='com'># A test file for HTML reporting by coverage.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>if</span> <span class='num'>1</span> <span class='op'>&lt;</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'>&nbsp; &nbsp; <span class='com'># Needed a &lt; to look at HTML entities.</span><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='pln'><span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='stm mis'>&nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>4</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/test/farm/html/gold_a/index.html b/test/farm/html/gold_a/index.html
index cb91f5c..2db6f3d 100644
--- a/test/farm/html/gold_a/index.html
+++ b/test/farm/html/gold_a/index.html
@@ -1,71 +1,72 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
- <head>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
- <title>Coverage report</title>
- <link rel='stylesheet' href='style.css' type='text/css'>
- <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
- <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
- <script type='text/javascript' src='coverage_html.js'></script>
- <script type="text/javascript" charset="utf-8">
- jQuery(document).ready(index_page_ready);
- </script>
- </head>
- <body>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type="text/javascript" charset="utf-8">
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
- <div id='header'>
- <div class='content'>
- <h1>Coverage report:
- <span class='pc_cov'>100%</span>
- </h1>
- </div>
- </div>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>67%</span>
+ </h1>
+ </div>
+</div>
- <div id='index'>
- <table class='index'>
- <thead>
-
- <tr class='tablehead' title='Click to sort'>
- <th class='name left headerSortDown'>Module</th>
- <th>statements</th>
- <th>run</th>
- <th>excluded</th>
-
- <th class='right'>coverage</th>
- </tr>
- </thead>
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
- <tfoot>
- <tr class='total'>
- <td class='name left'>Total</td>
- <td>6</td>
- <td>6</td>
- <td>0</td>
-
- <td class='right'>100%</td>
- </tr>
- </tfoot>
- <tbody>
-
- <tr class='file'>
- <td class='name left'><a href='tabbed.html'>tabbed</a></td>
- <td>6</td>
- <td>6</td>
- <td>0</td>
-
- <td class='right'>100%</td>
- </tr>
-
- </tbody>
- </table>
- </div>
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>3</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>67%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='a.html'>a</a></td>
+ <td>3</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>67%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
- <div id='footer'>
- <div class='content'>
- <p>
- <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.2b4</a>
- </p>
- </div>
- </div>
- </body>
+</body>
</html>
diff --git a/test/farm/html/gold_b_branch/b.html b/test/farm/html/gold_b_branch/b.html
index fed2483..acb49f7 100644
--- a/test/farm/html/gold_b_branch/b.html
+++ b/test/farm/html/gold_b_branch/b.html
@@ -1,26 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
-<title>Coverage for b</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script type='text/javascript' src='jquery-1.3.2.min.js'></script>
-<script type='text/javascript'>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- var hide = "hide_"+cls;
- if (btn.hasClass(hide)) {
- $("#source ."+cls).removeClass(hide);
- btn.removeClass(hide);
- }
- else {
- $("#source ."+cls).addClass(hide);
- btn.addClass(hide);
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for b: 76%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>b</b> :
@@ -39,72 +27,72 @@ function toggle_lines(btn, cls) {
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='stm run hide_run'>3</p>
-<p class='pln'>4</p>
-<p class='stm par run hide_run'>5</p>
-<p class='stm run hide_run'>6</p>
-<p class='pln'>7</p>
-<p class='stm mis'>8</p>
-<p class='pln'>9</p>
-<p class='stm run hide_run'>10</p>
-<p class='pln'>11</p>
-<p class='stm run hide_run'>12</p>
-<p class='pln'>13</p>
-<p class='stm par run hide_run'>14</p>
-<p class='stm run hide_run'>15</p>
-<p class='pln'>16</p>
-<p class='stm run hide_run'>17</p>
-<p class='pln'>18</p>
-<p class='stm run hide_run'>19</p>
-<p class='pln'>20</p>
-<p class='stm par run hide_run'>21</p>
-<p class='stm run hide_run'>22</p>
-<p class='stm run hide_run'>23</p>
-<p class='pln'>24</p>
-<p class='stm mis'>25</p>
-<p class='stm run hide_run'>26</p>
-<p class='pln'>27</p>
-<p class='stm run hide_run'>28</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='com'># A test file for HTML reporting by coverage.</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>def</span> <span class='nam'>one</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># This will be a branch that misses the else.</span><span class='strut'>&nbsp;</span></p>
-<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>8</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>x</span> <span class='op'>&lt;</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>4</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='nam'>one</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>def</span> <span class='nam'>two</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># A missed else that branches to &quot;exit&quot;</span><span class='strut'>&nbsp;</span></p>
-<p class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>x</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='nam'>two</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>def</span> <span class='nam'>three_way</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='com'># for-else can be a three-way branch.</span><span class='strut'>&nbsp;</span></p>
-<p class='stm par run hide_run'><span class='annotate' title='no jumps to these line numbers'>25&nbsp;&nbsp; 26</span>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='num'>10</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>i</span> <span class='op'>==</span> <span class='num'>3</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'>&nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>23</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>return</span> <span class='num'>17</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='nam'>three_way</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm par run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm mis'>8</p>
+<p id='n9' class='pln'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+<p id='n11' class='pln'>11</p>
+<p id='n12' class='stm run hide_run'>12</p>
+<p id='n13' class='pln'>13</p>
+<p id='n14' class='stm par run hide_run'>14</p>
+<p id='n15' class='stm run hide_run'>15</p>
+<p id='n16' class='pln'>16</p>
+<p id='n17' class='stm run hide_run'>17</p>
+<p id='n18' class='pln'>18</p>
+<p id='n19' class='stm run hide_run'>19</p>
+<p id='n20' class='pln'>20</p>
+<p id='n21' class='stm par run hide_run'>21</p>
+<p id='n22' class='stm run hide_run'>22</p>
+<p id='n23' class='stm run hide_run'>23</p>
+<p id='n24' class='pln'>24</p>
+<p id='n25' class='stm mis'>25</p>
+<p id='n26' class='stm run hide_run'>26</p>
+<p id='n27' class='pln'>27</p>
+<p id='n28' class='stm run hide_run'>28</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='com'># A test file for HTML reporting by coverage.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>one</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'>&nbsp; &nbsp; <span class='com'># This will be a branch that misses the else.</span><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>8</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>x</span> <span class='op'>&lt;</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'>&nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>4</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='nam'>one</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t11' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t12' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>two</span><span class='op'>(</span><span class='nam'>x</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t13' class='pln'>&nbsp; &nbsp; <span class='com'># A missed else that branches to &quot;exit&quot;</span><span class='strut'>&nbsp;</span></p>
+<p id='t14' class='stm par run hide_run'><span class='annotate' title='no jump to this line number'>exit</span>&nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>x</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t15' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
+<p id='t16' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t17' class='stm run hide_run'><span class='nam'>two</span><span class='op'>(</span><span class='num'>1</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+<p id='t18' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t19' class='stm run hide_run'><span class='key'>def</span> <span class='nam'>three_way</span><span class='op'>(</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t20' class='pln'>&nbsp; &nbsp; <span class='com'># for-else can be a three-way branch.</span><span class='strut'>&nbsp;</span></p>
+<p id='t21' class='stm par run hide_run'><span class='annotate' title='no jumps to these line numbers'>25&nbsp;&nbsp; 26</span>&nbsp; &nbsp; <span class='key'>for</span> <span class='nam'>i</span> <span class='key'>in</span> <span class='nam'>range</span><span class='op'>(</span><span class='num'>10</span><span class='op'>)</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t22' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>if</span> <span class='nam'>i</span> <span class='op'>==</span> <span class='num'>3</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t23' class='stm run hide_run'>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>break</span><span class='strut'>&nbsp;</span></p>
+<p id='t24' class='pln'>&nbsp; &nbsp; <span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t25' class='stm mis'>&nbsp; &nbsp; &nbsp; &nbsp; <span class='key'>return</span> <span class='num'>23</span><span class='strut'>&nbsp;</span></p>
+<p id='t26' class='stm run hide_run'>&nbsp; &nbsp; <span class='key'>return</span> <span class='num'>17</span><span class='strut'>&nbsp;</span></p>
+<p id='t27' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t28' class='stm run hide_run'><span class='nam'>three_way</span><span class='op'>(</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/test/farm/html/gold_b_branch/index.html b/test/farm/html/gold_b_branch/index.html
index 0100602..84648cd 100644
--- a/test/farm/html/gold_b_branch/index.html
+++ b/test/farm/html/gold_b_branch/index.html
@@ -1,80 +1,81 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
- <head>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
- <title>Coverage report</title>
- <link rel='stylesheet' href='style.css' type='text/css'>
- <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
- <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
- <script type='text/javascript' src='coverage_html.js'></script>
- <script type="text/javascript" charset="utf-8">
- jQuery(document).ready(index_page_ready);
- </script>
- </head>
- <body>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type="text/javascript" charset="utf-8">
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
- <div id='header'>
- <div class='content'>
- <h1>Coverage report:
- <span class='pc_cov'>77%</span>
- </h1>
- </div>
- </div>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>76%</span>
+ </h1>
+ </div>
+</div>
- <div id='index'>
- <table class='index'>
- <thead>
-
- <tr class='tablehead' title='Click to sort'>
- <th class='name left headerSortDown'>Module</th>
- <th>statements</th>
- <th>run</th>
- <th>excluded</th>
-
- <th>branches</th>
- <th>br exec</th>
-
- <th class='right'>coverage</th>
- </tr>
- </thead>
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
- <tfoot>
- <tr class='total'>
- <td class='name left'>Total</td>
- <td>9</td>
- <td>8</td>
- <td>0</td>
-
- <td>4</td>
- <td>2</td>
-
- <td class='right'>77%</td>
- </tr>
- </tfoot>
- <tbody>
-
- <tr class='file'>
- <td class='name left'><a href='b.html'>b</a></td>
- <td>9</td>
- <td>8</td>
- <td>0</td>
-
- <td>4</td>
- <td>2</td>
-
- <td class='right'>77%</td>
- </tr>
-
- </tbody>
- </table>
- </div>
+ <th>branches</th>
+ <th>br exec</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>16</td>
+ <td>14</td>
+ <td>0</td>
+
+ <td>9</td>
+ <td>5</td>
+
+ <td class='right'>76%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='b.html'>b</a></td>
+ <td>16</td>
+ <td>14</td>
+ <td>0</td>
+
+ <td>9</td>
+ <td>5</td>
+
+ <td class='right'>76%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
- <div id='footer'>
- <div class='content'>
- <p>
- <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.2b4</a>
- </p>
- </div>
- </div>
- </body>
+</body>
</html>
diff --git a/test/farm/html/gold_omit_1/index.html b/test/farm/html/gold_omit_1/index.html
new file mode 100644
index 0000000..6a4086b
--- /dev/null
+++ b/test/farm/html/gold_omit_1/index.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>100%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>14</td>
+ <td>14</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='m1.html'>m1</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='m2.html'>m2</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='m3.html'>m3</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='main.html'>main</a></td>
+ <td>8</td>
+ <td>8</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_1/m1.html b/test/farm/html/gold_omit_1/m1.html
new file mode 100644
index 0000000..ba3a527
--- /dev/null
+++ b/test/farm/html/gold_omit_1/m1.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m1: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m1</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m1a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m1b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_1/m2.html b/test/farm/html/gold_omit_1/m2.html
new file mode 100644
index 0000000..bd9e4c4
--- /dev/null
+++ b/test/farm/html/gold_omit_1/m2.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m2: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m2</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m2a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m2b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_1/m3.html b/test/farm/html/gold_omit_1/m3.html
new file mode 100644
index 0000000..cdd6760
--- /dev/null
+++ b/test/farm/html/gold_omit_1/m3.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m3: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m3</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m3a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m3b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_1/main.html b/test/farm/html/gold_omit_1/main.html
new file mode 100644
index 0000000..4c159fd
--- /dev/null
+++ b/test/farm/html/gold_omit_1/main.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for main: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>main</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 8 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>8 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m2</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m3</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'><span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'><span class='nam'>b</span> <span class='op'>=</span> <span class='num'>6</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m1</span><span class='op'>.</span><span class='nam'>m1a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m2</span><span class='op'>.</span><span class='nam'>m2a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m3</span><span class='op'>.</span><span class='nam'>m3a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_2/index.html b/test/farm/html/gold_omit_2/index.html
new file mode 100644
index 0000000..c47c368
--- /dev/null
+++ b/test/farm/html/gold_omit_2/index.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>100%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>12</td>
+ <td>12</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='m2.html'>m2</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='m3.html'>m3</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='main.html'>main</a></td>
+ <td>8</td>
+ <td>8</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_2/m2.html b/test/farm/html/gold_omit_2/m2.html
new file mode 100644
index 0000000..bd9e4c4
--- /dev/null
+++ b/test/farm/html/gold_omit_2/m2.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m2: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m2</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m2a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m2b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_2/m3.html b/test/farm/html/gold_omit_2/m3.html
new file mode 100644
index 0000000..cdd6760
--- /dev/null
+++ b/test/farm/html/gold_omit_2/m3.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m3: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m3</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m3a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m3b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_2/main.html b/test/farm/html/gold_omit_2/main.html
new file mode 100644
index 0000000..4c159fd
--- /dev/null
+++ b/test/farm/html/gold_omit_2/main.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for main: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>main</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 8 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>8 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m2</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m3</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'><span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'><span class='nam'>b</span> <span class='op'>=</span> <span class='num'>6</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m1</span><span class='op'>.</span><span class='nam'>m1a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m2</span><span class='op'>.</span><span class='nam'>m2a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m3</span><span class='op'>.</span><span class='nam'>m3a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_3/index.html b/test/farm/html/gold_omit_3/index.html
new file mode 100644
index 0000000..c217f0d
--- /dev/null
+++ b/test/farm/html/gold_omit_3/index.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>100%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>10</td>
+ <td>10</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='m3.html'>m3</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='main.html'>main</a></td>
+ <td>8</td>
+ <td>8</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_3/m3.html b/test/farm/html/gold_omit_3/m3.html
new file mode 100644
index 0000000..cdd6760
--- /dev/null
+++ b/test/farm/html/gold_omit_3/m3.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m3: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m3</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m3a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m3b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_3/main.html b/test/farm/html/gold_omit_3/main.html
new file mode 100644
index 0000000..4c159fd
--- /dev/null
+++ b/test/farm/html/gold_omit_3/main.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for main: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>main</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 8 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>8 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m2</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m3</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'><span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'><span class='nam'>b</span> <span class='op'>=</span> <span class='num'>6</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m1</span><span class='op'>.</span><span class='nam'>m1a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m2</span><span class='op'>.</span><span class='nam'>m2a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m3</span><span class='op'>.</span><span class='nam'>m3a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_4/index.html b/test/farm/html/gold_omit_4/index.html
new file mode 100644
index 0000000..321ccdc
--- /dev/null
+++ b/test/farm/html/gold_omit_4/index.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>100%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>12</td>
+ <td>12</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='m1.html'>m1</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='m3.html'>m3</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='main.html'>main</a></td>
+ <td>8</td>
+ <td>8</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_4/m1.html b/test/farm/html/gold_omit_4/m1.html
new file mode 100644
index 0000000..ba3a527
--- /dev/null
+++ b/test/farm/html/gold_omit_4/m1.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m1: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m1</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m1a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m1b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_4/m3.html b/test/farm/html/gold_omit_4/m3.html
new file mode 100644
index 0000000..cdd6760
--- /dev/null
+++ b/test/farm/html/gold_omit_4/m3.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m3: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m3</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m3a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m3b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_4/main.html b/test/farm/html/gold_omit_4/main.html
new file mode 100644
index 0000000..4c159fd
--- /dev/null
+++ b/test/farm/html/gold_omit_4/main.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for main: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>main</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 8 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>8 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m2</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m3</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'><span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'><span class='nam'>b</span> <span class='op'>=</span> <span class='num'>6</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m1</span><span class='op'>.</span><span class='nam'>m1a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m2</span><span class='op'>.</span><span class='nam'>m2a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m3</span><span class='op'>.</span><span class='nam'>m3a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_5/index.html b/test/farm/html/gold_omit_5/index.html
new file mode 100644
index 0000000..79c5d07
--- /dev/null
+++ b/test/farm/html/gold_omit_5/index.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type='text/javascript' charset='utf-8'>
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>100%</span>
+ </h1>
+ </div>
+</div>
+
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
+
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>10</td>
+ <td>10</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='m1.html'>m1</a></td>
+ <td>2</td>
+ <td>2</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='main.html'>main</a></td>
+ <td>8</td>
+ <td>8</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_5/m1.html b/test/farm/html/gold_omit_5/m1.html
new file mode 100644
index 0000000..ba3a527
--- /dev/null
+++ b/test/farm/html/gold_omit_5/m1.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for m1: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>m1</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 2 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>2 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='nam'>m1a</span> <span class='op'>=</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='nam'>m1b</span> <span class='op'>=</span> <span class='num'>2</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_omit_5/main.html b/test/farm/html/gold_omit_5/main.html
new file mode 100644
index 0000000..4c159fd
--- /dev/null
+++ b/test/farm/html/gold_omit_5/main.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for main: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+</head>
+<body>
+
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage for <b>main</b> :
+ <span class='pc_cov'>100%</span>
+ </h1>
+ <h2 class='stats'>
+ 8 statements
+ <span class='run hide_run' onclick='toggle_lines(this, "run")'>8 run</span>
+ <span class='exc' onclick='toggle_lines(this, "exc")'>0 excluded</span>
+ <span class='mis' onclick='toggle_lines(this, "mis")'>0 missing</span>
+
+ </h2>
+ </div>
+</div>
+
+<div id='source'>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='stm run hide_run'>1</p>
+<p id='n2' class='stm run hide_run'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm run hide_run'>8</p>
+<p id='n9' class='stm run hide_run'>9</p>
+<p id='n10' class='stm run hide_run'>10</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m1</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m2</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>m3</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'><span class='nam'>a</span> <span class='op'>=</span> <span class='num'>5</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'><span class='nam'>b</span> <span class='op'>=</span> <span class='num'>6</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m1</span><span class='op'>.</span><span class='nam'>m1a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t9' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m2</span><span class='op'>.</span><span class='nam'>m2a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+<p id='t10' class='stm run hide_run'><span class='key'>assert</span> <span class='nam'>m3</span><span class='op'>.</span><span class='nam'>m3a</span> <span class='op'>==</span> <span class='num'>1</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
+</div>
+
+</body>
+</html>
diff --git a/test/farm/html/gold_other/blah_blah_other.html b/test/farm/html/gold_other/blah_blah_other.html
index f8f6b8b..ebb2134 100644
--- a/test/farm/html/gold_other/blah_blah_other.html
+++ b/test/farm/html/gold_other/blah_blah_other.html
@@ -1,26 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
-<title>Coverage for c:\ned\coverage\trunk\test\farm\html\othersrc\other</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script type='text/javascript' src='jquery-1.3.2.min.js'></script>
-<script type='text/javascript'>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- var hide = "hide_"+cls;
- if (btn.hasClass(hide)) {
- $("#source ."+cls).removeClass(hide);
- btn.removeClass(hide);
- }
- else {
- $("#source ."+cls).addClass(hide);
- btn.addClass(hide);
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for c:\ned\coverage\trunk\test\farm\html\othersrc\other: 100%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>c:\ned\coverage\trunk\test\farm\html\othersrc\other</b> :
@@ -37,24 +25,24 @@ function toggle_lines(btn, cls) {
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='pln'>3</p>
-<p class='stm run hide_run'>4</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='com'># A file in another directory.&nbsp; We&#39;re checking that it ends up in the</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='com'># HTML report.</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>print</span><span class='op'>(</span><span class='str'>&quot;This is the other src!&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='pln'>3</p>
+<p id='n4' class='stm run hide_run'>4</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='com'># A file in another directory.&nbsp; We&#39;re checking that it ends up in the</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='com'># HTML report.</span><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='stm run hide_run'><span class='key'>print</span><span class='op'>(</span><span class='str'>&quot;This is the other src!&quot;</span><span class='op'>)</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/test/farm/html/gold_other/here.html b/test/farm/html/gold_other/here.html
index 961fdfa..ff7d2ad 100644
--- a/test/farm/html/gold_other/here.html
+++ b/test/farm/html/gold_other/here.html
@@ -1,26 +1,14 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
-<title>Coverage for here</title>
-<link rel='stylesheet' href='style.css' type='text/css'>
-<script type='text/javascript' src='jquery-1.3.2.min.js'></script>
-<script type='text/javascript'>
-function toggle_lines(btn, cls) {
- var btn = $(btn);
- var hide = "hide_"+cls;
- if (btn.hasClass(hide)) {
- $("#source ."+cls).removeClass(hide);
- btn.removeClass(hide);
- }
- else {
- $("#source ."+cls).addClass(hide);
- btn.addClass(hide);
- }
-}
-</script>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage for here: 75%</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
</head>
<body>
+
<div id='header'>
<div class='content'>
<h1>Coverage for <b>here</b> :
@@ -37,32 +25,32 @@ function toggle_lines(btn, cls) {
</div>
<div id='source'>
-<table cellspacing='0' cellpadding='0'>
-<tr>
-<td class='linenos' valign='top'>
-<p class='pln'>1</p>
-<p class='pln'>2</p>
-<p class='stm run hide_run'>3</p>
-<p class='pln'>4</p>
-<p class='stm run hide_run'>5</p>
-<p class='stm run hide_run'>6</p>
-<p class='pln'>7</p>
-<p class='stm mis'>8</p>
-
-</td>
-<td class='text' valign='top'>
-<p class='pln'><span class='com'># A test file for HTML reporting by coverage.</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>import</span> <span class='nam'>other</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'><span class='key'>if</span> <span class='num'>1</span> <span class='op'>&lt;</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>h</span> <span class='op'>=</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
-<p class='pln'><span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
-<p class='stm mis'>&nbsp; &nbsp; <span class='nam'>h</span> <span class='op'>=</span> <span class='num'>4</span><span class='strut'>&nbsp;</span></p>
-
-</td>
-</tr>
-</table>
+ <table cellspacing='0' cellpadding='0'>
+ <tr>
+ <td class='linenos' valign='top'>
+<p id='n1' class='pln'>1</p>
+<p id='n2' class='pln'>2</p>
+<p id='n3' class='stm run hide_run'>3</p>
+<p id='n4' class='pln'>4</p>
+<p id='n5' class='stm run hide_run'>5</p>
+<p id='n6' class='stm run hide_run'>6</p>
+<p id='n7' class='pln'>7</p>
+<p id='n8' class='stm mis'>8</p>
+
+ </td>
+ <td class='text' valign='top'>
+<p id='t1' class='pln'><span class='com'># A test file for HTML reporting by coverage.</span><span class='strut'>&nbsp;</span></p>
+<p id='t2' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t3' class='stm run hide_run'><span class='key'>import</span> <span class='nam'>other</span><span class='strut'>&nbsp;</span></p>
+<p id='t4' class='pln'><span class='strut'>&nbsp;</span></p>
+<p id='t5' class='stm run hide_run'><span class='key'>if</span> <span class='num'>1</span> <span class='op'>&lt;</span> <span class='num'>2</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t6' class='stm run hide_run'>&nbsp; &nbsp; <span class='nam'>h</span> <span class='op'>=</span> <span class='num'>3</span><span class='strut'>&nbsp;</span></p>
+<p id='t7' class='pln'><span class='key'>else</span><span class='op'>:</span><span class='strut'>&nbsp;</span></p>
+<p id='t8' class='stm mis'>&nbsp; &nbsp; <span class='nam'>h</span> <span class='op'>=</span> <span class='num'>4</span><span class='strut'>&nbsp;</span></p>
+
+ </td>
+ </tr>
+ </table>
</div>
</body>
diff --git a/test/farm/html/gold_other/index.html b/test/farm/html/gold_other/index.html
index b392c7f..e9e1fd2 100644
--- a/test/farm/html/gold_other/index.html
+++ b/test/farm/html/gold_other/index.html
@@ -1,80 +1,81 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
- <head>
- <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
- <title>Coverage report</title>
- <link rel='stylesheet' href='style.css' type='text/css'>
- <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
- <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
- <script type='text/javascript' src='coverage_html.js'></script>
- <script type="text/javascript" charset="utf-8">
- jQuery(document).ready(index_page_ready);
- </script>
- </head>
- <body>
+<head>
+ <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
+ <title>Coverage report</title>
+ <link rel='stylesheet' href='style.css' type='text/css'>
+ <script type='text/javascript' src='jquery-1.3.2.min.js'></script>
+ <script type='text/javascript' src='jquery.tablesorter.min.js'></script>
+ <script type='text/javascript' src='coverage_html.js'></script>
+ <script type="text/javascript" charset="utf-8">
+ jQuery(document).ready(index_page_ready);
+ </script>
+</head>
+<body>
- <div id='header'>
- <div class='content'>
- <h1>Coverage report:
- <span class='pc_cov'>80%</span>
- </h1>
- </div>
- </div>
+<div id='header'>
+ <div class='content'>
+ <h1>Coverage report:
+ <span class='pc_cov'>80%</span>
+ </h1>
+ </div>
+</div>
- <div id='index'>
- <table class='index'>
- <thead>
-
- <tr class='tablehead' title='Click to sort'>
- <th class='name left headerSortDown'>Module</th>
- <th>statements</th>
- <th>run</th>
- <th>excluded</th>
-
- <th class='right'>coverage</th>
- </tr>
- </thead>
+<div id='index'>
+ <table class='index'>
+ <thead>
+
+ <tr class='tablehead' title='Click to sort'>
+ <th class='name left headerSortDown'>Module</th>
+ <th>statements</th>
+ <th>run</th>
+ <th>excluded</th>
- <tfoot>
- <tr class='total'>
- <td class='name left'>Total</td>
- <td>5</td>
- <td>4</td>
- <td>0</td>
-
- <td class='right'>80%</td>
- </tr>
- </tfoot>
- <tbody>
-
- <tr class='file'>
- <td class='name left'><a href='_ned_coverage_trunk_test_farm_html_othersrc_other.html'>c:\ned\coverage\trunk\test\farm\html\othersrc\other</a></td>
- <td>1</td>
- <td>1</td>
- <td>0</td>
-
- <td class='right'>100%</td>
- </tr>
-
- <tr class='file'>
- <td class='name left'><a href='here.html'>here</a></td>
- <td>4</td>
- <td>3</td>
- <td>0</td>
-
- <td class='right'>75%</td>
- </tr>
-
- </tbody>
- </table>
- </div>
+ <th class='right'>coverage</th>
+ </tr>
+ </thead>
+
+ <tfoot>
+ <tr class='total'>
+ <td class='name left'>Total</td>
+ <td>5</td>
+ <td>4</td>
+ <td>0</td>
+
+ <td class='right'>80%</td>
+ </tr>
+ </tfoot>
+ <tbody>
+
+ <tr class='file'>
+ <td class='name left'><a href='_ned_coverage_trunk_test_farm_html_othersrc_other.html'>c:\ned\coverage\trunk\test\farm\html\othersrc\other</a></td>
+ <td>1</td>
+ <td>1</td>
+ <td>0</td>
+
+ <td class='right'>100%</td>
+ </tr>
+
+ <tr class='file'>
+ <td class='name left'><a href='here.html'>here</a></td>
+ <td>4</td>
+ <td>3</td>
+ <td>0</td>
+
+ <td class='right'>75%</td>
+ </tr>
+
+ </tbody>
+ </table>
+</div>
+
+<div id='footer'>
+ <div class='content'>
+ <p>
+ <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.3a1</a>
+ </p>
+ </div>
+</div>
- <div id='footer'>
- <div class='content'>
- <p>
- <a class='nav' href='http://nedbatchelder.com/code/coverage'>coverage.py v3.2b4</a>
- </p>
- </div>
- </div>
- </body>
+</body>
</html>
diff --git a/test/farm/html/gold_x_xml/coverage.xml b/test/farm/html/gold_x_xml/coverage.xml
index 8c009f5..37027ef 100644
--- a/test/farm/html/gold_x_xml/coverage.xml
+++ b/test/farm/html/gold_x_xml/coverage.xml
@@ -6,7 +6,7 @@
<packages>
<package branch-rate="0.0" complexity="0.0" line-rate="0.666666666667" name=".">
<classes>
- <class branch-rate="0.0" complexity="0.0" filename="x.py" line-rate="0.666666666667" name="x">
+ <class branch-rate="0.0" complexity="0.0" filename="a.py" line-rate="0.666666666667" name="a">
<methods/>
<lines>
<line hits="1" number="3"/>
diff --git a/test/farm/html/run_x_xml.py b/test/farm/html/run_a_xml_1.py
index fe9cefa..7f4805e 100644
--- a/test/farm/html/run_x_xml.py
+++ b/test/farm/html/run_a_xml_1.py
@@ -1,20 +1,20 @@
def html_it():
- """Run coverage and make an XML report for x."""
+ """Run coverage and make an XML report for a."""
import coverage
cov = coverage.coverage()
cov.start()
- import x
+ import a
cov.stop()
- cov.xml_report(x, outfile="../xml/coverage.xml")
+ cov.xml_report(a, outfile="../xml_1/coverage.xml")
import os
-if not os.path.exists("xml"):
- os.makedirs("xml")
+if not os.path.exists("xml_1"):
+ os.makedirs("xml_1")
runfunc(html_it, rundir="src")
-compare("gold_x_xml", "xml", scrubs=[
+compare("gold_x_xml", "xml_1", scrubs=[
(r' timestamp="\d+"', ' timestamp="TIMESTAMP"'),
(r' version="[-.\w]+"', ' version="VERSION"'),
])
-clean("xml")
+clean("xml_1")
diff --git a/test/farm/html/run_a_xml_2.py b/test/farm/html/run_a_xml_2.py
new file mode 100644
index 0000000..b08d796
--- /dev/null
+++ b/test/farm/html/run_a_xml_2.py
@@ -0,0 +1,20 @@
+def html_it():
+ """Run coverage and make an XML report for a."""
+ import coverage
+ cov = coverage.coverage(config_file="run_a_xml_2.ini")
+ cov.start()
+ import a
+ cov.stop()
+ cov.xml_report(a)
+
+import os
+if not os.path.exists("xml_2"):
+ os.makedirs("xml_2")
+
+runfunc(html_it, rundir="src")
+
+compare("gold_x_xml", "xml_2", scrubs=[
+ (r' timestamp="\d+"', ' timestamp="TIMESTAMP"'),
+ (r' version="[-.\w]+"', ' version="VERSION"'),
+ ])
+clean("xml_2")
diff --git a/test/farm/html/run_omit_1.py b/test/farm/html/run_omit_1.py
new file mode 100644
index 0000000..a493a8a
--- /dev/null
+++ b/test/farm/html/run_omit_1.py
@@ -0,0 +1,12 @@
+def html_it():
+ """Run coverage and make an HTML report for main."""
+ import coverage
+ cov = coverage.coverage()
+ cov.start()
+ import main
+ cov.stop()
+ cov.html_report(directory="../html_omit_1")
+
+runfunc(html_it, rundir="src")
+compare("gold_omit_1", "html_omit_1", size_within=10, file_pattern="*.html")
+clean("html_omit_1")
diff --git a/test/farm/html/run_omit_2.py b/test/farm/html/run_omit_2.py
new file mode 100644
index 0000000..5d7e832
--- /dev/null
+++ b/test/farm/html/run_omit_2.py
@@ -0,0 +1,12 @@
+def html_it():
+ """Run coverage and make an HTML report for main."""
+ import coverage
+ cov = coverage.coverage()
+ cov.start()
+ import main
+ cov.stop()
+ cov.html_report(directory="../html_omit_2", omit_prefixes=["m1"])
+
+runfunc(html_it, rundir="src")
+compare("gold_omit_2", "html_omit_2", size_within=10, file_pattern="*.html")
+clean("html_omit_2")
diff --git a/test/farm/html/run_omit_3.py b/test/farm/html/run_omit_3.py
new file mode 100644
index 0000000..537ec2c
--- /dev/null
+++ b/test/farm/html/run_omit_3.py
@@ -0,0 +1,12 @@
+def html_it():
+ """Run coverage and make an HTML report for main."""
+ import coverage
+ cov = coverage.coverage()
+ cov.start()
+ import main
+ cov.stop()
+ cov.html_report(directory="../html_omit_3", omit_prefixes=["m1", "m2"])
+
+runfunc(html_it, rundir="src")
+compare("gold_omit_3", "html_omit_3", size_within=10, file_pattern="*.html")
+clean("html_omit_3")
diff --git a/test/farm/html/run_omit_4.py b/test/farm/html/run_omit_4.py
new file mode 100644
index 0000000..c62e9d5
--- /dev/null
+++ b/test/farm/html/run_omit_4.py
@@ -0,0 +1,12 @@
+def html_it():
+ """Run coverage and make an HTML report for main."""
+ import coverage
+ cov = coverage.coverage(config_file="omit4.ini")
+ cov.start()
+ import main
+ cov.stop()
+ cov.html_report(directory="../html_omit_4")
+
+runfunc(html_it, rundir="src")
+compare("gold_omit_4", "html_omit_4", size_within=10, file_pattern="*.html")
+clean("html_omit_4")
diff --git a/test/farm/html/run_omit_5.py b/test/farm/html/run_omit_5.py
new file mode 100644
index 0000000..bd0fc9e
--- /dev/null
+++ b/test/farm/html/run_omit_5.py
@@ -0,0 +1,12 @@
+def html_it():
+ """Run coverage and make an HTML report for main."""
+ import coverage
+ cov = coverage.coverage(config_file="omit5.ini")
+ cov.start()
+ import main
+ cov.stop()
+ cov.html_report()
+
+runfunc(html_it, rundir="src")
+compare("gold_omit_5", "html_omit_5", size_within=10, file_pattern="*.html")
+clean("html_omit_5")
diff --git a/test/farm/html/run_tabbed.py b/test/farm/html/run_tabbed.py
index f28e0c3..3076b4e 100644
--- a/test/farm/html/run_tabbed.py
+++ b/test/farm/html/run_tabbed.py
@@ -17,7 +17,7 @@ contains("html_tabbed/tabbed.html",
"<span class='nam'>x</span><span class='op'>:</span>"
"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "
"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; "
- "<span class='com'># look nice</span>"
+ "<span class='com'># look nice</span>"
)
doesnt_contain("html_tabbed/tabbed.html", "\t")
diff --git a/test/farm/html/src/b.py b/test/farm/html/src/b.py
index f5d051c..dffdd50 100644
--- a/test/farm/html/src/b.py
+++ b/test/farm/html/src/b.py
@@ -13,7 +13,7 @@ def two(x):
# A missed else that branches to "exit"
if x:
a = 5
-
+
two(1)
def three_way():
diff --git a/test/farm/html/src/coverage.xml b/test/farm/html/src/coverage.xml
new file mode 100644
index 0000000..bc51732
--- /dev/null
+++ b/test/farm/html/src/coverage.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" ?>
+<!DOCTYPE coverage
+ SYSTEM 'http://cobertura.sourceforge.net/xml/coverage-03.dtd'>
+<coverage branch-rate="0.0" line-rate="0.666666666667" timestamp="1263087779313" version="3.3a1">
+ <!-- Generated by coverage.py: http://nedbatchelder.com/code/coverage -->
+ <packages>
+ <package branch-rate="0.0" complexity="0.0" line-rate="0.666666666667" name=".">
+ <classes>
+ <class branch-rate="0.0" complexity="0.0" filename="a.py" line-rate="0.666666666667" name="a">
+ <methods/>
+ <lines>
+ <line hits="1" number="3"/>
+ <line hits="1" number="5"/>
+ <line hits="0" number="7"/>
+ </lines>
+ </class>
+ </classes>
+ </package>
+ </packages>
+</coverage>
diff --git a/test/farm/html/src/m1.py b/test/farm/html/src/m1.py
new file mode 100644
index 0000000..927e1f6
--- /dev/null
+++ b/test/farm/html/src/m1.py
@@ -0,0 +1,2 @@
+m1a = 1
+m1b = 2
diff --git a/test/farm/html/src/m2.py b/test/farm/html/src/m2.py
new file mode 100644
index 0000000..ffddf6c
--- /dev/null
+++ b/test/farm/html/src/m2.py
@@ -0,0 +1,2 @@
+m2a = 1
+m2b = 2
diff --git a/test/farm/html/src/m3.py b/test/farm/html/src/m3.py
new file mode 100644
index 0000000..395d7d2
--- /dev/null
+++ b/test/farm/html/src/m3.py
@@ -0,0 +1,2 @@
+m3a = 1
+m3b = 2
diff --git a/test/farm/html/src/main.py b/test/farm/html/src/main.py
new file mode 100644
index 0000000..ce89446
--- /dev/null
+++ b/test/farm/html/src/main.py
@@ -0,0 +1,10 @@
+import m1
+import m2
+import m3
+
+a = 5
+b = 6
+
+assert m1.m1a == 1
+assert m2.m2a == 1
+assert m3.m3a == 1
diff --git a/test/farm/html/src/omit4.ini b/test/farm/html/src/omit4.ini
new file mode 100644
index 0000000..95f62a1
--- /dev/null
+++ b/test/farm/html/src/omit4.ini
@@ -0,0 +1,2 @@
+[report]
+omit = m2
diff --git a/test/farm/html/src/omit5.ini b/test/farm/html/src/omit5.ini
new file mode 100644
index 0000000..70ef491
--- /dev/null
+++ b/test/farm/html/src/omit5.ini
@@ -0,0 +1,8 @@
+[report]
+omit =
+ fooey
+ gooey, m2, kablooey
+ m3, helloworld
+
+[html]
+directory = ../html_omit_5
diff --git a/test/farm/html/src/run_a_xml_2.ini b/test/farm/html/src/run_a_xml_2.ini
new file mode 100644
index 0000000..8d28f97
--- /dev/null
+++ b/test/farm/html/src/run_a_xml_2.ini
@@ -0,0 +1,3 @@
+# Put all the XML output in xml_2
+[xml]
+output = ../xml_2/coverage.xml
diff --git a/test/farm/html/src/tabbed.py b/test/farm/html/src/tabbed.py
index bc6bb45..4c39caf 100644
--- a/test/farm/html/src/tabbed.py
+++ b/test/farm/html/src/tabbed.py
@@ -3,6 +3,6 @@ x = 1
if x:
a = "Tabbed" # Aligned comments
if x: # look nice
- b = "No spaces" # when they
+ b = "No spaces" # when they
c = "Done" # line up.
diff --git a/test/farm/html/src/x.py b/test/farm/html/src/x.py
deleted file mode 100644
index 9e71aeb..0000000
--- a/test/farm/html/src/x.py
+++ /dev/null
@@ -1,7 +0,0 @@
-# A test file for HTML reporting by coverage.
-
-if 1 < 2:
- # Needed a < to look at HTML entities.
- a = 3
-else:
- a = 4
diff --git a/test/osinfo.py b/test/osinfo.py
index 8bed2af..04855fe 100644
--- a/test/osinfo.py
+++ b/test/osinfo.py
@@ -2,7 +2,7 @@
import sys
-if sys.hexversion >= 0x02050000 and sys.platform == 'win32':
+if sys.version_info >= (2, 5) and sys.platform == 'win32':
# Windows implementation
def process_ram():
"""How much RAM is this process using? (Windows)"""
diff --git a/test/stress_phystoken.txt b/test/stress_phystoken.tok
index 7e2f285..8d1b6be 100644
--- a/test/stress_phystoken.txt
+++ b/test/stress_phystoken.tok
@@ -1,6 +1,6 @@
# Here's some random Python so that test_tokenize_myself will have some
-# stressful stuff to try. This file is .txt instead of .py so pylint won't
-# complain about it.
+# stressful stuff to try. This file is .tok instead of .py so pylint won't
+# complain about it, check_eol won't look at it, etc.
first_back = """\
hey there!
@@ -15,6 +15,7 @@ lots_of_back = """\
hey \
there
"""
+# This next line is supposed to have trailing whitespace:
fake_back = """\
ouch
"""
@@ -40,7 +41,7 @@ class C(object):
cont1 = "one line of text" + \
"another line of text"
-a_long_string =
+a_long_string = \
"part 1" \
"2" \
"3 is longer"
diff --git a/test/stress_phystoken_dos.tok b/test/stress_phystoken_dos.tok
new file mode 100644
index 0000000..b08fd70
--- /dev/null
+++ b/test/stress_phystoken_dos.tok
@@ -0,0 +1,52 @@
+# Here's some random Python so that test_tokenize_myself will have some
+# stressful stuff to try. This file is .tok instead of .py so pylint won't
+# complain about it, check_eol won't look at it, etc.
+
+first_back = """\
+hey there!
+"""
+
+other_back = """
+hey \
+there
+"""
+
+lots_of_back = """\
+hey \
+there
+"""
+# This next line is supposed to have trailing whitespace:
+fake_back = """\
+ouch
+"""
+
+# Lots of difficulty happens with code like:
+#
+# fake_back = """\
+# ouch
+# """
+#
+# Ugh, the edge cases...
+
+# What about a comment like this\
+"what's this string doing here?"
+
+class C(object):
+ def there():
+ this = 5 + \
+ 7
+ that = \
+ "a continued line"
+
+cont1 = "one line of text" + \
+ "another line of text"
+
+a_long_string = \
+ "part 1" \
+ "2" \
+ "3 is longer"
+
+def hello():
+ print("Hello world!")
+
+hello()
diff --git a/test/test_api.py b/test/test_api.py
index 2552d11..1f0ad83 100644
--- a/test/test_api.py
+++ b/test/test_api.py
@@ -28,8 +28,8 @@ class ApiTest(CoverageTest):
# Import the python file, executing it.
coverage.start()
- self.import_module("mycode")
- coverage.stop()
+ self.import_module("mycode") # pragma: recursive coverage
+ coverage.stop() # pragma: recursive coverage
_, statements, missing, missingtext = coverage.analysis("mycode.py")
self.assertEqual(statements, [1,2,3,4,5])
@@ -52,8 +52,8 @@ class ApiTest(CoverageTest):
# Import the python file, executing it.
coverage.start()
- self.import_module(modname)
- coverage.stop()
+ self.import_module(modname) # pragma: recursive coverage
+ coverage.stop() # pragma: recursive coverage
def testReport(self):
self.doReportWork("mycode2")
@@ -81,7 +81,7 @@ class ApiTest(CoverageTest):
self.doReportWork("mycode4")
coverage.report()
rpt = re.sub(r"\s+", " ", self.stdout())
- self.assert_("mycode4 7 4 57% 4-6" in rpt)
+ self.assertTrue("mycode4 7 4 57% 4-6" in rpt)
def testUnexecutedFile(self):
cov = coverage.coverage()
@@ -100,8 +100,8 @@ class ApiTest(CoverageTest):
# Import the python file, executing it.
cov.start()
- self.import_module("mycode")
- cov.stop()
+ self.import_module("mycode") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
_, statements, missing, _ = cov.analysis("not_run.py")
self.assertEqual(statements, [1])
@@ -121,8 +121,8 @@ class ApiTest(CoverageTest):
# Import the python file, executing it.
cov = coverage.coverage()
cov.start()
- self.import_module("mymain")
- cov.stop()
+ self.import_module("mymain") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
filename, _, _, _ = cov.analysis("mymain.py")
self.assertEqual(os.path.basename(filename), "mymain.py")
@@ -138,8 +138,8 @@ class ApiTest(CoverageTest):
# already.
cov = coverage.coverage()
cov.start()
- self.import_module("mymain")
- cov.stop()
+ self.import_module("mymain") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
filename, _, _, _ = cov.analysis("mymain.py")
self.assertEqual(os.path.basename(filename), "mymain.py")
@@ -164,10 +164,10 @@ class ApiTest(CoverageTest):
# Measure without the stdlib.
cov1 = coverage.coverage()
- self.assertEqual(cov1.cover_pylib, False)
+ self.assertEqual(cov1.config.cover_pylib, False)
cov1.start()
- self.import_module("mymain")
- cov1.stop()
+ self.import_module("mymain") # pragma: recursive coverage
+ cov1.stop() # pragma: recursive coverage
# some statements were marked executed in mymain.py
_, statements, missing, _ = cov1.analysis("mymain.py")
@@ -179,8 +179,8 @@ class ApiTest(CoverageTest):
# Measure with the stdlib.
cov2 = coverage.coverage(cover_pylib=True)
cov2.start()
- self.import_module("mymain")
- cov2.stop()
+ self.import_module("mymain") # pragma: recursive coverage
+ cov2.stop() # pragma: recursive coverage
# some statements were marked executed in mymain.py
_, statements, missing, _ = cov2.analysis("mymain.py")
@@ -210,8 +210,8 @@ class ApiTest(CoverageTest):
self.assertSameElements(os.listdir("."), ["datatest1.py"])
cov = coverage.coverage()
cov.start()
- self.import_module("datatest1")
- cov.stop()
+ self.import_module("datatest1") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
cov.save()
self.assertSameElements(os.listdir("."),
["datatest1.py", "datatest1.pyc", ".coverage"])
@@ -225,8 +225,8 @@ class ApiTest(CoverageTest):
self.assertSameElements(os.listdir("."), ["datatest2.py"])
cov = coverage.coverage(data_file="cov.data")
cov.start()
- self.import_module("datatest2")
- cov.stop()
+ self.import_module("datatest2") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
cov.save()
self.assertSameElements(os.listdir("."),
["datatest2.py", "datatest2.pyc", "cov.data"])
@@ -238,14 +238,34 @@ class ApiTest(CoverageTest):
""")
self.assertSameElements(os.listdir("."), ["datatest3.py"])
- cov = coverage.coverage(data_file="cov.data", data_suffix=".14")
+ cov = coverage.coverage(data_file="cov.data", data_suffix="14")
cov.start()
- self.import_module("datatest3")
- cov.stop()
+ self.import_module("datatest3") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
cov.save()
self.assertSameElements(os.listdir("."),
["datatest3.py", "datatest3.pyc", "cov.data.14"])
+ def testDatafileFromRcFile(self):
+ # You can specify the data file name in the .coveragerc file
+ self.make_file("datatest4.py", """\
+ fooey = 17
+ """)
+ self.make_file(".coveragerc", """\
+ [run]
+ data_file = mydata.dat
+ """)
+
+ self.assertSameElements(os.listdir("."),
+ ["datatest4.py", ".coveragerc"])
+ cov = coverage.coverage()
+ cov.start()
+ self.import_module("datatest4") # pragma: recursive coverage
+ cov.stop() # pragma: recursive coverage
+ cov.save()
+ self.assertSameElements(os.listdir("."),
+ ["datatest4.py", "datatest4.pyc", ".coveragerc", "mydata.dat"])
+
def testEmptyReporting(self):
# Used to be you'd get an exception reporting on nothing...
cov = coverage.coverage()
diff --git a/test/test_arcs.py b/test/test_arcs.py
index 45ab27e..5698ca5 100644
--- a/test/test_arcs.py
+++ b/test/test_arcs.py
@@ -212,7 +212,7 @@ class LoopArcTest(CoverageTest):
)
# With "while True", 2.x thinks it's computation, 3.x thinks it's
# constant.
- if sys.hexversion >= 0x03000000:
+ if sys.version_info >= (3, 0):
arcz = ".1 12 23 34 45 36 63 57 27 7."
else:
arcz = ".1 12 23 34 45 36 62 57 27 7."
@@ -229,6 +229,33 @@ class LoopArcTest(CoverageTest):
arcz_missing="27" # while loop never exits naturally.
)
+ def test_for_if_else_for(self):
+ self.check_coverage("""\
+ def branches_2(l):
+ if l:
+ for e in l:
+ a = 4
+ else:
+ a = 6
+
+ def branches_3(l):
+ for x in l:
+ if x:
+ for e in l:
+ a = 12
+ else:
+ a = 14
+
+ branches_2([0,1])
+ branches_3([0,1])
+ """,
+ arcz=
+ ".1 18 8G GH H. "
+ ".2 23 34 43 26 3. 6. "
+ ".9 9A 9. AB BC CB B9 AE E9",
+ arcz_missing="26 6."
+ )
+
class ExceptionArcTest(CoverageTest):
"""Arc-measuring tests involving exception handling."""
@@ -387,7 +414,7 @@ class ExceptionArcTest(CoverageTest):
arcz=".1 12 23 34 3D 45 56 67 68 7A 8A A3 AB AD BC CD D.",
arcz_missing="3D AB BC CD", arcz_unpredicted="")
- if sys.hexversion >= 0x02050000:
+ if sys.version_info >= (2, 5):
# Try-except-finally was new in 2.5
def test_except_finally(self):
self.check_coverage("""\
diff --git a/test/test_cmdline.py b/test/test_cmdline.py
index 258a08a..c530f89 100644
--- a/test/test_cmdline.py
+++ b/test/test_cmdline.py
@@ -1,8 +1,10 @@
"""Test cmdline.py for coverage."""
-import os, re, shlex, sys, textwrap, unittest
+import os, pprint, re, shlex, sys, textwrap, unittest
import mock
import coverage
+import coverage.cmdline
+from coverage.misc import ExceptionDuringRun
sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
from coveragetest import CoverageTest, OK, ERR
@@ -14,7 +16,7 @@ class CmdLineTest(CoverageTest):
run_in_temp_dir = False
INIT_LOAD = """\
- .coverage(cover_pylib=None, data_suffix=False, timid=None, branch=None)
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=None, config_file=True)
.load()\n"""
def model_object(self):
@@ -47,14 +49,24 @@ class CmdLineTest(CoverageTest):
m2 = self.model_object()
code_obj = compile(code, "<code>", "exec")
eval(code_obj, globals(), { 'm2': m2 })
- self.assertEqual(m1.method_calls, m2.method_calls)
+ self.assert_same_method_calls(m1, m2)
def cmd_executes_same(self, args1, args2):
"""Assert that the `args1` executes the same as `args2`."""
m1, r1 = self.mock_command_line(args1)
m2, r2 = self.mock_command_line(args2)
self.assertEqual(r1, r2)
- self.assertEqual(m1.method_calls, m2.method_calls)
+ self.assert_same_method_calls(m1, m2)
+
+ def assert_same_method_calls(self, m1, m2):
+ """Assert that `m1.method_calls` and `m2.method_calls` are the same."""
+ # Use a real equality comparison, but if it fails, use a nicer assert
+ # so we can tell what's going on. We have to use the real == first due
+ # to CmdOptionParser.__eq__
+ if m1.method_calls != m2.method_calls:
+ pp1 = pprint.pformat(m1.method_calls)
+ pp2 = pprint.pformat(m2.method_calls)
+ self.assertMultiLineEqual(pp1+'\n', pp2+'\n')
def cmd_help(self, args, help_msg=None, topic=None, ret=ERR):
"""Run a command line, and check that it prints the right help.
@@ -83,7 +95,7 @@ class ClassicCmdLineTest(CmdLineTest):
def testErase(self):
# coverage -e
self.cmd_executes("-e", """\
- .coverage(cover_pylib=None, data_suffix=False, timid=None, branch=None)
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=None, config_file=True)
.erase()
""")
self.cmd_executes_same("-e", "--erase")
@@ -93,7 +105,7 @@ class ClassicCmdLineTest(CmdLineTest):
# -x calls coverage.load first.
self.cmd_executes("-x foo.py", """\
- .coverage(cover_pylib=None, data_suffix=False, timid=None, branch=None)
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=None, config_file=True)
.load()
.start()
.run_python_file('foo.py', ['foo.py'])
@@ -102,7 +114,7 @@ class ClassicCmdLineTest(CmdLineTest):
""")
# -e -x calls coverage.erase first.
self.cmd_executes("-e -x foo.py", """\
- .coverage(cover_pylib=None, data_suffix=False, timid=None, branch=None)
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=None, config_file=True)
.erase()
.start()
.run_python_file('foo.py', ['foo.py'])
@@ -111,7 +123,7 @@ class ClassicCmdLineTest(CmdLineTest):
""")
# --timid sets a flag, and program arguments get passed through.
self.cmd_executes("-x --timid foo.py abc 123", """\
- .coverage(cover_pylib=None, data_suffix=False, timid=True, branch=None)
+ .coverage(cover_pylib=None, data_suffix=None, timid=True, branch=None, config_file=True)
.load()
.start()
.run_python_file('foo.py', ['foo.py', 'abc', '123'])
@@ -120,7 +132,7 @@ class ClassicCmdLineTest(CmdLineTest):
""")
# -L sets a flag, and flags for the program don't confuse us.
self.cmd_executes("-x -p -L foo.py -a -b", """\
- .coverage(cover_pylib=True, data_suffix=True, timid=None, branch=None)
+ .coverage(cover_pylib=True, data_suffix=True, timid=None, branch=None, config_file=True)
.load()
.start()
.run_python_file('foo.py', ['foo.py', '-a', '-b'])
@@ -137,7 +149,7 @@ class ClassicCmdLineTest(CmdLineTest):
def testCombine(self):
# coverage -c
self.cmd_executes("-c", """\
- .coverage(cover_pylib=None, data_suffix=False, timid=None, branch=None)
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=None, config_file=True)
.load()
.combine()
.save()
@@ -325,6 +337,33 @@ class ClassicCmdLineTest(CmdLineTest):
self.cmd_help("-z", "no such option: -z")
+class FakeCoverageForDebugData(object):
+ """Just enough of a fake coverage package for the 'debug data' tests."""
+ def __init__(self, summary):
+ self._summary = summary
+ self.filename = "FILENAME"
+ self.data = self
+
+ # package members
+ def coverage(self, *unused_args, **unused_kwargs):
+ """The coverage class in the package."""
+ return self
+
+ # coverage methods
+ def load(self):
+ """Fake coverage().load()"""
+ pass
+
+ # data methods
+ def has_arcs(self):
+ """Fake coverage().data.has_arcs()"""
+ return False
+
+ def summary(self, fullpath): # pylint: disable-msg=W0613
+ """Fake coverage().data.summary()"""
+ return self._summary
+
+
class NewCmdLineTest(CmdLineTest):
"""Tests of the coverage.py command line."""
@@ -344,6 +383,31 @@ class NewCmdLineTest(CmdLineTest):
self.cmd_help("debug", "What information would you like: data, sys?")
self.cmd_help("debug foo", "Don't know what you mean by 'foo'")
+ def testDebugData(self):
+ fake = FakeCoverageForDebugData({
+ 'file1.py': 17, 'file2.py': 23,
+ })
+ self.command_line("debug data", _covpkg=fake)
+ self.assertMultiLineEqual(self.stdout(), textwrap.dedent("""\
+ -- data ---------------------------------------
+ path: FILENAME
+ has_arcs: False
+
+ 2 files:
+ file1.py: 17 lines
+ file2.py: 23 lines
+ """))
+
+ def testDebugDataWithNoData(self):
+ fake = FakeCoverageForDebugData({})
+ self.command_line("debug data", _covpkg=fake)
+ self.assertMultiLineEqual(self.stdout(), textwrap.dedent("""\
+ -- data ---------------------------------------
+ path: FILENAME
+ has_arcs: False
+ No data collected
+ """))
+
def testDebugSys(self):
self.command_line("debug sys")
out = self.stdout()
@@ -387,6 +451,22 @@ class NewCmdLineTest(CmdLineTest):
self.cmd_executes_same("run -L f.py", "-e -x -L f.py")
self.cmd_executes_same("run --timid f.py", "-e -x --timid f.py")
self.cmd_executes_same("run", "-x")
+ self.cmd_executes("run --branch foo.py", """\
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=True, config_file=True)
+ .erase()
+ .start()
+ .run_python_file('foo.py', ['foo.py'])
+ .stop()
+ .save()
+ """)
+ self.cmd_executes("run --rcfile=myrc.rc foo.py", """\
+ .coverage(cover_pylib=None, data_suffix=None, timid=None, branch=None, config_file="myrc.rc")
+ .erase()
+ .start()
+ .run_python_file('foo.py', ['foo.py'])
+ .stop()
+ .save()
+ """)
def testXml(self):
# coverage xml [-i] [--omit DIR,...] [FILE1 FILE2 ...]
@@ -404,7 +484,7 @@ class NewCmdLineTest(CmdLineTest):
""")
self.cmd_executes("xml -o -", self.INIT_LOAD + """\
.xml_report(ignore_errors=None, omit_prefixes=None, morfs=[],
- outfile=None)
+ outfile="-")
""")
self.cmd_executes("xml --omit fooey", self.INIT_LOAD + """\
.xml_report(ignore_errors=None, omit_prefixes=["fooey"], morfs=[],
@@ -459,5 +539,62 @@ class CmdLineStdoutTest(CmdLineTest):
assert "help" in out
+class CmdMainTest(CoverageTest):
+ """Tests of coverage.cmdline.main(), using mocking for isolation."""
+
+ class CoverageScriptStub(object):
+ """A stub for coverage.cmdline.CoverageScript, used by CmdMainTest."""
+
+ def command_line(self, argv):
+ """Stub for command_line, the arg determines what it will do."""
+ if argv[0] == 'hello':
+ print("Hello, world!")
+ elif argv[0] == 'raise':
+ try:
+ raise Exception("oh noes!")
+ except:
+ raise ExceptionDuringRun(*sys.exc_info())
+ elif argv[0] == 'internalraise':
+ raise ValueError("coverage is broken")
+ elif argv[0] == 'exit':
+ sys.exit(23)
+ else:
+ raise AssertionError("Bad CoverageScriptStub: %r"% (argv,))
+ return 0
+
+ def setUp(self):
+ super(CmdMainTest, self).setUp()
+ self.old_CoverageScript = coverage.cmdline.CoverageScript
+ coverage.cmdline.CoverageScript = self.CoverageScriptStub
+
+ def tearDown(self):
+ coverage.cmdline.CoverageScript = self.old_CoverageScript
+ super(CmdMainTest, self).tearDown()
+
+ def test_normal(self):
+ ret = coverage.cmdline.main(['hello'])
+ self.assertEqual(ret, 0)
+ self.assertEqual(self.stdout(), "Hello, world!\n")
+
+ def test_raise(self):
+ ret = coverage.cmdline.main(['raise'])
+ self.assertEqual(ret, 1)
+ self.assertEqual(self.stdout(), "")
+ err = self.stderr().split('\n')
+ self.assertEqual(err[0], 'Traceback (most recent call last):')
+ self.assertEqual(err[-3], ' raise Exception("oh noes!")')
+ self.assertEqual(err[-2], 'Exception: oh noes!')
+
+ def test_internalraise(self):
+ self.assertRaisesRegexp(ValueError,
+ "coverage is broken",
+ coverage.cmdline.main, ['internalraise']
+ )
+
+ def test_exit(self):
+ ret = coverage.cmdline.main(['exit'])
+ self.assertEqual(ret, 23)
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/test/test_codeunit.py b/test/test_codeunit.py
index ad07382..35387ba 100644
--- a/test/test_codeunit.py
+++ b/test/test_codeunit.py
@@ -64,10 +64,10 @@ class CodeUnitTest(CoverageTest):
self.assertEqual(cu[2].source_file().read(), "# cfile.py\n")
def test_comparison(self):
- acu = code_unit_factory("aa/afile.py", FileLocator())
- acu2 = code_unit_factory("aa/afile.py", FileLocator())
- zcu = code_unit_factory("aa/zfile.py", FileLocator())
- bcu = code_unit_factory("aa/bb/bfile.py", FileLocator())
+ acu = code_unit_factory("aa/afile.py", FileLocator())[0]
+ acu2 = code_unit_factory("aa/afile.py", FileLocator())[0]
+ zcu = code_unit_factory("aa/zfile.py", FileLocator())[0]
+ bcu = code_unit_factory("aa/bb/bfile.py", FileLocator())[0]
assert acu == acu2 and acu <= acu2 and acu >= acu2
assert acu < zcu and acu <= zcu and acu != zcu
assert zcu > acu and zcu >= acu and zcu != acu
diff --git a/test/test_config.py b/test/test_config.py
new file mode 100644
index 0000000..f4bd65b
--- /dev/null
+++ b/test/test_config.py
@@ -0,0 +1,145 @@
+"""Test the config file handling for coverage.py"""
+
+import os, sys
+import coverage
+
+sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
+from coveragetest import CoverageTest
+
+
+class ConfigTest(CoverageTest):
+ """Tests of the different sources of configuration settings."""
+
+ def test_default_config(self):
+ # Just constructing a coverage() object gets the right defaults.
+ cov = coverage.coverage()
+ self.assertFalse(cov.config.timid)
+ self.assertFalse(cov.config.branch)
+ self.assertEqual(cov.config.data_file, ".coverage")
+
+ def test_arguments(self):
+ # Arguments to the constructor are applied to the configuation.
+ cov = coverage.coverage(timid=True, data_file="fooey.dat")
+ self.assertTrue(cov.config.timid)
+ self.assertFalse(cov.config.branch)
+ self.assertEqual(cov.config.data_file, "fooey.dat")
+
+ def test_config_file(self):
+ # A .coveragerc file will be read into the configuration.
+ self.make_file(".coveragerc", """\
+ # This is just a bogus .rc file for testing.
+ [run]
+ timid = True
+ data_file = .hello_kitty.data
+ """)
+ cov = coverage.coverage()
+ self.assertTrue(cov.config.timid)
+ self.assertFalse(cov.config.branch)
+ self.assertEqual(cov.config.data_file, ".hello_kitty.data")
+
+ def test_named_config_file(self):
+ # You can name the config file what you like.
+ self.make_file("my_cov.ini", """\
+ [run]
+ timid = True
+ ; I wouldn't really use this as a data file...
+ data_file = delete.me
+ """)
+ cov = coverage.coverage(config_file="my_cov.ini")
+ self.assertTrue(cov.config.timid)
+ self.assertFalse(cov.config.branch)
+ self.assertEqual(cov.config.data_file, "delete.me")
+
+ def test_ignored_config_file(self):
+ # You can disable reading the .coveragerc file.
+ self.make_file(".coveragerc", """\
+ [run]
+ timid = True
+ data_file = delete.me
+ """)
+ cov = coverage.coverage(config_file=False)
+ self.assertFalse(cov.config.timid)
+ self.assertFalse(cov.config.branch)
+ self.assertEqual(cov.config.data_file, ".coverage")
+
+ def test_config_file_then_args(self):
+ # The arguments override the .coveragerc file.
+ self.make_file(".coveragerc", """\
+ [run]
+ timid = True
+ data_file = weirdo.file
+ """)
+ cov = coverage.coverage(timid=False, data_file=".mycov")
+ self.assertFalse(cov.config.timid)
+ self.assertFalse(cov.config.branch)
+ self.assertEqual(cov.config.data_file, ".mycov")
+
+ def test_data_file_from_environment(self):
+ # There's an environment variable for the data_file.
+ self.make_file(".coveragerc", """\
+ [run]
+ timid = True
+ data_file = weirdo.file
+ """)
+ self.set_environ("COVERAGE_FILE", "fromenv.dat")
+ cov = coverage.coverage()
+ self.assertEqual(cov.config.data_file, "fromenv.dat")
+ # But the constructor args override the env var.
+ cov = coverage.coverage(data_file="fromarg.dat")
+ self.assertEqual(cov.config.data_file, "fromarg.dat")
+
+
+class ConfigFileTest(CoverageTest):
+ """Tests of the config file settings in particular."""
+
+ def test_config_file_settings(self):
+ # This sample file tries to use lots of variation of syntax...
+ self.make_file(".coveragerc", """\
+ # This is a settings file for coverage.py
+ [run]
+ timid = yes
+ data_file = something_or_other.dat
+ branch = 1
+ cover_pylib = TRUE
+ parallel = on
+
+ [report]
+ ; these settings affect reporting.
+ exclude_lines =
+ if 0:
+
+ pragma:?\\s+no cover
+ another_tab
+
+ ignore_errors = TRUE
+ omit =
+ one, another, some_more,
+ yet_more
+
+ [html]
+
+ directory = c:\\tricky\\dir.somewhere
+
+ [xml]
+ output=mycov.xml
+
+ """)
+ cov = coverage.coverage()
+
+ self.assertTrue(cov.config.timid)
+ self.assertEqual(cov.config.data_file, "something_or_other.dat")
+ self.assertTrue(cov.config.branch)
+ self.assertTrue(cov.config.cover_pylib)
+ self.assertTrue(cov.config.parallel)
+
+ self.assertEqual(cov.get_exclude_list(),
+ ["if 0:", "pragma:?\s+no cover", "another_tab"]
+ )
+ self.assertTrue(cov.config.ignore_errors)
+ self.assertEqual(cov.config.omit_prefixes,
+ ["one", "another", "some_more", "yet_more"]
+ )
+
+ self.assertEqual(cov.config.html_dir, r"c:\tricky\dir.somewhere")
+
+ self.assertEqual(cov.config.xml_output, "mycov.xml")
diff --git a/test/test_coverage.py b/test/test_coverage.py
index c1a7248..e0afd31 100644
--- a/test/test_coverage.py
+++ b/test/test_coverage.py
@@ -1,5 +1,4 @@
"""Tests for Coverage."""
-# Copyright 2004-2009, Ned Batchelder
# http://nedbatchelder.com/code/coverage
import os, sys, unittest
@@ -13,6 +12,86 @@ sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
from coveragetest import CoverageTest
+class TestCoverageTest(CoverageTest):
+ """Make sure our complex self.check_coverage method works."""
+
+ def test_successful_coverage(self):
+ # The simplest run possible.
+ self.check_coverage("""\
+ a = 1
+ b = 2
+ """,
+ [1,2]
+ )
+ # You can provide a list of possible statement matches.
+ self.check_coverage("""\
+ a = 1
+ b = 2
+ """,
+ ([100], [1,2], [1723,47]),
+ )
+ # You can specify missing lines.
+ self.check_coverage("""\
+ a = 1
+ if a == 2:
+ a = 3
+ """,
+ [1,2,3],
+ missing="3",
+ )
+ # You can specify a list of possible missing lines.
+ self.check_coverage("""\
+ a = 1
+ if a == 2:
+ a = 3
+ """,
+ [1,2,3],
+ missing=("47-49", "3", "100,102")
+ )
+
+ def test_failed_coverage(self):
+ # If the lines are wrong, the message shows right and wrong.
+ self.assertRaisesRegexp(AssertionError,
+ r"\[1, 2] != \[1]",
+ self.check_coverage, """\
+ a = 1
+ b = 2
+ """,
+ [1]
+ )
+ # If the list of lines possibilities is wrong, the msg shows right.
+ self.assertRaisesRegexp(AssertionError,
+ r"None of the lines choices matched \[1, 2]",
+ self.check_coverage, """\
+ a = 1
+ b = 2
+ """,
+ ([1], [2])
+ )
+ # If the missing lines are wrong, the message shows right and wrong.
+ self.assertRaisesRegexp(AssertionError,
+ r"'3' != '37'",
+ self.check_coverage, """\
+ a = 1
+ if a == 2:
+ a = 3
+ """,
+ [1,2,3],
+ missing="37",
+ )
+ # If the missing lines possibilities are wrong, the msg shows right.
+ self.assertRaisesRegexp(AssertionError,
+ r"None of the missing choices matched '3'",
+ self.check_coverage, """\
+ a = 1
+ if a == 2:
+ a = 3
+ """,
+ [1,2,3],
+ missing=("37", "4-10"),
+ )
+
+
class BasicCoverageTest(CoverageTest):
"""The simplest tests, for quick smoke testing of fundamental changes."""
@@ -212,7 +291,7 @@ class SimpleStatementTest(CoverageTest):
""",
[1,2,3,6,9], "")
- if sys.hexversion < 0x03000000: # Print statement is gone in Py3k.
+ if sys.version_info < (3, 0): # Print statement is gone in Py3k.
def testPrint(self):
self.check_coverage("""\
print "hello, world!"
@@ -403,7 +482,7 @@ class SimpleStatementTest(CoverageTest):
""",
[1,2,3,4,5], "")
- if sys.hexversion < 0x03000000:
+ if sys.version_info < (3, 0):
# In Python 2.x, exec is a statement.
def testExec(self):
self.check_coverage("""\
@@ -1038,6 +1117,18 @@ class CompoundStatementTest(CoverageTest):
class ExcludeTest(CoverageTest):
"""Tests of the exclusion feature to mark lines as not covered."""
+ def testDefault(self):
+ # A number of forms of pragma comment are accepted.
+ self.check_coverage("""\
+ a = 1
+ b = 2 # pragma: no cover
+ c = 3
+ d = 4 #pragma NOCOVER
+ e = 5
+ """,
+ [1,3,5]
+ )
+
def testSimple(self):
self.check_coverage("""\
a = 1; b = 2
@@ -1393,7 +1484,7 @@ class ExcludeTest(CoverageTest):
[8,9], "", ['#pragma: NO COVER'])
-if sys.hexversion >= 0x020400f0:
+if sys.version_info >= (2, 4):
class Py24Test(CoverageTest):
"""Tests of new syntax in Python 2.4."""
@@ -1464,7 +1555,7 @@ if sys.hexversion >= 0x020400f0:
[1,2,3,4,5,7,8,9,10,11,12,14, 17,19,21, 24,26]), "")
-if sys.hexversion >= 0x020500f0:
+if sys.version_info >= (2, 5):
class Py25Test(CoverageTest):
"""Tests of new syntax in Python 2.5."""
@@ -1585,96 +1676,8 @@ class ModuleTest(CoverageTest):
coverage.coverage()
-class ProcessTest(CoverageTest):
- """Tests of the per-process behavior of coverage.py."""
-
- def testSaveOnExit(self):
- self.make_file("mycode.py", """\
- h = "Hello"
- w = "world"
- """)
-
- self.assert_(not os.path.exists(".coverage"))
- self.run_command("coverage -x mycode.py")
- self.assert_(os.path.exists(".coverage"))
-
- def testEnvironment(self):
- # Checks that we can import modules from the test directory at all!
- self.make_file("mycode.py", """\
- import covmod1
- import covmodzip1
- a = 1
- print ('done')
- """)
-
- self.assert_(not os.path.exists(".coverage"))
- out = self.run_command("coverage -x mycode.py")
- self.assert_(os.path.exists(".coverage"))
- self.assertEqual(out, 'done\n')
-
- def testCombineParallelData(self):
- self.make_file("b_or_c.py", """\
- import sys
- a = 1
- if sys.argv[1] == 'b':
- b = 1
- else:
- c = 1
- d = 1
- print ('done')
- """)
-
- out = self.run_command("coverage -x -p b_or_c.py b")
- self.assertEqual(out, 'done\n')
- self.assert_(not os.path.exists(".coverage"))
-
- out = self.run_command("coverage -x -p b_or_c.py c")
- self.assertEqual(out, 'done\n')
- self.assert_(not os.path.exists(".coverage"))
-
- # After two -p runs, there should be two .coverage.machine.123 files.
- self.assertEqual(
- len([f for f in os.listdir('.') if f.startswith('.coverage.')]),
- 2)
-
- # Combine the parallel coverage data files into .coverage .
- self.run_command("coverage -c")
- self.assert_(os.path.exists(".coverage"))
-
- # Read the coverage file and see that b_or_c.py has all 7 lines
- # executed.
- data = coverage.CoverageData()
- data.read_file(".coverage")
- self.assertEqual(data.summary()['b_or_c.py'], 7)
-
- def test_missing_source_file(self):
- # Check what happens if the source is missing when reporting happens.
- self.make_file("fleeting.py", """\
- s = 'goodbye, cruel world!'
- """)
-
- self.run_command("coverage run fleeting.py")
- os.remove("fleeting.py")
- out = self.run_command("coverage html -d htmlcov")
- self.assertRegexpMatches(out, "No source for code: '.*fleeting.py'")
- self.assert_("Traceback" not in out)
-
- # It happens that the code paths are different for *.py and other
- # files, so try again with no extension.
- self.make_file("fleeting", """\
- s = 'goodbye, cruel world!'
- """)
-
- self.run_command("coverage run fleeting")
- os.remove("fleeting")
- out = self.run_command("coverage html -d htmlcov")
- self.assertRegexpMatches(out, "No source for code: '.*fleeting'")
- self.assert_("Traceback" not in out)
-
- def test_running_missing_file(self):
- out = self.run_command("coverage run xyzzy.py")
- self.assertRegexpMatches(out, "No file to run: .*xyzzy.py")
- self.assert_("Traceback" not in out)
+class ReportingTest(CoverageTest):
+ """Tests of some reporting behavior."""
def test_no_data_to_report_on_annotate(self):
# Reporting with no data produces a nice message and no output dir.
diff --git a/test/test_execfile.py b/test/test_execfile.py
index 8c5e9a1..2f28a06 100644
--- a/test/test_execfile.py
+++ b/test/test_execfile.py
@@ -60,5 +60,17 @@ class RunTest(CoverageTest):
run_python_file('nl.py', ['nl.py'])
self.assertEqual(self.stdout(), "Hello, world!\n"*3)
+ def test_missing_final_newline(self):
+ # Make sure we can deal with a Python file with no final newline.
+ self.make_file("abrupt.py", """\
+ if 1:
+ a = 1
+ print("a is %r" % a)
+ #""")
+ abrupt = open("abrupt.py").read()
+ self.assertEqual(abrupt[-1], '#')
+ run_python_file("abrupt.py", ["abrupt.py"])
+ self.assertEqual(self.stdout(), "a is 1\n")
+
def test_no_such_file(self):
self.assertRaises(NoSource, run_python_file, "xyzzy.py", [])
diff --git a/test/test_farm.py b/test/test_farm.py
index de07541..405c68d 100644
--- a/test/test_farm.py
+++ b/test/test_farm.py
@@ -3,7 +3,7 @@
import difflib, filecmp, fnmatch, glob, os, re, shutil, sys
sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
-from backtest import run_command, execfile # pylint: disable-msg=W0622
+from backtest import run_command, execfile # pylint: disable-msg=W0622
def test_farm(clean_only=False):
@@ -75,10 +75,15 @@ class FarmTestCase(object):
if self.dont_clean:
glo['clean'] = self.noop
+ old_mods = dict(sys.modules)
try:
execfile(self.runpy, glo)
finally:
self.cd(cwd)
+ # Remove any new modules imported during the test run. This lets us
+ # import the same source files for more than one test.
+ for m in [m for m in sys.modules if m not in old_mods]:
+ del sys.modules[m]
def run_fully(self): # pragma: no cover
"""Run as a full test case, with setUp and tearDown."""
@@ -290,7 +295,21 @@ class FarmTestCase(object):
def clean(self, cleandir):
"""Clean `cleandir` by removing it and all its children completely."""
if os.path.exists(cleandir):
- shutil.rmtree(cleandir)
+ # rmtree gives mysterious failures on Win7, so use an onerror
+ # function that tries to help diagnose the problem. Somehow, just
+ # having a function that prints and raises keeps the error from
+ # happening??
+ shutil.rmtree(cleandir, onerror=self.rmtree_err)
+
+ def rmtree_err(self, fn, path, exc):
+ """A stupid error handler that prints and raises.
+
+ Somehow, this fixes the problem it was meant to diagnose.
+
+ """
+ print("Couldn't %r on %r due to %s" % (fn, path, exc))
+ raise exc
+
def main(): # pragma: no cover
"""Command-line access to test_farm.
diff --git a/test/test_oddball.py b/test/test_oddball.py
index 05252ef..a40fb4c 100644
--- a/test/test_oddball.py
+++ b/test/test_oddball.py
@@ -92,7 +92,7 @@ class MemoryLeakTest(CoverageTest):
self.check_coverage(code.replace("ITERS", "10000"), lines, "")
ram_2 = osinfo.process_ram()
ram_growth = (ram_2 - ram_1) - (ram_1 - ram_0)
- self.assert_(ram_growth < 100000, "RAM grew by %d" % (ram_growth))
+ self.assertTrue(ram_growth < 100000, "RAM grew by %d" % (ram_growth))
class PyexpatTest(CoverageTest):
@@ -245,7 +245,7 @@ class ExceptionTest(CoverageTest):
self.assertEqual(clean_lines, lines_expected)
-if sys.hexversion > 0x02050000:
+if sys.version_info >= (2, 5):
class DoctestTest(CoverageTest):
"""Tests invoked with doctest should measure properly."""
diff --git a/test/test_phystokens.py b/test/test_phystokens.py
index 6b16d68..0e77851 100644
--- a/test/test_phystokens.py
+++ b/test/test_phystokens.py
@@ -36,6 +36,7 @@ class PhysTokensTest(CoverageTest):
tokenized += text + "\n"
# source_token_lines doesn't preserve trailing spaces, so trim all that
# before comparing.
+ source = source.replace('\r\n', '\n')
source = re.sub("(?m)[ \t]+$", "", source)
tokenized = re.sub("(?m)[ \t]+$", "", tokenized)
self.assertMultiLineEqual(source, tokenized)
@@ -75,5 +76,7 @@ class PhysTokensTest(CoverageTest):
def test_stress(self):
# Check the tokenization of a stress-test file.
- stress = os.path.join(HERE, "stress_phystoken.txt")
+ stress = os.path.join(HERE, "stress_phystoken.tok")
+ self.check_file_tokenization(stress)
+ stress = os.path.join(HERE, "stress_phystoken_dos.tok")
self.check_file_tokenization(stress)
diff --git a/test/test_process.py b/test/test_process.py
new file mode 100644
index 0000000..ce98a38
--- /dev/null
+++ b/test/test_process.py
@@ -0,0 +1,205 @@
+"""Tests for process behavior of coverage.py."""
+
+import os, sys, textwrap
+import coverage
+
+sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
+from coveragetest import CoverageTest
+
+
+class ProcessTest(CoverageTest):
+ """Tests of the per-process behavior of coverage.py."""
+
+ def number_of_data_files(self):
+ """Return the number of coverage data files in this directory."""
+ num = 0
+ for f in os.listdir('.'):
+ if f.startswith('.coverage.') or f == '.coverage':
+ num += 1
+ return num
+
+ def testSaveOnExit(self):
+ self.make_file("mycode.py", """\
+ h = "Hello"
+ w = "world"
+ """)
+
+ self.assertFalse(os.path.exists(".coverage"))
+ self.run_command("coverage -x mycode.py")
+ self.assertTrue(os.path.exists(".coverage"))
+
+ def testEnvironment(self):
+ # Checks that we can import modules from the test directory at all!
+ self.make_file("mycode.py", """\
+ import covmod1
+ import covmodzip1
+ a = 1
+ print ('done')
+ """)
+
+ self.assertFalse(os.path.exists(".coverage"))
+ out = self.run_command("coverage -x mycode.py")
+ self.assertTrue(os.path.exists(".coverage"))
+ self.assertEqual(out, 'done\n')
+
+ def testCombineParallelData(self):
+ self.make_file("b_or_c.py", """\
+ import sys
+ a = 1
+ if sys.argv[1] == 'b':
+ b = 1
+ else:
+ c = 1
+ d = 1
+ print ('done')
+ """)
+
+ out = self.run_command("coverage -x -p b_or_c.py b")
+ self.assertEqual(out, 'done\n')
+ self.assertFalse(os.path.exists(".coverage"))
+
+ out = self.run_command("coverage -x -p b_or_c.py c")
+ self.assertEqual(out, 'done\n')
+ self.assertFalse(os.path.exists(".coverage"))
+
+ # After two -p runs, there should be two .coverage.machine.123 files.
+ self.assertEqual(self.number_of_data_files(), 2)
+
+ # Combine the parallel coverage data files into .coverage .
+ self.run_command("coverage -c")
+ self.assertTrue(os.path.exists(".coverage"))
+
+ # After combining, there should be only the .coverage file.
+ self.assertEqual(self.number_of_data_files(), 1)
+
+ # Read the coverage file and see that b_or_c.py has all 7 lines
+ # executed.
+ data = coverage.CoverageData()
+ data.read_file(".coverage")
+ self.assertEqual(data.summary()['b_or_c.py'], 7)
+
+ def test_combine_with_rc(self):
+ self.make_file("b_or_c.py", """\
+ import sys
+ a = 1
+ if sys.argv[1] == 'b':
+ b = 1
+ else:
+ c = 1
+ d = 1
+ print ('done')
+ """)
+
+ self.make_file(".coveragerc", """\
+ [run]
+ parallel = true
+ """)
+
+ out = self.run_command("coverage run b_or_c.py b")
+ self.assertEqual(out, 'done\n')
+ self.assertFalse(os.path.exists(".coverage"))
+
+ out = self.run_command("coverage run b_or_c.py c")
+ self.assertEqual(out, 'done\n')
+ self.assertFalse(os.path.exists(".coverage"))
+
+ # After two runs, there should be two .coverage.machine.123 files.
+ self.assertEqual(self.number_of_data_files(), 2)
+
+ # Combine the parallel coverage data files into .coverage .
+ self.run_command("coverage combine")
+ self.assertTrue(os.path.exists(".coverage"))
+ self.assertTrue(os.path.exists(".coveragerc"))
+
+ # After combining, there should be only the .coverage file.
+ self.assertEqual(self.number_of_data_files(), 1)
+
+ # Read the coverage file and see that b_or_c.py has all 7 lines
+ # executed.
+ data = coverage.CoverageData()
+ data.read_file(".coverage")
+ self.assertEqual(data.summary()['b_or_c.py'], 7)
+
+ # Reporting should still work even with the .rc file
+ out = self.run_command("coverage report")
+ self.assertMultiLineEqual(out, textwrap.dedent("""\
+ Name Stmts Exec Cover
+ ----------------------------
+ b_or_c 7 7 100%
+ """))
+
+ def test_missing_source_file(self):
+ # Check what happens if the source is missing when reporting happens.
+ self.make_file("fleeting.py", """\
+ s = 'goodbye, cruel world!'
+ """)
+
+ self.run_command("coverage run fleeting.py")
+ os.remove("fleeting.py")
+ out = self.run_command("coverage html -d htmlcov")
+ self.assertRegexpMatches(out, "No source for code: '.*fleeting.py'")
+ self.assertFalse("Traceback" in out)
+
+ # It happens that the code paths are different for *.py and other
+ # files, so try again with no extension.
+ self.make_file("fleeting", """\
+ s = 'goodbye, cruel world!'
+ """)
+
+ self.run_command("coverage run fleeting")
+ os.remove("fleeting")
+ status, out = self.run_command_status("coverage html -d htmlcov", 1)
+ self.assertRegexpMatches(out, "No source for code: '.*fleeting'")
+ self.assertFalse("Traceback" in out)
+ self.assertEqual(status, 1)
+
+ def test_running_missing_file(self):
+ status, out = self.run_command_status("coverage run xyzzy.py", 1)
+ self.assertRegexpMatches(out, "No file to run: .*xyzzy.py")
+ self.assertFalse("Traceback" in out)
+ self.assertEqual(status, 1)
+
+ def test_code_throws(self):
+ self.make_file("throw.py", """\
+ def f1():
+ raise Exception("hey!")
+
+ def f2():
+ f1()
+
+ f2()
+ """)
+
+ # The important thing is for "coverage run" and "python" to report the
+ # same traceback.
+ status, out = self.run_command_status("coverage run throw.py", 1)
+ out2 = self.run_command("python throw.py")
+ self.assertMultiLineEqual(out, out2)
+
+ # But also make sure that the output is what we expect.
+ self.assertTrue('File "throw.py", line 5, in f2' in out)
+ self.assertTrue('raise Exception("hey!")' in out)
+ self.assertFalse('coverage' in out)
+ self.assertEqual(status, 1)
+
+ def test_code_exits(self):
+ self.make_file("exit.py", """\
+ import sys
+ def f1():
+ print("about to exit..")
+ sys.exit(17)
+
+ def f2():
+ f1()
+
+ f2()
+ """)
+
+ # The important thing is for "coverage run" and "python" to have the
+ # same output. No traceback.
+ status, out = self.run_command_status("coverage run exit.py", 17)
+ status2, out2 = self.run_command_status("python exit.py", 17)
+ self.assertMultiLineEqual(out, out2)
+ self.assertMultiLineEqual(out, "about to exit..\n")
+ self.assertEqual(status, status2)
+ self.assertEqual(status, 17)
diff --git a/test/test_summary.py b/test/test_summary.py
index 0eec58c..d2f40ae 100644
--- a/test/test_summary.py
+++ b/test/test_summary.py
@@ -20,7 +20,7 @@ class SummaryTest(CoverageTest):
def report_from_command(self, cmd):
"""Return the report from the `cmd`, with some convenience added."""
report = self.run_command(cmd).replace('\\', '/')
- self.assert_("error" not in report.lower())
+ self.assertFalse("error" in report.lower())
return report
def line_count(self, report):
@@ -46,10 +46,10 @@ class SummaryTest(CoverageTest):
# ---------------------------------------------------------------------
# TOTAL 8 8 100%
- self.assert_("/coverage/__init__/" not in report)
- self.assert_("/test/modules/covmod1 " in report)
- self.assert_("/test/zipmods.zip/covmodzip1 " in report)
- self.assert_("mycode " in report)
+ self.assertFalse("/coverage/__init__/" in report)
+ self.assertTrue("/test/modules/covmod1 " in report)
+ self.assertTrue("/test/zipmods.zip/covmodzip1 " in report)
+ self.assertTrue("mycode " in report)
self.assertEqual(self.last_line_squeezed(report), "TOTAL 8 8 100%")
def test_report_just_one(self):
@@ -62,10 +62,10 @@ class SummaryTest(CoverageTest):
# mycode 4 4 100%
self.assertEqual(self.line_count(report), 3)
- self.assert_("/coverage/" not in report)
- self.assert_("/test/modules/covmod1 " not in report)
- self.assert_("/test/zipmods.zip/covmodzip1 " not in report)
- self.assert_("mycode " in report)
+ self.assertFalse("/coverage/" in report)
+ self.assertFalse("/test/modules/covmod1 " in report)
+ self.assertFalse("/test/zipmods.zip/covmodzip1 " in report)
+ self.assertTrue("mycode " in report)
self.assertEqual(self.last_line_squeezed(report), "mycode 4 4 100%")
def test_report_omitting(self):
@@ -79,10 +79,10 @@ class SummaryTest(CoverageTest):
# mycode 4 4 100%
self.assertEqual(self.line_count(report), 3)
- self.assert_("/coverage/" not in report)
- self.assert_("/test/modules/covmod1 " not in report)
- self.assert_("/test/zipmods.zip/covmodzip1 " not in report)
- self.assert_("mycode " in report)
+ self.assertFalse("/coverage/" in report)
+ self.assertFalse("/test/modules/covmod1 " in report)
+ self.assertFalse("/test/zipmods.zip/covmodzip1 " in report)
+ self.assertTrue("mycode " in report)
self.assertEqual(self.last_line_squeezed(report), "mycode 4 4 100%")
def test_report_branches(self):
@@ -102,6 +102,6 @@ class SummaryTest(CoverageTest):
# mybranch 5 5 2 1 85%
self.assertEqual(self.line_count(report), 3)
- self.assert_("mybranch " in report)
+ self.assertTrue("mybranch " in report)
self.assertEqual(self.last_line_squeezed(report),
"mybranch 5 5 2 1 85%")
diff --git a/test/test_testing.py b/test/test_testing.py
index a239d14..5a72c55 100644
--- a/test/test_testing.py
+++ b/test/test_testing.py
@@ -76,3 +76,11 @@ class TestingTest(TestCase):
self.assertRaisesRegexp, ZeroDivisionError, "XYZ",
self.please_succeed
)
+
+ def test_assert_true(self):
+ self.assertTrue(True)
+ self.assertRaises(AssertionError, self.assertTrue, False)
+
+ def test_assert_false(self):
+ self.assertFalse(False)
+ self.assertRaises(AssertionError, self.assertFalse, True)