changeset 2:20896f1e91c6 trunk

Forgot to check in the doc directory.
author cmlenz
date Wed, 30 May 2007 07:37:26 +0000
parents 7870274479f5
children 3fb8ba1a4444
files doc/catalogs.txt doc/cmdline.txt doc/display.txt doc/docutils.conf doc/epydoc.conf doc/formatting.txt doc/index.txt doc/setup.txt doc/style/bkgnd_pattern.png doc/style/docutils.css doc/style/edgewall.css doc/style/epydoc.css doc/style/shadow.gif doc/style/vertbars.png
diffstat 14 files changed, 847 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/doc/catalogs.txt
@@ -0,0 +1,106 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+=============================
+Working with Message Catalogs
+=============================
+
+.. contents:: Contents
+   :depth: 2
+.. sectnum::
+
+
+Introduction
+============
+
+The ``gettext`` translation system enables you to mark any strings used in your
+application as subject to localization, by wrapping them in functions such as
+``gettext(str)`` and ``ngettext(singular, plural, num)``. For brevity, the
+``gettext`` function is often aliased to ``_(str)``, so you can write::
+
+    print _("Hello")
+
+instead of just::
+
+    print "Hello"
+
+to make the string "Hello" localizable.
+
+Message catalogs are collections of translations for such localizable messages
+used in an application. They are commonly stored in PO (Portable Object) and MO
+(Machine Object) files, the formats of which are defined by the GNU `gettext`_
+tools and the GNU `translation project`_.
+
+ .. _`gettext`: http://www.gnu.org/software/gettext/
+ .. _`translation project`: http://sourceforge.net/projects/translation
+
+The general procedure for building message catalogs looks something like this:
+
+ * use a tool (such as ``xgettext``) to extract localizable strings from the
+   code base and write them to a POT (PO Template) file.
+ * make a copy of the POT file for a specific locale (for example, "en_US")
+   and start translating the messages
+ * use a tool such as ``msgfmt`` to compile the locale PO file into an binary
+   MO file
+ * later, when code changes make it necessary to update the translations, you
+   regenerate the POT file and merge the changes into the various
+   locale-specific PO files, for example using ``msgmerge``
+
+Python provides the `gettext module`_ as part of the standard library, which
+enables applications to work with appropriately generated MO files.
+
+ .. _`gettext module`: http://docs.python.org/lib/module-gettext.html
+
+As ``gettext`` provides a solid and well supported foundation for translating
+application messages, Babel does not reinvent the wheel, but rather reuses this
+infrastructure, and makes it easier to build message catalogs for Python
+applications.
+
+
+Message Extraction
+==================
+
+Babel provides functionality similar to that of the ``xgettext`` program,
+except that only extraction from Python source files is built-in, while support
+for other file formats can be added using a simple extension mechanism.
+
+(TODO: more)
+
+
+--------------------------
+Writing Extraction Methods
+--------------------------
+
+(TODO: write)
+
+---------------------
+``setup.py`` Commands
+---------------------
+
+(TODO: overview)
+
+See `Distutils/Setuptools Integration <setup.html>`_ for more information.
+
+-------------------
+Command-line script
+-------------------
+
+(TODO: overview)
+
+See `Command-Line Interface <cmdline.html>`_ for more information.
+
+
+Extended ``Translations`` Class
+===============================
+
+Many web-based applications are composed of a variety of different components
+(possibly using some kind of plugin system), and some of those components may
+provide their own message catalogs that need to be integrated into the larger
+system.
+
+To support this usage pattern, Babel provides a ``Translations`` class that is
+derived from the ``GNUTranslations`` class in the ``gettext`` module. This
+class adds a ``merge()`` method that takes another ``Translations`` instance,
+and merges its contents into the catalog::
+
+    translations = Translations.load('main')
+    translations.merge(Translations.load('plugin1'))
new file mode 100644
--- /dev/null
+++ b/doc/cmdline.txt
@@ -0,0 +1,37 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+======================
+Command-Line Interface
+======================
+
+Babel includes a command-line interface for working with message catalogs,
+similar to the GNU ``xgettext`` program commonly available on Linux/Unix
+systems.
+
+
+.. contents:: Contents
+   :depth: 2
+.. sectnum::
+
+
+pygettext
+=========
+
+When properly installed, Babel provides a script called ``pygettext``, which can
+be used to extract localized messages from a variety of files::
+
+    $ pygettext --help
+    usage: pygettext [options] dirname1 <dirname2> ...
+
+    options:
+      --version             show program's version number and exit
+      -h, --help            show this help message and exit
+      --charset=CHARSET     charset to use in the output
+      -k KEYWORDS, --keyword=KEYWORDS
+                            keywords to look for in addition to the defaults. You
+                            can specify multiple -k flags on the command line.
+      --no-location         do not include location comments with filename and
+                            line number
+      --omit-header         do not include msgid "" entry in header
+      -o OUTPUT, --output=OUTPUT
+                            path to the output POT file
new file mode 100644
--- /dev/null
+++ b/doc/display.txt
@@ -0,0 +1,52 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+====================
+Locale Display Names
+====================
+
+.. contents:: Contents
+   :depth: 2
+.. sectnum::
+
+
+Introduction
+============
+
+While `message catalogs <catalogs.html>`_ allow you to localize any messages
+in your application, there are a number of strings that are used in many
+applications for which translations are readily available.
+
+Imagine for example you have a list of countries that users can choose from,
+and you'd like to display the names of those countries in the language the
+user prefers. Instead of translating all those country names yourself in your
+application, you can make use of the translations provided by the locale data
+included with Babel, which is based on the `Common Locale Data Repository 
+(CLDR) <http://unicode.org/cldr/>`_ developed and maintained by the `Unicode
+Consortium <http://unicode.org/>`_.
+
+
+The ``Locale`` Class
+====================
+
+You normally access such locale data through the `Locale`_ class provided
+by Babel::
+
+    >>> from babel import Locale
+    >>> locale = Locale('en', 'US')
+    >>> locale.territories['US']
+    u'United States'
+    >>> locale = Locale('es', 'MX')
+    >>> locale.territories['US']
+    u'Estados Unidos'
+
+.. _`Locale`: api/babel.core.Locale-class.html
+
+In addition to country/territory names, the locale data also provides access to
+names of languages, scripts, variants, time zones, and more. Some of the data
+is closely related to `number and date formatting`_.
+
+Most of the corresponding ``Locale`` properties return dictionaries, where the
+key is a code such as the ISO country and language codes. Consult the API
+documentation for references to the relevant specifications.
+
+.. _`number and date formatting`: formatting.html
new file mode 100644
--- /dev/null
+++ b/doc/docutils.conf
@@ -0,0 +1,9 @@
+[general]
+input_encoding = utf-8
+strip_comments = yes
+toc_backlinks = none
+
+[html4css1 writer]
+embed_stylesheet = no
+stylesheet = style/edgewall.css
+xml_declaration = no
new file mode 100644
--- /dev/null
+++ b/doc/epydoc.conf
@@ -0,0 +1,24 @@
+[epydoc]
+
+name: Documentation Index
+url: ../index.html
+modules: babel
+verbosity: 1
+
+# Extraction
+docformat: restructuredtext
+parse: yes
+introspect: yes
+exclude: .*\.tests.*
+inheritance: listed
+private: no
+imports: no
+include-log: no
+
+# HTML output
+output: html
+target: doc/api/
+css: doc/style/epydoc.css
+top: babel
+frames: no
+sourcecode: no
new file mode 100644
--- /dev/null
+++ b/doc/formatting.txt
@@ -0,0 +1,12 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+==========================
+Number and Date Formatting
+==========================
+
+
+.. contents:: Contents
+   :depth: 2
+.. sectnum::
+
+
new file mode 100644
--- /dev/null
+++ b/doc/index.txt
@@ -0,0 +1,62 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+=====
+Babel
+=====
+
+
+---------------------------------------------------
+Simple Internationalization for Python Applications
+---------------------------------------------------
+
+Babel is an integrated collection of utilities that assist in
+internationalizing and localizing Python applications, with an
+emphasis on web-based applications.
+
+* `Working with Message Catalogs <catalogs.html>`_
+* `Locale Display Names <display.html>`_
+* `Number and Date Formatting <formatting.html>`_
+* `Command-Line Interface <cmdline.html>`_
+* `Distutils/Setuptools Integration <setup.html>`_
+* `Generated API Documentation <api/index.html>`_
+
+Introduction
+------------
+
+The functionality Babel provides for internationalization (I18n) and
+localization (L10N) can be separated into two different aspects:
+
+ * tools to build and work with ``gettext`` message catalogs, and
+ * a Python interface to the CLDR (Common Locale Data Repository), providing
+   access to various locale display names, localized number and date
+   formatting, etc.
+
+While the Python standard library includes a
+`gettext <http://docs.python.org/lib/module-gettext.html>`_ module that enables
+applications to use message catalogs, it requires developers to build these
+catalogs using GNU tools such as ``xgettext``, ``msgmerge``, and ``msgfmt``.
+And while ``xgettext`` does have support for extracting messages from Python
+files, it does not know how to deal with other kinds of files commonly found
+in Python web-applications, such as templates, nor does it provide an easy
+extensibility mechanism to add such support.
+
+Babel addresses this by providing a framework where various extraction methods
+can be plugged in to a larger message extraction framework, and also removes
+the dependency on the GNU ``gettext`` tools for common tasks, as these aren't
+necessarily available on all platforms. See `Working with Message Catalogs`_
+for details on this aspect of Babel.
+
+Furthermore, while the Python standard library does include support for basic
+localization with respect to the formatting of numbers and dates (the
+`locale <http://docs.python.org/lib/module-locale.html>`_ module, among others),
+this support is based on the assumption that there will be only one specific
+locale used per process (at least simultaneously.) Also, it doesn't provide
+access to other kinds of locale data, such as the localized names of countries,
+languages, or time zones, with are frequently needed in web-based applications.
+
+For these requirements, Babel includes data extracted from the `Common Locale
+Data Repository (CLDR) <http://unicode.org/cldr/>`_, and provides a number of
+convenient methods for accessing and using this data. See `Locale Display
+Names`_ and `Number and Date Formatting`_ for more information on this aspect
+of Babel.
+
new file mode 100644
--- /dev/null
+++ b/doc/setup.txt
@@ -0,0 +1,78 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+================================
+Distutils/Setuptools Integration
+================================
+
+Babel provides commands for integration into ``setup.py`` scripts, based on
+either the ``distutils`` package that is part of the Python standard library,
+or the third-party ``setuptools`` package.
+
+These commands are available by default when Babel has been properly installed,
+and ``setup.py`` is using ``setuptools``. For projects that use plain old
+``distutils``, the commands need to be registered explicitly, for example::
+
+    from distutils.core import setup
+    from babel.catalog import frontend as babel
+    
+    setup(
+        ...
+        cmd_class = {'extract_messages': babel.extract_messages}
+    )
+
+
+.. contents:: Contents
+   :depth: 2
+.. sectnum::
+
+
+extract_messages
+================
+
+The ``extract_messages`` command is comparabe to the GNU ``xgettext`` program:
+it can extract localizable messages from a variety of difference source files,
+and generate a PO (portable object) template file from the collected messages.
+
+If the command has been correctly installed or registered, another project's
+``setup.py`` script should allow you to use the command::
+
+    $ ./setup.py extract_messages --help
+    Global options:
+      --verbose (-v)  run verbosely (default)
+      --quiet (-q)    run quietly (turns verbosity off)
+      --dry-run (-n)  don't actually do anything
+      --help (-h)     show detailed help message
+
+    Options for 'extract_messages' command:
+      --charset        charset to use in the output
+      --keywords (-k)  comma-separated list of keywords to look for in addition
+                       to the defaults
+      --no-location    do not write filename/lineno location comments
+      --output-file    filename of the output PO file
+
+Running the command will produce a PO file::
+
+    $ ./setup.py extract_messages --output-file webapp/locales/messages.pot
+    running extract_messages
+    extracting messages from 'webapp'
+    extracting messages from 'webparts'
+    writing PO file to webapp/locales/messages.pot
+
+
+Options
+-------
+
+As shown in the ``--help`` output above, the ``extract_messages`` command
+accepts the following options:
+
+``--charset``
+  The character set / encoding to use in the generated PO file.
+``--keywords``
+  A comma-separated list of keywords (function names) to look for in addition
+  to the default keywords
+``--no-location``
+  If this flag is set, location comments will not be included in the generated
+  PO file.
+``--output-file`` or ``-o``
+  The path to the PO file that should be generated
+
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..90e92682135d3f7213332f870f973bd06d6d57ee
GIT binary patch
literal 112
zc%17D@N?(olHy`uVBq!ia0vp^B0wy_$P6TPuAPklQfvV}A+FxOzM<ja$?1EZ14UFl
zT^vI=t|to=iYB~>SaRTj#)AV3j$Ayz@Myi$<MK684X4~sFf(*H@+4o{pJfBoz~JfX
K=d#Wzp$PzDHzRKV
new file mode 100644
--- /dev/null
+++ b/doc/style/docutils.css
@@ -0,0 +1,277 @@
+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:Date: $Date: 2005-12-18 01:56:14 +0100 (Sun, 18 Dec 2005) $
+:Revision: $Revision: 4224 $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+dl.docutils dt {
+  font-weight: bold }
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin-left: 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left {
+  clear: left }
+
+img.align-right {
+  clear: right }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font-family: serif ;
+  font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em ;
+  background-color: #eeeeee }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+tt.docutils {
+  background-color: #eeeeee }
+
+ul.auto-toc {
+  list-style-type: none }
new file mode 100644
--- /dev/null
+++ b/doc/style/edgewall.css
@@ -0,0 +1,59 @@
+@import(docutils.css);
+
+html, body { height: 100%; margin: 0; padding: 0; }
+html, body { background: #4b4d4d url(bkgnd_pattern.png); color: #000; }
+body, th, td {
+  font: normal small Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif;
+}
+pre, code, tt { font-size: medium; }
+h1, h2, h3, h4 {
+  border-bottom: 1px solid #ccc;
+  font-family: Arial,Verdana,'Bitstream Vera Sans',Helvetica,sans-serif;
+  font-weight: bold; letter-spacing: -0.018em;
+}
+h1 { font-size: 19px; margin: 2em 0 .5em; }
+h2 { font-size: 16px; margin: 1.5em 0 .5em; }
+h3 { font-size: 14px; margin: 1.2em 0 .5em; }
+hr { border: none;  border-top: 1px solid #ccb; margin: 2em 0; }
+p { margin: 0 0 1em; }
+
+:link, :visited { text-decoration: none; border-bottom: 1px dotted #bbb;
+  color: #b00;
+}
+:link:hover, :visited:hover { background-color: #eee; color: #555; }
+:link img, :visited img { border: none }
+h1 :link, h1 :visited ,h2 :link, h2 :visited, h3 :link, h3 :visited,
+h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited {
+  color: #000;
+}
+
+div.document { background: #fff url(shadow.gif) right top repeat-y;
+  border-left: 1px solid #000; margin: 0 auto 0 40px;
+  min-height: 100%; width: 54em; padding: 0 180px 1px 20px;
+}
+h1.title, div.document#babel h1 { border: none; color: #666;
+  font-size: x-large; margin: 0 -20px 1em; padding: 2em 20px 0;
+}
+h1.title { background: url(vertbars.png) repeat-x; }
+div.document#babel h1.title { text-indent: -4000px; }
+div.document#babel h1 { text-align: center; }
+pre.literal-block { background: #d7d7d7; border: 1px solid #e6e6e6; color: #000;
+  margin: 1em 1em; padding: .25em; overflow: auto;
+}
+
+div.contents { font-size: 90%; position: absolute; position: fixed;
+  margin-left: 80px; left: 60em; top: 30px; right: 0;
+}
+div.contents .topic-title { display: none; }
+div.contents ul { list-style: none; padding-left: 0; }
+div.contents :link, div.contents :visited { color: #c6c6c6; border: none;
+  display: block; padding: 3px 5px 3px 10px;
+}
+div.contents :link:hover, div.contents :visited:hover { background: #000;
+  color: #fff;
+}
+
+p.admonition-title { font-weight: bold; margin-bottom: 0; }
+div.note, div.warning { font-style: italic; margin-left: 2em;
+  margin-right: 2em;
+}
new file mode 100644
--- /dev/null
+++ b/doc/style/epydoc.css
@@ -0,0 +1,131 @@
+html { background: #4b4d4d url(../style/bkgnd_pattern.png); margin: 0;
+  padding: 1em 1em 3em;
+}
+body { background: #fff url(../style/vertbars.png) repeat-x;
+  border: 1px solid #000; color: #000; margin: 1em 0; padding: 0 1em 1em;
+}
+body, th, td {
+  font: normal small Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif;
+}
+h1, h2, h3, h4 {
+  font-family: Arial,Verdana,'Bitstream Vera Sans',Helvetica,sans-serif;
+  font-weight: bold; letter-spacing: -0.018em;
+}
+h1 { font-size: 19px; margin: 2em 0 .5em; }
+h2 { font-size: 16px; margin: 1.5em 0 .5em; }
+h3 { font-size: 14px; margin: 1.2em 0 .5em; }
+hr { border: none;  border-top: 1px solid #ccb; margin: 2em 0; }
+p { margin: 0 0 1em; }
+:link, :visited { text-decoration: none; border-bottom: 1px dotted #bbb;
+  color: #b00;
+}
+:link:hover, :visited:hover { background-color: #eee; color: #555; }
+
+table { border: none; border-collapse: collapse; }
+
+table.navbar { background: #000; color: #fff; margin: 2em 0 .33em; }
+table.navbar th { border: 1px solid #000; font-weight: bold; padding: 1px; }
+table.navbar :link, table.navbar :visited { border: none; color: #fff; }
+table.navbar :link:hover, table.navbar :visited:hover { background: none;
+  text-decoration: underline overline;
+}
+table.navbar th.navbar-select { background: #fff; color: #000; }
+span.breadcrumbs { color: #666; font-size: 95%; }
+h1.epydoc { border: none; color: #666;
+  font-size: x-large; margin: 1em 0 0; padding: 0;
+}
+pre.base-tree { color: #666; margin: 0; padding: 0; }
+pre.base-tree :link, pre.base-tree :visited { border: none; }
+pre.py-doctest, pre.variable, pre.rst-literal-block { background: #eee;
+  border: 1px solid #e6e6e6; color: #000; margin: 1em; padding: .25em;
+  overflow: auto;
+}
+pre.variable { margin: 0; }
+
+/* Summary tables */
+
+table.summary { margin: .5em 0; }
+table.summary tr.table-header { background: #f7f7f0; }
+table.summary td.table-header { color: #666; font-weight: bold; }
+table.summary th, table.summary td { border: 1px solid #d7d7d7; }
+table.summary th th, table.summary td td { border: none; }
+table.summary td.summary table td { color: #666; font-size: 90%; }
+table.summary td.summary table br { display: none; }
+table.summary td.summary span.summary-type { font-size: 90%; }
+table.summary td.summary span.summary-type code { font-size: 110%; }
+p.indent-wrapped-lines { color: #999; font-size: 85%; margin: 0;
+  padding: 0 0 0 7em; text-indent: -7em;
+}
+p.indent-wrapped-lines code { color: #999; font-size: 115%; }
+p.indent-wrapped-lines :link, p.indent-wrapped-lines :visited { border: none; }
+.summary-sig { display: block; font-family: monospace; font-size: 120%;
+  margin-bottom: .5em;
+}
+.summary-sig-name { font-weight: bold; }
+.summary-sig-arg { color: #333; }
+.summary-sig :link, .summary-sig :visited { border: none; }
+.summary-name { font-family: monospace; font-weight: bold; }
+
+/* Details tables */
+
+table.details { margin: 2em 0 0; }
+div table.details { margin-top: 0; }
+table.details tr.table-header { background: transparent; }
+table.details td.table-header { border-bottom: 1px solid #ccc; padding: 2em 0 0; }
+table.details span.table-header {
+  font: bold 140% Arial,Verdana,'Bitstream Vera Sans',Helvetica,sans-serif;
+  letter-spacing: -0.018em;
+}
+table.details th, table.details td { border: none; }
+table.details th th, table.details td td { border: none; }
+table.details td { padding-left: 2em; }
+table.details td td { padding-left: 0; }
+table.details h3.epydoc { margin-left: -2em; }
+table.details h3.epydoc .sig { color: #999; font-family: monospace; }
+table.details h3.epydoc .sig-name { color: #000; }
+table.details h3.epydoc .sig-arg { color: #666; }
+table.details h3.epydoc .sig-default { font-size: 95%; font-weight: normal; }
+table.details h3.epydoc .sig-default code { font-weight: normal; }
+table.details h3.epydoc .fname { color: #999; font-size: 90%;
+  font-style: italic; font-weight: normal; line-height: 1.6em;
+}
+
+dl dt { color: #666; margin-top: 1em; }
+dl dd { margin: 0; padding-left: 2em; }
+dl.fields { margin: 1em 0; padding: 0; }
+dl.fields dt { color: #666; margin-top: 1em; }
+dl.fields dd ul { margin: 0; padding: 0; }
+div.fields { font-size: 90%; margin: 0 0 2em 2em; }
+div.fields p { margin-bottom: 0.5em; }
+
+table td.footer { color: #999; font-size: 85%; margin-top: 3em;
+  padding: 0 3em 1em; position: absolute; width: 80%; }
+table td.footer :link, table td.footer :visited { border: none; color: #999; }
+table td.footer :link:hover, table td.footer :visited:hover {
+  background: transparent; text-decoration: underline;
+}
+
+/* Syntax highlighting */
+
+.py-prompt, .py-more, .variable-ellipsis, .variable-op { color: #999; }
+.variable-group { color: #666; font-weight: bold; }
+.py-string, .variable-string, .variable-quote { color: #093; }
+.py-comment { color: #06f; font-style: italic; }
+.py-keyword { color: #00f; }
+.py-output { background: #f6f6f0; color: #666; font-weight: bold; }
+
+/* Index */
+
+table.link-index { background: #f6f6f0; border: none; margin-top: 1em; }
+table.link-index td.link-index { border: none; font-family: monospace;
+  font-weight: bold; padding: .5em 1em;
+}
+table.link-index td table, table.link-index td td { border: none; }
+table.link-index .index-where { color: #999;
+  font-family: Verdana,Arial,'Bitstream Vera Sans',Helvetica,sans-serif;
+  font-size: 90%; font-weight: normal; line-height: 1.6em;
+}
+table.link-index .index-where :link, table.link-index .index-where :visited {
+  border: none; color: #666;
+}
+h2.epydoc { color: #999; font-size: 200%; line-height: 10px; }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..326cd1b37dcd637d2e8b7193fe0011f51cca3ce9
GIT binary patch
literal 227
zc${<hbhEHbT)@D^u!sQ!Lc_zoeZ4HLt&EM0|1mOw#TXQSvapIUurla?I3TqQ%quud
zlrDZSmDDaVyF7E}b@6Ytvoj_shOWv?&*N&2(|LPsf$hGxedl*76r8xsnPhgyIr50X
zd<6}!Q;RpPnW`>y`k~e02bnvp_D$RTJdd?9OQ`;xMNQr6-*0k%)gGDlIK1ArveB)f
zy1Birqq{afsXt{x+N6vrS=0I^&YBz=ojG&P!l|<tFPgq&`LYE|*W`4qZ`#nham(gy
aPIaAIoocJPH|^MWAiw3{(IdQ^4AuZ)%VDtq
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..42ae3f86d7f1513fd585ad02959afbb37ad476cb
GIT binary patch
literal 270
zc%17D@N?(olHy`uVBq!ia0vp^0zj<5!2~3yyw0Buq&N#aB8wRqxP?KOkzv*x37{Z*
ziKnkC`xPz@COHia{`NUQp|zeajv*GOr}lgD9aa!v`Tf8C>%IowZOI~+1jT1O3(*SY
z=AC!{^{#V=egxhBzNNG+Wcfh@o-JZ+A^YdBKeo7Z&60On=AvAqCA)Sc&P(TZUiF#(
z^rj1DlCO7NijoNWTO^lr+bufXqg3k6Z@=t^|9Q_@g4NuszNO~8s$076@rDAqInO=8
zN?HUmba__RS@I|KY$^3?e!VMWHqT1EydCdvADZy$5&PrG?DFy^Z!PAn-4+0JID@CF
KpUXO@geCwp5oi<u
Copyright (C) 2012-2017 Edgewall Software