From 08b6d4b8c39a300689ffccf114942a9f0f36a784 Mon Sep 17 00:00:00 2001 From: JinWang An Date: Tue, 5 Jan 2021 12:16:58 +0900 Subject: [PATCH] Imported Upstream version 2.1.1 --- CHANGES | 14 ++++ PKG-INFO | 2 +- Pygments.egg-info/PKG-INFO | 2 +- Pygments.egg-info/SOURCES.txt | 30 ++++++++ doc/docs/integrate.rst | 11 +++ doc/faq.rst | 32 ++++---- pygments/__init__.py | 2 +- pygments/formatters/_mapping.py | 2 +- pygments/formatters/html.py | 4 +- pygments/formatters/img.py | 10 ++- pygments/formatters/latex.py | 9 ++- pygments/lexers/_mapping.py | 6 +- pygments/lexers/c_cpp.py | 9 ++- pygments/lexers/chapel.py | 13 ++-- pygments/lexers/dotnet.py | 6 +- pygments/lexers/hdl.py | 25 +++--- pygments/lexers/julia.py | 25 ++++-- pygments/lexers/lisp.py | 2 +- pygments/lexers/python.py | 39 +++++----- pygments/lexers/rdf.py | 71 +++++++++++------- pygments/lexers/shell.py | 1 + pygments/lexers/sql.py | 20 +++-- pygments/lexers/templates.py | 6 +- pygments/lexers/textfmts.py | 5 ++ pygments/token.py | 8 ++ setup.cfg | 3 + setup.py | 2 +- .../__pycache__/string_asserts.cpython-35.pyc | Bin 0 -> 1061 bytes tests/__pycache__/support.cpython-35.pyc | Bin 0 -> 553 bytes .../__pycache__/test_basic_api.cpython-35.pyc | Bin 0 -> 12516 bytes tests/__pycache__/test_cfm.cpython-35.pyc | Bin 0 -> 1720 bytes tests/__pycache__/test_clexer.cpython-35.pyc | Bin 0 -> 6520 bytes tests/__pycache__/test_cmdline.cpython-35.pyc | Bin 0 -> 8473 bytes .../test_examplefiles.cpython-35.pyc | Bin 0 -> 3955 bytes tests/__pycache__/test_ezhil.cpython-35.pyc | Bin 0 -> 4559 bytes .../test_html_formatter.cpython-35.pyc | Bin 0 -> 7141 bytes tests/__pycache__/test_inherit.cpython-35.pyc | Bin 0 -> 4403 bytes .../test_irc_formatter.cpython-35.pyc | Bin 0 -> 1169 bytes tests/__pycache__/test_java.cpython-35.pyc | Bin 0 -> 2221 bytes .../test_latex_formatter.cpython-35.pyc | Bin 0 -> 1779 bytes .../test_lexers_other.cpython-35.pyc | Bin 0 -> 3335 bytes .../test_objectiveclexer.cpython-35.pyc | Bin 0 -> 2865 bytes .../__pycache__/test_perllexer.cpython-35.pyc | Bin 0 -> 6954 bytes .../test_qbasiclexer.cpython-35.pyc | Bin 0 -> 1557 bytes .../test_regexlexer.cpython-35.pyc | Bin 0 -> 2069 bytes .../__pycache__/test_regexopt.cpython-35.pyc | Bin 0 -> 3150 bytes .../test_rtf_formatter.cpython-35.pyc | Bin 0 -> 4442 bytes tests/__pycache__/test_ruby.cpython-35.pyc | Bin 0 -> 4092 bytes tests/__pycache__/test_shell.cpython-35.pyc | Bin 0 -> 2803 bytes tests/__pycache__/test_smarty.cpython-35.pyc | Bin 0 -> 1487 bytes .../test_string_asserts.cpython-35.pyc | Bin 0 -> 1818 bytes .../test_terminal_formatter.cpython-35.pyc | Bin 0 -> 2022 bytes .../__pycache__/test_textfmts.cpython-35.pyc | Bin 0 -> 1642 bytes tests/__pycache__/test_token.cpython-35.pyc | Bin 0 -> 1995 bytes .../__pycache__/test_unistring.cpython-35.pyc | Bin 0 -> 1813 bytes .../__pycache__/test_using_api.cpython-35.pyc | Bin 0 -> 1717 bytes tests/__pycache__/test_util.cpython-35.pyc | Bin 0 -> 9190 bytes tests/examplefiles/99_bottles_of_beer.chpl | 17 +++-- tests/examplefiles/sparql.rq | 4 +- tests/string_asserts.pyc | Bin 1218 -> 1218 bytes tests/test_basic_api.pyc | Bin 13646 -> 13646 bytes tests/test_cfm.pyc | Bin 1877 -> 1877 bytes tests/test_clexer.pyc | Bin 7082 -> 7082 bytes tests/test_cmdline.pyc | Bin 9732 -> 9732 bytes tests/test_examplefiles.pyc | Bin 4508 -> 4508 bytes tests/test_ezhil.pyc | Bin 4954 -> 4954 bytes tests/test_html_formatter.py | 4 +- tests/test_html_formatter.pyc | Bin 7888 -> 7914 bytes tests/test_inherit.pyc | Bin 4031 -> 4031 bytes tests/test_irc_formatter.pyc | Bin 1317 -> 1317 bytes tests/test_java.pyc | Bin 2511 -> 2511 bytes tests/test_latex_formatter.pyc | Bin 2036 -> 2036 bytes tests/test_lexers_other.pyc | Bin 3714 -> 3714 bytes tests/test_objectiveclexer.pyc | Bin 3145 -> 3145 bytes tests/test_perllexer.pyc | Bin 7481 -> 7481 bytes tests/test_qbasiclexer.pyc | Bin 1807 -> 1807 bytes tests/test_regexlexer.pyc | Bin 2358 -> 2358 bytes tests/test_regexopt.pyc | Bin 3355 -> 3355 bytes tests/test_rtf_formatter.pyc | Bin 4866 -> 4866 bytes tests/test_ruby.pyc | Bin 4511 -> 4511 bytes tests/test_shell.pyc | Bin 3129 -> 3129 bytes tests/test_smarty.pyc | Bin 1690 -> 1690 bytes tests/test_string_asserts.pyc | Bin 2017 -> 2017 bytes tests/test_terminal_formatter.pyc | Bin 2295 -> 2295 bytes tests/test_textfmts.pyc | Bin 1842 -> 1842 bytes tests/test_token.py | 8 ++ tests/test_token.pyc | Bin 1953 -> 2231 bytes tests/test_unistring.pyc | Bin 1996 -> 1996 bytes tests/test_using_api.pyc | Bin 1965 -> 1965 bytes tests/test_util.pyc | Bin 9890 -> 9890 bytes 90 files changed, 271 insertions(+), 121 deletions(-) create mode 100644 tests/__pycache__/string_asserts.cpython-35.pyc create mode 100644 tests/__pycache__/support.cpython-35.pyc create mode 100644 tests/__pycache__/test_basic_api.cpython-35.pyc create mode 100644 tests/__pycache__/test_cfm.cpython-35.pyc create mode 100644 tests/__pycache__/test_clexer.cpython-35.pyc create mode 100644 tests/__pycache__/test_cmdline.cpython-35.pyc create mode 100644 tests/__pycache__/test_examplefiles.cpython-35.pyc create mode 100644 tests/__pycache__/test_ezhil.cpython-35.pyc create mode 100644 tests/__pycache__/test_html_formatter.cpython-35.pyc create mode 100644 tests/__pycache__/test_inherit.cpython-35.pyc create mode 100644 tests/__pycache__/test_irc_formatter.cpython-35.pyc create mode 100644 tests/__pycache__/test_java.cpython-35.pyc create mode 100644 tests/__pycache__/test_latex_formatter.cpython-35.pyc create mode 100644 tests/__pycache__/test_lexers_other.cpython-35.pyc create mode 100644 tests/__pycache__/test_objectiveclexer.cpython-35.pyc create mode 100644 tests/__pycache__/test_perllexer.cpython-35.pyc create mode 100644 tests/__pycache__/test_qbasiclexer.cpython-35.pyc create mode 100644 tests/__pycache__/test_regexlexer.cpython-35.pyc create mode 100644 tests/__pycache__/test_regexopt.cpython-35.pyc create mode 100644 tests/__pycache__/test_rtf_formatter.cpython-35.pyc create mode 100644 tests/__pycache__/test_ruby.cpython-35.pyc create mode 100644 tests/__pycache__/test_shell.cpython-35.pyc create mode 100644 tests/__pycache__/test_smarty.cpython-35.pyc create mode 100644 tests/__pycache__/test_string_asserts.cpython-35.pyc create mode 100644 tests/__pycache__/test_terminal_formatter.cpython-35.pyc create mode 100644 tests/__pycache__/test_textfmts.cpython-35.pyc create mode 100644 tests/__pycache__/test_token.cpython-35.pyc create mode 100644 tests/__pycache__/test_unistring.cpython-35.pyc create mode 100644 tests/__pycache__/test_using_api.cpython-35.pyc create mode 100644 tests/__pycache__/test_util.cpython-35.pyc diff --git a/CHANGES b/CHANGES index 379cc87..fbe7bc3 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,20 @@ pull request numbers to the requests at . +Version 2.1.1 +------------- +(relased Feb 14, 2016) + +- Fixed Jython compatibility (#1205) +- Fixed HTML formatter output with leading empty lines (#1111) +- Added a mapping table for LaTeX encodings and added utf8 (#1152) +- Fixed image formatter font searching on Macs (#1188) +- Fixed deepcopy-ing of Token instances (#1168) +- Fixed Julia string interpolation (#1170) +- Fixed statefulness of HttpLexer between get_tokens calls +- Many smaller fixes to various lexers + + Version 2.1 ----------- (released Jan 17, 2016) diff --git a/PKG-INFO b/PKG-INFO index a648547..f37aa68 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Pygments -Version: 2.1 +Version: 2.1.1 Summary: Pygments is a syntax highlighting package written in Python. Home-page: http://pygments.org/ Author: Georg Brandl diff --git a/Pygments.egg-info/PKG-INFO b/Pygments.egg-info/PKG-INFO index a648547..f37aa68 100644 --- a/Pygments.egg-info/PKG-INFO +++ b/Pygments.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: Pygments -Version: 2.1 +Version: 2.1.1 Summary: Pygments is a syntax highlighting package written in Python. Home-page: http://pygments.org/ Author: Georg Brandl diff --git a/Pygments.egg-info/SOURCES.txt b/Pygments.egg-info/SOURCES.txt index e36db6a..169231f 100644 --- a/Pygments.egg-info/SOURCES.txt +++ b/Pygments.egg-info/SOURCES.txt @@ -313,32 +313,62 @@ tests/test_using_api.pyc tests/test_util.py tests/test_util.pyc tests/__pycache__/string_asserts.cpython-33.pyc +tests/__pycache__/string_asserts.cpython-35.pyc tests/__pycache__/support.cpython-33.pyc +tests/__pycache__/support.cpython-35.pyc tests/__pycache__/test_basic_api.cpython-33.pyc +tests/__pycache__/test_basic_api.cpython-35.pyc tests/__pycache__/test_cfm.cpython-33.pyc +tests/__pycache__/test_cfm.cpython-35.pyc tests/__pycache__/test_clexer.cpython-33.pyc +tests/__pycache__/test_clexer.cpython-35.pyc tests/__pycache__/test_cmdline.cpython-33.pyc +tests/__pycache__/test_cmdline.cpython-35.pyc tests/__pycache__/test_examplefiles.cpython-33.pyc +tests/__pycache__/test_examplefiles.cpython-35.pyc +tests/__pycache__/test_ezhil.cpython-35.pyc tests/__pycache__/test_html_formatter.cpython-33.pyc +tests/__pycache__/test_html_formatter.cpython-35.pyc tests/__pycache__/test_inherit.cpython-33.pyc +tests/__pycache__/test_inherit.cpython-35.pyc +tests/__pycache__/test_irc_formatter.cpython-35.pyc tests/__pycache__/test_java.cpython-33.pyc +tests/__pycache__/test_java.cpython-35.pyc tests/__pycache__/test_latex_formatter.cpython-33.pyc +tests/__pycache__/test_latex_formatter.cpython-35.pyc tests/__pycache__/test_lexers_other.cpython-33.pyc +tests/__pycache__/test_lexers_other.cpython-35.pyc tests/__pycache__/test_objectiveclexer.cpython-33.pyc +tests/__pycache__/test_objectiveclexer.cpython-35.pyc tests/__pycache__/test_perllexer.cpython-33.pyc +tests/__pycache__/test_perllexer.cpython-35.pyc tests/__pycache__/test_qbasiclexer.cpython-33.pyc +tests/__pycache__/test_qbasiclexer.cpython-35.pyc tests/__pycache__/test_regexlexer.cpython-33.pyc +tests/__pycache__/test_regexlexer.cpython-35.pyc tests/__pycache__/test_regexopt.cpython-33.pyc +tests/__pycache__/test_regexopt.cpython-35.pyc tests/__pycache__/test_rtf_formatter.cpython-33.pyc +tests/__pycache__/test_rtf_formatter.cpython-35.pyc tests/__pycache__/test_ruby.cpython-33.pyc +tests/__pycache__/test_ruby.cpython-35.pyc tests/__pycache__/test_shell.cpython-33.pyc +tests/__pycache__/test_shell.cpython-35.pyc tests/__pycache__/test_smarty.cpython-33.pyc +tests/__pycache__/test_smarty.cpython-35.pyc tests/__pycache__/test_string_asserts.cpython-33.pyc +tests/__pycache__/test_string_asserts.cpython-35.pyc +tests/__pycache__/test_terminal_formatter.cpython-35.pyc tests/__pycache__/test_textfmts.cpython-33.pyc +tests/__pycache__/test_textfmts.cpython-35.pyc tests/__pycache__/test_token.cpython-33.pyc +tests/__pycache__/test_token.cpython-35.pyc tests/__pycache__/test_unistring.cpython-33.pyc +tests/__pycache__/test_unistring.cpython-35.pyc tests/__pycache__/test_using_api.cpython-33.pyc +tests/__pycache__/test_using_api.cpython-35.pyc tests/__pycache__/test_util.cpython-33.pyc +tests/__pycache__/test_util.cpython-35.pyc tests/cover/coverage_html.js tests/cover/jquery.hotkeys.js tests/cover/jquery.isonscreen.js diff --git a/doc/docs/integrate.rst b/doc/docs/integrate.rst index 73e02ac..77daaa4 100644 --- a/doc/docs/integrate.rst +++ b/doc/docs/integrate.rst @@ -27,3 +27,14 @@ 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 diff --git a/doc/faq.rst b/doc/faq.rst index 5458e65..f375828 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -89,28 +89,24 @@ Who uses Pygments? This is an (incomplete) list of projects and sites known to use the Pygments highlighter. -* `Pygments API `_, a HTTP POST interface to Pygments +* `Wikipedia `_ +* `BitBucket `_, a Mercurial and Git hosting site * `The Sphinx documentation builder `_, for embedded source examples * `rst2pdf `_, a reStructuredText to PDF converter -* `Zine `_, a Python blogging system +* `Codecov `_, a code coverage CI service * `Trac `_, the universal project management tool -* `Bruce `_, a reStructuredText presentation 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 -* `BitBucket `_, a Mercurial and Git hosting site * `Review Board `_, a collaborative code reviewing tool -* `skeletonz `_, a Python powered content management system * `Diamanda `_, a Django powered wiki system with support for Pygments * `Progopedia `_ (`English `_), an encyclopedia of programming languages -* `Postmarkup `_, a BBCode to XHTML generator -* `Language Comparison `_, a site that compares different programming languages -* `BPython `_, a curses-based intelligent Python shell -* `Challenge-You! `_, a site offering programming challenges +* `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 @@ -118,23 +114,25 @@ This is an (incomplete) list of projects and sites known to use the Pygments hig * `hurl `_, a web service for making HTTP requests * `wxHTMLPygmentizer `_ is a GUI utility, used to make code-colorization easier -* `WpPygments `_, a highlighter plugin for WordPress -* `LodgeIt `_, a pastebin with XMLRPC support and diffs -* `SpammCan `_, a pastebin (demo see - `here `_) -* `WowAce.com pastes `_, a pastebin +* `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 -* `dumpz.org `_, a pastebin * `dpaste.com `_, another Django pastebin -* `PylonsHQ Pasties `_, a 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 -* `xinotes.org `_, a site to share notes, code snippets etc. * `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. diff --git a/pygments/__init__.py b/pygments/__init__.py index 7bd7557..0c17500 100644 --- a/pygments/__init__.py +++ b/pygments/__init__.py @@ -26,7 +26,7 @@ :license: BSD, see LICENSE for details. """ -__version__ = '2.1' +__version__ = '2.1.1' __docformat__ = 'restructuredtext' __all__ = ['lex', 'format', 'highlight'] diff --git a/pygments/formatters/_mapping.py b/pygments/formatters/_mapping.py index 569ae84..01d053d 100755 --- a/pygments/formatters/_mapping.py +++ b/pygments/formatters/_mapping.py @@ -77,7 +77,7 @@ if __name__ == '__main__': # pragma: no cover footer = content[content.find("if __name__ == '__main__':"):] # write new file - with open(__file__, 'wb') as fp: + with open(__file__, 'w') as fp: fp.write(header) fp.write('FORMATTERS = {\n %s\n}\n\n' % ',\n '.join(found_formatters)) fp.write(footer) diff --git a/pygments/formatters/html.py b/pygments/formatters/html.py index a008751..2c6bb19 100644 --- a/pygments/formatters/html.py +++ b/pygments/formatters/html.py @@ -702,7 +702,9 @@ class HtmlFormatter(Formatter): if self.filename: yield 0, ('' + self.filename + '') - yield 0, ('') + # the empty span here is to keep leading empty lines from being + # ignored by HTML parsers + yield 0, ('') for tup in inner: yield tup yield 0, '' diff --git a/pygments/formatters/img.py b/pygments/formatters/img.py index a7b5d51..c7b8e81 100644 --- a/pygments/formatters/img.py +++ b/pygments/formatters/img.py @@ -82,9 +82,13 @@ class FontManager(object): stdout, _ = proc.communicate() if proc.returncode == 0: lines = stdout.splitlines() - if lines: - path = lines[0].decode().strip().strip(':') - return path + for line in lines: + if line.startswith('Fontconfig warning:'): + continue + path = line.decode().strip().strip(':') + if path: + return path + return None def _create_nix(self): for name in STYLES['NORMAL']: diff --git a/pygments/formatters/latex.py b/pygments/formatters/latex.py index 15e68e3..66d521f 100644 --- a/pygments/formatters/latex.py +++ b/pygments/formatters/latex.py @@ -413,11 +413,18 @@ class LatexFormatter(Formatter): outfile.write(u'\\end{' + self.envname + u'}\n') if self.full: + encoding = self.encoding or 'utf8' + # map known existings encodings from LaTeX distribution + encoding = { + 'utf_8': 'utf8', + 'latin_1': 'latin1', + 'iso_8859_1': 'latin1', + }.get(encoding.replace('-', '_'), encoding) realoutfile.write(DOC_TEMPLATE % dict(docclass = self.docclass, preamble = self.preamble, title = self.title, - encoding = self.encoding or 'utf8', + encoding = encoding, styledefs = self.get_style_defs(), code = outfile.getvalue())) diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index 3afa269..090e7a9 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -46,7 +46,7 @@ LEXERS = { 'BBCodeLexer': ('pygments.lexers.markup', 'BBCode', ('bbcode',), (), ('text/x-bbcode',)), 'BCLexer': ('pygments.lexers.algebra', 'BC', ('bc',), ('*.bc',), ()), 'BaseMakefileLexer': ('pygments.lexers.make', 'Base Makefile', ('basemake',), (), ()), - 'BashLexer': ('pygments.lexers.shell', 'Bash', ('bash', 'sh', 'ksh', 'shell'), ('*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass', '.bashrc', 'bashrc', '.bash_*', 'bash_*', 'PKGBUILD'), ('application/x-sh', 'application/x-shellscript')), + 'BashLexer': ('pygments.lexers.shell', 'Bash', ('bash', 'sh', 'ksh', 'shell'), ('*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass', '*.exheres-0', '*.exlib', '.bashrc', 'bashrc', '.bash_*', 'bash_*', 'PKGBUILD'), ('application/x-sh', 'application/x-shellscript')), 'BashSessionLexer': ('pygments.lexers.shell', 'Bash Session', ('console', 'shell-session'), ('*.sh-session', '*.shell-session'), ('application/x-shell-session', 'application/x-sh-session')), 'BatchLexer': ('pygments.lexers.shell', 'Batchfile', ('bat', 'batch', 'dosbatch', 'winbatch'), ('*.bat', '*.cmd'), ('application/x-dos-batch',)), 'BefungeLexer': ('pygments.lexers.esoteric', 'Befunge', ('befunge',), ('*.befunge',), ('application/x-befunge',)), @@ -130,7 +130,7 @@ LEXERS = { 'ElixirConsoleLexer': ('pygments.lexers.erlang', 'Elixir iex session', ('iex',), (), ('text/x-elixir-shellsession',)), 'ElixirLexer': ('pygments.lexers.erlang', 'Elixir', ('elixir', 'ex', 'exs'), ('*.ex', '*.exs'), ('text/x-elixir',)), 'ElmLexer': ('pygments.lexers.elm', 'Elm', ('elm',), ('*.elm',), ('text/x-elm',)), - 'EmacsLispLexer': ('pygments.lexers.lisp', 'EmacsLisp', ('emacs', 'elisp'), ('*.el',), ('text/x-elisp', 'application/x-elisp')), + 'EmacsLispLexer': ('pygments.lexers.lisp', 'EmacsLisp', ('emacs', 'elisp', 'emacs-lisp'), ('*.el',), ('text/x-elisp', 'application/x-elisp')), 'ErbLexer': ('pygments.lexers.templates', 'ERB', ('erb',), (), ('application/x-ruby-templating',)), 'ErlangLexer': ('pygments.lexers.erlang', 'Erlang', ('erlang',), ('*.erl', '*.hrl', '*.es', '*.escript'), ('text/x-erlang',)), 'ErlangShellLexer': ('pygments.lexers.erlang', 'Erlang erl session', ('erl',), ('*.erl-sh',), ('text/x-erl-shellsession',)), @@ -457,7 +457,7 @@ if __name__ == '__main__': # pragma: no cover footer = content[content.find("if __name__ == '__main__':"):] # write new file - with open(__file__, 'wb') as fp: + with open(__file__, 'w') as fp: fp.write(header) fp.write('LEXERS = {\n %s,\n}\n\n' % ',\n '.join(found_lexers)) fp.write(footer) diff --git a/pygments/lexers/c_cpp.py b/pygments/lexers/c_cpp.py index 5a7137e..5c724d0 100644 --- a/pygments/lexers/c_cpp.py +++ b/pygments/lexers/c_cpp.py @@ -216,6 +216,8 @@ class CppLexer(CFamilyLexer): 'final'), suffix=r'\b'), Keyword), (r'char(16_t|32_t)\b', Keyword.Type), (r'(class)(\s+)', bygroups(Keyword, Text), 'classname'), + # C++11 raw strings + (r'R"\(', String, 'rawstring'), inherit, ], 'root': [ @@ -232,10 +234,15 @@ class CppLexer(CFamilyLexer): # template specification (r'\s*(?=>)', Text, '#pop'), ], + 'rawstring': [ + (r'\)"', String, '#pop'), + (r'[^)]+', String), + (r'\)', String), + ], } def analyse_text(text): - if re.search('#include <[a-z]+>', text): + if re.search('#include <[a-z_]+>', text): return 0.2 if re.search('using namespace ', text): return 0.4 diff --git a/pygments/lexers/chapel.py b/pygments/lexers/chapel.py index d69c55f..9f9894c 100644 --- a/pygments/lexers/chapel.py +++ b/pygments/lexers/chapel.py @@ -44,12 +44,13 @@ class ChapelLexer(RegexLexer): (words(( 'align', 'atomic', 'begin', 'break', 'by', 'cobegin', 'coforall', 'continue', 'delete', 'dmapped', 'do', 'domain', 'else', 'enum', - 'export', 'extern', 'for', 'forall', 'if', 'index', 'inline', - 'iter', 'label', 'lambda', 'let', 'local', 'new', 'noinit', 'on', - 'otherwise', 'pragma', 'private', 'public', 'reduce', - 'require', 'return', 'scan', 'select', 'serial', 'single', - 'sparse', 'subdomain', 'sync', 'then', 'use', 'when', 'where', - 'while', 'with', 'yield', 'zip'), suffix=r'\b'), + 'except', 'export', 'extern', 'for', 'forall', 'if', 'index', + 'inline', 'iter', 'label', 'lambda', 'let', 'local', 'new', + 'noinit', 'on', 'only', 'otherwise', 'pragma', 'private', + 'public', 'reduce', 'require', 'return', 'scan', 'select', + 'serial', 'single', 'sparse', 'subdomain', 'sync', 'then', + 'use', 'when', 'where', 'while', 'with', 'yield', 'zip'), + suffix=r'\b'), Keyword), (r'(proc)((?:\s|\\\s)+)', bygroups(Keyword, Text), 'procname'), (r'(class|module|record|union)(\s+)', bygroups(Keyword, Text), diff --git a/pygments/lexers/dotnet.py b/pygments/lexers/dotnet.py index 21f8d1e..eac4b5e 100644 --- a/pygments/lexers/dotnet.py +++ b/pygments/lexers/dotnet.py @@ -97,17 +97,17 @@ class CSharpLexer(RegexLexer): Comment.Preproc), (r'\b(extern)(\s+)(alias)\b', bygroups(Keyword, Text, Keyword)), - (r'(abstract|as|async|await|base|break|case|catch|' + (r'(abstract|as|async|await|base|break|by|case|catch|' r'checked|const|continue|default|delegate|' r'do|else|enum|event|explicit|extern|false|finally|' r'fixed|for|foreach|goto|if|implicit|in|interface|' - r'internal|is|lock|new|null|operator|' + r'internal|is|let|lock|new|null|on|operator|' r'out|override|params|private|protected|public|readonly|' r'ref|return|sealed|sizeof|stackalloc|static|' r'switch|this|throw|true|try|typeof|' r'unchecked|unsafe|virtual|void|while|' r'get|set|new|partial|yield|add|remove|value|alias|ascending|' - r'descending|from|group|into|orderby|select|where|' + r'descending|from|group|into|orderby|select|thenby|where|' r'join|equals)\b', Keyword), (r'(global)(::)', bygroups(Keyword, Punctuation)), (r'(bool|byte|char|decimal|double|dynamic|float|int|long|object|' diff --git a/pygments/lexers/hdl.py b/pygments/lexers/hdl.py index fc5ff71..04cef14 100644 --- a/pygments/lexers/hdl.py +++ b/pygments/lexers/hdl.py @@ -108,8 +108,8 @@ class VerilogLexer(RegexLexer): 'trior', 'tri0', 'tri1', 'trireg', 'uwire', 'wire', 'wand', 'wo' 'shortreal', 'real', 'realtime'), suffix=r'\b'), Keyword.Type), - ('[a-zA-Z_]\w*:(?!:)', Name.Label), - ('[a-zA-Z_]\w*', Name), + (r'[a-zA-Z_]\w*:(?!:)', Name.Label), + (r'\$?[a-zA-Z_]\w*', Name), ], 'string': [ (r'"', String, '#pop'), @@ -250,8 +250,8 @@ class SystemVerilogLexer(RegexLexer): 'trior', 'tri0', 'tri1', 'trireg', 'uwire', 'wire', 'wand', 'wo' 'shortreal', 'real', 'realtime'), suffix=r'\b'), Keyword.Type), - ('[a-zA-Z_]\w*:(?!:)', Name.Label), - ('[a-zA-Z_]\w*', Name), + (r'[a-zA-Z_]\w*:(?!:)', Name.Label), + (r'\$?[a-zA-Z_]\w*', Name), ], 'classname': [ (r'[a-zA-Z_]\w*', Name.Class, '#pop'), @@ -308,20 +308,27 @@ class VhdlLexer(RegexLexer): (r'[~!%^&*+=|?:<>/-]', Operator), (r"'[a-z_]\w*", Name.Attribute), (r'[()\[\],.;\']', Punctuation), - (r'"[^\n\\]*"', String), + (r'"[^\n\\"]*"', String), (r'(library)(\s+)([a-z_]\w*)', bygroups(Keyword, Text, Name.Namespace)), (r'(use)(\s+)(entity)', bygroups(Keyword, Text, Keyword)), + (r'(use)(\s+)([a-z_][\w.]*\.)(all)', + bygroups(Keyword, Text, Name.Namespace, Keyword)), (r'(use)(\s+)([a-z_][\w.]*)', bygroups(Keyword, Text, Name.Namespace)), + (r'(std|ieee)(\.[a-z_]\w*)', + bygroups(Name.Namespace, Name.Namespace)), + (words(('std', 'ieee', 'work'), suffix=r'\b'), + Name.Namespace), (r'(entity|component)(\s+)([a-z_]\w*)', bygroups(Keyword, Text, Name.Class)), (r'(architecture|configuration)(\s+)([a-z_]\w*)(\s+)' r'(of)(\s+)([a-z_]\w*)(\s+)(is)', bygroups(Keyword, Text, Name.Class, Text, Keyword, Text, Name.Class, Text, Keyword)), - + (r'([a-z_]\w*)(:)(\s+)(process|for)', + bygroups(Name.Class, Operator, Text, Keyword)), (r'(end)(\s+)', bygroups(using(this), Text), 'endblock'), include('types'), @@ -341,7 +348,7 @@ class VhdlLexer(RegexLexer): 'boolean', 'bit', 'character', 'severity_level', 'integer', 'time', 'delay_length', 'natural', 'positive', 'string', 'bit_vector', 'file_open_kind', 'file_open_status', 'std_ulogic', 'std_ulogic_vector', - 'std_logic', 'std_logic_vector'), suffix=r'\b'), + 'std_logic', 'std_logic_vector', 'signed', 'unsigned'), suffix=r'\b'), Keyword.Type), ], 'keywords': [ @@ -357,8 +364,8 @@ class VhdlLexer(RegexLexer): 'next', 'nor', 'not', 'null', 'of', 'on', 'open', 'or', 'others', 'out', 'package', 'port', 'postponed', 'procedure', 'process', 'pure', 'range', 'record', - 'register', 'reject', 'return', 'rol', 'ror', 'select', - 'severity', 'signal', 'shared', 'sla', 'sli', 'sra', + 'register', 'reject', 'rem', 'return', 'rol', 'ror', 'select', + 'severity', 'signal', 'shared', 'sla', 'sll', 'sra', 'srl', 'subtype', 'then', 'to', 'transport', 'type', 'units', 'until', 'use', 'variable', 'wait', 'when', 'while', 'with', 'xnor', 'xor'), suffix=r'\b'), diff --git a/pygments/lexers/julia.py b/pygments/lexers/julia.py index cf7c7d6..d0aa6d3 100644 --- a/pygments/lexers/julia.py +++ b/pygments/lexers/julia.py @@ -65,7 +65,7 @@ class JuliaLexer(RegexLexer): bygroups(Keyword, Name.Function), 'funcname'), # types - (r'(type|typealias|abstract)((?:\s|\\\s)+)', + (r'(type|typealias|abstract|immutable)((?:\s|\\\s)+)', bygroups(Keyword, Name.Class), 'typename'), # operators @@ -132,14 +132,23 @@ class JuliaLexer(RegexLexer): 'string': [ (r'"', String, '#pop'), (r'\\\\|\\"|\\\n', String.Escape), # included here for raw strings - (r'\$(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?', - String.Interpol), - (r'[^\\"$]+', String), - # quotes, dollar signs, and backslashes must be parsed one at a time - (r'["\\]', String), - # unhandled string formatting sign - (r'\$', String) + # Interpolation is defined as "$" followed by the shortest full + # expression, which is something we can't parse. + # Include the most common cases here: $word, and $(paren'd expr). + (r'\$[a-zA-Z_]+', String.Interpol), + (r'\$\(', String.Interpol, 'in-intp'), + # @printf and @sprintf formats + (r'%[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[diouxXeEfFgGcrs%]', + String.Interpol), + (r'[^$%"\\]+', String), + # unhandled special signs + (r'[$%"\\]', String), ], + 'in-intp': [ + (r'[^()]+', String.Interpol), + (r'\(', String.Interpol, '#push'), + (r'\)', String.Interpol, '#pop'), + ] } def analyse_text(text): diff --git a/pygments/lexers/lisp.py b/pygments/lexers/lisp.py index bd59d2b..84720fa 100644 --- a/pygments/lexers/lisp.py +++ b/pygments/lexers/lisp.py @@ -1488,7 +1488,7 @@ class EmacsLispLexer(RegexLexer): .. versionadded:: 2.1 """ name = 'EmacsLisp' - aliases = ['emacs', 'elisp'] + aliases = ['emacs', 'elisp', 'emacs-lisp'] filenames = ['*.el'] mimetypes = ['text/x-elisp', 'application/x-elisp'] diff --git a/pygments/lexers/python.py b/pygments/lexers/python.py index c05c8ae..9433f7f 100644 --- a/pygments/lexers/python.py +++ b/pygments/lexers/python.py @@ -213,6 +213,26 @@ class Python3Lexer(RegexLexer): uni_name = "[%s][%s]*" % (uni.xid_start, uni.xid_continue) + def innerstring_rules(ttype): + return [ + # the old style '%s' % (...) string formatting (still valid in Py3) + (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?' + '[hlL]?[diouxXeEfFgGcrs%]', String.Interpol), + # the new style '{}'.format(...) string formatting + (r'\{' + '((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name + '(\![sra])?' # conversion + '(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[bcdeEfFgGnosxX%]?)?' + '\}', String.Interpol), + + # backslashes, quotes and formatting signs must be parsed one at a time + (r'[^\\\'"%\{\n]+', ttype), + (r'[\'"\\]', ttype), + # unhandled string formatting sign + (r'%|(\{{1,2})', ttype) + # newlines are an error (use "nl" state) + ] + tokens = PythonLexer.tokens.copy() tokens['keywords'] = [ (words(( @@ -295,23 +315,8 @@ class Python3Lexer(RegexLexer): (uni_name, Name.Namespace), default('#pop'), ] - tokens['strings'] = [ - # the old style '%s' % (...) string formatting (still valid in Py3) - (r'%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?' - '[hlL]?[diouxXeEfFgGcrs%]', String.Interpol), - # the new style '{}'.format(...) string formatting - (r'\{' - '((\w+)((\.\w+)|(\[[^\]]+\]))*)?' # field name - '(\![sra])?' # conversion - '(\:(.?[<>=\^])?[-+ ]?#?0?(\d+)?,?(\.\d+)?[bcdeEfFgGnosxX%]?)?' - '\}', String.Interpol), - # backslashes, quotes and formatting signs must be parsed one at a time - (r'[^\\\'"%\{\n]+', String), - (r'[\'"\\]', String), - # unhandled string formatting sign - (r'%|(\{{1,2})', String) - # newlines are an error (use "nl" state) - ] + tokens['strings-single'] = innerstring_rules(String.Single) + tokens['strings-double'] = innerstring_rules(String.Double) def analyse_text(text): return shebang_matches(text, r'pythonw?3(\.\d)?') diff --git a/pygments/lexers/rdf.py b/pygments/lexers/rdf.py index cb634ee..103b4ad 100644 --- a/pygments/lexers/rdf.py +++ b/pygments/lexers/rdf.py @@ -29,43 +29,56 @@ class SparqlLexer(RegexLexer): filenames = ['*.rq', '*.sparql'] mimetypes = ['application/sparql-query'] + # character group definitions :: + + PN_CHARS_BASE_GRP = (u'a-zA-Z' + u'\u00c0-\u00d6' + u'\u00d8-\u00f6' + u'\u00f8-\u02ff' + u'\u0370-\u037d' + u'\u037f-\u1fff' + u'\u200c-\u200d' + u'\u2070-\u218f' + u'\u2c00-\u2fef' + u'\u3001-\ud7ff' + u'\uf900-\ufdcf' + u'\ufdf0-\ufffd' + u'\U00010000-\U000effff') + + PN_CHARS_U_GRP = (PN_CHARS_BASE_GRP + '_') + + PN_CHARS_GRP = (PN_CHARS_U_GRP + + r'\-' + + r'0-9' + + u'\u00b7' + + u'\u0300-\u036f' + + u'\u203f-\u2040') + + HEX_GRP = '0-9A-Fa-f' + + PN_LOCAL_ESC_CHARS_GRP = r' _~.\-!$&""()*+,;=/?#@%' + # terminal productions :: - PN_CHARS_BASE = (u'(?:[a-zA-Z' - u'\u00c0-\u00d6' - u'\u00d8-\u00f6' - u'\u00f8-\u02ff' - u'\u0370-\u037d' - u'\u037f-\u1fff' - u'\u200c-\u200d' - u'\u2070-\u218f' - u'\u2c00-\u2fef' - u'\u3001-\ud7ff' - u'\uf900-\ufdcf' - u'\ufdf0-\ufffd]|' - u'[^\u0000-\uffff]|' - u'[\ud800-\udbff][\udc00-\udfff])') + PN_CHARS_BASE = '[' + PN_CHARS_BASE_GRP + ']' - PN_CHARS_U = '(?:' + PN_CHARS_BASE + '|_)' + PN_CHARS_U = '[' + PN_CHARS_U_GRP + ']' - PN_CHARS = ('(?:' + PN_CHARS_U + r'|[\-0-9' + - u'\u00b7' + - u'\u0300-\u036f' + - u'\u203f-\u2040])') + PN_CHARS = '[' + PN_CHARS_GRP + ']' - HEX = '[0-9A-Fa-f]' + HEX = '[' + HEX_GRP + ']' - PN_LOCAL_ESC_CHARS = r'[ _~.\-!$&""()*+,;=/?#@%]' + PN_LOCAL_ESC_CHARS = '[' + PN_LOCAL_ESC_CHARS_GRP + ']' IRIREF = r'<(?:[^<>"{}|^`\\\x00-\x20])*>' - BLANK_NODE_LABEL = '_:(?:' + PN_CHARS_U + '|[0-9])(?:(?:' + PN_CHARS + '|\.)*' + \ - PN_CHARS + ')?' + BLANK_NODE_LABEL = '_:[0-9' + PN_CHARS_U_GRP + '](?:[' + PN_CHARS_GRP + \ + '.]*' + PN_CHARS + ')?' - PN_PREFIX = PN_CHARS_BASE + '(?:(?:' + PN_CHARS + '|\.)*' + PN_CHARS + ')?' + PN_PREFIX = PN_CHARS_BASE + '(?:[' + PN_CHARS_GRP + '.]*' + PN_CHARS + ')?' - VARNAME = '(?:' + PN_CHARS_U + '|[0-9])(?:' + PN_CHARS_U + \ - u'|[0-9\u00b7\u0300-\u036f\u203f-\u2040])*' + VARNAME = u'[0-9' + PN_CHARS_U_GRP + '][' + PN_CHARS_U_GRP + \ + u'0-9\u00b7\u0300-\u036f\u203f-\u2040]*' PERCENT = '%' + HEX + HEX @@ -73,9 +86,9 @@ class SparqlLexer(RegexLexer): PLX = '(?:' + PERCENT + ')|(?:' + PN_LOCAL_ESC + ')' - PN_LOCAL = ('(?:(?:' + PN_CHARS_U + '|[:0-9])|' + PLX + ')' + - '(?:(?:(?:' + PN_CHARS + '|[.:])|' + PLX + ')*(?:(?:' + - PN_CHARS + '|:)|' + PLX + '))?') + PN_LOCAL = ('(?:[' + PN_CHARS_U_GRP + ':0-9' + ']|' + PLX + ')' + + '(?:(?:[' + PN_CHARS_GRP + '.:]|' + PLX + ')*(?:[' + + PN_CHARS_GRP + ':]|' + PLX + '))?') EXPONENT = r'[eE][+-]?\d+' diff --git a/pygments/lexers/shell.py b/pygments/lexers/shell.py index dc23d01..4145939 100644 --- a/pygments/lexers/shell.py +++ b/pygments/lexers/shell.py @@ -35,6 +35,7 @@ class BashLexer(RegexLexer): name = 'Bash' aliases = ['bash', 'sh', 'ksh', 'shell'] filenames = ['*.sh', '*.ksh', '*.bash', '*.ebuild', '*.eclass', + '*.exheres-0', '*.exlib', '.bashrc', 'bashrc', '.bash_*', 'bash_*', 'PKGBUILD'] mimetypes = ['application/x-sh', 'application/x-shellscript'] diff --git a/pygments/lexers/sql.py b/pygments/lexers/sql.py index 646a9f3..a7736f7 100644 --- a/pygments/lexers/sql.py +++ b/pygments/lexers/sql.py @@ -148,8 +148,8 @@ class PostgresLexer(PostgresBase, RegexLexer): (r'\$\d+', Name.Variable), (r'([0-9]*\.[0-9]*|[0-9]+)(e[+-]?[0-9]+)?', Number.Float), (r'[0-9]+', Number.Integer), - (r"(E|U&)?'(''|[^'])*'", String.Single), - (r'(U&)?"(""|[^"])*"', String.Name), # quoted identifier + (r"(E|U&)?'", String.Single, 'string'), + (r'(U&)?"', String.Name, 'quoted-ident'), # quoted identifier (r'(?s)(\$[^$]*\$)(.*?)(\1)', language_callback), (r'[a-z_]\w*', Name), @@ -164,6 +164,16 @@ class PostgresLexer(PostgresBase, RegexLexer): (r'[^/*]+', Comment.Multiline), (r'[/*]', Comment.Multiline) ], + 'string': [ + (r"[^']+", String.Single), + (r"''", String.Single), + (r"'", String.Single, '#pop'), + ], + 'quoted-ident': [ + (r'[^"]+', String.Name), + (r'""', String.Name), + (r'"', String.Name, '#pop'), + ], } @@ -380,13 +390,13 @@ class SqlLexer(RegexLexer): 'DEFINED', 'DEFINER', 'DELETE', 'DELIMITER', 'DELIMITERS', 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC', 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISPATCH', 'DISTINCT', 'DO', - 'DOMAIN', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION', 'DYNAMIC_FUNCTION_CODE', - 'EACH', 'ELSE', 'ENCODING', 'ENCRYPTED', 'END', 'END-EXEC', 'EQUALS', 'ESCAPE', 'EVERY', + 'DOMAIN', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION', 'DYNAMIC_FUNCTION_CODE', 'EACH', + 'ELSE', 'ELSIF', 'ENCODING', 'ENCRYPTED', 'END', 'END-EXEC', 'EQUALS', 'ESCAPE', 'EVERY', 'EXCEPTION', 'EXCEPT', 'EXCLUDING', 'EXCLUSIVE', 'EXEC', 'EXECUTE', 'EXISTING', 'EXISTS', 'EXPLAIN', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FINAL', 'FIRST', 'FOR', 'FORCE', 'FOREIGN', 'FORTRAN', 'FORWARD', 'FOUND', 'FREE', 'FREEZE', 'FROM', 'FULL', 'FUNCTION', 'G', 'GENERAL', 'GENERATED', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANT', 'GRANTED', - 'GROUP', 'GROUPING', 'HANDLER', 'HAVING', 'HIERARCHY', 'HOLD', 'HOST', 'IDENTITY', + 'GROUP', 'GROUPING', 'HANDLER', 'HAVING', 'HIERARCHY', 'HOLD', 'HOST', 'IDENTITY', 'IF', 'IGNORE', 'ILIKE', 'IMMEDIATE', 'IMMUTABLE', 'IMPLEMENTATION', 'IMPLICIT', 'IN', 'INCLUDING', 'INCREMENT', 'INDEX', 'INDITCATOR', 'INFIX', 'INHERITS', 'INITIALIZE', 'INITIALLY', 'INNER', 'INOUT', 'INPUT', 'INSENSITIVE', 'INSERT', 'INSTANTIABLE', diff --git a/pygments/lexers/templates.py b/pygments/lexers/templates.py index 1f2322c..3e55b6a 100644 --- a/pygments/lexers/templates.py +++ b/pygments/lexers/templates.py @@ -251,7 +251,7 @@ class VelocityLexer(RegexLexer): 'funcparams': [ (r'\$\{?', Punctuation, 'variable'), (r'\s+', Text), - (r',', Punctuation), + (r'[,:]', Punctuation), (r'"(\\\\|\\"|[^"])*"', String.Double), (r"'(\\\\|\\'|[^'])*'", String.Single), (r"0[xX][0-9a-fA-F]+[Ll]?", Number), @@ -259,6 +259,8 @@ class VelocityLexer(RegexLexer): (r'(true|false|null)\b', Keyword.Constant), (r'\(', Punctuation, '#push'), (r'\)', Punctuation, '#pop'), + (r'\{', Punctuation, '#push'), + (r'\}', Punctuation, '#pop'), (r'\[', Punctuation, '#push'), (r'\]', Punctuation, '#pop'), ] @@ -875,7 +877,7 @@ class GenshiMarkupLexer(RegexLexer): # yield style and script blocks as Other (r'<\s*(script|style)\s*.*?>.*?<\s*/\1\s*>', Other), (r'<\s*py:[a-zA-Z0-9]+', Name.Tag, 'pytag'), - (r'<\s*[a-zA-Z0-9:]+', Name.Tag, 'tag'), + (r'<\s*[a-zA-Z0-9:.]+', Name.Tag, 'tag'), include('variable'), (r'[<$]', Other), ], diff --git a/pygments/lexers/textfmts.py b/pygments/lexers/textfmts.py index 43b16f8..cab9add 100644 --- a/pygments/lexers/textfmts.py +++ b/pygments/lexers/textfmts.py @@ -122,6 +122,11 @@ class HttpLexer(RegexLexer): flags = re.DOTALL + def get_tokens_unprocessed(self, text, stack=('root',)): + """Reset the content-type state.""" + self.content_type = None + return RegexLexer.get_tokens_unprocessed(self, text, stack) + def header_callback(self, match): if match.group(1).lower() == 'content-type': content_type = match.group(5).strip() diff --git a/pygments/token.py b/pygments/token.py index f31625e..fa3b1e1 100644 --- a/pygments/token.py +++ b/pygments/token.py @@ -43,6 +43,14 @@ class _TokenType(tuple): def __repr__(self): return 'Token' + (self and '.' or '') + '.'.join(self) + def __copy__(self): + # These instances are supposed to be singletons + return self + + def __deepcopy__(self, memo): + # These instances are supposed to be singletons + return self + Token = _TokenType() diff --git a/setup.cfg b/setup.cfg index 48ab3bd..04980ac 100644 --- a/setup.cfg +++ b/setup.cfg @@ -7,3 +7,6 @@ tag_svn_revision = 0 release = egg_info -RDb '' upload = upload --sign --identity=36580288 +[bdist_wheel] +universal = 1 + diff --git a/setup.py b/setup.py index a8667fd..b15e0bc 100755 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ else: setup( name = 'Pygments', - version = '2.1', + version = '2.1.1', url = 'http://pygments.org/', license = 'BSD License', author = 'Georg Brandl', diff --git a/tests/__pycache__/string_asserts.cpython-35.pyc b/tests/__pycache__/string_asserts.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..87a027d2b54105781927e85946c3bf7f81a6bc59 GIT binary patch literal 1061 zcmcIj&2G~`5FXo!8{DKtJ#aw$>@BhcNm{8$M1WdC1V|_#TtMo@a_nv5)IVW&14`O( zAbkdS2A+X8*(-0siP<$RNs+iQ($3E8%)zd+*7h#xPl*`PKh*>c(mRAxO7`CzJbU@tYZT8UaY!>x z+vKtLq=>(G-s$$dE;-5>iKqzTgg2ZJAzp}u)*de2Kt&Naf<}!%HF|`5X27AP-4aA) z?V@2I4YpkOH1Gq;1@DE5L?voh?{;wUhp0~RKEQDW*e!K)geL}^ny@foZYg_IxCZe1 zAWW6NFyOOp#dFQx>~{U6HLsH>r<`QDK)wUy`C}}Gq<*qJue+AC5n~z%>F5|&F}bm? z2NLI5m$96=C0XJ$Ig*uOFvYa+SlSt-Q9`Aa^1(M?SFqWit>!RKX>-tL&4_-WNpt*r z%uS(iHj82V#jtr}Je5}q+f!ZfcUZZqkXKNFQ8l)VO=EUriK)ir^#91*%}dPDEL!1> z;hzAqg2$RNre^1sSQ$5FE48MSf}+VOl!LC^C{T3qrh>eMXRDB}{|)&(*)7Y8?`J_u zeP24hpXSjdQFhh$-%o<1h_H24wzgVZjfklRn1M77S6tZUFP?V>X#fBK literal 0 HcmV?d00001 diff --git a/tests/__pycache__/support.cpython-35.pyc b/tests/__pycache__/support.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad76a7321c5ebbc7b72784ef9f5ee4a7fbb89344 GIT binary patch literal 553 zcmYjNO-sW-5S`tmHB>9&K@bEN!9zS4@GK&D@E{hk;vpa*&2DXKk`22XrA1Hb#k)Vk zzm%(|{sk{On^x$sGralWz1i97b~~TvAGdb|;2V~VB0fdeM;JIjh>-xNkP!$G;Bz3O zkUJ1MK)4IM1#dWqfI{DIPj@=~sw|~4Y$z4Gn%w82Fq#>mjqc2l6?#6Yz5YX5-e4`k z4H~n`4*D6ozQphhFmBXe38-D0q5=xOQ`j!|Z2m&P5ExS!JMc^Z=dglcQFIr@ptQ*my-X&tNoBEWkJZKi?mpQhY8?^ovJypHCQ+npt9A>i fg|hc;`iZY1*O%`p^~y@=)ZpKoRt*^HiWf3-N~h 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_cfm.cpython-35.pyc b/tests/__pycache__/test_cfm.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21491af2a237366d4c8d14de47f7895fe7a4c0ac GIT binary patch literal 1720 zcmbVM&5j#I5U!p-kGfDu{-sRKEK5rP^!Fmfz*A$OthVB`U#Jr8mpiU39du&+`d(g1$J2muHN zrwzDtVH8rdLDX3M)#5lFk5!iNUX`blxyq{Yi7xV|;!H?B6iQo{*Y6!I>vNP;vvZkE zPxKK6TS9*K@bKQj-NVnm;4jX(J`w!8^JyVUt+*EB;#01K;E$dSpM3lMpi_s*vqY3i z9P!74FYEoMU-yptgJV9aBu|ANXSwRM{y}!2A2H((s~<&);O3SiB;>Uk4uXgHsL#;| zWESZ{Tl44;O(Pdl{CO68u%>T>JT{QB(0s5Z3DJ}=j7fw3Q=%R|Y9EaTxCFQWh;6z- z#QKpVUEDE#PBdfbo)Y=wcaRNSee+58q$)&r`a*V7@sr5Avn6F+jfs@CaWW}7vvcDs zp`XoeQZ7mgZ1Lec3hY?Vb(xeuz{i&PGXm_LSB#21wGB3LEOy}3QnE4iU}Ng9rubq& zcsbHWP^!sg8&ggw|Zba%wfeGWd92X*vO)HLzDxK$q+i^@ySntRt)pd&urM*%i zU4BW;COtHC9!1^RcG_-x$F4<9(}?4=N-$_RFEdTYF;1n-wbeJGV>`RP8++?T`<+qs iM<*QOOT97P4N9{uzX|WxwLhS06zN4R-gfrczWXl)nu-4a literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_clexer.cpython-35.pyc b/tests/__pycache__/test_clexer.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd09c4a58c037f32cca409edfe635ffabcec3eed GIT binary patch literal 6520 zcmeHLPj}nK5g&jcNP^H`%W<404PrZqSVs~=D{d>Nt|Qq_@~THGp_0Dxy_OFmRuox~ zU>0B{AyzMLZ@u=^Q;vE02EFtH^c&#XlP|r8@AWk^3jzfHL}p{B?xB!59?b5}E@o$b zGrKR$&1rxB>t8;-ZUFoP5|4uX9sId25(}V;R02x|TY@SwAumH!j`$Q*Q-V){tw1{s z)iktKsH)J;Ks5srjZwhPLOTc597yk5X|PoI18P=*Nzl^Z5h}^kER{mW|3WkH**4u~ z-PqY>CyX2W%=Luy_v4Qy#9MWzd&--QBX7&tiCCjlEZ$rz72kfxI5;)DBWCQKHrlM? zxrWEg_FIO_nDO2x`yV{`xUwFqv72?)aoLu!UAY^!?|!&*uUxrj96H>vm}fR^cU^mo zwt;dX6)5}c#0%7NuYJIHkluHG%Q^)qP{U={say2O$lSr7`w$63!=hD?MrK57kQwox zLYAp25L*fDX=T953b_ha4lGUZC`6;_g3p3A2iCmcvBLsbi-Om{S^{fX@YwkRT6iVU z!u63=>k=-99{QiwxPw1;5s3%z2mn`G6DzG0q;f&#X>1A7Hth<2sNypF@Jrx1l=jy) zj+{2zXdLhji~Ww-8{L7qH$0rk6|`0tL)W{fLE2^BC*2jAj^+i)UmPxLT{OmvQ?Q-p z5R3a8GU!uh5;OqLWH@QlT0L|mS#j|me^Y9Mqe@>(-sAi_W0lU z6y}1I-|X@f$ub{yJk}r&yl*?E7o;B4k$k{T(8yi8i5_ZpyR2hzGIWqPU6*n1-e*12 z4ivlTdOSmNt--vSM=tCZ6rLrKQg{ z@$W@xS-K+4NtdKoB>#oP<|c;3TTCDFI{w5K{|i4g++y6>me|>F59n2d30jT^#2#i$Ria4F(ZPf}-WAMCR{trMxarl8jMd_> z!(=Ct)J>Ne#jTOSB)8b1*|WXL25P)D()}!c8*)Jkm&kSW-aw&+_NCRnRN(U{=u4mb z3TX+{aFu~n^s^+O2LlXO)R(q`%wP$=9=3$EFWu@(XN4tB02pL`!A_4Ij)Ay;+GSxd zD`m6Ig6#cXr|vbKPLSUtu4jsu%q~VOH*J9ue2H{qAK*ySb2z79M8Pj?T=vqKQV5=4>Lr=rOC{3EEcg3A!7vicl~60C2q%1`Fq zWL=WX&2bfi)k7Sx$solOMN&_)!ie=?{+_5O8W*BK!-^U6cTVJQjnX;ha!llLft$?V z3uS+Ara(J%oMhZI9M8eSmNSfvVVa#G8iEv#6+Z9FlwL_)!qw+RB0b;LgY>R>!0e~= z?i_iyQ1mBqW(qFIOs2!BsZsV<#@tjW8u7}Dkyma$f3Hk>8G6uv-$PfvqlbPptA~yN z_*1$l|1oY|?4tZ9^fmLgg-@|E&Hhfc4rmj~!P%;=xpU z3S9lo^Y`GS*CKw#Seo=~aoEGVsv)}KsHrH5qhb_AZSm{(;D^R*|Df0FI z+vsC@s>tD$=<)8w?Y9bPCUu{e`Q|PTlTV%y<`5>us$sT@5k= zk*G}lv}h0&X(2Z_sqQ#!GF*_^nT02Z|XPoS9L?bs^>*Jt|e2e zSxz0N&-OY^kG?RF9ao%Dg8ArndR<&-gys_m9C6pO5I2hpYd5_3&hDd*9lWv;GfZ1r ZkbO7&=-YIG>e9xkvbe~QUzQeA-vFQqjA#G= literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_cmdline.cpython-35.pyc b/tests/__pycache__/test_cmdline.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2de69dfa2913de572e92bd0f53511ad41a40632e GIT binary patch literal 8473 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 LuH*_<_1*si!)HNW literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_examplefiles.cpython-35.pyc b/tests/__pycache__/test_examplefiles.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..020e584a89c18cd527671ec94725a60692912ff9 GIT binary patch literal 3955 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 UIdw57&~ozl&F4tuoyzt90$GBOm;e9( literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_ezhil.cpython-35.pyc b/tests/__pycache__/test_ezhil.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dd6ffe077ea901895097d1587dc08aa6335caa76 GIT binary patch literal 4559 zcmb_g&2JmW6`xryzm_XgwqrX^lXmL#LyT$3u3)4!B15&T21Z@>LuwB~5n@fQC^Gzz zXLoCfa0&!&i=cqflTSVLkQ8uwpo$)INdAvG5$LJ^0#E(DS?+2?(S{LZsU1GPdGqGY zZ+`pUjxH`NIM2TL`|tjCiLw7O<#F}~bp~YmN z^)7qDFx+BWmBR43BXHgEf_6h}4)@yK`~HD1#kL=Wy62B`E=Tv=Y7F)dWxKT(-Vz&$ zD1LPP#!c~yDBNp%d*Y}4zSr}*UR%89lkcwAZ>_g_Uc0;881!z(Zo2J;-w*s-;?CCH zst9~v+`qT6S=-tay8|hjehBkm+4&z}Vzr8`3cuX-1x9IvB6gObaFu#P*pkH!b$01&M;#T~!_Xn+n>Nw!%EC_o2-&4SkFShL8Qj+UV; z0Y+C9^_+xSgTp&r^i5N4;0`XM2^j(Zn6bK^m;}ttFrL>c8JUBL%618UmG5~6ciX$W zSdAU{-QCZbETMZ+UD+G-{FT-NxzhCi;CEN{4_iII9|kKSrjFaXhI)DbP-O!@{O$fZ zn%_plxXXv-G|*+;n}(Z#K^C_T_xBLMua7td-9fk(+qGDTa5Gwnm9~}vSeAsA%|5bd zc^#WQhH+NQIo8Ru$DBQh|11!XR-CI1?HgBD9mQ`<_*KPM6?ZBHNkORmy?*God?^V% zNs+6P7X-cxHy=h`SJ~Zm5Xu7Sot7WgL)!NM2s)%H>`G5#qH=MEMlNn#GRPBDTT$;K zegvdpJZHJQ2z1KU@a!=@Q@axg5ttgG^VnV!p$@Q#K>`4pMg*7!1Nc#Ij8@#M0i$01 z$j(~k6O7@fkjOUe1NljNF}9fW!qQ1(5VVxYrhn+&L=XFgM27xMBAY%z?lS3HXOoRB z=#4GvjdfV3G-qQMYs2$5K3KiFbo1KH$~&z_bIGeds5tTrfSd3SH^R1r~iW&%yl2`@&(thsXyU30RCl8iZD zWg#ZE&TrpCXUyBTNums>$*%H0_YWTpWK-p~LImCVTD&e3ukY<{g96Y zpVHW*?u<>!JyQ>#DW#!LDGfPIjPRdw)f|htbYhIt`*ECjPVopVCeNc8_KQM=J`L|B zA)QTp!v0($zj{dLlOf+=NOKVbGOx{>%MA4;OSq7XHSLS6qiap`;=JA&&{EDIw_Gyp z&1hdw^su>{$e1xrWr)z+cXMpY4UB!m82cid7x_X{hQbphdT8S|$4m!O)a z^cnwii8O;}x~_TaZT&jQ+ep;N+Y35xpJAQyoV@*JEqWKl?`^TPK`A@VzMtvzjP{f9 z=m;4c9e*B=KGoV!bw(fQr2Yw=D^{!ebb-|UT<7+G$N64oVC4R1+UZjv@FF3W#6eXY zii$pB#IuPtfw$_VgX&?d6%R?%?#CK!h@t}J8Y;`_szS%4=@l0gsyS3#o{f+GN_FJu zV=-NqF=mjgJogpl8XnOvfV z3Zvo&^1J%`P*PRY6>w-191$H`Vt^-nO=SS_FspG={2_j}`|^jd7+PyN+ zz-ouDYlri(I#o*Lo3O4d>Uyg38-pGdIaEy4%dRi0=!|RY_es*FmWr;*--+7Y5V4)C zxnHZqx>RC+Mz5lH58a0M;5i!Rky*Fq^U6S2;osMB~k6ge~C2g6cH)ct%7V^i`(0SEp=p9Jr z(a-@Ppp%+wxwh-Lm)y6so@T>;2Kx1SWkKcZ_2!^~$qG@w9TLFmOmfs+*2lW|aH!vw z=!6&(pq$$1V{{OosSDc}zv1BkN%PB}piwqWWrU}rr5IJ=y?CX!>F}V>hj>x4uJFao I<$t>T|9y-L@&Et; literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_html_formatter.cpython-35.pyc b/tests/__pycache__/test_html_formatter.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0dcf5ba2fad586a30f5afb95330b97eb16beeabb GIT binary patch literal 7141 zcmc&(OK%(36+SZ@K1J$fOOY)nW|TS(lbEvII7wZ_abnA{0atb{HBJc!#E5e#QXX>X zJ40JyqymKkbkP>w7hQDGE?S^K7e#PmkbC1#zyHuaMf4Ba^D~0_Rb1h`MdT4xP+H{KJC+$K|M*8&(2U~meeUyW3)rG{yeE!T7QA-n25j1X}XV3{_eexKJZ4! z%hRW@N}g1T){C?QL%hfqSuPcNf6Nu}b9ZyCrP@(gyt(q7+r@gITW%C7U5r#1g)-s? zU-XlcA(v}GXHz%V8qwwAwL!Ib@%;HW&s{u!;ZkvRvlunh?z1B0wq7rWN)_Mx-pb88 z_m<0M8NXRm?ND7VzQ26k^xwX9ZEd(T;AmqiVg|u0_qD zy;MrX&U(;n$7!#r+ipw6sb*Mj`U+z+%Mk{z-MWMN$lcAT5wvfs4W&zVT(}vv{2PNW zj|)p(fA^M$tFY#FRJDO&aYnUkfrpiP$!=6X_jZlnW$ z!8pX9BX!^q@JmS@6+kW{b>L9^&EwHHaAPGyUV*$(8G`|1Z5lLFdCyE&`X+6yo0L|?rMH$+11}zqC zr)Ucx&(c1izduS@fdprz*5R`tB69xH#o)8BFPvc;s7 z>DA%pD|a^IW87P<1zM|GRK){3-RMQE7fzxeYs|`8<91fcS!>ejoq5KU=DAT$eaTHAmFZ~=$Hg9&lm z=6OcQz9#ljftn74x4K)ZVL z2HNx(#_DmNkTY;y(ZFv~R=9O%QR_g*$(kPk$?V|R5fZe6Fiv&bezW~BPTyIUVI@aT zVMN8@cbD>FoD`4?YEAJRuQ4Go0-zNr)vw|+%V-YgP*7slo&^Lat#K=Xt7sMMq?NPJ zSf_D+(kfWJmyUqt-t}sGIj4YS1(Y*rHR1eI@Qg(pp9m0zHGnV%CGZE#fl8Qi?A;b2 z(te8&si9Di=NgZcxqI5zuqG%`7FkQu^^eE#$W&VF#+Qn zEopUV%|=s|wjJ8|keL_{l%|_ZY8&tF9d&_O&Acnnj0c18K-pk8ur`w%IfhjSPyajJ zfAnWuzr*!&1a~IDsimRO7(aY1;|fbCu=b8v47&=uzfv5~AbRPEsh{A6B+fQ7u(yKschUEi-_Sw!lvyx<2l z*AK6hWd+S%$BqI-RXYgv3Eak6z6(2UJB+Q{ai-x{rQs=~NGc;RLpX1^U zF5cqeZ7!J9_iT@G*&cg7?FRb8Z=fJ6pG?3WllYyn&e)^&v~^5=Q*PgE2wdh{7g38xCfGpb7j7ET(B4yp5p)>NMzZ zmgM_adJ_vBt*$%>U%Pz_MPKmSeQp)VqP9J1BktFgxUI&_L+>$CMK()GBg>!*X;PcTIPQ;9Hhy9 z!=?I$i%0se6S+Fl7xDC6Q(l4@-^BISe{V|tZLDy(9rXgb4w~`gUNcsoG^0i}p45RnBxWa`%_RDO0>8rHu3quU| zZMz?Yn|RA-aeV#@aD3=8L%VZ8VXhInIE~1$k1n7P5vq4}uVbhKah3J3r0s~@;9Mj_ z5W`?v=wSp~X4;_`7OJp@Nsh&1Go0c?$l^qlm`rH1Dv2MFKO$)m@^_?j_>&Bf^PvPm ztRM-5W>_!a`PO!tw!r1168@1$p*}|I<8q4>%G^q_)fc!EB5?m{)b)!{*BR3Prf8D3 zAmSl>I6gp`AUI$VPTcUW&?wOJ=oAGpu_Up2WlyA>h5h=uabM~75>H-RtvFufg}p2v zGrUm_gPH{9N~#^MwfwMWpW~~Ba1nV>9KDmKy{NnGqE?W=k@AX)1#VcHGIHewJSa}L z9)>KLHAh^eeO}N}?OmO$S*FHL$Bh~~fvSF6#nK-A!J} z?gVi{t0+#Hgzg|^8?BA3wCVLzz8_**_zDWLXRNF}C0aWNJ;BOi7FQmr-~{V#J7wjN z5+13z_pUkwJQFwDMF9UdQ~>xL5s!@6VTunNKvFonTQTQ?U}T_%KDmUpNaebzVcDnOTah za-2cFBFa!`t>=_ETsY-bS4-Iw6e6hd(Lp?lBLT$7O6= zj2-q9DC2xP^kTdIjF2%o{QgCMfd_@GA&pp`w#VSYX*hA(nu4}DGLPTCN)6m3KO7~p zxWs{VRQ53z=t^>QbF{>ng&f>4W62JG0CGCOSjeuwgt5fBBTLZPFoo*!8{GK(v(G=% zAEMS}M6G`QD;;NHd9h{K<(=v^A75ToIO0&nPl~mmjXW8Lg=aCecec2#`7HMk)+l9m z_qtxh7}@8VHTHo`J`hGMEA<^N?sCDK@Zc^xE7oOz|rL{LH1q>dzTj6VneI?J9A>t2BiGHGpv_x zpS$oT;BMQEWM{e=iMr4jH^5#I}p4&tc7w7MF+flQnq|ZPg#V7+R8qHv?Y4|DfPx*a(y$Ebqz>#*8_yD-4c-%iXByn^WttVVlqY zH4$n)gpZF6TZae4q1h5l{FRwQy5)e;oNK51yF1SCi3=aTu&LSd_>>GEJKnf;d(r43 zN2HKl@5GMZ45K*5LC2h+>)ZV1%#WCakGtkV1hM@NGi;n$Fdn?ZVKpqGNZI2yixu;G T${xpVn}%G;+fxuWXA=Jb$O}3> literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_inherit.cpython-35.pyc b/tests/__pycache__/test_inherit.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..880b711cba09b175daf4091dc62e9f3e1736d8f1 GIT binary patch literal 4403 zcmds4OLG%P5bk|QTCHVcUQSFNEFmFL1!O~2a&S>ZU>u-Ai4-;*RF&G2wS&B7wJT=V z!KNS==MUtP{D%CH{E5BhlvD1U^7X7FYi-HF4wXt}<>?yt%=CQIU-vxbrl;*+!k-^M zvWR}CkYCIvNn@=^L4mqOY8FYm;}ys& z(vKKhB%#q}iFVQ7qB~xRJWDlLBn+i3Lt7@#R$7}xS!r!(r^u@)ZH0ubv{TSdlQ*NZ zGXre}+7sl>D(&n*I}Png@=hu3se#=YXit-OMrqHGm{E2yTBp_O*%!ar4!$)JC$aM+ zl8zs42HiYx-PNyqEOr3~U_p%cU;oN+*cK5-<)mmmI@Y^Dc#gcPt^>)^N|K9RSV|7J= z^+eM0gSck@0q&?#)l+*9a9ZlGrK+Xon%GX-+-dOXsMJy7`w#-OgHcGmPd=Cg+hE=^ z*>T`}$Z!)>4@d>~Ln@n4PQj;@bn0H_MD}W1gMI!Clmf~!O3Wf5+9i6Gg_zE>yhPxr zaGSrqtI;c+UJ`8r(O_~++cD{-PP;lnkT93k7~1CrnJBAl-+}1BAklYoJOwPH|NJKG zY4np$&x#nVNyY}JS*{z4;EC&|rCuvZgbbn7Ym2G2{VPcuonF@#HlnUr=&Z{HPkb+e zgf)kuxC=TTa6ljtd;C7o);v5?8iv#nNu zMw1tpYDsEhb+KAcCZ^a5Lho=GCmDYcg0!-BPJ40rC~Fwf!}PNeMgP~R9E*NzC7nVp z0?KbA0wg1oC5Wmnu|bk@@IFt;3L4%)nM`JPD@gntm+PYAhaor~N2Z(}PBp`|6D(#S zQmqT#%C`oCj9nRsE+={N*&aUYLYjVmU{kSfyG@_ft7rV z898s+J&kH{99U^^*H2lDb1oZV5Ha5qGPs7O%)ed0=NW*yAbh|z-Y$*@m<=tVob z2Y46@pP^-+hrvIdOK|UA6u_|tqQI1VAZ0lD{2K#Nxs$C=_9@#~Mj3_xJj%KpK({4eqQ+!!YF*DZ*&7zRDYA-sMW54VjrsXGYp#r+g`e>k<6lFc literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_irc_formatter.cpython-35.pyc b/tests/__pycache__/test_irc_formatter.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..61ddc34b5ad7234e41af0b92536e626dcad48ca0 GIT binary patch literal 1169 zcmaJ<&2G~`5FW3c#C4K3P^t95!3QppAW6f|A*v7%3RJ4viWCmMSgyTE9M*BzT~|$2 zxP({W#DOzUfW)Khl@k{pfD^NJ8!CiYXD2hWv)|6lHyic3^YPoK*FOoscet`F)F0s% zpHV~r9!diu0?dGffJea4wh7Dx&&EzU;fhlqZ3dl)I7&De{2#|5;8R(F@broX4ZF?796*)$MjV5AJk3Tld}Lxhu!? z&r6a9$!%9q>OOvT^y1*OEs>79%0Ku;{wLSf4%#-#Wo5Fnxc0GNaP0< z0_O%y2uKso2`q3n&XK`<640KMbddJq+k+5Q1{K^EL~ZvPV>&1T3RXQ(1ztp|ZxqL@IlnW^x!a`UUtZLjAhe z9;XRykB)geq9>HKXBTtQ&L<<6e#}FEIWn!;T&?RvKTJ8Nq4W`QmdQ+(HvtGjh9m zO;vn9O2Yzjn8}PIB-bH|aH{NV8sq#6sp^*nw=x;CqQ7fPAJbDMxTWu{FTKlNh@2Ev z5!q~(a;Yp9Bcy}P_X}#cZiupv@TGo$^yp--6rd^Kx(a1)7j-|>7sPcGWzrxuqedDA Jexyb=$#3G`F_8cO literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_java.cpython-35.pyc b/tests/__pycache__/test_java.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a6add95d12376baa494e88e0f7022d2ed7a688f GIT binary patch literal 2221 zcmb7F&2HO95MELgDN(ZJ#%<7_G~M=4Sa2heb{yA2Q6#qICaE9?wNnJVEGTg$%Oxds zNjtV;_u{@nPkn%*uTbdF5}Cv^Nn{bvA{yEm zB+QX0PrN+Qz6r7wY4+ZqRSGGpK*%Yo#Kkl{ZbN|?H@DncRK93Wn z`019*R+?ISFgz8#?m<$cTN9S9IL@O7D~`KHTcFKEm;ee!bu z>F#%XmDEkxYx920YjksOJJmOyZPlB5b=nyS8t}yLg>l9H2T&o+a#kAq{3MY^(~r2! z?GCx{lYx-dxBT?=Km^ik9z`uK%9_kiU#E@FPA(mo$8h3@KsewGfC1Gn(FULZUVs`< zMBX4%00HX20?=|YhprK$wgyh{!aI82f)jrLBq8L2kTXJ<@{bIJAn>@>EN6rTCNdi$ z*wTvplkHxo134Qp4?DjTQ3UmPxq2{&c(vOS)qo%KusXcNvYJ5XSW$KenN)_SG8^;c zn`IW#C?N$dRszu)G;&OqD+Vf+~oqM3S8%m3%Eq>tX8mia9w z*9!g#_)-Ob4ZWHc9I%9HuV0lutvHn4P~}MbAv-C}tkAq6gg!|tKKnQb)5e$;&Nj)^ zCkWF%nYDz0oA%7q(wwx-tR)DiEi`L6emBO6+F(zp!&cX*<5H*PFveWRWzMKd zoeHh2Gk1N5uJQ*iTMek&p^up3RyO$ZDtM^4J43j?s=xSh+m@Om7NOdnzSi*Ut4N-i zhVrs1mSoO#`R53*f;*|@+gqyUU^%LIZ zLd}cJJmn`cv)fK&X0z9q*`09UCjwWb_z($>jQ9x1<*bN%DEJr&Zo!!uS;Y2+_0C1F z-RLE-`NMb_OyW%-FejR=CIzSE{~ws6d)MaZtw7DPDRYeV;j_b-v>A&A!BL2Okulr= zsYc9W&i9dgj^yeU6o<1e;LESpZ;WUa^`cRHPsz$fX)zWI+Tb*I)bAzuzH)xD^($&~ zq)Q05l3GIPI#RHgriSXX5~tso+&(zj@?lY7*xT}vxv$c9`5G-^B(QSyC2b+|FKrvu A=>Px# literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_latex_formatter.cpython-35.pyc b/tests/__pycache__/test_latex_formatter.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed994e92cd55139e03769779759a3f2534338d67 GIT binary patch literal 1779 zcmaJ?PjBNy6o2D5w(BHq+R~-n?!id(5Q$CNmFS@Yw9sv#Qq(O?VY?BM<=T_Psbia& z@wTZF4wO45BqTloUje?!Tsd*&$cZ zV6*_;g?k$=bX}k>3@bpZa7*ADbWwxuB77cM5ZUkpy0?LvFkFIL^jKG}I}PXNch|#l zGVYIPD!A7U&gi+<%h)Iof-+A~F1S|t?th1?b@sw6AG5eW5PRPKob{eRw!QPA zcQN+Ffd1=E&|vg|$0_wb{p#$Cm#3ZP%uEu8H05;9`>gX~w%|S=ZfTgH!^lJpV_E`X!_a{U59r2DO_-KJEWprJCZ?9=E1Fhe zSc8eyL}j9s7GZ*zvf$Q$sST5og22RpiLE3Ae};8shKye;h+r7WGE5zqI51p+2>mW7 zgMEz0)xuQ_gG^C~w%^eKpd9(NyOgGt`Eq9WRk{hLcm$U&uq}c^ybHs1_@2P)^gTGA zpm>*v4VY9^eq@3LdJHIyaE$?~6gKZt(hD??$)F~N+G$jerP(Wz!<-qMz;fw4Nu`5kRgNT)s*b#J;_u_;~ zdvwXwLK+#D7HWrAkt~OUC}z^k12K>`vS~2FSbC9mWX--s)Jif=rOS(poMj>9T$WF? zhIw*yf?-?*v0xSD&wklCP|-@87r6>wI-ScnS74Q8{i(=Gz&T~&Fi6m*RisIrUN)-I zUnL+^a%@xiHu6lC7)5m~WL}70 zfwfTn_ik&DjcBWX!CDc0Lz7m1cjL754Wp^A%kJM_KFxeAm({laCP?DQpILm2=6Dkc zkR`H3){HfyN;b#}sS}r!NEM$ooJ(Yx)Qm;LLTTNok(>A1Z`}y08VHa77(d2u-0^*t zp6^T7_YoIGqWG%se_I5}Y=`Zjd!5(=vaMwJHvsE6xw=)VhF&+8rS1Ds7S2re3Q;gL z$&?CPMIxOdjq$og94)Km>byA3`&#fBl$P#y5_OMpjXUOP8%Y)->@&os@2iHOhnm{3 x6;xjwog!w@!+wB`S5ZEQTy==4@TK$7Ea6WaTyb@qSwdo$#A7;Q0b2W*#dp;(VbHcRoAYGHeiH|kr_lD#?@ z+E*7B-@JTv@ya!OW6wr)_MN?YleKVzhiz{a$%3 z=C6OSS}2wa>PS9|yhb4At-sL5P;@kzt#_CZt~#Y-$b7*Qdl7H2hish=F4G^@f_RiE zvE5xYtZB3w8$HQwtJuX1k_cd1gKd2}H+aiyGMRQ=l5t%;XqrYe`#tb6-0Gj#7q-GCTc~gF1s{(aEVTQ! zS%}C5ipJk1T;+=S_MRMf`+MI+ZFg|XaXPw=1T>yUTBG5h(fkeU;vy1;u)!}uIshO6 z2?2-*C`V8XsgpoFSWip~3FY zG>KMRyZ14xw19qQ4gh(}@XVA>r{V!qPBop^=YYh%`_-Y#V6VOY*b^;F2 z8A$>sEl$E+Jo?9_d!#%Cy`-AO0Scv|hp}M51Jr`LP#{AZH+7gqm0DyC#8D8%v(QT` z5hX|xJJ;dv&a~R0>?Dd(=NsKbC)&LH7AJ^wCuW7+?1;$btQOW=jV`lixs#KpR)kwqmOGjZBjd< zO>24l8QN)l?_N8Grui4rTN?zafvTx1%w53&;w;h#S9JsS5pb`N%h&FoCA5)$5nc*2 z+RkL(rCQN3IqBdgkpz+RNF0MtPEkD!Y~2ZlzGJRI|#)m5{K1+$tAd#3&a~ ztFVxOZlD=5`k2;z zJjp3ZOkfxE`8h3@S2HzyIcx;D8`uRIx*sH|~9mC6pIR-^_iFqxE{bWz2(OnkJmTDsj$TJbYw z_Xla)vinnW{i*Re%bvrMXW>(^u;}!|cO4@mMj3^JqbY0+`9lTOMBnQwj&Aa>NjY|b z3{Py(rVf93t$T5Vq31^_Abh`y%Q*p$&k}KnC61bk zRWXJ&4GSqeSjGD16F=Viqx*Qdn^>5$=N9UCc5HtycQ4^PeJoC@n+n~P22FT-_RJOw zg3$gfu5$B^#Q?v}wg9*2itspr#MeEu%ng9kJR8G;T2SOItvQ$b` zcB#M?oL<}~=%GFL*f;4j?6s%9f=``U>dUeMxHU?fqrsBeo&Eo2c64uH!TGKG>vysM z@E1&72KrlgiyzQL05!B4L^{M8)X>R%9csGra}ejCV?fOSjh-10o6yNaEf3l^kqJ>A ze#RN{z%*!EaGryjO|w;fYw)|{;k8{Ct%kR=$4(gc4wy*Q=ufkkqlPydN$-@mn#bv; zw=;6R%KG|~&noL1kG;cFFFj`7i_>O@byMM`tls(56O4IZy*zlf|82FDO%t~otSi{2 zw_W`@d%pL4XE&(sdPfQOB9_)$u_!rzqXrQ8nlulRA6XZjrTxP;Yox6=EQ`27Z;UP- zoh`h@_h=Yuhk~HZl+sCvS`H%oHJxtJAjIc{syKEaltKF2I=v z=h?rGSqqem!63i2y5T={2Kv^j)HW_O|3Z5zHOF^2ZAMyqt(5V4Eb~FXbI7=~o_AB$ zM5p+o-)*G*dfH05(l}rzsVvroU_9M@-N!E&aZ9A!q)D76OT&~>N%%QV+m`kbud8I0 zHaqEIYOzRB$c#;|+#%VA%V&$@()aL*SVRL_UU#(>&BebJeXu%D@_7?nB0%dX0>7Yh zT>_~3m;hFH#>X5nL3;U-ud;i{2eaFz@uoH6gJh78t@sq6?abj*2nIItS*r{QaR=kP z(AK0@;YD=0OJ)I$UsSv}NyC@OPz^|XzlZeFg!5Z8wnBz7mER#laQIy`Ln@rqY;EI&HCq2%DK==>wRY5aPkc_dEuZ3kY*Cjf%IYsABbp8t+)PIW0kkpvYT#nWh zJH=~Qkz*g{ER5bkrjBA-{1;4%!N4V^tCh7!{xny9AGdj-t@01>Q)-W{MVLRpmv0F7 z;T5<6RvwEcSW38vps*&0v)ao*s|tL4E!49!Ujk0~sDQshXBs%7!{#}xr0LUe#ITtg z5inI%;n{~LpapF#uPdjX84S#=U>^^?9DYpIP+_))ZdNpRujsm+B=MKHH$inwS}tX$ zmwzqo=-Zd{8aI&FGkQ(L`k%W8o=&fJtE2vrLw`1Fvp%BEC20ip4wKe)zZIvg?hUi{ zqfA|DPFZ&#c_u0QjAWiP3KCkSY31EgziX<%FGxEKyBK^JN+%3ENz{+Ycf*i+UG{|I zZ%W|rllhR$$7DP*pOBfHsLG?(!woc)V}g!4S9f!6(OqzFxdrtEm$kw$N*cJ5-S4(i z+OgCVAs0tKO-ib(X03W@Jg9z}i0rqHeSlxusbgQJ#pXpJ?a#9feL*p))TGwx>dV@4 F?jQPSQ@sEH literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_perllexer.cpython-35.pyc b/tests/__pycache__/test_perllexer.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15ddb02bb47b5b8f2bacf0aeed0fd4549f7a57af GIT binary patch literal 6954 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_regexopt.cpython-35.pyc b/tests/__pycache__/test_regexopt.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91d94e3fdbbe2f89e2830b040bb20f4921ca0172 GIT binary patch literal 3150 zcmd5;TW=dh6h5=Nw%3<5;nJ$DC^b+7D}j?1C}2X=TMCsbgX)xmrE0bDP8_G}U1xSf z6O+J0D=v?`zyt3{`~Z;n1-$VC=9Q=Xg+B3}S=+Sf1s+*@j*sVh=KIb!J4a?_DnG_Q zd~&@^^cUUt)Zm{(Nq>h4i8`=?LW?3n9XPpfQOBD2Hg)WY?@-4vzD-eq21V)=Nrb2> zP*|j}M4?N)0(DBXbKLYRQ{>RVrH+e!73!4fMtq7KS)p4MQa_OpBCJwaqq_*jrErG3 zd=?A(^n>sag|l1_D{b1S(jA0S<5=6?-00Uz9nXqPv$VdJsQPfHH;{3bHk9ni?PQpl z_Aej*R7{6vHyQ4zes4W%)-O)n`k94=v#+07IQ>?Ab*G-K%lgOT+3T4M2CvmqDeLF2 zuYCB?wRR()ChB)(oXTeXLiEH+jZyh}KMI zgf@MR1#G&6e)xVOHs7Qh$fLIBv~&?+${_0s#K8{-X`{S>k{*LWWH)DN&xD1wk6}1+ zi${yrFXUO;YAk5c2L{eCNg`Fnn0xc{>&ZaQ_g2+>C_k6c{DkWHjM+C90OhPVhCBDl zi#-|3?V(ya!3%Q~MH($U5!J?GlyrkAU204RdnH}SwuX_^b|hn6?q^bEh$_{kp-RH7 zZl((=hk!bm6voWM?`dKW(6#Md!;n&^`2AyA`E_My}=L5=LA zvI_WXdhQw{_|Y(9NnH$5IZZKM)j_$)D<6l+4+)G$W+25li7b;4ZO?8!Kt2y^^RSaJ zy`2BU%zsF2v1chhsI(Xw$a2Gg-K#7z#-MVzbc!eD;L0?5 z_h9r5P5~8U(!V8lZYL__VfT?dodruV3EDk>_2UoEUszs27CNbn)^ri9_pX}6h&yZuZzHs{7CgWcMf= z6ea@*DHyQeO8mbcXX$(!8DHOS)wxli$aO|w>YF>32LY7`h zF)NBQRu^yGX2v^imiVS?$BoCHww2u0;`TwFXZUpS^T48=S1?QZEDSkE#4JcYDUOK4 zVn!TC89o0H;SUU+GR-h>mKdft;V{jRpph(2Vz4|G6rj$J>s%w?oB1$&Gueg==7Vbu z?Oa=!u=GIRDR&TE+jCorqfi`%E)JDk>u-;W%`Z;Bc4lv6H=6;QCR8!)1t1OHg`r|f zUgyybHmBJvu$hPPY=gJ9@lI2G;vWRGYB0%HJd5^}B~IdLQ30Sw@EJY#Xc+S$|6dT( zt+fY044TcyfvDbQVEzR{^$vG>JcRjrOX&2UAJN#IG9_rCb#lk@}=rBX3F2GR?XzstQgfFon8M7YI&}9eLoHc z()V@6_Xl{(N9@;ppTo&p%#o$u;=R1f<~=qS*zk4bK4aeSd8iu)PwM?J%TpPF2ErZ-z7NA)5a&8thj%H67021DFJmX%7B tc2~wPakI>QA(;p{F6}PnyIbP7pLwkp0hRe!bJk(Y7IOe@#;O&o_TOJtwgvzI literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_rtf_formatter.cpython-35.pyc b/tests/__pycache__/test_rtf_formatter.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf3727a4f7bb3df3a03d5c10b4841c4621e54272 GIT binary patch literal 4442 zcmd5<%Wot{9j>09>3Mi;PqJ?!g@%x91`>Ph-Eq7Yigq!(!BR9Ec?^+;ky`EUvOT*! z530I%*KJP}#lVppa6sY!Ie>&j4iO?8I3)Z5KKG4q$^pTd6W_0D+8*1p3yYAFo~i0z zy}GKu@AvA9)6=D&_kQ-h=PQi;jg4J7$Tv}>K;<*mLTxZV!vce~AmDGZAj7&QYnjZT zc9sQM*3Ge2PPcO`uvjHB#vOaBFS>3Ra$$#DhEh#<=ZRNI%~|pKgI&?t-U(Oi)l{?> zYqh0U7i$Z3dvn(gclhyMA$Pm4*phSm)^|6)b9cQtrymn^Jl>Oh#r{_F+j{)Xwbk2= z=50Ee?eoy>1ahwQ86abgs*y}JL(%DNZ_r`UEa>LiUC8D2aO+O`I%pR+_@nSm{)h{Y zR;O16!c7$U9x4tRfHUe05dho)6=(p8tt{d1=aigdzQq7A^+PByzo=wDUSj@~lF?aa z{uTe#RI9nf+~%Q}rqh`L?#@fifx%#_aD+-y^5GYzaZ5TM$=O;NCVkf0Ex+>GqjI$Ya0^jL! zDcx;;34QV+DrP)uJV(Dw*|2g~j7nzKs2K5=&+5pD^20j#J zM16*ZV2~+Vvq}IjpbaXaXoH3rVDFx##?T8nPqG2_npLAwEhO2X1CtV}EA8Eq->P6Jlb;FC#x z9nX~nH8U<7Mf@s8*(e$Db7w$0UgM>(I)=wMgKe3!#tTp6 zOfNja8HFlkUJoEl>^Ca-i9y0Tq+rwunY>3y#QbnIoG+V9_?G z9&u@$Ija#DU3=5^Y~Ow-K2QAJQLhNw@%lm_)@W}{j#`;SHLnmxBm$0PdxEe|3Q@0v z)J}#-1MYVQ;!8CDMO2ebVvSA%#}zIDosesI$QalbJpZ)uyb-@N*+5P& ze_F_OngAP_2)Qzr6mozK$hE^$nZSPqdA<>6+xFgGoNu@7_FjAMXVLudqQY8dSz}^MI_#;-@T4^hEUxet}$d<}bxm#CuLQGA1{SEzcGs^g%jB+AbP z<J{S5h;oWqi>&NaP$xklSj_=#NB4M`S4|El;M?Ps6z= z>;x(|PR~5Ql#-_*#wPHC>B Px54T0AyGk|T*>?!f;;## literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_ruby.cpython-35.pyc b/tests/__pycache__/test_ruby.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4f721e86a75cd04b1c11ac6c3ad250c0c37e1721 GIT binary patch literal 4092 zcmc&%ZFAd15WbUTSy7yqzS2TF)wsaaG$>8dmZ3u!+O$B2;&z&p51!0;6zk&J^&2O- zb)1ARXAuuhIubF5>ss>wQeR?V}H#i|zLWMQ&)fpu(F zwHf~=$g{v=Kf{m31ZS-&_8QMR3>GF-GTkh758$B29lbuFKbfeIXgx^_kLm}L|&o;h& z{B+%m-L#u^(GA5N_ul&bSpVqZ+Jnma19!V8-9SWsvmJWQpTL7v%BHd(_l5MMo>W$4 z(Ag4FnHyplsr*Loh3J;Kno6fpr)QGO0P_`oAy8!k$O0%(;{aa(1V8~U&?DYtDR2Nc zD6qiRa*G91EO0ar;WP`1nzvan!-84O!(a~J&MTWjAuQ`0gVII+6v-NX;YE;$vDb|4 zF;>&@5QC5y9_N*EPFgTg`8F+zDs=qe{pR*I=4ghZz5P3r(@>AEFFx;e#A0JhE(YSI zXfO5;Fkg%?bf{@fA`-8^qw=AMp7l@D@Foc3MLwEM!t}H<4K@dT9zPxICKx2wKBtgd z2-aZR28$4EPBXF4)I3nk6Vou+zCn{~nQRZndCgm_RbYFZy^g;Il9uLcRYv(G&s%X6 zUm6*nr}&EEPT7_ehAKSlMxr64B=jVOuBQDk6f%17J{{+yo3!}FHXn6vl z0v^^`)dll+S*7>m33;Z|i;~aMd1k#uo)s#i!jkKG?g3_F?oztF0X53B7`p!gwUti@ zHCmb^t)~7lwN@sOyM;$JayGU_7P*$eT0kq_m3lKCNHW`#Bq(h0CWQ?OTMQ(46gG`z zyt}bOTPSITWNV|O*$Iy(5^JXt37&Nl9+uMyk1kV8`0QBl5Jxg|k`^9j6FEH0C45$% z^>)N&KCw^ZJe85e)%b zcBQiZQ}ohV9QTm*kN7WSV#uz}#YCR9e_Q{U*ZXhwb9`Qqe300m82KgAHf|<+x~O}{ zjP4z?tTlH+@3>qUeOOaLgAKUmo*)mBTp72zrXY81n_iU#c8NQ6>#D=GPUk#-({)QfpO(N6iT5nYOal zBiZaWly$#1*lG)9Q^S+}Ui+ZgJsEWC(ZG+Iy{_(vhechP6~7}?;XASOswabYD({!5 zpCu#eK`Ic4U~M4VJGT*N*al&SWuE5rDdIyk=8`-5PdBy@HL%JX%V|7*WoAJs|>y?*O$>Yv)gE*9P7O$ypIq%YK&d?$z$K&rs^t=~@ zA>4*^G>97xPBAgMmnP6X^3VjR)U7nA^EkZz8&I=|9`+Xv?L?PJC25!W8%f%IP(9MV zg9CWlcj9N!v(oyOO41&bN>UqmOM4K!>AusLOICYIuQnDL{c)PLP>7D5TIVXG3pjXs zjc~Aa?IXFniEDqsEiIPHj>{2A*H@@%BL@XQI);=@$z7i+GA((kn?w1g{ZBiO=W$ E0*Gq_m;e9( literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_shell.cpython-35.pyc b/tests/__pycache__/test_shell.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b6136e65591a6799fcd2a3b17c0c2b879b9bddd5 GIT binary patch literal 2803 zcmbtWPjlNu6yKF)TalH&ErFIog&QWADRJlwJ!A-zCe1)+GETs0nF;A=6l-nEl`XR? zGqIX*315LzPaL^%=5uh`D<{4}PQ16W6uY6Fv?$T@(|fybSHJgrZ?!l*ZT|Y_izhEi zg#1m$E*}bTn!Q9khK@f-}1`2cq4XbGwD88lr!5cu5Q7tcKa77 zz>`yod+q=yV4oUkYU)uzG}3j_$s=O`v5^HH0h4_C2y+c2*2oLE6;nN%Yor$NPNjMh z$4noy!P!EvjS_lWC331EsvVP@zz$1Fw@7E2oKSL>{A<8_1lp>_*IA<-+U2F^ZngSD z`KbJ~dRjK6j@EN(pVM-zEj^dijdS3Sb1)*-o>tH4sibCQhGRyhUUR!l7B>fe5cxf+ z@3Z4b7I*xJaW{~Kdc^%+OBNo6gQI{+<53SB{V>6L_Cknm@O7L5pr4pKZPK3Y2CNFft(pSQW{Q30TL+Phg5%P?)a6QSd)8#Xfww2aXp@ z(xtQR`uZ-N49*(wRU&7d`6`iL)3?(-w-(-jB~Yh}$Lr;#vN;6ll+74^fHKgz=`k+@ z(0m%iIbBk8k#q>9>qr{MIu5J6Odoy+r(jJc#fq)*?P;@!w5hj49;N*q&j+yqLB%H^ zfIPXh&qA-wdhetT-S_qcu`WlfRSao3P7k6xjx-&o8+wBPb<1(^^hi7$n=-$R;v*Cv zqxclXMNd&0o){cI4X~LBoMma2Zp~Y>mZ|KpUeR&9umMXLgPtGZo64E=t7Ao-LCKjo pn;F$7j7Yv`jD0+gTsYovng3c}8eb-F@fB`KpeSgTHb>`j{{lkFGVuTa literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_smarty.cpython-35.pyc b/tests/__pycache__/test_smarty.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01922fdfde2c71aea1e6372e6e3348bff5638044 GIT binary patch literal 1487 zcmZuw&2Aev5FYNIRx8;u0JS@l>kh>7NK%OTyBo6$I zI1W$(vnE{QSx;dOgU0H;=i_)1^K{}5^O%X{3;KpKe?+;^rnmnyJZ(9il=CG^rx)Vb z@7Jn-ba?pF{iDMN5B>4d7Z=ojxt!*-5Zo6u&VTedrT*hrqhHT{A9gF4ES=DT(_{b1 z@M&d#@mv3NFg*3oOXeq3#A(L6-X~-P27x8rvpHq4D4BEyi+oI(v_|xekoKtjgBAgi zt(}WZ)Tw$Hs64{Se?UQzT_g*ovE>*^LQ;`nWKiiAAbG>UkzNI;IGGSUs)qV2ygp8T zfIRy4YNJCB5+-O2KE8q%e4oqlS@JKc@_)$Y*9=^S{D91W^sOU85bp% zC#$#D)&9}R_Z(kET%^Tx?QO_qcyJqFLwsp#kPSHrJGXE)WF0!%dbILBV@cu#`^?6t zkd1zstB#P3myFI?Ig!>N&Z%_kRG6jQnvaEG>3AV1Q|~R^*D*`uaYm(mrV^K}m~+a+ z>7R=@lU9~;!Cd9&O{s{4>IEK{tf|kQvsibbbSi_cz)G}~Lr0a|04GiQ3zjXv!AGFfCwZ%2{Jy0Wk~hGF-VP<^o@ zRBEh&LiHC{th9}`sds{wY(!B~P7uvq6sb_L<$m2lU42bW98=ApDXr-5-1z9Oq5a zO??6{^cj2%Ut?~)@)f-D`(^jE$W04fLkUWSwwl4(Z((cP34CKI;Oh};zemt=h^q7ryd^q4irz)vT|M|08z0s`O`!TmE zlYS72O5rC+K^l&s7MdFT4uWlCph+C&Y7_c7}{I#Igpo&WnJ`i#+I=W+%7yzf~ zSPf;luB!|e$SfsC(3C!x;&mXq(3TM_-2X;+9#;6ZUhT#`R_*NZDrN6jSUnt`VO5`& zj$U${Ub2>`91he9_Ch-@`yQ6{+A-&>Ef*0Q3Pp^gJ5xL=|CrNG^FwQDe%B#M_(?-2 zBb~u_BceP5gOsu5SgM$S+x7#&getq*c|jc2IR|7p80Q##4t_N4B+TRNtJA20Xvk$5 zx<_1`)3}Uhor4W>SElPa7B3>w5{46?U!I08x-pk4DcHA9gRN&wKt7AXwC)_?f}P5V z^7V)g4K`Ee1S^9)B0Y}EM{U(Og=_1KH?iG)U!?g_ndR! zMwT2e)>&~cYhR2p=rg{V!hCC{D<;P`oOzY^yvXk{&r=1@>&3JmVqWyTw|zfMdUyfB zl`$+~xQGES4#)Q?b=UB*;dtRV8VsE+(Bnn3n1PRlQTI4GHRpLWZo^LbeiTULqRNvm j5XTor<&j3shrbwHa@Jld|1g352)7q_m2zg$STcVDdRebl literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_terminal_formatter.cpython-35.pyc b/tests/__pycache__/test_terminal_formatter.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5803be49e6b9862f087a1bd56702314e514bf90 GIT binary patch literal 2022 zcmb7FOLH4V5boL4%PYyx*hwG>OAb^NV%Z4=RWT_@um!jS;=<51(os6=boNdcYocZnQGPf`Ngl_{*njy z3(mD1$`7&27YJQ|79xYL1tEjTf|do0#x{gDv}`knat>NKBj+H@LsWoPAzPP+un18J zTBU4UfN%sN2U-q}i_j_q$H@xtD)0*Q0rp0Lm!Z$-YmEWV!QMD@OJ+C$-4We&fQ1fG{0Qi*sN#A zgh7YLk}tTQZ7yZ=E6a%tkAXeUX8h2EX#H*+(Z7S65 zEU%$lSr6BDi*nr67jj6wwUYk=RBP24G5Vt(KqM~x$#c9srL@GBhkm6=f^U*P6k*A zz(fVHL*lTJ{vmdG3xQ*9poNImAaN;MFj4W#nasgN&74sRUYX1YEoH^crkgaALy=USv)_#=CRo?)_tUj1C(zm{Y3?8;uoYzAj_| z)#ate*K1yL?JG<&6F^4kv`gP6-&Ugt2MwzZw4v^4aCSTkRlQn@b0IhNix24x^Yt~#{=h@eQVI+-d9=2msZdP z`fTR(*^;L03>huQl+sG$Nn=Cj!T_&uu;x6KJj1u&aHxy;CijAniz1#ksLLiAv*=?* ok~ilVIdxN)9%Rw^q=YLZ@msLQE%etKXZTkrumZbcjae1@Z;QO<3;+NC literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_textfmts.cpython-35.pyc b/tests/__pycache__/test_textfmts.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98d1fdb4d73149aa3143b6547948ceb2cdbf38fd GIT binary patch literal 1642 zcmd5+O>fgc5S{f`TsLi@d=@SioFX7D2sl(w0imKuC?IMO%EfZyO`2lIW_N>{sBkIV zIl*t>#Q)hVC;mcD%s5GjC`cSx+0Wyh-SOMEZ+&)Q!TZwx{PL3p@Ev9vzQaAdWsHyj zv=A922BZvH7~o|>YCvW}%Y@8=mIav&EgLciS`IK8VL@7f%!QT<>``Jv;=l*2;{a!{ zI|m0i*Q1(SwaVz5=VN;i%U;_Lxm42c0OxkPnzT|8EgRO_- z{FBFxjpo)yNhske?xnKs{XkuyS+lhJwBRCExzJ8?kZp6Jtq@sjJIr76evRq5O{Iz_ ze2gL`<(n+O~gM!^t`iOwh#3X3A6iWFOLBp`~MR8TZmyUz#PLsF~Fun0AJ zQsoBTas@#F902SCL}h&n@DqU3S+iye2Zv}oC3d=!#d{BXoepxgBu_hELCjPU#Jr7nNjSp* zjq{EX?OikpQZ=As%)FY@*HRfwbxn9@&;oZY*vFA}89T6Bfqe!C<)vIoVLXp3|7gI< zfq@Ps5$xvZ=A(_!5B$wAd=^}HVuh1da!eN0fh>HRp5vyL_5B9Ru^X_!=eBB#a z^gLwint8Q3K`YQ!GtRg+!?-JG*?K;fk_)x*W)P>^N_$cXm-@XfSCJxjNNuL*5mR{7 z?{-97no~RDY$^X3sx)Ak^uGU#(5oyxi~W+4z#LQczbV?LyFN(4}8Ke|fqlk<$&WHu#a-M(=@eH++ByG5; zAkbPRo#CocwW?m(SDV+BC`$4+7Ig>xo}zW=#p$7~m);WelMrscqQC4pm9jZ5r=`4c0qe82zz literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_token.cpython-35.pyc b/tests/__pycache__/test_token.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..38aa6a3898c26ef776c805ca49910415df741e48 GIT binary patch literal 1995 zcmaJ?-ELb&5S~3h{;Si5f}%zRaX{q4QWK|zauHR~kOZixOjR2yEYQ)3&-y1mK6ZB3 zRUIWrRd@tmf;(QINW8}0a@AMhikVs44I$##JDxK$JG=XRv*WdumC7fte*ga00>EEz z;R#TGh(mvaA_Zup6p(t53239@bPw7d>po;Yi~?u}AihciNJIDqXM`XB zd)wQeZr0^zVknR zw0F>G9`OEBX_7&vw<@m@4`|ec4SBmAdR;soDi3jJ5)wf}lu$Z|JVK=HLyF&kb%rS| zupUBMgtWvuB2`ADDz@ArLM_xI6@qIICKNWDZmlHnE)f;$b&NvP6eDI>OPzU z8v~Z%JfMem55zpEz}6z0aI4LlXw*vfTB5a7=HPgmWQq=D3r(X2dC!J=k`0Uvd1JQt z80k|^Bbt^nCkC4_5OGy>%Bu&Pvvu&)hBai z>IM(0S;ma*)?{X{lhM5zOnH-zT|xn(?3KL@@8s4Jqpg33E+Hf60vrt4pQt#<99|@S z27z%o7YGd_df6QiMho`>ObT-FUNPHYiw?()55v+jfnx@V77KUrN;fa*_Bfx-Ecp!! zipl`VsyMP*YAPL9s{`!-i}m!7K;uY7s4bZNGRd^GZ)+wMgWmwGij-BTYxu)_IdOv~ zJ1)A@ykiFAT;E2UuA%_(K7G6oQT~UIW%!a0+V`@A|G*c6fOGL;!D1mJCRm+h^x?q( zO&+}Xm`n&YM(qEz0Y74)`*0R;p@(o9Ko5wYqXL{V;NrLr&rFg01V1Va^w0xk=uS3Y z?D5=r#`|wFQY>1zzYPOWFS%SwfY%mNqpRz|8oI^tOL)d)1dS7ab93`G)!E6r8!GB2 z8oQXnhSpE=Xq?MvC}%s-hN_hvL)V+F-Nydz)BU*h!;^!i4Y-97@;1a9HPW`CrAcKs znP$colF3Bosr56N+n|eWs1`CmZC{&-TA^uTXvOo(e7(gNLMQpa%;HX8c7`8etbPXt zh#O)>6vVoCPuvoLw=QmqliQcB(#4re_NW~MIQTYwj*4Rsd82#7-N*PuokN^^%|!=t z##E4l;lqv-GAvxCw&cqBkyh)N+?G-)Cj?K;b2UlFy?oFrAC#i7N8QB$jelp@E6aGk zleJ5ynuj%NMO%vFJQ+#uTCw}zLA@Hs)cBl7t-FjnWfHtDpu9q(ka{7B zkFpYFW%?GUl}UQEzeMNQSml$ut;+1zYJ|2ewTbl6(8y?Sq9QYp(b0IQjT(;o(P)w# z<25hcGij1xuG`gTU`CymuuBWKF(_k@ z4phpM^X5T$h^`+%NMHsp$T?JSVyO56X4VU6!LJ996)+2J{qdX)b4vwI;^w0xsZqw^!PBPRX_c*y|FuDy7;P(kpfN_-(iAZ?)>G0}(#dE#%w@~B zftLB6^|90n{S&Dx@b<5@)xl&WSNpqaHIrY^sB(og#jM81Vx-Y%t<|SU@>&IKh^qAxJft@P3(2u@l^}_6ZE#mful)^9ACH zDr2B3EJ7Al7RwN}G)hc5u;pYrmE){cQvBamq`kVEKpi*A`I-M&ol#f^)EWY5`6$LtpdmsEUJtP*JRx=m6wWG9@NggLZg}OodE%v4?Lt#gR)FSkG`6hDh~g zjsT|dCZVQq7`Vf-=OZjW@ZY+~^01@0x`uzEwuaB2L(p%m{Z90ZCuYmdEV|Rwt@Q|^ zX3Gj0I2mz%%gmNA>Lc&jh$2upgj@uzx1rS%M%Ew5V|9bIx*rEX%m<~`)q#Wk^lF zprFGz9w#Fi$F>^B#WM`O7RT&lF{7@sWBdo|4Ho}+=QPeA#dWiSt~q;aq88Sw&emGC zl{n5OX&k#uwjrw9us7;ethC|$0Z?3p1-bg%);==B+#$8$Hnwaez{fYe%mo|1SGfN^ R=c9WQ${susHLoEW{@-1RszLw& literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_using_api.cpython-35.pyc b/tests/__pycache__/test_using_api.cpython-35.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d30576c22039963b7e54ef369a838a3e6a17db00 GIT binary patch literal 1717 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 M1 -> x " + x); } @@ -148,10 +151,10 @@ class IntPair { var ip = new IntPair(17,2); write(ip); -var targetDom: {1..10}, +var targetDom = {1..10}, target: [targetDom] int; coforall i in targetDom with (ref target) { - targetDom[i] = i ** 3; + target[i] = i ** 3; } var wideOpen = 0o777, @@ -166,9 +169,11 @@ private module M3 { } private iter bar() { - + for i in 1..10 { + yield i; + } } private var x: int; -} \ No newline at end of file +} diff --git a/tests/examplefiles/sparql.rq b/tests/examplefiles/sparql.rq index 70b594e..d979d20 100644 --- a/tests/examplefiles/sparql.rq +++ b/tests/examplefiles/sparql.rq @@ -29,8 +29,8 @@ SELECT ?person (COUNT(?nick) AS ?nickCount) { ex:float5 .0e1 ; ex:float6 5e11 ; ex:float7 1. ; - ex:À "" ; - ex:豈 "" ; + ex:aUnicodeÀExample "somestring" ; + ex:catName "Kitty", "Kitty_" ; # object list ex:escape "\n\u00c0\U00010000"; ex:catAge ?catage ; dcterms:description "Someone with a cat called \"cat\"."@en . # language tag diff --git a/tests/string_asserts.pyc b/tests/string_asserts.pyc index 7507c0cc1e6a18f4a819f8aa1929df0ea85a8c51..b4ba7782a2dc348bea25d0849e4e60996d4ff93a 100644 GIT binary patch delta 16 XcmX@ad5Dvp`7s*>|%505En1y#N3J diff --git a/tests/test_basic_api.pyc b/tests/test_basic_api.pyc index 69c87af5dc6fc4c211be37fd362ed80f253d28af..648b15cec8ccf110e4a7b19c3e85cbf038e123a1 100644 GIT binary patch delta 16 XcmX??buNpY`7s+1*V6JHrN4 diff --git a/tests/test_cfm.pyc b/tests/test_cfm.pyc index b14053cd3e303617a83d6be0453fa442f6e5d8e6..3c498e382c7f9f975d4670add64241cd9b595330 100644 GIT binary patch delta 16 Xcmcc0ca@Kw`7s+5Ol7GGzsW diff --git a/tests/test_clexer.pyc b/tests/test_clexer.pyc index d9c3c006cd48702285756b453f4137e3153ac104..cf886e9a4def6e3bdce7b497a8218ed2a0e6ccd8 100644 GIT binary patch delta 16 XcmZ2wzRH}P`7s*%wO#05X*Y=l}o! diff --git a/tests/test_cmdline.pyc b/tests/test_cmdline.pyc index 5dddd82b5bf6495c4fd5507d2e59ab83794be88e..879a0b61cdf42ee7055bbcccd640db7f97beacc9 100644 GIT binary patch delta 16 XcmZqiY4Kra{>;l&*mhte`(IT6F@pw1 delta 16 XcmZqiY4Kra{>;lYJ#X4Z_P?qCF)Ict diff --git a/tests/test_examplefiles.pyc b/tests/test_examplefiles.pyc index 71a3965864678ccf217fb424e8be2fa87a9dabd4..0de62e1e69c0372dfefce8c2a9c19d8804516fba 100644 GIT binary patch delta 16 XcmbQEJV%+G`7{A5+F7pMb delta 16 YcmbQEJV%+G`7s*{2Eu04|#ai~s-t diff --git a/tests/test_ezhil.pyc b/tests/test_ezhil.pyc index 6e02f6e9daa6afba78901edb49ef02d9a2c1bd4a..1040140175ead1b7a330dff4598bb17737b8a1fc 100644 GIT binary patch delta 16 Xcmcbmc1w+&`7s*@J}vHL(TG diff --git a/tests/test_html_formatter.py b/tests/test_html_formatter.py index 567de51..596d9fb 100644 --- a/tests/test_html_formatter.py +++ b/tests/test_html_formatter.py @@ -116,7 +116,7 @@ class HtmlFormatterTest(unittest.TestCase): fmt = HtmlFormatter(**optdict) fmt.format(tokensource, outfile) html = outfile.getvalue() - self.assertTrue(re.search("
", html))
+        self.assertTrue(re.search("
", html))
 
     def test_lineanchors_with_startnum(self):
         optdict = dict(lineanchors="foo", linenostart=5)
@@ -124,7 +124,7 @@ class HtmlFormatterTest(unittest.TestCase):
         fmt = HtmlFormatter(**optdict)
         fmt.format(tokensource, outfile)
         html = outfile.getvalue()
-        self.assertTrue(re.search("
", html))
+        self.assertTrue(re.search("
", html))
 
     def test_valid_output(self):
         # test all available wrappers
diff --git a/tests/test_html_formatter.pyc b/tests/test_html_formatter.pyc
index 23267695b61e6247607e8d4a9db915edea4c7fb4..e4909201f6064614343333b6b39cb37193929942 100644
GIT binary patch
delta 70
zcmca$`^uJ``7APHU&kgb~eQYiFtN5`XFkv2Y)gn4ynxovU~sw
Ci4~Cm

delta 44
rcmaE5d%>2S`7s*)91wL>U+uYzm4}H;3{kGa`6r1!VaEFAfY^

diff --git a/tests/test_inherit.pyc b/tests/test_inherit.pyc
index 1edc28a772e842ea4c20d6441fdf0f2486a65f60..9e55ba3a6bca5008741457361de5bdcf333ed0eb 100644
GIT binary patch
delta 16
Xcmdllzh9o6`7^t}YGT{aX

delta 16
Ycmdllzh9o6`7s*>~^*05XXM>i_@%

diff --git a/tests/test_irc_formatter.pyc b/tests/test_irc_formatter.pyc
index af1ecee231e86f679002ca463bb2af18512c0d20..1ba69f826abbf874f43b0466f7b3aed1e9f24a0d 100644
GIT binary patch
delta 16
XcmZ3=wUmpU`7~gFCEK3Ci

delta 16
XcmZ3=wUmpU`7s+2vRPEAs^D

diff --git a/tests/test_java.pyc b/tests/test_java.pyc
index b5d8ed44cd97471c6fe744e84bc1e27f8ae8a4b0..09c50a89d4ec4f412e4ef375952e0a869e78b907 100644
GIT binary patch
delta 16
XcmX>vd|sHH`7?b$@Gm8cp

delta 16
YcmX>vd|sHH`7~GltH@OCW

delta 16
Ycmeyu|An8O`7s+267Q05@R;l&*mhtedo>>bD+mQk

delta 16
XcmZpYZIWeY{>;lYJ#X4Z_G&%=DzF7F

diff --git a/tests/test_objectiveclexer.pyc b/tests/test_objectiveclexer.pyc
index 90e072a31cb081e7537f7b39601f4ed0786ee221..ab69bd615a112e8d5a40edb3cdc8f6dad9f52fe2 100644
GIT binary patch
delta 16
XcmX>paZ-Yv`7`puYGFkpaZ-Yv`7s*`0U*G6Ds7

diff --git a/tests/test_perllexer.pyc b/tests/test_perllexer.pyc
index aef1057054092ecee46a27d79769e3e66b34f424..f3c373c816bff4f1efc3f7c999983bb24b764eff 100644
GIT binary patch
delta 16
XcmdmKwbP27`7_)NxG$RGM

delta 16
XcmdmKwbP27`7s*^OiYGs^{?

diff --git a/tests/test_qbasiclexer.pyc b/tests/test_qbasiclexer.pyc
index 2ca36ac4ba5f7b2c7ff2a6dfc61ad976df970e4f..040a51e0ec8a4bbe9d208e250c7281b4200260d7 100644
GIT binary patch
delta 16
XcmeC@>*r%<{>;l&*mhteI|n-eDg6Y^

delta 16
XcmeC@>*r%<{>;lYJ#X4Zb`Ev`DWwFl

diff --git a/tests/test_regexlexer.pyc b/tests/test_regexlexer.pyc
index 9316febaead500f134151d41148a6195ed369377..b6349c0239ed045597e4e102f412ecaecc2b71ae 100644
GIT binary patch
delta 16
Xcmdlcv`vVe`7s+4VUAF82j6

diff --git a/tests/test_regexopt.pyc b/tests/test_regexopt.pyc
index 0c57b3bfed343f089bbd3b07c5dcc1eb92d10569..1d71318f4bd655e02a96d129d87c4b54e28de4b1 100644
GIT binary patch
delta 16
XcmbO&HCu|E`7>|7XEYk%K

delta 16
XcmbO&HCu|E`7s*+qB(EPDj=

diff --git a/tests/test_rtf_formatter.pyc b/tests/test_rtf_formatter.pyc
index 1820e1e23c496eb22988c15709aca0512f56c7ad..7fd1861914a3113536fb7566ddbd321c70916e0d 100644
GIT binary patch
delta 16
XcmZotYf@up{>;l&*mhte`)?rtEeHkS

delta 16
XcmZotYf@up{>;lYJ#X4Z_TNGPEU*Q|

diff --git a/tests/test_ruby.pyc b/tests/test_ruby.pyc
index b826cda220cb5b650c2047db343f845f4e30c931..37dcde976b41fb38e60d4a248727f4d68ef60831 100644
GIT binary patch
delta 16
XcmbQQJYSie`7@x%bFH;4v

delta 16
YcmbQQJYSie`7s*=Gm>051Cll>h($

diff --git a/tests/test_shell.pyc b/tests/test_shell.pyc
index bcb88078493471ca74297402a82feb509c11764a..ab1a2b514e8fa5880d9c2925b2f7b856120f6021 100644
GIT binary patch
delta 16
Xcmdlfu~UMb`7_$8QFj@s<

delta 16
Xcmdlfu~UMb`7s*^PJrFaiZg

diff --git a/tests/test_smarty.pyc b/tests/test_smarty.pyc
index 283d2405f2d4a8322c75758755377ec45bdd0b4d..8283809e2ebebe69a1785d6d646de70a721fc279 100644
GIT binary patch
delta 16
XcmbQmJByc{`7s*(b9B04wMPPXGV_

diff --git a/tests/test_string_asserts.pyc b/tests/test_string_asserts.pyc
index 12afe494f3541dd15a98f4469a343accfcbd5838..ed86064c0b8fb00ff08ab453a46b137fff477fff 100644
GIT binary patch
delta 16
XcmaFJ|B#=Z`7s*>AA}05t&yDF6Tf

diff --git a/tests/test_terminal_formatter.pyc b/tests/test_terminal_formatter.pyc
index 387edbcd4a98461dc0d92df324a5a12ecb54977f..0bd6ab38023b2b96ea5580e00de1ebdc2024c296 100644
GIT binary patch
delta 16
Xcmew^_+5~l`7>oG)I8p|T

delta 16
Ycmew^_+5~l`7s**|aq05|#uZ~y=R

diff --git a/tests/test_textfmts.pyc b/tests/test_textfmts.pyc
index ff55bc5563db904773870256a9ebe035c88f337b..0ddebea6d4d9799fd35d294d0c5b341f73b4ff40 100644
GIT binary patch
delta 16
XcmdnQw~3FP`7s*|pgLE(HY|

diff --git a/tests/test_token.py b/tests/test_token.py
index c96bd9e..0c6b02b 100644
--- a/tests/test_token.py
+++ b/tests/test_token.py
@@ -7,6 +7,7 @@
     :license: BSD, see LICENSE for details.
 """
 
+import copy
 import unittest
 
 from pygments import token
@@ -44,3 +45,10 @@ class TokenTest(unittest.TestCase):
         for k, v in t.items():
             if len(v) > 1:
                 self.fail("%r has more than one key: %r" % (k, v))
+
+    def test_copying(self):
+        # Token instances are supposed to be singletons, so copying or even
+        # deepcopying should return themselves
+        t = token.String
+        self.assertIs(t, copy.copy(t))
+        self.assertIs(t, copy.deepcopy(t))
diff --git a/tests/test_token.pyc b/tests/test_token.pyc
index 5f113a30e036b53fbde83ee8f0f7733b9016fcc4..3686dd6f2903d1ed8c552ba166b360b7459c88c7 100644
GIT binary patch
delta 414
zcmY+9u}T9$5QhKR-P;(w!x&N+f*=y`3K7M^P6Zo9u(*KeHHX}tVu&WX+XxZSh`rns
z*xQ5%f|c)-7jQOO=&2X7&g<;QTtkk7>FejOqZGd;`QBkS2QQ8Knm|V&7RU&h
zL`ULMAy%MFAs1+SIAg)X6EFZyVm&-2qLm`1X2AVijy*)JP>mjGlc+lS6z@chQCE%W
zzUija7@%1SNK>5_Xr7d)Qo5+1=QpxhXmv(!%q5DNtc9nM5v1gy(*%`;!W=@SDff3Xi;_+ge6X_Ly~0OG)X2Si&|;m|Frq!i;DaP
Dm102w

delta 171
zcmdlkxR76(`7*P*$y~%snT^0C2Hn0H+HYQFW&;T(@*nvcRd`f_^!FGPwo@

delta 16
YcmX@Ze}s*^jaV05V|(>Hq)$

diff --git a/tests/test_using_api.pyc b/tests/test_using_api.pyc
index 59632a6ee98c9dda0203bccf87c6cb848fc6c636..8c4b064afc72fdf78d84157fe1507ec5aebcea8f 100644
GIT binary patch
delta 16
XcmZ3>zm}h!`7zm}h!`7s*_W{c04{+AjQ{`u

diff --git a/tests/test_util.pyc b/tests/test_util.pyc
index 8f8218bbf54e51636a255cd22282762b65809c5e..2650b01ca05cb5833b9de1dd13a85f5d8bf5d5c0 100644
GIT binary patch
delta 16
XcmZ4FyU3TF`7s*=MT(05k{&2LJ#7

-- 
2.34.1