Pygments-2.2.0/0000755000175000017500000000000013041220507012367 5ustar piotrpiotrPygments-2.2.0/setup.cfg0000644000175000017500000000022313041220507014205 0ustar piotrpiotr[egg_info] tag_build = tag_date = 0 [aliases] release = egg_info -Db '' upload = upload --sign --identity=36580288 [bdist_wheel] universal = 1 Pygments-2.2.0/doc/0000755000175000017500000000000013041220507013134 5ustar piotrpiotrPygments-2.2.0/doc/languages.rst0000644000175000017500000000534113041200252015632 0ustar piotrpiotr:orphan: Supported languages =================== Pygments supports an ever-growing range of languages. Watch this space... Programming languages --------------------- * ActionScript * Ada * ANTLR * AppleScript * Assembly (various) * Asymptote * Awk * Befunge * Boo * BrainFuck * C, C++ * C# * Clojure * CoffeeScript * ColdFusion * Common Lisp * Coq * Cryptol (incl. Literate Cryptol) * `Crystal `_ * `Cython `_ * `D `_ * Dart * Delphi * Dylan * `Elm `_ * Erlang * `Ezhil `_ Ezhil - A Tamil programming language * Factor * Fancy * Fortran * F# * GAP * Gherkin (Cucumber) * GL shaders * Groovy * `Haskell `_ (incl. Literate Haskell) * IDL * Io * Java * JavaScript * Lasso * LLVM * Logtalk * `Lua `_ * Matlab * MiniD * Modelica * Modula-2 * MuPad * Nemerle * Nimrod * Objective-C * Objective-J * Octave * OCaml * PHP * `Perl `_ * PovRay * PostScript * PowerShell * Prolog * `Python `_ 2.x and 3.x (incl. console sessions and tracebacks) * `REBOL `_ * `Red `_ * Redcode * `Ruby `_ (incl. irb sessions) * Rust * S, S-Plus, R * Scala * Scheme * Scilab * Smalltalk * SNOBOL * Tcl * Vala * Verilog * VHDL * Visual Basic.NET * Visual FoxPro * XQuery * Zephir Template languages ------------------ * Cheetah templates * `Django `_ / `Jinja `_ templates * ERB (Ruby templating) * `Genshi `_ (the Trac template language) * JSP (Java Server Pages) * `Myghty `_ (the HTML::Mason based framework) * `Mako `_ (the Myghty successor) * `Smarty `_ templates (PHP templating) * Tea Other markup ------------ * Apache config files * Bash shell scripts * BBCode * CMake * CSS * Debian control files * Diff files * DTD * Gettext catalogs * Gnuplot script * Groff markup * HTML * HTTP sessions * INI-style config files * IRC logs (irssi style) * Lighttpd config files * Makefiles * MoinMoin/Trac Wiki markup * MySQL * Nginx config files * POV-Ray scenes * Ragel * Redcode * ReST * Robot Framework * RPM spec files * SQL, also MySQL, SQLite * Squid configuration * TeX * tcsh * Vim Script * Windows batch files * XML * XSLT * YAML ... that's all? --------------- Well, why not write your own? Contributing to Pygments is easy and fun. Take a look at the :doc:`docs on lexer development ` and :ref:`contact details `. Note: the languages listed here are supported in the development version. The latest release may lack a few of them. Pygments-2.2.0/doc/make.bat0000644000175000017500000001175413041166700014555 0ustar piotrpiotr@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Pygments.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Pygments.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end Pygments-2.2.0/doc/Makefile0000644000175000017500000001272213041166700014604 0ustar piotrpiotr# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = PYTHONPATH=.. sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Pygments.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Pygments.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/Pygments" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Pygments" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." Pygments-2.2.0/doc/index.rst0000644000175000017500000000364013041166700015004 0ustar piotrpiotrWelcome! ======== This is the home of Pygments. It is a generic syntax highlighter suitable for use in code hosting, forums, wikis or other applications that need to prettify source code. Highlights are: * a wide range of over 300 languages and other text formats is supported * special attention is paid to details that increase highlighting quality * support for new languages and formats are added easily; most languages use a simple regex-based lexing mechanism * a number of output formats is available, among them HTML, RTF, LaTeX and ANSI sequences * it is usable as a command-line tool and as a library * ... and it highlights even Perl 6! Read more in the :doc:`FAQ list ` or the :doc:`documentation `, or `download the latest release `_. .. _contribute: Contribute ---------- Like every open-source project, we are always looking for volunteers to help us with programming. Python knowledge is required, but don't fear: Python is a very clear and easy to learn language. Development takes place on `Bitbucket `_, where the Mercurial repository, tickets and pull requests can be viewed. Our primary communication instrument is the IRC channel **#pocoo** on the Freenode network. To join it, let your IRC client connect to ``irc.freenode.net`` and do ``/join #pocoo``. If you found a bug, just open a ticket in the Bitbucket tracker. Be sure to log in to be notified when the issue is fixed -- development is not fast-paced as the library is quite stable. You can also send an e-mail to the developers, see below. The authors ----------- Pygments is maintained by **Georg Brandl**, e-mail address *georg*\ *@*\ *python.org*. Many lexers and fixes have been contributed by **Armin Ronacher**, the rest of the `Pocoo `_ team and **Tim Hatch**. .. toctree:: :maxdepth: 1 :hidden: docs/index Pygments-2.2.0/doc/download.rst0000644000175000017500000000263413041166700015506 0ustar piotrpiotrDownload and installation ========================= The current release is version |version|. Packaged versions ----------------- You can download it `from the Python Package Index `_. For installation of packages from PyPI, we recommend `Pip `_, which works on all major platforms. Under Linux, most distributions include a package for Pygments, usually called ``pygments`` or ``python-pygments``. You can install it with the package manager as usual. Development sources ------------------- We're using the `Mercurial `_ version control system. You can get the development source using this command:: hg clone http://bitbucket.org/birkenfeld/pygments-main pygments Development takes place at `Bitbucket `_, you can browse the source online `here `_. The latest changes in the development source code are listed in the `changelog `_. .. Documentation ------------- .. XXX todo You can download the documentation either as a bunch of rst files from the Mercurial repository, see above, or as a tar.gz containing rendered HTML files:

pygmentsdocs.tar.gz

Pygments-2.2.0/doc/_themes/0000755000175000017500000000000013041220507014560 5ustar piotrpiotrPygments-2.2.0/doc/_themes/pygments14/0000755000175000017500000000000013041220507016573 5ustar piotrpiotrPygments-2.2.0/doc/_themes/pygments14/theme.conf0000644000175000017500000000040113041166700020543 0ustar piotrpiotr[theme] inherit = basic stylesheet = pygments14.css pygments_style = friendly [options] green = #66b55e darkgreen = #36852e darkgray = #666666 border = #66b55e yellow = #f4cd00 darkyellow = #d4ad00 lightyellow = #fffbe3 background = #f9f9f9 font = PT Sans Pygments-2.2.0/doc/_themes/pygments14/layout.html0000644000175000017500000000633613041216654021016 0ustar piotrpiotr{# sphinxdoc/layout.html ~~~~~~~~~~~~~~~~~~~~~ Sphinx layout template for the sphinxdoc theme. :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- extends "basic/layout.html" %} {# put the sidebar before the body #} {% block sidebar1 %}{{ sidebar() }}{% endblock %} {% block sidebar2 %}{% endblock %} {% block relbar1 %}{% endblock %} {% block relbar2 %}{% endblock %} {% block extrahead %} {{ super() }} {%- if not embedded %} {%- endif %} {% endblock %} {% block header %}
{% endblock %} {% block footer %}
{# closes "outerwrapper" div #} {% endblock %} {% block sidebarrel %} {% endblock %} {% block sidebarsourcelink %} {% endblock %} Pygments-2.2.0/doc/_themes/pygments14/static/0000755000175000017500000000000013041220507020062 5ustar piotrpiotrPygments-2.2.0/doc/_themes/pygments14/static/listitem.png0000644000175000017500000000031713041166700022427 0ustar piotrpiotrPNG  IHDR \ pHYs A8tIME" knIDATc`X0H9:)-XAFQt{FFo0L| -:Hu3"(Ab30000h[v0RYIMé`$%IENDB`Pygments-2.2.0/doc/_themes/pygments14/static/pygments14.css_t0000644000175000017500000001657513041216654023160 0ustar piotrpiotr/* * pygments14.css * ~~~~~~~~~~~~~~ * * Sphinx stylesheet -- pygments14 theme. Heavily copied from sphinx13. * * :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ body { font-family: {{ theme_font }}, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; font-size: 14px; text-align: center; background-image: url(bodybg.png); background-color: {{ theme_background }}; color: black; padding: 0; /* border-right: 1px solid {{ theme_border }}; border-left: 1px solid {{ theme_border }}; */ margin: 0 auto; min-width: 780px; max-width: 1080px; } .outerwrapper { background-image: url(docbg.png); background-attachment: fixed; } .pageheader { text-align: left; padding: 10px 15px; } .pageheader ul { float: right; color: white; list-style-type: none; padding-left: 0; margin-top: 40px; margin-right: 10px; } .pageheader li { float: left; margin: 0 0 0 10px; } .pageheader li a { border-radius: 3px; padding: 8px 12px; color: {{ theme_darkgray }}; text-shadow: 0 0 5px rgba(0, 0, 0, 0.2); } .pageheader li a:hover { background-color: {{ theme_yellow }}; color: black; text-shadow: none; } div.document { text-align: left; /*border-left: 1em solid {{ theme_lightyellow }};*/ } div.bodywrapper { margin: 0 12px 0 240px; background-color: white; /* border-right: 1px solid {{ theme_border }}; */ } div.body { margin: 0; padding: 0.5em 20px 20px 20px; } div.related { font-size: 1em; color: {{ theme_darkgray }}; } div.related ul { background-image: url(relbg.png); background-repeat: repeat-y; background-color: {{ theme_yellow }}; height: 1.9em; /* border-top: 1px solid {{ theme_border }}; border-bottom: 1px solid {{ theme_border }}; */ } div.related ul li { margin: 0 5px 0 0; padding: 0; float: left; } div.related ul li.right { float: right; margin-right: 5px; } div.related ul li a { margin: 0; padding: 0 5px 0 5px; line-height: 1.75em; color: {{ theme_darkgray }}; /*text-shadow: 0px 0px 1px rgba(0, 0, 0, 0.5);*/ } div.related ul li a:hover { text-decoration: underline; text-shadow: 0px 0px 1px rgba(255, 255, 255, 0.5); } div.sphinxsidebarwrapper { position: relative; top: 0px; padding: 0; } div.sphinxsidebar { margin: 0; padding: 0 0px 15px 15px; width: 210px; float: left; font-size: 1em; text-align: left; } div.sphinxsidebar .logo { font-size: 1.8em; color: #666; font-weight: 300; text-align: center; } div.sphinxsidebar .logo img { vertical-align: middle; } div.sphinxsidebar input { border: 1px solid #aaa; font-family: {{ theme_font }}, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; font-size: 1em; } div.sphinxsidebar h3 { font-size: 1.5em; /* border-top: 1px solid {{ theme_border }}; */ margin-top: 1em; margin-bottom: 0.5em; padding-top: 0.5em; } div.sphinxsidebar h4 { font-size: 1.2em; margin-bottom: 0; } div.sphinxsidebar h3, div.sphinxsidebar h4 { margin-right: -15px; margin-left: -15px; padding-right: 14px; padding-left: 14px; color: #333; font-weight: 300; /*text-shadow: 0px 0px 0.5px rgba(0, 0, 0, 0.4);*/ } div.sphinxsidebarwrapper > h3:first-child { margin-top: 0.5em; border: none; } div.sphinxsidebar h3 a { color: #333; } div.sphinxsidebar ul { color: #444; margin-top: 7px; padding: 0; line-height: 130%; } div.sphinxsidebar ul ul { margin-left: 20px; list-style-image: url(listitem.png); } div.footer { color: {{ theme_darkgray }}; text-shadow: 0 0 .2px rgba(255, 255, 255, 0.8); padding: 2em; text-align: center; clear: both; font-size: 0.8em; } /* -- body styles ----------------------------------------------------------- */ p { margin: 0.8em 0 0.5em 0; } a { color: {{ theme_darkgreen }}; text-decoration: none; } a:hover { color: {{ theme_darkyellow }}; } div.body a { text-decoration: underline; } h1 { margin: 10px 0 0 0; font-size: 2.4em; color: {{ theme_darkgray }}; font-weight: 300; } h2 { margin: 1.em 0 0.2em 0; font-size: 1.5em; font-weight: 300; padding: 0; color: {{ theme_darkgreen }}; } h3 { margin: 1em 0 -0.3em 0; font-size: 1.3em; font-weight: 300; } div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { text-decoration: none; } div.body h1 a tt, div.body h2 a tt, div.body h3 a tt, div.body h4 a tt, div.body h5 a tt, div.body h6 a tt { color: {{ theme_darkgreen }} !important; font-size: inherit !important; } a.headerlink { color: {{ theme_green }} !important; font-size: 12px; margin-left: 6px; padding: 0 4px 0 4px; text-decoration: none !important; float: right; } a.headerlink:hover { background-color: #ccc; color: white!important; } cite, code, tt { font-family: 'Consolas', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 14px; letter-spacing: -0.02em; } tt { background-color: #f2f2f2; border: 1px solid #ddd; border-radius: 2px; color: #333; padding: 1px; } tt.descname, tt.descclassname, tt.xref { border: 0; } hr { border: 1px solid #abc; margin: 2em; } a tt { border: 0; color: {{ theme_darkgreen }}; } a tt:hover { color: {{ theme_darkyellow }}; } pre { font-family: 'Consolas', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 13px; letter-spacing: 0.015em; line-height: 120%; padding: 0.5em; border: 1px solid #ccc; border-radius: 2px; background-color: #f8f8f8; } pre a { color: inherit; text-decoration: underline; } td.linenos pre { padding: 0.5em 0; } div.quotebar { background-color: #f8f8f8; max-width: 250px; float: right; padding: 0px 7px; border: 1px solid #ccc; margin-left: 1em; } div.topic { background-color: #f8f8f8; } table { border-collapse: collapse; margin: 0 -0.5em 0 -0.5em; } table td, table th { padding: 0.2em 0.5em 0.2em 0.5em; } div.admonition, div.warning { font-size: 0.9em; margin: 1em 0 1em 0; border: 1px solid #86989B; border-radius: 2px; background-color: #f7f7f7; padding: 0; } div.admonition p, div.warning p { margin: 0.5em 1em 0.5em 1em; padding: 0; } div.admonition pre, div.warning pre { margin: 0.4em 1em 0.4em 1em; } div.admonition p.admonition-title, div.warning p.admonition-title { margin-top: 1em; padding-top: 0.5em; font-weight: bold; } div.warning { border: 1px solid #940000; /* background-color: #FFCCCF;*/ } div.warning p.admonition-title { } div.admonition ul, div.admonition ol, div.warning ul, div.warning ol { margin: 0.1em 0.5em 0.5em 3em; padding: 0; } .viewcode-back { font-family: {{ theme_font }}, 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } Pygments-2.2.0/doc/_themes/pygments14/static/bodybg.png0000644000175000017500000014527713041166700022062 0ustar piotrpiotrPNG  IHDR)+ pHYsHHFk> vpAgg܊IDATxM;ɕ-`$ 1ȠCcіF4$(RUA*Jjz;A{u"3qe%5O~&W}on_ι~Oӿ܏~O]\ï';Ͽ=G~?n?w^yϧ?\ryo}Ol̞wϿ}ݞϧwͯ|u|+wFgЫS~-/﷾_|\_}on0sY\ܿ>_=|ϋxCnɟ|?-1o%vY>toz5 ~s<<8lOk>d)g1c<#K|o6obKx"okky{%- 8Kyr~9e9de>b\Hl<:f}if>s휟c ۯ_u5h%>w޷|%f\kNY,yϻ~.8oYϋ8?v f?W~MysUv{=98;*W,J{+s}O]JU0z=Ul|cZZ^|>/<Kȕחh|e,|?U}drחu8$.,HFM^In0_U{R^]s9a)_yfL2k3R{no'<{>[wYɅeg<_.om{ֳ~9S⹼H5玞/ݘ6Ȏ~F[yvNN odv^iy. DD,gT'^<#5w|:yYk =_6s~9 f!=1Ny "adYyc__h?soȳ] 柅|_KəWJKk^Z󼼗輲}³Cs;з~ɍdu'AdKprfe' Ҳ=ߞ{rN.s.fE1ֽoyYV'w< dP|G6繣~B{_ٿ~I?#18hr,|F"s'_|^yYph&3$rY6}6yuJ 3_z׼<g|H^q?>gf-LJ|tm=>&ח\X>)Q]^w{iR5K/k77+)-ߐxKJvv^37 =(YA/$Cl,25z4idɱy>{0]6Iw5Q%דŚMCsK^'K<ٿλ36f'eqzɒ̫brw5eO٬O^Ye{n;W\4'Iϟ/+syrmirA+,<)&a8c o˞Ƿĭ<ƦAy= o?܉j(!҉إr5feE%~J~&eY֟J-W|,ZI_*y(p!qMS%>Tp/=ee&vwS&nd5j@r17k.<__ݲe yy Ҝ#arx(| =W ҞF/-d==NCP޲z(:i[gq/9F6q"uYf{SVh_YAWT0!? z?;UoyyPY>Is_5 6n~8KL"AO#Cn,m^\{_>./Y#h.!&mٍzM_Z`K͓sZݘDX\|s9Քd&FHVsf %*%ndq'@ _t*@f1Ȇ6]||.,Ą 5gXn*Uk7'7D̅7HޙCv.4 <,/m_}Ǟ[Ys˕TRfL g>/,#iYy\.crǞ!i˲3Iou PL) :9Z6DKC%Fmgi-Jm%-gkMTiΑwaj$QPj&9l6ywJ`<D9g-+/\&Fd4H(+X k&Hg6:[9Idɤ gI"? ^cQYY@-wI_[;?Z[ }rc_:b:A Ұk̷ڡ m-vM^kl_ލu>6ߚE+j_]ukr3ɟbt_n$Y1CׄkU~,ӫʍeԓ3=@b[$i-`QG3Ma?aK*BRc'0HEC>JDz,gySm?ˌY_6W_!R;I:pz$Ҍr RݴdV\A^^&|!{>2̔Y(D~mjwsS|r7S;y4IJ`4*V{'%xxGyy/b)uqIj oאG#!/-!-3@8g%祘r}$([%&=ziYm]}¦ָk֖ԡٗV})(5 {)&ZiGăl-׊HP7ƚS%EJ$}iZd?bD"_z[HZs[4oHx ی򐇣ݑƌzK@6M'w"u+K($/4 \k{i|b5KZ4ms)RH4\WGQפz9)ٍ-<y Y=?3N*Vs*5.!E psݷ3Rf_1m6̛qm9&-$ٺpjZ6hM*إmpHL!+&7~u I;$رlk`@S<+:K5K*=;UefJᑚrOIטNyWWnEիP&IdG7ash{߬˷%Ni1sȣD ١"C]reAYNq3j5D=F>]l@zay&!Y$%`K˦{rV9SrA wxn #T`.7ALNQʶAWnPu ϊ9 :櫿KOiv쓾f-L+~V۝ܕ}oMOga_;|NU$g('fOgT֜(Xغt;2D[*^њ%$3qN=$bT9jw7W/`ϟP8]^rK!Le?,3{?geq<74pJ}/Z2;ŵýz9ЀQdR8GRھ|%5эY"%o'RôTh9m%l1m;ؼl:XxSkI{7i v ftouDY[ 6ġl3U"o١Y!5mO UE^|^QAnVlS^~%wLGLžȫPY'͛fȗB9QӁw@{2ɬ#)4({kG#/@ E?TNB ja)@xZWYfp)ⲗJDڿAUW:6c]ݴ̲N@Vr˼ЎP 9k' ܧyO&j?* Yʒ9Зx3P$ 8\[0Mc8&itv;̟$ I̓MƝYs%%u)$I"jj?ڻ%QuKm@:?U`uQUWwOg866oxmO푪\#-IB )w[Iv8Xls/ W*gHRDV&cĕaZCeNG]̼ٝ=f3Oræ=dtT*Kf9rGU"@ K{̈́T~^]h$PҎa4,oB^x$,+ѣ ,dhj ^Yu\!%c4j NHݙq;)"<\ fE\OYZ5-9޳P8=Kz&%wcCQ|}55 !wY3L2\禝5v:kbLҮ]ދxpI .ޝaA{'٦QmX(S$[>ē\ɔͪGG2WM_ (uR kxף됦N{"TokiHΰsU_P5zt}`52ZG-+:KȠhǴY>$Ǡȫ5ŊM sǽʂJM}BMr0Cv9fY,c}QWwyd̢,(qtOo W&%@gg췄I !0G H"+ "G fB'gGIfw3Bsr,c܇¿s[9I5 ";dmSI˴\Xv_H#:UbҙhY˷;_sRv^@&9|r|K=w缾\l&?krL=3O YSfI]EA5eҡZmr>!b[餈 ȠSfY~yO)iLnZH0yN8_ s ߵd|dK4l8\i?6IC*M6!Df63zNB١Zpٵ .Q, ASZ=,PvYEv.ր Ne&dgUS<$i&\ {A_t;,n.0/I,H"e-1"KG6(B= 5l~]{k# ؆ nh-XxJ@b 0"mtƐ!UR6+Qm1{ɫSҹOiu cr3^r  Y1q!< U\#vlf{*ɰesL`` 䡔 hJ].+J#M̱QPutoE.0D +٫YFf,0MH}DBi>*cd`<{ x2ez Q=4gr?Y|`b &?ffa!OY2J) AN|o 9[ VŢ]P&o;/-7A:9>C9$12{*VNA3]~\Q`(9|I034q,"utmL,܂`yDG7c<ъI.4W+҅"Ęk `PdXXr E|JD-g'4}{޵XFS6۸&geal 9ojap-O !&W*tRnq[TWFQ ȽWQ1Q⽙JJh;BYd(-h3zbbg e7+ԭ(k+}3lZa?o&)X[;>`ܾqI)6_dx3*)#09͋)(+IYv NwWc0mW㮎&';Jh#j[\Kq jHL\C.[#8:&NuNv,/gizt%&$ɖ0'J<;|ؙ]Q% dJ/[Dn$ٕݿW)k~Ĺ]HYdy9meyg=-.J1})hXE ZIT^VL 7{4.HI*QR`%@1MhtM#P]N,Sa_V-_IͫU7"b.jhYUŅRE1YT] <M`!i.v*sHR}-XSdܥ{g^qIz4ƣ ZUћj~@I!Wߍrѻ&6iUcUQy >aiq6U(]GETm)حY~,!)_YNgcjmdLY &N#:M{ξDT&3(n%B\o3m mM$:-)mJܒEHey 5+IeވxІ,N QO*&լ=$G0t/tA%"zJyDT_5J{E|sAtQ^w˜S^9\#˦S"kޔ3Q]roKʭ@65at[!׾kM$b/yizbUFZکӾq>Y䯛nGdJYqN旰Libm6? (EE ${|MI[5#`SEu_0@RY El)O@es ?7."Dw$Eċ߾ką r] ͉Mњ/WpyQퟤQqE4عf7,Bm5YjK_$GsjĬ]ўx@{R=P!wiH2Еj}W\c:w.bC**{X )cAQNȗe4yWvfX \5Jؑc#%/nXI5^E.vHȖ{ r}Gy2˩I%ʹe\omRZM= >i#4NmVѕ?uuȆVi@0dL Ш±s20 M/7^y(uJFc$pjg5NU)$!!.S2evt"V3aYJ_z_2rE5⊈SHVW(`$I%\}QފLiŒL'C4'XTByYG!*L\dXq4O2נՖ)Tl^GV/_Ffei?4T'Hq$8D}HKU9%{OTI/2kwaSsܙTsO )jy6;Ώ_!a"%#3IkbcTZmڃ)qdzx}laMPߔtƨBl1Zdl Y@kXuPgOu4-Ex% M.B!4{xقY8]{߼Xlhb6VGOl!4"滋ԥԴp5 "4SIJHlKv7I5WyYR#@ f^ SZ8(;g3rg4o0@TEN!aNW]VLt (TK)R (.]Gك=PIf#h "9r:yk?!sDŽf-:oLa-BFp*%ULhyK PDž)JDKWos-Pdfe$d]'ӫPV}^ U>i>i|{IK0+S0$[@W5/ )K2fݻol !t`.Seg,&LLgY@)-NzGؼ4 89X5{ב35qR5A[>W([cnvEbB:QL7SWeAY1*L>)ws+X -yM"®FRb}1(^C(d~YćRMɗۤ?݈<*{;F&*Q!Gʯ&ż+f#λg/x~vah*4L =!ky8  E\KН c {R"wU[1֝>ۊ*l6DK_7bAJyWd 3i*ښp?@C@UOtb|:̃pfLL#ȶ̃&b'ʜt8CW~4m5K 7yc=<ѱRzs J/y.23դ d{3KxR*PiLd=Ԩj2U2xK\{ ^:,YWd!(MdyGUj6YDd$& M#g-`Q1O&Jқ9yP9`L*a!\H(8pR9ռRa=E|[>D"Zy,켍Mʱ}&T‹UBV2y7Ac f"+֍rNy][k$|rǦiGablh)baXam{s,#sl@Ӽ Ti).ϥð h"uNABy)gk|[.L7@A] "*<͆uRŴ ʋz(۬xT5-5Zv_)]I]/ GO(\.9ЍXPglr5=ԙ0s$%[O6^P1/+ kn`*!~<->D`.O<4]{M'mf8)"ΏҦ{莸@^GW@\q9gEbQsh)Y#Ȯa-faF"&x7]Nnѝq(eμ"+jڕESK2/o8_ W&ְS)ILXʴr^ D35#:4 ~ ,J][a5V"4nQ\1.Sk%743G 6 2$u ;d\վ i=QGF3!AeFIU9o@uX"ӵo0z\U&,6YitCND&Y.Ԝ02n` Zވƭę@..L%c2A6[ rʨ{ܑ>-?cn䰨#@HrN[f"ĝM+GCd9RSr0]Im7_5єі~;e0$Xg aM^^cc[1/9!*EOzTfj MEs`IXk )I/sy䳯Fݙ,BN%DP\{qß(oe#;7EC dqM`pHLP롴ϝ`z7Wۄ`,0ECx@O_aڟYCYYiv}u YO#YQ楇Y jKdTR&~k W5yP̫p#6{IC;?c:|jP{as1#[^ ,Z5ʧwr^X?}Nyi*u盥jJċͨad(Ul,F尔3PY%mE(#@dAVYc5X㿣 ;r aqc-G5`2Ȿo!1|˃p56X'FnѢeS@@BQӬ/@&7iYV -7{d]!81i'D5d_^YP%M0N(1i\5| j9vE|Ԡ"Ry77fW'NׅibU S%P|fjHbH MjsJju?|Kh5VwF45mLLs 1#ʱFCo|!G PҒ,B5a#;,#xOnvϏ7"0JȿgB3l|ߌo , 6Nzwm \B)8$+-xlf?^hdd֚5d`y>[ `˼h^e_9Sb@UlsٞD"=2_ .4BoE26Е^^Pbo~4xS!PK".SMqS哉l虜nfQH$eȥa`8 eM ;JDDh>Y癆j\+^t_ d"RO'5Hc &ڨKW)%i{~)OJ,2O4\glL;?XJΎVdr[;m;Aq{<,ὨIs,d&ZTlPVS6~ ,`dva6-QkԳs+/ABR^x0<*~@#R[rq?&Qv^=|GVh8ěܘX4<| 0o۷,󴈾ũY=j2H/@ia%otiUJ XׯK2ԇ$|FR8Td*f€ @TKGѡWz a'JZa^k|XNsܪc]vs=Kʩf.cRG7n NkIv98ƽJ2P3w"]Pf85W7K/+,=jq}.L@7KEa'ዴaH {%y>fv'$" 냺o@DċLxÆKo+9pE.p MƴI3TieC'ao˿VguO:g5)7(I]v w/'ALq&\/ E x#c%e c\]ݔ"z^iưv7ZI%M':Ә5M Dz(qF{W Oct/ZxeGkUt(K9ub'C*hLΰ8^.wL/&HfF^U,YW $twuݷˁ0`U6GWKv4?K'Z wv{[*j"$%W! *d銏/R{Gkrd?_ .x3!ɥ#)ΟꌃpI:)`gFhL |[fcyc됬YɃgHʭoƘ-NylhTvy^oåmJ\Ru5 kM7dm6بe; 7"* _K5y2â>2%mEx\è3IƈWW~JMOUj{Nм#Ը"L]4A y!uqR[ghu[`jZ+`Hz  ' |Ӱ*e*;Q캨d!-HZ*PVxWAfڰlHMDN|[( IL}Ó 3 y"`ѳ1R6=,}ח\zGcayeqs=0T/ L =y^V;r7EJv1)GuL$Jus mѰ`@Q&SO][BwIIL𫒑m!mw a7o:䡬B#ax"f&!qYp+6&#Zk]Ps~I^Niyds l V'|9ҲXpVC ra%ӪR'%2-tܒY. kr_]#y!2į@iJBd1{p0hܪmݖL%ٺ@ruj>93Yռ:SYpC@#d F~ .[C=\}R!`$;S@|wܯP_ix,σܨ36%YksN]_oX4"Ngf ÙJ ,'0k ͰZrFm%@МO8-hl*Xn <[ycwpqT="R*XU(2&1e]y} \ڠ}bm#lH]A~`'g#Gn\~aV-UYK===0XRLACP$Pk#[QM*\Iβ(ؒ^eҫ)($YSf%Ƞ8ScE/'-P45CNq gT|CD)Z8fNC?/Tn4;ƪ۔Zpxz (ksp6NVQ3eAϨ7r/&\g]E/$?P뒢B6:_Z\F XCjBhψhтX ʄI.) jV=;0w^Qy-y$zS`Isd76B;uMh2*R=q'w_q-']"\rHNI"n a6#ЈJ.@ɑb 4]6EDW`lcU(y~3` ;i1<`-cFzܨ$7S ̭nOa^}⨣bgX_Ka 7E/U\ $j}LF /%YC!+~ t:w#cс]> ۑ /DN|aJ3zHd4}{X'M X U<0yS@c}6 ɥsUtQ4HeU  zɝr+e&\hz$N30H$[FEtըiPp"j{:wzi`Mƚ/j] R {J p1RbP#.#!' -u2ƴT,ttyC[V5|2}UY5f~]fĶ7^8. O[}\R؀40b2CI]Rnrjx֩^=QhQF :c[\uM;-8HqD:b|ɌuԱCQɱr˺*ײ^^LRD~4\bxf9oek,:Dh˖}pQ Cq3W` r}ndSƭ3U{_Bmm\tm x1C@A4LhѤ!9!9b:ND6:)Ճgׂ] \`Y]*/6[& bJ(/h^QR4cE5fjTh5iƬKx;{.n^'@u7[}.N3#G%SnP8Ƿ/fūkQck&ouvk^&Fw4 p Y@Nv9uM`PpJdY.džʔ6γR A 7 i'=6sh\\#;\U2`B,-nZ}0\H{E֨gF7b cg%qH:&)-RPd04)7pNNlEj띅b.ܩݨl%^afXrYY8{jm#B]>t~uқ ezJ{!6lhAߛ,bu د ,IJRTB2p}RI)r:y™Z:4áY2zB]n%p V'AptݿB!p%SsO@Mq$U [5¶:A/::q:&Df [J[=uOӄدzYTƉ\+Et:30Hih-ec"9\Z߲4:;1Reڹ .y?ⵕoGX_rPz^8Gw bW[_SPR`T;NR)\r1L4TW%T o(LcḰ^[eyr* OܓcSFwe'S*LyZ-i*wW q ^-exsߐMi nJ&SM-M\j?*1dF5>ΟxU`PdNb*|f!w5BZh8{.;Fܾ#fk:d5B -̉H[@ 5+UGEpkqԘq-$ f]U!: [<̰uV'ePW-Pj߈^R.MXʂV,!,Z|Mxw(Ly},uNf:,9s<+Ǚ2uMI; 忚/UL^ /('6JZPLҼe+ 4ѵ?0sN-c*NHFڮHFأQ}Z(ĝp,w,Tە.4:eYS:%w68?a RJjLT,Ȅ0~bb=OY]9.FEd+| h :wufx#q[eL; VgIkOISs*#oA KˮݗP%CQԖ+[W2F80Jpr"|]HA\4bȼ$3[3X[t{YesV]i3LvǮ/L8Rm+%еtʵ䅎c;FAy"քROLN-suo@t 8M<_q:ʋyvaPXL n4%lq*92}*/[Oc@JZ!P)j*jo)|i3{GQSbN+RJʡV20'UߋP&59WQahkh2 *WV6WEZb]H<Ҡ,H @pWKQc$0PG$jq~W;& .\;J7"c7# p˓+k̷)fol3\z"t.[I=p|"%"}6[?`m4ޗ9f%|2h\d04SmDLjWxpy1@4k;0o\wWs̨S7uH drս)ar- WQrk`&jbu榎f!)B-N+EKG8Y\]oA#]scaL(uU JXb9"]iIQ#5 U>/[x{7zmz 7@7s3gcYLY{@J>5lW&"=Sp[::]qGCQ{%C=$^.UO\^*WEaAh^ &bְ8~CO!,iFF^W,D6[W{%1>W2z; _^\l*E_zKK1Rq6Q ZCV$%-R_U2=ؔen,ա3&/#Uiœ~"Az7+IBqp;zy2re((hЍ!Wr\)!BHV2/Ad5Dd7uf?ؙ'fk\ Hה.Noʡb7nuW2rਖcG_Zc|3+CX!0N51Bi0=faӶ}.P*paϋ`H2:WPٕX-?B50J," V%9"qȡtHQRY<7e4TgLo""}d0icR *An¼<čF^.^]~𚃅>ֆ3$3'd-RO&Y/*WGU5P2I Z|Ǒ"#=gLQXYᖔp%t\ Uq {N[qDB:eP>˅YoSŧU6t};$Komz-|0E-O%`Ӎj8Mqg$( <9p0ȡPcn.o/[rO9l;O<( Gb"LͽvtVYeI.hD:朘Kޑ+%aZ(ЂS\5(eL,` AK@/8ծ*('BEdԧ^`o?,ڱY<Omɿ7C&J3} Cߤ,ngv@ OxhS2׀-xʎ.<6rGV%#;Sޤ*U Av[!zJ (<;/DwxE Z+yS"R.S3Y3@#ЗLjE&cc |B!YڨfWmׅpJdD$ kikkZ? K6/,0y٦:"0wO/đ;_&V}?Sf畑 %Mz+qFܥ[huAW/|s :}@\Y˼E>tHqWma.YQ jxer}Qg }ot25]5"%p F= {TfȺQ N'Q79YDZxy s({l@)'cd'){ c0/3jGUB|1c"\<3i ((vb+kZ0vL2CQaݹ_* AD|Ι,"}ҦNDzղ8p+¢+ug#U Sׂ{[:ߍfA8/wRlOKŗ5lRxB*؍4goGma>ZW!JmAspj'uC _ġ gʙkudd#4n>vYK)SiQXhM@DˠceK!(,Df5 7Q_(IJ6P5Q_-&' $1)cO&JFK bq E_s-=0c|1!?).)d<:{&WslYny]QgkJP~!48y]jkލztMsItd3Q$qePiRi|k_KCБŬ Uk-`s w7YMvgk<.@@dMj;T -P=}p)(@#cɑwΙm==UUȕ|B]3u.~ձ(6aiSAXuZiL[ .C^9 ,h{Jg28P "ӎ>g$l,ɝt ;zmw܁ăav~O][FX;?)MoFEXEV6`{M:F \oD;`&7 ܼt < ?膚uyeuZ&%j-dͤ *ɋ"G_vO[H}@A:bոnnOpv p2wZ]y؃bR;OW h_,l8r D&H{]FعеeY_Aö4 ȼtlIbŐsZ:K[Q-~7\ƍl{jRVx6JDH"kj|vOF=x&qJЍiE# LfzC'9I[C$l^nP2LU[vwh 7|An }=*xlB b`GaU^@Q u)rqtwaЪV$r HZV*z]ux."w"Ј+ȬlߒעSFzf [TN}:yphۿKzU $ z6G^JgI1Ʊ Q "-{ #WBB|}^'TT$q[:;nj4 9.Ej_|TٿfC4y,:{<[]ɪw:n#Qi zm֑=(-:6|B5&ϧj]ѹ:~yc =,_^rd5tHsYul WNcc]=m`ʹ1它O\AxtTtMqa]ךTĵ }4REJ;=ܯ#(z!iբleg/r&ux=NvtsHZ^J;>iL[P2NwzC3lSBw7/=H^ӠVyFuXO?, v4+KW~Xj_Gc|1r.,/V/~6qM|ӆ9\5)`]̹+ʠX@8="zm4AlUˉYH:D s(YatGttL|R[34UN3-,JB8Q(ڐxlpS0qQדZe|߉ ~cE(caft' N$0<e5wT9 0^ ca Q\n o:!g)vN2&RS0;]R#Ls 8GKt08:9S笱Ń1M۸;sRlJ(Zrc{u lsz W@ JZ;[J?'eT꺧^_WwnL:Qu+lU>w)` ͢H@ v3sOQ'&`%Nj/'a,j~czDraG&}S Tߑb5@ "@eMt!LiOPb {F*C=׽ :$"1#*Q 6wlj0/^/$tkucȫ%=Wr}D7"ܬʚUβE6PD[Ψ FdfQ?ӜLy].uRΤe&gD48ZMjV+TP5X9uB_̬Bq2˳N~^8f;/)KSI\np{! aU((Zc,))xBTyjrjJu%G{w<J#by46 6߃") A'9_D8wOo?,媎L SyA{{C+ڲS2XCj6$I6!Qw,,NH jtqR"w[e+)lʺ}q>yNUKz_æ +~0F{}ㅜ#Zwz9Zu"s&3ͨRyPYv'57'J"AӞpp1@*;ta ǖlt#Yy:/PGSV<yJ2Uf/M=q+H51/UA.Ű x:%E}p Z063 0!YjGp%'9NHfaV,_:@>_^`FؚvRkڇx;0t]K.s\URTRONCo~/:EcI3m.K12'%Y|IIDATM|xk85]5)Ѡ`:3fNl~U =/<<:xBáUcWWqa CRX.ytFD^{p2\L!/@ h8b'(b+[\1[7oPd I.' l4xQHX3m` IJ?-e@H1C8x ,#m?5lF.E oB:"_3虾脻nAxZ)5iļ%.K 5K mQ,*BBÁ׃ӱ޴TOMvu[O.]:;Zi"Vd5Džg'x R(lP0H`TRS'LG !UQȽtp_m{5?a-,SA4[?;2F\6o5DM0gPMTs:,IPYZK Л/5kȵTͨ#--pYz,5gizg`lʜǧHݗj)ݢl?pgT+ R5g]v!e3Nf8IzmmǍlk 34l8|DU`,ّ;xO cP+(E+]Hw]|$?tS:"4}t|p|/< ߸0 pPZ*⼉"<7"yjɶ[m9 +vV_RRA Ѓb,i e$D fwC:jӆ#KFY'XM(>//<Ecy*XBgY'{ѴRt;;W„Lrh>9` QJA'X sh675cEP݅!%:lyJ07, D(II $H#вHr {4#.j(a|9XeʃX6Hc`ԫ4jxW;IP IR}d S~: R*́^YVYm\!z|& 嫌 [85;o5}8pec\@UNߑAE3/SPTY۸<apx\(дN 9 B]W|;5xmRPT%6ڙP(dzm%TC= '9&Rc)Iw <#>t+SH BF[ V-x`m҆Ǩ5x*kа~"GaQַeaA=M0!ٿ+G=#5!+\ A:2jˆ_KkGYruځz &.u2[,8BH?Lb:}h ;X(h:]`VY| %}XzqKq7$Q5)봀5D&0}.?ꏟK/>(Zzw>j#-/"H0}霖FF&NWIG:7 ~L+2[#ߠ~6]ƖlÁ5y-Pa$4jQ*2!ca4/V&yl5gYWNCh4EU37*…m-\@MBpTR2uLtÐܯ+g,Pg ֝#H{"n.֪Ǚ#v?3EJ2k lD $ oȯq@;}8`9%:ҽ3f Sq Z{3tuۭ} e(mSn1 8iq)ƴ򇹴Ta3Uc{Q$7D1oU,v 5K.4`YtRvVX^S$*K-IY-aϿQF֬Kn%mc2VY+1#8 %auU:L9MIҒrLBbrS)UMQ?⧥r,+ ȚeAtX6#6\1~vSS)lz xkҚؼXA~\?4 %]ModU;@YvͬMmZА]\ZdZ7mz h#/RDa*-yRPewlVe 76y f5|G_E ,۔h_%'icN3ߑ,t?¨ cig)ȲM1 x1Oޏ1yHk Q䛸1:-M>tZ}lA!9]ɐ_@m|q뫇wKRE,nˬ8&Qd/ɘu:tξa<0,tv$t(`jer8PJi9wS/Gm+cUw9SCwD'TÄR.d@BjRT^`Uk8 4bTÍڀaksY}ݠ%ITv0–A_$:*[\B5; - >4>(Ք|Yt͟NnD=?)o,Wne~.5ͿC8@UWR8m]zpk<OΧL BI#sq97o3TK`ra)gvτuv"[t3oJ5 09GЈ+t?{se6 0b P>QNt z`tМJ `eNFyKࡋƚ"GRD"szn_2ĘKhVJM-~tD5h&M^4<% T"qj];B/kybed +Z99HLeY%^U鋂qÜ $O `$Y3EL[6cFZ\ZzHV5;b`TS\X%,˒?4)s%hEViPڸlG|PɋzH/wS~ZszxZYo|P;{J TrS!AI=vh΄ f;6_)5Hxou:YB2M]TNNB%[?H-6n碗PA)+\Z]{V1RGw@ENE_W~޾ \X-&t3ty[[*O(?ԻXn CۋX4qz{A1.ߠ+@^Ց0VȪ^c,qqvfi^P.hl`q"aB"TFH rf|4?)Tx`Gr4&SzHlu@7k䎱_ݻ {E-BZ׵L4$mHN:AԌ `YQ4J+Զ(6tm 9KFy1C udobA(n'%n;jTmGV3-AJ ɸzO ;-H$E%y.Mm3>fqv-VKJ= hHUD/$LDeտdAGzWlD lZ^9grAא&qE\ r*ߓL3݄D[>_%ZsKRX.שM)YjlPe;+b;q(r#Tѹ0]GUa’1j^mF72,$ոW LAڸ8Eo3}T*ne+l RP9[V2UXerS ( Ip8b0RH$+9H3`Z.ak b|RKxb폑m$jef#yE)!ahX:Krʒa j A"V ,|lMz,0MԒޠhiSCC+yTdKW(?6<8ɕ3Q1Q6D_G_[ZzhsR/>d1Rȕ\A/'R)w\J&=,[^ ,Z<:Co +X?}Ny2*%$/Ooz^9Ԧ*6rXJۙY%mE(#@dAVYZje1MkըV:ۅs+=lY]al _ ~2uiS)ஞD-U&%sʾCm}[FT:[|gk[.fMK&' [eY% ljAU+5a$ޔ]ۻ e:Ʉk(~ qbMd`6.2' XNs4Xj[xdpY<߼Tnep#:I{ "J_A;;IVABhCe;/F L:ԮG1pvthx_J,$!U:2{th^j`VgHZԭwz\-]M%W!]T"1 6|׫=gQt{H%w(5gim!۹½2񦾒)ʚ.WYa.yga*\Bn9Y99tAAPk+}-Ѥ7󣇧Ya AG mddSϰe~3I(=Yu ˊ$BlRZ2ۂכff(vsLui~/_A0,)[k`W}`@W=B3-X +%%wbnxW[٠%69BqKVۋB L$!RȮ+V&8)DtwRg7@--B@FsEdΙZ= _A VYz`de~NPl̵F)Z"١-Rܨ(mԊ#6s :hG}B'XVur{X\X*V01e.0i9zNٮp'g@Ǒ""r+4VrE$'Q3U|[ FVKW)%i{~)OJGdx{viV!:1$cc)9;ZςmQA]JYsZq3reO,q\C%%mXQ|D*`]Aw~QcIi19 :]Drli.]'S^/姞[y |1 WEJã|6/%J'S\?CII; UM&1mgҶ򙆗Ub  oY2&µIWtSj1i6"i!P;#:d/}uv=)q5&+{s+/bGcC9LeL,R܀6,ܥdvp{c'd)>綃wjSgEhQszs0BӲ@Z&teFoȰ`HZψq0 d:WI>ZZUD\`ryleyaJ@YE$Jus ml ùB̵G)'rȮMtHOTJ@Tq%+{ma$8s_Pזҧ.6b1^q#E|֜IjQ(Wm\y,EIj?Y*]mose 3S;< tLje WrAM`N'5qzCzoz\=vp\93YUMda# v WRvsAY:Xryɠ0ZLYiqB} 'Ĭ-aY%\Uy9dD[8~d-TD=l$F=1J .PEy ;O=[ycwpqT="R*XU(:ںc&:jȼN< [*;!uߐ0sƓa7"QRꢓGhpFrK===0s=_Fn{)bXmopU6Bɚw(x(孄 \P2Z.3}7;h(.LKweB$wߊ[~r" `̝`wTx:3L[đKM GH>@?N|VDhf”-g/~Ǔ_NWf$y"n a6#ЈS / )^@ωykN0tލ Dg0uāh/SӸ#–Jt~PjxOa^}g!LR*"qw` P:WaKkJGL_uCaL&ɴ(0`'R<&aVVђ귝@FZf_a~'xU0 Gq,9_6Je^cX>cIǦieR^`e&G0V /Ƶi谵/')JޞȳGLm߅F8l#0gekry$fvFrWI8\EPEoC୅GhIf'WS#B(9u,s|!iZ H7AH #70Gm*8pXH֝1e?9ܪb]Ā/dc̭;I_K5Q2G@ȟ$Yxx? PMc@/%YC!k]M5;ZTdvtv$%{/gX1G[SZ]&sz<1n=lhfY4µrGUÀ֋b4$Ue/:5G PM%0;G )e^mADlζ/֭nY2oe+HaS <=WTUajLLP:fkⰘZ$}]ZV"yiw]lZf93ĬXGZ tyX|g_NLٜm:xPigԣ52ij]{,ߗl3O5tce!elH|3-zv>" cdQ8L䖴*A 3ɜy'\u`Dka-sF2Wy&S~̘-Ϭڟ_4$^ m F_HV*)t}5'_*<(ac1d$ŵTxˡ#az;$DeNZfN6iAݾn= #za5e7)MvEQ!0 C(Be8Ëj1%r5z,}O.bB.za޿HbmRX9PMf&Q7\)ؖGHm*;NܥKxƩjqnc̻k)y`ӺǐDxiW֝cGpR* 9 ̴b.tHڅ8è{&VJЫG~2 -ʶsƫGduT檳h"z^%3RdE%Nw|w|bjkW8}@cRDM4\bO"#;r:?ؗݫ۲fv ˑ>9 9HRcNd `_bT4U$e6@3EP"``#?Cn7yK84H'#!%e1LGcg|^zMA$?ȧC͌8JzXuT/nұ_ҬxCba7`*O`[8_ ;0 ȉ0KښdX=]^S "W'G =G*Tj8M$r ONH&yɄ$u?}~&ĭrٵY< '(s=FHP7guml5R('?(l璬`63 iVPpJF4 U\;tfݚ4"cW|(I3trVQϏXo`e)wu~Dd *~wx<*Gf4ʌWG+o|wnG2>! 'yBA6[d~ag}v5ro: < *'dV8<-$q:GxJUw{[{@냖JY^>!syMcST]I7:MIqM.DZ4/\IJK2"n @UF". Yf0=؇ڍX 0Ò`?V_$|m6N(i4)HrH@YK'6lhaO,-Vlbu د ,IJRT6,!9RIm9ǶnDb6\^sҪS`5ޡX -SF@5C (K`Oo$ bOW) )ژDܪ0z1,<LG!2KHܚP.:tM=J8rNgs@q483 stL$/0Ep%G> 0Kߏ\adF Tj ~  vi%gYY&v~2\T"؉"\iw&V^#Fb1FK@:W8Z ˼J?Z67e8;{Jڢ?"0揮8B]4\! p l %9-;L,umCQG61|;m.,WS#z'/FHzp3 촁L E/|d q/ G@ZcF)YHfjy,FB2 >I5dM-Ԛ7 /_"D(dMܹ9VUnoL>4s ir>v|OT4jZhl>L oO\?8 T-#7r=0ΗH$:|6#woM0F XK@YI[y"59fN1@'lfKN*f)=U7삡.I zǒqR (8S=3:^2|gǷ/$Y*WRIᩀ ~pƧȑHҘeC2 ]}-Jte]v>d텶ũr7*MeU ̄@$,Y0,@Fd\|{&T2= Y0EpȾFd ;,&!O Q&K:Ie1uM_[*s4l@\ws|o= _JْTĕ(CbٝFc zK++89d'U{lc|3Hnk|ajt7wsѲx4k7"6 SOJRgWM5'ä)9]7 .ˮ1eh&Ѕ*VJ&_Q;T1̲p`D="|]HAWpgyI@ghgҗcmuR檱^< .Ru#P@^~%+rNt\DZ KtC9Wɣڮ/7 *l&.dTM΄ ou8D"sQ^<ȳS7/-ZxR_,29RC[GlSzb6vF^#ּ &F,cC#إ&1fᣘnEgnoPϋJ{G&#H`4/yyrc HZ|[Mq!n%PU.xjS-AUBRRp|"%"}B\K 4ޗ>?4ecYr# ʲO#^$?&`yY@q)uoJE}Zݫ]NځaZ }㽊U ʇM|@(CR$u`.Z.R ,GYl⯊'f8dvU hpi#\ZR 漆cr[r^ފX˟%H.)coGL{C}g@(i/a#w6ÈW&"=Sp[ᜈ^MOUu⎆bJJ({H2W] ˟8~ j oe7Qk{LPSq.C6N@ sίXlJb|d*uw A~/0<-<ŦmǗޒrolެ!{55~-,{as̮:R87A-*,_封^Ax('<0Pz#LP#ХAn3^(ziPq 5D;q88CdmS8 [nbdVJI5d(ana Pr# 1Z)>d|I#yOG^ rSN懥}v0`L=3?f,pX^WxEE\7ֆs#R+eDl"͹ ]1# b} WeHnOYs_(glƜnII GX˘k>$_a q:IQs\q>pʆ uvrI ,a*ݶ%vdYxqFt*$;qTz)%E!oS@Z>=>mL=g(Fǟ"n4CnoFͽvtոVYeI.uك2GiFnB Os)}l6d6 0Zߔޢjz郠-SH-pIe'gZ; E"1h%LKPeI=X܀k.Jy;J<,3F̋a~((1KFwIU?价C~Qxv::^ `/e{dxII\VG>9wG@+EQofsVF9F3GBV%%tEXtdate:create2014-01-18T09:53:19-08:00R%tEXtdate:modify2014-01-18T09:53:19-08:00#31IENDB`Pygments-2.2.0/doc/_themes/pygments14/static/logo.png0000644000175000017500000006446513041166700021553 0ustar piotrpiotrPNG  IHDRd<-υbKGDd_l pHYs  tIME" IDATx]w|~fZz!PC(7H$ HAED!i?nD"'@HR/#wrHξ;3ϼex6CQJmDwӯm9-mGpnk4DAAAdd„ ]bYD.qwwOy6yzz>*ʼ\fĎTZlٲ[呬,ѣ`Ylͭ@TYYY_owdذa|+W `k``?}t͈RaÆنO>|OăG5kL&G3fX OOW̫V s3㍷O 2D%Z!^006xgghWFB4Z@CN WQŪ^F K [&L()&UffςC(U)2o%M28SE;v\v}ccDs׮].\ *`nnCV}W* Σɏ]pm,(]BRGjVjn{{Qe|o3Fi 11eQ~Z! %d 7<oU:߿?]rn+OgB Jbcct҅UCUcb5GiM~,hYB@( cE˗OE~.zwvjp=pwwo˜K;2݅P&BKT,E_ѤڔAVWJw^s$ݶ7*be~tUy. 5XK5+EFI9'Yas.x+i]\\~8zFFoe xФoNy~g$;!#H”F!(8,p 8 ك4$`j*4Ћ o’%QJCEg<_6ajPFb.MR(QPZ"ػnbK (ZaJnjӪU+i6m CBB0hɐ___lݺFݿ۷c̘]7n, ?}Utt֭[7l2R^dmm*((O ܤQFչ̇yfpѣGo>2mذu߾}l`` q֭;e$>g߯]m۶5 ޼ysc(u3333e~ia֔Rŋ[4|1ܹG"Ȏ"p*SSSuwRǎ%d899СC.]h߾}ɨQ׮])Sȑ#8p `vM/_.SJK(\TT>Rijj׬Y.]&oE:TV2Bee߷oj3A^ۦ(]v9( Ǥ$V;R )))͛YZWTvE7vI?rC5Ib9RJL8j5m ]7jpgbL4g;r}8GYEO$CJDJseRKk,%5#U:yߢѾ$TOcm3N+V8]W[0gΜƍܭP(la.]+00Djjj+eF?~Ȅ }fffY2 cM)T*G.D"TlX\lkk{aȐ!_:;;ԗpO81ɓ3(4#))T%%%9r$ݾ}=Rl(Je>eYD"p'e&uۇ avɓa(FJs@ ˲qvvv ƌ <+(JB#Ph-+[ a9, 3ӧO&:Y\R9,^V~~>c`` 2uphaaa=:G&u %%%"g&|UV{joܸ$::P6U*v횤V3t82 svСK^СCݽ{wtII˲J @,C.gH$"'''NIQׅ^IO7bד İ:D8V8tief̼m;PA*;rm/' ZSAjXCֵ󫄌VƭviqhH:qz+WIJ4I4k__ߴ]|ԱeڭDvСy<;ܼyvaGPŋ;B*iST*딈88::fРAu@)uoA'ǡE}h"33ZF)qpttT?~_"8~x[n6sޚ(^~m\}3fee1;wQPPpB*՗>˲pss[йs-[̭}ׯ_Ç,˂8HfϞMo.(..^E]...{v޽Z#G\t)RP1 S J)ڶm`ܸq+_СCk׮6 A걉 ,--o~{WXxI>m.%>;NM\ҍI= Gٞ06n9Ta/n Nfcd4ږ6,kNi#\2O<kNo#phM~PPPCLZ) ЬO9 6ԡCF7da'=fddtYBF___R=z˗/o+,v{gΜtJMM^XX(4bH$H$ Ba@ PVaۆ8w\Ovz@H_ri:o֭- T:DTB0 ,--PJzzz 6LFI6''ㆉ ٚfۉBmVV@(bkk{jJ 4iR!!Du;}u;b\zu={΍1BJ)|SRRC(5j9''gk&M2{I$DJEddٙ3g >zhlQQQ ]y,[,S}̏t 퐑zX`2sbvvӟi`mm~jjO%##C|4,dرN@ff&8IBa9Q*Q`… gr'7>Dڦ<|0Օ WwرQxx8OHH/B-X|yhxx-Z(_Op}<<*d k㓢|RGp `d}zߛp-7xm:SG ||#Nk2"Қͩ+KT:LKVr8ٌnᱩڶm[;w.G1C؁SJnڴiS.X B{...9t0 O4Ѕn~+##nyӦMVS4͛7_V:(utt6&YXborrr#DH~fy>O&loo:|5==B(GcǎTUDC)['OzD"N2-k׮ѕ،r{5s&`ɒ%'{Zlwܸq'[Y@=G90['ŕΕ*Q}MV5y z6YBjp7yH@gBUnD[i -kgX;apa7jִC)%˗/YA999%ua]eemll: rUjjjC׷L{',tIa ƍK6o666 u-!iuPKKKxvBM u͸skccױ QQQ}esDZd2Ae_>>++ :O?o߾*eРA4$$Yf.Vq,,,ڶm|i>ܙGJ+꫖=6Ǩi=ͭ;,D^FC`ZTo: 34᧋h{ּS~ɪnV2DA˂(TF\ ЙME7݊UӯLZSIJJ2\j˲VO?q)))m eYN,䲣GN֟=(--Y.< !2OvvALL,}ŎcP{('M4(B<ă6NjQ*jQ]&j SN ptt8k֬u]lƍ3fI ?J$ N&JMu$ S 2 ,,LQWL:u ˲q;!!ڵk#jV`8;;w;wn6%!2!ӧϧA {}i۷o[C? !5Ϋ҆o߾&LXٶYfٞϛ7Çs/'er (\R m[,EXtuؔhU (%C6Zn7쌭wVʸ(t?v)%5АNuPdK7=q١UJ{B-, c6Ξ=RpB;JD❟_axuɓOUe``0#|R[A/`"sԩ'+h7mdq\9r޼yϟ_gAj-K>8zhv0qt++'Nsh~pp0w~kŊO=t;/CCC899MԒG] LMMw%1T,y bs&&&#GqFE˗.233{p>qܹfff999:}_-\C>ƌk? LsѤ /Aj20KkTRݠ{B$=5;x J^]`rړ6ʯipEybZ Ez+c6ȑ|5mM w~~~YC'(KK˟L`ևvڝeHQt.((hZ:s bbbz@ۮ]UurP~%<@;wPNbYLTvxa]MPׯCѺV$P("9/+6997ntdVQN7˗1p666_ff+Ԥ^z-"//|DDDYeggGuqpqqZ;0-L=>2 1ThV%!DC>gåX+ 3WsT` AsQFlwěn]߹|4MĈL{,)o+ۯ1ZAZ$Q9ҐCп IDATJp 4;wGnU~ڰaCAAA{埔yMddd #W!8oJ@ iҤIinnƍ{2uO}6iuÇ~?8IOORTՍj !|}{$ijpɒ%uXY{kggg_${'-N>AA/y&_pPn/2yz݂Fk҄SksO*FGOH@ztw>0jwPo"׼tN kJ]&ɤc+ӼȒ/o^mjcظ񯵌 Ō4k֬ Rg:4 /ݼy₂6r7|#MhG*[9'*F<g,)) H$KӺ#Gq4CCC%xyy)ZXXGWgGn``<꠫kn9$U&ME:t{rX[[W uT*WرcG_\_L$eS?4pP_<%SW:Qr:DBs16elWvYI ζlLBEAZSCXDcҾD@.OO I{w-%QQw\&_533[֪Ufj0eʔQ΅yo @pn'#mcbbZ4VMJJ??SN2PJ%WP---,Ru};Nccc莮 ///z׮DOHIIG2^[V#++N͛?sڶ3 &&&?R) _bũ={ ֱB<>SD #x:Bu> \̉W7}lۀN_O[wQ# hL(Ӗ']a@Ta^)7ur\?z45`.КyLLL ю9#yyy 8g?.G8TUwpZ 84l=WXXX&TEF ZH0mMY Ay7ɪ]v}.=T*Ц5i>k9222u__lYr mu&J)))=-[Vdmm$%cpTtZBh=TAimG>W>Fzm͈vhu,16qGV*e-JJTgjUMO-<"EMO_;Yo\trjΝYDBի.nÇ3wqhbQu%5-!$''oJ\.]d3_[RA&U0Ὥ9sf+JRSSRSSW/X 0 rQW?aG=Y]WB:~Q|<5JLYKqѤģX_7XӼ6O@! (L*PZ_HPЬY3vݑpII >|x\pϟg8@8˲8@co8- Zx!#+M5nl2xfMDTܧ 0/1aO0孓bXC6?uTtG.]о}mWh>9c ŀxB)$oh)bQ0v5~~~666A% DZ))),_lHHȇϝ ;%_u4$uڒZʟcZdKz6v>EͿ_-@[k_dfȨ]\fڙ(#! #u@X]Jܠ.k*y޸qM3\tS J͝;w>p>`e}S)))|~8oҲAf"::5 ؘn WWWv`Vh* ._|`)C|RN.de[3@kJU}RA3TQm|䧟p|sk_n!8=Jej Cʆ-U\ =:%y5aDs4i.\ n^$ T*,Pejj׷˗/̃ZF֭{xx$ִRf}XA?x sѢE~%%%u@P" k;ֺfxӠ 5j={J,WXϋ86::w…E5j(Ւ,_ ۃd[;Fqhvv6o߼F-[VXpUj ~sf}Yv҅w=V(M&55޽{ [l3gD׮]ۨ P(|Ը+nݺU<<<|ccch7kMLL_v҇Ç޽{ WXX`) Zrڴic[Zs-o@sJa[>m_mQ7Ҹ]O/_WWq=(JohH)5zزeMvspr>BaJo}@AmѹshEHHHA Cz1K~~~Ǐl…eH$*7<}tU)I,mT.GuzP7:gƌaٯ Txyq|/[ôQOUFfFQJ%ŲoGfIr۶me$>>Rwo^i:::kRPPB(] XRJhWӧOaggeccS˗/3I|*:} j̫N$\@X=}?2un qrzB5hL5iXyN1AZBVVV ͙֘ ؤ& D} 魬ujm,뒈*h4A~''{r9xɼ: 3fЯ?֙ =Iq+vT*Tn«L{$MVF,g3[ήAE#",KT?Bܿ;f7^~!!!0L //oܹ󏢢r&4hQlllJ)SMp5j$Ŧ|k(EDD +tYFuظ,:0HLLDHtϞjPT(M>!듳CYxن6n ,cP *3 4hLLL322]Çmt,cccL4iƍImqsi}((**G)wʠ@tr܄o h޼9 !Ҥ4ٹs,m.*(2~ÇW!++ra5eh߲$"}Zj͊ui켏lh5=Gx5huaŰZ)}UR$~2-1;ڷo~ťK511 j>>>{r eӍ6lG}=c _~FLLtСCvvvu)0te 4]===_Kͬ Bw0 ܹS7bٲemo^rל9sUPJ [*mTMR$נ1Ue+=X^e)?Ēu6m+i6-$$}RRRs%6ǏԣGf͚]>詇vYkZjHLL*f1cƗIiDl i$Xbŧ~-;wnի׍5 {dsB?UǏ&LZ*JeZZڨŋ={֢.e8xt!͛7ORDwXP'ZTâ<ŕE|yJ_"h[J;iWTѝ;R fƌGG3fht}78pO>QyhhhիWNJJګKz<ˊٴiӥqrrrSN;qĀ͛7{_RFFv\Z/BCC<뢎/fګZFFF;v4JSUJsss? uȑ/_C ɓ'<~JSDRf1RbS]Eܾp[ Bjx["3ey~E$?{b^ !ꙒBgBahv(J˗ZaBBΝ;)ݳݲeEČP,_+G>}p}8::lddPw`@AaaSlܸ[tEFFd?Zر 6\ݽ{⎺-RJR_7BJlmmoER.>|xԉ'~W"ц *`~_Jvٕ˖-K>pK,1x-nܸaq!?. {͚5g?J*J8Re+1dܿ pj~MTFqұYl, Gu[s$(-H|lNƲr< ؾ52>|xŋd2_rI}7stn޼@ (q5Q)?C3LLLHQQ`ǎ2,##Ò2-RJ% QTEjڈo O !!!}ўSTPFRkBeUprrZW\'MJҭ\{K*lCqh%| <طUVlmm39slN)W;u:.ckkԵPJall̩I^,?@ Pʩ+N<4`6mJ,>&RpSS===M>!)o\r+++V߿ijjZOWW-BJ0 _^AXcƌApp0&NՊk J+++8994iҰu֑ T>`_ ]vWQՒ 5O2ZXjur!ìKL\Djefp%YWP&9g6%-7Y׮]Xhi &O|Ugn/!!]33#F͊,hrr2>_mN566aF[ 'ѣ̙3;/>$РA{滵ub1{YMPedwyM.+M6mFFFR???DRL)N,1 Slkk_~}'Ny6 O~RʔR,]Hfff?] s|E޽rrrRu/\N affp)n#! !SL600E)7hiiytkx^ڵk盘ߙ2{׮]=fL:X]˭{z{3 cЪU˽{~\֭[ɓ'kظSJJ G)NNNƎUSptHMMu۹sRljaaOZM5Z%dW177;vBH~]'ۭ)}#ytԮ%U?#Ӿ7\BJҚ. rk걳juenܸ'O(ryvvvEP5N,vy_5agSw,n5p:GS:_+?=!jqN(nx/y񝢷]Rt^F"DU.lmm;^PPpo-...6+0B|wmD0ɽ{&0z7n8Y_ ۢGRݺukׯ_VkR0F}ʺhU^JH~T8x0ȂϿ/$t"JZЁ輤M8._DGGo%(pww?nddty.@)]x1%<<|eDD/;w~Νu6mXXX5qlmmŃ')= C2=d01WCJD]g\{pTW\ֽ:dESDiQ uavʣnp:VPPJIIIؚaccuܹspRRvL&믿߿'|W|||$44L&3b 2d"ߍIJf buV{b zU-U}w.3RΈ߼/@7 wK(F-a$097+a[MPPTT}ҥ$''wϒݸqUG~}@Vݻw 444qͶmۚ, ήcSÆ o=eyxUL38Y;}8.5LeɫF$'~Tl/g_,{C~ʂ" TN~MS&d%Lڷ2o۶ C 1ygLIIJI8嫯zaq/1X,%K ggg0 &&&rrrJRg8Yƍ8|L&rĘTQKo3kONtŔR"ο<`b2{"AkX7'4T^)3(y>h] FV&Znؖfvު|֭G JR駝 IDATlNxxx֘1c{Y_~eqQQѼjBi?kSU;;>Ҳx$U \PrMϻU&ݬgB`Q}nٯ8KcF+r\QT[m -84 8 Vuy /VxBԿI^^^ʗQǏr!L&k}x{{ڵ777.885%u<.br@ҳu٥ ][$IPPˎ>Kw:9}F+K_(Hv"(Q7b aV;4 [IP`iioVLMMS\\\>9s_ A%''_~-ZdbeeD"e,#6V dY6Ȁڌ7 .pxkRupTW2ٮKUkCT叉ivO΀^rFH:kPTOtty+;n<ܶ999YӉ]88@q;۳g].]g&֦S {rr)Jr{ v޽{?PHQ%)RP7]7gh>wԩ߾'nֱUwy$e*|V/)系hT@q}Πy%hC+/F/PEA- J -ߪѩVf0zM_z_AػwCuvvv[kw:tРy={ܺu={ϳǎkw/Z;wXlKD,P-Q(oD. 6$6ky?@@]P?cdv m^d111dբ-[PT&$>{m6T~zk)))f#??rqq1PKÙ3gн{}}T*o%%%;j6HrݻkjLaaׯ_ٿh|J"hlYMGBT2zݫƙgr+)\J(WrF J#XM] "A@Æ ȑ#}vFN:Ǐ'o6mZdǍ)~9ujAUIqȬkJGh֬YaXll,(^^^#!JN2 H]ʮQTAUgU8NU{%E+ Bj*ѣG;<3gξVZܳ*4mT1]m۶9zhs/^$u+!jR^B˾ețf+\T+\V.@H5)Ak#|4y$^@ Z xUZ5) @b5i nEkV"qJvʕ7oޒaӕk֬عs牐tk`Yrҥ ?3ni|nɽ +kgr (CA(?|G[xu_b+J("Z\ds<7 != d?JlD\J_}񃟹wΝ9wsΜ9Clmmo&%%>`<==Kp¦2Zp82Co߾ yyyB(kmm`jj n ŋfϞ1@GGG;wdff8qbBb> nŋ_! >>ƍMP}.]!-- BCCJ޽t`РA%99h4^AAAFggLW^2VTTdPGbVVV@$!77X,VĶm/_0j(sqss ۶m+`ii ŠRcvM$-qppx<5G+**A&-< zUmmjg08vy@, `ee݃KK8 ! j=o9P~~L6!Φ𡑤z􃱠, Qdjkeښk' rBYE_7K̹֏>{M) {I\& -*`$,e5Q@ϝ;w%++daAWW74$X(B.,,O *\ //ӧO988p8wHa0E֭ߚp%WV4۳\]] ?Vobb1MMM˖-8ppG$ x<޽UV=}Njj{Ϝ9S$M|}}͛痢EȉJ;wOMM+;;;w/{72̇4F"d2N0'..SLYYð*222X_~ጻwN޿}z77ao7iO7mT{ѹsF I$|D"Q\]]o|Kg K:鿿cǎuM60TT*h42__͓'Oһ%פz2P&^7 mO`A3R௰E:TTlLW_= p e?FX?& VoAH$II6lH{`0 6l2 myyy,/cǎFR$iFߓ2,̬$222s̙Ot:$yk~+WMIȑ#78ބw]ѱJ.]t`ƌK8NT*}7--mad2L<9*//OKPu9g*Rl~_Z:yyŅ>_\U3=r/#,HQ~2 BI$dD"2U#FbXq͂χÇ{Ʒ̙3__ z9Nݻwz~ðc /^RR$F!|nh)ʭ d2n)ggg~xwuuuAUUK&""BjA'.//WxxxT3bc0FYe<|:\\\tN ;vlB$IvCCߏq(Bxҥ~^@B2 l6y>]minn.>cǎ7j*T*NPzJz!)+!!aX,N! Pxy֭ӦM;aoo/ILL-00pMRRt"&_|m޼VTZZZ #""z{.uSg >0@ V8j=BHmqBrr2={䄄;ߏ$2'WL:}[vpp$IޛVVV#Df%:cww50iҤz^+)){{PSS9Qpz7 kQ\\R5`&8u CZ-HRdX6+?0gm ';ѶT/VN1}:(+JImI&@2({%E gΜE |J JKMM@H$^ux}$k/8'T&&&^ojju:K jdddjnnH]]ضq_oݺuҲe˞K 0,..lYY8#Ç_#8.v^^g~qmy}k9PDX0PV/ $AL:ɬNrkBʾO$}OPƍ:b1VY onCؠA>ӣQQQcpj< jxBPT*{%lhI(ʥ4 ٓBYZ8[^r喉 jggu׮]LQTPQQAoo~~!* ǏާbH$sNkS{4t:rNî&MUUU!w؋C  ((znz`_8BL]]Jk4302,>|xa{{{?DO"FY&jrGp=Q*PWWQTU]]]_pBuxx ssڹ>zpČݻlaaJ* _'멽ð2T3ᎳܱcHI;j2q,T*5ѣG=z#HRSScbb_zj$>A /.GTi~ L>.5"۳jP#0\J$ yyyaX Djkjjb,Ci{mE V BR_```ѣrgϖGE?~|ݺuꛚܭusskmPĨ"HXccxڵkW8p zk=*< rƌA,,☏O,D2,>>>ڵknP(P[[{~߾} O>kjj>7\;pX,_knnիW1 }k2oEEEj0ۥ/IDAT`v5k4|r$--[FKJP__$;;{N u耆愄ϊk׮'bؾ5_uqqQs8{:s… xxxlq/..>k׮~!ٳ%&&\T*MMML#I1ڗm ;V ۇH 4Zna]i4@t֔p}4٧1xucSQcɁNTϐVͣB̙3GD&[LMM4-S(>љB\#ܹ`bbRd2[Bt7V@ 8s L8qϪBF%333_8ׯ ~" !00Z-aDќ;, xx]]]wT*X,t҆ ]\\-,,~d-EXիWRg(DW @Jf(F ɝjZ B"""blllR(O?:++kCii u@ |K5ZiR<O{lmmSG}h44 jI$={v#>tw}XZ]4dul6[d2@mnxNòD_ ɠt:=ڵknT*ǻ,`0X,FRI s_vWMJN\tU* p3fv`,h7@ PRPϛ8X@dL&[QӄS֐H$K.r''&&) 3[Bϝ;'N,󲱱a"bBHD"c6Id2---wYxqBiv055d{>[(°aî| sBH3o޼`N3-,, pޅRZ3lv*NI*ʟD" M~YXXc0sѣGXYY5My͛wz b1---Æ #H$\.!Tk@5==xښ>Wc ]caawttܢ/d2-e\tz'''g.dXLXrggg#B虭2l \6 44v mmmslmmL&s())333DH?!44t= iee4hwhh*{ !T!E.0`@#f͚\.!())sѣxzz2X,ܜiggǜ1c &&''CYY`v׿ķĥ7TjK2rOS/Ѳ'_C\B@% GݵxǏ}غ#F>}տz蓢nٲpSSl6mC.\GGG<QQQΤ$_{o%eۋjکSZZZRy@ H!!!ika޽***d2y*au~{{ `aaa3o j5СCB:r+Mv9rDE_7n\S_l}qq"۷-*NZbP( 3f̐]} Ѿ}:::ZXXlJd2A"bXß:0ˆ?B… F8}tcR6#0#0#0#0#0OHҵIENDB`Pygments-2.2.0/doc/_themes/pygments14/static/docbg.png0000644000175000017500000016756013041166700021671 0ustar piotrpiotrPNG  IHDRr pHYsHHFk> vpAgJ|IDATxp^uHJڍDsGɌw .X-whU2T@DYݪn%m>֎=16J! ?ə^9bZkmNh`JV?Qnd=&VlPr"K$~|q{s]F5;Uq?X}<Ky׉jX -?g|;.xͻ'i,ut;;Mq wvl-~ѵ?V# Pv<'X.w䯺5GH<k=ok vlh)>Fe!s|Dv:gw;rW>g+WrydLw{]φ>'>'^Ŏ<\l)|kt=»qස)wBDD08Q}}};-6|ۯũ↌vweܶ+w coG8|o6{8WHFo c(;[aǍ_Z "Yxdxyw# +qpͿ̗ oVu]C\wWJhVs[f 77|t`zpcs~xxx9YyssKv-e69yly'|1K,{~Ʒh7w|:-2xMw6ۜG~;:Ov;_s~ks}}<|q6T(rYTݦ)A} |ة`w  ^`ﳇ 3Ӻ~e;.'<`v< /{.~u}W^}5A6j[n[O |\|Lb[*Gs{bRe=> B+LEkfNUO |vLk,1m=gYpAӻpջo7`5WDog3H6UũjX hV݌;8soǓ4ȑ#;N}f[ mQлvXmīaMMƱ ^7](vybK<s9YLv;b?Q8k1 JGߎ{St^ƛ^yx6t7iGHhc}.[Ll-212%bΩJ"7Zf bw_ED ~-mH3&yxrkWi%yy9唟cXN 픳H U*HuR  ;q7^'iTy4_V aMp=>~+HuvrSNrXNi?VeMXoڕ7F>ۃ;r惽ծЊ7b;Lyʧh6=c~)ŋa&h,R o}t+{:k6|+Y^-86!۾-Xj\-4ws'1ߦU&7_/y& kt;XaM'>+`%o)Xle'fkGI7KqClÝv8{.&JheKy;?ۡݡ;9cΩt`([l <5&fQI#ڂڑG~;Υ*l󳧢[+!r!icZ)VcA2(ͩ*Eta1Hs1yeN ̑ϱ4? *ѫp;ˆJ2` ǭS*jNs:m`q'3- Wozj]2Clqj O>oG>fOaSiYQco늫ol,֖4@7eTF¦8nE־-`L hJ[Zu6wއ-HBnzd]`E?աL]iw+1lzkj/ s▌Y6(=+Hil+dTJuupC^MC }?a67/UaxwIf%2P-Zg b(;_`$Plմ!oNd8@UJ+`0 0O)nNٴQCEBp# 9m L=j`2P᧑oa 5.0 8 ,-geABU3(e:1' D &tBDU ߾W@s#MeaCqbleG٫R[/'YtWZegq$%/xAS> t@1{:.ȷ+e63%,J_2z^ ˥hEəuu&$ V=Re1dU (ɓ穿yŃ71֣LvWeTeI)0bhfo}ѵZyUj#iX%I0HLRGoɝQ;GbvZR0pȏ}bU. qW8L@32H:Xq3*<.NunpivOɅ(|zYO?TT>" N~'?+O֮GF=j9a NP(:LsYjix"ФEuPƶI3KQ@t &}P2k>^gE^ݺнIG(!|yRYW!7\9ce-7ܦAֱ?k.^LX:n.;ɞ+w[eITL&S &g؛Qʶ٠/Ƒ,9< I MLsڴru}TqZ >}pPN }h0le7eF((Q欬` V}5W~noidW%s @ڏ[/F+ʱ$Oa7N9nq?{&\FU2P튝 e1,kjŋXIQNlR pZ$.t'ٌo2 }ۿb%d$ B3r1[4 tħȈ"4Dž Z ݦf ;'D;,_db+Lp>]v#05,{$/%ŧ˕`>ӒixM]Y1SXG~8C%̚t.23|  팲-0k{0؉z{2]?zп?mw\~v~ e(W MI5r9|_)Pɷ'<>zͣ9Ca4mhfu0Hr}haZ<{촊Ь*?_zʍ ,ߟ=}!|v 98Y&1ƋgH H>l yyxdzjUN2[Sid;۠9UϺ7E`-6p2 ->QhX\鼧/,P@9¦0Y;.ƫq8W@j\)eCK~_v\ofr6.ʅE:+ w972RI7]6Id2)Fjśp3~8ܧuwۇT?Z*_mSD6>1X2LA6D /۵WZ( $n %Sa6)GnӑtցgiuڤVI/D>+a\ _Z<6ic) b[?WMY4V1 L U~g _ϠYd"Hm vȧ3wqI-p)9z Fq.+f[_>xꪀO=løkaQ!DlJXF6.=Z5(iS (hRhxdFik,fal2RV 9K46l#m Zw7/gW&R[ٴ 3p~{$󗑔6: E W0Ʀ$=#c )quTel;h\;&?=֪h؜ Ry|bX7ifT1E q9rNeo̥B8کa?WIÆȥlz 9 Gյ}bl\Ҩ:A5ec72,P(Ɵi7sFBBc`$c`V;/). FzRo[./!Ʒ5ThJ귓_B&L`=b:\1G(-c+,Jaɏ{rf¤:ܣm%E- !'h(ŔX;00O Y]*j|RW?5tfI;lqʶlXȩƌa܊ȅ D͜a$ 'O\%MKt?.vE}xrϹ0OZ,'ad+E!|j0vˉn+V]>OCtCt< 5XR$r7"ѽv9Rp1Nymڦ "{oDWp܍SPf\*_V>UV9Ix->9D[Xک?#d<OaԛqSGTce$XF }NHP|:wV)n%͆/cGB񤮇VKi2w#Ş+V+(!\τs YGvιOoއ`xXbL®Hb|) H=*OI0FgDsrWpDYv]T\SMROJǎ|y1Ej:67P^ JMFFOaK }8/q- S|N%CB 'ܸSaH rBY~WS*Ut˴DmZ-ƃ }={K |2 4IcU'ȷqAJXE+\({&Kk+lW29 6q.لΆݜvSHz~'ߡyZl}|G_{͑FV] 已Ĝ*fS0b`d;mv2v̖ wTk 3kǍz0߮…+t]uC/BG'/~~{:_|?TXWKpH\)TQSTfİ.(gf+i7qX|PclHS0XLC=&ݪYm?J%$=#=GNk Ť"C+<.+FH=ksXRcx0]*d S;HypTywPT 4V%(\j =iZ.K OhJWfK7I/X.9~]%6""-veV@p'b:-$C^H0xBⓢ9z^=9ES0yN8W eQfבR'~.BUTa#w~+=’ݫӼ״ox%tYJ#8p:{ I11d!yPS8pgVqE+K%"}#ʰUrN1ߊRvqݎa^}X<[?TzU>gbVy>+AcRN=a&܁fF UHPV%,gTK{l%@zJz\L^-,X TT')G4ʕ,0Td[7M"AtòdL3hy NPx.p6`ƖŹѼv=vH]DݙI<}h(2KVrp WFY`89RDS('%:/_I0/y\QOZK0gyyE0ֺWL&+*/s)uL߅$׽砐 GpT̯~vܧ6g?BcR]t{T "b@O)4& hςh({JUHBf<1:ˀ vL %WiTV8*w gQm Ov;.)^̜E;,Vcbp.I t(ZYG\D9llR{sPp\)Jzy|]U5Iɨ SQHhQYZrb OH+;~"PkxU2Xh\VbZCzlxh*E[ .\&_2LƱ0-f팸-;[qХ#< )~N0SXQ7B+Ӭ#IsGEn痕\^CRqxbܶSyB -# O9O+1KT٩^̡q)w69FIZ[-h#CbkwEx!j&Yg.ȞbV/Lki앰(* f]*+sbu fE0>?{OfbHDteWVNuMIN9ġ=O뿢 ?%Uĺ+J}2a9W)@Uq%{f#TUWJIٕb+y>M"!Ӡxu %  PWn)i bմ~a*.(DrBſ!3UE ucuO];#x6 8K9úyD}ؤhV0ޯJM,^]BQ o"g(,jxa6m[cI֬ `)=\̒Қ2h^2pFMV*5}JZ Sp|3 s#gػuK5jHuWģɓ76o; #^D~&{γ[R[*.Nգ9;]XʀM{ڕVz7w 'N W^*SS&"uz_0͖5VDk:9x[hPǒ)kzK!NME C k8F}yhb<"2R5 Ha=S _2ͫ:PxʊrTcEjv1C0[ vU⡈?>OS0p~2T*)>gMqnOⴅA@# Gÿb`M z0MubϡOP +Ǜ"3Dx6챏e L%tYШc,Ui =(+(ی;Of<< qgJْҵ._ r~|sT^+[3ً:m:Otc? CɃ8YWf2|:ڑ亳2Ճ'?CIsg O2fdN5 / -dLA`Fipm=6YSy6TJsmvu]dhBT=ZyJE3d?UvU tv7vJ9W.)R_)WrN~Mb7rūǹ U޼A~<]ULfߢKqS{Rzv,D;'LYc%"q'Ja"--"rnƯ%j:=U1 (Pb.nŷt!ȭlh)& QhrbE7Q䗔ʦwcTZWMwPȔȖlv}u4.򎍼-\@_I_,_L4CD$Hâ+]THj P=H4{~j[]C;gNSKN~6I'2)!2c{lnEDG `]PO)*+?G7ѱ z5edTi`MЃj>Y#@,Te%C'A(Ռ+dlS=EJDHG)m% >>(| kEjyNŊpsX#O @3%pPhڰ$ΓtΙāo ~Iybij֫~q]?u:$ /v esI&U  N&h00YPw@o 4V qScu!E힟Hf] 8ܨ,b*~S2i[rmx4y{-{U8%5XR۸&\Q7u]JĨU a% !kST y.{>/ Z7ȿ'] .皷0D1$mlʠQ6Pك wsiˠ Xpe7]ީ_4:FMjeƚ #fKmRM&KfԲDYDDr l*)1 bJ>H Fۣ%MD >Dz'+B "h3T2{UR^1V2VםC^*t T35ڱ@a V45Oh&9M8j 'Pi1QUU`Cslԟ \88C'|H2^OdX;#f8mߎn3*PQ-sDD2PD)(>:ƀE?q:A,^>x4Kٌ_d )x.q~۵s)?fT=>{n(CJ1DD K8T3O Y]5mk[AR=8q&VSSκڌ('r8;?ߥ8/`q;wg/y qytLz7h>owigàK10<< xpr~"L73x;WKΖrfWՉm[_Iz鵫VcF$čE|d|_3tӟ[` ?:5UMh+](vH\@ UA-2> Cw:xc]CVĩ'cdG쏥ٕأ"WYHjr$s C[z:*9meېV]_Tr+pLocn&*6[J@er *1:EUzzK)pDXl;25Y?maP"՘hHH2$NjnVAOPP*W) '3?"܏,g+>Qt([C+R7lš+Va&}6>V"ZcZ ]f֙zׄ#*Vzߴ+NV:i:V)[*ِʅiiV+o%tUmi[oZQUM]Fs",/І}6P֐Iއ"U=H@)@$M`ސC8pq[X/OCZlu x=4uk*ٱBKEw$?Gh|G<) ]sՆXyףxHXr[cYJ- [$ixR GnV~ݷ2Y~~ܯ1s-nl<;'ro3][?"A)N9P)Tznt*@gE8IMfc>lxVmzG̚*s?}jFOj*;9w)mh٩~ƷG!cUέe ~{hއUY*4fכ_3jOcq\(s唟y+5y1@*^n&+md$JĶJ@>jˠN[aoe*V+fn GD -?<hXθCs^*'_;z>'G*X~nu<,UTd<4Cfc9EBVpF=벚:*˻ưکfM?Bرُp Ar1X3ce.!rd)HH J TW"Q΄2~J9^I%M_p 엘DgrirI mf!#j@:(DP1wX6VxL:8/x.H˕@K4!b$hQ?~[y;b(4LU+Lj:>7y(]P>ś3d;bthSKB&秳簉/dK_k^r+-b330/dX*;T ) )`){+ClqlGig먲 <颻ؗG&m',QSu5)0*\71ed|/au(qla-..VYyV")Ż=2kCQ{:_r!(AA.%ҲHn jgɫ x6)&MCp3,14ahc2ҪPzSĪlw9Q%RCq63GzP=pa&u&vrDckb.0R3X䖳k[sb)?3Dg%"j&IjT+ k 4DBr HD3ehV+M[MIh;_r19aKWJX;)ǟgar~hC'0NnJ'"*]L#^? ,*+ëf /1 ZXy$ 47k=p1NV+)E&g`ӳAB<I,hPIi&ePFI"Kq$粼Oo[̴voWUc٠ +Toen#3%y6Q>3#W_/ﲜ̧sSs`%Q/e}QUc07C/:V$vxRD'ܸkv)E^l(m]LpIĭ]iGfҕI8 Q- M\mt5QCzJjbT*62zp٠ja=apv+TձQ/qc?Tίi \ PvgA0`OEdC mu7Nm򉬝r%G㩄p%O18n 15Y`snMtlճ̭0߶NF9!#:ʹU\ T7޷'\y)V/jjr\+Q㐧.X}.IvhkDlMLKu$$tZaǯMO;ҭm"3Im>BݞB(`/ Y= |]$2 k %OC@GOB̛ e9{kV=Tg=m,<4a5,~?Gc'b/, w ۂ .WQeCSh(SլLMEk/UoUG{^sX=_Bg0ol^J4 X]\َШ%>DZ.n͉tv YK R:ò?,]l_(úB-\d7| IC[SzSǐDn-0,{4Qф瘉~S&KOW{Z.>CB]Mv[e<sp69J |e>}q cPBkCSsݯGR@_AC .nW'Hqِ4Bۿ 6ji7ij#'DZ{^ v]ju*37AcqGacq/;N౽ۍJ4ԍ\bENa6pRTkfzq{:_5s2QE^dݩ9MeV,l[PA#r0hq AT4vWn`Û;`UjI9Ӵ }x`ۺ a(6Xv,Ń߹ } VO5#IaaZ8Y{,.|:5i$4Ց[& + ~@rJ̑bղꐉŹϋz[L7Uz*ny~,3xʋָ,SxN"{ XFvAb}@`^2 J 3wvw~e*^0/t6SUCײlV9'8hu;l/Mh61[toʂD@F|@%Dce40?!.GcJZ?tVnk#Gs83P $~DhƗe`\&YUn5UjTaW 8|Єja鲰4X$Akk8lÚȴh >4ha x3ukC,3U{\6SE8T(ςJY_fe)]S9Az4 ,emԅ)v6=PB?°1$x1hJ,PRv-L\M,/婰r~Vb JN1W dzxanHGS˜jbc* BZQMF="J'e34,Zuu*I4hp@ӵo]&Mzvȟ=ljmxd&I ;kǪ)4Aw+tk;Od,` 6Qj T96$fGip .c=&A2zxZТh2 Qaw-ܘ f 4jQKcYP=c>޶,aYaxSH.N D= (6F7CE[ģ.6Zc* 7?:v\z#_#L9%td_ qF^R>>zah lh,n=4|H&0"pqٌg%eF| `؈;{ol,Ϋ@ ن!FVzS cl/ WaTC5jNڲ8Rj~dɒ1ůUo6+|Tq#U+V+CXG/VR(?gr +aʑt,S ^]6Ulݖ߮͹^q3 c^7v;Y۟MM8hyVqD]-ΖV'rD"ÚD%%a!,qʃ?CS.bV'ܒvW b)dʏT~"N^xgAiRz@ r)RBk+s7ôE@J.u>}(x|-1U {#0qJAP[J TVM""$mj5tV;1XfHNd0[ʧz9RY层ȅ[Ҽ#I!$"hBcO;Rz顟=r~an'O$a6(~.k%)$[䯦8gɸO%#-Z^^,l_b1ce+͸SNL\+WPOxYQwqj[iS%>B 8鱽7xw-oW0s#HuKO_>HvR+N~'?ir1>.cG4rhU#& #YuISZu2j sUhZ xC:}}4En@3˘Wf0 oߦd0S[H]S8mZ]A`sԖ8; s!w [}"%57d$'CX^Rjc`[v T-*߄.mn;f;`/4 #긤B*C>Gª٠Q?ђ+bZM,0a:hYZ8mm~ M;/t>qxB @%%O4Tۈϲ5HJHVt=fZ G S7(cM5sO[ ,rF':}>Z0/~?!FneB‡A5wU9Jݶ5( /#O y!9Q`ߣ6ek4FNj$SGf:TXu\~[>ĉa_Ycjmtl>S*$)YĄahY";Π<962&Jߋʓ?) 9!4Z K݆ m֑  1#d[-ʖu\Up )lWSUW7=_I#92xT ~Kz26CHS6q^Ӟv]e~Wv=.D%SN "ܙl:|ht'˅bAEWmٖv~+8^ZZ(˷ N.}4vv;hFy_I#+\>qw.F:%Gl&b2zqY7Z~o݄ fVquBOӭ4/fc5#w6Zr( 4^-o6IKԦ5k%WUOq$7]Nj CPs{xmڠMJ@ǜkUl@ن&[Ugɵ]bgHt1T/8bٓ JD`UM *x97XL>Άt;{+{~~C9v'7ܪ[q;)!|(#?{27fֳ$],}8U(삄fZQmTtZF=TiM }@J@1k,b#hUSI uU$:X.Ή\6~XAv8oJ)8YV@mҐ;S\s"[w7)F 77~@\`yB]ѕ71sҪzX Z`Y e|EÃ4 >Zhtt#z)!jl}Go\`ZaV]RS> ne3/;? ?]G{[x?[xxcdxK84r %🇟;o_e]{Mw_qww3i<1 o_l;__Mڠߒy( ~Fѯ>d8~/n#yz?_Ŀ397g櫻w?w>w'e>@voY Mw>gyng<2tiwOstIr/wOrt ?~k-lٸ?_'7_8?K/q~3o?K-9t}߿?E/;/f/??? ewc8/+|x|V_3I4@jxcMǤp;!94.Oijnh]ϋb#b__}[/G_.89wxBJ?QJI8s5#Il?AaWaut5Q@F 0b0R !.XivF KAPݷ7o2.Q*0/#s _Wt-}'e5N]lkC..:}+1!ʙے \rm,GqQ}ˤS 4fE=O:LBA. Jׄ^<P@}%k:\L Y@ sb ]PЁܒMc゛nT-Nm5*_̈́I ͖su8tenXD ?_Jri*{rR&}tD=b.{cGL*;N x|)=z =;O6Z` 3GTJ v XF!fxfD q]q"h#  lsψùǠւzR꼧5NX= #tl\4SZDMș?#_B:Sdyχ\N&LOGdnq7ָRg009gr\q*$i$(ktLjhl1kgL _bTސɷ}\l{0”un9P@R;0~ca*w˕Jvf5O߃ك}џO/nvDO ҷ+q+2FRb]ٹbOd۹:^54t+r_=ݷItc7}4R] eɻ!GN] /ND; me?Qs 5 n˽r%DٺBLr'2?M]a$(&=/&*XsFD4,]$1:h]HugEr\)[VFɷuCNyԍeb ::8X=*V"⦵V./B_ʮ|;" TIDN^lUezȑӔ jqHD@aJECʈӾB6d2+$YeE)hVi Mwm?ʏ?0XBMH@o><$unYjM8ll7][UpcQ*d^74Dǩ&jUN'iwbݣb8Ut~̵jGэtD܍0R+>ƪ➥Lsa$<6ǰfy^hd. Q.F56Ri1hd1 6ڕox^+FJq#rS@+Vћ:j{ HKpVozG-/FcL./xS@NNy`f*)Z 2MH3^־PN{mW^a9[6 ʿ6G}IJ{cG ,X%n-;K5WO@:v!)[춦2"8W($si`et hJ;TvT!yljN~vm|KT0JdGSe;`-!,yU@*>YUmA z: ( uyUN؃gmsvhiQ3D2 |iRAJ>4NEP*8Op k$"'2߻w/a I$cJ) d6x|hmæVc"MtM]:V,v#(IQGUP-lk0nMx"!y~}#5a_k? 2Eg`|FHX<=ĦRI~Rmbn`i=RTg)ķc;4Cavmd༕3 *Rg(50 qal1#;zr i N*3YәRWaAWy\rB ~lv/ q_qOqr呲(?=&moX2q~gĿ;~/.t'ēBƙߩ)7|E9e~$<乎?G~_B#xco1A#U%t;[~E dJd~sWA++քRx.7C `V36U>NGO~z2\xծBQL&i,s&%ſ=88уiimpE`Xퟸ0}sZE$S_7!F^R\$Wx}F3qi=\fs[PIe~۞tBGs{biiDlTY {) Ș/Ҩt()2#唶]bKi!c!zmXB&تMUQx@:^`Am07gMCħq SxK!ߒbݡVʏXOJm PП粰/Ȥުa_sצ~Zm'3C@  )Ԕ_5 /=W0Mu>T~ʊ)*HBaS7"'EOVG&V|.E<ٙ|-{5|'w76GCiG[-'ձxgnVVUZ=~#`f,iyeJ/$Ooe _L!@C6;-FDT5D8|-Q^{k?ϊC }7%نָ96cS 5T=vKŁny ]a|IMXӺNpܵh1Khw,t$T27NVyBYA{%E3 0ܰD>aQYa|Wj<cM-Qz0 7\Zd m\#VܼCV4pTo)+l6eս_}]Cvd.1V6-dq4OE=N);PT^qD.cAbrWieL-rAhV6+SOIG'8Mb! D/ynҷ, h} Y7itDO;"~qx[p+nZ,(>D~#;xdeWޖFJ8)^շ?p{4Gb+ʶ9򥼝8Cr$nt)M1cy+)->$Jȿ7}⚳$ w:yRb{DԵ0f:M"J4CE8[tn߸H3&yx Wi%yy9ȟlyr)gˑ2ƚS>֜  ;q7^Lo1ģa\Ma+l5xZ'*)R^^,|+2އ&ƷEu#i ^?a5'iݍ0YvHd։Kp6dF"quY n'Lj~kb~'oVVJ a-3/eWhc rx(u] '$3=)4ܼ VdGU H|Jw]oW|6^hlS~Փ׉,n+ch,ۮ1)6[QPcQa$|yJ9^)|66U 7k)=]/I-oWXw_4e;7rJheKy;?ۡݡA͡`$hTj #*c,n?{O`"Ibkw(Lb1O~.k%NgҍQ6DB^?e7w3K6ȇ9f9+u1svկAf6Oq dO)zڴ&48J@Rt!_`oDpkAV. ܍wǹDv"/Eh>ܶ_8OYca+^OO,F+L $/aiK?8rt-!F(ʖJ7=|8z:ҽcLSg($k|ODoѷc l؇b]tX͆Kev 0e - 9ۚcq˲oW8L!ToS@Myaۯ0rJ!@ 3$6ݎ PP2s{=A;@ ٘5++ m y)]D.7+%ꉰL~ɡrLYi0y<F`?an]Cc}P5Xv{C h D;yg%󳧢[+!U(_VqEQpH4E*ς~4" #65LL"ܲpwN/84`,-eXJsPhoթ\ZAʞM Ya8USՙV 3Tn6UFs!·s(r:8|ܡnYנxĎal{Sg$Pc.uG͊6k4i gأ(p- 76U\〠TVz,]B"]z7?)ڔ#|U |gDT&L jsM|%ރtu gca=xƽK_\+W, 4jx'DS=jB"Kxd+b0+%uJD|ӑ7_Q'?g8T%60_nѷ+}ʯi"ʪb\Te_Ytr 7<'l1hcjp1 ' HoF]2cɫK:6G"6zSTa~wlV"+kL* ƒS=,^ ‹領I)FP&VշA16ȖOuKt1a8vjep5 ]n?UPbO!nȓ ݙ" X Ó'xK:JUM%Mz*i&\BQds'ƶxTjKiDkeKi !_Уu2IR7@YDbB4t!Ƒx++$@\/OU$:B0{p:XQq/۹n+gN>߰1?Ejpq߸=`B' ^g1r`{WeAhS|E bu_f5 tW "UVpʎ0$$ۢZϋNd,![MٖnS +쪱gFmpj e `&oPۣFجG~9KCZ`M4'gH/H @wK]8@*P䩒{"aEQ[$U  |iz)>p94L"&F`Zw״ l*”:|K9-"`v<:bU.GCC@2ч3C OB oi GI Zn%e63%,KY clBs5,-V7Ŵ{XfŁv?- q}~CR&,Rm-aK.! CA ٶ-}z-SJӐpPf˔6`Jֳ:'O0Ojsb? *6"ʁυໟ(kũ .C(Sb(> BZ< ;%B`qs&Ϟ^,ARYL=`ae%K(J6DY] h9Z+a52#; k4X+N< GbbjozUO&˗k|WD "V|fL 0XEʭ `&e`Y }1Y~;+`#3Zy;uBo GX/'q;f|1(ᦈR\hF f V g}:*BETscg5h7兙B4@wrRX[;bfSA8R,vF&gdClHKwWbspv/H H>lw4Yy.xcuRMʈ`&͓lpcFL+/Xw` S tw|e~zǸwl<&CI[z-6alux݇JT>籌<0Ϲ$z5[J:b PFm/O^R)ڷl3PREvv)(#v>oem!.v\+v;;_/Cɏv@ %TP_+>THŦ;)H9)x2p1Lq& YJ |,k" A7sjϺ7E`)sxUo:Ξ@#%ݡbjZ,x@u,dH4^qiD8fJofr6.[q;Nqmd HɽŊTAH~h#*[~_M`A=8V,3Ebfɼ@|xLz-7Ow5 om;˹p|yA1L&duXΕRnF9eq<lcW"-sMq^ cv~@ht'i"ޣa^ZUfhZZ %cvK S4G-;N\r7y'4Z~*L ٓon=`O܊á;o 8l[q;&f"n;V܎{ʨEsJwH/pD44#4%e7}p$ '*jhʼGK`VG+3_8V?xo_ȶzUksZF֎ l3_.wk/0)~#~M8^V蕳HOBI7IU~&kgǝb4*JVJ';y+}]wg:+}/@e^ޖڒMdY3Y%ÄsbhIܮողg4.oxR0zXu͆0m:R 8ׁg4uڤVI/D>+a\ _Z<)UtY-⃟+x~[tC1 9痍G*n㋸_ϠX bBxm8VG>XJ4xd105[@3dm7)+\-!C_46wcw`L*B#…/Kȣ˗d-|lڄˎC8?8m_1'%{lPւhn(f[_>xꪀO} Ց pVŐiЪض);ixy6=ȡVK-vF@|y݃$$2ȇCf ^'l$3bT2*6jGb%VzX&k2b| XgMn tM.{6]^&L/+bA;$%'A ڠXX@Jr<_wŦ$=#bc )ٜ*uTeK`{(A|\V}P}ߟ=}NkHǺ@xNs^/*NI7!\謰N l1$2v!vm6VՋϜ`I-n=Z`<#j|aUr𱓚ibK@jX.[q!W$r|8<=KG3+O_cLq.)N"wөd0ݫȑ†J_' *}%nBbV:'"J§ʟz>5<难'1h kY;UGq$'8q4nj}l1_h1ҹ OwΊHDrP%m'-P\)[,Pw}*;wmf}>,oL] @) 88g<[F70v8&~7U'%` ű8%ڤ/ő$[UonUuNJ?gbg( %9'#U#l0V㥆Tܠ}8/.sf?FB1:~nY. BI{F~u'WUS[OrF` ׽bKm~xJqaMvߵ &,F_nUqnQLz!FD UUl.ʺϓcaUe@u꼧5ɗt ؛raKVgPSTfM]\Sٙ|VyUE@r)v}-o'Fd]k FY`8܉Wzuw<[y8x K|Z':iZ#NQ-I8V%̓/KW;}gliJɷ@:߾xb*ql8xnC Ho~+H`ӤVV1(q.&s*J9Q(M3ʕ0hs5AM€v=/gདB>s.XLqd*KńF4O86q?<# 4 wXgbA h8lYA[:{ gBCp0-K^<򠬤P&:7*\J^*'٤7% q#Ke4>Pm|@-M ?ˮt9KǛTW| Ye7 Sьap6^6>8\Hz0}<_Y\=/ 5zfcK˚ ç_w@_$S~Z-v?% {`wLp ՋV!/4RWײe*C>ɸsWw.^ S\]^+nio5ș̏J) Vh8m^o h<5$Gdi))*+7M rE_Z^uK\h<Ɔk'"چ|f\ ->^)OAsSl-wmٻ|8G8Ŭe{+RFAC|ȂRS9ULbEf| ,Op&=jL;*r 7w8_=ʕU̠k#(HLshm;U'.$2˹x*\AFZ Mcc3K=Ndh"œJH ΍T v)I7]U] -) 3(>Ԓ`47N$X4 g%ԝDX)[4J#ڋDD\MyսW80v!L=yC | +ׂJ_d<b6sGs3 %D| "0H'H*-5% ~ٝp] 0G#œ{qL0z\Zf嗢ͭS&sDI|TUb~/vג*m8&Q}2avwPT$PU%g\I\g[xJi@t][l BvۙD`-w.' E{'H򿬖}vTitkUk8q/^:HQF w_X`V/L 4|ז%1Ȣ̪.}?Ο) TVԖCTZwQ25u~uVq&s"pmnjizedfAf (1DZ"6JP= ˏm&U ׼[p (r%sy<]iP&mO!9*Jڃn)pXq~;I!aRD7U?쀹?ˀ%c˅/Gp%C_%4Bm,0 ܐrW"{]h#E#x^]ycj H,-0=08%I|'T) V ,<Ii*lnc S=Wu9wh:Y8VhQT>Uxi{n1%'h,'3sM3[jeln.ڐDǖ SAB+ (J.ޏaDLc1`LC"V6g;-oefi_ȫ\6⟆Ό\uZ4bRdQw$_m]Ypuؖ.JG`bGm%ZVߖiPh[1foޕMefDFMv[䂫>ݨTC~p|3uX(Cix@*n K^E uwFj *Um Ȋ2yb{ ",WFgiY\K 9ZgD9={(ZL#j7OZY>mQw l5ؑv4y3;ȩ~Yۛ^_]0ha&:I &۟ADBTgMFY\Iherdڬf|ӻ@ L=<9߹%%л2z=Iwbgre%[`J=vo$n#OڣAV)xD{K BI ̶?4=ҿ񵄷'j(;>`;ݕha6o8{o&kˈ ԣ Ol^O-B4idm{0Œı+کlwyj 1rY҆oxwḰ}G3E[H8|:u5njU6'.UɜRI?k:Kws}ڐPp:aU1Ov -v6x>$wVhg|rmۛ 0OS'>l#'9AՍBbzXMtM;p-4j16DS4̲VzOCøYw10U)em4i&+=xqP(3}ʫ2p nH e`autljdo6b)[+?Tlucgd[aM已gut;tRUc bL?ρrB7N֎/mF;awѝ_=Xp[xS7z?ssx l0dX 忛4*Am!<6._q!^PT䇙wEʮB6tJeAKMU`%?FkHmRrbMFֳ삨Sooo 6խ\i!hn׽JłYZSV˱OwK,w# w.r]S%0p1R# ~A -\񪾸8Gcq&y+lxtΙ*Emw6NYwNЙ:N2ܸ5[:Wh1[t3~-Q=\ *sGpq?OgbluXf+mgΝnGK_'טZN*dȄ9U Lwyde|F"xNeõo'a4ގO 752/u^8SO g:g㓝yܒ\QHj&b?>|l4;]da76:4S{bڎ)4+a"^]&xf(zC"kq, x1d1C`Y[{MRdL&mKC )Ր]]|[1YAc&T" {_}X VT&8eXkv_crm4'dyAE E,&BW|u';|3L7U3Y5xTblV K)sDJ&Ue  NRC Lf,&Nd e`%%ppL+2hun7z4!7t*/d)i"2\*^fJ!k ƪPR&,$t>:J.cP{톉& !Y`ij JѴMrm%qTeC DAȁ|J}(] B42(\|5{0߀ċϥN~'A@b nE`~P<:z4k;n-6Z6"IA~ ] 2\'ƥMƱ .+bşۮSN87ٰߟerHDD:&"b\l'h ;%aYUO]ݦ񯺶_ KJ1p7i?b҃_p R@dIDO1>Dv?h-/;RP9(W lj0ʝmw֦ۅx9ϟRλ3E8 QI<#kHh܌:GJ166|J^av.r5@a3C gu[ҵ.`-,v\+'[ŕ|LE`"H;,t' ӧ]fa9Bnb_F`$7D/!Z$ȚmUovuQ%Ւw=-q;Hzyq'2)S)(>:rLƥ<_jhsDJ^. V$Mް\dC X!q%5mx[d|G8*4VFv]C:4sZmgt~O qmfOdIˈhJ'R)Vm+i1z(riHC2FdcKTS7@HY+@N0.[ļ[_̞֊k.ݦmGTWb+v>9r?N.-x[Q-or7ƪ:[-ajC>p?a/;6H:af|=t UxB9^(lеVWa |Tar3/~ll#;&4J6(*"BP6El'oT!0̊b,MY/s~qrAetYЙm&t3o! ʸWu- ~kKΓts,+0%f cM 􈮦^L ny-\W<~͍D森pn=}!wa5fzr6gD2ms4$a)ͱJ*˻ưکfM?qkd.n'ǛL^܊ZE;"0\f^yЧ,%Dl5ɱ^VAA l<Dn(`,&ۛUE 33P@F )t<Y0|o$k_>x['^[45ܮ&K ͺ] "!+8#ffkZt7>h,&GS<2m4p_m2 kRS*ix2oאϢ\m7S6+h tPL@CUj6s}}d/LiV5MbmQ3YSq `b}.z+TGPV(vSD~:{_ӡM-e %;Ξæ}xZwQ8F|JkdC9 "/'U P*5ڡoT•7${kB[,{%`"r=,qWﰉbL.My[ UȆay,n );j+<9}1sI X^{=Z`lQ?^͍[y;XJO| @y%hV!u`6eCxpGԬ ?Qe+aR2v; ȓ.~FTj 6h~Bzl77a6ִrRp,jb54uD,9<퉩^ѨS`۷c$W2nF%U<*F:V $c]3ZJ=@ٲ1f- cU*{ l0W!#pXф)sc2"܈=S *]NԐbP89]{ }&u&vrDckaf|(,Tv,n ( Tma-!9VY)g"PoS޺=5($œt,CFV!+`MМYgɫ bX^4ҍR&Bi2`x sYР@/ѓJ8sYh|2W}ۿR~;S|_U^ȏ/VS uQNg/hܬ0)Tq8Prb -;fEDEU( [NdgލIMpUۥȀTD{UE(Mw1%YbvvQI v\`;l1Z7DZ0J*ԕh 4DBr$6M&"Q".eL9Zdjt3 L\8\WĪ tI9? [t@|o<N)wŸvS t?AVb.d9VX:la:"Msh 50HIoP8[a?Ta/tsXٱl^Bm7("EZt+6 Dß 6˲ιx|$Hljv|j re!\H+JY7Ȉl^ eVmP!-[^l_(úqSmȰo4m{lG&v4l{ ea4[&!yq [={hsdZ?v/5Yz:d˩Sv؉JHlz0@kQK!%=<)%JPBPS Ʊ+w0_wP^(fi`M{.7P)z 5Q.{7|jGi5$~1&,èA( lɦXA5yC蕓Q>;M񴾡h24QaRw-ܸ8 Q%; u@YS)\W8[ !AniM}v J,2Ǐ7C2m6Jf Z1g;@_'k0c< J@ո&jU6 D0;^G7ѱB-wGaʿwEi+}jet .f"ߝɞ I̬w+S0?z Ͽ#. >Ԡll)ѩ fc+LCXQxD<$ VVy*e=j끃X(ydp۰+I !ۘh=X L7-kD1Tz& -9֨?wfF;E $_-wCҜ {*அ'MS(wkjZ5R\THyvL)cnAӄs~KC%;`L@zEaӒ-SPN{T&>@d N?mG̎g d 0!&4Xm5\ĸaa7J"8$6L+;5Ha+ò0"pqٌ d,ךm4%DcdSe)v!o6lĬZ<0#*^ί¨njsj,Fo"T5%cp ^ m ţũF>z^Ha;At |XoR%*&R_5u6:@Z&va6D_ e|om?#I%J^7rTwDz0)DDuW _T6G~Gɓ8e$d@TnL<dEw:[+ˋ?mK"J+[qmƝrJZ`q5J&rLqMzJj_a%L9rNޚ~Qr[~8ZCKtz.dn$[ˏ/̳zdm65 Ԣ |he;NDJQ؎ Bj+l)ok%{"G$b;<6JI|XD/c|~ G)wl1kz'ܒvW b)dʏ vrVj#&z5)= %U(014"S"6hƓ |?̿!gj0m:`>P!p3e8GH׳ NzX+I0TUQk J7llυ,vJl8Y Y򶋜2H$ ʤ|]^9 ~b;*:m>8 ߯n ]%`2m_1U=C+3) 3&ABA~O9i _ee>X{J~2IZo]#;,z\$Cco-1ajkRH4%Ǣbʨ ϱZH5bi2PInhşFe)։7zTXH-mj𹫳H7lNۣ'rpAb CHDS߼S 3*a[:.i騐+ϑc l,POdcLqΫL:[VI'+I~#Q)p=nϛ_2A1mCUDGi( خ-Y۸'SgWR -&2wQJ7 %>ǜZsGS{PU6ڮpD) {j هIΓX**paXqU F}k>ᘦJ+} ) Z$PD+@9 ty0MuRUH%LcE_>8*n ŸHq7hݘ4n#ܥnO M]}螒Ai՞-ș*yu:q`ў'aG6jB^$\ll9HCTR_k00>;WR|<˰? pa GQ|^8/%|kSajk0* drƂ"JbWTG9t|5NSQ%`-!1-j$E%'o!&Z+dSNQ?-.O;Vps'qԭS샹<f.<;2;|TԘ.>j_3 WjrZ;A{I{?mCvgZnq8`@ F^Im Z^1Vxko dziPKacɺxA$ŇZnshk_"n+؜7~!]A{a_$vf1sOgtͧ&ɒ̣/,s|lڏ|i} ~_hrsh/-]e$'w[ɟ;e]ku{0]%|2dkv$1Z봅f$/DCQG?sŬ7~>1nԽ_z3w.16C3mb^7e~Ɠ!cwQ< ~_*z`4[W^TF|=tv7*j߶M7m0Wdz)yƦ.5yI0WfsbH7e~9jy9__w/GKU|&4>fg#~}}֖"%Y>zڎ jssȜnsGGvdFa~^*yVgMv:;.uMn___y/HS쏮6Ƃ5Rggإ~/xddUOk8__섿B4b9F8{!dPt_uߋoy|hw1?n2_5K/m3ۈ]oE~/&;`ط}_;2-4jWdD4K7P3}hX[]l,vAmͱjdJq 6LNh&l ] >y:NcIB# JR,bd5ln|G1n  $ i*~[? bS( #>fh#'q:I;Hnd )DG"Jc[hNfPh+Tɑ&Oe։j q3DWzmg4]kFʺ[m=hoΨOeLmF1~}ʧ $͝ BRzb̰t &\M2׽Q1 ]KhanԴR:B_[]33@&A5ɉ\䱫vFyOTc?aRg_AgB&J[F_p+Uh$ꊺEh] w!i G 1m3:?]Jser_M$;.↳&HpfBD{ޟI `b^D)x,8`f )T IA]3ސ!=wMQraAR@4n6J`cvמ۾hmg<ɓVJ+HX+]=ukV_@3Z Be)6:r+'O=eb1auDl|͠+ dVRf6"hKARqcK<:\[J&G\:Aokzx R-dHpe~of鰣_9V/zrK*j&5Z3s9wǩR2,\iǦ;zN~P~cr?fHG}5#٦QuU r e)Wj*@ Ȝ>7I! P<(B9כ0=RpUru T2fnў8w!̰jRU}hP)]_A(@g]*%ĵ4ΥjΑHzYVk|(O7'l[5*ᘋw`R^z{nCD?q 3(i (#"1j#ة; ̩ds 1^ , ;c/Tf+uP$mEӾ^ajY%?֐>vUc)9kp5yK (AȺ#<;&ZLV_KAѭ{qB"t!%IBZb0YXċKXЍ}1\eQv( q%ULiK OM hٳ>5?~Lk l/bduL0LArb$1z '?wH0D1 Kt K h+QeY5 44(ާ5f\GwiGx7ý<\[/ P뢿]ni9+%&&ђ{|'?naz?#ֲft=g,gkB;.磣hy)/r_rJϖIAg/  #o`0!@k0LgY\-EDi/7ud?fg=k<8z|ۮ{`{ OA!<{aq^͟dۓq~lXgF${ rTJ #$|FO+WC*򩝹*y.8r\zgG@j|4Mѱ`C-e9[/9<*-&v\΅qs(v)Zg ڃ.IśxoyqE8(O-?<9GUoQ5M':˯pBʽSNFz .&O˩N*6 Ϣc8a'<`n(a*Gqbd:ʣX uJ)ʅvUX᧖y,Ty_@?tlĐA#CHG^F sύB#yϪ(UUBZf=,=`+T@ˮt݉x A6 Ns>~Em$Ap  U${G9e lE'[2Eٽ 3}U 8;x-u:BXCj6Pv[a%oŞ \{;k\ Q;lWTħ =*R+3EG0#1 vwtyAV" D!rR0Lb < ʀEל5܇=? 4҇KAZ_>b|1+]O`QdpYC;II]aJA+7[ @R6 8'NzW(Z6 C괽n֠ıRQFPKo[[8N9Hd2"h,Mn[H$3Orz,OKbH"|!ŋ% !6n*5esxR^7Ƽ>Oj?MRyKB&@qӉl]uk=4m:7DeeW$RiUzN1F[v#؞@,Ǚ)q0m qO7xCÒ\j)zj ^ r7UQDn֮",VC7lJf ].יּE{/*˰!7u`K bt^IJ[:w. ˣd@B8qY<)jk vҬAwp8*9zZ"0BljiI0gz*m^5ck51BeZhG]%di'2X\2\T)M` ,Q2dd'!8DԻ<67RFvfR`! YBt"!҄!3jȍ; D&"!?KFJa۞ yi*#qTt=i >JC `骣\rt(1/F6f񙛠͕~`fa]Xyx496LOoN^/@Ɍf,aWrc ;x,d)ie٢Tg "oQ  IV&="qh"iutsxoqDt%m$j$7InjE-`pq!Z@>I}_x{#I=ZGp2 s.E:G"XOD)h hP$ [ T!^on If{ULOYe,YfZh U:2ΫW1!I(EmV&~5 v6RFĕ <.7~}Z0QkQDRg Jҵqt3SzIfG#%RWhDt[,&ǵz`W6$"!I BB߷m.-43 \+^eֱ!5>0:O-63%Z7YwtuxkKm o%"TNp3^E:8wgaI&v[{1 1f7\h@]dk+ihֹYlIz 5d3j[Oͫ96b? gر`vU^}^ʚڍ ֙3ぷb<\[n,w\WFt8-LDnvEK-v.9nIJh{uaw%z%DTMi$D$_)0Pn^nQiv%O Cg[(rT\y81rAۀޅTD*ѽڻHTlɴ] /7pm?s:. PEJs6B̲նzFM:fvZ;:5\e%=vqqHd-\Ie:3U\'7@#(2N)"*=-Ϡ'E^xbw:2+kJ(O#*eRI>Xo[ZqiVKuIZ@=ͨr7.A BfFRDij)td&5P@uDtAO>IK(Gf,-e]i"',͵|G`HW^6Ȫ+K(ӄj]42ejFc/tod&6z>)i{^r`"b~KDɔ,e)KY${RpdIENDB`Pygments-2.2.0/doc/docs/0000755000175000017500000000000013041220507014064 5ustar piotrpiotrPygments-2.2.0/doc/docs/filterdevelopment.rst0000644000175000017500000000453113041166700020355 0ustar piotrpiotr.. -*- mode: rst -*- ===================== Write your own filter ===================== .. versionadded:: 0.7 Writing own filters is very easy. All you have to do is to subclass the `Filter` class and override the `filter` method. Additionally a filter is instantiated with some keyword arguments you can use to adjust the behavior of your filter. Subclassing Filters =================== As an example, we write a filter that converts all `Name.Function` tokens to normal `Name` tokens to make the output less colorful. .. sourcecode:: python from pygments.util import get_bool_opt from pygments.token import Name from pygments.filter import Filter class UncolorFilter(Filter): def __init__(self, **options): Filter.__init__(self, **options) self.class_too = get_bool_opt(options, 'classtoo') def filter(self, lexer, stream): for ttype, value in stream: if ttype is Name.Function or (self.class_too and ttype is Name.Class): ttype = Name yield ttype, value Some notes on the `lexer` argument: that can be quite confusing since it doesn't need to be a lexer instance. If a filter was added by using the `add_filter()` function of lexers, that lexer is registered for the filter. In that case `lexer` will refer to the lexer that has registered the filter. It *can* be used to access options passed to a lexer. Because it could be `None` you always have to check for that case if you access it. Using a decorator ================= You can also use the `simplefilter` decorator from the `pygments.filter` module: .. sourcecode:: python from pygments.util import get_bool_opt from pygments.token import Name from pygments.filter import simplefilter @simplefilter def uncolor(self, lexer, stream, options): class_too = get_bool_opt(options, 'classtoo') for ttype, value in stream: if ttype is Name.Function or (class_too and ttype is Name.Class): ttype = Name yield ttype, value The decorator automatically subclasses an internal filter class and uses the decorated function as a method for filtering. (That's why there is a `self` argument that you probably won't end up using in the method.) Pygments-2.2.0/doc/docs/formatterdevelopment.rst0000644000175000017500000001404713041166700021076 0ustar piotrpiotr.. -*- mode: rst -*- ======================== Write your own formatter ======================== As well as creating :doc:`your own lexer `, writing a new formatter for Pygments is easy and straightforward. A formatter is a class that is initialized with some keyword arguments (the formatter options) and that must provides a `format()` method. Additionally a formatter should provide a `get_style_defs()` method that returns the style definitions from the style in a form usable for the formatter's output format. Quickstart ========== The most basic formatter shipped with Pygments is the `NullFormatter`. It just sends the value of a token to the output stream: .. sourcecode:: python from pygments.formatter import Formatter class NullFormatter(Formatter): def format(self, tokensource, outfile): for ttype, value in tokensource: outfile.write(value) As you can see, the `format()` method is passed two parameters: `tokensource` and `outfile`. The first is an iterable of ``(token_type, value)`` tuples, the latter a file like object with a `write()` method. Because the formatter is that basic it doesn't overwrite the `get_style_defs()` method. Styles ====== Styles aren't instantiated but their metaclass provides some class functions so that you can access the style definitions easily. Styles are iterable and yield tuples in the form ``(ttype, d)`` where `ttype` is a token and `d` is a dict with the following keys: ``'color'`` Hexadecimal color value (eg: ``'ff0000'`` for red) or `None` if not defined. ``'bold'`` `True` if the value should be bold ``'italic'`` `True` if the value should be italic ``'underline'`` `True` if the value should be underlined ``'bgcolor'`` Hexadecimal color value for the background (eg: ``'eeeeeee'`` for light gray) or `None` if not defined. ``'border'`` Hexadecimal color value for the border (eg: ``'0000aa'`` for a dark blue) or `None` for no border. Additional keys might appear in the future, formatters should ignore all keys they don't support. HTML 3.2 Formatter ================== For an more complex example, let's implement a HTML 3.2 Formatter. We don't use CSS but inline markup (````, ````, etc). Because this isn't good style this formatter isn't in the standard library ;-) .. sourcecode:: python from pygments.formatter import Formatter class OldHtmlFormatter(Formatter): def __init__(self, **options): Formatter.__init__(self, **options) # create a dict of (start, end) tuples that wrap the # value of a token so that we can use it in the format # method later self.styles = {} # we iterate over the `_styles` attribute of a style item # that contains the parsed style values. for token, style in self.style: start = end = '' # a style item is a tuple in the following form: # colors are readily specified in hex: 'RRGGBB' if style['color']: start += '' % style['color'] end = '' + end if style['bold']: start += '' end = '' + end if style['italic']: start += '' end = '' + end if style['underline']: start += '' end = '' + end self.styles[token] = (start, end) def format(self, tokensource, outfile): # lastval is a string we use for caching # because it's possible that an lexer yields a number # of consecutive tokens with the same token type. # to minimize the size of the generated html markup we # try to join the values of same-type tokens here lastval = '' lasttype = None # wrap the whole output with
            outfile.write('
')

            for ttype, value in tokensource:
                # if the token type doesn't exist in the stylemap
                # we try it with the parent of the token type
                # eg: parent of Token.Literal.String.Double is
                # Token.Literal.String
                while ttype not in self.styles:
                    ttype = ttype.parent
                if ttype == lasttype:
                    # the current token type is the same of the last
                    # iteration. cache it
                    lastval += value
                else:
                    # not the same token as last iteration, but we
                    # have some data in the buffer. wrap it with the
                    # defined style and write it to the output file
                    if lastval:
                        stylebegin, styleend = self.styles[lasttype]
                        outfile.write(stylebegin + lastval + styleend)
                    # set lastval/lasttype to current values
                    lastval = value
                    lasttype = ttype

            # if something is left in the buffer, write it to the
            # output file, then close the opened 
 tag
            if lastval:
                stylebegin, styleend = self.styles[lasttype]
                outfile.write(stylebegin + lastval + styleend)
            outfile.write('
\n') The comments should explain it. Again, this formatter doesn't override the `get_style_defs()` method. If we would have used CSS classes instead of inline HTML markup, we would need to generate the CSS first. For that purpose the `get_style_defs()` method exists: Generating Style Definitions ============================ Some formatters like the `LatexFormatter` and the `HtmlFormatter` don't output inline markup but reference either macros or css classes. Because the definitions of those are not part of the output, the `get_style_defs()` method exists. It is passed one parameter (if it's used and how it's used is up to the formatter) and has to return a string or ``None``. Pygments-2.2.0/doc/docs/api.rst0000644000175000017500000002723513041216654015410 0ustar piotrpiotr.. -*- mode: rst -*- ===================== The full Pygments API ===================== This page describes the Pygments API. High-level API ============== .. module:: pygments Functions from the :mod:`pygments` module: .. function:: lex(code, lexer) Lex `code` with the `lexer` (must be a `Lexer` instance) and return an iterable of tokens. Currently, this only calls `lexer.get_tokens()`. .. function:: format(tokens, formatter, outfile=None) Format a token stream (iterable of tokens) `tokens` with the `formatter` (must be a `Formatter` instance). The result is written to `outfile`, or if that is ``None``, returned as a string. .. function:: highlight(code, lexer, formatter, outfile=None) This is the most high-level highlighting function. It combines `lex` and `format` in one function. .. module:: pygments.lexers Functions from :mod:`pygments.lexers`: .. function:: get_lexer_by_name(alias, **options) Return an instance of a `Lexer` subclass that has `alias` in its aliases list. The lexer is given the `options` at its instantiation. Will raise :exc:`pygments.util.ClassNotFound` if no lexer with that alias is found. .. function:: get_lexer_for_filename(fn, **options) Return a `Lexer` subclass instance that has a filename pattern matching `fn`. The lexer is given the `options` at its instantiation. Will raise :exc:`pygments.util.ClassNotFound` if no lexer for that filename is found. .. function:: get_lexer_for_mimetype(mime, **options) Return a `Lexer` subclass instance that has `mime` in its mimetype list. The lexer is given the `options` at its instantiation. Will raise :exc:`pygments.util.ClassNotFound` if not lexer for that mimetype is found. .. function:: load_lexer_from_file(filename, lexername="CustomLexer", **options) Return a `Lexer` subclass instance loaded from the provided file, relative to the current directory. The file is expected to contain a Lexer class named `lexername` (by default, CustomLexer). Users should be very careful with the input, because this method is equivalent to running eval on the input file. The lexer is given the `options` at its instantiation. :exc:`ClassNotFound` is raised if there are any errors loading the Lexer .. versionadded:: 2.2 .. function:: guess_lexer(text, **options) Return a `Lexer` subclass instance that's guessed from the text in `text`. For that, the :meth:`.analyse_text()` method of every known lexer class is called with the text as argument, and the lexer which returned the highest value will be instantiated and returned. :exc:`pygments.util.ClassNotFound` is raised if no lexer thinks it can handle the content. .. function:: guess_lexer_for_filename(filename, text, **options) As :func:`guess_lexer()`, but only lexers which have a pattern in `filenames` or `alias_filenames` that matches `filename` are taken into consideration. :exc:`pygments.util.ClassNotFound` is raised if no lexer thinks it can handle the content. .. function:: get_all_lexers() Return an iterable over all registered lexers, yielding tuples in the format:: (longname, tuple of aliases, tuple of filename patterns, tuple of mimetypes) .. versionadded:: 0.6 .. function:: find_lexer_class_by_name(alias) Return the `Lexer` subclass that has `alias` in its aliases list, without instantiating it. Will raise :exc:`pygments.util.ClassNotFound` if no lexer with that alias is found. .. versionadded:: 2.2 .. function:: find_lexer_class(name) Return the `Lexer` subclass that with the *name* attribute as given by the *name* argument. .. module:: pygments.formatters Functions from :mod:`pygments.formatters`: .. function:: get_formatter_by_name(alias, **options) Return an instance of a :class:`.Formatter` subclass that has `alias` in its aliases list. The formatter is given the `options` at its instantiation. Will raise :exc:`pygments.util.ClassNotFound` if no formatter with that alias is found. .. function:: get_formatter_for_filename(fn, **options) Return a :class:`.Formatter` subclass instance that has a filename pattern matching `fn`. The formatter is given the `options` at its instantiation. Will raise :exc:`pygments.util.ClassNotFound` if no formatter for that filename is found. .. function:: load_formatter_from_file(filename, formattername="CustomFormatter", **options) Return a `Formatter` subclass instance loaded from the provided file, relative to the current directory. The file is expected to contain a Formatter class named ``formattername`` (by default, CustomFormatter). Users should be very careful with the input, because this method is equivalent to running eval on the input file. The formatter is given the `options` at its instantiation. :exc:`ClassNotFound` is raised if there are any errors loading the Formatter .. versionadded:: 2.2 .. module:: pygments.styles Functions from :mod:`pygments.styles`: .. function:: get_style_by_name(name) Return a style class by its short name. The names of the builtin styles are listed in :data:`pygments.styles.STYLE_MAP`. Will raise :exc:`pygments.util.ClassNotFound` if no style of that name is found. .. function:: get_all_styles() Return an iterable over all registered styles, yielding their names. .. versionadded:: 0.6 .. module:: pygments.lexer Lexers ====== The base lexer class from which all lexers are derived is: .. class:: Lexer(**options) The constructor takes a \*\*keywords dictionary of options. Every subclass must first process its own options and then call the `Lexer` constructor, since it processes the `stripnl`, `stripall` and `tabsize` options. An example looks like this: .. sourcecode:: python def __init__(self, **options): self.compress = options.get('compress', '') Lexer.__init__(self, **options) As these options must all be specifiable as strings (due to the command line usage), there are various utility functions available to help with that, see `Option processing`_. .. method:: get_tokens(text) This method is the basic interface of a lexer. It is called by the `highlight()` function. It must process the text and return an iterable of ``(tokentype, value)`` pairs from `text`. Normally, you don't need to override this method. The default implementation processes the `stripnl`, `stripall` and `tabsize` options and then yields all tokens from `get_tokens_unprocessed()`, with the ``index`` dropped. .. method:: get_tokens_unprocessed(text) This method should process the text and return an iterable of ``(index, tokentype, value)`` tuples where ``index`` is the starting position of the token within the input text. This method must be overridden by subclasses. .. staticmethod:: analyse_text(text) A static method which is called for lexer guessing. It should analyse the text and return a float in the range from ``0.0`` to ``1.0``. If it returns ``0.0``, the lexer will not be selected as the most probable one, if it returns ``1.0``, it will be selected immediately. .. note:: You don't have to add ``@staticmethod`` to the definition of this method, this will be taken care of by the Lexer's metaclass. For a list of known tokens have a look at the :doc:`tokens` page. A lexer also can have the following attributes (in fact, they are mandatory except `alias_filenames`) that are used by the builtin lookup mechanism. .. attribute:: name Full name for the lexer, in human-readable form. .. attribute:: aliases A list of short, unique identifiers that can be used to lookup the lexer from a list, e.g. using `get_lexer_by_name()`. .. attribute:: filenames A list of `fnmatch` patterns that match filenames which contain content for this lexer. The patterns in this list should be unique among all lexers. .. attribute:: alias_filenames A list of `fnmatch` patterns that match filenames which may or may not contain content for this lexer. This list is used by the :func:`.guess_lexer_for_filename()` function, to determine which lexers are then included in guessing the correct one. That means that e.g. every lexer for HTML and a template language should include ``\*.html`` in this list. .. attribute:: mimetypes A list of MIME types for content that can be lexed with this lexer. .. module:: pygments.formatter Formatters ========== A formatter is derived from this class: .. class:: Formatter(**options) As with lexers, this constructor processes options and then must call the base class :meth:`__init__`. The :class:`Formatter` class recognizes the options `style`, `full` and `title`. It is up to the formatter class whether it uses them. .. method:: get_style_defs(arg='') This method must return statements or declarations suitable to define the current style for subsequent highlighted text (e.g. CSS classes in the `HTMLFormatter`). The optional argument `arg` can be used to modify the generation and is formatter dependent (it is standardized because it can be given on the command line). This method is called by the ``-S`` :doc:`command-line option `, the `arg` is then given by the ``-a`` option. .. method:: format(tokensource, outfile) This method must format the tokens from the `tokensource` iterable and write the formatted version to the file object `outfile`. Formatter options can control how exactly the tokens are converted. .. versionadded:: 0.7 A formatter must have the following attributes that are used by the builtin lookup mechanism. .. attribute:: name Full name for the formatter, in human-readable form. .. attribute:: aliases A list of short, unique identifiers that can be used to lookup the formatter from a list, e.g. using :func:`.get_formatter_by_name()`. .. attribute:: filenames A list of :mod:`fnmatch` patterns that match filenames for which this formatter can produce output. The patterns in this list should be unique among all formatters. .. module:: pygments.util Option processing ================= The :mod:`pygments.util` module has some utility functions usable for option processing: .. exception:: OptionError This exception will be raised by all option processing functions if the type or value of the argument is not correct. .. function:: get_bool_opt(options, optname, default=None) Interpret the key `optname` from the dictionary `options` as a boolean and return it. Return `default` if `optname` is not in `options`. The valid string values for ``True`` are ``1``, ``yes``, ``true`` and ``on``, the ones for ``False`` are ``0``, ``no``, ``false`` and ``off`` (matched case-insensitively). .. function:: get_int_opt(options, optname, default=None) As :func:`get_bool_opt`, but interpret the value as an integer. .. function:: get_list_opt(options, optname, default=None) If the key `optname` from the dictionary `options` is a string, split it at whitespace and return it. If it is already a list or a tuple, it is returned as a list. .. function:: get_choice_opt(options, optname, allowed, default=None) If the key `optname` from the dictionary is not in the sequence `allowed`, raise an error, otherwise return it. .. versionadded:: 0.8 Pygments-2.2.0/doc/docs/tokens.rst0000644000175000017500000002465313041166700016137 0ustar piotrpiotr.. -*- mode: rst -*- ============== Builtin Tokens ============== .. module:: pygments.token In the :mod:`pygments.token` module, there is a special object called `Token` that is used to create token types. You can create a new token type by accessing an attribute of `Token`: .. sourcecode:: pycon >>> from pygments.token import Token >>> Token.String Token.String >>> Token.String is Token.String True Note that tokens are singletons so you can use the ``is`` operator for comparing token types. As of Pygments 0.7 you can also use the ``in`` operator to perform set tests: .. sourcecode:: pycon >>> from pygments.token import Comment >>> Comment.Single in Comment True >>> Comment in Comment.Multi False This can be useful in :doc:`filters ` and if you write lexers on your own without using the base lexers. You can also split a token type into a hierarchy, and get the parent of it: .. sourcecode:: pycon >>> String.split() [Token, Token.Literal, Token.Literal.String] >>> String.parent Token.Literal In principle, you can create an unlimited number of token types but nobody can guarantee that a style would define style rules for a token type. Because of that, Pygments proposes some global token types defined in the `pygments.token.STANDARD_TYPES` dict. For some tokens aliases are already defined: .. sourcecode:: pycon >>> from pygments.token import String >>> String Token.Literal.String Inside the :mod:`pygments.token` module the following aliases are defined: ============= ============================ ==================================== `Text` `Token.Text` for any type of text data `Whitespace` `Token.Text.Whitespace` for specially highlighted whitespace `Error` `Token.Error` represents lexer errors `Other` `Token.Other` special token for data not matched by a parser (e.g. HTML markup in PHP code) `Keyword` `Token.Keyword` any kind of keywords `Name` `Token.Name` variable/function names `Literal` `Token.Literal` Any literals `String` `Token.Literal.String` string literals `Number` `Token.Literal.Number` number literals `Operator` `Token.Operator` operators (``+``, ``not``...) `Punctuation` `Token.Punctuation` punctuation (``[``, ``(``...) `Comment` `Token.Comment` any kind of comments `Generic` `Token.Generic` generic tokens (have a look at the explanation below) ============= ============================ ==================================== The `Whitespace` token type is new in Pygments 0.8. It is used only by the `VisibleWhitespaceFilter` currently. Normally you just create token types using the already defined aliases. For each of those token aliases, a number of subtypes exists (excluding the special tokens `Token.Text`, `Token.Error` and `Token.Other`) The `is_token_subtype()` function in the `pygments.token` module can be used to test if a token type is a subtype of another (such as `Name.Tag` and `Name`). (This is the same as ``Name.Tag in Name``. The overloaded `in` operator was newly introduced in Pygments 0.7, the function still exists for backwards compatibility.) With Pygments 0.7, it's also possible to convert strings to token types (for example if you want to supply a token from the command line): .. sourcecode:: pycon >>> from pygments.token import String, string_to_tokentype >>> string_to_tokentype("String") Token.Literal.String >>> string_to_tokentype("Token.Literal.String") Token.Literal.String >>> string_to_tokentype(String) Token.Literal.String Keyword Tokens ============== `Keyword` For any kind of keyword (especially if it doesn't match any of the subtypes of course). `Keyword.Constant` For keywords that are constants (e.g. ``None`` in future Python versions). `Keyword.Declaration` For keywords used for variable declaration (e.g. ``var`` in some programming languages like JavaScript). `Keyword.Namespace` For keywords used for namespace declarations (e.g. ``import`` in Python and Java and ``package`` in Java). `Keyword.Pseudo` For keywords that aren't really keywords (e.g. ``None`` in old Python versions). `Keyword.Reserved` For reserved keywords. `Keyword.Type` For builtin types that can't be used as identifiers (e.g. ``int``, ``char`` etc. in C). Name Tokens =========== `Name` For any name (variable names, function names, classes). `Name.Attribute` For all attributes (e.g. in HTML tags). `Name.Builtin` Builtin names; names that are available in the global namespace. `Name.Builtin.Pseudo` Builtin names that are implicit (e.g. ``self`` in Ruby, ``this`` in Java). `Name.Class` Class names. Because no lexer can know if a name is a class or a function or something else this token is meant for class declarations. `Name.Constant` Token type for constants. In some languages you can recognise a token by the way it's defined (the value after a ``const`` keyword for example). In other languages constants are uppercase by definition (Ruby). `Name.Decorator` Token type for decorators. Decorators are syntactic elements in the Python language. Similar syntax elements exist in C# and Java. `Name.Entity` Token type for special entities. (e.g. `` `` in HTML). `Name.Exception` Token type for exception names (e.g. ``RuntimeError`` in Python). Some languages define exceptions in the function signature (Java). You can highlight the name of that exception using this token then. `Name.Function` Token type for function names. `Name.Function.Magic` same as `Name.Function` but for special function names that have an implicit use in a language (e.g. ``__init__`` method in Python). `Name.Label` Token type for label names (e.g. in languages that support ``goto``). `Name.Namespace` Token type for namespaces. (e.g. import paths in Java/Python), names following the ``module``/``namespace`` keyword in other languages. `Name.Other` Other names. Normally unused. `Name.Tag` Tag names (in HTML/XML markup or configuration files). `Name.Variable` Token type for variables. Some languages have prefixes for variable names (PHP, Ruby, Perl). You can highlight them using this token. `Name.Variable.Class` same as `Name.Variable` but for class variables (also static variables). `Name.Variable.Global` same as `Name.Variable` but for global variables (used in Ruby, for example). `Name.Variable.Instance` same as `Name.Variable` but for instance variables. `Name.Variable.Magic` same as `Name.Variable` but for special variable names that have an implicit use in a language (e.g. ``__doc__`` in Python). Literals ======== `Literal` For any literal (if not further defined). `Literal.Date` for date literals (e.g. ``42d`` in Boo). `String` For any string literal. `String.Affix` Token type for affixes that further specify the type of the string they're attached to (e.g. the prefixes ``r`` and ``u8`` in ``r"foo"`` and ``u8"foo"``). `String.Backtick` Token type for strings enclosed in backticks. `String.Char` Token type for single characters (e.g. Java, C). `String.Delimiter` Token type for delimiting identifiers in "heredoc", raw and other similar strings (e.g. the word ``END`` in Perl code ``print <<'END';``). `String.Doc` Token type for documentation strings (for example Python). `String.Double` Double quoted strings. `String.Escape` Token type for escape sequences in strings. `String.Heredoc` Token type for "heredoc" strings (e.g. in Ruby or Perl). `String.Interpol` Token type for interpolated parts in strings (e.g. ``#{foo}`` in Ruby). `String.Other` Token type for any other strings (for example ``%q{foo}`` string constructs in Ruby). `String.Regex` Token type for regular expression literals (e.g. ``/foo/`` in JavaScript). `String.Single` Token type for single quoted strings. `String.Symbol` Token type for symbols (e.g. ``:foo`` in LISP or Ruby). `Number` Token type for any number literal. `Number.Bin` Token type for binary literals (e.g. ``0b101010``). `Number.Float` Token type for float literals (e.g. ``42.0``). `Number.Hex` Token type for hexadecimal number literals (e.g. ``0xdeadbeef``). `Number.Integer` Token type for integer literals (e.g. ``42``). `Number.Integer.Long` Token type for long integer literals (e.g. ``42L`` in Python). `Number.Oct` Token type for octal literals. Operators ========= `Operator` For any punctuation operator (e.g. ``+``, ``-``). `Operator.Word` For any operator that is a word (e.g. ``not``). Punctuation =========== .. versionadded:: 0.7 `Punctuation` For any punctuation which is not an operator (e.g. ``[``, ``(``...) Comments ======== `Comment` Token type for any comment. `Comment.Hashbang` Token type for hashbang comments (i.e. first lines of files that start with ``#!``). `Comment.Multiline` Token type for multiline comments. `Comment.Preproc` Token type for preprocessor comments (also ``` for info on how to contact the team. .. XXX You can download an offline version of this documentation from the :doc:`download page `. Pygments-2.2.0/doc/docs/rstdirective.rst0000644000175000017500000000155113041166700017333 0ustar piotrpiotr.. -*- mode: rst -*- ================================ Using Pygments in ReST documents ================================ Many Python people use `ReST`_ for documentation their sourcecode, programs, scripts et cetera. This also means that documentation often includes sourcecode samples or snippets. You can easily enable Pygments support for your ReST texts using a custom directive -- this is also how this documentation displays source code. From Pygments 0.9, the directive is shipped in the distribution as `external/rst-directive.py`. You can copy and adapt this code to your liking. .. removed -- too confusing *Loosely related note:* The ReST lexer now recognizes ``.. sourcecode::`` and ``.. code::`` directives and highlights the contents in the specified language if the `handlecodeblocks` option is true. .. _ReST: http://docutils.sf.net/rst.html Pygments-2.2.0/doc/docs/formatters.rst0000644000175000017500000000312013041166700017004 0ustar piotrpiotr.. -*- mode: rst -*- ==================== Available formatters ==================== This page lists all builtin formatters. Common options ============== All formatters support these options: `encoding` If given, must be an encoding name (such as ``"utf-8"``). This will be used to convert the token strings (which are Unicode strings) to byte strings in the output (default: ``None``). It will also be written in an encoding declaration suitable for the document format if the `full` option is given (e.g. a ``meta content-type`` directive in HTML or an invocation of the `inputenc` package in LaTeX). If this is ``""`` or ``None``, Unicode strings will be written to the output file, which most file-like objects do not support. For example, `pygments.highlight()` will return a Unicode string if called with no `outfile` argument and a formatter that has `encoding` set to ``None`` because it uses a `StringIO.StringIO` object that supports Unicode arguments to `write()`. Using a regular file object wouldn't work. .. versionadded:: 0.6 `outencoding` When using Pygments from the command line, any `encoding` option given is passed to the lexer and the formatter. This is sometimes not desirable, for example if you want to set the input encoding to ``"guess"``. Therefore, `outencoding` has been introduced which overrides `encoding` for the formatter if given. .. versionadded:: 0.7 Formatter classes ================= All these classes are importable from :mod:`pygments.formatters`. .. pygmentsdoc:: formatters Pygments-2.2.0/doc/docs/cmdline.rst0000644000175000017500000001300113041216654016234 0ustar piotrpiotr.. -*- mode: rst -*- ====================== Command Line Interface ====================== You can use Pygments from the shell, provided you installed the :program:`pygmentize` script:: $ pygmentize test.py print "Hello World" will print the file test.py to standard output, using the Python lexer (inferred from the file name extension) and the terminal formatter (because you didn't give an explicit formatter name). If you want HTML output:: $ pygmentize -f html -l python -o test.html test.py As you can see, the -l option explicitly selects a lexer. As seen above, if you give an input file name and it has an extension that Pygments recognizes, you can omit this option. The ``-o`` option gives an output file name. If it is not given, output is written to stdout. The ``-f`` option selects a formatter (as with ``-l``, it can also be omitted if an output file name is given and has a supported extension). If no output file name is given and ``-f`` is omitted, the :class:`.TerminalFormatter` is used. The above command could therefore also be given as:: $ pygmentize -o test.html test.py To create a full HTML document, including line numbers and stylesheet (using the "emacs" style), highlighting the Python file ``test.py`` to ``test.html``:: $ pygmentize -O full,style=emacs -o test.html test.py Options and filters ------------------- Lexer and formatter options can be given using the ``-O`` option:: $ pygmentize -f html -O style=colorful,linenos=1 -l python test.py Be sure to enclose the option string in quotes if it contains any special shell characters, such as spaces or expansion wildcards like ``*``. If an option expects a list value, separate the list entries with spaces (you'll have to quote the option value in this case too, so that the shell doesn't split it). Since the ``-O`` option argument is split at commas and expects the split values to be of the form ``name=value``, you can't give an option value that contains commas or equals signs. Therefore, an option ``-P`` is provided (as of Pygments 0.9) that works like ``-O`` but can only pass one option per ``-P``. Its value can then contain all characters:: $ pygmentize -P "heading=Pygments, the Python highlighter" ... Filters are added to the token stream using the ``-F`` option:: $ pygmentize -f html -l pascal -F keywordcase:case=upper main.pas As you see, options for the filter are given after a colon. As for ``-O``, the filter name and options must be one shell word, so there may not be any spaces around the colon. Generating styles ----------------- Formatters normally don't output full style information. For example, the HTML formatter by default only outputs ```` tags with ``class`` attributes. Therefore, there's a special ``-S`` option for generating style definitions. Usage is as follows:: $ pygmentize -f html -S colorful -a .syntax generates a CSS style sheet (because you selected the HTML formatter) for the "colorful" style prepending a ".syntax" selector to all style rules. For an explanation what ``-a`` means for :doc:`a particular formatter `, look for the `arg` argument for the formatter's :meth:`.get_style_defs()` method. Getting lexer names ------------------- .. versionadded:: 1.0 The ``-N`` option guesses a lexer name for a given filename, so that :: $ pygmentize -N setup.py will print out ``python``. It won't highlight anything yet. If no specific lexer is known for that filename, ``text`` is printed. Custom Lexers and Formatters ---------------------------- .. versionadded:: 2.2 The ``-x`` flag enables custom lexers and formatters to be loaded from files relative to the current directory. Create a file with a class named CustomLexer or CustomFormatter, then specify it on the command line:: $ pygmentize -l your_lexer.py -f your_formatter.py -x You can also specify the name of your class with a colon:: $ pygmentize -l your_lexer.py:SomeLexer -x For more information, see :doc:`the Pygments documentation on Lexer development `. Getting help ------------ The ``-L`` option lists lexers, formatters, along with their short names and supported file name extensions, styles and filters. If you want to see only one category, give it as an argument:: $ pygmentize -L filters will list only all installed filters. The ``-H`` option will give you detailed information (the same that can be found in this documentation) about a lexer, formatter or filter. Usage is as follows:: $ pygmentize -H formatter html will print the help for the HTML formatter, while :: $ pygmentize -H lexer python will print the help for the Python lexer, etc. A note on encodings ------------------- .. versionadded:: 0.9 Pygments tries to be smart regarding encodings in the formatting process: * If you give an ``encoding`` option, it will be used as the input and output encoding. * If you give an ``outencoding`` option, it will override ``encoding`` as the output encoding. * If you give an ``inencoding`` option, it will override ``encoding`` as the input encoding. * If you don't give an encoding and have given an output file, the default encoding for lexer and formatter is the terminal encoding or the default locale encoding of the system. As a last resort, ``latin1`` is used (which will pass through all non-ASCII characters). * If you don't give an encoding and haven't given an output file (that means output is written to the console), the default encoding for lexer and formatter is the terminal encoding (``sys.stdout.encoding``). Pygments-2.2.0/doc/docs/lexerdevelopment.rst0000644000175000017500000006610613041216654020221 0ustar piotrpiotr.. -*- mode: rst -*- .. highlight:: python ==================== Write your own lexer ==================== If a lexer for your favorite language is missing in the Pygments package, you can easily write your own and extend Pygments. All you need can be found inside the :mod:`pygments.lexer` module. As you can read in the :doc:`API documentation `, a lexer is a class that is initialized with some keyword arguments (the lexer options) and that provides a :meth:`.get_tokens_unprocessed()` method which is given a string or unicode object with the data to lex. The :meth:`.get_tokens_unprocessed()` method must return an iterator or iterable containing tuples in the form ``(index, token, value)``. Normally you don't need to do this since there are base lexers that do most of the work and that you can subclass. RegexLexer ========== The lexer base class used by almost all of Pygments' lexers is the :class:`RegexLexer`. This class allows you to define lexing rules in terms of *regular expressions* for different *states*. States are groups of regular expressions that are matched against the input string at the *current position*. If one of these expressions matches, a corresponding action is performed (such as yielding a token with a specific type, or changing state), the current position is set to where the last match ended and the matching process continues with the first regex of the current state. Lexer states are kept on a stack: each time a new state is entered, the new state is pushed onto the stack. The most basic lexers (like the `DiffLexer`) just need one state. Each state is defined as a list of tuples in the form (`regex`, `action`, `new_state`) where the last item is optional. In the most basic form, `action` is a token type (like `Name.Builtin`). That means: When `regex` matches, emit a token with the match text and type `tokentype` and push `new_state` on the state stack. If the new state is ``'#pop'``, the topmost state is popped from the stack instead. To pop more than one state, use ``'#pop:2'`` and so on. ``'#push'`` is a synonym for pushing the current state on the stack. The following example shows the `DiffLexer` from the builtin lexers. Note that it contains some additional attributes `name`, `aliases` and `filenames` which aren't required for a lexer. They are used by the builtin lexer lookup functions. :: from pygments.lexer import RegexLexer from pygments.token import * class DiffLexer(RegexLexer): name = 'Diff' aliases = ['diff'] filenames = ['*.diff'] tokens = { 'root': [ (r' .*\n', Text), (r'\+.*\n', Generic.Inserted), (r'-.*\n', Generic.Deleted), (r'@.*\n', Generic.Subheading), (r'Index.*\n', Generic.Heading), (r'=.*\n', Generic.Heading), (r'.*\n', Text), ] } As you can see this lexer only uses one state. When the lexer starts scanning the text, it first checks if the current character is a space. If this is true it scans everything until newline and returns the data as a `Text` token (which is the "no special highlighting" token). If this rule doesn't match, it checks if the current char is a plus sign. And so on. If no rule matches at the current position, the current char is emitted as an `Error` token that indicates a lexing error, and the position is increased by one. Adding and testing a new lexer ============================== The easiest way to use a new lexer is to use Pygments' support for loading the lexer from a file relative to your current directory. First, change the name of your lexer class to CustomLexer: .. code-block:: python from pygments.lexer import RegexLexer from pygments.token import * class CustomLexer(RegexLexer): """All your lexer code goes here!""" Then you can load the lexer from the command line with the additional flag ``-x``: .. code-block:: console $ pygmentize -l your_lexer_file.py -x To specify a class name other than CustomLexer, append it with a colon: .. code-block:: console $ pygmentize -l your_lexer.py:SomeLexer -x Or, using the Python API: .. code-block:: python # For a lexer named CustomLexer your_lexer = load_lexer_from_file(filename, **options) # For a lexer named MyNewLexer your_named_lexer = load_lexer_from_file(filename, "MyNewLexer", **options) When loading custom lexers and formatters, be extremely careful to use only trusted files; Pygments will perform the equivalent of ``eval`` on them. If you only want to use your lexer with the Pygments API, you can import and instantiate the lexer yourself, then pass it to :func:`pygments.highlight`. To prepare your new lexer for inclusion in the Pygments distribution, so that it will be found when passing filenames or lexer aliases from the command line, you have to perform the following steps. First, change to the current directory containing the Pygments source code. You will need to have either an unpacked source tarball, or (preferably) a copy cloned from BitBucket. .. code-block:: console $ cd .../pygments-main Select a matching module under ``pygments/lexers``, or create a new module for your lexer class. Next, make sure the lexer is known from outside of the module. All modules in the ``pygments.lexers`` package specify ``__all__``. For example, ``esoteric.py`` sets:: __all__ = ['BrainfuckLexer', 'BefungeLexer', ...] Add the name of your lexer class to this list (or create the list if your lexer is the only class in the module). Finally the lexer can be made publicly known by rebuilding the lexer mapping: .. code-block:: console $ make mapfiles To test the new lexer, store an example file with the proper extension in ``tests/examplefiles``. For example, to test your ``DiffLexer``, add a ``tests/examplefiles/example.diff`` containing a sample diff output. Now you can use pygmentize to render your example to HTML: .. code-block:: console $ ./pygmentize -O full -f html -o /tmp/example.html tests/examplefiles/example.diff Note that this explicitly calls the ``pygmentize`` in the current directory by preceding it with ``./``. This ensures your modifications are used. Otherwise a possibly already installed, unmodified version without your new lexer would have been called from the system search path (``$PATH``). To view the result, open ``/tmp/example.html`` in your browser. Once the example renders as expected, you should run the complete test suite: .. code-block:: console $ make test It also tests that your lexer fulfills the lexer API and certain invariants, such as that the concatenation of all token text is the same as the input text. Regex Flags =========== You can either define regex flags locally in the regex (``r'(?x)foo bar'``) or globally by adding a `flags` attribute to your lexer class. If no attribute is defined, it defaults to `re.MULTILINE`. For more information about regular expression flags see the page about `regular expressions`_ in the Python documentation. .. _regular expressions: http://docs.python.org/library/re.html#regular-expression-syntax Scanning multiple tokens at once ================================ So far, the `action` element in the rule tuple of regex, action and state has been a single token type. Now we look at the first of several other possible values. Here is a more complex lexer that highlights INI files. INI files consist of sections, comments and ``key = value`` pairs:: from pygments.lexer import RegexLexer, bygroups from pygments.token import * class IniLexer(RegexLexer): name = 'INI' aliases = ['ini', 'cfg'] filenames = ['*.ini', '*.cfg'] tokens = { 'root': [ (r'\s+', Text), (r';.*?$', Comment), (r'\[.*?\]$', Keyword), (r'(.*?)(\s*)(=)(\s*)(.*?)$', bygroups(Name.Attribute, Text, Operator, Text, String)) ] } The lexer first looks for whitespace, comments and section names. Later it looks for a line that looks like a key, value pair, separated by an ``'='`` sign, and optional whitespace. The `bygroups` helper yields each capturing group in the regex with a different token type. First the `Name.Attribute` token, then a `Text` token for the optional whitespace, after that a `Operator` token for the equals sign. Then a `Text` token for the whitespace again. The rest of the line is returned as `String`. Note that for this to work, every part of the match must be inside a capturing group (a ``(...)``), and there must not be any nested capturing groups. If you nevertheless need a group, use a non-capturing group defined using this syntax: ``(?:some|words|here)`` (note the ``?:`` after the beginning parenthesis). If you find yourself needing a capturing group inside the regex which shouldn't be part of the output but is used in the regular expressions for backreferencing (eg: ``r'(<(foo|bar)>)(.*?)()'``), you can pass `None` to the bygroups function and that group will be skipped in the output. Changing states =============== Many lexers need multiple states to work as expected. For example, some languages allow multiline comments to be nested. Since this is a recursive pattern it's impossible to lex just using regular expressions. Here is a lexer that recognizes C++ style comments (multi-line with ``/* */`` and single-line with ``//`` until end of line):: from pygments.lexer import RegexLexer from pygments.token import * class CppCommentLexer(RegexLexer): name = 'Example Lexer with states' tokens = { 'root': [ (r'[^/]+', Text), (r'/\*', Comment.Multiline, 'comment'), (r'//.*?$', Comment.Singleline), (r'/', Text) ], 'comment': [ (r'[^*/]', Comment.Multiline), (r'/\*', Comment.Multiline, '#push'), (r'\*/', Comment.Multiline, '#pop'), (r'[*/]', Comment.Multiline) ] } This lexer starts lexing in the ``'root'`` state. It tries to match as much as possible until it finds a slash (``'/'``). If the next character after the slash is an asterisk (``'*'``) the `RegexLexer` sends those two characters to the output stream marked as `Comment.Multiline` and continues lexing with the rules defined in the ``'comment'`` state. If there wasn't an asterisk after the slash, the `RegexLexer` checks if it's a Singleline comment (i.e. followed by a second slash). If this also wasn't the case it must be a single slash, which is not a comment starter (the separate regex for a single slash must also be given, else the slash would be marked as an error token). Inside the ``'comment'`` state, we do the same thing again. Scan until the lexer finds a star or slash. If it's the opening of a multiline comment, push the ``'comment'`` state on the stack and continue scanning, again in the ``'comment'`` state. Else, check if it's the end of the multiline comment. If yes, pop one state from the stack. Note: If you pop from an empty stack you'll get an `IndexError`. (There is an easy way to prevent this from happening: don't ``'#pop'`` in the root state). If the `RegexLexer` encounters a newline that is flagged as an error token, the stack is emptied and the lexer continues scanning in the ``'root'`` state. This can help producing error-tolerant highlighting for erroneous input, e.g. when a single-line string is not closed. Advanced state tricks ===================== There are a few more things you can do with states: - You can push multiple states onto the stack if you give a tuple instead of a simple string as the third item in a rule tuple. For example, if you want to match a comment containing a directive, something like: .. code-block:: text /* rest of comment */ you can use this rule:: tokens = { 'root': [ (r'/\* <', Comment, ('comment', 'directive')), ... ], 'directive': [ (r'[^>]*', Comment.Directive), (r'>', Comment, '#pop'), ], 'comment': [ (r'[^*]+', Comment), (r'\*/', Comment, '#pop'), (r'\*', Comment), ] } When this encounters the above sample, first ``'comment'`` and ``'directive'`` are pushed onto the stack, then the lexer continues in the directive state until it finds the closing ``>``, then it continues in the comment state until the closing ``*/``. Then, both states are popped from the stack again and lexing continues in the root state. .. versionadded:: 0.9 The tuple can contain the special ``'#push'`` and ``'#pop'`` (but not ``'#pop:n'``) directives. - You can include the rules of a state in the definition of another. This is done by using `include` from `pygments.lexer`:: from pygments.lexer import RegexLexer, bygroups, include from pygments.token import * class ExampleLexer(RegexLexer): tokens = { 'comments': [ (r'/\*.*?\*/', Comment), (r'//.*?\n', Comment), ], 'root': [ include('comments'), (r'(function )(\w+)( {)', bygroups(Keyword, Name, Keyword), 'function'), (r'.', Text), ], 'function': [ (r'[^}/]+', Text), include('comments'), (r'/', Text), (r'\}', Keyword, '#pop'), ] } This is a hypothetical lexer for a language that consist of functions and comments. Because comments can occur at toplevel and in functions, we need rules for comments in both states. As you can see, the `include` helper saves repeating rules that occur more than once (in this example, the state ``'comment'`` will never be entered by the lexer, as it's only there to be included in ``'root'`` and ``'function'``). - Sometimes, you may want to "combine" a state from existing ones. This is possible with the `combined` helper from `pygments.lexer`. If you, instead of a new state, write ``combined('state1', 'state2')`` as the third item of a rule tuple, a new anonymous state will be formed from state1 and state2 and if the rule matches, the lexer will enter this state. This is not used very often, but can be helpful in some cases, such as the `PythonLexer`'s string literal processing. - If you want your lexer to start lexing in a different state you can modify the stack by overriding the `get_tokens_unprocessed()` method:: from pygments.lexer import RegexLexer class ExampleLexer(RegexLexer): tokens = {...} def get_tokens_unprocessed(self, text, stack=('root', 'otherstate')): for item in RegexLexer.get_tokens_unprocessed(self, text, stack): yield item Some lexers like the `PhpLexer` use this to make the leading ``', Name.Tag), ], 'script-content': [ (r'(.+?)(<\s*/\s*script\s*>)', bygroups(using(JavascriptLexer), Name.Tag), '#pop'), ] } Here the content of a ```` end tag is processed by the `JavascriptLexer`, while the end tag is yielded as a normal token with the `Name.Tag` type. Also note the ``(r'<\s*script\s*', Name.Tag, ('script-content', 'tag'))`` rule. Here, two states are pushed onto the state stack, ``'script-content'`` and ``'tag'``. That means that first ``'tag'`` is processed, which will lex attributes and the closing ``>``, then the ``'tag'`` state is popped and the next state on top of the stack will be ``'script-content'``. Since you cannot refer to the class currently being defined, use `this` (imported from `pygments.lexer`) to refer to the current lexer class, i.e. ``using(this)``. This construct may seem unnecessary, but this is often the most obvious way of lexing arbitrary syntax between fixed delimiters without introducing deeply nested states. The `using()` helper has a special keyword argument, `state`, which works as follows: if given, the lexer to use initially is not in the ``"root"`` state, but in the state given by this argument. This does not work with advanced `RegexLexer` subclasses such as `ExtendedRegexLexer` (see below). Any other keywords arguments passed to `using()` are added to the keyword arguments used to create the lexer. Delegating Lexer ================ Another approach for nested lexers is the `DelegatingLexer` which is for example used for the template engine lexers. It takes two lexers as arguments on initialisation: a `root_lexer` and a `language_lexer`. The input is processed as follows: First, the whole text is lexed with the `language_lexer`. All tokens yielded with the special type of ``Other`` are then concatenated and given to the `root_lexer`. The language tokens of the `language_lexer` are then inserted into the `root_lexer`'s token stream at the appropriate positions. :: from pygments.lexer import DelegatingLexer from pygments.lexers.web import HtmlLexer, PhpLexer class HtmlPhpLexer(DelegatingLexer): def __init__(self, **options): super(HtmlPhpLexer, self).__init__(HtmlLexer, PhpLexer, **options) This procedure ensures that e.g. HTML with template tags in it is highlighted correctly even if the template tags are put into HTML tags or attributes. If you want to change the needle token ``Other`` to something else, you can give the lexer another token type as the third parameter:: DelegatingLexer.__init__(MyLexer, OtherLexer, Text, **options) Callbacks ========= Sometimes the grammar of a language is so complex that a lexer would be unable to process it just by using regular expressions and stacks. For this, the `RegexLexer` allows callbacks to be given in rule tuples, instead of token types (`bygroups` and `using` are nothing else but preimplemented callbacks). The callback must be a function taking two arguments: * the lexer itself * the match object for the last matched rule The callback must then return an iterable of (or simply yield) ``(index, tokentype, value)`` tuples, which are then just passed through by `get_tokens_unprocessed()`. The ``index`` here is the position of the token in the input string, ``tokentype`` is the normal token type (like `Name.Builtin`), and ``value`` the associated part of the input string. You can see an example here:: from pygments.lexer import RegexLexer from pygments.token import Generic class HypotheticLexer(RegexLexer): def headline_callback(lexer, match): equal_signs = match.group(1) text = match.group(2) yield match.start(), Generic.Headline, equal_signs + text + equal_signs tokens = { 'root': [ (r'(=+)(.*?)(\1)', headline_callback) ] } If the regex for the `headline_callback` matches, the function is called with the match object. Note that after the callback is done, processing continues normally, that is, after the end of the previous match. The callback has no possibility to influence the position. There are not really any simple examples for lexer callbacks, but you can see them in action e.g. in the `SMLLexer` class in `ml.py`_. .. _ml.py: http://bitbucket.org/birkenfeld/pygments-main/src/tip/pygments/lexers/ml.py The ExtendedRegexLexer class ============================ The `RegexLexer`, even with callbacks, unfortunately isn't powerful enough for the funky syntax rules of languages such as Ruby. But fear not; even then you don't have to abandon the regular expression approach: Pygments has a subclass of `RegexLexer`, the `ExtendedRegexLexer`. All features known from RegexLexers are available here too, and the tokens are specified in exactly the same way, *except* for one detail: The `get_tokens_unprocessed()` method holds its internal state data not as local variables, but in an instance of the `pygments.lexer.LexerContext` class, and that instance is passed to callbacks as a third argument. This means that you can modify the lexer state in callbacks. The `LexerContext` class has the following members: * `text` -- the input text * `pos` -- the current starting position that is used for matching regexes * `stack` -- a list containing the state stack * `end` -- the maximum position to which regexes are matched, this defaults to the length of `text` Additionally, the `get_tokens_unprocessed()` method can be given a `LexerContext` instead of a string and will then process this context instead of creating a new one for the string argument. Note that because you can set the current position to anything in the callback, it won't be automatically be set by the caller after the callback is finished. For example, this is how the hypothetical lexer above would be written with the `ExtendedRegexLexer`:: from pygments.lexer import ExtendedRegexLexer from pygments.token import Generic class ExHypotheticLexer(ExtendedRegexLexer): def headline_callback(lexer, match, ctx): equal_signs = match.group(1) text = match.group(2) yield match.start(), Generic.Headline, equal_signs + text + equal_signs ctx.pos = match.end() tokens = { 'root': [ (r'(=+)(.*?)(\1)', headline_callback) ] } This might sound confusing (and it can really be). But it is needed, and for an example look at the Ruby lexer in `ruby.py`_. .. _ruby.py: https://bitbucket.org/birkenfeld/pygments-main/src/tip/pygments/lexers/ruby.py Handling Lists of Keywords ========================== For a relatively short list (hundreds) you can construct an optimized regular expression directly using ``words()`` (longer lists, see next section). This function handles a few things for you automatically, including escaping metacharacters and Python's first-match rather than longest-match in alternations. Feel free to put the lists themselves in ``pygments/lexers/_$lang_builtins.py`` (see examples there), and generated by code if possible. An example of using ``words()`` is something like:: from pygments.lexer import RegexLexer, words, Name class MyLexer(RegexLexer): tokens = { 'root': [ (words(('else', 'elseif'), suffix=r'\b'), Name.Builtin), (r'\w+', Name), ], } As you can see, you can add ``prefix`` and ``suffix`` parts to the constructed regex. Modifying Token Streams ======================= Some languages ship a lot of builtin functions (for example PHP). The total amount of those functions differs from system to system because not everybody has every extension installed. In the case of PHP there are over 3000 builtin functions. That's an incredibly huge amount of functions, much more than you want to put into a regular expression. But because only `Name` tokens can be function names this is solvable by overriding the ``get_tokens_unprocessed()`` method. The following lexer subclasses the `PythonLexer` so that it highlights some additional names as pseudo keywords:: from pygments.lexers.python import PythonLexer from pygments.token import Name, Keyword class MyPythonLexer(PythonLexer): EXTRA_KEYWORDS = set(('foo', 'bar', 'foobar', 'barfoo', 'spam', 'eggs')) def get_tokens_unprocessed(self, text): for index, token, value in PythonLexer.get_tokens_unprocessed(self, text): if token is Name and value in self.EXTRA_KEYWORDS: yield index, Keyword.Pseudo, value else: yield index, token, value The `PhpLexer` and `LuaLexer` use this method to resolve builtin functions. Pygments-2.2.0/doc/docs/authors.rst0000644000175000017500000000011013041166700016277 0ustar piotrpiotrFull contributor list ===================== .. include:: ../../AUTHORS Pygments-2.2.0/doc/docs/lexers.rst0000644000175000017500000000376113041200252016122 0ustar piotrpiotr.. -*- mode: rst -*- ================ Available lexers ================ This page lists all available builtin lexers and the options they take. Currently, **all lexers** support these options: `stripnl` Strip leading and trailing newlines from the input (default: ``True``) `stripall` Strip all leading and trailing whitespace from the input (default: ``False``). `ensurenl` Make sure that the input ends with a newline (default: ``True``). This is required for some lexers that consume input linewise. .. versionadded:: 1.3 `tabsize` If given and greater than 0, expand tabs in the input (default: ``0``). `encoding` If given, must be an encoding name (such as ``"utf-8"``). This encoding will be used to convert the input string to Unicode (if it is not already a Unicode string). The default is ``"guess"``. If this option is set to ``"guess"``, a simple UTF-8 vs. Latin-1 detection is used, if it is set to ``"chardet"``, the `chardet library `_ is used to guess the encoding of the input. .. versionadded:: 0.6 The "Short Names" field lists the identifiers that can be used with the `get_lexer_by_name()` function. These lexers are builtin and can be imported from `pygments.lexers`: .. pygmentsdoc:: lexers Iterating over all lexers ------------------------- .. versionadded:: 0.6 To get all lexers (both the builtin and the plugin ones), you can use the `get_all_lexers()` function from the `pygments.lexers` module: .. sourcecode:: pycon >>> from pygments.lexers import get_all_lexers >>> i = get_all_lexers() >>> i.next() ('Diff', ('diff',), ('*.diff', '*.patch'), ('text/x-diff', 'text/x-patch')) >>> i.next() ('Delphi', ('delphi', 'objectpascal', 'pas', 'pascal'), ('*.pas',), ('text/x-pascal',)) >>> i.next() ('XML+Ruby', ('xml+erb', 'xml+ruby'), (), ()) As you can see, the return value is an iterator which yields tuples in the form ``(name, aliases, filetypes, mimetypes)``. Pygments-2.2.0/doc/docs/integrate.rst0000644000175000017500000000232013041166700016601 0ustar piotrpiotr.. -*- mode: rst -*- =================================== Using Pygments in various scenarios =================================== Markdown -------- Since Pygments 0.9, the distribution ships Markdown_ preprocessor sample code that uses Pygments to render source code in :file:`external/markdown-processor.py`. You can copy and adapt it to your liking. .. _Markdown: http://www.freewisdom.org/projects/python-markdown/ TextMate -------- Antonio Cangiano has created a Pygments bundle for TextMate that allows to colorize code via a simple menu option. It can be found here_. .. _here: http://antoniocangiano.com/2008/10/28/pygments-textmate-bundle/ Bash completion --------------- The source distribution contains a file ``external/pygments.bashcomp`` that sets up completion for the ``pygmentize`` command in bash. Wrappers for other languages ---------------------------- These libraries provide Pygments highlighting for users of other languages than Python: * `pygments.rb `_, a pygments wrapper for Ruby * `Clygments `_, a pygments wrapper for Clojure * `PHPygments `_, a pygments wrapper for PHP Pygments-2.2.0/doc/docs/filters.rst0000644000175000017500000000227613041166700016301 0ustar piotrpiotr.. -*- mode: rst -*- ======= Filters ======= .. versionadded:: 0.7 You can filter token streams coming from lexers to improve or annotate the output. For example, you can highlight special words in comments, convert keywords to upper or lowercase to enforce a style guide etc. To apply a filter, you can use the `add_filter()` method of a lexer: .. sourcecode:: pycon >>> from pygments.lexers import PythonLexer >>> l = PythonLexer() >>> # add a filter given by a string and options >>> l.add_filter('codetagify', case='lower') >>> l.filters [] >>> from pygments.filters import KeywordCaseFilter >>> # or give an instance >>> l.add_filter(KeywordCaseFilter(case='lower')) The `add_filter()` method takes keyword arguments which are forwarded to the constructor of the filter. To get a list of all registered filters by name, you can use the `get_all_filters()` function from the `pygments.filters` module that returns an iterable for all known filters. If you want to write your own filter, have a look at :doc:`Write your own filter `. Builtin Filters =============== .. pygmentsdoc:: filters Pygments-2.2.0/doc/docs/unicode.rst0000644000175000017500000000441313041200252016241 0ustar piotrpiotr===================== Unicode and Encodings ===================== Since Pygments 0.6, all lexers use unicode strings internally. Because of that you might encounter the occasional :exc:`UnicodeDecodeError` if you pass strings with the wrong encoding. Per default all lexers have their input encoding set to `guess`. This means that the following encodings are tried: * UTF-8 (including BOM handling) * The locale encoding (i.e. the result of `locale.getpreferredencoding()`) * As a last resort, `latin1` If you pass a lexer a byte string object (not unicode), it tries to decode the data using this encoding. You can override the encoding using the `encoding` or `inencoding` lexer options. If you have the `chardet`_ library installed and set the encoding to ``chardet`` if will analyse the text and use the encoding it thinks is the right one automatically: .. sourcecode:: python from pygments.lexers import PythonLexer lexer = PythonLexer(encoding='chardet') The best way is to pass Pygments unicode objects. In that case you can't get unexpected output. The formatters now send Unicode objects to the stream if you don't set the output encoding. You can do so by passing the formatters an `encoding` option: .. sourcecode:: python from pygments.formatters import HtmlFormatter f = HtmlFormatter(encoding='utf-8') **You will have to set this option if you have non-ASCII characters in the source and the output stream does not accept Unicode written to it!** This is the case for all regular files and for terminals. Note: The Terminal formatter tries to be smart: if its output stream has an `encoding` attribute, and you haven't set the option, it will encode any Unicode string with this encoding before writing it. This is the case for `sys.stdout`, for example. The other formatters don't have that behavior. Another note: If you call Pygments via the command line (`pygmentize`), encoding is handled differently, see :doc:`the command line docs `. .. versionadded:: 0.7 The formatters now also accept an `outencoding` option which will override the `encoding` option if given. This makes it possible to use a single options dict with lexers and formatters, and still have different input and output encodings. .. _chardet: https://chardet.github.io/ Pygments-2.2.0/doc/docs/changelog.rst0000644000175000017500000000003313041166700016545 0ustar piotrpiotr.. include:: ../../CHANGES Pygments-2.2.0/doc/docs/plugins.rst0000644000175000017500000000502513041166700016305 0ustar piotrpiotr================ Register Plugins ================ If you want to extend Pygments without hacking the sources, but want to use the lexer/formatter/style/filter lookup functions (`lexers.get_lexer_by_name` et al.), you can use `setuptools`_ entrypoints to add new lexers, formatters or styles as if they were in the Pygments core. .. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools That means you can use your highlighter modules with the `pygmentize` script, which relies on the mentioned functions. Entrypoints =========== Here is a list of setuptools entrypoints that Pygments understands: `pygments.lexers` This entrypoint is used for adding new lexers to the Pygments core. The name of the entrypoint values doesn't really matter, Pygments extracts required metadata from the class definition: .. sourcecode:: ini [pygments.lexers] yourlexer = yourmodule:YourLexer Note that you have to define ``name``, ``aliases`` and ``filename`` attributes so that you can use the highlighter from the command line: .. sourcecode:: python class YourLexer(...): name = 'Name Of Your Lexer' aliases = ['alias'] filenames = ['*.ext'] `pygments.formatters` You can use this entrypoint to add new formatters to Pygments. The name of an entrypoint item is the name of the formatter. If you prefix the name with a slash it's used as a filename pattern: .. sourcecode:: ini [pygments.formatters] yourformatter = yourmodule:YourFormatter /.ext = yourmodule:YourFormatter `pygments.styles` To add a new style you can use this entrypoint. The name of the entrypoint is the name of the style: .. sourcecode:: ini [pygments.styles] yourstyle = yourmodule:YourStyle `pygments.filters` Use this entrypoint to register a new filter. The name of the entrypoint is the name of the filter: .. sourcecode:: ini [pygments.filters] yourfilter = yourmodule:YourFilter How To Use Entrypoints ====================== This documentation doesn't explain how to use those entrypoints because this is covered in the `setuptools documentation`_. That page should cover everything you need to write a plugin. .. _setuptools documentation: http://peak.telecommunity.com/DevCenter/setuptools Extending The Core ================== If you have written a Pygments plugin that is open source, please inform us about that. There is a high chance that we'll add it to the Pygments distribution. Pygments-2.2.0/doc/docs/quickstart.rst0000644000175000017500000001477313041166700017030 0ustar piotrpiotr.. -*- mode: rst -*- =========================== Introduction and Quickstart =========================== Welcome to Pygments! This document explains the basic concepts and terms and gives a few examples of how to use the library. Architecture ============ There are four types of components that work together highlighting a piece of code: * A **lexer** splits the source into tokens, fragments of the source that have a token type that determines what the text represents semantically (e.g., keyword, string, or comment). There is a lexer for every language or markup format that Pygments supports. * The token stream can be piped through **filters**, which usually modify the token types or text fragments, e.g. uppercasing all keywords. * A **formatter** then takes the token stream and writes it to an output file, in a format such as HTML, LaTeX or RTF. * While writing the output, a **style** determines how to highlight all the different token types. It maps them to attributes like "red and bold". Example ======= Here is a small example for highlighting Python code: .. sourcecode:: python from pygments import highlight from pygments.lexers import PythonLexer from pygments.formatters import HtmlFormatter code = 'print "Hello World"' print highlight(code, PythonLexer(), HtmlFormatter()) which prints something like this: .. sourcecode:: html
print "Hello World"
As you can see, Pygments uses CSS classes (by default, but you can change that) instead of inline styles in order to avoid outputting redundant style information over and over. A CSS stylesheet that contains all CSS classes possibly used in the output can be produced by: .. sourcecode:: python print HtmlFormatter().get_style_defs('.highlight') The argument to :func:`get_style_defs` is used as an additional CSS selector: the output may look like this: .. sourcecode:: css .highlight .k { color: #AA22FF; font-weight: bold } .highlight .s { color: #BB4444 } ... Options ======= The :func:`highlight()` function supports a fourth argument called *outfile*, it must be a file object if given. The formatted output will then be written to this file instead of being returned as a string. Lexers and formatters both support options. They are given to them as keyword arguments either to the class or to the lookup method: .. sourcecode:: python from pygments import highlight from pygments.lexers import get_lexer_by_name from pygments.formatters import HtmlFormatter lexer = get_lexer_by_name("python", stripall=True) formatter = HtmlFormatter(linenos=True, cssclass="source") result = highlight(code, lexer, formatter) This makes the lexer strip all leading and trailing whitespace from the input (`stripall` option), lets the formatter output line numbers (`linenos` option), and sets the wrapping ``
``'s class to ``source`` (instead of ``highlight``). Important options include: `encoding` : for lexers and formatters Since Pygments uses Unicode strings internally, this determines which encoding will be used to convert to or from byte strings. `style` : for formatters The name of the style to use when writing the output. For an overview of builtin lexers and formatters and their options, visit the :doc:`lexer ` and :doc:`formatters ` lists. For a documentation on filters, see :doc:`this page `. Lexer and formatter lookup ========================== If you want to lookup a built-in lexer by its alias or a filename, you can use one of the following methods: .. sourcecode:: pycon >>> from pygments.lexers import (get_lexer_by_name, ... get_lexer_for_filename, get_lexer_for_mimetype) >>> get_lexer_by_name('python') >>> get_lexer_for_filename('spam.rb') >>> get_lexer_for_mimetype('text/x-perl') All these functions accept keyword arguments; they will be passed to the lexer as options. A similar API is available for formatters: use :func:`.get_formatter_by_name()` and :func:`.get_formatter_for_filename()` from the :mod:`pygments.formatters` module for this purpose. Guessing lexers =============== If you don't know the content of the file, or you want to highlight a file whose extension is ambiguous, such as ``.html`` (which could contain plain HTML or some template tags), use these functions: .. sourcecode:: pycon >>> from pygments.lexers import guess_lexer, guess_lexer_for_filename >>> guess_lexer('#!/usr/bin/python\nprint "Hello World!"') >>> guess_lexer_for_filename('test.py', 'print "Hello World!"') :func:`.guess_lexer()` passes the given content to the lexer classes' :meth:`analyse_text()` method and returns the one for which it returns the highest number. All lexers have two different filename pattern lists: the primary and the secondary one. The :func:`.get_lexer_for_filename()` function only uses the primary list, whose entries are supposed to be unique among all lexers. :func:`.guess_lexer_for_filename()`, however, will first loop through all lexers and look at the primary and secondary filename patterns if the filename matches. If only one lexer matches, it is returned, else the guessing mechanism of :func:`.guess_lexer()` is used with the matching lexers. As usual, keyword arguments to these functions are given to the created lexer as options. Command line usage ================== You can use Pygments from the command line, using the :program:`pygmentize` script:: $ pygmentize test.py will highlight the Python file test.py using ANSI escape sequences (a.k.a. terminal colors) and print the result to standard output. To output HTML, use the ``-f`` option:: $ pygmentize -f html -o test.html test.py to write an HTML-highlighted version of test.py to the file test.html. Note that it will only be a snippet of HTML, if you want a full HTML document, use the "full" option:: $ pygmentize -f html -O full -o test.html test.py This will produce a full HTML document with included stylesheet. A style can be selected with ``-O style=``. If you need a stylesheet for an existing HTML file using Pygments CSS classes, it can be created with:: $ pygmentize -S default -f html > style.css where ``default`` is the style name. More options and tricks and be found in the :doc:`command line reference `. Pygments-2.2.0/doc/docs/java.rst0000644000175000017500000000443113041166700015545 0ustar piotrpiotr===================== Use Pygments in Java ===================== Thanks to `Jython `_ it is possible to use Pygments in Java. This page is a simple tutorial to get an idea of how this works. You can then look at the `Jython documentation `_ for more advanced uses. Since version 1.5, Pygments is deployed on `Maven Central `_ as a JAR, as is Jython which makes it a lot easier to create a Java project. Here is an example of a `Maven `_ ``pom.xml`` file for a project running Pygments: .. sourcecode:: xml 4.0.0 example example 1.0-SNAPSHOT org.python jython-standalone 2.5.3 org.pygments pygments 1.5 runtime The following Java example: .. sourcecode:: java PythonInterpreter interpreter = new PythonInterpreter(); // Set a variable with the content you want to work with interpreter.set("code", code); // Simple use Pygments as you would in Python interpreter.exec("from pygments import highlight\n" + "from pygments.lexers import PythonLexer\n" + "from pygments.formatters import HtmlFormatter\n" + "\nresult = highlight(code, PythonLexer(), HtmlFormatter())"); // Get the result that has been set in a variable System.out.println(interpreter.get("result", String.class)); will print something like: .. sourcecode:: html
print "Hello World"
Pygments-2.2.0/doc/docs/styles.rst0000644000175000017500000001427713041166700016160 0ustar piotrpiotr.. -*- mode: rst -*- ====== Styles ====== Pygments comes with some builtin styles that work for both the HTML and LaTeX formatter. The builtin styles can be looked up with the `get_style_by_name` function: .. sourcecode:: pycon >>> from pygments.styles import get_style_by_name >>> get_style_by_name('colorful') You can pass a instance of a `Style` class to a formatter as the `style` option in form of a string: .. sourcecode:: pycon >>> from pygments.styles import get_style_by_name >>> from pygments.formatters import HtmlFormatter >>> HtmlFormatter(style='colorful').style Or you can also import your own style (which must be a subclass of `pygments.style.Style`) and pass it to the formatter: .. sourcecode:: pycon >>> from yourapp.yourmodule import YourStyle >>> from pygments.formatters import HtmlFormatter >>> HtmlFormatter(style=YourStyle).style Creating Own Styles =================== So, how to create a style? All you have to do is to subclass `Style` and define some styles: .. sourcecode:: python from pygments.style import Style from pygments.token import Keyword, Name, Comment, String, Error, \ Number, Operator, Generic class YourStyle(Style): default_style = "" styles = { Comment: 'italic #888', Keyword: 'bold #005', Name: '#f00', Name.Function: '#0f0', Name.Class: 'bold #0f0', String: 'bg:#eee #111' } That's it. There are just a few rules. When you define a style for `Name` the style automatically also affects `Name.Function` and so on. If you defined ``'bold'`` and you don't want boldface for a subtoken use ``'nobold'``. (Philosophy: the styles aren't written in CSS syntax since this way they can be used for a variety of formatters.) `default_style` is the style inherited by all token types. To make the style usable for Pygments, you must * either register it as a plugin (see :doc:`the plugin docs `) * or drop it into the `styles` subpackage of your Pygments distribution one style class per style, where the file name is the style name and the class name is `StylenameClass`. For example, if your style should be called ``"mondrian"``, name the class `MondrianStyle`, put it into the file ``mondrian.py`` and this file into the ``pygments.styles`` subpackage directory. Style Rules =========== Here a small overview of all allowed styles: ``bold`` render text as bold ``nobold`` don't render text as bold (to prevent subtokens being highlighted bold) ``italic`` render text italic ``noitalic`` don't render text as italic ``underline`` render text underlined ``nounderline`` don't render text underlined ``bg:`` transparent background ``bg:#000000`` background color (black) ``border:`` no border ``border:#ffffff`` border color (white) ``#ff0000`` text color (red) ``noinherit`` don't inherit styles from supertoken Note that there may not be a space between ``bg:`` and the color value since the style definition string is split at whitespace. Also, using named colors is not allowed since the supported color names vary for different formatters. Furthermore, not all lexers might support every style. Builtin Styles ============== Pygments ships some builtin styles which are maintained by the Pygments team. To get a list of known styles you can use this snippet: .. sourcecode:: pycon >>> from pygments.styles import STYLE_MAP >>> STYLE_MAP.keys() ['default', 'emacs', 'friendly', 'colorful'] Getting a list of available styles ================================== .. versionadded:: 0.6 Because it could be that a plugin registered a style, there is a way to iterate over all styles: .. sourcecode:: pycon >>> from pygments.styles import get_all_styles >>> styles = list(get_all_styles()) .. _AnsiTerminalStyle: Terminal Styles =============== .. versionadded:: 2.2 Custom styles used with the 256-color terminal formatter can also map colors to use the 8 default ANSI colors. To do so, use ``#ansigreen``, ``#ansired`` or any other colors defined in :attr:`pygments.style.ansicolors`. Foreground ANSI colors will be mapped to the corresponding `escape codes 30 to 37 `_ thus respecting any custom color mapping and themes provided by many terminal emulators. Light variants are treated as foreground color with and an added bold flag. ``bg:#ansi`` will also be respected, except the light variant will be the same shade as their dark variant. See the following example where the color of the string ``"hello world"`` is governed by the escape sequence ``\x1b[34;01m`` (Ansi Blue, Bold, 41 being red background) instead of an extended foreground & background color. .. sourcecode:: pycon >>> from pygments import highlight >>> from pygments.style import Style >>> from pygments.token import Token >>> from pygments.lexers import Python3Lexer >>> from pygments.formatters import Terminal256Formatter >>> class MyStyle(Style): styles = { Token.String: '#ansiblue bg:#ansired', } >>> code = 'print("Hello World")' >>> result = highlight(code, Python3Lexer(), Terminal256Formatter(style=MyStyle)) >>> print(result.encode()) b'\x1b[34;41;01m"\x1b[39;49;00m\x1b[34;41;01mHello World\x1b[39;49;00m\x1b[34;41;01m"\x1b[39;49;00m' Colors specified using ``#ansi*`` are converted to a default set of RGB colors when used with formatters other than the terminal-256 formatter. By definition of ANSI, the following colors are considered "light" colors, and will be rendered by most terminals as bold: - "darkgray", "red", "green", "yellow", "blue", "fuchsia", "turquoise", "white" The following are considered "dark" colors and will be rendered as non-bold: - "black", "darkred", "darkgreen", "brown", "darkblue", "purple", "teal", "lightgray" Exact behavior might depends on the terminal emulator you are using, and its settings. Pygments-2.2.0/doc/_templates/0000755000175000017500000000000013041220507015271 5ustar piotrpiotrPygments-2.2.0/doc/_templates/indexsidebar.html0000644000175000017500000000175313041166700020632 0ustar piotrpiotr

Download

{% if version.endswith('(hg)') %}

This documentation is for version {{ version }}, which is not released yet.

You can use it from the Mercurial repo or look for released versions in the Python Package Index.

{% else %}

Current version: {{ version }}

Get Pygments from the Python Package Index, or install it with:

pip install Pygments
{% endif %}

Questions? Suggestions?

Clone at Bitbucket or come to the #pocoo channel on FreeNode.

You can also open an issue at the tracker.

Pygments-2.2.0/doc/_templates/docssidebar.html0000644000175000017500000000020313041166700020440 0ustar piotrpiotr{% if pagename != 'docs/index' %} « Back to docs index {% endif %} Pygments-2.2.0/doc/faq.rst0000644000175000017500000001371313041166700014446 0ustar piotrpiotr:orphan: Pygments FAQ ============= What is Pygments? ----------------- Pygments is a syntax highlighting engine written in Python. That means, it will take source code (or other markup) in a supported language and output a processed version (in different formats) containing syntax highlighting markup. Its features include: * a wide range of common :doc:`languages and markup formats ` is supported * new languages and formats are added easily * a number of output formats is available, including: - HTML - ANSI sequences (console output) - LaTeX - RTF * it is usable as a command-line tool and as a library * parsing and formatting is fast Pygments is licensed under the BSD license. Where does the name Pygments come from? --------------------------------------- *Py* of course stands for Python, while *pigments* are used for coloring paint, and in this case, source code! What are the system requirements? --------------------------------- Pygments only needs a standard Python install, version 2.6 or higher or version 3.3 or higher for Python 3. No additional libraries are needed. How can I use Pygments? ----------------------- Pygments is usable as a command-line tool as well as a library. From the command-line, usage looks like this (assuming the pygmentize script is properly installed):: pygmentize -f html /path/to/file.py This will print a HTML-highlighted version of /path/to/file.py to standard output. For a complete help, please run ``pygmentize -h``. Usage as a library is thoroughly demonstrated in the Documentation section. How do I make a new style? -------------------------- Please see the :doc:`documentation on styles `. How can I report a bug or suggest a feature? -------------------------------------------- Please report bugs and feature wishes in the tracker at Bitbucket. You can also e-mail the author or use IRC, see the contact details. I want this support for this language! -------------------------------------- Instead of waiting for others to include language support, why not write it yourself? All you have to know is :doc:`outlined in the docs `. Can I use Pygments for programming language processing? ------------------------------------------------------- The Pygments lexing machinery is quite powerful can be used to build lexers for basically all languages. However, parsing them is not possible, though some lexers go some steps in this direction in order to e.g. highlight function names differently. Also, error reporting is not the scope of Pygments. It focuses on correctly highlighting syntactically valid documents, not finding and compensating errors. Who uses Pygments? ------------------ This is an (incomplete) list of projects and sites known to use the Pygments highlighter. * `Wikipedia `_ * `BitBucket `_, a Mercurial and Git hosting site * `The Sphinx documentation builder `_, for embedded source examples * `rst2pdf `_, a reStructuredText to PDF converter * `Codecov `_, a code coverage CI service * `Trac `_, the universal project management tool * `AsciiDoc `_, a text-based documentation generator * `ActiveState Code `_, the Python Cookbook successor * `ViewVC `_, a web-based version control repository browser * `BzrFruit `_, a Bazaar branch viewer * `QBzr `_, a cross-platform Qt-based GUI front end for Bazaar * `Review Board `_, a collaborative code reviewing tool * `Diamanda `_, a Django powered wiki system with support for Pygments * `Progopedia `_ (`English `_), an encyclopedia of programming languages * `Bruce `_, a reStructuredText presentation tool * `PIDA `_, a universal IDE written in Python * `BPython `_, a curses-based intelligent Python shell * `PuDB `_, a console Python debugger * `XWiki `_, a wiki-based development framework in Java, using Jython * `roux `_, a script for running R scripts and creating beautiful output including graphs * `hurl `_, a web service for making HTTP requests * `wxHTMLPygmentizer `_ is a GUI utility, used to make code-colorization easier * `Postmarkup `_, a BBCode to XHTML generator * `WpPygments `_, and `WPygments `_, highlighter plugins for WordPress * `Siafoo `_, a tool for sharing and storing useful code and programming experience * `D source `_, a community for the D programming language * `dpaste.com `_, another Django pastebin * `Django snippets `_, a pastebin for Django code * `Fayaa `_, a Chinese pastebin * `Incollo.com `_, a free collaborative debugging tool * `PasteBox `_, a pastebin focused on privacy * `hilite.me `_, a site to highlight code snippets * `patx.me `_, a pastebin * `Fluidic `_, an experiment in integrating shells with a GUI * `pygments.rb `_, a pygments wrapper for Ruby * `Clygments `_, a pygments wrapper for Clojure * `PHPygments `_, a pygments wrapper for PHP If you have a project or web site using Pygments, drop me a line, and I'll add a link here. Pygments-2.2.0/doc/_static/0000755000175000017500000000000013041220507014562 5ustar piotrpiotrPygments-2.2.0/doc/_static/logo_only.png0000644000175000017500000004005013041166700017274 0ustar piotrpiotrPNG  IHDR^^+wbKGD pHYs  tIME!د IDATxy|T' @A7B]֊icKi]Rmk>}bR +U% mqaʎ ɄdHH8?f&˹w>_/ܹ333=C0wB:ێSӶfOѩBeۗD ᄍqCvҐ=?-*HB| YS( tA5!OLϿĈQb*J"e8 ^G?5]:ێ'U&lTLrx3Ƀ/dk!9|ڥ ڃ~`^$[RoH>.5 w[KyWBJLGd} W=mW"ᾺZMrيS$x#t_ŷ.+TezEr$#}~s/ݾ.)%_J"et%O0AK/Lcrd ϬJWoa.ɿ&OZȷwJFS 4L0ϨW\Giβl{=T;Ǵu&wMuȔ+Z.&9qzw!zný^DrQ <&Fs}ղ|wvk"?Lۚ>A}xcLsL^+6?œ{w.'BNDDijw߼ƒ|k(9jh7&nCU.`QZtlu(DƵrK)QmI5^ڶfo񐴃uA Om)j픋GʺŵS/3zI'zn\ʄFM3bIoBO|t K+o}?کH\f%yU)%W^$lc& e(W#)1݉(AmTRɃVЎ?~t; O_:%˹fi@ޛ j 3zN2OoZbZOJ" 1I\0q:xt ]Tx' 2{u ە. K j/9WBRF0]QS5'A\Mڅ?pt3;+g[ ^@ti 7K "+G5(K'􆗑@$->ֺlcJLUwVݓ)DՓ(OD\5Fmch|t/C;{Y+_7mXy9@\5\5Pr4 y M'ukE X])%S2CYϋ%ƩΌah󫾛xƾ~Ra~JnJ.*rdhzT7k#IQ#K`JT'@y\kڻHlj3>ahGݪG7ClY7oyk+=Ҧf{7~}hrW_O},XJTWCHS鱳+FgE h;^XC_l=hI9XAޫSKS//d@ahJLwIoڮF=T &ƸnJ+Fgnෝ]UvhBl.-K ‹%'{UF)9(tRxhB:Qx>A&}Ǵ*񮹶4yƹn=W&S%Y|0(iRU/^eip1g(\Y6ʱ®9BWP\8HV)!iN0 ̰y?W Ԩ|I~LY`Ճ]զjՎ1S+b`O_;'%.vujz]sedG.ۛ,ϱ A;hB{l[>9]6op_Ⱀ⌈+~&bw'_3'Yy?zJK}口~4X^//?&K^To㪳.r]nRJ+jKg)Y1u}(Ft7> ZPR|5l#1+9h`[:?]ϲL_8)Tլ)X)vIӭ2)bhしKG0~ӽ;!^Iw-m{?&+A\6+(Z/ytO/-'X$Yv=蒓@PҮ\bZP.쾧XzYoӁyN HnkR$ܨ|2rzh5,ht!]dRiWT]NqA=T1V)0p+Ԩ)+MySgW+j[;iMUҞeu\*Y^{%duXor? {~Q]8tϧJR~&jS6 )>z}H FIJ""*7;X~OyQxu76҆^M[|?G:HoӾ2M9ɸ|UZDD_-In-N+E'+y]=͸ɔSS0㵵I]1$^`]o|w%F""3WJuF+ȒmF\1.>=|ol*%pBc̿ZLdE'JA C;>'_$Jw'Z;Kȯ:멡ۛ6N+NQW|DKDDw_x?-k$On7iCQ,?CdtdEHz'K>z`/oosdnu1;a`RV"əiȊ),+XqRIqJoe櫼hGO^P@)*KfqLYJl=r8MtS C;>o9wŏdo1}ͤ_3{Ҩ:W>' 7G7p0*]4ǐNjԛ׀HԒ齽Y1i/O^7xCt+YJMWzHsMyi4͕,5D3U׊XګAӥq)!GbD7V70q>!ޠIr"Y Ӯ*j}W6*ߓƔ93!_)Y%7)Q*hxZt{Ֆ|!^yòZ:& G&#ȷߘ:7W"H | ~& M3JgkOfҡF{hxZЎόeB^J/HdErk5]X_|Of4>ҵɛ_M/]]͍ Zg] vǥR-3i͑ C;<-<#ѡ@+{ _ * }Ox.׌1s.fЦ3,4otYYTAtNwYύҖ, 8o(Zx7DCbM8}U_>,*Պm=1kF蹗@9|Wkb83P[PRQIkyQeahc_"x]룑R"~WXӥ_҃VWT%FT4 u[k?}&\5ǭ(4'CD)Q2WRZڋXq uQ^'bT+H8~͖DK]vh9uM^Φ/#fzXC;qRimЎh@bċpVc=oJ T)9A8ts$=Ԥ| .Iӹlu H>.1'_[?ês5 ]~jtAW^[ U%-4S>팟<v|i;k$^ o|Rxc%㒲lNZ)V5Q1ҩ]%zGIZQ\kL[άu[N,x[\vЩRyݭMw.yTi!꺲a-?ȆcT,fgu.?Bdkēm>}[.?ri=Qׇt|!^{KWyKzc~cy/c^2s:nvU!#ռ%uOe:+*n_v :&%̦_cST@BHg>wvvɍCXVArԨ:)*ǘN Zuv/籇_#exK Xk^͉tkm4t(HFӡcnJON Z5vx C_/|,xŵXU +`r^QߗZw,Xs%onkxCŰ4q9j튊6HߤuЎOA[l_lSӍPC͵Wu”~w\47S+ӯpfahٕA7W&]#V\If_ X#;v ݀z+J'i1Qq;R?'仓n(-Ir#Vl~-F `']tb4fܰLlB2\"߉u r;.:ěc?dFGŠiFBnrCa^r PC Wgn9Quۛ0wWl; j;.:}cǨiƟ&a? 8\ }KnXVПqTdD77 sy0+ěGL-XfO21ފuN+4 ) ;̷n3ijv)ٺgTqO:OêxC?;Z:I\yrw;~yC aL:q)L:Z?B!l_R4V &!`Ys&ړQЧ8ە<qnv'/BL+&'(SpjGi ~3鑬TiLuRϟZ'pRМ18* L )6F`Zy3mi'Ctp'-jww7Si~1?yV mj8@M3QHW\))X()\4c=f}'0G9N2d_di ݪu1Dw3UAmGxS ̍5W5wckF˃E5~_^ f)zNöob"O4YjBsѻ}DEmmߙv|\7) 2 M7+ah3J*}p 蝏f%by^7\zO~V$ߏ}{_1٢xCUjPKW]rۮ,h"'W!b)A>86H콬OnksNH)Ϻ ΄]p_KRF}5- b;"&tZoSpE2S %~t$ˇ dS!sPDÆЦ]w3#oǒѦtZn{߳LB~ω8p4HqYQY+FLvTHB6vWЁ_~lGV7^Z6K IX!Q pCW t[;Kc$)I1.x&d+۟56-e_~jGV7^X}يsh> x 2hqﳓ "R@BNb6eƅ4<SZ$5xݪ{cկ̷4`sT O fsx{'Y?\ pǁ3i?Ll&JVJ v-8`E NH.̤qA vӉIDAT$BRqYP=o{x2+iOoxﶜ}i_e}*O=-FU<?ԸP6ZIvoy}5{;-Xb[esBt2U7E#4 ]#UծuARf}_MQ|,@b/xGKN+1ۖWy2,t^4;u]p'}<)L#tMHw ZѡgfޖW9J}A%ʇְFd ZLj*+^#']'̈֎ބtX/\tӓ:ͦA'EGww3s?#0c|I:hyR'Sɢo@3Μj4v} Z-+o&H&&0X`5z4%=_[H̤hEs"|lGśa Z!jcHHd_?{4hUP!yTaDE27 Jw:S"Hњk!] ΞxJ^Y;n;gMQ+L÷MH Eջ, ;)Dҍ\t47ڑ]A9+)_v>>bZ絺}I'tHV"-20Rv5exCt5쥦Or;k:52qH$\߳a$_(SS6:p}NoBOpkPV63^hu!]Ǝ] %7Si;iGh`LU;|'^-Ӯ1HK#UpAo$21uksq!)u!#MHqIҵ"D7jvO邠˷tt+Ŧ{|s4%ko犭ImXeِ.4嵬tfO%ƅ4x:D;<o{cIת`dàtA[H^XF'd"早_d"⹤x6o{cu7xK>,ڗJ*O B'߼b~#>gX|5Lm՞J$^KRzMH[.- a3yU=_<)_7!YE#H +()9UK^ϓ_^@?vye}XI&8*AԸpxU bn6L<㶦o9{ŗyx_y#_tAVUwz9pb5;q J7Nx?o^`*YmƢ Yf/ru0|'tWg2qd1ͫ< GX^ng0rpTuBN{RN`*YH i%,T?1VI:V:H-wPDw3-NOei iSjKcDΣy!]Ұe$~L0d&$4}#)Lx[ĝ+8]^0_ǕvEk `QcWg6s v>_M':ovEa:%n:5_\8 _FUW=|ꝸ!]ɷD2YXf`p"u=lMӱdm{wC/;ƞ'R557@ZFDHBnv3[jxcmtՈfC8':J!3=K^_03Hd̥ -O+Ib-L#pjC ̓QiuH8eH -7X.5tز+s)v&AˠS~Eⅰ#N ?)75]cgb͉FByڞ\q8>{]cj,7wɷQreZ.sb,/5 Mr{cm4!t5ŭnLܴ}@~8¨}%^w^gO_/o$c4A[q/sx\t3AGlϖx/#/ ~!Vxr97dR)7a~߿fv&q[Ґ/ے=ht[a_'Ru GSR3/~wC9njv!4_.Q&`);ӉfyCh^̏Pt-S)\d{Lƅeh49o9'zF1;7L!</IƅcL&oy׳HE'RJK䯓oZMM~떇c)r,cBu %.t}xSDknbEK%]4|+H~"f&I/I pm"[.ivjd3[ U^V (Ruom8%߮]8Aְmλ]e&S)6/ Ψx?Ou5줦?|AHDw)Qfl`UwΚv;\9&sFjW:]`YJU JY)隹(?\Tn=_kwKl vIy"]_g;|ua~ Z.%]D酔srCW ś^hEknx]dt`.% fQuꗥĪ7?^./t)q2zQ>{Nu9zc7#?' ,]7œtYv29n8#%cat9"USfL|ϑ}sFpfRdɺ&x?(V$Yy< ԍ$cɯ0U^p H^,'^. |-ݣ *-8Y:0tsK;rƳh! x,R|b=OJu3&72⫙Wow^xUsh{r*Yt.cD&qt|ӃZY|3=\̩JgH 2E3IN&I;ɴ tЎ@W.L s _Im;Z1,ب#E ~jG?њYft{yy$Sհ&JS2ۣ3E;B)^"H ׍? 2)]'D6ΤvŪ~(-Nh%ٿa?_mX,[ytԎ@W_Amǀ|Y3@tH%ӵtQT:Aע|KWNc$cm4c;fT*E)#]ۑ%JMX=*c~|> t륄ܿMc}4/zZcsWt".+?oxگU?K5Tv"Ej?%ݠñ2 {ajI#UPۘVq#:FpO?Yd;*tɰrE۩i%f@ƅ˚,c$yQڕX^[lp}4?xx{~X;5XN!؟+g|tEIit/'r̥vdm&o Իt+W|N00$] nT/'rKYxɷ'xǒ}lؾi%g3d9VR=ܡO#tҎO[,Ru1en4l1vPӌ`,y,t9S# ~iUr|E.PD@n\gvn {H AhkK]f9հfǻvDY*]'#v ")WtWӲ_k">o{%YMno<4E?ayRi9$]# ?2x|5 J;Q;Ģ5ߚ\) FILvLƅ)8ٔtWB 7 W.ߣ4cR7L❭f$ٲHAjkXeaBL hK<{;L]F'D䢔AmkPړx5~eXCᓮW%}$$ݠ,YqrMDbɫéRۣ5ߝtLKX$WHxBv xr-k+&/h#͛#(%uLs?Qn0)ݠc(F5Bo^'Ni:vhט,%%F말nہRkׯ \NTMhw19.w]_rJ7P^KY;rQO$߲Jf6ssDX| ]# ,ޖw@ym44{+mS=y!9}'^N(v>{g4ktGuVP;PRb@uĜ?19enXf:>Xe?b=1,ө~kҬvȤiu~~]Sh{^p*Ytoh\Ucs'䘒n! ~SZn 7=.z2..o9kjڡt!^[|sATX^p0Du{T@Nn1)u j;JGSDmB?--1|yLF~9ԧ fLN--m|ݧm,!K+9y%.naDG?ڮ9 'Fu,|=nnQy!(1(];p2rhͷMN+>$`k˫ynf6sX ̍&]oE r;HI"U.|g7);*Ώ׽ :(]=8)'#b"%#ݠlvOR u|VǦۢ5͎T}JZ)bK L$&X5"0rr 5^X~߶Q;+En]x1IZ7Lɹt3-Y7dLt҅x3HWj1/%ѐNđQvlfA~IN~Kvؑk *Y4G/'J n6ŪoZ# Vjfݚhۙtҵ|ݝ+H7t%룹)LΤ\E)Ԏұ2&]\(;kKgm>C;( V0z-7鋔ΤU#ڎ͹t(5@Xb}|3;1&TgoVU#PI7pRvċR]h?*Y4UVDdfsJEyҙ0iDvPˤt|e|[ .JiYoߤt?I@3 TfEհ/w5l˺4qSNvV5#hym=I@^"US(/@a;5 Oۇ ے2˷cNFHy, 툎'i!w/TڕR0_s'cѓ|SL`׳VnBo@+ImySɋFFx伒RAnkGgUҥV5.]"[ws㋄X^ph+ DЊvMO˻g({9ԗ*K)5jH}tjAj_2J.$L(=&*[uc9'5ڹt&I&ݠ#LI |3u㙞/I{ikwWuk D}n/IL1nPѯ6tE!@e;KeIToY=y=Xҍ.'nPχԐeɷH<:# \pS/%+IW^D7]Ǽ2愀O5+wb׼>BNO. +AcKyWsZVi7 TpLhn:_NCs!ib)r_[37Wb;(x:B Խus;sߓ7.\vBv[~o$ActB!9z ^q!êIENDB`Pygments-2.2.0/doc/_static/favicon.ico0000644000175000017500000004107613041166700016717 0ustar piotrpiotr@@ (B(@      $6FMMMF5""5FMMMF6$  2OmiH*)HimP2  :`58(t :wJJw!&hv8A a:  <fHDFEEA .jj Vdg<  <g#[KIHGFDB ~~h=  <g VLJIHGFED)~~k}h>  <h/uMJKIIHGEE ~~  kC& =h:NMLKJJHGE;#{z q uO.  >h4NONMLKJIH=b_X3 &Dl:QQOOMMLKI8 rA;f^8  /OuL"RRQPOOMML-yK%<g w  d;  7\ CSSRRQPOON9sK) <gizg<  ;d FVUTTSRRPP,qjB% <g drh=  <g Y"VVVVUTTRS&gh= <giuh=  <g LXXXWVUUTU2wg<  <gGQ -0h=  <g"TZZYYXXWWU Fg<  <gBJ*-h=  <g /^[[ZZZYYXW!Og<  <gAFh=  <g.V\\\[[[ZZY%Og<  <g 7<FKh=  <g%F[^^]]]]\\U&g<  <g" >Ah=  :f%L`_^^^^^]]Y 7g<  <g ;>h< 2`% U__````__^S +g<  <f (+QVf:#O0f`aaaa````S g<  :aY]^/4j/^ecbbbbbaaW g<  4V aeE?{ heeedddddH h<  -R"$Q?{5^ghhhhhhh^m> 1]HJQ?{5^jkkkkkkkd [3  >l ILQ?{q mnnnnoopd\8  <h  Q4j1]rpqqqrrrrm  d<  <gSUE#N8etttuuvvvvdg<  <g 00EG^/2`:wwxxyyz{{u h=  <g++JKf: :f+Nyz{{}}}! +h=  <g'&LLg<  <g.M }~{'h=  <gON**g<  <g ,}!/h=  <g;9ƿ **g<  <g5{ 0Fh=  <g E@ ʼʾ''g<  <g&# $0Ch=  <hh]Dzɷ ɹ ʼʾg<  <g !  !"%'/@h=  =hOCƪǭDZȴ ɷ ɺ ʻʾ c;  <f#x !"$%'*,DUh=  ?icO#ğĤƨƬǯȲȶ ɷ ʺ\7  ;c |"!#%&(*,/2Z)ih= "Bl){_/)™%ß ģŧƫƮDZȳ~U2  8^}%%')+-/257S"\h< Bo&mM93.)%Þ"ġťƩƬrK,  5] n!)+-/257;=Q Tf:>l 2|SC<83.*&Ý"áĤ{jjA$ 5\h-0257:>AC@~^1;gF_MwG}B<83.*&Üydh= 1Qv u)257:=@CFHm5fI] HWToPuJyE~@;73/#s^g<  'Cjn/69t~_G2G/y]bDR+Υ5Ooe7Jt+OУG<|b0R8凎,U+tut_!e7⚦-Q$ zxa^z8=?ѩ/+veY+F^W0 Qz $gOI;C3+.S{7_y㺷<_y.v.p%sss4??eEQ800x.=x%WD٭+v-_.Um';'>Vr6% Ր{V7obrr뺎QQ4@zJ2ΈcZxvϴy9vݘv{9=}g_ٗSqϳ*³{~U*z5hFSSSf磡!F3x&3?'wX4񜱜UI5v_>Z%1bR(/ψS=CT6tfffǭ$Q,c$ag.V_{莽OtS<ϕ'y3*{^K>OO?ye B q(2b1@G畖O)Mڱ'1#ZQQ <$(~S_K$Us3/-mɯ“/B 柜X#˖Ʒr|~fş9 ڱ H$x<fHǶhϞ={p[&,=H>#~SH8ۚwZi-_7kJnh55ų,v "HgEc$ኒ܄ 5(,3ٚEV\أ*56³F'?c`PKd2Z,t H{?)G؋`}<2ɚ|E?}Jzz p㪭V*Y^rԨgxvSO !dYV2 eYH$y?FʤY;RCi5HxTJ o荴meQxW-[7J<YWzΒ^ˈN^$|a2j4 * <̣Q}$*hb,xzi{*V>ǩUw\9QnU+WUL+cbl^fͤVzshG>4o5O5 4F "Qx16GY+^J5׼ʳJ=KT^UW?u&NC@⹘3N.?aDY"Zyī4&˅[:iSFDOo!7]Ԍ+{WZ>>*RmY<[YXWQ{swwC~&j{RN^#iF._y.ϱuEZi.jEd,kgh.><J]<@gs/Iz▂3 0kZ".v{s\Vb[V{_ns| l#x(=ڳ_v^eSM5آ>^!2/ҏ:D,;}wq"bĈĉ1F 81Fyb ;ƉsB7PΈLr2ºUG4 Ns'*|p. b]H,aƈi?MZ,˿ּ GmȋF,pup,d254Ml6[w9ߏQNx5HA@uZ\\0 4$^7/nw=_wؿ!:2%Y . ydzluXpy, Jn~/j幏W5̪"F:;;tiFfZǒ$P($IuarަqKӤiچC3x $Iiwox|$I P($l4Mt:M...2&`lz ]iaaEݺ񮷯"ЄW#<9o몪0DщvM2,)c6h4l4q7he3׏v^+4M={nh4-)lĨn>V w>KUUZXXpqHN^\o?LfFdgyT&uf!ȳlryϡ  <;u?yf ^iLDӉ<j=x|^g1r$Eh˖-lhhu&''>vɖ$٨HH6Qd\!"bu#Y5Mx<Z֭[:U\)]g{YYyюkW^4=4E^Ωs?Ho[j^gx/_t0ݪ3Ή8/`aFo ^ZǨgW\ Ӳ򯕖-zeYzlkZƼΦx=5k7ж7}Ϋ*uxF?W.L 륟2쉏[ lu}N*UUf&\TU]6c1777Lu;77GKp ONND"nF-,,z755S&)GˈPJ$`I(Ji>33ý!ݸ~-kE2̵(xSL&;~ľx<>H_ҍx37"Cޙ[qez"Ԁ3o,ȲMw[X?^O!7~εitAgR'um*lTK-EGYE/|~0DX6d:m=EYfGӓNxE&*j$L:gӼ^/UUizzF;r% >==Ɠvyg'=(V޽szEQOMMq W1`Cx \=g4Fވ,Qy:|+._m1/kVQŶ_9@7~a r݃zob֔oʣߌHxJ_\c;vY&/]&,xT^CdoR9oc+; x7~]:/J [/NW#pj"Q5}6TFQ]js5:؉ރ64WzVkH<"h4DN,=5Dv}ٶ `0H֭'ϚieNiΉA<$n'4Z-L ) 1I7t st[k:.ID4d2IN7SI2E#vMUӴ Nj\fggY˜sS?C~ h9nD3:cV3dgD _: 8 Z )#4??/*,=7H40MhvL$Ip8"HQKLAfLȓ$Ricϊ<&GHd,Oje_a̘R 'DKĜF,P($\w8n b&t]t:M J Ȉ+FI(leUU<0/:w[h4BPKѨv׌}4L;uhŘ?nٲ9]Cu¶'I_, 4tu {mֱLtn >Oϼ_+K'JZJ̜Dkșℬ"9"دύeXZY ׵W\^]+OǏ~?잊y];*.g(3?GԷnl5DgH433#nk]6ɖn0ckE QѴ;wnᴃd2Iw:Fl†LHey,NS߬[s|2d79F,R'~WUUinnUr;t]Q'Su]hoөiRUձ422kG'1ey2R*rs%R"u{C@ @ìu[ϳ;Zb_m߾cN|}r$W+IN(*U:*eše^Q70ӶM,mf"gf/_EWB:O<+}]"xw. UZD@yH<{fggұΝ;[26ht^ivL]i׮]EȲ<6444Ifi~~~)>=1FlrRQjJyww86D±'CX,6+ | ֭[fIQG~G'eBmϦaq;{^9u]'EQ:tZAN|}s#:T3fbk^b[L5պRJlycǎ\#I(I wtr)/8ljFrE}VY[ Zw*#*cإ{!bЦ .#N?'g!IT4j7E-t온*Mm4u<:^Q9nI; B^|xhse[yx'8щҭ'dܜ'xrM,k\/D+fݪX㞗n喦P(ԱrH9 dgW IGfWO%h/_CZ=.g%s8WZQuO)6DSDwH {`qRըWbk~ZT^CDw9~-7y`S {-[m+NebKrޖ֐wԘ3ȓ{<t]iD}"M`@u܋QQ ntzBj^4vg8hh4 @["N )eYHDjGK j\takH hᵈn7|i깲#r ckQ(NC7;:rʏ.ge^cZ+Eޕw6]9"_g>CWxle 5Qc˻ό#D>ydY]v9ҕ\.GTscJa+XATH$B4j %G[lX 9^W(zFJ=>V5MNԶYB,^*!:Ec:O:$/~ bGrKǿī]~L`*mYd^Q9!,\ؙ\sQy}ϡa 6hλY_N8ۜfyG D=ג` jk(EQק99);^$V;6 Goژ OДe |> Oxm\Bp4^7iǎhzablΝ,t3AUvԥ2?7eQ@ eM kme{d:ǹ\Lsk0&|}=jkl!B4R$We;bOEt] R4eɮhm>c̼d=EZ % ,Yɩx^WJ{ZJߖvMEf~I|  _:.{B?Y[ $ GGϳ ʻΚ;V<ӄUg۲=kTC|Bqv_?m+ "΢WYuWO%M祠3w5; 龃oŀa AeD"azz)H$x;e0DC+zh`  u]6_ !O_$J)"#](1hQ:& Q+NFs.hÑf7KL&x]1 9:=CDĊkhuCxYFx+(VM[F$+=fĉ3"oȉ68K ^7/@kkx+M}/OU?;FU^/T:M˙\|j˖j@Nx&\cַ| >)eYͼ'YDҲTUpH:(DMNЄh*`2?<<F-K^O4 !!ǩh*m (Vč¢qFB$9rNǥRQY/hSϖ 2#[9W}t^Y-/O%hYQu_~7B^!ΪҴ#V]٧ْm7ryW.]*;f/<=&~"h41u\+EUU}JvDFʧ^-U4wa IX$ EǏSQуBciچ^]\zমK#:ncJ{% EYVZ7πYRmyU:7C +v}K_{g[38o*DU4k>jel;׌3gA<2|>r-lxx7𢓼T*ɍ7dR8uJ42 Фj!J@'ZrF#M0L }1厴v BWKkݺuQ)9ADgϞ؃ͱ,%^^3?z̲ͲTLk4:~-/g2w fx׾ïM-V;nQFDݕ]lyenV榉 Ǣ>-cbNO:ܜ~Վ^=zIL͙LFh,z嘴k'v^)C%ьT*IQ&Xvt9ZkNG5jKɼ7_GkoBl9֭?}]|29ygi,bzȽ7_G^9s~l׏[mЭIq,c;v`nT1TjuR&uەv&ک2 R/4Dk%:Dz@T ֏s=`ԗ@`_/ iK$.cH$x+uJ Үk:"‘YNlFFFȲ,:毕V"4{ inOz1˫rB4T96=J7ҫ_8yVqX6tYZ8_ʒsZ5W?նȼ}]Asa?"x٬zQwV'&/pF^$5piRQΝSd|#F7n߾X,6p8,\IQ @+"o9L!;H$IzuL{!]Ѩ#5:q~e#ToPC3DFEQXXX?<<ܵHu~.P tB8CwC6\.zVs t n# Lfffx0!yg%^6~Ȟ =n7bZV"<`&yGljvUx`9ȋs̱_:@}Yg:*ʖgDGg1◭E IDAT&v FDr9RUռC4Q8nZ\\ZכZ Ipf x~\@eJ&R&iȼ@ @CCC,/kiۓyw}1&jjek6èg<^6vU \[q>yvުUԾ5kݑMgZuMe\Zm:6+pdZ =@кtZXX/vތF-dDk5.bvS<瓓<.N=' Ϡzy;Py+VCk} ,G"GU+ޕ7VND5YڱV6Dޙ3G1`YF4Mnԩ*nV]F!J@f nB&zO۶mcNdzy1>55'''ܜ+ulNKL3O jzͯ5*/ϡo _+X8pOS>z~U2Ԣ4YUWc+VA˒H$B@@LQX,6+ ItO $ hIhǎlzz~y8??I$e=;_?oU^mD͸Euo\q^zW(pE쫌ڜ]wJ;;Nd5h%X2TP+Mހ@.9??!,c:%cD' $hOtڥFj{]z˚'Կ} pe_ef.[~.9*[]#o= Z\mP(Jus*"$E"E ":t~tdi'?I>;;WUUf=O=/FͳS®2<_k xT#tWk.HMyWw"d!2,c"u$$R2d&$VT*ixywV.׌|/|! d/}Q}iL4\'jˊ~J&/lFBt]H-T*%B47NO;v`mkxQ!̌bxVG5&ҝNu./c>456 "JiMD9)jqQzMy`!Ip@UUGD#dYssjnA##܉Ft뭷nww6bx1:s/KA.Av^oT$Z>8Bx4kmn4"6M婽<\J;UUuO7M-yBvXڱc۾};s6󦧧x|)G7xF%[+7Wz/j<Z56_Z]릴+gy`!˲pdX;oD# $,3>JB!ڹs'byLynyxy~:QBM.^;_c)!p皫1C5m'*9#Ι[<2 M EiKl6K 5,cDv-Q>6i4[OH{ 5/DqJUBV]O\T]tJU̙_DX.  ߈%I?7> -` J @dY.ʲ<ϓdhffvgiK%֗{N |^V|+ì_OW" DYΩH=˄@ @7t:~FFvюʑ$mۆ  (M|eì%HTURXWK3 W99WOtF֭-xE6=뿾\->n&}mffwᅫ$^^K'H\6^/JA]V8>fͶQIaǚxE<ۓI(B煪Bp" PP($t$I,9zCܹb1 5ԁtAUw2=mxogklzF-#T]̙lsD"e2jB|> 86IeڶmfmjTjFnv TuF9 ?ne_;DiWtGxnJ? "@кhFE"1/v&t/b\C^~EQڹs'۾};eyPe2u/.1^INv_Cw~AN֯]xGju/2yFB~h&CCC]ŷ @$7|a2^x +gғm9< p)2IJB -dYfnW@44p]<\C^b-ݻ36CG%7x6PUNk_T^^)UUUEұU̙=B4jL&Iyh6j\d'"iDD֭ۈk`WR+"OӴw {I\tR5N^mgߏ#￞BWc}+kU5D$I2k4塙=3,~7'!ٙN@$Y/Lr=FH'SklݾDwMD^tR5DN7lɤPav6NEoD | d2ԉB$XlH-P""M6]ef?Z: @o_OW^{xͭrΎjͨȲ,Tt]ߖR)$ Oxۅhw\.GdIHtBۉBOhTh*wСlmxShi낭99'#1eg_F1zW9&gB 47ZVMgi7-R(0@(J/[XX=s  Zmx>m\zl#8![BLX| ^l"Zi!'J.{?~ӸFKUUtZ0#Y:zP(YdL&B4@@(B$&񟎞:DKB@Se8X^y#D9ri7Z, u`UU93F&Br9} 4D$^wnn!ZFMux\$ ˛+Χ+ Z'ʙ3Gg>hS?8C`e~'j,gFxp8,2J6y"7ȁ@@\'D")L,bѫdY@Bx54⢫>O2x<>:==ͧy"KM*Dp\N j|s*j^6x}ͧz9vn *,~ҽ"A4| 9Oggg9">EpKzg6i{nx&L&C쟙ᳳ{~fnԁǟnvV .|ͧٹ;71Lt/UUy*j:Q8 x<>dp,4IUe/vF0hܐޙfiff{J6xT*%^+ʍ_Y:q윦/Vf4W?oM]zyS_Fx@ @`5YHd1O%Ib,{금㣢]DQ6??[8$Iݓv377GEJDhsH"d2fFCiF333|KI B׸umljC:!EcQxgoV\W@Ü-Է|#"e>Fx}٩\~{^ ؖSƦW;DNSSS|~~"=_4</sfiF;𗝒$hgs\uhߪpHD[fy B rgY<ڀo\GJvUUO$"IҘzbNiZs+i{}FggԱӉhNF9MxnN333]Z#Ԕ'&{8oTb(t@5$Id2](Z.Q<DËX@_:.Xz!tꗸOD:-@D"?PdYkenv=L6)#3F['P󣅅,V!xWFZ.Jmduatm!llt\P/Nx Nf˧jj+V=1lURBeϻVZ߮' ݞN{w͛MIp8ωm:>555NO$MHv:%]$ɑݻwiלFV;GK=ƗN 3k=AOF'ڸmO[nu|We,Ѯ]"ebͭ~``w{rNizz̴ћfqMUi AUUǻԗLxw+2OuSSS-띪pեgw'cW@M^<2ѻ{9 :@ IAjUرVSJ\4d2 Usss444ڝҬ:-,,(K~blݎM}0h4:Q R*"EQMBbTeppOR0T!JRyd(B,(tTUuUqXK Bto<D//޿]WN_tZk7,8z*ɲI6B!h(D4Z\\$M(Ns*044D#t.+^Kik֭(Iҁ@ PzfIӴ4mS;ʲ<"}MNo$iL _~?ر9_'Ѻu6|)Ns"v7|>ںuN/xu@HgS Zs|gbcqw5IKliD@ę C| tGu'3e":AI]'Vg9ɘ\v"רuõn8E$Έ)SZEZ *K /M!k\.:z(3::Z ;wB`aaA.sY"rl~Nݿ?AձRοGzxvvvݿ>w9uQx45;;;l,ґ#GzkݧըEB<6Ȧg"7/<N!mAm_lu/IYѣGk2Ck}MXLpA_kϞ=-pzzˆ#sNU7sN3Lϰ6kC!TP?`VظĻ5YY9I\.z饗jj zX9R7K/1<XcV՘~?KL{{{֑[ɰ!^S.v:|r!\.?Ծ7(ĵx UKmQMOn(u7Y\Wkk+ 1ޛ=d*N8tvvrݚiѣGzʫڇѣGZC\M~6w?\M޳=3!2]`AoՏ]bi9-9@;j&p8/8uhϞ=L,᪅XG([z; jX)U_/~}.Tg/uT##~X*ndizzڒl˥m7Y&N3m1xUmzR60|FmǝFJ. {ًMOOjV~s\444ٳgmL}}}wttTO'A핃+Z#S}}}#vd:L?QGGS۪ceY#_a^kk+߿zbzgA^b>": ua۟WNPkss3Wŵ8qٷoy*y ,K~N89rvڼ]eDaB죓kC1lb0 :wzTEJߨ3ݶi{.={诖v"ezu 8qB^e@V inn={ێ_~eͧv:z%ѥ%*5}=PUGVj蜂:WjyZXX89???]yt^쬊+YY:w?.ԹWUp)x8K=Ļ\K -b*beY۳gsX,f밦EZZZ:4lEyss3\.`:::L!^1^9^jsE/;9 DRsW\ ƕ1yʤ6_m`ӳ?b -Qy&yؐp<-}9Vz AյEww7zZ85w> A5 v}̌[7*t"khN_FunuufgguMQ` v y"++~-ZѰF`73_~!V3#khN8ԻSXN˲,5HA9Y{ύֆ~ nf-_~!`FgPY5mfFeC]uA >i].~ 5i UWAP9R'nfWyhDݹsG\.&LKKKP P-- RAycֆ~<6c uV?yM\68й?Nx={VYߏ-R@@%4}~_! Z< ,_~AiY9B83ئ'䘝5Yss3uwwꪑ9P`;A1fӳ {w_ iye|x93|֔6OӮ{x9{g׺\. XiBS6؋+j})n0?7dN W!6OΧ8q;* Ko/<""%Xu͇*Z>h ;Ϭy8v%:<I@]}\}XAᡷ&TDC5} .|_ o?=)K(3 {%Xu5"Y1\BB`̃ݛUbv Ov[/< OS]۱h}a*?t0-pܽݫOyx2P p6=Pܫ׶8Adzzܹ}}} J~5].ViΆ#DDkC?ַrDk wLS8RJP 13&)9h"hPD~!z$2dY۳gs5=ΙHDݍs0TLS5xmACn#P q@\(0+:-RXQyZC6+wyh o||\Uݹs~ 򖖖t/z"ϡ@%5iM ibpOf3_'ݦ4 υt=uGex~y'Qx,--Fs/YM }1*/M_s: Gôlő 5'7?9%ԕe74n/#xdiiiqqb`N8^U2 ;cZPrQGG^u O]]]/]Tr O6/Lؓu/j|AԄ_ogurtfxxPou+++DDtNZuuu9zUryJu[Tkkȝ;wvGrJ~`;u ̜|I($r*R娯Ԝxz ا)ih܎ʆ<;==Qza >o_x{uw*e+9 ȃi!jZWEfqqy睊]h NNƱՠC<""!kCa}A q;⽛Uv_BkRG(c4}5}G$yI/ r0{Aؒ~V> 5!z/[~P iUZ!zAE7hZ5Gt5V_WWWݧFZ[[QX]]j @@a7,*3VA{ܱ-v%\Տ~,e%J  0?ò\htvvr~t@4;;[V/E~Dx5!^cHgTdJu-U5CV@O< :ΌOIί#'͌y#]m*U6(_Z+ <0nfgO}$Z2BtZz;'3+(ʴڢ]m'4u~ x39 <> 3tgNc1-[F & 6]{ɟ*!AACl;|vy֭/w3&y#"Za!mxD=ڊ[h<-=c{@t y"d29_B k\3̣(HLucRM("yv}W1>UkC>~=꘸~n]y1 GSb4nWXQc44nGWd2I ;,9Nx<(P5Z8ueeEqDe♌ 4,݊lݨ#ߠ>EbTzx!wY<ϲm"eQ` -Ϳ̚# ôl-L[}\ŶotZÄu&7E9:|^0 ;od AW&MO#j όۄ A^oЭ⃜Ob OB[[=Cb<?a$`7L8#mC@-prn6[ ŵ[٭f-nqG7(ȠkI= {gZszuP8M:G"kxh4E"s^!+wgO__x+]y9=_T1ͺpn}3+"csGW<r$iA(NR_4%áPh .m*J i-0{i|ȳ _'$N8Z.\DxT\x#bX%C`cǘ`0x$q @Q*BET1ed2o B<0-[yZBvu_Xqy5B xJEυ DWӅo!& qrrR8 P7h vl ΅!JNv}_ <xanv5ym3<)3/y~G:L&7,q)Bhˠ$P Ͳ,,K@`w @^p.bRwTwa327~%'ilGWIChXԢؑeы'嚝ϡȅx*"yhJv+e ΅ =*iJS6\藗[Bn?Jx*|?w!j"(ƻr@WA-U'mn!ȫ"gݹ>v = +o[ ¾ΏgѿnJsw/D;@fcYNgL&!ijyJ|I\E}؇'Q#xŞSA<(ñ,߶!ij3-?HW-]$umhtA5QU*+Yq;3auZaÁ"0pKxֆ~]+q2OZaV԰Oq;=4OAt:MnX-{d2n-?d빏y<6""MǒzH$®t:K1p:sNšzJ(L^/u6fB0'"ဘPWW@ooY!OR"c}NM===LWW}w7 &V6F$I,-sI===cmnie[N433sxnnn\1,UR|x<.JD"ћT*ESSS t:{SvS^xZ͕j늟N3:yJ|/Ϸc8J$"Q0dbY+9Ǐ3j#"Jع_Siݮo2oԶU:\h;5;Lj Q 6`N+rB[_~HD$G^y7ޥ7ϗZ+}Zq;*,;#i@. u4;fͶ47qZE-~8 Eev!*t+'wx^ [=p8&rrW:eu)0қecR@";^esG*Jf%MIDATgre%"cn?p:WDQQ -/D"!z<=8#6,m's|jn,^_vM1hѨhƐZ8N}.T{xv-o3!WbAٽ: N-aNnIQHDCza/M&ߠE]ހ4H׈9SQx< 7H$7b 0\ElWW@PILnAE֛+`Xg2D"wQJd_[t+6U"j$qf$q17DtJ{ n3 R)AL& Tc,g[ |===w& ̓%{cǘ"7W3r{9x4nf'IR aE'~㸼R  OXQԉυuҹD*o[h~"/4kT*uX^V{nrB<0%VxFjymwvVZtL)2xzY!i.*M^` ^KAћ;dy=̞7vU8N:tP<ϋ>dp#J>xًt|L4nP <  B%1?pc vh;vrd2,KP5P(4z'&''7L8+ǹy>uӖ08 MeTqr0'^h9?|iZpMcZT'*LfyaV~T U~C5z+?cjdJUz{{ ===y7T꺑ϒwj_aYt!/ &C239pHK,ZCb&V6&-aZP(n+jO5ǿ]<8p \oȕ^L&Ǔdz_~^fY:VB$)zV |u9eP'vd2\*o@ 7 fPeAxu !^iF0dFcꙧEZݗT,+ŊiJT&''/yu"}b^|>߀rK@`|{89#:TA8Q)[^WqHc2|^uR]ut tw *SJ WڇUiJ:)_GytS,1ij녗"|.t<={YhE϶9@[ܣ@t:#j#ŽR7n[Uoכ7cfffW0^>)ἕ`˲z<=,T*2y߀х?z{{ܹzxza<īBRZ"k<тo'Z{nxԶv7w3%Kk =9@[xh&4dDj<+Ms^z[og5ON mi2z> PXԄ =2Y k8M~+ |ee*,^7}qmSil޼zDDSSSʇcj<>AP:ܹS=wݡNT'6k#&~PC/̉WZF(~R}}^xs,m}eTtR^AXq3mvx`˲y=CT^p8&zIإ2ιJ W*YVSڬ9SrLT*r<ϲ|D"!Pooo&۶c '|~h4Ѕ]CǓyW=IDmhw7˲Wڿg8-~ B1ȫx&“[zN qi]:X(mn{f\@-G"|gffg(z;ݸ @ѡCڢѨ(d2D"A>oj 'NeonAa[+oZ E1iyjuRF1ī1N2:x*r6q37mF){EC0NzM?77Wu9+̡@+D'PJޯ6LwU{EpfYȝ+NoHޗo鹊҄Jr: &̈NΛ2Z{#G2BCVEn׵L>33cJ (% H$B!LUƂ YBZIy7_ѰvKYkMgb%+To)yLv_mP Sa'L{cT,˞C)<* i#=^)J 4H:ڎ`UtZqL&盚zXL&=τEei"`GN[o83LVơD"_XDe+f= >!,U*JmG)>=$PinuP488;v  @GvwJmjpp兰Jl9 ڬՈuRkv4u fۆu㪊65O| ]X򯬬PuވǏW\#;T0NډWqHq\b(b^oL={=$SP' )B:E3^ L텗}KDWdxPǼ^oޯ!LO9}1_ݐJ7zѡT&t'^^7Ϙ P:(`N꽼WVVdՑA3whxcb K\w*f|CL&CM[) dPbÍpWW@{ؑݝoAC# &,`1'C۱/#=RqwE= mz)?orrRİC<OLVa#{ !^bZ#F63qF犴2MSjHCj1R>M[☆MOQz&]LCdVkF?vǰahL.na@| 455K~5>=0uR%=PNQ2`{A})1yOoA)MO3rȭ1Qi9^oޅc*d2yEv\yت}9xaWtA'ZOh"566&&]F3WC۱-T&<2t:o uw ˲ c B.R0 j,@ Nt.#?2<xuawF!3k *nFӪ,ܫFz>0Ǔw3H$&uo3 ܸW}9杖 <r= M&qܕߕh4jLz جn;vc-+>L^[ P4p7PH'J+'  ԳH}= /쮜 ubuҜfK8W^yE_^oF"q%r @dDbDD`aŎl)FddR)Fhme۱3r hSj36&5Fb{PR:.^o,.P(Ԧv$8N7xCL&%{O:PFVZ1{Ck{6EYNRaM,.|6׊P(CA(HDn7y<,^]_WyS?ZBZ9D"R켃tp8佺vt:M%ge۱mcdhrrRdYny~\AxX{LMMd,Kv8pPdrLq`D+++yǃfϡyC:~ڵkavS !zL:pEQQ:&ǣx7O:/^K<=N(* tϏ"\A^zxWQ?.Q\a~|鹪4\ =@ |d/wfffzK?H$"uR:BiUY`Y S;u01NG(8WtA |7D~ߣ6t4jizLU{ExPQJ7,˞v::)i`0xU>iܵk״euZ|ppWeСCeA& <ϲcU۱{}mDDHh@ {ppaYV9W86 z uPh" j^7D3?sU͏Zzi>k΅@vw|}(on:0-[ <|zta۫GiOv*Ŷvp8:ˢBVNG3}P'֜ ՜eؖ? 7YP*.[xBTm^Qev5qI1O4nEAF7,,?~@56ʦgY/sBn_wv5x|;̦otп"_0ψߦv "0I7ӆ]]]!vʹdP'EZHa߾|oO]HvS>EmӸh_?M/h7k1@x`]_]_MbU*lz=׈D"|[ 4h;UMoG`:}TJ¹<rm\.8N:x c48n yD> (d24997 zX-JqW6Ft:{dr|~6APtD@`7zXMb 466&ri? P"vE1(( /gffv)v)0P69Na^/Z8&Nq>XA ϠN@?xeq<={1C"ZD" &@t:MhT,$g9<(|S !@$IR iJ{zn Bh0V(]zc0@;p488dA(e)0>NQ'`()*z1׏ɤvJT*uLIv6E0B<2y4=tjm 䭚* DE@y!!9x6B<C`s?ॊIENDB`Pygments-2.2.0/doc/conf.py0000644000175000017500000001706613041166700014451 0ustar piotrpiotr# -*- coding: utf-8 -*- # # Pygments documentation build configuration file # import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('..')) import pygments # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'pygments.sphinxext'] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'Pygments' copyright = u'2015, Georg Brandl' # 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 = pygments.__version__ # The full version, including alpha/beta/rc tags. release = version # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. #pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'pygments14' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['_themes'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. html_favicon = '_static/favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. html_sidebars = {'index': 'indexsidebar.html', 'docs/*': 'docssidebar.html'} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'Pygmentsdoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'Pygments.tex', u'Pygments Documentation', u'Georg Brandl', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'pygments', u'Pygments Documentation', [u'Georg Brandl'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'Pygments', u'Pygments Documentation', u'Georg Brandl', 'Pygments', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # Example configuration for intersphinx: refer to the Python standard library. #intersphinx_mapping = {'http://docs.python.org/': None} Pygments-2.2.0/doc/pygmentize.10000644000175000017500000000665013041166700015424 0ustar piotrpiotr.TH PYGMENTIZE 1 "February 15, 2007" .SH NAME pygmentize \- highlights the input file .SH SYNOPSIS .B \fBpygmentize\fP .RI [-l\ \fI\fP]\ [-F\ \fI\fP[:\fI\fP]]\ [-f\ \fI\fP] .RI [-O\ \fI\fP]\ [-P\ \fI\fP]\ [-o\ \fI\fP]\ [\fI\fP] .br .B \fBpygmentize\fP .RI -S\ \fI

%(title)s

''' DOC_HEADER_EXTERNALCSS = '''\ %(title)s

%(title)s

''' DOC_FOOTER = '''\ ''' class HtmlFormatter(Formatter): r""" Format tokens as HTML 4 ```` tags within a ``
`` tag, wrapped
    in a ``
`` tag. The ``
``'s CSS class can be set by the `cssclass` option. If the `linenos` option is set to ``"table"``, the ``
`` is
    additionally wrapped inside a ```` which has one row and two
    cells: one containing the line numbers and one containing the code.
    Example:

    .. sourcecode:: html

        
1
            2
def foo(bar):
              pass
            
(whitespace added to improve clarity). Wrapping can be disabled using the `nowrap` option. A list of lines can be specified using the `hl_lines` option to make these lines highlighted (as of Pygments 0.11). With the `full` option, a complete HTML 4 document is output, including the style definitions inside a ``